ccxt 4.2.72 → 4.2.74

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 (379) hide show
  1. package/README.md +124 -122
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +3277 -460
  4. package/dist/ccxt.browser.min.js +4 -4
  5. package/dist/cjs/ccxt.js +6 -1
  6. package/dist/cjs/src/abstract/coinbaseinternational.js +9 -0
  7. package/dist/cjs/src/base/Exchange.js +31 -7
  8. package/dist/cjs/src/bitget.js +62 -50
  9. package/dist/cjs/src/btcturk.js +3 -3
  10. package/dist/cjs/src/bybit.js +90 -30
  11. package/dist/cjs/src/coinbaseinternational.js +2019 -0
  12. package/dist/cjs/src/gate.js +1 -1
  13. package/dist/cjs/src/htx.js +16 -9
  14. package/dist/cjs/src/hyperliquid.js +9 -2
  15. package/dist/cjs/src/mexc.js +1 -1
  16. package/dist/cjs/src/okx.js +1 -1
  17. package/dist/cjs/src/pro/coinbaseinternational.js +645 -0
  18. package/dist/cjs/src/pro/krakenfutures.js +8 -7
  19. package/examples/README.md +308 -0
  20. package/examples/ccxt.pro/html/watchTicker.html +51 -0
  21. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
  22. package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
  23. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
  24. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
  25. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
  26. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
  27. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
  28. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
  29. package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
  30. package/examples/ccxt.pro/js/exchange-close.js +46 -0
  31. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
  32. package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
  33. package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
  34. package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
  35. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
  36. package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
  37. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
  38. package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
  39. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
  40. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
  41. package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
  42. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
  43. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
  44. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
  45. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
  46. package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
  47. package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
  48. package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
  49. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
  50. package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
  51. package/examples/cs/Examples.sln +22 -0
  52. package/examples/cs/c#.csproj +19 -0
  53. package/examples/html/basic-cors-proxy.html +46 -0
  54. package/examples/html/basic-inheritance.html +47 -0
  55. package/examples/html/basic-poller.html +52 -0
  56. package/examples/html/basic-rate-limiting.html +49 -0
  57. package/examples/html/basic.html +43 -0
  58. package/examples/html/binance-cors-proxy.html +28 -0
  59. package/examples/html/bitmex-browser-cors-proxy.js +7 -0
  60. package/examples/html/bitmex-cors.html +46 -0
  61. package/examples/html/tradingview-charts.html +61 -0
  62. package/examples/html/webworker/index.html +97 -0
  63. package/examples/html/webworker/worker.js +43 -0
  64. package/examples/js/README.md +15 -0
  65. package/examples/js/advanced-error-handling.js +39 -0
  66. package/examples/js/aggregate-orderbook.js +54 -0
  67. package/examples/js/arbitrage-pairs.js +130 -0
  68. package/examples/js/basic-chart.js +29 -0
  69. package/examples/js/basic-orderbook-polling.js +13 -0
  70. package/examples/js/bcc-vs-bch.js +115 -0
  71. package/examples/js/binance-fetch-all-deposits.js +45 -0
  72. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
  73. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
  74. package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
  75. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
  76. package/examples/js/binance-margin-stop-order.js +39 -0
  77. package/examples/js/binance-server-time.js +34 -0
  78. package/examples/js/binance-universal-transfer.js +16 -0
  79. package/examples/js/bitfinex-fetch-trades.js +35 -0
  80. package/examples/js/bitfinex2-fetch-trades.js +35 -0
  81. package/examples/js/bitmex-browser-cors-proxy.js +7 -0
  82. package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
  83. package/examples/js/bitrue-fetch-balance.js +28 -0
  84. package/examples/js/bitstamp-private-api.js +115 -0
  85. package/examples/js/bitstamp-public-api.js +39 -0
  86. package/examples/js/bittrex-balance.js +50 -0
  87. package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
  88. package/examples/js/blockchaincom-withdrawal.js +59 -0
  89. package/examples/js/build-ohlcv-bars.js +48 -0
  90. package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
  91. package/examples/js/bybit-trailing.js +62 -0
  92. package/examples/js/bybit-updated.cjs +154 -0
  93. package/examples/js/cli.js +405 -0
  94. package/examples/js/coinbase-fetch-all-balances.js +36 -0
  95. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
  96. package/examples/js/coinex-futures.js +75 -0
  97. package/examples/js/coinone-fetch-tickers.js +54 -0
  98. package/examples/js/coinone-markets.js +16 -0
  99. package/examples/js/compare-two-exchanges-capabilities.js +36 -0
  100. package/examples/js/cors-proxy.js +5 -0
  101. package/examples/js/create-order-handle-errors.js +55 -0
  102. package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
  103. package/examples/js/create-order-with-retry.js +65 -0
  104. package/examples/js/create-order-ws-example.js +25 -0
  105. package/examples/js/create-orders-example.js +17 -0
  106. package/examples/js/create-trailing-amount-order.js +36 -0
  107. package/examples/js/create-trailing-percent-order.js +36 -0
  108. package/examples/js/credentials.json +5 -0
  109. package/examples/js/custom-proxy-agent-for-js.js +10 -0
  110. package/examples/js/custom-proxy-url.js +23 -0
  111. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
  112. package/examples/js/env-variables.js +26 -0
  113. package/examples/js/error-handling.js +89 -0
  114. package/examples/js/exchange-capabilities.js +135 -0
  115. package/examples/js/exchanges-by-volume.js +60 -0
  116. package/examples/js/exchanges.js +40 -0
  117. package/examples/js/fetch-all-balances.js +219 -0
  118. package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
  119. package/examples/js/fetch-all-tickers-to-files.js +77 -0
  120. package/examples/js/fetch-balance.js +28 -0
  121. package/examples/js/fetch-create-deposit-address.js +101 -0
  122. package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
  123. package/examples/js/fetch-funding-rate-history.js +25 -0
  124. package/examples/js/fetch-futures/prettier.config.js +5 -0
  125. package/examples/js/fetch-futures/src/index.js +25 -0
  126. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
  127. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
  128. package/examples/js/fetch-ohlcv.js +16 -0
  129. package/examples/js/fetch-okex-futures.js +22 -0
  130. package/examples/js/fetch-orders.js +27 -0
  131. package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
  132. package/examples/js/fetch-ticker-where-available.js +75 -0
  133. package/examples/js/fetch-tickers/build/index.js +19 -0
  134. package/examples/js/fetch-tickers/prettier.config.js +5 -0
  135. package/examples/js/fetch-tickers/src/index.js +17 -0
  136. package/examples/js/gateio-create-batch-order.js +43 -0
  137. package/examples/js/gateio-futures.js +49 -0
  138. package/examples/js/gateio-open-close-contract.js +49 -0
  139. package/examples/js/gateio-swaps.js +74 -0
  140. package/examples/js/gdax-fetch-trades-pagination.js +29 -0
  141. package/examples/js/hitbtc2-withdraw.js +61 -0
  142. package/examples/js/how-to-import-one-exchange-esm.js +10 -0
  143. package/examples/js/huobi-futures.js +71 -0
  144. package/examples/js/huobi-open-close-contract.js +63 -0
  145. package/examples/js/huobi-swaps.js +70 -0
  146. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
  147. package/examples/js/hybridCJSExample.cjs +19 -0
  148. package/examples/js/hybridESMExample.js +19 -0
  149. package/examples/js/idex-fetch-balance.js +13 -0
  150. package/examples/js/instantiate-all-at-once.js +46 -0
  151. package/examples/js/instantiate-all-from-json.js +31 -0
  152. package/examples/js/kraken-create-and-close-position.js +54 -0
  153. package/examples/js/kraken-fetch-order-trades.js +33 -0
  154. package/examples/js/kraken-margin-trading.js +89 -0
  155. package/examples/js/kucoin-rate-limit.js +38 -0
  156. package/examples/js/latoken-example.js +108 -0
  157. package/examples/js/live-orderbook.js +106 -0
  158. package/examples/js/live-ticker.js +80 -0
  159. package/examples/js/live-tickers.js +74 -0
  160. package/examples/js/load-all-contracts.js +41 -0
  161. package/examples/js/load-all-symbols-at-once.js +69 -0
  162. package/examples/js/load-all-tickers-at-once.js +91 -0
  163. package/examples/js/load-markets-to-files.js +57 -0
  164. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
  165. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
  166. package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
  167. package/examples/js/market-status-and-currency-status.js +29 -0
  168. package/examples/js/ohlcv-console-chart.js +29 -0
  169. package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
  170. package/examples/js/okex-transfer.js +51 -0
  171. package/examples/js/okx-poll-fetch-my-trades.js +37 -0
  172. package/examples/js/okx-poll-rate-limit.js +48 -0
  173. package/examples/js/order-book-extra-level-depth-param.js +20 -0
  174. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
  175. package/examples/js/poll-ohlcv.js +43 -0
  176. package/examples/js/poloniex-fetch-order-books.js +35 -0
  177. package/examples/js/poloniex-limits-amount-min.js +62 -0
  178. package/examples/js/proxy-round-robin.js +98 -0
  179. package/examples/js/proxy-usage.js +32 -0
  180. package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
  181. package/examples/js/search-all-exchanges.js +159 -0
  182. package/examples/js/shared-load-markets.js +80 -0
  183. package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
  184. package/examples/js/symbols.js +110 -0
  185. package/examples/js/theocean.js +41 -0
  186. package/examples/js/tickers.js +106 -0
  187. package/examples/js/validate-paginated-data.js +61 -0
  188. package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
  189. package/examples/js/watch-OHLCV.js +12 -0
  190. package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
  191. package/examples/js/watch-Trades-For-Symbols.js +11 -0
  192. package/examples/js/watch-tickers.js +11 -0
  193. package/examples/js/watchOHLCVForSymbols.js +15 -0
  194. package/examples/js/watchOrderBookForSymbols.js +11 -0
  195. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
  196. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
  197. package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
  198. package/examples/js/watchPositions.d.ts +2 -0
  199. package/examples/js/watchPositions.d.ts.map +1 -0
  200. package/examples/js/watchPositions.js +13 -0
  201. package/examples/js/watchPositionsForSymbols.d.ts +2 -0
  202. package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
  203. package/examples/js/watchPositionsForSymbols.js +14 -0
  204. package/examples/js/watchTradesForSymbols.js +11 -0
  205. package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
  206. package/examples/php/README.md +7 -0
  207. package/examples/py/README.md +15 -0
  208. package/examples/py/playing_with_ccxt_example.ipynb +222 -0
  209. package/examples/ts/.eslintrc +111 -0
  210. package/examples/ts/build-ohlcv-bars.ts +53 -0
  211. package/examples/ts/cli.ts +397 -0
  212. package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
  213. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
  214. package/examples/ts/create-order-ws-example.ts +33 -0
  215. package/examples/ts/create-orders-example.ts +21 -0
  216. package/examples/ts/create-trailing-amount-order.ts +37 -0
  217. package/examples/ts/create-trailing-percent-order.ts +37 -0
  218. package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
  219. package/examples/ts/fetch-futures/package-lock.json +116 -0
  220. package/examples/ts/fetch-futures/package.json +34 -0
  221. package/examples/ts/fetch-futures/prettier.config.js +4 -0
  222. package/examples/ts/fetch-futures/src/index.ts +28 -0
  223. package/examples/ts/fetch-futures/tsconfig.json +28 -0
  224. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
  225. package/examples/ts/fetch-ohlcv.ts +17 -0
  226. package/examples/ts/fetch-tickers/package-lock.json +116 -0
  227. package/examples/ts/fetch-tickers/package.json +34 -0
  228. package/examples/ts/fetch-tickers/prettier.config.js +4 -0
  229. package/examples/ts/fetch-tickers/src/index.ts +21 -0
  230. package/examples/ts/fetch-tickers/tsconfig.json +28 -0
  231. package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
  232. package/examples/ts/kraken-create-and-close-position.ts +69 -0
  233. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
  234. package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
  235. package/examples/ts/nextjs-page-router/README.md +43 -0
  236. package/examples/ts/nextjs-page-router/next.config.js +6 -0
  237. package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
  238. package/examples/ts/nextjs-page-router/package.json +28 -0
  239. package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
  240. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  241. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
  242. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
  243. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
  244. package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
  245. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
  246. package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
  247. package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
  248. package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
  249. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
  250. package/examples/ts/proxy-usage.ts +41 -0
  251. package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
  252. package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
  253. package/examples/ts/watch-OHLCV.ts +14 -0
  254. package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
  255. package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
  256. package/examples/ts/watch-tickers.ts +13 -0
  257. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
  258. package/examples/ts/watchPositions.ts +15 -0
  259. package/examples/ts/watchPositionsForSymbols.ts +16 -0
  260. package/examples/tsconfig.json +27 -0
  261. package/js/ccxt.d.ts +8 -2
  262. package/js/ccxt.js +6 -2
  263. package/js/src/abstract/coinbaseinternational.d.ts +42 -0
  264. package/js/src/abstract/coinbaseinternational.js +11 -0
  265. package/js/src/ace.d.ts +2 -2
  266. package/js/src/alpaca.d.ts +2 -2
  267. package/js/src/ascendex.d.ts +3 -3
  268. package/js/src/base/Exchange.d.ts +27 -24
  269. package/js/src/base/Exchange.js +31 -7
  270. package/js/src/bigone.d.ts +2 -2
  271. package/js/src/binance.d.ts +7 -7
  272. package/js/src/bingx.d.ts +4 -4
  273. package/js/src/bit2c.d.ts +2 -2
  274. package/js/src/bitbank.d.ts +2 -2
  275. package/js/src/bitbns.d.ts +2 -2
  276. package/js/src/bitfinex.d.ts +3 -3
  277. package/js/src/bitfinex2.d.ts +4 -4
  278. package/js/src/bitflyer.d.ts +2 -2
  279. package/js/src/bitget.d.ts +4 -4
  280. package/js/src/bitget.js +62 -50
  281. package/js/src/bithumb.d.ts +2 -2
  282. package/js/src/bitmart.d.ts +4 -4
  283. package/js/src/bitmex.d.ts +3 -3
  284. package/js/src/bitopro.d.ts +2 -2
  285. package/js/src/bitrue.d.ts +2 -2
  286. package/js/src/bitso.d.ts +2 -2
  287. package/js/src/bitstamp.d.ts +2 -2
  288. package/js/src/bitteam.d.ts +2 -2
  289. package/js/src/bitvavo.d.ts +4 -4
  290. package/js/src/bl3p.d.ts +2 -2
  291. package/js/src/blockchaincom.d.ts +2 -2
  292. package/js/src/blofin.d.ts +4 -4
  293. package/js/src/btcalpha.d.ts +2 -2
  294. package/js/src/btcbox.d.ts +2 -2
  295. package/js/src/btcmarkets.d.ts +2 -2
  296. package/js/src/btcturk.d.ts +2 -2
  297. package/js/src/btcturk.js +3 -3
  298. package/js/src/bybit.d.ts +8 -6
  299. package/js/src/bybit.js +90 -30
  300. package/js/src/cex.d.ts +3 -3
  301. package/js/src/coinbase.d.ts +3 -3
  302. package/js/src/coinbaseinternational.d.ts +146 -0
  303. package/js/src/coinbaseinternational.js +2020 -0
  304. package/js/src/coinbasepro.d.ts +2 -2
  305. package/js/src/coincheck.d.ts +2 -2
  306. package/js/src/coinex.d.ts +4 -4
  307. package/js/src/coinlist.d.ts +3 -3
  308. package/js/src/coinmate.d.ts +2 -2
  309. package/js/src/coinmetro.d.ts +2 -2
  310. package/js/src/coinone.d.ts +2 -2
  311. package/js/src/coinsph.d.ts +2 -2
  312. package/js/src/coinspot.d.ts +2 -2
  313. package/js/src/cryptocom.d.ts +4 -4
  314. package/js/src/currencycom.d.ts +2 -2
  315. package/js/src/delta.d.ts +3 -3
  316. package/js/src/deribit.d.ts +3 -3
  317. package/js/src/digifinex.d.ts +3 -3
  318. package/js/src/exmo.d.ts +3 -3
  319. package/js/src/gate.d.ts +4 -4
  320. package/js/src/gate.js +1 -1
  321. package/js/src/gemini.d.ts +2 -2
  322. package/js/src/hitbtc.d.ts +4 -4
  323. package/js/src/hollaex.d.ts +2 -2
  324. package/js/src/htx.d.ts +5 -5
  325. package/js/src/htx.js +16 -9
  326. package/js/src/huobijp.d.ts +2 -2
  327. package/js/src/hyperliquid.d.ts +4 -3
  328. package/js/src/hyperliquid.js +10 -3
  329. package/js/src/idex.d.ts +2 -2
  330. package/js/src/independentreserve.d.ts +2 -2
  331. package/js/src/indodax.d.ts +2 -2
  332. package/js/src/kraken.d.ts +3 -3
  333. package/js/src/krakenfutures.d.ts +4 -4
  334. package/js/src/kucoin.d.ts +4 -4
  335. package/js/src/kucoinfutures.d.ts +3 -3
  336. package/js/src/kuna.d.ts +2 -2
  337. package/js/src/latoken.d.ts +2 -2
  338. package/js/src/lbank.d.ts +2 -2
  339. package/js/src/luno.d.ts +2 -2
  340. package/js/src/lykke.d.ts +2 -2
  341. package/js/src/mercado.d.ts +2 -2
  342. package/js/src/mexc.d.ts +2 -2
  343. package/js/src/mexc.js +1 -1
  344. package/js/src/ndax.d.ts +3 -3
  345. package/js/src/novadax.d.ts +2 -2
  346. package/js/src/oceanex.d.ts +2 -2
  347. package/js/src/okcoin.d.ts +3 -3
  348. package/js/src/okx.d.ts +4 -4
  349. package/js/src/okx.js +1 -1
  350. package/js/src/onetrading.d.ts +2 -2
  351. package/js/src/p2b.d.ts +2 -2
  352. package/js/src/paymium.d.ts +2 -2
  353. package/js/src/phemex.d.ts +3 -3
  354. package/js/src/poloniex.d.ts +3 -3
  355. package/js/src/poloniexfutures.d.ts +2 -2
  356. package/js/src/pro/binance.d.ts +3 -3
  357. package/js/src/pro/bitvavo.d.ts +3 -3
  358. package/js/src/pro/cex.d.ts +3 -3
  359. package/js/src/pro/coinbaseinternational.d.ts +28 -0
  360. package/js/src/pro/coinbaseinternational.js +646 -0
  361. package/js/src/pro/cryptocom.d.ts +2 -2
  362. package/js/src/pro/hitbtc.d.ts +2 -2
  363. package/js/src/pro/kraken.d.ts +3 -3
  364. package/js/src/pro/krakenfutures.js +8 -7
  365. package/js/src/pro/okx.d.ts +3 -3
  366. package/js/src/pro/poloniex.d.ts +2 -2
  367. package/js/src/probit.d.ts +2 -2
  368. package/js/src/timex.d.ts +3 -3
  369. package/js/src/tokocrypto.d.ts +2 -2
  370. package/js/src/upbit.d.ts +2 -2
  371. package/js/src/wavesexchange.d.ts +2 -2
  372. package/js/src/wazirx.d.ts +2 -2
  373. package/js/src/whitebit.d.ts +2 -2
  374. package/js/src/woo.d.ts +5 -5
  375. package/js/src/yobit.d.ts +2 -2
  376. package/js/src/zaif.d.ts +2 -2
  377. package/js/src/zonda.d.ts +2 -2
  378. package/package.json +4 -1
  379. package/skip-tests.json +227 -424
@@ -0,0 +1,646 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import coinbaseinternationalRest from '../coinbaseinternational.js';
9
+ import { AuthenticationError, ExchangeError, NotSupported } from '../base/errors.js';
10
+ import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
11
+ import { ArrayCache } from '../base/ws/Cache.js';
12
+ // ---------------------------------------------------------------------------
13
+ export default class coinbaseinternational extends coinbaseinternationalRest {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'has': {
17
+ 'ws': true,
18
+ 'watchTrades': true,
19
+ 'watchTradesForSymbols': true,
20
+ 'watchOrderBook': true,
21
+ 'watchOrderBookForSymbols': true,
22
+ 'watchTicker': true,
23
+ 'watchBalance': false,
24
+ 'watchMyTrades': false,
25
+ 'watchOHLCV': false,
26
+ 'watchOHLCVForSymbols': false,
27
+ 'watchOrders': false,
28
+ 'watchOrdersForSymbols': false,
29
+ 'watchPositions': false,
30
+ 'watchTickers': false,
31
+ 'createOrderWs': false,
32
+ 'editOrderWs': false,
33
+ 'cancelOrderWs': false,
34
+ 'cancelOrdersWs': false,
35
+ 'cancelAllOrdersWs': false,
36
+ 'fetchOrderWs': false,
37
+ 'fetchOrdersWs': false,
38
+ 'fetchBalanceWs': false,
39
+ 'fetchMyTradesWs': false,
40
+ },
41
+ 'urls': {
42
+ 'api': {
43
+ 'ws': 'wss://ws-md.international.coinbase.com',
44
+ },
45
+ 'test': {
46
+ 'ws': 'wss://ws-md.n5e2.coinbase.com',
47
+ },
48
+ },
49
+ 'options': {
50
+ 'watchTicker': {
51
+ 'channel': 'LEVEL1', // 'INSTRUMENTS' or 'RISK'
52
+ },
53
+ 'tradesLimit': 1000,
54
+ 'ordersLimit': 1000,
55
+ 'myTradesLimit': 1000,
56
+ },
57
+ 'errors': {
58
+ 'exact': {
59
+ 'Unable to authenticate': AuthenticationError,
60
+ },
61
+ },
62
+ });
63
+ }
64
+ async subscribe(name, symbols = undefined, params = {}) {
65
+ /**
66
+ * @ignore
67
+ * @method
68
+ * @description subscribes to a websocket channel
69
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
70
+ * @param {string} name the name of the channel
71
+ * @param {string[]} [symbols] unified market symbol
72
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
73
+ * @returns {object} subscription to a websocket channel
74
+ */
75
+ this.checkRequiredCredentials();
76
+ let market = undefined;
77
+ let messageHash = name;
78
+ let productIds = [];
79
+ if (symbols === undefined) {
80
+ symbols = this.symbols;
81
+ }
82
+ const symbolsLength = symbols.length;
83
+ if (symbolsLength > 1) {
84
+ const parsedSymbols = this.marketSymbols(symbols);
85
+ const marketIds = this.marketIds(parsedSymbols);
86
+ productIds = marketIds;
87
+ messageHash = messageHash + '::' + parsedSymbols.join(',');
88
+ }
89
+ else if (symbolsLength === 1) {
90
+ market = this.market(symbols[0]);
91
+ messageHash = name + '::' + market['symbol'];
92
+ productIds = [market['id']];
93
+ }
94
+ const url = this.urls['api']['ws'];
95
+ if (url === undefined) {
96
+ throw new NotSupported(this.id + ' is not supported in sandbox environment');
97
+ }
98
+ const timestamp = this.nonce().toString();
99
+ const auth = timestamp + this.apiKey + 'CBINTLMD' + this.password;
100
+ const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), sha256, 'base64');
101
+ const subscribe = {
102
+ 'type': 'SUBSCRIBE',
103
+ 'product_ids': productIds,
104
+ 'channels': [name],
105
+ 'time': timestamp,
106
+ 'key': this.apiKey,
107
+ 'passphrase': this.password,
108
+ 'signature': signature,
109
+ };
110
+ return await this.watch(url, messageHash, this.extend(subscribe, params), messageHash);
111
+ }
112
+ async subscribeMultiple(name, symbols = undefined, params = {}) {
113
+ /**
114
+ * @ignore
115
+ * @method
116
+ * @description subscribes to a websocket channel using watchMultiple
117
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
118
+ * @param {string} name the name of the channel
119
+ * @param {string|string[]} [symbol] unified market symbol
120
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
121
+ * @returns {object} subscription to a websocket channel
122
+ */
123
+ this.checkRequiredCredentials();
124
+ if (this.isEmpty(symbols)) {
125
+ symbols = this.symbols;
126
+ }
127
+ else {
128
+ symbols = this.marketSymbols(symbols);
129
+ }
130
+ const messageHashes = [];
131
+ const productIds = [];
132
+ for (let i = 0; i < symbols.length; i++) {
133
+ const marketId = this.marketId(symbols[i]);
134
+ const symbol = this.symbol(marketId);
135
+ productIds.push(marketId);
136
+ messageHashes.push(name + '::' + symbol);
137
+ }
138
+ const url = this.urls['api']['ws'];
139
+ if (url === undefined) {
140
+ throw new NotSupported(this.id + ' is not supported in sandbox environment');
141
+ }
142
+ const timestamp = this.numberToString(this.seconds());
143
+ const auth = timestamp + this.apiKey + 'CBINTLMD' + this.password;
144
+ const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), sha256, 'base64');
145
+ const subscribe = {
146
+ 'type': 'SUBSCRIBE',
147
+ 'time': timestamp,
148
+ 'product_ids': productIds,
149
+ 'channels': [name],
150
+ 'key': this.apiKey,
151
+ 'passphrase': this.password,
152
+ 'signature': signature,
153
+ };
154
+ return await this.watchMultiple(url, messageHashes, this.extend(subscribe, params), messageHashes);
155
+ }
156
+ async watchFundingRate(symbol, params = {}) {
157
+ /**
158
+ * @method
159
+ * @name coinbaseinternational#watchFundingRate
160
+ * @description watch the current funding rate
161
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
162
+ * @param {string} symbol unified market symbol
163
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
164
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
165
+ */
166
+ return await this.subscribe('RISK', [symbol], params);
167
+ }
168
+ async watchFundingRates(symbols, params = {}) {
169
+ /**
170
+ * @method
171
+ * @name coinbaseinternational#watchFundingRates
172
+ * @description watch the funding rate for multiple markets
173
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
174
+ * @param {string[]|undefined} symbols list of unified market symbols
175
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
176
+ * @returns {object} a dictionary of [funding rates structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexe by market symbols
177
+ */
178
+ return await this.subscribeMultiple('RISK', symbols, params);
179
+ }
180
+ async watchTicker(symbol, params = {}) {
181
+ /**
182
+ * @method
183
+ * @name coinbaseinternational#watchTicker
184
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
185
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
186
+ * @param {string} [symbol] unified symbol of the market to fetch the ticker for
187
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
188
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
189
+ */
190
+ let channel = undefined;
191
+ [channel, params] = this.handleOptionAndParams(params, 'watchTicker', 'channel', 'LEVEL1');
192
+ return await this.subscribe(channel, [symbol], params);
193
+ }
194
+ handleInstrument(client, message) {
195
+ //
196
+ // {
197
+ // "sequence": 1,
198
+ // "product_id": "ETH-PERP",
199
+ // "instrument_type": "PERP",
200
+ // "base_asset_name": "ETH",
201
+ // "quote_asset_name": "USDC",
202
+ // "base_increment": "0.0001",
203
+ // "quote_increment": "0.01",
204
+ // "avg_daily_quantity": "43.0",
205
+ // "avg_daily_volume": "80245.2",
206
+ // "total_30_day_quantity":"1443.0",
207
+ // "total_30_day_volume":"3040449.0",
208
+ // "total_24_hour_quantity":"48.1",
209
+ // "total_24_hour_volume":"101348.3",
210
+ // "base_imf": "0.2",
211
+ // "min_quantity": "0.0001",
212
+ // "position_size_limit": "500",
213
+ // "funding_interval": "60000000000",
214
+ // "trading_state": "trading",
215
+ // "last_update_time": "2023-05-04T11:16:33.016Z",
216
+ // "time": "2023-05-10T14:58:47.000Z",
217
+ // "channel":"INSTRUMENTS",
218
+ // "type":"SNAPSHOT"
219
+ // }
220
+ const ticker = this.parseWsInstrument(message);
221
+ const channel = this.safeString(message, 'channel');
222
+ client.resolve(ticker, channel);
223
+ client.resolve(ticker, channel + '::' + ticker['symbol']);
224
+ }
225
+ parseWsInstrument(ticker, market = undefined) {
226
+ //
227
+ // {
228
+ // "sequence": 1,
229
+ // "product_id": "ETH-PERP",
230
+ // "instrument_type": "PERP",
231
+ // "base_asset_name": "ETH",
232
+ // "quote_asset_name": "USDC",
233
+ // "base_increment": "0.0001",
234
+ // "quote_increment": "0.01",
235
+ // "avg_daily_quantity": "43.0",
236
+ // "avg_daily_volume": "80245.2",
237
+ // "total_30_day_quantity":"1443.0",
238
+ // "total_30_day_volume":"3040449.0",
239
+ // "total_24_hour_quantity":"48.1",
240
+ // "total_24_hour_volume":"101348.3",
241
+ // "base_imf": "0.2",
242
+ // "min_quantity": "0.0001",
243
+ // "position_size_limit": "500",
244
+ // "funding_interval": "60000000000",
245
+ // "trading_state": "trading",
246
+ // "last_update_time": "2023-05-04T11:16:33.016Z",
247
+ // "time": "2023-05-10T14:58:47.000Z",
248
+ // "channel":"INSTRUMENTS",
249
+ // "type":"SNAPSHOT"
250
+ // }
251
+ //
252
+ const marketId = this.safeString(ticker, 'product_id');
253
+ const datetime = this.safeString(ticker, 'time');
254
+ return this.safeTicker({
255
+ 'info': ticker,
256
+ 'symbol': this.safeSymbol(marketId, market, '-'),
257
+ 'timestamp': this.parse8601(datetime),
258
+ 'datetime': datetime,
259
+ 'high': undefined,
260
+ 'low': undefined,
261
+ 'bid': undefined,
262
+ 'bidVolume': undefined,
263
+ 'ask': undefined,
264
+ 'askVolume': undefined,
265
+ 'vwap': undefined,
266
+ 'open': undefined,
267
+ 'close': undefined,
268
+ 'last': undefined,
269
+ 'previousClose': undefined,
270
+ 'change': undefined,
271
+ 'percentage': undefined,
272
+ 'average': undefined,
273
+ 'baseVolume': this.safeString(ticker, 'total_24_hour_quantity'),
274
+ 'quoteVolume': this.safeString(ticker, 'total_24_hour_volume'),
275
+ });
276
+ }
277
+ handleTicker(client, message) {
278
+ //
279
+ // snapshot
280
+ // {
281
+ // "sequence": 0,
282
+ // "product_id": "BTC-PERP",
283
+ // "time": "2023-05-10T14:58:47.000Z",
284
+ // "bid_price": "28787.8",
285
+ // "bid_qty": "0.466", // One side book
286
+ // "channel": "LEVEL1",
287
+ // "type": "SNAPSHOT"
288
+ // }
289
+ // update
290
+ // {
291
+ // "sequence": 1,
292
+ // "product_id": "BTC-PERP",
293
+ // "time": "2023-05-10T14:58:47.547Z",
294
+ // "bid_price": "28787.8",
295
+ // "bid_qty": "0.466",
296
+ // "ask_price": "28788.8",
297
+ // "ask_qty": "1.566",
298
+ // "channel": "LEVEL1",
299
+ // "type": "UPDATE"
300
+ // }
301
+ //
302
+ const ticker = this.parseWsTicker(message);
303
+ const channel = this.safeString(message, 'channel');
304
+ client.resolve(ticker, channel);
305
+ client.resolve(ticker, channel + '::' + ticker['symbol']);
306
+ }
307
+ parseWsTicker(ticker, market = undefined) {
308
+ //
309
+ // {
310
+ // "sequence": 1,
311
+ // "product_id": "BTC-PERP",
312
+ // "time": "2023-05-10T14:58:47.547Z",
313
+ // "bid_price": "28787.8",
314
+ // "bid_qty": "0.466",
315
+ // "ask_price": "28788.8",
316
+ // "ask_qty": "1.566",
317
+ // "channel": "LEVEL1",
318
+ // "type": "UPDATE"
319
+ // }
320
+ //
321
+ const datetime = this.safeString(ticker, 'time');
322
+ const marketId = this.safeString(ticker, 'product_id');
323
+ return this.safeTicker({
324
+ 'info': ticker,
325
+ 'symbol': this.safeSymbol(marketId, market),
326
+ 'timestamp': this.parse8601(datetime),
327
+ 'datetime': datetime,
328
+ 'bid': this.safeNumber(ticker, 'bid_price'),
329
+ 'bidVolume': this.safeNumber(ticker, 'bid_qty'),
330
+ 'ask': this.safeNumber(ticker, 'ask_price'),
331
+ 'askVolume': this.safeNumber(ticker, 'ask_qty'),
332
+ 'high': undefined,
333
+ 'low': undefined,
334
+ 'open': undefined,
335
+ 'close': undefined,
336
+ 'last': undefined,
337
+ 'change': undefined,
338
+ 'percentage': undefined,
339
+ 'average': undefined,
340
+ 'vwap': undefined,
341
+ 'baseVolume': undefined,
342
+ 'quoteVolume': undefined,
343
+ 'previousClose': undefined,
344
+ });
345
+ }
346
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
347
+ /**
348
+ * @method
349
+ * @name coinbaseinternational#watchTrades
350
+ * @description get the list of most recent trades for a particular symbol
351
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
352
+ * @param {string} symbol unified symbol of the market to fetch trades for
353
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
354
+ * @param {int} [limit] the maximum amount of trades to fetch
355
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
356
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
357
+ */
358
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
359
+ }
360
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
361
+ /**
362
+ * @method
363
+ * @name coinbaseinternational#watchTradesForSymbols
364
+ * @description get the list of most recent trades for a list of symbols
365
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
366
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
367
+ * @param {int} [limit] the maximum amount of trades to fetch
368
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
369
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
370
+ */
371
+ await this.loadMarkets();
372
+ symbols = this.marketSymbols(symbols, undefined, false, true, true);
373
+ const trades = await this.subscribeMultiple('MATCH', symbols, params);
374
+ if (this.newUpdates) {
375
+ const first = this.safeDict(trades, 0);
376
+ const tradeSymbol = this.safeString(first, 'symbol');
377
+ limit = trades.getLimit(tradeSymbol, limit);
378
+ }
379
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
380
+ }
381
+ handleTrade(client, message) {
382
+ //
383
+ // {
384
+ // "sequence": 0,
385
+ // "product_id": "BTC-PERP",
386
+ // "time": "2023-05-10T14:58:47.002Z",
387
+ // "match_id": "177101110052388865",
388
+ // "trade_qty": "0.006",
389
+ // "aggressor_side": "BUY",
390
+ // "trade_price": "28833.1",
391
+ // "channel": "MATCH",
392
+ // "type": "UPDATE"
393
+ // }
394
+ //
395
+ const trade = this.parseWsTrade(message);
396
+ const symbol = trade['symbol'];
397
+ const channel = this.safeString(message, 'channel');
398
+ if (!(symbol in this.trades)) {
399
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
400
+ const tradesArrayCache = new ArrayCache(limit);
401
+ this.trades[symbol] = tradesArrayCache;
402
+ }
403
+ const tradesArray = this.trades[symbol];
404
+ tradesArray.append(trade);
405
+ this.trades[symbol] = tradesArray;
406
+ client.resolve(tradesArray, channel);
407
+ client.resolve(tradesArray, channel + '::' + trade['symbol']);
408
+ return message;
409
+ }
410
+ parseWsTrade(trade, market = undefined) {
411
+ //
412
+ // {
413
+ // "sequence": 0,
414
+ // "product_id": "BTC-PERP",
415
+ // "time": "2023-05-10T14:58:47.002Z",
416
+ // "match_id": "177101110052388865",
417
+ // "trade_qty": "0.006",
418
+ // "aggressor_side": "BUY",
419
+ // "trade_price": "28833.1",
420
+ // "channel": "MATCH",
421
+ // "type": "UPDATE"
422
+ // }
423
+ const marketId = this.safeString2(trade, 'symbol', 'product_id');
424
+ const datetime = this.safeString(trade, 'time');
425
+ return this.safeTrade({
426
+ 'info': trade,
427
+ 'id': this.safeString(trade, 'match_id'),
428
+ 'order': undefined,
429
+ 'timestamp': this.parse8601(datetime),
430
+ 'datetime': datetime,
431
+ 'symbol': this.safeSymbol(marketId, market),
432
+ 'type': undefined,
433
+ 'side': this.safeStringLower(trade, 'agressor_side'),
434
+ 'takerOrMaker': undefined,
435
+ 'price': this.safeString(trade, 'trade_price'),
436
+ 'amount': this.safeString(trade, 'trade_qty'),
437
+ 'cost': undefined,
438
+ 'fee': undefined,
439
+ });
440
+ }
441
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
442
+ /**
443
+ * @method
444
+ * @name coinbaseinternational#watchOrderBook
445
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
446
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
447
+ * @param {string} symbol unified symbol of the market to fetch the order book for
448
+ * @param {int} [limit] the maximum amount of order book entries to return
449
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
450
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
451
+ */
452
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
453
+ }
454
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
455
+ /**
456
+ * @method
457
+ * @name coinbaseinternational#watchOrderBook
458
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
459
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
460
+ * @param {string} symbol unified symbol of the market to fetch the order book for
461
+ * @param {int} [limit] the maximum amount of order book entries to return
462
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
463
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
464
+ */
465
+ await this.loadMarkets();
466
+ return await this.subscribeMultiple('LEVEL2', symbols, params);
467
+ }
468
+ handleOrderBook(client, message) {
469
+ //
470
+ // snapshot
471
+ // {
472
+ // "sequence": 0,
473
+ // "product_id": "BTC-PERP",
474
+ // "time": "2023-05-10T14:58:47.000Z",
475
+ // "bids": [
476
+ // ["29100", "0.02"],
477
+ // ["28950", "0.01"],
478
+ // ["28900", "0.01"]
479
+ // ],
480
+ // "asks": [
481
+ // ["29267.8", "18"],
482
+ // ["29747.6", "18"],
483
+ // ["30227.4", "9"]
484
+ // ],
485
+ // "channel": "LEVEL2",
486
+ // "type": "SNAPSHOT",
487
+ // }
488
+ // update
489
+ // {
490
+ // "sequence": 1,
491
+ // "product_id": "BTC-PERP",
492
+ // "time": "2023-05-10T14:58:47.375Z",
493
+ // "changes": [
494
+ // [
495
+ // "BUY",
496
+ // "28787.7",
497
+ // "6"
498
+ // ]
499
+ // ],
500
+ // "channel": "LEVEL2",
501
+ // "type": "UPDATE"
502
+ // }
503
+ //
504
+ const type = this.safeString(message, 'type');
505
+ const marketId = this.safeString(message, 'product_id');
506
+ const symbol = this.safeSymbol(marketId);
507
+ const datetime = this.safeString(message, 'time');
508
+ const channel = this.safeString(message, 'channel');
509
+ if (!(symbol in this.orderbooks)) {
510
+ const limit = this.safeInteger(this.options, 'watchOrderBookLimit', 1000);
511
+ this.orderbooks[symbol] = this.orderBook({}, limit);
512
+ }
513
+ const orderbook = this.orderbooks[symbol];
514
+ if (type === 'SNAPSHOT') {
515
+ const parsedSnapshot = this.parseOrderBook(message, symbol, undefined, 'bids', 'asks');
516
+ orderbook.reset(parsedSnapshot);
517
+ orderbook['symbol'] = symbol;
518
+ }
519
+ else {
520
+ const changes = this.safeList(message, 'changes', []);
521
+ this.handleDeltas(orderbook, changes);
522
+ }
523
+ orderbook['nonce'] = this.safeInteger(message, 'sequence');
524
+ orderbook['datetime'] = datetime;
525
+ orderbook['timestamp'] = this.parse8601(datetime);
526
+ this.orderbooks[symbol] = orderbook;
527
+ client.resolve(orderbook, channel + '::' + symbol);
528
+ }
529
+ handleDelta(orderbook, delta) {
530
+ const rawSide = this.safeStringLower(delta, 0);
531
+ const side = (rawSide === 'buy') ? 'bids' : 'asks';
532
+ const price = this.safeFloat(delta, 1);
533
+ const amount = this.safeFloat(delta, 2);
534
+ const bookside = orderbook[side];
535
+ bookside.store(price, amount);
536
+ }
537
+ handleDeltas(orderbook, deltas) {
538
+ for (let i = 0; i < deltas.length; i++) {
539
+ this.handleDelta(orderbook, deltas[i]);
540
+ }
541
+ }
542
+ handleSubscriptionStatus(client, message) {
543
+ //
544
+ // {
545
+ // "channels": [
546
+ // {
547
+ // "name": "MATCH",
548
+ // "product_ids": [
549
+ // "BTC-PERP",
550
+ // "ETH-PERP"
551
+ // ]
552
+ // },
553
+ // {
554
+ // "name": "INSTRUMENTS",
555
+ // "product_ids": [
556
+ // "BTC-PERP",
557
+ // "ETH-PERP"
558
+ // ]
559
+ // }
560
+ // ],
561
+ // "authenticated": true,
562
+ // "channel": "SUBSCRIPTIONS",
563
+ // "type": "SNAPSHOT",
564
+ // "time": "2023-05-30T16:53:46.847Z"
565
+ // }
566
+ //
567
+ return message;
568
+ }
569
+ handleFundingRate(client, message) {
570
+ //
571
+ // snapshot
572
+ // {
573
+ // "sequence": 0,
574
+ // "product_id": "BTC-PERP",
575
+ // "time": "2023-05-10T14:58:47.000Z",
576
+ // "funding_rate": "0.001387",
577
+ // "is_final": true,
578
+ // "channel": "FUNDING",
579
+ // "type": "SNAPSHOT"
580
+ // }
581
+ // update
582
+ // {
583
+ // "sequence": 1,
584
+ // "product_id": "BTC-PERP",
585
+ // "time": "2023-05-10T15:00:00.000Z",
586
+ // "funding_rate": "0.001487",
587
+ // "is_final": false,
588
+ // "channel": "FUNDING",
589
+ // "type": "UPDATE"
590
+ // }
591
+ //
592
+ const channel = this.safeString(message, 'channel');
593
+ const fundingRate = this.parseFundingRate(message);
594
+ client.resolve(fundingRate, channel + '::' + fundingRate['symbol']);
595
+ }
596
+ handleErrorMessage(client, message) {
597
+ //
598
+ // {
599
+ // message: 'Failed to subscribe',
600
+ // reason: 'Unable to authenticate',
601
+ // channel: 'SUBSCRIPTIONS',
602
+ // type: 'REJECT'
603
+ // }
604
+ //
605
+ const type = this.safeString(message, 'type');
606
+ if (type !== 'REJECT') {
607
+ return false;
608
+ }
609
+ const reason = this.safeString(message, 'reason');
610
+ const errMsg = this.safeString(message, 'message');
611
+ try {
612
+ const feedback = this.id + ' ' + errMsg + reason;
613
+ this.throwExactlyMatchedException(this.exceptions['exact'], reason, feedback);
614
+ this.throwBroadlyMatchedException(this.exceptions['broad'], reason, feedback);
615
+ throw new ExchangeError(feedback);
616
+ }
617
+ catch (e) {
618
+ client.reject(e);
619
+ }
620
+ return true;
621
+ }
622
+ handleMessage(client, message) {
623
+ if (this.handleErrorMessage(client, message)) {
624
+ return;
625
+ }
626
+ const channel = this.safeString(message, 'channel');
627
+ const methods = {
628
+ 'SUBSCRIPTIONS': this.handleSubscriptionStatus,
629
+ 'INSTRUMENTS': this.handleInstrument,
630
+ 'LEVEL1': this.handleTicker,
631
+ 'MATCH': this.handleTrade,
632
+ 'LEVEL2': this.handleOrderBook,
633
+ 'FUNDING': this.handleFundingRate,
634
+ 'RISK': this.handleTicker,
635
+ };
636
+ const type = this.safeString(message, 'type');
637
+ if (type === 'error') {
638
+ const errorMessage = this.safeString(message, 'message');
639
+ throw new ExchangeError(errorMessage);
640
+ }
641
+ const method = this.safeValue(methods, channel);
642
+ if (method !== undefined) {
643
+ method.call(this, client, message);
644
+ }
645
+ }
646
+ }
@@ -1,5 +1,5 @@
1
1
  import cryptocomRest from '../cryptocom.js';
2
- import type { Int, OrderSide, OrderType, Str, Strings, OrderBook, Order, Trade, Ticker, OHLCV, Position, Balances } from '../base/types.js';
2
+ import type { Int, OrderSide, OrderType, Str, Strings, OrderBook, Order, Trade, Ticker, OHLCV, Position, Balances, Num } from '../base/types.js';
3
3
  import Client from '../base/ws/Client.js';
4
4
  export default class cryptocom extends cryptocomRest {
5
5
  describe(): any;
@@ -25,7 +25,7 @@ export default class cryptocom extends cryptocomRest {
25
25
  handlePositions(client: any, message: any): void;
26
26
  watchBalance(params?: {}): Promise<Balances>;
27
27
  handleBalance(client: Client, message: any): void;
28
- createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, params?: {}): Promise<Order>;
28
+ createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
29
29
  handleOrder(client: Client, message: any): void;
30
30
  cancelOrderWs(id: string, symbol?: Str, params?: {}): Promise<Order>;
31
31
  cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<any>;
@@ -1,5 +1,5 @@
1
1
  import hitbtcRest from '../hitbtc.js';
2
- import type { Tickers, Int, OHLCV, OrderSide, OrderType, Strings } from '../base/types.js';
2
+ import type { Tickers, Int, OHLCV, OrderSide, OrderType, Strings, Num } from '../base/types.js';
3
3
  import Client from '../base/ws/Client.js';
4
4
  import { Str, OrderBook, Order, Trade, Ticker, Balances } from '../base/types';
5
5
  export default class hitbtc extends hitbtcRest {
@@ -29,7 +29,7 @@ export default class hitbtc extends hitbtcRest {
29
29
  parseWsOrderTrade(trade: any, market?: any): Trade;
30
30
  parseWsOrder(order: any, market?: any): Order;
31
31
  watchBalance(params?: {}): Promise<Balances>;
32
- createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, params?: {}): Promise<Order>;
32
+ createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
33
33
  cancelOrderWs(id: string, symbol?: Str, params?: {}): Promise<Order>;
34
34
  cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<any>;
35
35
  fetchOpenOrdersWs(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;