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
package/README.md CHANGED
@@ -1,14 +1,38 @@
1
- # coinbase-api
1
+ # Node.js & JavaScript SDK for Coinbase REST APIs & WebSockets
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/coinbase-api)][1] [![npm size](https://img.shields.io/bundlephobia/min/coinbase-api/latest)][1] [![npm downloads](https://img.shields.io/npm/dt/coinbase-api)][1]
3
+ <p align="center">
4
+ <a href="https://www.npmjs.com/package/coinbase-api">
5
+ <picture>
6
+ <source media="(prefers-color-scheme: dark)" srcset="https://github.com/tiagosiebler/coinbase-api/blob/master/docs/images/logoDarkMode2.svg?raw=true#gh-dark-mode-only">
7
+ <img alt="SDK Logo" src="https://github.com/tiagosiebler/coinbase-api/blob/master/docs/images/logoBrightMode2.svg?raw=true#gh-light-mode-only">
8
+ </picture>
9
+ </a>
10
+ </p>
11
+
12
+ [![npm version](https://img.shields.io/npm/v/coinbase-api)][1]
13
+ [![npm size](https://img.shields.io/bundlephobia/min/coinbase-api/latest)][1]
14
+ [![npm downloads](https://img.shields.io/npm/dt/coinbase-api)][1]
15
+ [![Build & Test](https://github.com/tiagosiebler/coinbase-api/actions/workflows/e2etest.yml/badge.svg?branch=master)](https://github.com/tiagosiebler/coinbase-api/actions/workflows/e2etest.yml)
4
16
  [![last commit](https://img.shields.io/github/last-commit/tiagosiebler/coinbase-api)][1]
5
- [![CodeFactor](https://www.codefactor.io/repository/github/tiagosiebler/coinbase-api/badge)](https://www.codefactor.io/repository/github/tiagosiebler/coinbase-api)
17
+ [![Telegram](https://img.shields.io/badge/chat-on%20telegram-blue.svg)](https://t.me/nodetraders)
6
18
 
7
19
  [1]: https://www.npmjs.com/package/coinbase-api
8
20
 
9
- WARNING: This package is still early beta, following the designs of my other connectors. If you want to stay informed when this may be ready for testing, please get in touch via telegram.
21
+ Updated & performant JavaScript & Node.js SDK for the Coinbase REST APIs and WebSockets:
10
22
 
11
- Node.js connector for the coinbase APIs and WebSockets, with TypeScript & browser support.
23
+ - Supports both retail and institutional REST clients and Websockets:
24
+ - [Coinbase Advanced Trade](https://docs.cdp.coinbase.com/advanced-trade/docs/welcome)
25
+ - [Coinbase App](https://docs.cdp.coinbase.com/coinbase-app/docs/welcome)
26
+ - [Coinbase Exchange](https://docs.cdp.coinbase.com/exchange/docs/welcome)
27
+ - [Coinbase International Exchange](https://docs.cdp.coinbase.com/intx/docs/welcome)
28
+ - [Coinbase Prime](https://docs.cdp.coinbase.com/prime/docs/welcome)
29
+ - [Coinbase Commerce](https://docs.cdp.coinbase.com/commerce-onchain/docs/welcome)
30
+ - Complete integration with all REST APIs and WebSockets.
31
+ - TypeScript support (with type declarations for most API requests & responses)
32
+ - Robust WebSocket integration with configurable connection heartbeats & automatic reconnect then resubscribe workflows.
33
+ - Automatically supports both ESM and CJS projects.
34
+ - Proxy support via axios integration.
35
+ - Active community support & collaboration in telegram: [Node.js Algo Traders](https://t.me/nodetraders).
12
36
 
13
37
  ## Installation
14
38
 
@@ -19,32 +43,432 @@ Node.js connector for the coinbase APIs and WebSockets, with TypeScript & browse
19
43
  - Issues? Check the [issues tab](https://github.com/tiagosiebler/coinbase-api/issues).
20
44
  - Discuss & collaborate with other node devs? Join our [Node.js Algo Traders](https://t.me/nodetraders) engineering community on telegram.
21
45
 
46
+ <!-- template_related_projects -->
47
+
22
48
  ## Related projects
23
49
 
24
50
  Check out my related JavaScript/TypeScript/Node.js projects:
25
51
 
26
- - Try my API & WebSocket SDKs:
52
+ - Try my REST API & WebSocket SDKs:
27
53
  - [Bybit-api Node.js SDK](https://www.npmjs.com/package/bybit-api)
28
- - [Binance Node.js SDK](https://www.npmjs.com/package/binance)
29
54
  - [Okx-api Node.js SDK](https://www.npmjs.com/package/okx-api)
55
+ - [Binance Node.js SDK](https://www.npmjs.com/package/binance)
56
+ - [Gateio-api Node.js SDK](https://www.npmjs.com/package/gateio-api)
30
57
  - [Bitget-api Node.js SDK](https://www.npmjs.com/package/bitget-api)
31
- - [Bitmart-api Nodejs SDK](https://www.npmjs.com/package/bitmart-api)
58
+ - [Kucoin-api Node.js SDK](https://www.npmjs.com/package/kucoin-api)
59
+ - [Coinbase-api Node.js SDK](https://www.npmjs.com/package/coinbase-api)
60
+ - [Bitmart-api Node.js SDK](https://www.npmjs.com/package/bitmart-api)
32
61
  - Try my misc utilities:
33
- - [orderbooks node.js](https://www.npmjs.com/package/orderbooks)
34
- - [accountstate](https://www.npmjs.com/package/accountstate)
62
+ - [OrderBooks Node.js](https://www.npmjs.com/package/orderbooks)
63
+ - [Crypto Exchange Account State Cache](https://www.npmjs.com/package/accountstate)
35
64
  - Check out my examples:
36
- - [awesome-crypto-examples](https://github.com/tiagosiebler/awesome-crypto-examples)
65
+ - [awesome-crypto-examples Node.js](https://github.com/tiagosiebler/awesome-crypto-examples)
66
+ <!-- template_related_projects_end -->
67
+
68
+ ## Documentation
69
+
70
+ Most methods accept JS objects. These can be populated using parameters specified by Coinbase's API documentation.
71
+
72
+ - [Coinbase API Documentation](https://docs.cdp.coinbase.com/product-apis/docs/welcome)
73
+ - [REST Endpoint Function List](./docs/endpointFunctionList.md)
74
+ <!-- - [TSDoc Documentation (autogenerated using typedoc)](https://tsdocs.dev/docs/coinbase-api) -->
37
75
 
38
76
  ## Structure
39
77
 
40
- This project uses typescript. Resources are stored in 3 key structures:
78
+ This project uses typescript. Resources are stored in 2 key structures:
41
79
 
42
80
  - [src](./src) - the whole connector written in typescript
43
- - [dist](./dist) - the javascript version of the project (compiled from typescript). This should not be edited directly, as it will be overwritten with each release.
44
81
  - [examples](./examples) - some implementation examples & demonstrations. Contributions are welcome!
45
82
 
46
83
  ---
47
84
 
48
85
  # Usage
49
86
 
50
- TODO
87
+ Create API credentials
88
+
89
+ - [Coinbase API Key Management](https://www.coinbase.com/settings/api)
90
+
91
+ ### REST API
92
+
93
+ To use any of Coinbase's REST APIs in JavaScript/TypeScript/Node.js, import (or require) the client you want to use. We currently support the following clients:
94
+
95
+ - [CBAdvancedTradeClient](./src/CBAdvancedTradeClient.ts)
96
+ - [CBAppClient](./src/CBAppClient.ts)
97
+ - [CBExchangeClient](./src/CBExchangeClient.ts)
98
+ - [CBInternationalClient](./src/CBInternationalClient.ts)
99
+ - [CBPrimeClient](./src/CBPrimeClient.ts)
100
+ - [CBCommerceClient](./src/CBCommerceClient.ts)
101
+
102
+ #### CBAdvancedTradeClient
103
+
104
+ ```javascript
105
+ import { CBAdvancedTradeClient } from 'coinbase-api';
106
+ /**
107
+ * Or, with import:
108
+ * import { CBAdvancedTradeClient } from 'coinbase-api';
109
+ */
110
+
111
+ // insert your API key details here from Coinbase API Key Management
112
+ const advancedTradeCdpAPIKey = {
113
+ // dummy example keys to understand the structure
114
+ name: 'organizations/13232211d-d7e2-d7e2-d7e2-d7e2d7e2d7e2/apiKeys/d7e2d7e2-d7e2-d7e2-d7e2-d7e2d7e2d7e2',
115
+ privateKey:
116
+ '-----BEGIN EC PRIVATE KEY-----\nADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj/ADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj+oAoGCCqGSM49\nAwEHoUQDQgAEhtAep/ADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj+bzduY3iYXEmj/KtCk\nADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj\n-----END EC PRIVATE KEY-----\n',
117
+ };
118
+
119
+ const client = new CBAdvancedTradeClient({
120
+ // Either pass the full JSON object that can be downloaded when creating your API keys
121
+ // cdpApiKey: advancedTradeCdpAPIKey,
122
+
123
+ // Or use the key name as "apiKey" and private key (WITH the "begin/end EC PRIVATE KEY" comment) as "apiSecret"
124
+ apiKey: advancedTradeCdpAPIKey.name,
125
+ apiSecret: advancedTradeCdpAPIKey.privateKey,
126
+ });
127
+
128
+ // Example usage of the CBAdvancedTradeClient
129
+ try {
130
+ const accounts = await client.getAccounts();
131
+ console.log('Get accounts result: ', accounts);
132
+ } catch (e) {
133
+ console.error('Exception: ', JSON.stringify(e));
134
+ }
135
+ ```
136
+
137
+ #### CBAppClient
138
+
139
+ ```javascript
140
+ const { CBAppClient } = require('coinbase-api');
141
+ /**
142
+ * Or, with import:
143
+ * import { CBAppClient } from 'coinbase-api';
144
+ */
145
+
146
+ // insert your API key details here from Coinbase API Key Management
147
+ const CBAppKeys = {
148
+ // dummy example keys to understand the structure
149
+ name: 'organizations/13232211d-d7e2-d7e2-d7e2-d7e2d7e2d7e2/apiKeys/d7e2d7e2-d7e2-d7e2-d7e2-d7e2d7e2d7e2',
150
+ privateKey:
151
+ '-----BEGIN EC PRIVATE KEY-----\nADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj/ADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj+oAoGCCqGSM49\nAwEHoUQDQgAEhtAep/ADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj+bzduY3iYXEmj/KtCk\nADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj\n-----END EC PRIVATE KEY-----\n',
152
+ };
153
+
154
+ const client = new CBAppClient({
155
+ // Either pass the full JSON object that can be downloaded when creating your API keys
156
+ // cdpApiKey: CBAppCdpAPIKey,
157
+
158
+ // Or use the key name as "apiKey" and private key (WITH the "begin/end EC PRIVATE KEY" comment) as "apiSecret"
159
+ apiKey: CBAppKeys.name,
160
+ apiSecret: CBAppKeys.privateKey,
161
+ });
162
+
163
+ try {
164
+ // Transfer money between your own accounts
165
+ const transferMoneyResult = await client.transferMoney({
166
+ account_id: 'your_source_account_id',
167
+ type: 'transfer',
168
+ to: 'your_destination_account_id',
169
+ amount: '0.01',
170
+ currency: 'BTC',
171
+ });
172
+ console.log('Transfer Money Result: ', transferMoneyResult);
173
+ } catch (e) {
174
+ console.error('Error: ', e);
175
+ }
176
+ ```
177
+
178
+ #### CBInternationalClient
179
+
180
+ ```javascript
181
+ const { CBInternationalClient } = require('coinbase-api');
182
+ /**
183
+ * Or, with import:
184
+ * import { CBInternationalClient } from 'coinbase-api';
185
+ */
186
+
187
+ // insert your API key details here from Coinbase API Key Management
188
+ const client = new CBInternationalClient({
189
+ apiKey: 'insert_api_key_here',
190
+ apiSecret: 'insert_api_secret_here',
191
+ apiPassphrase: 'insert_api_passphrase_here',
192
+ // Set "useSandbox" to use the CoinBase International API sandbox environment
193
+ // useSandbox: true,
194
+ });
195
+
196
+ try {
197
+ // Get asset details
198
+ const assetDetails = await client.getAssetDetails({ asset: 'BTC' });
199
+ console.log('Asset Details: ', assetDetails);
200
+ } catch (e) {
201
+ console.error('Exception: ', JSON.stringify(e, null, 2));
202
+ }
203
+ ```
204
+
205
+ #### CBExchangeClient
206
+
207
+ ```javascript
208
+ const { CBExchangeClient } = require('coinbase-api');
209
+ /**
210
+ * Or, with import:
211
+ * import { CBExchangeClient } from 'coinbase-api';
212
+ */
213
+
214
+ // insert your API key details here from Coinbase API Key Management
215
+ const client = new CBExchangeClient({
216
+ apiKey: 'insert_api_key_here',
217
+ apiSecret: 'insert_api_secret_here',
218
+ apiPassphrase: 'insert_api_passphrase_here',
219
+ // Set "useSandbox" to use the CoinBase International API sandbox environment
220
+ // useSandbox: true,
221
+ });
222
+
223
+ try {
224
+ // Get a single currency by id
225
+ const currency = await client.getCurrency('BTC');
226
+ console.log('Currency: ', currency);
227
+ } catch (e) {
228
+ console.error('Exception: ', JSON.stringify(e, null, 2));
229
+ }
230
+ ```
231
+
232
+ See all clients [here](./src/) for more information on all the functions or the [examples](./examples/) for lots of usage examples. You can also check the endpoint function list [here](./docs/endpointFunctionList.md) to find all available functions!
233
+
234
+ ## WebSockets
235
+
236
+ All available WebSockets can be used via a shared `WebsocketClient`. The WebSocket client will automatically open/track/manage connections as needed. Each unique connection (one per server URL) is tracked using a WsKey (each WsKey is a string - see [WS_KEY_MAP](src/lib/websocket/websocket-util.ts) for a list of supported values - `WS_KEY_MAP` can also be used like an enum).
237
+
238
+ Any subscribe/unsubscribe events will need to include a WsKey, so the WebSocket client understands which connection the event should be routed to. See examples below or in the [examples](./examples/) folder on GitHub.
239
+
240
+ Data events are emitted from the WebsocketClient via the `update` event, see example below:
241
+
242
+ #### Public Websocket
243
+
244
+ ```javascript
245
+ const { WebsocketClient } = require('coinbase-api');
246
+ /**
247
+ * Or, with import:
248
+ * import { WebsocketClient } from 'coinbase-api';
249
+ */
250
+
251
+ // public ws client, doesnt need any api keys to run
252
+ const client = new WebsocketClient();
253
+
254
+ // The WS Key (last parameter) dictates which WS feed this request goes to (aka if auth is required).
255
+ // As long as the WS feed doesn't require auth, you should be able to subscribe to channels without api credentials.
256
+ client.subscribe(
257
+ {
258
+ topic: 'status',
259
+ payload: {
260
+ product_ids: ['XRP-USD'],
261
+ },
262
+ },
263
+ 'advTradeMarketData',
264
+ );
265
+ ```
266
+
267
+ #### Private Websocket
268
+
269
+ ```javascript
270
+ const { WebsocketClient } = require('coinbase-api');
271
+ /**
272
+ * Or, with import:
273
+ * import { WebsocketClient } from 'coinbase-api';
274
+ */
275
+
276
+ // key name & private key, as returned by coinbase when creating your API keys.
277
+ // Note: the below example is a dummy key and won't actually work
278
+ const advancedTradeCdpAPIKey = {
279
+ name: 'organizations/13232211d-d7e2-d7e2-d7e2-d7e2d7e2d7e2/apiKeys/d7e2d7e2-d7e2-d7e2-d7e2-d7e2d7e2d7e2',
280
+ privateKey:
281
+ '-----BEGIN EC PRIVATE KEY-----\nADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj/ADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj+oAoGCCqGSM49\nAwEHoUQDQgAEhtAep/ADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj+bzduY3iYXEmj/KtCk\nADFGHmkgnjdfg16k165kuu1kdtyudtyjdtyjytj\n-----END EC PRIVATE KEY-----\n',
282
+ };
283
+
284
+ const client = new WebsocketClient({
285
+ // Either pass the full JSON object that can be downloaded when creating your API keys
286
+ // cdpApiKey: advancedTradeCdpAPIKey,
287
+
288
+ // Or use the key name as "apiKey" and private key (WITH the "begin/end EC PRIVATE KEY" comment) as "apiSecret"
289
+ apiKey: advancedTradeCdpAPIKey.name,
290
+ apiSecret: advancedTradeCdpAPIKey.privateKey,
291
+ });
292
+ ```
293
+
294
+ #### Listening and subscribing to Websocket events
295
+
296
+ ```javascript
297
+ // add event listeners for websocket clients
298
+
299
+ client.on('open', (data) => {
300
+ console.log('open: ', data?.wsKey);
301
+ });
302
+
303
+ // Data received
304
+ client.on('update', (data) => {
305
+ console.info(new Date(), 'data received: ', JSON.stringify(data));
306
+ });
307
+
308
+ // Something happened, attempting to reconenct
309
+ client.on('reconnect', (data) => {
310
+ console.log('reconnect: ', data);
311
+ });
312
+
313
+ // Reconnect successful
314
+ client.on('reconnected', (data) => {
315
+ console.log('reconnected: ', data);
316
+ });
317
+
318
+ // Connection closed. If unexpected, expect reconnect -> reconnected.
319
+ client.on('close', (data) => {
320
+ console.error('close: ', data);
321
+ });
322
+
323
+ // Reply to a request, e.g. "subscribe"/"unsubscribe"/"authenticate"
324
+ client.on('response', (data) => {
325
+ console.info('response: ', JSON.stringify(data, null, 2));
326
+ // throw new Error('res?');
327
+ });
328
+
329
+ client.on('exception', (data) => {
330
+ console.error('exception: ', data);
331
+ });
332
+
333
+ /**
334
+ * Use the client subscribe(topic, market) pattern to subscribe to any websocket topic.
335
+ *
336
+ * You can subscribe to topics one at a time or many in one request.
337
+ *
338
+ * Topics can be sent as simple strings, if no parameters are required:
339
+ */
340
+
341
+ // market data
342
+ client.subscribe('heartbeats', 'advTradeMarketData');
343
+ // This is the same as above, but using WS_KEY_MAP like an enum to reduce any uncertainty on what value to use:
344
+ // client.subscribe('heartbeats', WS_KEY_MAP.advTradeMarketData);
345
+
346
+ // user data
347
+ client.subscribe('futures_balance_summary', 'advTradeUserData');
348
+ client.subscribe('user', 'advTradeUserData');
349
+
350
+ /**
351
+ * Or send a more structured object with parameters, e.g. if parameters are required
352
+ */
353
+ const tickerSubscribeRequest = {
354
+ topic: 'ticker',
355
+ /**
356
+ * Anything in the payload will be merged into the subscribe "request",
357
+ * allowing you to send misc parameters supported by the exchange (such as `product_ids: string[]`)
358
+ */
359
+ payload: {
360
+ product_ids: ['ETH-USD', 'BTC-USD'],
361
+ },
362
+ };
363
+ client.subscribe(tickerSubscribeRequest, 'advTradeMarketData');
364
+
365
+ /**
366
+ * Other adv trade public websocket topics:
367
+ */
368
+ client.subscribe(
369
+ [
370
+ {
371
+ topic: 'candles',
372
+ payload: {
373
+ product_ids: ['ETH-USD'],
374
+ },
375
+ },
376
+ {
377
+ topic: 'market_trades',
378
+ payload: {
379
+ product_ids: ['ETH-USD', 'BTC-USD'],
380
+ },
381
+ },
382
+ {
383
+ topic: 'ticker',
384
+ payload: {
385
+ product_ids: ['ETH-USD', 'BTC-USD'],
386
+ },
387
+ },
388
+ {
389
+ topic: 'ticker_batch',
390
+ payload: {
391
+ product_ids: ['ETH-USD', 'BTC-USD'],
392
+ },
393
+ },
394
+ {
395
+ topic: 'level2',
396
+ payload: {
397
+ product_ids: ['ETH-USD', 'BTC-USD'],
398
+ },
399
+ },
400
+ ],
401
+ 'advTradeMarketData',
402
+ );
403
+ ```
404
+
405
+ See [WebsocketClient](./src/WebsocketClient.ts) for further information and make sure to check the [examples](./examples/) folder for much more usage examples, especially [publicWs.ts](./examples/AdvancedTrade/WebSockets/publicWs.ts) and [privateWs.ts](./examples/AdvancedTrade/WebSockets/privateWs.ts), which explains a lot of small details.
406
+
407
+ ---
408
+
409
+ ## Customise Logging
410
+
411
+ Pass a custom logger which supports the log methods `trace`, `info` and `error`, or override methods from the default logger as desired.
412
+
413
+ ```javascript
414
+ const { WebsocketClient, DefaultLogger } = require('coinbase-api');
415
+ /**
416
+ * Or, with import:
417
+ * import { WebsocketClient, DefaultLogger } from 'coinbase-api';
418
+ */
419
+
420
+ // E.g. customise logging for only the trace level:
421
+ const logger = {
422
+ // Inherit existing logger methods, using an object spread
423
+ ...DefaultLogger,
424
+ // Define a custom trace function to override only that function
425
+ trace: (...params) => {
426
+ if (
427
+ [
428
+ 'Sending ping',
429
+ 'Sending upstream ws message: ',
430
+ 'Received pong, clearing pong timer',
431
+ 'Received ping, sending pong frame',
432
+ ].includes(params[0])
433
+ ) {
434
+ return;
435
+ }
436
+ console.log('trace', params);
437
+ },
438
+ };
439
+
440
+ const ws = new WebsocketClient(
441
+ {
442
+ apiKey: 'apiKeyHere',
443
+ apiSecret: 'apiSecretHere',
444
+ apiPassphrase: 'apiPassPhraseHere',
445
+ },
446
+ logger,
447
+ );
448
+ ```
449
+
450
+ ---
451
+
452
+ <!-- template_contributions -->
453
+
454
+ Have my projects helped you? Share the love, there are many ways you can show your thanks:
455
+
456
+ - Star & share my projects.
457
+ - Are my projects useful? Sponsor me on Github and support my effort to maintain & improve them: https://github.com/sponsors/tiagosiebler
458
+ - Have an interesting project? Get in touch & invite me to it.
459
+ - Or buy me all the coffee:
460
+ - ETH(ERC20): `0xA3Bda8BecaB4DCdA539Dc16F9C54a592553Be06C` <!-- metamask -->
461
+
462
+ <!-- template_contributions_end -->
463
+
464
+ ### Contributions & Pull Requests
465
+
466
+ Contributions are encouraged, I will review any incoming pull requests. See the issues tab for todo items.
467
+
468
+ <!-- template_star_history -->
469
+
470
+ ## Star History
471
+
472
+ [![Star History Chart](https://api.star-history.com/svg?repos=tiagosiebler/bybit-api,tiagosiebler/okx-api,tiagosiebler/binance,tiagosiebler/bitget-api,tiagosiebler/bitmart-api,tiagosiebler/gateio-api,tiagosiebler/kucoin-api,tiagosiebler/orderbooks,tiagosiebler/accountstate,tiagosiebler/awesome-crypto-examples&type=Date)](https://star-history.com/#tiagosiebler/bybit-api&tiagosiebler/okx-api&tiagosiebler/binance&tiagosiebler/bitget-api&tiagosiebler/bitmart-api&tiagosiebler/gateio-api&tiagosiebler/kucoin-api&tiagosiebler/orderbooks&tiagosiebler/accountstate&tiagosiebler/awesome-crypto-examples&Date)
473
+
474
+ <!-- template_star_history_end -->