coinbase-api 0.3.2 → 1.0.1

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 (218) hide show
  1. package/README.md +438 -14
  2. package/dist/cjs/CBAdvancedTradeClient.d.ts +559 -0
  3. package/dist/cjs/CBAdvancedTradeClient.js +574 -0
  4. package/dist/cjs/CBAdvancedTradeClient.js.map +1 -0
  5. package/dist/cjs/CBAppClient.d.ts +359 -0
  6. package/dist/cjs/CBAppClient.js +336 -0
  7. package/dist/cjs/CBAppClient.js.map +1 -0
  8. package/dist/cjs/CBCommerceClient.d.ts +110 -0
  9. package/dist/cjs/CBCommerceClient.js +105 -0
  10. package/dist/cjs/CBCommerceClient.js.map +1 -0
  11. package/dist/cjs/CBExchangeClient.d.ts +640 -0
  12. package/dist/cjs/CBExchangeClient.js +751 -0
  13. package/dist/cjs/CBExchangeClient.js.map +1 -0
  14. package/dist/cjs/CBInternationalClient.d.ts +381 -0
  15. package/dist/cjs/CBInternationalClient.js +437 -0
  16. package/dist/cjs/CBInternationalClient.js.map +1 -0
  17. package/dist/cjs/CBPrimeClient.d.ts +363 -0
  18. package/dist/cjs/CBPrimeClient.js +451 -0
  19. package/dist/cjs/CBPrimeClient.js.map +1 -0
  20. package/dist/cjs/WebsocketClient.d.ts +78 -0
  21. package/dist/cjs/WebsocketClient.js +534 -0
  22. package/dist/cjs/WebsocketClient.js.map +1 -0
  23. package/dist/cjs/index.d.ts +13 -0
  24. package/dist/cjs/index.js +30 -0
  25. package/dist/cjs/index.js.map +1 -0
  26. package/dist/cjs/lib/BaseRestClient.d.ts +66 -0
  27. package/dist/cjs/lib/BaseRestClient.js +436 -0
  28. package/dist/cjs/lib/BaseRestClient.js.map +1 -0
  29. package/dist/cjs/lib/BaseWSClient.d.ts +169 -0
  30. package/dist/cjs/lib/BaseWSClient.js +638 -0
  31. package/dist/cjs/lib/BaseWSClient.js.map +1 -0
  32. package/dist/cjs/lib/jwtNode.d.ts +13 -0
  33. package/dist/cjs/lib/jwtNode.js +52 -0
  34. package/dist/cjs/lib/jwtNode.js.map +1 -0
  35. package/dist/cjs/lib/misc-util.d.ts +1 -0
  36. package/dist/cjs/lib/misc-util.js +7 -0
  37. package/dist/cjs/lib/misc-util.js.map +1 -0
  38. package/dist/cjs/lib/requestUtils.d.ts +98 -0
  39. package/dist/cjs/lib/requestUtils.js +75 -0
  40. package/dist/cjs/lib/requestUtils.js.map +1 -0
  41. package/dist/cjs/lib/webCryptoAPI.d.ts +10 -0
  42. package/dist/cjs/lib/webCryptoAPI.js +83 -0
  43. package/dist/cjs/lib/webCryptoAPI.js.map +1 -0
  44. package/dist/cjs/lib/websocket/WsStore.d.ts +63 -0
  45. package/dist/cjs/lib/websocket/WsStore.js +254 -0
  46. package/dist/cjs/lib/websocket/WsStore.js.map +1 -0
  47. package/dist/cjs/lib/websocket/WsStore.types.d.ts +49 -0
  48. package/dist/cjs/lib/websocket/WsStore.types.js +14 -0
  49. package/dist/cjs/lib/websocket/WsStore.types.js.map +1 -0
  50. package/dist/cjs/lib/websocket/logger.d.ts +6 -0
  51. package/dist/cjs/lib/websocket/logger.js +16 -0
  52. package/dist/cjs/lib/websocket/logger.js.map +1 -0
  53. package/dist/cjs/lib/websocket/typeGuards.d.ts +27 -0
  54. package/dist/cjs/lib/websocket/typeGuards.js +86 -0
  55. package/dist/cjs/lib/websocket/typeGuards.js.map +1 -0
  56. package/dist/cjs/lib/websocket/websocket-util.d.ts +120 -0
  57. package/dist/cjs/lib/websocket/websocket-util.js +173 -0
  58. package/dist/cjs/lib/websocket/websocket-util.js.map +1 -0
  59. package/dist/cjs/package.json +3 -0
  60. package/dist/cjs/types/request/advanced-trade-client.d.ts +194 -0
  61. package/dist/cjs/types/request/advanced-trade-client.js +18 -0
  62. package/dist/cjs/types/request/advanced-trade-client.js.map +1 -0
  63. package/dist/cjs/types/request/coinbase-app-client.d.ts +80 -0
  64. package/dist/cjs/types/request/coinbase-app-client.js +28 -0
  65. package/dist/cjs/types/request/coinbase-app-client.js.map +1 -0
  66. package/dist/cjs/types/request/coinbase-exchange.d.ts +332 -0
  67. package/dist/cjs/types/request/coinbase-exchange.js +3 -0
  68. package/dist/cjs/types/request/coinbase-exchange.js.map +1 -0
  69. package/dist/cjs/types/request/coinbase-international.d.ts +160 -0
  70. package/dist/cjs/types/request/coinbase-international.js +13 -0
  71. package/dist/cjs/types/request/coinbase-international.js.map +1 -0
  72. package/dist/cjs/types/request/coinbase-prime.d.ts +298 -0
  73. package/dist/cjs/types/request/coinbase-prime.js +8 -0
  74. package/dist/cjs/types/request/coinbase-prime.js.map +1 -0
  75. package/dist/cjs/types/response/advanced-trade-client.d.ts +759 -0
  76. package/dist/cjs/types/response/advanced-trade-client.js +8 -0
  77. package/dist/cjs/types/response/advanced-trade-client.js.map +1 -0
  78. package/dist/cjs/types/response/coinbase-app-client.d.ts +168 -0
  79. package/dist/cjs/types/response/coinbase-app-client.js +18 -0
  80. package/dist/cjs/types/response/coinbase-app-client.js.map +1 -0
  81. package/dist/cjs/types/response/coinbase-exchange.d.ts +80 -0
  82. package/dist/cjs/types/response/coinbase-exchange.js +82 -0
  83. package/dist/cjs/types/response/coinbase-exchange.js.map +1 -0
  84. package/dist/cjs/types/response/coinbase-international.d.ts +40 -0
  85. package/dist/cjs/types/response/coinbase-international.js +42 -0
  86. package/dist/cjs/types/response/coinbase-international.js.map +1 -0
  87. package/dist/cjs/types/response/coinbase-prime.d.ts +70 -0
  88. package/dist/cjs/types/response/coinbase-prime.js +72 -0
  89. package/dist/cjs/types/response/coinbase-prime.js.map +1 -0
  90. package/dist/cjs/types/response/ws.d.ts +7 -0
  91. package/dist/cjs/types/response/ws.js +3 -0
  92. package/dist/cjs/types/response/ws.js.map +1 -0
  93. package/dist/cjs/types/shared.types.d.ts +60 -0
  94. package/dist/cjs/types/shared.types.js +3 -0
  95. package/dist/cjs/types/shared.types.js.map +1 -0
  96. package/dist/cjs/types/websockets/client.d.ts +73 -0
  97. package/dist/cjs/types/websockets/client.js +3 -0
  98. package/dist/cjs/types/websockets/client.js.map +1 -0
  99. package/dist/cjs/types/websockets/events.d.ts +40 -0
  100. package/dist/cjs/types/websockets/events.js +3 -0
  101. package/dist/cjs/types/websockets/events.js.map +1 -0
  102. package/dist/cjs/types/websockets/requests.d.ts +76 -0
  103. package/dist/cjs/types/websockets/requests.js +3 -0
  104. package/dist/cjs/types/websockets/requests.js.map +1 -0
  105. package/dist/cjs/types/websockets/wsAPI.d.ts +9 -0
  106. package/dist/cjs/types/websockets/wsAPI.js +3 -0
  107. package/dist/cjs/types/websockets/wsAPI.js.map +1 -0
  108. package/dist/mjs/CBAdvancedTradeClient.d.ts +559 -0
  109. package/dist/mjs/CBAdvancedTradeClient.js +570 -0
  110. package/dist/mjs/CBAdvancedTradeClient.js.map +1 -0
  111. package/dist/mjs/CBAppClient.d.ts +359 -0
  112. package/dist/mjs/CBAppClient.js +332 -0
  113. package/dist/mjs/CBAppClient.js.map +1 -0
  114. package/dist/mjs/CBCommerceClient.d.ts +110 -0
  115. package/dist/mjs/CBCommerceClient.js +101 -0
  116. package/dist/mjs/CBCommerceClient.js.map +1 -0
  117. package/dist/mjs/CBExchangeClient.d.ts +640 -0
  118. package/dist/mjs/CBExchangeClient.js +747 -0
  119. package/dist/mjs/CBExchangeClient.js.map +1 -0
  120. package/dist/mjs/CBInternationalClient.d.ts +381 -0
  121. package/dist/mjs/CBInternationalClient.js +433 -0
  122. package/dist/mjs/CBInternationalClient.js.map +1 -0
  123. package/dist/mjs/CBPrimeClient.d.ts +363 -0
  124. package/dist/mjs/CBPrimeClient.js +447 -0
  125. package/dist/mjs/CBPrimeClient.js.map +1 -0
  126. package/dist/mjs/WebsocketClient.d.ts +78 -0
  127. package/dist/mjs/WebsocketClient.js +530 -0
  128. package/dist/mjs/WebsocketClient.js.map +1 -0
  129. package/dist/mjs/index.d.ts +13 -0
  130. package/dist/mjs/index.js +14 -0
  131. package/dist/mjs/index.js.map +1 -0
  132. package/dist/mjs/lib/BaseRestClient.d.ts +66 -0
  133. package/dist/mjs/lib/BaseRestClient.js +429 -0
  134. package/dist/mjs/lib/BaseRestClient.js.map +1 -0
  135. package/dist/mjs/lib/BaseWSClient.d.ts +169 -0
  136. package/dist/mjs/lib/BaseWSClient.js +631 -0
  137. package/dist/mjs/lib/BaseWSClient.js.map +1 -0
  138. package/dist/mjs/lib/jwtNode.d.ts +13 -0
  139. package/dist/mjs/lib/jwtNode.js +45 -0
  140. package/dist/mjs/lib/jwtNode.js.map +1 -0
  141. package/dist/mjs/lib/misc-util.d.ts +1 -0
  142. package/dist/mjs/lib/misc-util.js +4 -0
  143. package/dist/mjs/lib/misc-util.js.map +1 -0
  144. package/dist/mjs/lib/requestUtils.d.ts +98 -0
  145. package/dist/mjs/lib/requestUtils.js +69 -0
  146. package/dist/mjs/lib/requestUtils.js.map +1 -0
  147. package/dist/mjs/lib/webCryptoAPI.d.ts +10 -0
  148. package/dist/mjs/lib/webCryptoAPI.js +79 -0
  149. package/dist/mjs/lib/webCryptoAPI.js.map +1 -0
  150. package/dist/mjs/lib/websocket/WsStore.d.ts +63 -0
  151. package/dist/mjs/lib/websocket/WsStore.js +249 -0
  152. package/dist/mjs/lib/websocket/WsStore.js.map +1 -0
  153. package/dist/mjs/lib/websocket/WsStore.types.d.ts +49 -0
  154. package/dist/mjs/lib/websocket/WsStore.types.js +11 -0
  155. package/dist/mjs/lib/websocket/WsStore.types.js.map +1 -0
  156. package/dist/mjs/lib/websocket/logger.d.ts +6 -0
  157. package/dist/mjs/lib/websocket/logger.js +13 -0
  158. package/dist/mjs/lib/websocket/logger.js.map +1 -0
  159. package/dist/mjs/lib/websocket/typeGuards.d.ts +27 -0
  160. package/dist/mjs/lib/websocket/typeGuards.js +78 -0
  161. package/dist/mjs/lib/websocket/typeGuards.js.map +1 -0
  162. package/dist/mjs/lib/websocket/websocket-util.d.ts +120 -0
  163. package/dist/mjs/lib/websocket/websocket-util.js +164 -0
  164. package/dist/mjs/lib/websocket/websocket-util.js.map +1 -0
  165. package/dist/mjs/package.json +3 -0
  166. package/dist/mjs/types/request/advanced-trade-client.d.ts +194 -0
  167. package/dist/mjs/types/request/advanced-trade-client.js +17 -0
  168. package/dist/mjs/types/request/advanced-trade-client.js.map +1 -0
  169. package/dist/mjs/types/request/coinbase-app-client.d.ts +80 -0
  170. package/dist/mjs/types/request/coinbase-app-client.js +27 -0
  171. package/dist/mjs/types/request/coinbase-app-client.js.map +1 -0
  172. package/dist/mjs/types/request/coinbase-exchange.d.ts +332 -0
  173. package/dist/mjs/types/request/coinbase-exchange.js +2 -0
  174. package/dist/mjs/types/request/coinbase-exchange.js.map +1 -0
  175. package/dist/mjs/types/request/coinbase-international.d.ts +160 -0
  176. package/dist/mjs/types/request/coinbase-international.js +12 -0
  177. package/dist/mjs/types/request/coinbase-international.js.map +1 -0
  178. package/dist/mjs/types/request/coinbase-prime.d.ts +298 -0
  179. package/dist/mjs/types/request/coinbase-prime.js +7 -0
  180. package/dist/mjs/types/request/coinbase-prime.js.map +1 -0
  181. package/dist/mjs/types/response/advanced-trade-client.d.ts +759 -0
  182. package/dist/mjs/types/response/advanced-trade-client.js +7 -0
  183. package/dist/mjs/types/response/advanced-trade-client.js.map +1 -0
  184. package/dist/mjs/types/response/coinbase-app-client.d.ts +168 -0
  185. package/dist/mjs/types/response/coinbase-app-client.js +17 -0
  186. package/dist/mjs/types/response/coinbase-app-client.js.map +1 -0
  187. package/dist/mjs/types/response/coinbase-exchange.d.ts +80 -0
  188. package/dist/mjs/types/response/coinbase-exchange.js +82 -0
  189. package/dist/mjs/types/response/coinbase-exchange.js.map +1 -0
  190. package/dist/mjs/types/response/coinbase-international.d.ts +40 -0
  191. package/dist/mjs/types/response/coinbase-international.js +42 -0
  192. package/dist/mjs/types/response/coinbase-international.js.map +1 -0
  193. package/dist/mjs/types/response/coinbase-prime.d.ts +70 -0
  194. package/dist/mjs/types/response/coinbase-prime.js +72 -0
  195. package/dist/mjs/types/response/coinbase-prime.js.map +1 -0
  196. package/dist/mjs/types/response/ws.d.ts +7 -0
  197. package/dist/mjs/types/response/ws.js +2 -0
  198. package/dist/mjs/types/response/ws.js.map +1 -0
  199. package/dist/mjs/types/shared.types.d.ts +60 -0
  200. package/dist/mjs/types/shared.types.js +2 -0
  201. package/dist/mjs/types/shared.types.js.map +1 -0
  202. package/dist/mjs/types/websockets/client.d.ts +73 -0
  203. package/dist/mjs/types/websockets/client.js +2 -0
  204. package/dist/mjs/types/websockets/client.js.map +1 -0
  205. package/dist/mjs/types/websockets/events.d.ts +40 -0
  206. package/dist/mjs/types/websockets/events.js +2 -0
  207. package/dist/mjs/types/websockets/events.js.map +1 -0
  208. package/dist/mjs/types/websockets/requests.d.ts +76 -0
  209. package/dist/mjs/types/websockets/requests.js +2 -0
  210. package/dist/mjs/types/websockets/requests.js.map +1 -0
  211. package/dist/mjs/types/websockets/wsAPI.d.ts +9 -0
  212. package/dist/mjs/types/websockets/wsAPI.js +2 -0
  213. package/dist/mjs/types/websockets/wsAPI.js.map +1 -0
  214. package/package.json +42 -30
  215. package/index.js +0 -1
  216. package/lib/index.d.ts +0 -1
  217. package/lib/index.js +0 -16
  218. package/lib/index.js.map +0 -1
@@ -0,0 +1,530 @@
1
+ import { BaseWebsocketClient } from './lib/BaseWSClient.js';
2
+ import { signWSJWT } from './lib/jwtNode.js';
3
+ import { neverGuard } from './lib/misc-util.js';
4
+ import { isCBAdvancedTradeErrorEvent, isCBAdvancedTradeWSEvent, isCBExchangeWSEvent, isCBExchangeWSRequestOperation, isCBINTXWSRequestOperation, isCBPrimeWSRequestOperation, } from './lib/websocket/typeGuards.js';
5
+ import { getCBExchangeWSSign, getCBInternationalWSSign, getCBPrimeWSSign, getMergedCBExchangeWSRequestOperations, WS_KEY_MAP, WS_URL_MAP, } from './lib/websocket/websocket-util.js';
6
+ export const WS_LOGGER_CATEGORY = { category: 'coinbase-ws' };
7
+ /**
8
+ * Any WS keys in this list will trigger automatic auth as required, if credentials are available
9
+ */
10
+ const PRIVATE_WS_KEYS = [
11
+ // Account data (fills), requires auth.
12
+ WS_KEY_MAP.advTradeUserData,
13
+ // Coinbase Direct Market Data has direct access to Coinbase Exchange servers and requires auth.
14
+ WS_KEY_MAP.exchangeDirectMarketData,
15
+ // The INTX feed always requires auth.
16
+ WS_KEY_MAP.internationalMarketData,
17
+ // The Prime feed always requires auth.
18
+ WS_KEY_MAP.primeMarketData,
19
+ ];
20
+ /**
21
+ * Any WS keys in this list will ALWAYS skip the authentication process, even if credentials are available
22
+ */
23
+ export const PUBLIC_WS_KEYS = [
24
+ WS_KEY_MAP.advTradeMarketData,
25
+ WS_KEY_MAP.exchangeMarketData,
26
+ ];
27
+ export class WebsocketClient extends BaseWebsocketClient {
28
+ /**
29
+ * Request connection of all dependent (public & private) websockets, instead of waiting for automatic connection by library
30
+ */
31
+ connectAll() {
32
+ return Promise.all([
33
+ this.connect(WS_KEY_MAP.advTradeMarketData),
34
+ this.connect(WS_KEY_MAP.advTradeUserData),
35
+ this.connect(WS_KEY_MAP.exchangeMarketData),
36
+ this.connect(WS_KEY_MAP.exchangeDirectMarketData),
37
+ this.connect(WS_KEY_MAP.internationalMarketData),
38
+ this.connect(WS_KEY_MAP.primeMarketData),
39
+ ]);
40
+ }
41
+ /**
42
+ * Request subscription to one or more topics. Pass topics as either an array of strings, or array of objects (if the topic has parameters).
43
+ * Objects should be formatted as {topic: string, params: object}.
44
+ *
45
+ * - Subscriptions are automatically routed to the correct websocket connection.
46
+ * - Authentication/connection is automatic.
47
+ * - Resubscribe after network issues is automatic.
48
+ *
49
+ * Call `unsubscribe(topics)` to remove topics
50
+ */
51
+ subscribe(requests, wsKey) {
52
+ if (!Array.isArray(requests)) {
53
+ this.subscribeTopicsForWsKey([requests], wsKey);
54
+ return;
55
+ }
56
+ if (requests.length) {
57
+ this.subscribeTopicsForWsKey(requests, wsKey);
58
+ }
59
+ }
60
+ /**
61
+ * Unsubscribe from one or more topics. Similar to subscribe() but in reverse.
62
+ *
63
+ * - Requests are automatically routed to the correct websocket connection.
64
+ * - These topics will be removed from the topic cache, so they won't be subscribed to again.
65
+ */
66
+ unsubscribe(requests, wsKey) {
67
+ if (!Array.isArray(requests)) {
68
+ this.unsubscribeTopicsForWsKey([requests], wsKey);
69
+ return;
70
+ }
71
+ if (requests.length) {
72
+ this.unsubscribeTopicsForWsKey(requests, wsKey);
73
+ }
74
+ }
75
+ async sendWSAPIRequest(wsKey, channel, params) {
76
+ this.logger.trace(`sendWSAPIRequest(): assert "${wsKey}" is connected`, {
77
+ channel,
78
+ params,
79
+ });
80
+ return;
81
+ }
82
+ /**
83
+ *
84
+ * Internal methods
85
+ *
86
+ */
87
+ /**
88
+ * Return a websocket URL, which is connected to as-is.
89
+ * If a token or anything else is needed in the URL, this is a good place to add it.
90
+ */
91
+ async getWsUrl(wsKey) {
92
+ if (this.options.wsUrl) {
93
+ return this.options.wsUrl;
94
+ }
95
+ const useSandbox = this.options.useSandbox;
96
+ const networkKey = useSandbox ? 'testnet' : 'livenet';
97
+ const baseUrl = WS_URL_MAP[wsKey][networkKey];
98
+ return baseUrl;
99
+ }
100
+ sendPingEvent(wsKey) {
101
+ const wsState = this.getWsStore().get(wsKey);
102
+ const ws = wsState?.ws;
103
+ ws?.ping();
104
+ }
105
+ sendPongEvent(wsKey) {
106
+ try {
107
+ this.logger.trace(`Sending upstream ws PONG: `, {
108
+ ...WS_LOGGER_CATEGORY,
109
+ wsMessage: 'PONG',
110
+ wsKey,
111
+ });
112
+ if (!wsKey) {
113
+ throw new Error('Cannot send PONG, no wsKey provided');
114
+ }
115
+ const wsState = this.getWsStore().get(wsKey);
116
+ if (!wsState || !wsState?.ws) {
117
+ throw new Error(`Cannot send pong, ${wsKey} socket not connected yet`);
118
+ }
119
+ // Send a protocol layer pong
120
+ wsState.ws.pong();
121
+ }
122
+ catch (e) {
123
+ this.logger.error(`Failed to send WS PONG`, {
124
+ ...WS_LOGGER_CATEGORY,
125
+ wsMessage: 'PONG',
126
+ wsKey,
127
+ exception: e,
128
+ });
129
+ }
130
+ }
131
+ isWsPing(msg) {
132
+ if (msg?.data === 'ping') {
133
+ return true;
134
+ }
135
+ return false;
136
+ }
137
+ isWsPong(msg) {
138
+ if (msg?.data?.includes('pong')) {
139
+ return true;
140
+ }
141
+ // this.logger.info(`Not a pong: `, msg);
142
+ return false;
143
+ }
144
+ resolveEmittableEvents(wsKey, event) {
145
+ const results = [];
146
+ try {
147
+ const parsed = JSON.parse(event.data);
148
+ const responseEvents = ['subscriptions'];
149
+ // E.g. {"type":"error","message":"rate limit exceeded","wsKey":"advTradeMarketData"}
150
+ if (isCBAdvancedTradeErrorEvent(parsed)) {
151
+ return [{ eventType: 'exception', event: parsed }];
152
+ }
153
+ // Parse Advanced Trade WS events (update & response)
154
+ if (isCBAdvancedTradeWSEvent(parsed)) {
155
+ const eventType = parsed.channel;
156
+ // These are request/reply pattern events (e.g. after subscribing to topics or authenticating)
157
+ if (responseEvents.includes(eventType)) {
158
+ return [
159
+ {
160
+ eventType: 'response',
161
+ event: parsed,
162
+ },
163
+ ];
164
+ }
165
+ // Generic data for a channel
166
+ if (typeof eventType === 'string') {
167
+ return [
168
+ {
169
+ eventType: 'update',
170
+ event: parsed,
171
+ },
172
+ ];
173
+ }
174
+ }
175
+ // Parse CB Exchange WS events
176
+ if (isCBExchangeWSEvent(parsed, wsKey)) {
177
+ const eventType = parsed.type;
178
+ if (responseEvents.includes(eventType)) {
179
+ return [
180
+ {
181
+ eventType: 'response',
182
+ event: parsed,
183
+ },
184
+ ];
185
+ }
186
+ // Generic data for a channel
187
+ if (typeof eventType === 'string') {
188
+ return [
189
+ {
190
+ eventType: 'update',
191
+ event: parsed,
192
+ },
193
+ ];
194
+ }
195
+ }
196
+ this.logger.error(`!! (${wsKey}) Unhandled non-string event type... Defaulting to "update" channel...` +
197
+ JSON.stringify(parsed));
198
+ return [
199
+ {
200
+ eventType: 'update',
201
+ event: parsed,
202
+ },
203
+ ];
204
+ }
205
+ catch (e) {
206
+ results.push({
207
+ event: {
208
+ message: 'Failed to parse event data due to exception',
209
+ exception: e,
210
+ eventData: event.data,
211
+ },
212
+ eventType: 'exception',
213
+ });
214
+ this.logger.error(`Failed to parse event data due to exception: `, {
215
+ exception: e,
216
+ eventData: event.data,
217
+ });
218
+ }
219
+ return results;
220
+ }
221
+ /**
222
+ * Determines if a topic is for a private channel, using a hardcoded list of strings
223
+ */
224
+ isPrivateTopicRequest(request, wsKey) {
225
+ return request && PRIVATE_WS_KEYS.includes(wsKey);
226
+ }
227
+ getWsKeyForMarket(market, isPrivate) {
228
+ switch (market) {
229
+ case 'advancedTrade': {
230
+ return isPrivate
231
+ ? WS_KEY_MAP.advTradeUserData
232
+ : WS_KEY_MAP.advTradeMarketData;
233
+ }
234
+ case 'exchange': {
235
+ return isPrivate
236
+ ? WS_KEY_MAP.exchangeDirectMarketData
237
+ : WS_KEY_MAP.exchangeMarketData;
238
+ }
239
+ case 'international': {
240
+ return isPrivate
241
+ ? WS_KEY_MAP.internationalMarketData
242
+ : WS_KEY_MAP.internationalMarketData;
243
+ }
244
+ case 'prime': {
245
+ return isPrivate
246
+ ? WS_KEY_MAP.primeMarketData
247
+ : WS_KEY_MAP.primeMarketData;
248
+ }
249
+ default: {
250
+ throw neverGuard(market, `Unhandled "market": "${market}"`);
251
+ }
252
+ }
253
+ }
254
+ getWsMarketForWsKey(wsKey) {
255
+ switch (wsKey) {
256
+ case WS_KEY_MAP.advTradeMarketData:
257
+ case WS_KEY_MAP.advTradeUserData: {
258
+ return 'advancedTrade';
259
+ }
260
+ case WS_KEY_MAP.exchangeMarketData:
261
+ case WS_KEY_MAP.exchangeDirectMarketData: {
262
+ return 'exchange';
263
+ }
264
+ case WS_KEY_MAP.internationalMarketData: {
265
+ return 'international';
266
+ }
267
+ case WS_KEY_MAP.primeMarketData: {
268
+ return 'prime';
269
+ }
270
+ default: {
271
+ throw neverGuard(wsKey, `Unhandled WsKey: "${wsKey}"`);
272
+ }
273
+ }
274
+ }
275
+ getPrivateWSKeys() {
276
+ return PRIVATE_WS_KEYS;
277
+ }
278
+ /** Force subscription requests to be sent in smaller batches, if a number is returned */
279
+ getMaxTopicsPerSubscribeEvent(wsKey) {
280
+ switch (wsKey) {
281
+ case WS_KEY_MAP.advTradeMarketData:
282
+ case WS_KEY_MAP.advTradeUserData:
283
+ // Technically, INTX supports request batching but not with nested parameters, so we'll send one at a time
284
+ case WS_KEY_MAP.internationalMarketData:
285
+ return 1;
286
+ // Exchange supports request batching, no known limit to max topics per request
287
+ case WS_KEY_MAP.exchangeDirectMarketData:
288
+ case WS_KEY_MAP.exchangeMarketData: {
289
+ return null;
290
+ }
291
+ default: {
292
+ return null;
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * Map one or more topics into fully prepared "subscribe request" events (already stringified and ready to send)
298
+ */
299
+ async getWsOperationEventsForTopics(topicRequests, wsKey, operation) {
300
+ if (!topicRequests.length) {
301
+ return [];
302
+ }
303
+ const apiKey = this.options.apiKey;
304
+ const apiSecret = this.options.apiSecret;
305
+ const apiPassphrase = this.options.apiPassphrase;
306
+ /**
307
+ * Operations need to be structured in a way that this exchange understands.
308
+ * Parse the internal format into the format expected by the exchange. One request per operation.
309
+ */
310
+ const operationEvents = topicRequests.map((topicRequest) => {
311
+ switch (wsKey) {
312
+ case WS_KEY_MAP.advTradeMarketData:
313
+ case WS_KEY_MAP.advTradeUserData: {
314
+ const wsRequestEvent = {
315
+ type: operation,
316
+ channel: topicRequest.topic,
317
+ ...topicRequest.payload,
318
+ };
319
+ return wsRequestEvent;
320
+ }
321
+ case WS_KEY_MAP.exchangeMarketData:
322
+ case WS_KEY_MAP.exchangeDirectMarketData: {
323
+ const wsRequestEvent = {
324
+ type: operation,
325
+ channels: [
326
+ topicRequest.payload
327
+ ? {
328
+ name: topicRequest.topic,
329
+ ...topicRequest.payload,
330
+ }
331
+ : topicRequest.topic,
332
+ ],
333
+ };
334
+ return wsRequestEvent;
335
+ }
336
+ case WS_KEY_MAP.internationalMarketData: {
337
+ // In case there's ever more operation types than "subscribe" and "unsubscribe"
338
+ if (!['subscribe', 'unsubscribe'].includes(operation)) {
339
+ throw new Error(`Unhandled request operation type for CB International WS: "${operation}"`);
340
+ }
341
+ const wsRequestEvent = {
342
+ type: operation === 'subscribe' ? 'SUBSCRIBE' : 'UNSUBSCRIBE',
343
+ // As of Sep 2024, parameters (such as product_id[]) cannot be nested with the channels array
344
+ channels: [topicRequest.topic],
345
+ // This merges parametrs (such as product_id[]) into the top level request object
346
+ ...topicRequest.payload,
347
+ };
348
+ return wsRequestEvent;
349
+ }
350
+ case WS_KEY_MAP.primeMarketData: {
351
+ const wsRequestEvent = {
352
+ type: operation,
353
+ channel: topicRequest.topic,
354
+ ...topicRequest.payload,
355
+ };
356
+ return wsRequestEvent;
357
+ }
358
+ default: {
359
+ throw new Error(`Not implemented for "${wsKey}" yet - if you need Prime or INTX, please get in touch.`);
360
+ }
361
+ }
362
+ });
363
+ const maxTopicsPerEvent = this.getMaxTopicsPerSubscribeEvent(wsKey);
364
+ const isPrivateChannel = PRIVATE_WS_KEYS.includes(wsKey);
365
+ /**
366
+ * - Merge commands into one if the exchange supports batch requests,
367
+ * - Apply auth/sign, if needed,
368
+ * - Apply any final formatting to return a string array, ready to be sent upstream.
369
+ */
370
+ switch (wsKey) {
371
+ case WS_KEY_MAP.advTradeMarketData:
372
+ case WS_KEY_MAP.advTradeUserData: {
373
+ // Events that are ready to send (usually stringified JSON)
374
+ // ADV trade only supports sending one at a time, so we don't try to merge them
375
+ // These are already signed, if needed.
376
+ return operationEvents.map((evt) => {
377
+ if (!isPrivateChannel) {
378
+ return JSON.stringify(evt);
379
+ }
380
+ if (!apiKey || !apiSecret) {
381
+ throw new Error(`"options.apiKey" (api key name) and/or "options.apiSecret" missing, unable to generate JWT`);
382
+ }
383
+ const jwtExpiresSeconds = this.options.jwtExpiresSeconds || 120;
384
+ const timestamp = Date.now();
385
+ /**
386
+ * No batching is supported for this product group, so we can already
387
+ * handle sign here and return it as is
388
+ */
389
+ const sign = signWSJWT({
390
+ algorithm: 'ES256',
391
+ timestampMs: timestamp,
392
+ jwtExpiresSeconds,
393
+ apiPubKey: apiKey,
394
+ apiPrivKey: apiSecret,
395
+ });
396
+ const operationEventWithSign = {
397
+ ...evt,
398
+ jwt: sign,
399
+ };
400
+ return JSON.stringify(operationEventWithSign);
401
+ });
402
+ }
403
+ case WS_KEY_MAP.exchangeMarketData:
404
+ case WS_KEY_MAP.exchangeDirectMarketData: {
405
+ if (!operationEvents.every((evt) => isCBExchangeWSRequestOperation(evt, wsKey))) {
406
+ // Don't expect this to ever happen, but just to please typescript...
407
+ throw new Error(`Unexpected request schema for exchange WS request builder`);
408
+ }
409
+ const mergedOperationEvents = getMergedCBExchangeWSRequestOperations(operationEvents);
410
+ // We're under the max topics per request limit.
411
+ // Send operation requests as one merged request
412
+ if (!maxTopicsPerEvent ||
413
+ mergedOperationEvents.channels.length <= maxTopicsPerEvent) {
414
+ if (!isPrivateChannel) {
415
+ return [JSON.stringify(mergedOperationEvents)];
416
+ }
417
+ if (!apiKey || !apiSecret || !apiPassphrase) {
418
+ throw new Error(`One or more of apiKey, apiSecret and/or apiPassphrase are missing. These must be provided to use private channels.`);
419
+ }
420
+ const { sign, timestampInSeconds } = await getCBExchangeWSSign(apiSecret);
421
+ const mergedOperationEventsWithSign = {
422
+ ...mergedOperationEvents,
423
+ signature: sign,
424
+ key: apiKey,
425
+ passphrase: apiPassphrase,
426
+ timestamp: timestampInSeconds,
427
+ };
428
+ return [JSON.stringify(mergedOperationEventsWithSign)];
429
+ }
430
+ // We're over the max topics per request limit. Break into batches.
431
+ const finalOperations = [];
432
+ for (let i = 0; i < mergedOperationEvents.channels.length; i += maxTopicsPerEvent) {
433
+ const batchChannels = mergedOperationEvents.channels.slice(i, i + maxTopicsPerEvent);
434
+ const wsRequestEvent = {
435
+ type: mergedOperationEvents.type,
436
+ channels: [...batchChannels],
437
+ };
438
+ if (isPrivateChannel) {
439
+ if (!apiKey || !apiSecret || !apiPassphrase) {
440
+ throw new Error(`One or more of apiKey, apiSecret and/or apiPassphrase are missing. These must be provided to use private channels.`);
441
+ }
442
+ const { sign, timestampInSeconds } = await getCBExchangeWSSign(apiSecret);
443
+ const wsRequestEventWithSign = {
444
+ ...wsRequestEvent,
445
+ signature: sign,
446
+ key: apiKey,
447
+ passphrase: apiPassphrase,
448
+ timestamp: timestampInSeconds,
449
+ };
450
+ finalOperations.push(JSON.stringify(wsRequestEventWithSign));
451
+ }
452
+ else {
453
+ finalOperations.push(JSON.stringify(wsRequestEvent));
454
+ }
455
+ }
456
+ return finalOperations;
457
+ }
458
+ case WS_KEY_MAP.internationalMarketData: {
459
+ if (!operationEvents.every((evt) => isCBINTXWSRequestOperation(evt, wsKey))) {
460
+ // Don't expect this to ever happen, but just to please typescript...
461
+ throw new Error(`Unexpected request schema for exchange WS request builder`);
462
+ }
463
+ // We're over the max topics per request limit. Break into batches.
464
+ const finalOperations = [];
465
+ for (const operationEvent of operationEvents) {
466
+ if (!apiKey || !apiSecret || !apiPassphrase) {
467
+ throw new Error(`One or more of apiKey, apiSecret and/or apiPassphrase are missing. These must be provided to use private channels.`);
468
+ }
469
+ const { sign, timestampInSeconds } = await getCBInternationalWSSign(apiKey, apiSecret, apiPassphrase);
470
+ const wsRequestEventWithSign = {
471
+ ...operationEvent,
472
+ time: timestampInSeconds,
473
+ key: apiKey,
474
+ passphrase: apiPassphrase,
475
+ signature: sign,
476
+ };
477
+ finalOperations.push(JSON.stringify(wsRequestEventWithSign));
478
+ }
479
+ // throw new Error(
480
+ // 'CB INTX is not fully implemented yet - awaiting test environment... if you need this, please get in touch.',
481
+ // );
482
+ return finalOperations;
483
+ }
484
+ case WS_KEY_MAP.primeMarketData: {
485
+ if (!operationEvents.every((evt) => isCBPrimeWSRequestOperation(evt, wsKey))) {
486
+ // Don't expect this to ever happen, but just to please typescript...
487
+ throw new Error(`Unexpected request schema for exchange WS request builder`);
488
+ }
489
+ if (!apiKey || !apiSecret || !apiPassphrase) {
490
+ throw new Error(`One or more of apiKey, apiSecret and/or apiPassphrase are missing. These must be provided to use private channels.`);
491
+ }
492
+ const finalOperations = [];
493
+ for (const operationEvent of operationEvents) {
494
+ const { sign, timestampInSeconds } = await getCBPrimeWSSign({
495
+ channelName: operationEvent.channel,
496
+ svcAccountId: operationEvent.svcAccountId,
497
+ portfolioId: operationEvent.portfolio_id,
498
+ apiKey,
499
+ apiSecret,
500
+ product_ids: operationEvent.product_ids,
501
+ });
502
+ const wsRequestEventWithSign = {
503
+ ...operationEvent,
504
+ api_key_id: apiKey,
505
+ access_key: apiSecret,
506
+ passphrase: apiPassphrase,
507
+ signature: sign,
508
+ timestamp: timestampInSeconds,
509
+ };
510
+ finalOperations.push(JSON.stringify(wsRequestEventWithSign));
511
+ }
512
+ // throw new Error(
513
+ // 'CB Prime is not fully implemented yet - awaiting test environment... if you need this, please get in touch.',
514
+ // );
515
+ return finalOperations;
516
+ }
517
+ default: {
518
+ throw neverGuard(wsKey, `Not implemented for "${wsKey}" yet`);
519
+ // throw new Error(`Not implemented for "${wsKey}" yet`);
520
+ }
521
+ }
522
+ }
523
+ /**
524
+ * Events are signed per-request, so this function isn't needed for Coinbase.
525
+ */
526
+ async getWsAuthRequestEvent(wsKey) {
527
+ return { wsKey };
528
+ }
529
+ }
530
+ //# sourceMappingURL=WebsocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebsocketClient.js","sourceRoot":"","sources":["../../src/WebsocketClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export * from './CBAdvancedTradeClient.js';
2
+ export * from './CBAppClient.js';
3
+ export * from './CBCommerceClient.js';
4
+ export * from './CBExchangeClient.js';
5
+ export * from './CBInternationalClient.js';
6
+ export * from './CBPrimeClient.js';
7
+ export * from './lib/websocket/logger.js';
8
+ export * from './lib/websocket/websocket-util.js';
9
+ export * from './types/request/advanced-trade-client.js';
10
+ export * from './types/websockets/client.js';
11
+ export * from './types/websockets/events.js';
12
+ export * from './types/websockets/requests.js';
13
+ export * from './WebsocketClient.js';
@@ -0,0 +1,14 @@
1
+ export * from './CBAdvancedTradeClient.js';
2
+ export * from './CBAppClient.js';
3
+ export * from './CBCommerceClient.js';
4
+ export * from './CBExchangeClient.js';
5
+ export * from './CBInternationalClient.js';
6
+ export * from './CBPrimeClient.js';
7
+ export * from './lib/websocket/logger.js';
8
+ export * from './lib/websocket/websocket-util.js';
9
+ export * from './types/request/advanced-trade-client.js';
10
+ export * from './types/websockets/client.js';
11
+ export * from './types/websockets/events.js';
12
+ export * from './types/websockets/requests.js';
13
+ export * from './WebsocketClient.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ import { CloseAdvTradePositionRequest, SubmitAdvTradeOrderRequest } from '../types/request/advanced-trade-client.js';
3
+ import { SubmitCBExchOrderRequest } from '../types/request/coinbase-exchange.js';
4
+ import { SubmitINTXOrderRequest } from '../types/request/coinbase-international.js';
5
+ import { SubmitPrimeOrderRequest } from '../types/request/coinbase-prime.js';
6
+ import { CustomOrderIdProperty } from '../types/shared.types.js';
7
+ import { RestClientOptions, RestClientType } from './requestUtils.js';
8
+ /**
9
+ * Some requests require some params to be in the query string, some in the body, some even in the headers.
10
+ * This type anticipates either are possible in any combination.
11
+ *
12
+ * The request builder will automatically handle where parameters should go.
13
+ */
14
+ type ParamsInRequest = {
15
+ query?: object;
16
+ body?: object;
17
+ headers?: object;
18
+ };
19
+ export declare abstract class BaseRestClient {
20
+ private options;
21
+ private baseUrl;
22
+ private globalRequestOptions;
23
+ private apiKey;
24
+ private apiSecret;
25
+ private apiPassphrase;
26
+ /** Defines the client type (affecting how requests & signatures behave) */
27
+ abstract getClientType(): RestClientType;
28
+ /**
29
+ * Create an instance of the REST client. Pass API credentials in the object in the first parameter.
30
+ * @param {RestClientOptions} [restClientOptions={}] options to configure REST API connectivity
31
+ * @param {AxiosRequestConfig} [networkOptions={}] HTTP networking options for axios
32
+ */
33
+ constructor(restClientOptions?: RestClientOptions, networkOptions?: AxiosRequestConfig);
34
+ /**
35
+ * Timestamp used to sign the request. Override this method to implement your own timestamp/sync mechanism
36
+ */
37
+ getSignTimestampMs(): number;
38
+ get(endpoint: string, params?: object): Promise<any>;
39
+ post(endpoint: string, params?: ParamsInRequest): Promise<any>;
40
+ getPrivate(endpoint: string, params?: object): Promise<any>;
41
+ postPrivate(endpoint: string, params?: ParamsInRequest): Promise<any>;
42
+ deletePrivate(endpoint: string, params?: ParamsInRequest): Promise<any>;
43
+ putPrivate(endpoint: string, params?: ParamsInRequest): Promise<any>;
44
+ patchPrivate(endpoint: string, params?: ParamsInRequest): Promise<any>;
45
+ /**
46
+ * @private Make a HTTP request to a specific endpoint. Private endpoint API calls are automatically signed.
47
+ */
48
+ private _call;
49
+ generateNewOrderId(): string;
50
+ /**
51
+ * Validate syntax meets requirements set by coinbase. Log warning if not.
52
+ */
53
+ protected validateOrderId(params: SubmitAdvTradeOrderRequest | CloseAdvTradePositionRequest | SubmitCBExchOrderRequest | SubmitINTXOrderRequest | SubmitPrimeOrderRequest, orderIdProperty: CustomOrderIdProperty): void;
54
+ /**
55
+ * @private generic handler to parse request exceptions
56
+ */
57
+ parseException(e: any, requestParams: any): unknown;
58
+ /**
59
+ * @private sign request and set recv window
60
+ */
61
+ private signRequest;
62
+ private prepareSignParams;
63
+ /** Returns an axios request object. Handles signing process automatically if this is a private API call */
64
+ private buildRequest;
65
+ }
66
+ export {};