@siebly/kraken-api 0.0.9

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 (204) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +624 -0
  3. package/dist/cjs/DerivativesClient.d.ts +657 -0
  4. package/dist/cjs/DerivativesClient.js +726 -0
  5. package/dist/cjs/DerivativesClient.js.map +1 -0
  6. package/dist/cjs/InstitutionalClient.d.ts +183 -0
  7. package/dist/cjs/InstitutionalClient.js +266 -0
  8. package/dist/cjs/InstitutionalClient.js.map +1 -0
  9. package/dist/cjs/PartnerClient.d.ts +257 -0
  10. package/dist/cjs/PartnerClient.js +344 -0
  11. package/dist/cjs/PartnerClient.js.map +1 -0
  12. package/dist/cjs/SpotClient.d.ts +547 -0
  13. package/dist/cjs/SpotClient.js +607 -0
  14. package/dist/cjs/SpotClient.js.map +1 -0
  15. package/dist/cjs/WebsocketAPIClient.d.ts +95 -0
  16. package/dist/cjs/WebsocketAPIClient.js +136 -0
  17. package/dist/cjs/WebsocketAPIClient.js.map +1 -0
  18. package/dist/cjs/WebsocketClient.d.ts +120 -0
  19. package/dist/cjs/WebsocketClient.js +669 -0
  20. package/dist/cjs/WebsocketClient.js.map +1 -0
  21. package/dist/cjs/index.d.ts +24 -0
  22. package/dist/cjs/index.js +41 -0
  23. package/dist/cjs/index.js.map +1 -0
  24. package/dist/cjs/lib/BaseRestClient.d.ts +66 -0
  25. package/dist/cjs/lib/BaseRestClient.js +548 -0
  26. package/dist/cjs/lib/BaseRestClient.js.map +1 -0
  27. package/dist/cjs/lib/BaseWSClient.d.ts +230 -0
  28. package/dist/cjs/lib/BaseWSClient.js +935 -0
  29. package/dist/cjs/lib/BaseWSClient.js.map +1 -0
  30. package/dist/cjs/lib/misc-util.d.ts +1 -0
  31. package/dist/cjs/lib/misc-util.js +7 -0
  32. package/dist/cjs/lib/misc-util.js.map +1 -0
  33. package/dist/cjs/lib/requestUtils.d.ts +68 -0
  34. package/dist/cjs/lib/requestUtils.js +82 -0
  35. package/dist/cjs/lib/requestUtils.js.map +1 -0
  36. package/dist/cjs/lib/webCryptoAPI.d.ts +15 -0
  37. package/dist/cjs/lib/webCryptoAPI.js +85 -0
  38. package/dist/cjs/lib/webCryptoAPI.js.map +1 -0
  39. package/dist/cjs/lib/websocket/WsStore.d.ts +75 -0
  40. package/dist/cjs/lib/websocket/WsStore.js +303 -0
  41. package/dist/cjs/lib/websocket/WsStore.js.map +1 -0
  42. package/dist/cjs/lib/websocket/WsStore.types.d.ts +51 -0
  43. package/dist/cjs/lib/websocket/WsStore.types.js +14 -0
  44. package/dist/cjs/lib/websocket/WsStore.types.js.map +1 -0
  45. package/dist/cjs/lib/websocket/logger.d.ts +7 -0
  46. package/dist/cjs/lib/websocket/logger.js +16 -0
  47. package/dist/cjs/lib/websocket/logger.js.map +1 -0
  48. package/dist/cjs/lib/websocket/rest-client-cache.d.ts +22 -0
  49. package/dist/cjs/lib/websocket/rest-client-cache.js +66 -0
  50. package/dist/cjs/lib/websocket/rest-client-cache.js.map +1 -0
  51. package/dist/cjs/lib/websocket/websocket-util.d.ts +76 -0
  52. package/dist/cjs/lib/websocket/websocket-util.js +59 -0
  53. package/dist/cjs/lib/websocket/websocket-util.js.map +1 -0
  54. package/dist/cjs/package.json +3 -0
  55. package/dist/cjs/types/request/derivatives.types.d.ts +186 -0
  56. package/dist/cjs/types/request/derivatives.types.js +6 -0
  57. package/dist/cjs/types/request/derivatives.types.js.map +1 -0
  58. package/dist/cjs/types/request/institutional.types.d.ts +313 -0
  59. package/dist/cjs/types/request/institutional.types.js +4 -0
  60. package/dist/cjs/types/request/institutional.types.js.map +1 -0
  61. package/dist/cjs/types/request/partner.types.d.ts +291 -0
  62. package/dist/cjs/types/request/partner.types.js +4 -0
  63. package/dist/cjs/types/request/partner.types.js.map +1 -0
  64. package/dist/cjs/types/request/spot.types.d.ts +324 -0
  65. package/dist/cjs/types/request/spot.types.js +6 -0
  66. package/dist/cjs/types/request/spot.types.js.map +1 -0
  67. package/dist/cjs/types/request/wsapi.types.d.ts +90 -0
  68. package/dist/cjs/types/request/wsapi.types.js +6 -0
  69. package/dist/cjs/types/request/wsapi.types.js.map +1 -0
  70. package/dist/cjs/types/response/derivatives.types.d.ts +712 -0
  71. package/dist/cjs/types/response/derivatives.types.js +6 -0
  72. package/dist/cjs/types/response/derivatives.types.js.map +1 -0
  73. package/dist/cjs/types/response/institutional.types.d.ts +318 -0
  74. package/dist/cjs/types/response/institutional.types.js +4 -0
  75. package/dist/cjs/types/response/institutional.types.js.map +1 -0
  76. package/dist/cjs/types/response/partner.types.d.ts +332 -0
  77. package/dist/cjs/types/response/partner.types.js +4 -0
  78. package/dist/cjs/types/response/partner.types.js.map +1 -0
  79. package/dist/cjs/types/response/shared.types.d.ts +27 -0
  80. package/dist/cjs/types/response/shared.types.js +3 -0
  81. package/dist/cjs/types/response/shared.types.js.map +1 -0
  82. package/dist/cjs/types/response/spot.types.d.ts +590 -0
  83. package/dist/cjs/types/response/spot.types.js +6 -0
  84. package/dist/cjs/types/response/spot.types.js.map +1 -0
  85. package/dist/cjs/types/response/ws.d.ts +11 -0
  86. package/dist/cjs/types/response/ws.js +3 -0
  87. package/dist/cjs/types/response/ws.js.map +1 -0
  88. package/dist/cjs/types/response/wsapi.types.d.ts +44 -0
  89. package/dist/cjs/types/response/wsapi.types.js +6 -0
  90. package/dist/cjs/types/response/wsapi.types.js.map +1 -0
  91. package/dist/cjs/types/websockets/ws-api.d.ts +71 -0
  92. package/dist/cjs/types/websockets/ws-api.js +18 -0
  93. package/dist/cjs/types/websockets/ws-api.js.map +1 -0
  94. package/dist/cjs/types/websockets/ws-events.d.ts +11 -0
  95. package/dist/cjs/types/websockets/ws-events.js +11 -0
  96. package/dist/cjs/types/websockets/ws-events.js.map +1 -0
  97. package/dist/cjs/types/websockets/ws-general.d.ts +67 -0
  98. package/dist/cjs/types/websockets/ws-general.js +3 -0
  99. package/dist/cjs/types/websockets/ws-general.js.map +1 -0
  100. package/dist/cjs/types/websockets/ws-subscriptions.d.ts +11 -0
  101. package/dist/cjs/types/websockets/ws-subscriptions.js +31 -0
  102. package/dist/cjs/types/websockets/ws-subscriptions.js.map +1 -0
  103. package/dist/mjs/DerivativesClient.d.ts +657 -0
  104. package/dist/mjs/DerivativesClient.js +722 -0
  105. package/dist/mjs/DerivativesClient.js.map +1 -0
  106. package/dist/mjs/InstitutionalClient.d.ts +183 -0
  107. package/dist/mjs/InstitutionalClient.js +262 -0
  108. package/dist/mjs/InstitutionalClient.js.map +1 -0
  109. package/dist/mjs/PartnerClient.d.ts +257 -0
  110. package/dist/mjs/PartnerClient.js +340 -0
  111. package/dist/mjs/PartnerClient.js.map +1 -0
  112. package/dist/mjs/SpotClient.d.ts +547 -0
  113. package/dist/mjs/SpotClient.js +603 -0
  114. package/dist/mjs/SpotClient.js.map +1 -0
  115. package/dist/mjs/WebsocketAPIClient.d.ts +95 -0
  116. package/dist/mjs/WebsocketAPIClient.js +132 -0
  117. package/dist/mjs/WebsocketAPIClient.js.map +1 -0
  118. package/dist/mjs/WebsocketClient.d.ts +120 -0
  119. package/dist/mjs/WebsocketClient.js +665 -0
  120. package/dist/mjs/WebsocketClient.js.map +1 -0
  121. package/dist/mjs/index.d.ts +24 -0
  122. package/dist/mjs/index.js +25 -0
  123. package/dist/mjs/index.js.map +1 -0
  124. package/dist/mjs/lib/BaseRestClient.d.ts +66 -0
  125. package/dist/mjs/lib/BaseRestClient.js +541 -0
  126. package/dist/mjs/lib/BaseRestClient.js.map +1 -0
  127. package/dist/mjs/lib/BaseWSClient.d.ts +230 -0
  128. package/dist/mjs/lib/BaseWSClient.js +928 -0
  129. package/dist/mjs/lib/BaseWSClient.js.map +1 -0
  130. package/dist/mjs/lib/misc-util.d.ts +1 -0
  131. package/dist/mjs/lib/misc-util.js +4 -0
  132. package/dist/mjs/lib/misc-util.js.map +1 -0
  133. package/dist/mjs/lib/requestUtils.d.ts +68 -0
  134. package/dist/mjs/lib/requestUtils.js +76 -0
  135. package/dist/mjs/lib/requestUtils.js.map +1 -0
  136. package/dist/mjs/lib/webCryptoAPI.d.ts +15 -0
  137. package/dist/mjs/lib/webCryptoAPI.js +80 -0
  138. package/dist/mjs/lib/webCryptoAPI.js.map +1 -0
  139. package/dist/mjs/lib/websocket/WsStore.d.ts +75 -0
  140. package/dist/mjs/lib/websocket/WsStore.js +298 -0
  141. package/dist/mjs/lib/websocket/WsStore.js.map +1 -0
  142. package/dist/mjs/lib/websocket/WsStore.types.d.ts +51 -0
  143. package/dist/mjs/lib/websocket/WsStore.types.js +11 -0
  144. package/dist/mjs/lib/websocket/WsStore.types.js.map +1 -0
  145. package/dist/mjs/lib/websocket/logger.d.ts +7 -0
  146. package/dist/mjs/lib/websocket/logger.js +13 -0
  147. package/dist/mjs/lib/websocket/logger.js.map +1 -0
  148. package/dist/mjs/lib/websocket/rest-client-cache.d.ts +22 -0
  149. package/dist/mjs/lib/websocket/rest-client-cache.js +62 -0
  150. package/dist/mjs/lib/websocket/rest-client-cache.js.map +1 -0
  151. package/dist/mjs/lib/websocket/websocket-util.d.ts +76 -0
  152. package/dist/mjs/lib/websocket/websocket-util.js +54 -0
  153. package/dist/mjs/lib/websocket/websocket-util.js.map +1 -0
  154. package/dist/mjs/package.json +3 -0
  155. package/dist/mjs/types/request/derivatives.types.d.ts +186 -0
  156. package/dist/mjs/types/request/derivatives.types.js +5 -0
  157. package/dist/mjs/types/request/derivatives.types.js.map +1 -0
  158. package/dist/mjs/types/request/institutional.types.d.ts +313 -0
  159. package/dist/mjs/types/request/institutional.types.js +3 -0
  160. package/dist/mjs/types/request/institutional.types.js.map +1 -0
  161. package/dist/mjs/types/request/partner.types.d.ts +291 -0
  162. package/dist/mjs/types/request/partner.types.js +3 -0
  163. package/dist/mjs/types/request/partner.types.js.map +1 -0
  164. package/dist/mjs/types/request/spot.types.d.ts +324 -0
  165. package/dist/mjs/types/request/spot.types.js +5 -0
  166. package/dist/mjs/types/request/spot.types.js.map +1 -0
  167. package/dist/mjs/types/request/wsapi.types.d.ts +90 -0
  168. package/dist/mjs/types/request/wsapi.types.js +5 -0
  169. package/dist/mjs/types/request/wsapi.types.js.map +1 -0
  170. package/dist/mjs/types/response/derivatives.types.d.ts +712 -0
  171. package/dist/mjs/types/response/derivatives.types.js +5 -0
  172. package/dist/mjs/types/response/derivatives.types.js.map +1 -0
  173. package/dist/mjs/types/response/institutional.types.d.ts +318 -0
  174. package/dist/mjs/types/response/institutional.types.js +3 -0
  175. package/dist/mjs/types/response/institutional.types.js.map +1 -0
  176. package/dist/mjs/types/response/partner.types.d.ts +332 -0
  177. package/dist/mjs/types/response/partner.types.js +3 -0
  178. package/dist/mjs/types/response/partner.types.js.map +1 -0
  179. package/dist/mjs/types/response/shared.types.d.ts +27 -0
  180. package/dist/mjs/types/response/shared.types.js +2 -0
  181. package/dist/mjs/types/response/shared.types.js.map +1 -0
  182. package/dist/mjs/types/response/spot.types.d.ts +590 -0
  183. package/dist/mjs/types/response/spot.types.js +5 -0
  184. package/dist/mjs/types/response/spot.types.js.map +1 -0
  185. package/dist/mjs/types/response/ws.d.ts +11 -0
  186. package/dist/mjs/types/response/ws.js +2 -0
  187. package/dist/mjs/types/response/ws.js.map +1 -0
  188. package/dist/mjs/types/response/wsapi.types.d.ts +44 -0
  189. package/dist/mjs/types/response/wsapi.types.js +5 -0
  190. package/dist/mjs/types/response/wsapi.types.js.map +1 -0
  191. package/dist/mjs/types/websockets/ws-api.d.ts +71 -0
  192. package/dist/mjs/types/websockets/ws-api.js +15 -0
  193. package/dist/mjs/types/websockets/ws-api.js.map +1 -0
  194. package/dist/mjs/types/websockets/ws-events.d.ts +11 -0
  195. package/dist/mjs/types/websockets/ws-events.js +8 -0
  196. package/dist/mjs/types/websockets/ws-events.js.map +1 -0
  197. package/dist/mjs/types/websockets/ws-general.d.ts +67 -0
  198. package/dist/mjs/types/websockets/ws-general.js +2 -0
  199. package/dist/mjs/types/websockets/ws-general.js.map +1 -0
  200. package/dist/mjs/types/websockets/ws-subscriptions.d.ts +11 -0
  201. package/dist/mjs/types/websockets/ws-subscriptions.js +28 -0
  202. package/dist/mjs/types/websockets/ws-subscriptions.js.map +1 -0
  203. package/llms.txt +10925 -0
  204. package/package.json +89 -0
@@ -0,0 +1,95 @@
1
+ import { DefaultLogger } from './lib/websocket/logger.js';
2
+ import { WSAPIAddSpotOrderParams, WSAPIAmendSpotOrderParams, WSAPIBatchAddSpotOrdersParams, WSAPIBatchCancelSpotOrdersParams, WSAPICancelAllSpotOrdersAfterParams, WSAPICancelSpotOrderParams, WSAPIEditSpotOrderParams } from './types/request/wsapi.types.js';
3
+ import { WSAPIAddSpotOrderResult, WSAPIAmendSpotOrderResult, WSAPIBatchAddSpotOrdersResult, WSAPIBatchCancelSpotOrdersResult, WSAPICancelAllSpotOrdersAfterResult, WSAPICancelAllSpotOrdersResult, WSAPICancelSpotOrderResult, WSAPIEditSpotOrderResult } from './types/response/wsapi.types.js';
4
+ import { WSAPISpotResponse, WSAPIWsKey } from './types/websockets/ws-api.js';
5
+ import { WSClientConfigurableOptions } from './types/websockets/ws-general.js';
6
+ import { WebsocketClient } from './WebsocketClient.js';
7
+ /**
8
+ * Configurable options specific to only the REST-like WebsocketAPIClient
9
+ */
10
+ export interface WSAPIClientConfigurableOptions {
11
+ /**
12
+ * Default: true
13
+ *
14
+ * Attach default event listeners, which will console log any high level
15
+ * events (opened/reconnecting/reconnected/etc).
16
+ *
17
+ * If you disable this, you should set your own event listeners
18
+ * on the embedded WS Client `wsApiClient.getWSClient().on(....)`.
19
+ */
20
+ attachEventListeners: boolean;
21
+ }
22
+ /**
23
+ * This is a minimal Websocket API wrapper around the WebsocketClient.
24
+ *
25
+ * Some methods support passing in a custom "wsKey". This is a reference to which WS connection should
26
+ * be used to transmit that message. This is only useful if you wish to use an alternative wss
27
+ * domain that is supported by the SDK. E.g. WS_API_KEY_MAP.spotBetaPrivateV2.
28
+ *
29
+ * Note: You can also directly use the sendWSAPIRequest() method to make WS API calls, but some
30
+ * may find the below methods slightly more intuitive.
31
+ *
32
+ * Refer to the WS API promises example for a more detailed example on using sendWSAPIRequest() directly:
33
+ * https://github.com/sieblyio/kraken-api/blob/main/examples/WebSockets/Spot/wsAPI.RAW.ts#L105
34
+ *
35
+ * Docs:
36
+ * - Spot WS API: https://docs.kraken.com/api/docs/websocket-v2/add_order/
37
+ */
38
+ export declare class WebsocketAPIClient {
39
+ private wsClient;
40
+ private options;
41
+ constructor(options?: WSClientConfigurableOptions & Partial<WSAPIClientConfigurableOptions>, logger?: DefaultLogger);
42
+ getWSClient(): WebsocketClient;
43
+ /**
44
+ * Add a spot order
45
+ */
46
+ submitSpotOrder(params: Omit<WSAPIAddSpotOrderParams, 'token' | 'req_id'>, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPIAddSpotOrderResult, 'add_order'>>;
47
+ /**
48
+ * Amend an existing order
49
+ */
50
+ amendSpotOrder(params: WSAPIAmendSpotOrderParams, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPIAmendSpotOrderResult, 'amend_order'>>;
51
+ /**
52
+ * Cancel one or more orders
53
+ */
54
+ cancelSpotOrder(params: WSAPICancelSpotOrderParams, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPICancelSpotOrderResult, 'cancel_order'>>;
55
+ /**
56
+ * Cancel all open orders
57
+ */
58
+ cancelAllSpotOrders(wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPICancelAllSpotOrdersResult, 'cancel_all'>>;
59
+ /**
60
+ * Cancel all orders after a timeout (Dead Man's Switch)
61
+ */
62
+ cancelAllSpotOrdersAfter(params: WSAPICancelAllSpotOrdersAfterParams, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPICancelAllSpotOrdersAfterResult, 'cancel_all_orders_after'>>;
63
+ /**
64
+ * Add multiple orders in a single batch (2-15 orders)
65
+ */
66
+ batchSubmitSpotOrders(params: WSAPIBatchAddSpotOrdersParams, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPIBatchAddSpotOrdersResult[], 'batch_add'>>;
67
+ /**
68
+ * Cancel multiple orders in a single batch (2-50 orders)
69
+ */
70
+ batchCancelSpotOrders(params: WSAPIBatchCancelSpotOrdersParams, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPIBatchCancelSpotOrdersResult, 'batch_cancel'>>;
71
+ /**
72
+ * Edit an existing order (legacy method, use amendSpotOrder instead)
73
+ * @deprecated Use amendSpotOrder for better performance and features
74
+ */
75
+ editSpotOrder(params: WSAPIEditSpotOrderParams, wsKey?: WSAPIWsKey): Promise<WSAPISpotResponse<WSAPIEditSpotOrderResult, 'edit_order'>>;
76
+ /**
77
+ *
78
+ *
79
+ *
80
+ *
81
+ *
82
+ *
83
+ *
84
+ * Private methods for handling some of the convenience/automation provided by the WS API Client
85
+ *
86
+ *
87
+ *
88
+ *
89
+ *
90
+ *
91
+ *
92
+ */
93
+ connectWSAPI(wsKey: WSAPIWsKey): Promise<unknown>;
94
+ private setupDefaultEventListeners;
95
+ }
@@ -0,0 +1,132 @@
1
+ import { WS_KEY_MAP } from './lib/websocket/websocket-util.js';
2
+ import { WebsocketClient } from './WebsocketClient.js';
3
+ /**
4
+ * This is a minimal Websocket API wrapper around the WebsocketClient.
5
+ *
6
+ * Some methods support passing in a custom "wsKey". This is a reference to which WS connection should
7
+ * be used to transmit that message. This is only useful if you wish to use an alternative wss
8
+ * domain that is supported by the SDK. E.g. WS_API_KEY_MAP.spotBetaPrivateV2.
9
+ *
10
+ * Note: You can also directly use the sendWSAPIRequest() method to make WS API calls, but some
11
+ * may find the below methods slightly more intuitive.
12
+ *
13
+ * Refer to the WS API promises example for a more detailed example on using sendWSAPIRequest() directly:
14
+ * https://github.com/sieblyio/kraken-api/blob/main/examples/WebSockets/Spot/wsAPI.RAW.ts#L105
15
+ *
16
+ * Docs:
17
+ * - Spot WS API: https://docs.kraken.com/api/docs/websocket-v2/add_order/
18
+ */
19
+ export class WebsocketAPIClient {
20
+ wsClient;
21
+ options;
22
+ constructor(options, logger) {
23
+ this.wsClient = new WebsocketClient(options, logger);
24
+ this.options = {
25
+ attachEventListeners: true,
26
+ ...options,
27
+ };
28
+ this.setupDefaultEventListeners();
29
+ }
30
+ getWSClient() {
31
+ return this.wsClient;
32
+ }
33
+ /**
34
+ * Add a spot order
35
+ */
36
+ submitSpotOrder(params, wsKey) {
37
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'add_order', params);
38
+ }
39
+ /**
40
+ * Amend an existing order
41
+ */
42
+ amendSpotOrder(params, wsKey) {
43
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'amend_order', params);
44
+ }
45
+ /**
46
+ * Cancel one or more orders
47
+ */
48
+ cancelSpotOrder(params, wsKey) {
49
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'cancel_order', params);
50
+ }
51
+ /**
52
+ * Cancel all open orders
53
+ */
54
+ cancelAllSpotOrders(wsKey) {
55
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'cancel_all');
56
+ }
57
+ /**
58
+ * Cancel all orders after a timeout (Dead Man's Switch)
59
+ */
60
+ cancelAllSpotOrdersAfter(params, wsKey) {
61
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'cancel_all_orders_after', params);
62
+ }
63
+ /**
64
+ * Add multiple orders in a single batch (2-15 orders)
65
+ */
66
+ batchSubmitSpotOrders(params, wsKey) {
67
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'batch_add', params);
68
+ }
69
+ /**
70
+ * Cancel multiple orders in a single batch (2-50 orders)
71
+ */
72
+ batchCancelSpotOrders(params, wsKey) {
73
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'batch_cancel', params);
74
+ }
75
+ /**
76
+ * Edit an existing order (legacy method, use amendSpotOrder instead)
77
+ * @deprecated Use amendSpotOrder for better performance and features
78
+ */
79
+ editSpotOrder(params, wsKey) {
80
+ return this.wsClient.sendWSAPIRequest(wsKey || WS_KEY_MAP.spotPrivateV2, 'edit_order', params);
81
+ }
82
+ /**
83
+ *
84
+ *
85
+ *
86
+ *
87
+ *
88
+ *
89
+ *
90
+ * Private methods for handling some of the convenience/automation provided by the WS API Client
91
+ *
92
+ *
93
+ *
94
+ *
95
+ *
96
+ *
97
+ *
98
+ */
99
+ connectWSAPI(wsKey) {
100
+ return this.getWSClient().assertIsAuthenticated(wsKey);
101
+ }
102
+ setupDefaultEventListeners() {
103
+ if (this.options.attachEventListeners) {
104
+ /**
105
+ * General event handlers for monitoring the WebsocketClient
106
+ */
107
+ this.wsClient
108
+ .on('open', (data) => {
109
+ console.log(new Date(), 'ws connected', data.wsKey);
110
+ })
111
+ .on('reconnecting', ({ wsKey }) => {
112
+ console.log(new Date(), 'ws automatically reconnecting.... ', wsKey);
113
+ })
114
+ .on('reconnected', (data) => {
115
+ console.log(new Date(), 'ws has reconnected ', data?.wsKey);
116
+ })
117
+ .on('authenticated', (data) => {
118
+ console.info(new Date(), 'ws has authenticated ', data?.wsKey);
119
+ })
120
+ .on('exception', (data) => {
121
+ try {
122
+ // Blind JSON.stringify can fail on circular references
123
+ console.error(new Date(), 'ws exception: ', JSON.stringify(data));
124
+ }
125
+ catch {
126
+ console.error(new Date(), 'ws exception: ', data);
127
+ }
128
+ });
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=WebsocketAPIClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebsocketAPIClient.js","sourceRoot":"","sources":["../../src/WebsocketAPIClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { BaseWebsocketClient, EmittableEvent, MidflightWsRequestEvent } from './lib/BaseWSClient.js';
2
+ import { DefaultLogger } from './lib/websocket/logger.js';
3
+ import { WsKey, WSOperation, WSRequestOperationKraken, WSTopicRequest } from './lib/websocket/websocket-util.js';
4
+ import { WSConnectedResult } from './lib/websocket/WsStore.types.js';
5
+ import { Exact, WSAPIAuthenticationRequestFromServer, WSAPITopicRequestParamMap, WSAPITopicResponseMap, WSAPIWsKey, WSAPIWsKeyTopicMap } from './types/websockets/ws-api.js';
6
+ import { MessageEventLike } from './types/websockets/ws-events.js';
7
+ import { WSClientConfigurableOptions, WsMarket } from './types/websockets/ws-general.js';
8
+ import { WSTopic } from './types/websockets/ws-subscriptions.js';
9
+ export interface WSAPIRequestFlags {
10
+ /** If true, will skip auth requirement for WS API connection */
11
+ authIsOptional?: boolean | undefined;
12
+ }
13
+ export declare class WebsocketClient extends BaseWebsocketClient<WsKey, any> {
14
+ private restClientCache;
15
+ private wsChallengeCache;
16
+ constructor(options?: WSClientConfigurableOptions, logger?: DefaultLogger);
17
+ /**
18
+ * Request connection of all dependent (public & private) websockets, instead of waiting for automatic connection by library.
19
+ *
20
+ * Returns array of promises that individually resolve when each connection is successfully opened.
21
+ */
22
+ connectAll(): Promise<WSConnectedResult | undefined>[];
23
+ /**
24
+ * Ensures the WS API connection is active and ready.
25
+ *
26
+ * You do not need to call this, but if you call this before making any WS API requests,
27
+ * it can accelerate the first request (by preparing the connection in advance).
28
+ */
29
+ connectWSAPI(wsKey: WSAPIWsKey, skipAuth?: boolean): Promise<unknown>;
30
+ /**
31
+ * Request subscription to one or more topics. Pass topics as either an array of strings, or array of objects (if the topic has parameters).
32
+ * Objects should be formatted as {topic: string, params: object}.
33
+ *
34
+ * - Subscriptions are automatically routed to the correct websocket connection.
35
+ * - Authentication/connection is automatic.
36
+ * - Resubscribe after network issues is automatic.
37
+ *
38
+ * Call `unsubscribe(topics)` to remove topics
39
+ */
40
+ subscribe(requests: (WSTopicRequest<WSTopic> | WSTopic) | (WSTopicRequest<WSTopic> | WSTopic)[], wsKey: WsKey): void;
41
+ /**
42
+ * Unsubscribe from one or more topics. Similar to subscribe() but in reverse.
43
+ *
44
+ * - Requests are automatically routed to the correct websocket connection.
45
+ * - These topics will be removed from the topic cache, so they won't be subscribed to again.
46
+ */
47
+ unsubscribe(requests: (WSTopicRequest<WSTopic> | WSTopic) | (WSTopicRequest<WSTopic> | WSTopic)[], wsKey: WsKey): void;
48
+ /**
49
+ * WS API Methods - similar to the REST API, but via WebSockets
50
+ */
51
+ /**
52
+ * Send a Websocket API event on a connection. Returns a promise that resolves on reply.
53
+ *
54
+ * Returned promise is rejected if an exception is detected in the reply OR the connection disconnects for any reason (even if automatic reconnect will happen).
55
+ *
56
+ * After a fresh connection, you should always send a login request first.
57
+ *
58
+ * If you authenticated once and you're reconnected later (e.g. connection temporarily lost), the SDK will by default automatically:
59
+ * - Detect you were authenticated to the WS API before
60
+ * - Try to re-authenticate (up to 5 times, in case something (bad timestamp) goes wrong)
61
+ * - If it succeeds, it will emit the 'authenticated' event.
62
+ * - If it fails and gives up, it will emit an 'exception' event (type: 'wsapi.auth', reason: detailed text).
63
+ *
64
+ * You can turn off the automatic re-auth WS API logic using `reauthWSAPIOnReconnect: false` in the WSClient config.
65
+ *
66
+ * @param wsKey - The connection this event is for (e.g. "spotV4" | "perpFuturesUSDTV4" | "perpFuturesBTCV4" | "deliveryFuturesUSDTV4" | "deliveryFuturesBTCV4" | "optionsV4")
67
+ * @param channel - The channel this event is for (e.g. "spot.login" to authenticate)
68
+ * @param params - Any request parameters for the payload (contents of req_param in the docs). Signature generation is automatic, only send parameters such as order ID as per the docs.
69
+ * @returns Promise - tries to resolve with async WS API response. Rejects if disconnected or exception is seen in async WS API response
70
+ */
71
+ sendWSAPIRequest<TWSKey extends keyof WSAPIWsKeyTopicMap, TWSOperation extends WSAPIWsKeyTopicMap[TWSKey], TWSParams extends Exact<WSAPITopicRequestParamMap[TWSOperation]>, TWSAPIResponse extends WSAPITopicResponseMap[TWSOperation] | object = WSAPITopicResponseMap[TWSOperation]>(wsKey: TWSKey, operation: TWSOperation, params?: TWSParams extends void | never ? undefined : TWSParams, requestFlags?: WSAPIRequestFlags): Promise<TWSAPIResponse>;
72
+ /**
73
+ *
74
+ * Internal methods - not intended for public use
75
+ *
76
+ */
77
+ private getRestClientOptions;
78
+ /**
79
+ * Note: implementing this method will wipe the WsStore state for this WsKey, once this method returns
80
+ */
81
+ protected isCustomReconnectionNeeded(): boolean;
82
+ protected triggerCustomReconnectionWorkflow(): Promise<void>;
83
+ protected getWsUrl(wsKey: WsKey): Promise<string>;
84
+ protected sendPingEvent(wsKey: WsKey): void;
85
+ protected sendPongEvent(wsKey: WsKey): void;
86
+ protected isWsPing(_msg: any): boolean;
87
+ protected isWsPong(msg: any): boolean;
88
+ /**
89
+ * Parse incoming events into categories, before emitting to the user
90
+ */
91
+ protected resolveEmittableEvents(wsKey: WsKey, event: MessageEventLike): EmittableEvent[];
92
+ /**
93
+ * Determines if a topic is for a private channel, using a hardcoded list of strings
94
+ */
95
+ protected isPrivateTopicRequest(request: WSTopicRequest<any>): boolean;
96
+ /**
97
+ * Not in use for Kraken
98
+ */
99
+ protected getWsMarketForWsKey(_wsKey: WsKey): WsMarket;
100
+ /**
101
+ * Whether key represents a private connection. Feeds into automatic auth on connect.
102
+ */
103
+ protected getPrivateWSKeys(): WsKey[];
104
+ protected isAuthOnConnectWsKey(wsKey: WsKey): boolean;
105
+ /** Force subscription requests to be sent in smaller batches, if a number is returned */
106
+ protected getMaxTopicsPerSubscribeEvent(_wsKey: WsKey): number | null;
107
+ protected authPrivateConnectionsOnConnect(wsKey: WsKey): boolean;
108
+ /**
109
+ * @returns one or more correctly structured request events for performing a operations over WS. This can vary per exchange spec.
110
+ */
111
+ protected getWsRequestEvents(wsKey: WsKey, operation: WSOperation, requests: WSTopicRequest<WSTopic>[]): Promise<MidflightWsRequestEvent<WSRequestOperationKraken<string>>[]>;
112
+ private signMessage;
113
+ protected getWsAuthRequestEvent(wsKey: WsKey, eventToAuth?: WSAPIAuthenticationRequestFromServer): Promise<object | string | 'waitForEvent' | void>;
114
+ /**
115
+ *
116
+ * @param requestEvent
117
+ * @returns A signed updated WS API request object, ready to be sent
118
+ */
119
+ private signWSAPIRequest;
120
+ }