ccxt 4.2.73 → 4.2.75

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 (309) hide show
  1. package/CHANGELOG.md +206 -10
  2. package/README.md +10 -9
  3. package/build.sh +1 -1
  4. package/dist/ccxt.browser.js +1042 -297
  5. package/dist/ccxt.browser.min.js +3 -3
  6. package/dist/cjs/ccxt.js +4 -1
  7. package/dist/cjs/src/abstract/tradeogre.js +9 -0
  8. package/dist/cjs/src/ascendex.js +3 -2
  9. package/dist/cjs/src/base/Exchange.js +1 -1
  10. package/dist/cjs/src/bitget.js +62 -50
  11. package/dist/cjs/src/bitmart.js +1 -0
  12. package/dist/cjs/src/bybit.js +90 -30
  13. package/dist/cjs/src/coinbaseinternational.js +1 -1
  14. package/dist/cjs/src/coinex.js +4 -3
  15. package/dist/cjs/src/gate.js +1 -0
  16. package/dist/cjs/src/htx.js +16 -9
  17. package/dist/cjs/src/hyperliquid.js +2 -1
  18. package/dist/cjs/src/kraken.js +3 -3
  19. package/dist/cjs/src/kucoin.js +1 -1
  20. package/dist/cjs/src/pro/krakenfutures.js +8 -7
  21. package/dist/cjs/src/tradeogre.js +632 -0
  22. package/examples/README.md +308 -0
  23. package/examples/ccxt.pro/html/watchTicker.html +51 -0
  24. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
  25. package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
  26. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
  27. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
  28. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
  29. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
  30. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
  31. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
  32. package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
  33. package/examples/ccxt.pro/js/exchange-close.js +46 -0
  34. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
  35. package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
  36. package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
  37. package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
  38. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
  39. package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
  40. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
  41. package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
  42. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
  43. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
  44. package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
  45. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
  46. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
  47. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
  48. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
  49. package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
  50. package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
  51. package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
  52. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
  53. package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
  54. package/examples/cs/Examples.sln +22 -0
  55. package/examples/cs/c#.csproj +19 -0
  56. package/examples/html/basic-cors-proxy.html +46 -0
  57. package/examples/html/basic-inheritance.html +47 -0
  58. package/examples/html/basic-poller.html +52 -0
  59. package/examples/html/basic-rate-limiting.html +49 -0
  60. package/examples/html/basic.html +43 -0
  61. package/examples/html/binance-cors-proxy.html +28 -0
  62. package/examples/html/bitmex-browser-cors-proxy.js +7 -0
  63. package/examples/html/bitmex-cors.html +46 -0
  64. package/examples/html/tradingview-charts.html +61 -0
  65. package/examples/html/webworker/index.html +97 -0
  66. package/examples/html/webworker/worker.js +43 -0
  67. package/examples/js/README.md +15 -0
  68. package/examples/js/advanced-error-handling.js +39 -0
  69. package/examples/js/aggregate-orderbook.js +54 -0
  70. package/examples/js/arbitrage-pairs.js +130 -0
  71. package/examples/js/basic-chart.js +29 -0
  72. package/examples/js/basic-orderbook-polling.js +13 -0
  73. package/examples/js/bcc-vs-bch.js +115 -0
  74. package/examples/js/binance-fetch-all-deposits.js +45 -0
  75. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
  76. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
  77. package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
  78. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
  79. package/examples/js/binance-margin-stop-order.js +39 -0
  80. package/examples/js/binance-server-time.js +34 -0
  81. package/examples/js/binance-universal-transfer.js +16 -0
  82. package/examples/js/bitfinex-fetch-trades.js +35 -0
  83. package/examples/js/bitfinex2-fetch-trades.js +35 -0
  84. package/examples/js/bitmex-browser-cors-proxy.js +7 -0
  85. package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
  86. package/examples/js/bitrue-fetch-balance.js +28 -0
  87. package/examples/js/bitstamp-private-api.js +115 -0
  88. package/examples/js/bitstamp-public-api.js +39 -0
  89. package/examples/js/bittrex-balance.js +50 -0
  90. package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
  91. package/examples/js/blockchaincom-withdrawal.js +59 -0
  92. package/examples/js/build-ohlcv-bars.js +48 -0
  93. package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
  94. package/examples/js/bybit-trailing.js +62 -0
  95. package/examples/js/bybit-updated.cjs +154 -0
  96. package/examples/js/cli.js +405 -0
  97. package/examples/js/coinbase-fetch-all-balances.js +36 -0
  98. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
  99. package/examples/js/coinex-futures.js +75 -0
  100. package/examples/js/coinone-fetch-tickers.js +54 -0
  101. package/examples/js/coinone-markets.js +16 -0
  102. package/examples/js/compare-two-exchanges-capabilities.js +36 -0
  103. package/examples/js/cors-proxy.js +5 -0
  104. package/examples/js/create-order-handle-errors.js +55 -0
  105. package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
  106. package/examples/js/create-order-with-retry.js +65 -0
  107. package/examples/js/create-order-ws-example.js +25 -0
  108. package/examples/js/create-orders-example.js +17 -0
  109. package/examples/js/create-trailing-amount-order.js +36 -0
  110. package/examples/js/create-trailing-percent-order.js +36 -0
  111. package/examples/js/credentials.json +5 -0
  112. package/examples/js/custom-proxy-agent-for-js.js +10 -0
  113. package/examples/js/custom-proxy-url.js +23 -0
  114. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
  115. package/examples/js/env-variables.js +26 -0
  116. package/examples/js/error-handling.js +89 -0
  117. package/examples/js/exchange-capabilities.js +135 -0
  118. package/examples/js/exchanges-by-volume.js +60 -0
  119. package/examples/js/exchanges.js +40 -0
  120. package/examples/js/fetch-all-balances.js +219 -0
  121. package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
  122. package/examples/js/fetch-all-tickers-to-files.js +77 -0
  123. package/examples/js/fetch-balance.js +28 -0
  124. package/examples/js/fetch-create-deposit-address.js +101 -0
  125. package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
  126. package/examples/js/fetch-funding-rate-history.js +25 -0
  127. package/examples/js/fetch-futures/prettier.config.js +5 -0
  128. package/examples/js/fetch-futures/src/index.js +25 -0
  129. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
  130. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
  131. package/examples/js/fetch-ohlcv.js +16 -0
  132. package/examples/js/fetch-okex-futures.js +22 -0
  133. package/examples/js/fetch-orders.js +27 -0
  134. package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
  135. package/examples/js/fetch-ticker-where-available.js +75 -0
  136. package/examples/js/fetch-tickers/build/index.js +19 -0
  137. package/examples/js/fetch-tickers/prettier.config.js +5 -0
  138. package/examples/js/fetch-tickers/src/index.js +17 -0
  139. package/examples/js/gateio-create-batch-order.js +43 -0
  140. package/examples/js/gateio-futures.js +49 -0
  141. package/examples/js/gateio-open-close-contract.js +49 -0
  142. package/examples/js/gateio-swaps.js +74 -0
  143. package/examples/js/gdax-fetch-trades-pagination.js +29 -0
  144. package/examples/js/hitbtc2-withdraw.js +61 -0
  145. package/examples/js/how-to-import-one-exchange-esm.js +10 -0
  146. package/examples/js/huobi-futures.js +71 -0
  147. package/examples/js/huobi-open-close-contract.js +63 -0
  148. package/examples/js/huobi-swaps.js +70 -0
  149. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
  150. package/examples/js/hybridCJSExample.cjs +19 -0
  151. package/examples/js/hybridESMExample.js +19 -0
  152. package/examples/js/idex-fetch-balance.js +13 -0
  153. package/examples/js/instantiate-all-at-once.js +46 -0
  154. package/examples/js/instantiate-all-from-json.js +31 -0
  155. package/examples/js/kraken-create-and-close-position.js +54 -0
  156. package/examples/js/kraken-fetch-order-trades.js +33 -0
  157. package/examples/js/kraken-margin-trading.js +89 -0
  158. package/examples/js/kucoin-rate-limit.js +38 -0
  159. package/examples/js/latoken-example.js +108 -0
  160. package/examples/js/live-orderbook.js +106 -0
  161. package/examples/js/live-ticker.js +80 -0
  162. package/examples/js/live-tickers.js +74 -0
  163. package/examples/js/load-all-contracts.js +41 -0
  164. package/examples/js/load-all-symbols-at-once.js +69 -0
  165. package/examples/js/load-all-tickers-at-once.js +91 -0
  166. package/examples/js/load-markets-to-files.js +57 -0
  167. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
  168. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
  169. package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
  170. package/examples/js/market-status-and-currency-status.js +29 -0
  171. package/examples/js/ohlcv-console-chart.js +29 -0
  172. package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
  173. package/examples/js/okex-transfer.js +51 -0
  174. package/examples/js/okx-poll-fetch-my-trades.js +37 -0
  175. package/examples/js/okx-poll-rate-limit.js +48 -0
  176. package/examples/js/order-book-extra-level-depth-param.js +20 -0
  177. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
  178. package/examples/js/poll-ohlcv.js +43 -0
  179. package/examples/js/poloniex-fetch-order-books.js +35 -0
  180. package/examples/js/poloniex-limits-amount-min.js +62 -0
  181. package/examples/js/proxy-round-robin.js +98 -0
  182. package/examples/js/proxy-usage.js +32 -0
  183. package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
  184. package/examples/js/search-all-exchanges.js +159 -0
  185. package/examples/js/shared-load-markets.js +80 -0
  186. package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
  187. package/examples/js/symbols.js +110 -0
  188. package/examples/js/theocean.js +41 -0
  189. package/examples/js/tickers.js +106 -0
  190. package/examples/js/validate-paginated-data.js +61 -0
  191. package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
  192. package/examples/js/watch-OHLCV.js +12 -0
  193. package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
  194. package/examples/js/watch-Trades-For-Symbols.js +11 -0
  195. package/examples/js/watch-tickers.js +11 -0
  196. package/examples/js/watchOHLCVForSymbols.js +15 -0
  197. package/examples/js/watchOrderBookForSymbols.js +11 -0
  198. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
  199. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
  200. package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
  201. package/examples/js/watchPositions.d.ts +2 -0
  202. package/examples/js/watchPositions.d.ts.map +1 -0
  203. package/examples/js/watchPositions.js +13 -0
  204. package/examples/js/watchPositionsForSymbols.d.ts +2 -0
  205. package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
  206. package/examples/js/watchPositionsForSymbols.js +14 -0
  207. package/examples/js/watchTradesForSymbols.js +11 -0
  208. package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
  209. package/examples/php/README.md +7 -0
  210. package/examples/py/README.md +15 -0
  211. package/examples/py/playing_with_ccxt_example.ipynb +222 -0
  212. package/examples/ts/.eslintrc +111 -0
  213. package/examples/ts/build-ohlcv-bars.ts +53 -0
  214. package/examples/ts/cli.ts +397 -0
  215. package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
  216. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
  217. package/examples/ts/create-order-ws-example.ts +33 -0
  218. package/examples/ts/create-orders-example.ts +21 -0
  219. package/examples/ts/create-trailing-amount-order.ts +37 -0
  220. package/examples/ts/create-trailing-percent-order.ts +37 -0
  221. package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
  222. package/examples/ts/fetch-futures/package-lock.json +116 -0
  223. package/examples/ts/fetch-futures/package.json +34 -0
  224. package/examples/ts/fetch-futures/prettier.config.js +4 -0
  225. package/examples/ts/fetch-futures/src/index.ts +28 -0
  226. package/examples/ts/fetch-futures/tsconfig.json +28 -0
  227. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
  228. package/examples/ts/fetch-ohlcv.ts +17 -0
  229. package/examples/ts/fetch-tickers/package-lock.json +116 -0
  230. package/examples/ts/fetch-tickers/package.json +34 -0
  231. package/examples/ts/fetch-tickers/prettier.config.js +4 -0
  232. package/examples/ts/fetch-tickers/src/index.ts +21 -0
  233. package/examples/ts/fetch-tickers/tsconfig.json +28 -0
  234. package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
  235. package/examples/ts/kraken-create-and-close-position.ts +69 -0
  236. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
  237. package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
  238. package/examples/ts/nextjs-page-router/README.md +43 -0
  239. package/examples/ts/nextjs-page-router/next.config.js +6 -0
  240. package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
  241. package/examples/ts/nextjs-page-router/package.json +28 -0
  242. package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
  243. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  244. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
  245. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
  246. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
  247. package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
  248. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
  249. package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
  250. package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
  251. package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
  252. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
  253. package/examples/ts/proxy-usage.ts +41 -0
  254. package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
  255. package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
  256. package/examples/ts/watch-OHLCV.ts +14 -0
  257. package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
  258. package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
  259. package/examples/ts/watch-tickers.ts +13 -0
  260. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
  261. package/examples/ts/watchPositions.ts +15 -0
  262. package/examples/ts/watchPositionsForSymbols.ts +16 -0
  263. package/examples/tsconfig.json +27 -0
  264. package/js/ccxt.d.ts +5 -2
  265. package/js/ccxt.js +4 -2
  266. package/js/src/abstract/tradeogre.d.ts +19 -0
  267. package/js/src/abstract/tradeogre.js +11 -0
  268. package/js/src/ascendex.d.ts +2 -7
  269. package/js/src/ascendex.js +3 -2
  270. package/js/src/base/Exchange.d.ts +7 -7
  271. package/js/src/base/Exchange.js +1 -1
  272. package/js/src/base/types.d.ts +7 -1
  273. package/js/src/binance.d.ts +1 -1
  274. package/js/src/bitget.js +62 -50
  275. package/js/src/bitmart.d.ts +1 -1
  276. package/js/src/bitmart.js +2 -1
  277. package/js/src/bybit.d.ts +3 -1
  278. package/js/src/bybit.js +90 -30
  279. package/js/src/coinbase.d.ts +4 -4
  280. package/js/src/coinbaseinternational.d.ts +1 -1
  281. package/js/src/coinbaseinternational.js +1 -1
  282. package/js/src/coinbasepro.d.ts +2 -2
  283. package/js/src/coinex.js +4 -3
  284. package/js/src/coinlist.d.ts +2 -2
  285. package/js/src/cryptocom.d.ts +2 -2
  286. package/js/src/currencycom.d.ts +2 -2
  287. package/js/src/deribit.d.ts +2 -2
  288. package/js/src/gate.d.ts +1 -1
  289. package/js/src/gate.js +1 -0
  290. package/js/src/htx.d.ts +2 -2
  291. package/js/src/htx.js +16 -9
  292. package/js/src/huobijp.d.ts +2 -2
  293. package/js/src/hyperliquid.js +2 -1
  294. package/js/src/kraken.d.ts +1 -1
  295. package/js/src/kraken.js +3 -3
  296. package/js/src/kucoin.d.ts +3 -3
  297. package/js/src/kucoin.js +1 -1
  298. package/js/src/luno.d.ts +2 -2
  299. package/js/src/mexc.d.ts +3 -3
  300. package/js/src/ndax.d.ts +2 -2
  301. package/js/src/novadax.d.ts +2 -2
  302. package/js/src/okx.d.ts +2 -2
  303. package/js/src/pro/bitfinex2.d.ts +1 -1
  304. package/js/src/pro/krakenfutures.js +8 -7
  305. package/js/src/tradeogre.d.ts +32 -0
  306. package/js/src/tradeogre.js +633 -0
  307. package/js/src/woo.d.ts +2 -2
  308. package/package.json +4 -1
  309. package/skip-tests.json +219 -424
@@ -0,0 +1,633 @@
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 Exchange from './abstract/tradeogre.js';
9
+ import { InsufficientFunds, AuthenticationError, BadRequest, ExchangeError } from './base/errors.js';
10
+ import { TICK_SIZE } from './base/functions/number.js';
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * @class tradeogre
14
+ * @augments Exchange
15
+ */
16
+ export default class tradeogre extends Exchange {
17
+ describe() {
18
+ return this.deepExtend(super.describe(), {
19
+ 'id': 'tradeogre',
20
+ 'name': 'tradeogre',
21
+ 'countries': [],
22
+ 'rateLimit': 100,
23
+ 'version': 'v2',
24
+ 'pro': false,
25
+ 'has': {
26
+ 'CORS': undefined,
27
+ 'spot': true,
28
+ 'margin': false,
29
+ 'swap': false,
30
+ 'future': false,
31
+ 'option': false,
32
+ 'addMargin': false,
33
+ 'cancelAllOrders': true,
34
+ 'cancelOrder': true,
35
+ 'cancelOrders': false,
36
+ 'closeAllPositions': false,
37
+ 'closePosition': false,
38
+ 'createDepositAddress': false,
39
+ 'createMarketOrder': false,
40
+ 'createOrder': true,
41
+ 'createOrders': false,
42
+ 'createPostOnlyOrder': false,
43
+ 'createReduceOnlyOrder': false,
44
+ 'createStopLimitOrder': false,
45
+ 'createStopMarketOrder': false,
46
+ 'createStopOrder': false,
47
+ 'fetchAccounts': false,
48
+ 'fetchBalance': true,
49
+ 'fetchBorrowInterest': false,
50
+ 'fetchBorrowRateHistory': false,
51
+ 'fetchClosedOrders': false,
52
+ 'fetchCrossBorrowRate': false,
53
+ 'fetchCrossBorrowRates': false,
54
+ 'fetchDeposit': false,
55
+ 'fetchDepositAddress': false,
56
+ 'fetchDepositAddresses': false,
57
+ 'fetchDepositAddressesByNetwork': false,
58
+ 'fetchDeposits': false,
59
+ 'fetchDepositsWithdrawals': false,
60
+ 'fetchFundingHistory': false,
61
+ 'fetchFundingRate': false,
62
+ 'fetchFundingRateHistory': false,
63
+ 'fetchFundingRates': false,
64
+ 'fetchIndexOHLCV': false,
65
+ 'fetchIsolatedBorrowRate': false,
66
+ 'fetchIsolatedBorrowRates': false,
67
+ 'fetchLedger': false,
68
+ 'fetchLedgerEntry': false,
69
+ 'fetchLeverageTiers': false,
70
+ 'fetchMarketLeverageTiers': false,
71
+ 'fetchMarkets': true,
72
+ 'fetchMarkOHLCV': false,
73
+ 'fetchMyTrades': false,
74
+ 'fetchOHLCV': false,
75
+ 'fetchOpenInterest': false,
76
+ 'fetchOpenInterestHistory': false,
77
+ 'fetchOpenOrders': true,
78
+ 'fetchOrder': true,
79
+ 'fetchOrderBook': true,
80
+ 'fetchOrderBooks': false,
81
+ 'fetchOrders': false,
82
+ 'fetchOrderTrades': false,
83
+ 'fetchPermissions': false,
84
+ 'fetchPosition': false,
85
+ 'fetchPositions': false,
86
+ 'fetchPositionsForSymbol': false,
87
+ 'fetchPositionsRisk': false,
88
+ 'fetchPremiumIndexOHLCV': false,
89
+ 'fetchTicker': true,
90
+ 'fetchTickers': false,
91
+ 'fetchTrades': true,
92
+ 'fetchTradingLimits': false,
93
+ 'fetchTransactionFee': false,
94
+ 'fetchTransactionFees': false,
95
+ 'fetchTransactions': false,
96
+ 'fetchTransfers': false,
97
+ 'fetchWithdrawAddresses': false,
98
+ 'fetchWithdrawal': false,
99
+ 'fetchWithdrawals': false,
100
+ 'reduceMargin': false,
101
+ 'setLeverage': false,
102
+ 'setMargin': false,
103
+ 'setMarginMode': false,
104
+ 'setPositionMode': false,
105
+ 'signIn': false,
106
+ 'transfer': false,
107
+ 'withdraw': false,
108
+ },
109
+ 'urls': {
110
+ 'referral': '',
111
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/3aa748b7-ea44-45e9-a9e7-b1d207a2578a',
112
+ 'api': {
113
+ 'rest': 'https://tradeogre.com/api/v1',
114
+ },
115
+ 'www': 'https://tradeogre.com',
116
+ 'doc': 'https://tradeogre.com/help/api',
117
+ 'fees': 'https://tradeogre.com/help/fees',
118
+ },
119
+ 'fees': {
120
+ 'trading': {
121
+ 'maker': this.parseNumber('0.002'),
122
+ 'taker': this.parseNumber('0.002'),
123
+ },
124
+ },
125
+ 'api': {
126
+ 'public': {
127
+ 'get': {
128
+ 'markets': 1,
129
+ 'orders/{market}': 1,
130
+ 'ticker/{market}': 1,
131
+ 'history/{market}': 1,
132
+ },
133
+ },
134
+ 'private': {
135
+ 'get': {
136
+ 'account/balance': 1,
137
+ 'account/balances': 1,
138
+ 'account/order/{uuid}': 1,
139
+ },
140
+ 'post': {
141
+ 'order/buy': 1,
142
+ 'order/sell': 1,
143
+ 'order/cancel': 1,
144
+ 'orders': 1,
145
+ 'account/orders': 1,
146
+ },
147
+ },
148
+ },
149
+ 'commonCurrencies': {},
150
+ 'precisionMode': TICK_SIZE,
151
+ 'exceptions': {
152
+ 'exact': {
153
+ 'Must be authorized': AuthenticationError,
154
+ 'Market not found': BadRequest,
155
+ 'Insufficient funds': InsufficientFunds,
156
+ 'Order not found': BadRequest,
157
+ },
158
+ },
159
+ 'options': {},
160
+ });
161
+ }
162
+ async fetchMarkets(params = {}) {
163
+ /**
164
+ * @method
165
+ * @name tradeogre#fetchMarkets
166
+ * @description retrieves data on all markets for bigone
167
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#markets
168
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
169
+ * @returns {object[]} an array of objects representing market data
170
+ */
171
+ const response = await this.publicGetMarkets(params);
172
+ //
173
+ // [
174
+ // {
175
+ // "AEON-BTC": {
176
+ // "initialprice": "0.00022004",
177
+ // "price": "0.00025992",
178
+ // "high": "0.00025992",
179
+ // "low": "0.00022003",
180
+ // "volume": "0.00359066",
181
+ // "bid": "0.00022456",
182
+ // "ask": "0.00025993"
183
+ // }
184
+ // }
185
+ // ]
186
+ //
187
+ const result = [];
188
+ for (let i = 0; i < response.length; i++) {
189
+ const rawMarket = response[i];
190
+ const keys = Object.keys(rawMarket);
191
+ const id = this.safeString(keys, 0);
192
+ const keyParts = id.split('-');
193
+ const baseId = this.safeString(keyParts, 0);
194
+ const quoteId = this.safeString(keyParts, 1);
195
+ const base = this.safeCurrencyCode(baseId);
196
+ const quote = this.safeCurrencyCode(quoteId);
197
+ const market = this.safeMarketStructure({
198
+ 'id': id,
199
+ 'symbol': base + '/' + quote,
200
+ 'base': base,
201
+ 'quote': quote,
202
+ 'settle': undefined,
203
+ 'baseId': baseId,
204
+ 'quoteId': quoteId,
205
+ 'settleId': undefined,
206
+ 'type': 'spot',
207
+ 'spot': true,
208
+ 'margin': false,
209
+ 'swap': false,
210
+ 'future': false,
211
+ 'option': false,
212
+ 'active': true,
213
+ 'contract': false,
214
+ 'linear': undefined,
215
+ 'inverse': undefined,
216
+ 'contractSize': undefined,
217
+ 'taker': this.fees['trading']['taker'],
218
+ 'maker': this.fees['trading']['taker'],
219
+ 'expiry': undefined,
220
+ 'expiryDatetime': undefined,
221
+ 'strike': undefined,
222
+ 'optionType': undefined,
223
+ 'precision': {
224
+ 'amount': this.parseNumber(this.parsePrecision('8')),
225
+ 'price': this.parseNumber(this.parsePrecision('8')), // they're not explicit about it
226
+ },
227
+ 'limits': {
228
+ 'leverage': {
229
+ 'min': undefined,
230
+ 'max': undefined,
231
+ },
232
+ 'amount': {
233
+ 'min': undefined,
234
+ 'max': undefined,
235
+ },
236
+ 'price': {
237
+ 'min': undefined,
238
+ 'max': undefined,
239
+ },
240
+ 'cost': {
241
+ 'min': undefined,
242
+ 'max': undefined,
243
+ },
244
+ },
245
+ 'created': undefined,
246
+ 'info': rawMarket,
247
+ });
248
+ result.push(market);
249
+ }
250
+ return result;
251
+ }
252
+ async fetchTicker(symbol, params = {}) {
253
+ /**
254
+ * @method
255
+ * @name tradeogre#fetchTicker
256
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
257
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
258
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
259
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
260
+ */
261
+ await this.loadMarkets();
262
+ const market = this.market(symbol);
263
+ const request = {
264
+ 'market': market['id'],
265
+ };
266
+ const response = await this.publicGetTickerMarket(this.extend(request, params));
267
+ //
268
+ // {
269
+ // "success":true,
270
+ // "initialprice":"0.02502002",
271
+ // "price":"0.02500000",
272
+ // "high":"0.03102001",
273
+ // "low":"0.02500000",
274
+ // "volume":"0.15549958",
275
+ // "bid":"0.02420000",
276
+ // "ask":"0.02625000"
277
+ // }
278
+ //
279
+ return this.parseTicker(response, market);
280
+ }
281
+ parseTicker(ticker, market = undefined) {
282
+ //
283
+ // {
284
+ // "success":true,
285
+ // "initialprice":"0.02502002",
286
+ // "price":"0.02500000",
287
+ // "high":"0.03102001",
288
+ // "low":"0.02500000",
289
+ // "volume":"0.15549958",
290
+ // "bid":"0.02420000",
291
+ // "ask":"0.02625000"
292
+ // }
293
+ //
294
+ return this.safeTicker({
295
+ 'symbol': this.safeString(market, 'symbol'),
296
+ 'timestamp': undefined,
297
+ 'datetime': undefined,
298
+ 'high': this.safeString(ticker, 'high'),
299
+ 'low': this.safeString(ticker, 'low'),
300
+ 'bid': this.safeString(ticker, 'bid'),
301
+ 'bidVolume': undefined,
302
+ 'ask': this.safeString(ticker, 'ask'),
303
+ 'askVolume': undefined,
304
+ 'vwap': undefined,
305
+ 'open': this.safeString(ticker, 'open'),
306
+ 'close': undefined,
307
+ 'last': undefined,
308
+ 'previousClose': undefined,
309
+ 'change': undefined,
310
+ 'percentage': undefined,
311
+ 'average': undefined,
312
+ 'baseVolume': this.safeString(ticker, 'volume'),
313
+ 'quoteVolume': undefined,
314
+ 'info': ticker,
315
+ }, market);
316
+ }
317
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
318
+ /**
319
+ * @method
320
+ * @name tradeogre#fetchOrderBook
321
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
322
+ * @param {string} symbol unified symbol of the market to fetch the order book for
323
+ * @param {int} [limit] the maximum amount of order book entries to return
324
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
325
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
326
+ */
327
+ await this.loadMarkets();
328
+ const market = this.market(symbol);
329
+ const request = {
330
+ 'market': market['id'],
331
+ };
332
+ const response = await this.publicGetOrdersMarket(this.extend(request, params));
333
+ //
334
+ // {
335
+ // "success": true,
336
+ // "buy": {
337
+ // "0.02425501": "36.46986607",
338
+ // "0.02425502": "93.64201137",
339
+ // "0.02425503": "19.02000000",
340
+ // "0.02425515": "115.49000000"
341
+ // }
342
+ //
343
+ const rawBids = this.safeDict(response, 'buy', {});
344
+ const rawAsks = this.safeDict(response, 'sell', {});
345
+ const rawOrderbook = {
346
+ 'bids': rawBids,
347
+ 'asks': rawAsks,
348
+ };
349
+ const orderbook = this.parseOrderBook(rawOrderbook, symbol);
350
+ return orderbook;
351
+ }
352
+ parseBidsAsks(bidasks, priceKey = 0, amountKey = 1, countOrIdKey = 2) {
353
+ const prices = Object.keys(bidasks);
354
+ const result = [];
355
+ for (let i = 0; i < prices.length; i++) {
356
+ const priceString = this.safeString(prices, i);
357
+ const price = this.safeNumber(prices, i);
358
+ const volume = this.safeNumber(bidasks, priceString);
359
+ result.push([price, volume]);
360
+ }
361
+ return result;
362
+ }
363
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
364
+ /**
365
+ * @method
366
+ * @name tradeogre#fetchTrades
367
+ * @description get the list of most recent trades for a particular symbol
368
+ * @param {string} symbol unified symbol of the market to fetch trades for
369
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
370
+ * @param {int} [limit] the maximum number of trades to fetch
371
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
372
+ * @param {int} params.lastId order id
373
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
374
+ */
375
+ await this.loadMarkets();
376
+ const market = this.market(symbol);
377
+ const request = {
378
+ 'market': market['id'],
379
+ };
380
+ const response = await this.publicGetHistoryMarket(this.extend(request, params));
381
+ return this.parseTrades(response, market, since, limit);
382
+ }
383
+ parseTrade(trade, market = undefined) {
384
+ //
385
+ // {
386
+ // "date":1515128233,
387
+ // "type":"sell",
388
+ // "price":"0.02454320",
389
+ // "quantity":"0.17614230"
390
+ // }
391
+ //
392
+ const timestamp = this.safeIntegerProduct(trade, 'date', 1000);
393
+ return this.safeTrade({
394
+ 'info': trade,
395
+ 'id': undefined,
396
+ 'timestamp': timestamp,
397
+ 'datetime': this.iso8601(timestamp),
398
+ 'symbol': this.safeString(market, 'symbol'),
399
+ 'order': undefined,
400
+ 'type': undefined,
401
+ 'side': this.safeString(trade, 'type'),
402
+ 'takerOrMaker': undefined,
403
+ 'price': this.safeString(trade, 'price'),
404
+ 'amount': this.safeString(trade, 'quantity'),
405
+ 'cost': undefined,
406
+ 'fee': {
407
+ 'currency': undefined,
408
+ 'cost': undefined,
409
+ },
410
+ }, market);
411
+ }
412
+ async fetchBalance(params = {}) {
413
+ /**
414
+ * @method
415
+ * @name tradeogre#fetchBalance
416
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
417
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
418
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
419
+ */
420
+ await this.loadMarkets();
421
+ const response = await this.privateGetAccountBalances(params);
422
+ const result = this.safeDict(response, 'balances', {});
423
+ return this.parseBalance(result);
424
+ }
425
+ parseBalance(response) {
426
+ //
427
+ // {
428
+ // "USDT": "12"
429
+ // }
430
+ //
431
+ const result = {
432
+ 'info': response,
433
+ };
434
+ const keys = Object.keys(response);
435
+ for (let i = 0; i < keys.length; i++) {
436
+ const currencyId = keys[i];
437
+ const balance = response[currencyId];
438
+ const code = this.safeCurrencyCode(currencyId);
439
+ const account = {
440
+ 'total': balance,
441
+ };
442
+ result[code] = account;
443
+ }
444
+ return this.safeBalance(result);
445
+ }
446
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
447
+ /**
448
+ * @method
449
+ * @name tradeogre#createOrder
450
+ * @description create a trade order
451
+ * @param {string} symbol unified symbol of the market to create an order in
452
+ * @param {string} type not used by tradeogre
453
+ * @param {string} side 'buy' or 'sell'
454
+ * @param {float} amount how much of currency you want to trade in units of base currency
455
+ * @param {float} price the price at which the order is to be fullfilled, in units of the quote currency
456
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
457
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
458
+ */
459
+ await this.loadMarkets();
460
+ const market = this.market(symbol);
461
+ const request = {
462
+ 'market': market['id'],
463
+ 'quantity': this.parseToNumeric(this.amountToPrecision(symbol, amount)),
464
+ 'price': this.parseToNumeric(this.priceToPrecision(symbol, price)),
465
+ };
466
+ if (type === 'market') {
467
+ throw new BadRequest(this.id + ' createOrder does not support market orders');
468
+ }
469
+ let response = undefined;
470
+ if (side === 'buy') {
471
+ response = await this.privatePostOrderBuy(this.extend(request, params));
472
+ }
473
+ else {
474
+ response = await this.privatePostOrderSell(this.extend(request, params));
475
+ }
476
+ return this.parseOrder(response, market);
477
+ }
478
+ async cancelOrder(id, symbol = undefined, params = {}) {
479
+ /**
480
+ * @method
481
+ * @name tradeogre#cancelOrder
482
+ * @description cancels an open order
483
+ * @param {string} id order id
484
+ * @param {string} symbol unified symbol of the market the order was made in
485
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
486
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
487
+ */
488
+ await this.loadMarkets();
489
+ const request = {
490
+ 'uuid': id,
491
+ };
492
+ const response = await this.privatePostOrderCancel(this.extend(request, params));
493
+ return this.parseOrder(response);
494
+ }
495
+ async cancelAllOrders(symbol = undefined, params = {}) {
496
+ /**
497
+ * @method
498
+ * @name tradeogre#cancelAllOrders
499
+ * @description cancel all open orders
500
+ * @param {string} symbol alpaca cancelAllOrders cannot setting symbol, it will cancel all open orders
501
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
502
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
503
+ */
504
+ await this.loadMarkets();
505
+ return await this.cancelOrder('all', symbol, params);
506
+ }
507
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
508
+ /**
509
+ * @method
510
+ * @name tradeogre#fetchOpenOrders
511
+ * @description fetch all unfilled currently open orders
512
+ * @param {string} symbol unified market symbol of the market orders were made in
513
+ * @param {int} [since] the earliest time in ms to fetch orders for
514
+ * @param {int} [limit] the maximum number of order structures to retrieve
515
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
516
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
517
+ */
518
+ await this.loadMarkets();
519
+ let market = undefined;
520
+ if (symbol !== undefined) {
521
+ market = this.market(symbol);
522
+ }
523
+ const request = {};
524
+ if (symbol !== undefined) {
525
+ request['market'] = market['id'];
526
+ }
527
+ const response = await this.privatePostAccountOrders(this.extend(request, params));
528
+ return this.parseOrders(response, market, since, limit);
529
+ }
530
+ async fetchOrder(id, symbol = undefined, params = {}) {
531
+ /**
532
+ * @method
533
+ * @name ace#fetchOrder
534
+ * @description fetches information on an order made by the user
535
+ * @see https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-status
536
+ * @param {string} symbol unified symbol of the market the order was made in
537
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
538
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
539
+ */
540
+ await this.loadMarkets();
541
+ const request = {
542
+ 'uuid': id,
543
+ };
544
+ const response = await this.privateGetAccountOrderUuid(this.extend(request, params));
545
+ return this.parseOrder(response, undefined);
546
+ }
547
+ parseOrder(order, market = undefined) {
548
+ //
549
+ //
550
+ // {
551
+ // "uuid": "a40ac710-8dc5-b5a8-aa69-389715197b14",
552
+ // "date": 1514876938,
553
+ // "type": "sell",
554
+ // "price": "0.02621960",
555
+ // "quantity": "1.55772526",
556
+ // "market": "XMR-BTC"
557
+ // }
558
+ //
559
+ const timestamp = this.safeIntegerProduct(order, 'date', 1000);
560
+ const marketId = this.safeString(order, 'market');
561
+ market = this.safeMarket(marketId, market);
562
+ return this.safeOrder({
563
+ 'info': order,
564
+ 'id': this.safeString(order, 'uuid'),
565
+ 'clientOrderId': undefined,
566
+ 'timestamp': timestamp,
567
+ 'datetime': this.iso8601(timestamp),
568
+ 'lastTradeTimestamp': undefined,
569
+ 'symbol': market['symbol'],
570
+ 'type': undefined,
571
+ 'timeInForce': undefined,
572
+ 'postOnly': undefined,
573
+ 'side': this.safeString(order, 'type'),
574
+ 'price': this.safeString(order, 'price'),
575
+ 'stopPrice': undefined,
576
+ 'amount': this.safeString(order, 'quantity'),
577
+ 'cost': undefined,
578
+ 'average': undefined,
579
+ 'filled': this.safeString(order, 'fulfilled'),
580
+ 'remaining': undefined,
581
+ 'status': undefined,
582
+ 'fee': {
583
+ 'currency': undefined,
584
+ 'cost': undefined,
585
+ },
586
+ 'trades': undefined,
587
+ }, market);
588
+ }
589
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
590
+ let url = this.urls['api']['rest'] + '/' + this.implodeParams(path, params);
591
+ params = this.omit(params, this.extractParams(path));
592
+ if (method === 'GET') {
593
+ if (Object.keys(params).length) {
594
+ url += '?' + this.urlencode(params);
595
+ }
596
+ }
597
+ if (api === 'private') {
598
+ headers = {
599
+ 'Content-Type': 'application/x-www-form-urlencoded',
600
+ 'Referer': 'CCXT',
601
+ 'authorization': 'Basic ' + this.stringToBase64(this.apiKey + ':' + this.secret),
602
+ };
603
+ if (method !== 'GET') {
604
+ body = this.urlencode(params);
605
+ }
606
+ }
607
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
608
+ }
609
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
610
+ if (response === undefined) {
611
+ return undefined;
612
+ }
613
+ if (!('success' in response)) {
614
+ return undefined;
615
+ }
616
+ //
617
+ // {"success":false,"error":"Must be authorized"}
618
+ //
619
+ const success = this.safeBool(response, 'success');
620
+ if (success) {
621
+ return undefined;
622
+ }
623
+ const successString = this.safeString(response, 'success');
624
+ if (successString === 'true') {
625
+ return undefined;
626
+ }
627
+ const error = this.safeValue(response, 'error');
628
+ const errorCode = this.safeString(error, 'code');
629
+ const feedback = this.id + ' ' + this.json(response);
630
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
631
+ throw new ExchangeError(feedback);
632
+ }
633
+ }
package/js/src/woo.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/woo.js';
2
- import type { TransferEntry, Balances, Currency, FundingRateHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Trade, Transaction, Leverage } from './base/types.js';
2
+ import type { TransferEntry, Balances, Currency, FundingRateHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Trade, Transaction, Leverage, Account } from './base/types.js';
3
3
  /**
4
4
  * @class woo
5
5
  * @augments Exchange
@@ -38,7 +38,7 @@ export default class woo extends Exchange {
38
38
  parseOHLCV(ohlcv: any, market?: Market): OHLCV;
39
39
  fetchOrderTrades(id: string, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
40
40
  fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
41
- fetchAccounts(params?: {}): Promise<any[]>;
41
+ fetchAccounts(params?: {}): Promise<Account[]>;
42
42
  parseAccount(account: any): {
43
43
  info: any;
44
44
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.2.73",
3
+ "version": "4.2.75",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.js",
6
6
  "type": "module",
@@ -10,6 +10,9 @@
10
10
  "require": "./dist/ccxt.cjs"
11
11
  }
12
12
  },
13
+ "bin": {
14
+ "ccxt": "examples/js/cli.js"
15
+ },
13
16
  "engines": {
14
17
  "node": ">=15.0.0"
15
18
  },