bybit-api 3.10.30 → 4.0.0-beta.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 (146) hide show
  1. package/README.md +301 -178
  2. package/lib/index.d.ts +0 -11
  3. package/lib/index.js +0 -11
  4. package/lib/index.js.map +1 -1
  5. package/lib/rest-client-v5.d.ts +1 -1
  6. package/lib/rest-client-v5.js +1 -1
  7. package/lib/spot-client-v3.d.ts +8 -81
  8. package/lib/spot-client-v3.js +7 -172
  9. package/lib/spot-client-v3.js.map +1 -1
  10. package/lib/types/index.d.ts +1 -2
  11. package/lib/types/index.js +1 -2
  12. package/lib/types/index.js.map +1 -1
  13. package/lib/types/request/index.d.ts +0 -1
  14. package/lib/types/request/index.js +0 -1
  15. package/lib/types/request/index.js.map +1 -1
  16. package/lib/types/request/v5-account.d.ts +1 -1
  17. package/lib/types/request/v5-asset.d.ts +1 -1
  18. package/lib/types/request/v5-market.d.ts +1 -1
  19. package/lib/types/request/v5-position.d.ts +1 -1
  20. package/lib/types/request/v5-pre-upgrade.d.ts +1 -1
  21. package/lib/types/request/v5-spot-leverage-token.d.ts +1 -1
  22. package/lib/types/request/v5-trade.d.ts +1 -1
  23. package/lib/types/request/v5-user.d.ts +1 -1
  24. package/lib/types/response/v5-account.d.ts +1 -1
  25. package/lib/types/response/v5-asset.d.ts +1 -1
  26. package/lib/types/response/v5-market.d.ts +1 -1
  27. package/lib/types/response/v5-position.d.ts +1 -1
  28. package/lib/types/response/v5-spot-leverage-token.d.ts +1 -1
  29. package/lib/types/response/v5-trade.d.ts +1 -1
  30. package/lib/types/response/v5-user.d.ts +1 -1
  31. package/lib/types/{request/spot.js → shared-v5.js} +1 -1
  32. package/lib/types/shared-v5.js.map +1 -0
  33. package/lib/types/shared.d.ts +1 -19
  34. package/lib/types/websockets/index.d.ts +3 -0
  35. package/lib/types/websockets/index.js +20 -0
  36. package/lib/types/websockets/index.js.map +1 -0
  37. package/lib/types/websockets/ws-api.d.ts +73 -0
  38. package/lib/types/websockets/ws-api.js +10 -0
  39. package/lib/types/websockets/ws-api.js.map +1 -0
  40. package/lib/types/websockets/ws-confirmations.d.ts +13 -0
  41. package/lib/types/{websocket.events.js → websockets/ws-confirmations.js} +1 -1
  42. package/lib/types/websockets/ws-confirmations.js.map +1 -0
  43. package/lib/types/{websocket.events.d.ts → websockets/ws-events.d.ts} +9 -3
  44. package/lib/types/websockets/ws-events.js +11 -0
  45. package/lib/types/websockets/ws-events.js.map +1 -0
  46. package/lib/types/{websockets.d.ts → websockets/ws-general.d.ts} +35 -10
  47. package/lib/types/{v5-shared.js → websockets/ws-general.js} +1 -1
  48. package/lib/types/websockets/ws-general.js.map +1 -0
  49. package/lib/util/BaseRestClient.d.ts +1 -1
  50. package/lib/util/BaseRestClient.js +15 -39
  51. package/lib/util/BaseRestClient.js.map +1 -1
  52. package/lib/util/BaseWSClient.d.ts +221 -0
  53. package/lib/util/BaseWSClient.js +733 -0
  54. package/lib/util/BaseWSClient.js.map +1 -0
  55. package/lib/util/index.d.ts +1 -2
  56. package/lib/util/index.js +1 -2
  57. package/lib/util/index.js.map +1 -1
  58. package/lib/util/logger.d.ts +2 -5
  59. package/lib/util/logger.js +3 -12
  60. package/lib/util/logger.js.map +1 -1
  61. package/lib/util/requestUtils.d.ts +7 -10
  62. package/lib/util/requestUtils.js +6 -33
  63. package/lib/util/requestUtils.js.map +1 -1
  64. package/lib/util/typeGuards.d.ts +7 -1
  65. package/lib/util/typeGuards.js +41 -5
  66. package/lib/util/typeGuards.js.map +1 -1
  67. package/lib/util/webCryptoAPI.d.ts +10 -0
  68. package/lib/util/webCryptoAPI.js +69 -0
  69. package/lib/util/webCryptoAPI.js.map +1 -0
  70. package/lib/util/websockets/WsStore.d.ts +71 -0
  71. package/lib/util/websockets/WsStore.js +269 -0
  72. package/lib/util/websockets/WsStore.js.map +1 -0
  73. package/lib/util/websockets/WsStore.types.d.ts +50 -0
  74. package/lib/util/websockets/WsStore.types.js +14 -0
  75. package/lib/util/websockets/WsStore.types.js.map +1 -0
  76. package/lib/util/websockets/index.d.ts +3 -0
  77. package/lib/util/websockets/index.js +20 -0
  78. package/lib/util/websockets/index.js.map +1 -0
  79. package/lib/util/websockets/websocket-util.d.ts +92 -0
  80. package/lib/util/websockets/websocket-util.js +280 -0
  81. package/lib/util/websockets/websocket-util.js.map +1 -0
  82. package/lib/websocket-client.d.ts +107 -114
  83. package/lib/websocket-client.js +422 -716
  84. package/lib/websocket-client.js.map +1 -1
  85. package/package.json +4 -4
  86. package/lib/account-asset-client-v3.d.ts +0 -87
  87. package/lib/account-asset-client-v3.js +0 -154
  88. package/lib/account-asset-client-v3.js.map +0 -1
  89. package/lib/account-asset-client.d.ts +0 -46
  90. package/lib/account-asset-client.js +0 -108
  91. package/lib/account-asset-client.js.map +0 -1
  92. package/lib/contract-client.d.ts +0 -136
  93. package/lib/contract-client.js +0 -251
  94. package/lib/contract-client.js.map +0 -1
  95. package/lib/copy-trading-client.d.ts +0 -60
  96. package/lib/copy-trading-client.js +0 -114
  97. package/lib/copy-trading-client.js.map +0 -1
  98. package/lib/inverse-client.d.ts +0 -104
  99. package/lib/inverse-client.js +0 -213
  100. package/lib/inverse-client.js.map +0 -1
  101. package/lib/inverse-futures-client.d.ts +0 -217
  102. package/lib/inverse-futures-client.js +0 -224
  103. package/lib/inverse-futures-client.js.map +0 -1
  104. package/lib/linear-client.d.ts +0 -112
  105. package/lib/linear-client.js +0 -225
  106. package/lib/linear-client.js.map +0 -1
  107. package/lib/spot-client.d.ts +0 -46
  108. package/lib/spot-client.js +0 -131
  109. package/lib/spot-client.js.map +0 -1
  110. package/lib/types/request/spot.d.ts +0 -79
  111. package/lib/types/request/spot.js.map +0 -1
  112. package/lib/types/v5-shared.js.map +0 -1
  113. package/lib/types/websocket.events.js.map +0 -1
  114. package/lib/types/websockets.js +0 -3
  115. package/lib/types/websockets.js.map +0 -1
  116. package/lib/types/ws-events/failed-topic-subscription-confirmation.d.ts +0 -4
  117. package/lib/types/ws-events/failed-topic-subscription-confirmation.js +0 -3
  118. package/lib/types/ws-events/failed-topic-subscription-confirmation.js.map +0 -1
  119. package/lib/types/ws-events/succeeded-topic-subscription-confirmation.d.ts +0 -4
  120. package/lib/types/ws-events/succeeded-topic-subscription-confirmation.js +0 -3
  121. package/lib/types/ws-events/succeeded-topic-subscription-confirmation.js.map +0 -1
  122. package/lib/types/ws-events/topic-subscription-confirmation.d.ts +0 -7
  123. package/lib/types/ws-events/topic-subscription-confirmation.js +0 -3
  124. package/lib/types/ws-events/topic-subscription-confirmation.js.map +0 -1
  125. package/lib/unified-margin-client.d.ts +0 -140
  126. package/lib/unified-margin-client.js +0 -270
  127. package/lib/unified-margin-client.js.map +0 -1
  128. package/lib/usdc-option-client.d.ts +0 -110
  129. package/lib/usdc-option-client.js +0 -196
  130. package/lib/usdc-option-client.js.map +0 -1
  131. package/lib/usdc-perpetual-client.d.ts +0 -97
  132. package/lib/usdc-perpetual-client.js +0 -191
  133. package/lib/usdc-perpetual-client.js.map +0 -1
  134. package/lib/util/WsStore.d.ts +0 -57
  135. package/lib/util/WsStore.js +0 -97
  136. package/lib/util/WsStore.js.map +0 -1
  137. package/lib/util/browser-support.d.ts +0 -1
  138. package/lib/util/browser-support.js +0 -26
  139. package/lib/util/browser-support.js.map +0 -1
  140. package/lib/util/node-support.d.ts +0 -2
  141. package/lib/util/node-support.js +0 -21
  142. package/lib/util/node-support.js.map +0 -1
  143. package/lib/util/websocket-util.d.ts +0 -68
  144. package/lib/util/websocket-util.js +0 -506
  145. package/lib/util/websocket-util.js.map +0 -1
  146. /package/lib/types/{v5-shared.d.ts → shared-v5.d.ts} +0 -0
@@ -0,0 +1,73 @@
1
+ import { APIID, WS_KEY_MAP } from '../../util';
2
+ import { AmendOrderParamsV5, CancelOrderParamsV5, OrderParamsV5 } from '../request';
3
+ import { OrderResultV5 } from '../response';
4
+ import { WsKey } from './ws-general';
5
+ export type WSAPIOperation = 'order.create' | 'order.amend' | 'order.cancel';
6
+ export type WsOperation = 'subscribe' | 'unsubscribe' | 'auth' | 'ping' | 'pong';
7
+ export declare const WS_API_Operations: WSAPIOperation[];
8
+ export interface WsRequestOperationBybit<TWSTopic extends string> {
9
+ req_id: string;
10
+ op: WsOperation;
11
+ args?: (TWSTopic | string | number)[];
12
+ }
13
+ export interface WSAPIRequest<TRequestParams = undefined, TWSOperation extends WSAPIOperation = any> {
14
+ reqId: string;
15
+ op: TWSOperation;
16
+ header: {
17
+ 'X-BAPI-TIMESTAMP': string;
18
+ 'X-BAPI-RECV-WINDOW': string;
19
+ Referer: typeof APIID;
20
+ };
21
+ args: [TRequestParams];
22
+ }
23
+ export interface WSAPIResponse<TResponseData extends object = object, TOperation extends WSAPIOperation = WSAPIOperation> {
24
+ wsKey: WsKey;
25
+ /** Auto-generated */
26
+ reqId: string;
27
+ retCode: 0 | number;
28
+ retMsg: 'OK' | string;
29
+ op: TOperation;
30
+ data: TResponseData;
31
+ header?: {
32
+ 'X-Bapi-Limit': string;
33
+ 'X-Bapi-Limit-Status': string;
34
+ 'X-Bapi-Limit-Reset-Timestamp': string;
35
+ Traceid: string;
36
+ Timenow: string;
37
+ };
38
+ connId: string;
39
+ }
40
+ export type Exact<T> = {
41
+ [K: string]: never;
42
+ } & {
43
+ [K in keyof T]: T[K];
44
+ };
45
+ /**
46
+ * List of operations supported for this WsKey (connection)
47
+ */
48
+ export interface WsAPIWsKeyTopicMap {
49
+ [WS_KEY_MAP.v5PrivateTrade]: WSAPIOperation;
50
+ }
51
+ /**
52
+ * Request parameters expected per operation
53
+ */
54
+ export interface WsAPITopicRequestParamMap {
55
+ 'order.create': OrderParamsV5;
56
+ 'order.amend': AmendOrderParamsV5;
57
+ 'order.cancel': CancelOrderParamsV5;
58
+ }
59
+ /**
60
+ * Response structure expected for each operation
61
+ */
62
+ export interface WsAPIOperationResponseMap {
63
+ 'order.create': WSAPIResponse<OrderResultV5, 'order.create'>;
64
+ 'order.amend': WSAPIResponse<OrderResultV5, 'order.amend'>;
65
+ 'order.cancel': WSAPIResponse<OrderResultV5, 'order.cancel'>;
66
+ ping: {
67
+ retCode: 0 | number;
68
+ retMsg: 'OK' | string;
69
+ op: 'pong';
70
+ data: [string];
71
+ connId: string;
72
+ };
73
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WS_API_Operations = void 0;
4
+ const util_1 = require("../../util");
5
+ exports.WS_API_Operations = [
6
+ 'order.create',
7
+ 'order.amend',
8
+ 'order.cancel',
9
+ ];
10
+ //# sourceMappingURL=ws-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-api.js","sourceRoot":"","sources":["../../../src/types/websockets/ws-api.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAkBlC,QAAA,iBAAiB,GAAqB;IACjD,cAAc;IACd,aAAa;IACb,cAAc;CACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface WebsocketTopicSubscriptionConfirmationEvent {
2
+ op: 'subscribe';
3
+ req_id: string;
4
+ conn_id: string;
5
+ ret_msg: string;
6
+ success: boolean;
7
+ }
8
+ export interface WebsocketSucceededTopicSubscriptionConfirmationEvent extends WebsocketTopicSubscriptionConfirmationEvent {
9
+ success: true;
10
+ }
11
+ export interface WebsocketFailedTopicSubscriptionConfirmationEvent extends WebsocketTopicSubscriptionConfirmationEvent {
12
+ success: false;
13
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=websocket.events.js.map
3
+ //# sourceMappingURL=ws-confirmations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-confirmations.js","sourceRoot":"","sources":["../../../src/types/websockets/ws-confirmations.ts"],"names":[],"mappings":""}
@@ -1,5 +1,12 @@
1
- import { CategoryV5, ExecTypeV5, OCOTriggerTypeV5, OrderCancelTypeV5, OrderCreateTypeV5, OrderRejectReasonV5, OrderSMPTypeV5, OrderSideV5, OrderStatusV5, OrderTimeInForceV5, OrderTriggerByV5, OrderTypeV5, PositionIdx, PositionSideV5, PositionStatusV5, StopOrderTypeV5, TPSLModeV5, TradeModeV5 } from './v5-shared';
2
- import { WsKey } from './websockets';
1
+ import WebSocket from 'isomorphic-ws';
2
+ import { CategoryV5, ExecTypeV5, OCOTriggerTypeV5, OrderCancelTypeV5, OrderCreateTypeV5, OrderRejectReasonV5, OrderSMPTypeV5, OrderSideV5, OrderStatusV5, OrderTimeInForceV5, OrderTriggerByV5, OrderTypeV5, PositionIdx, PositionSideV5, PositionStatusV5, StopOrderTypeV5, TPSLModeV5, TradeModeV5 } from '../shared-v5';
3
+ import { WsKey } from './ws-general';
4
+ export interface MessageEventLike {
5
+ target: WebSocket;
6
+ type: 'message';
7
+ data: string;
8
+ }
9
+ export declare function isMessageEvent(msg: unknown): msg is MessageEventLike;
3
10
  export interface WSPublicTopicEventV5<TTopic extends string, TType, TData> {
4
11
  id?: string;
5
12
  topic: TTopic;
@@ -146,7 +153,6 @@ export interface WSExecutionV5 {
146
153
  execId: string;
147
154
  execPrice: string;
148
155
  execQty: string;
149
- execPnl: string;
150
156
  execType: ExecTypeV5;
151
157
  execValue: string;
152
158
  execTime: string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMessageEvent = isMessageEvent;
4
+ function isMessageEvent(msg) {
5
+ if (typeof msg !== 'object' || !msg) {
6
+ return false;
7
+ }
8
+ const message = msg;
9
+ return message['type'] === 'message' && typeof message['data'] === 'string';
10
+ }
11
+ //# sourceMappingURL=ws-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-events.js","sourceRoot":"","sources":["../../../src/types/websockets/ws-events.ts"],"names":[],"mappings":";;AA+BA,wCAOC;AAPD,SAAgB,cAAc,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,GAAuB,CAAC;IACxC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AAC9E,CAAC"}
@@ -1,6 +1,6 @@
1
- import { RestClientOptions, WS_KEY_MAP } from '../util';
1
+ import { RestClientOptions, WS_KEY_MAP } from '../../util';
2
2
  /** For spot markets, spotV3 is recommended */
3
- export type APIMarket = 'inverse' | 'linear' | 'spot' | 'spotv3' | 'usdcOption' | 'usdcPerp' | 'unifiedPerp' | 'unifiedOption' | 'contractUSDT' | 'contractInverse' | 'v5';
3
+ export type APIMarket = 'v5';
4
4
  export type WsPublicInverseTopic = 'orderBookL2_25' | 'orderBookL2_200' | 'trade' | 'insurance' | 'instrument_info' | 'klineV2';
5
5
  export type WsPublicUSDTPerpTopic = 'orderBookL2_25' | 'orderBookL2_200' | 'trade' | 'insurance' | 'instrument_info' | 'kline';
6
6
  export type WsPublicSpotV1Topic = 'trade' | 'realtimes' | 'kline' | 'depth' | 'mergedDepth' | 'diffDepth';
@@ -13,9 +13,20 @@ export type WsPrivateTopic = WsPrivateInverseTopic | WsPrivateUSDTPerpTopic | Ws
13
13
  export type WsTopic = WsPublicTopics | WsPrivateTopic;
14
14
  /** This is used to differentiate between each of the available websocket streams (as bybit has multiple websockets) */
15
15
  export type WsKey = (typeof WS_KEY_MAP)[keyof typeof WS_KEY_MAP];
16
+ export type WsMarket = 'all';
16
17
  export interface WSClientConfigurableOptions {
18
+ /** Your API key */
17
19
  key?: string;
20
+ /** Your API secret */
18
21
  secret?: string;
22
+ /**
23
+ * Set to `true` to connect to Bybit's testnet environment.
24
+ *
25
+ * Notes:
26
+ *
27
+ * - If demo trading, `testnet` should be set to false!
28
+ * - If testing a strategy, use demo trading instead. Testnet market data is very different from real market conditions.
29
+ */
19
30
  testnet?: boolean;
20
31
  /**
21
32
  * Set to `true` to connect to Bybit's V5 demo trading: https://bybit-exchange.github.io/docs/v5/demo
@@ -24,25 +35,39 @@ export interface WSClientConfigurableOptions {
24
35
  */
25
36
  demoTrading?: boolean;
26
37
  /**
27
- * The API group this client should connect to.
38
+ * The API group this client should connect to. The V5 market is currently used by default.
28
39
  *
29
- * For the V3 APIs use `v3` as the market (spot/unified margin/usdc/account asset/copy trading)
40
+ * Only the "V5" "market" is supported here.
30
41
  */
31
- market: APIMarket;
32
- pongTimeout?: number;
42
+ market?: APIMarket;
43
+ /** Define a recv window when preparing a private websocket signature. This is in milliseconds, so 5000 == 5 seconds */
44
+ recvWindow?: number;
45
+ /** How often to check if the connection is alive */
33
46
  pingInterval?: number;
47
+ /** How long to wait for a pong (heartbeat reply) before assuming the connection is dead */
48
+ pongTimeout?: number;
49
+ /** Delay in milliseconds before respawning the connection */
34
50
  reconnectTimeout?: number;
35
- /** Override the recv window for authenticating over websockets (default: 5000 ms) */
36
- recvWindow?: number;
37
51
  restOptions?: RestClientOptions;
38
52
  requestOptions?: any;
39
53
  wsUrl?: string;
40
- /** If true, fetch server time before trying to authenticate (disabled by default) */
41
- fetchTimeOffsetBeforeAuth?: boolean;
54
+ /**
55
+ * Allows you to provide a custom "signMessage" function, e.g. to use node's much faster createHmac method
56
+ *
57
+ * Look in the examples folder for a demonstration on using node's createHmac instead.
58
+ */
59
+ customSignMessageFn?: (message: string, secret: string) => Promise<string>;
42
60
  }
61
+ /**
62
+ * WS configuration that's always defined, regardless of user configuration
63
+ * (usually comes from defaults if there's no user-provided values)
64
+ */
43
65
  export interface WebsocketClientOptions extends WSClientConfigurableOptions {
44
66
  market: APIMarket;
45
67
  pongTimeout: number;
46
68
  pingInterval: number;
47
69
  reconnectTimeout: number;
70
+ recvWindow: number;
71
+ authPrivateConnectionsOnConnect: boolean;
72
+ authPrivateRequests: boolean;
48
73
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=v5-shared.js.map
3
+ //# sourceMappingURL=ws-general.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-general.js","sourceRoot":"","sources":["../../../src/types/websockets/ws-general.ts"],"names":[],"mappings":""}
@@ -23,7 +23,6 @@ export default abstract class BaseRestClient {
23
23
  * @param {AxiosRequestConfig} [networkOptions={}] HTTP networking options for axios
24
24
  */
25
25
  constructor(restOptions?: RestClientOptions, networkOptions?: AxiosRequestConfig);
26
- private isSpotV1Client;
27
26
  get(endpoint: string, params?: any): Promise<any>;
28
27
  getPrivate(endpoint: string, params?: any): Promise<any>;
29
28
  post(endpoint: string, params?: any): Promise<any>;
@@ -40,6 +39,7 @@ export default abstract class BaseRestClient {
40
39
  * @private generic handler to parse request exceptions
41
40
  */
42
41
  parseException(e: any): unknown;
42
+ private signMessage;
43
43
  /**
44
44
  * @private sign request and set recv window
45
45
  */
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  const axios_1 = __importDefault(require("axios"));
17
17
  const https_1 = __importDefault(require("https"));
18
18
  const requestUtils_1 = require("./requestUtils");
19
- const node_support_1 = require("./node-support");
19
+ const webCryptoAPI_1 = require("./webCryptoAPI");
20
20
  const ENABLE_HTTP_TRACE = typeof process === 'object' &&
21
21
  typeof process.env === 'object' &&
22
22
  process.env.BYBITTRACE;
@@ -92,9 +92,6 @@ class BaseRestClient {
92
92
  setInterval(this.syncTime.bind(this), +this.options.sync_interval_ms);
93
93
  }
94
94
  }
95
- isSpotV1Client() {
96
- return this.clientType === requestUtils_1.REST_CLIENT_TYPE_ENUM.spot;
97
- }
98
95
  get(endpoint, params) {
99
96
  return this._call('GET', endpoint, params, true);
100
97
  }
@@ -142,20 +139,12 @@ class BaseRestClient {
142
139
  if (isPublicApi) {
143
140
  return Object.assign(Object.assign({}, options), { params: params });
144
141
  }
145
- // USDC endpoints, unified margin and a few others use a different way of authenticating requests (headers instead of params)
146
- if (this.clientType === requestUtils_1.REST_CLIENT_TYPE_ENUM.v3) {
147
- const signResult = yield this.prepareSignParams(method, 'v5auth', params, isPublicApi);
148
- const headers = Object.assign({ 'X-BAPI-SIGN-TYPE': 2, 'X-BAPI-API-KEY': this.key, 'X-BAPI-TIMESTAMP': signResult.timestamp, 'X-BAPI-SIGN': signResult.sign, 'X-BAPI-RECV-WINDOW': signResult.recvWindow }, options.headers);
149
- if (method === 'GET') {
150
- return Object.assign(Object.assign({}, options), { headers, params: signResult.originalParams });
151
- }
152
- return Object.assign(Object.assign({}, options), { headers, data: signResult.originalParams });
153
- }
154
- const signResult = yield this.prepareSignParams(method, 'v2auth', params, isPublicApi);
155
- if (method === 'GET' || this.isSpotV1Client()) {
156
- return Object.assign(Object.assign({}, options), { params: signResult.paramsWithSign });
142
+ const signResult = yield this.prepareSignParams(method, 'v5auth', params, isPublicApi);
143
+ const headers = Object.assign({ 'X-BAPI-SIGN-TYPE': 2, 'X-BAPI-API-KEY': this.key, 'X-BAPI-TIMESTAMP': signResult.timestamp, 'X-BAPI-SIGN': signResult.sign, 'X-BAPI-RECV-WINDOW': signResult.recvWindow }, options.headers);
144
+ if (method === 'GET') {
145
+ return Object.assign(Object.assign({}, options), { headers, params: signResult.originalParams });
157
146
  }
158
- return Object.assign(Object.assign({}, options), { data: signResult.paramsWithSign });
147
+ return Object.assign(Object.assign({}, options), { headers, data: signResult.originalParams });
159
148
  });
160
149
  }
161
150
  /**
@@ -210,6 +199,14 @@ class BaseRestClient {
210
199
  requestOptions: this.options,
211
200
  };
212
201
  }
202
+ signMessage(paramsStr, secret, method, algorithm) {
203
+ return __awaiter(this, void 0, void 0, function* () {
204
+ if (typeof this.options.customSignMessageFn === 'function') {
205
+ return this.options.customSignMessageFn(paramsStr, secret);
206
+ }
207
+ return yield (0, webCryptoAPI_1.signMessage)(paramsStr, secret, method, algorithm);
208
+ });
209
+ }
213
210
  /**
214
211
  * @private sign request and set recv window
215
212
  */
@@ -239,7 +236,7 @@ class BaseRestClient {
239
236
  ? (0, requestUtils_1.serializeParams)(res.originalParams, strictParamValidation, sortProperties, encodeSerialisedValues)
240
237
  : JSON.stringify(res.originalParams);
241
238
  const paramsStr = timestamp + key + recvWindow + signRequestParams;
242
- res.sign = yield (0, node_support_1.signMessage)(paramsStr, this.secret);
239
+ res.sign = yield this.signMessage(paramsStr, this.secret, 'hex', 'SHA-256');
243
240
  res.serializedParams = signRequestParams;
244
241
  // console.log('sign req: ', {
245
242
  // req: paramsStr,
@@ -247,27 +244,6 @@ class BaseRestClient {
247
244
  // });
248
245
  return res;
249
246
  }
250
- // spot/v2 derivatives
251
- if (signMethod === 'v2auth') {
252
- res.originalParams.api_key = key;
253
- res.originalParams.timestamp = timestamp;
254
- // Optional, set to 5000 by default. Increase if timestamp/recv_window errors are seen.
255
- if (recvWindow) {
256
- if (this.isSpotV1Client()) {
257
- res.originalParams.recvWindow = recvWindow;
258
- }
259
- else {
260
- res.originalParams.recv_window = recvWindow;
261
- }
262
- }
263
- const sortProperties = true;
264
- const encodeValues = false;
265
- res.serializedParams = (0, requestUtils_1.serializeParams)(res.originalParams, strictParamValidation, sortProperties, encodeValues);
266
- res.sign = yield (0, node_support_1.signMessage)(res.serializedParams, this.secret);
267
- // @ts-ignore
268
- res.paramsWithSign = Object.assign(Object.assign({}, res.originalParams), { sign: res.sign });
269
- return res;
270
- }
271
247
  return res;
272
248
  });
273
249
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../src/util/BaseRestClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../src/util/BaseRestClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,221 @@
1
+ import EventEmitter from 'events';
2
+ import WebSocket from 'isomorphic-ws';
3
+ import { DefaultLogger } from './logger';
4
+ import { MessageEventLike, WSClientConfigurableOptions, WebsocketClientOptions, WsMarket } from '../types';
5
+ import { WsStore } from './websockets/WsStore';
6
+ import { WSConnectedResult, WsTopicRequest, WsTopicRequestOrStringTopic } from './websockets';
7
+ import { WsOperation } from '../types/websockets/ws-api';
8
+ interface WSClientEventMap<WsKey extends string> {
9
+ /** Connection opened. If this connection was previously opened and reconnected, expect the reconnected event instead */
10
+ open: (evt: {
11
+ wsKey: WsKey;
12
+ event: any;
13
+ }) => void;
14
+ /** Reconnecting a dropped connection */
15
+ reconnect: (evt: {
16
+ wsKey: WsKey;
17
+ event: any;
18
+ }) => void;
19
+ /** Successfully reconnected a connection that dropped */
20
+ reconnected: (evt: {
21
+ wsKey: WsKey;
22
+ event: any;
23
+ }) => void;
24
+ /** Connection closed */
25
+ close: (evt: {
26
+ wsKey: WsKey;
27
+ event: any;
28
+ }) => void;
29
+ /** Received reply to websocket command (e.g. after subscribing to topics) */
30
+ response: (response: any & {
31
+ wsKey: WsKey;
32
+ isWSAPIResponse?: boolean;
33
+ }) => void;
34
+ /** Received data for topic */
35
+ update: (response: any & {
36
+ wsKey: WsKey;
37
+ }) => void;
38
+ /** Exception from ws client OR custom listeners (e.g. if you throw inside your event handler) */
39
+ error: (response: any & {
40
+ wsKey: WsKey;
41
+ isWSAPIResponse?: boolean;
42
+ }) => void;
43
+ /** Confirmation that a connection successfully authenticated */
44
+ authenticated: (event: {
45
+ wsKey: WsKey;
46
+ event: any;
47
+ isWSAPIResponse?: boolean;
48
+ }) => void;
49
+ }
50
+ export interface EmittableEvent<TEvent = any> {
51
+ eventType: 'response' | 'update' | 'error' | 'authenticated';
52
+ event: TEvent;
53
+ isWSAPIResponse?: boolean;
54
+ }
55
+ export interface BaseWebsocketClient<TWSKey extends string, TWSRequestEvent extends object> {
56
+ on<U extends keyof WSClientEventMap<TWSKey>>(event: U, listener: WSClientEventMap<TWSKey>[U]): this;
57
+ emit<U extends keyof WSClientEventMap<TWSKey>>(event: U, ...args: Parameters<WSClientEventMap<TWSKey>[U]>): boolean;
58
+ }
59
+ /**
60
+ * A midflight WS request event (e.g. subscribe to these topics).
61
+ *
62
+ * - requestKey: unique identifier for this request, if available. Can be anything as a string.
63
+ * - requestEvent: the raw request, as an object, that will be sent on the ws connection. This may contain multiple topics/requests in one object, if the exchange supports it.
64
+ */
65
+ export interface MidflightWsRequestEvent<TEvent = object> {
66
+ requestKey: string;
67
+ requestEvent: TEvent;
68
+ }
69
+ /**
70
+ * Base WebSocket abstraction layer. Handles connections, tracking each connection as a unique "WS Key"
71
+ */
72
+ export declare abstract class BaseWebsocketClient<
73
+ /**
74
+ * The WS connections supported by the client, each identified by a unique primary key
75
+ */
76
+ TWSKey extends string, TWSRequestEvent extends object> extends EventEmitter {
77
+ /**
78
+ * State store to track a list of topics (topic requests) we are expected to be subscribed to if reconnected
79
+ */
80
+ private wsStore;
81
+ protected logger: typeof DefaultLogger;
82
+ protected options: WebsocketClientOptions;
83
+ private wsApiRequestId;
84
+ private timeOffsetMs;
85
+ /**
86
+ * A nested wsKey->request key store.
87
+ * pendingTopicSubscriptionRequests[wsKey][requestKey] = WsKeyPendingTopicSubscriptions<TWSRequestEvent>
88
+ */
89
+ private pendingTopicSubscriptionRequests;
90
+ constructor(options?: WSClientConfigurableOptions, logger?: typeof DefaultLogger);
91
+ /**
92
+ * Return true if this wsKey connection should automatically authenticate immediately after connecting
93
+ */
94
+ protected abstract isAuthOnConnectWsKey(wsKey: TWSKey): boolean;
95
+ protected abstract sendPingEvent(wsKey: TWSKey, ws: WebSocket): void;
96
+ protected abstract sendPongEvent(wsKey: TWSKey, ws: WebSocket): void;
97
+ protected abstract isWsPing(data: any): boolean;
98
+ protected abstract isWsPong(data: any): boolean;
99
+ protected abstract getWsAuthRequestEvent(wsKey: TWSKey): Promise<object>;
100
+ protected abstract isPrivateTopicRequest(request: WsTopicRequest<string>, wsKey: TWSKey): boolean;
101
+ protected abstract getPrivateWSKeys(): TWSKey[];
102
+ protected abstract getWsUrl(wsKey: TWSKey): Promise<string>;
103
+ protected abstract getMaxTopicsPerSubscribeEvent(wsKey: TWSKey): number | null;
104
+ /**
105
+ * @returns one or more correctly structured request events for performing a operations over WS. This can vary per exchange spec.
106
+ */
107
+ protected abstract getWsRequestEvents(market: WsMarket, operation: WsOperation, requests: WsTopicRequest<string>[], wsKey: TWSKey): Promise<MidflightWsRequestEvent<TWSRequestEvent>[]>;
108
+ /**
109
+ * Abstraction called to sort ws events into emittable event types (response to a request, data update, etc)
110
+ */
111
+ protected abstract resolveEmittableEvents(wsKey: TWSKey, event: MessageEventLike): EmittableEvent[];
112
+ /**
113
+ * Request connection of all dependent (public & private) websockets, instead of waiting for automatic connection by library
114
+ */
115
+ protected abstract connectAll(): Promise<WSConnectedResult | undefined>[];
116
+ protected isPrivateWsKey(wsKey: TWSKey): boolean;
117
+ /** Returns auto-incrementing request ID, used to track promise references for async requests */
118
+ protected getNewRequestId(): string;
119
+ protected abstract sendWSAPIRequest(wsKey: TWSKey, channel: string, params?: any): Promise<unknown>;
120
+ protected abstract sendWSAPIRequest(wsKey: TWSKey, channel: string, params: any): Promise<unknown>;
121
+ getTimeOffsetMs(): number;
122
+ setTimeOffsetMs(newOffset: number): void;
123
+ private getWsKeyPendingSubscriptionStore;
124
+ protected upsertPendingTopicSubscribeRequests(wsKey: TWSKey, requestData: MidflightWsRequestEvent<TWSRequestEvent>): Promise<TWSRequestEvent>;
125
+ protected removeTopicPendingSubscription(wsKey: TWSKey, requestKey: string): void;
126
+ private clearTopicsPendingSubscriptions;
127
+ /**
128
+ * Resolve/reject the promise for a midflight request.
129
+ *
130
+ * This will typically execute before the event is emitted.
131
+ */
132
+ protected updatePendingTopicSubscriptionStatus(wsKey: TWSKey, requestKey: string, msg: object, isTopicSubscriptionSuccessEvent: boolean): void;
133
+ /**
134
+ * Don't call directly! Use subscribe() instead!
135
+ *
136
+ * Subscribe to one or more topics on a WS connection (identified by WS Key).
137
+ *
138
+ * - Topics are automatically cached
139
+ * - Connections are automatically opened, if not yet connected
140
+ * - Authentication is automatically handled
141
+ * - Topics are automatically resubscribed to, if something happens to the connection, unless you call unsubsribeTopicsForWsKey(topics, key).
142
+ *
143
+ * @param wsRequests array of topics to subscribe to
144
+ * @param wsKey ws key referring to the ws connection these topics should be subscribed on
145
+ */
146
+ protected subscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<string>[], wsKey: TWSKey): Promise<false | WSConnectedResult | Awaited<TWSRequestEvent>[] | undefined>;
147
+ protected unsubscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<string>[], wsKey: TWSKey): Promise<unknown>;
148
+ /**
149
+ * Splits topic requests into two groups, public & private topic requests
150
+ */
151
+ private sortTopicRequestsIntoPublicPrivate;
152
+ /** Get the WsStore that tracks websockets & topics */
153
+ getWsStore(): WsStore<TWSKey, WsTopicRequest<string>>;
154
+ close(wsKey: TWSKey, force?: boolean): void;
155
+ closeAll(force?: boolean): void;
156
+ isConnected(wsKey: TWSKey): boolean;
157
+ /**
158
+ * Request connection to a specific websocket, instead of waiting for automatic connection.
159
+ */
160
+ connect(wsKey: TWSKey): Promise<WSConnectedResult | undefined>;
161
+ private connectToWsUrl;
162
+ private parseWsError;
163
+ /** Get a signature, build the auth request and send it */
164
+ private sendAuthRequest;
165
+ private reconnectWithDelay;
166
+ private ping;
167
+ /**
168
+ * Closes a connection, if it's even open. If open, this will trigger a reconnect asynchronously.
169
+ * If closed, trigger a reconnect immediately
170
+ */
171
+ private executeReconnectableClose;
172
+ private clearTimers;
173
+ private clearPingTimer;
174
+ private clearPongTimer;
175
+ private clearReconnectTimer;
176
+ /**
177
+ * Returns a list of string events that can be individually sent upstream to complete subscribing/unsubscribing/etc to these topics
178
+ *
179
+ * If events are an object, these should be stringified (`return JSON.stringify(event);`)
180
+ * Each event returned by this will be sent one at a time
181
+ *
182
+ * Events are automatically split into smaller batches, by this method, if needed.
183
+ */
184
+ protected getWsOperationEventsForTopics(topics: WsTopicRequest<string>[], wsKey: TWSKey, operation: WsOperation): Promise<MidflightWsRequestEvent<TWSRequestEvent>[]>;
185
+ /**
186
+ * Simply builds and sends subscribe events for a list of topics for a ws key
187
+ *
188
+ * @private Use the `subscribe(topics)` or `subscribeTopicsForWsKey(topics, wsKey)` method to subscribe to topics.
189
+ */
190
+ private requestSubscribeTopics;
191
+ /**
192
+ * Simply builds and sends unsubscribe events for a list of topics for a ws key
193
+ *
194
+ * @private Use the `unsubscribe(topics)` method to unsubscribe from topics. Send WS message to unsubscribe from topics.
195
+ */
196
+ private requestUnsubscribeTopics;
197
+ /**
198
+ * Try sending a string event on a WS connection (identified by the WS Key)
199
+ */
200
+ tryWsSend(wsKey: TWSKey, wsMessage: string, throwExceptions?: boolean): void;
201
+ private onWsOpen;
202
+ /**
203
+ * Handle subscription to private topics _after_ authentication successfully completes asynchronously.
204
+ *
205
+ * Only used for exchanges that require auth before sending private topic subscription requests
206
+ */
207
+ private onWsAuthenticated;
208
+ private onWsMessage;
209
+ private onWsClose;
210
+ private getWs;
211
+ private setWsState;
212
+ /**
213
+ * Promise-driven method to assert that a ws has successfully connected (will await until connection is open)
214
+ */
215
+ assertIsConnected(wsKey: TWSKey): Promise<unknown>;
216
+ /**
217
+ * Promise-driven method to assert that a ws has been successfully authenticated (will await until auth is confirmed)
218
+ */
219
+ assertIsAuthenticated(wsKey: TWSKey): Promise<unknown>;
220
+ }
221
+ export {};