ccxt 4.2.18 → 4.2.19

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 (426) hide show
  1. package/README.md +8 -8
  2. package/dist/ccxt.browser.js +34202 -33193
  3. package/dist/ccxt.browser.min.js +2 -2
  4. package/dist/cjs/ccxt.js +12 -1
  5. package/dist/cjs/src/alpaca.js +18 -18
  6. package/dist/cjs/src/ascendex.js +13 -6
  7. package/dist/cjs/src/base/Exchange.js +266 -27
  8. package/dist/cjs/src/bigone.js +434 -168
  9. package/dist/cjs/src/binance.js +163 -34
  10. package/dist/cjs/src/binanceus.js +8 -0
  11. package/dist/cjs/src/bingx.js +183 -41
  12. package/dist/cjs/src/bitfinex.js +2 -3
  13. package/dist/cjs/src/bitget.js +59 -16
  14. package/dist/cjs/src/bitmart.js +5 -5
  15. package/dist/cjs/src/bitmex.js +4 -6
  16. package/dist/cjs/src/bitpanda.js +5 -1991
  17. package/dist/cjs/src/bitstamp.js +8 -0
  18. package/dist/cjs/src/bybit.js +27 -47
  19. package/dist/cjs/src/coinbase.js +176 -26
  20. package/dist/cjs/src/coincheck.js +1 -0
  21. package/dist/cjs/src/coinex.js +3 -0
  22. package/dist/cjs/src/coinlist.js +13 -6
  23. package/dist/cjs/src/coinone.js +2 -2
  24. package/dist/cjs/src/coinsph.js +4 -5
  25. package/dist/cjs/src/delta.js +7 -1
  26. package/dist/cjs/src/deribit.js +17 -4
  27. package/dist/cjs/src/gate.js +151 -169
  28. package/dist/cjs/src/gemini.js +1 -1
  29. package/dist/cjs/src/hitbtc.js +2 -3
  30. package/dist/cjs/src/htx.js +157 -7
  31. package/dist/cjs/src/huobijp.js +2 -3
  32. package/dist/cjs/src/independentreserve.js +7 -5
  33. package/dist/cjs/src/kraken.js +86 -54
  34. package/dist/cjs/src/kucoin.js +5 -0
  35. package/dist/cjs/src/kucoinfutures.js +131 -77
  36. package/dist/cjs/src/lbank.js +60 -33
  37. package/dist/cjs/src/luno.js +84 -2
  38. package/dist/cjs/src/mexc.js +3 -3
  39. package/dist/cjs/src/oceanex.js +1 -1
  40. package/dist/cjs/src/okx.js +23 -11
  41. package/dist/cjs/{js/src/bitpanda.js → src/onetrading.js} +39 -39
  42. package/dist/cjs/src/phemex.js +37 -27
  43. package/dist/cjs/src/poloniexfutures.js +1 -0
  44. package/dist/cjs/src/pro/binance.js +66 -25
  45. package/dist/cjs/src/pro/bitget.js +1 -1
  46. package/dist/cjs/src/pro/bitpanda.js +5 -1330
  47. package/dist/cjs/src/pro/coinbase.js +4 -1
  48. package/dist/cjs/src/pro/hitbtc.js +5 -4
  49. package/dist/cjs/src/pro/htx.js +6 -1
  50. package/dist/cjs/src/pro/kraken.js +1 -1
  51. package/dist/cjs/src/pro/krakenfutures.js +7 -1
  52. package/dist/cjs/src/pro/kucoin.js +46 -36
  53. package/dist/cjs/src/pro/kucoinfutures.js +45 -37
  54. package/dist/cjs/src/pro/lbank.js +881 -0
  55. package/dist/cjs/src/pro/okx.js +52 -2
  56. package/dist/cjs/{js/src/pro/bitpanda.js → src/pro/onetrading.js} +4 -7
  57. package/dist/cjs/src/pro/poloniex.js +2 -2
  58. package/dist/cjs/src/pro/poloniexfutures.js +43 -35
  59. package/dist/cjs/src/pro/woo.js +126 -0
  60. package/dist/cjs/src/probit.js +4 -2
  61. package/dist/cjs/src/upbit.js +12 -12
  62. package/dist/cjs/src/wavesexchange.js +1 -1
  63. package/dist/cjs/src/whitebit.js +1 -0
  64. package/dist/cjs/src/woo.js +56 -0
  65. package/js/ccxt.d.ts +11 -2
  66. package/js/ccxt.js +8 -2
  67. package/js/src/abstract/bitpanda.d.ts +4 -4
  68. package/js/src/abstract/bitstamp.d.ts +8 -0
  69. package/js/src/abstract/gate.d.ts +1 -0
  70. package/js/src/abstract/gateio.d.ts +1 -0
  71. package/js/src/abstract/htx.d.ts +3 -0
  72. package/js/src/abstract/huobi.d.ts +3 -0
  73. package/js/src/abstract/luno.d.ts +1 -0
  74. package/js/src/abstract/onetrading.d.ts +38 -0
  75. package/js/src/ascendex.js +2 -0
  76. package/js/src/bingx.js +1 -1
  77. package/js/src/bitget.js +22 -3
  78. package/js/src/bitpanda.d.ts +2 -72
  79. package/js/src/bitpanda.js +5 -1991
  80. package/js/src/bitstamp.js +8 -0
  81. package/js/src/deribit.js +11 -3
  82. package/js/src/gate.d.ts +1 -0
  83. package/js/src/gate.js +50 -110
  84. package/js/src/htx.js +3 -0
  85. package/js/src/kraken.d.ts +1 -0
  86. package/js/src/kraken.js +39 -38
  87. package/js/src/lbank.js +1 -0
  88. package/js/src/luno.d.ts +3 -1
  89. package/js/src/luno.js +84 -2
  90. package/js/src/mexc.js +1 -2
  91. package/js/src/onetrading.d.ts +74 -0
  92. package/js/src/onetrading.js +2003 -0
  93. package/js/src/poloniexfutures.js +1 -0
  94. package/js/src/pro/binance.js +6 -1
  95. package/js/src/pro/bitpanda.d.ts +2 -34
  96. package/js/src/pro/bitpanda.js +5 -1330
  97. package/js/src/pro/lbank.d.ts +29 -0
  98. package/js/src/pro/lbank.js +882 -0
  99. package/js/src/pro/onetrading.d.ts +36 -0
  100. package/js/src/pro/onetrading.js +1339 -0
  101. package/package.json +2 -2
  102. package/rollup.config.js +2 -0
  103. package/skip-tests.json +2 -1
  104. package/test-commonjs.cjs +25 -1
  105. package/dist/cjs/js/ccxt.js +0 -478
  106. package/dist/cjs/js/src/abstract/alpaca.js +0 -9
  107. package/dist/cjs/js/src/abstract/ascendex.js +0 -9
  108. package/dist/cjs/js/src/abstract/bigone.js +0 -9
  109. package/dist/cjs/js/src/abstract/binance.js +0 -9
  110. package/dist/cjs/js/src/abstract/bingx.js +0 -9
  111. package/dist/cjs/js/src/abstract/bit2c.js +0 -9
  112. package/dist/cjs/js/src/abstract/bitbank.js +0 -9
  113. package/dist/cjs/js/src/abstract/bitbns.js +0 -9
  114. package/dist/cjs/js/src/abstract/bitfinex.js +0 -9
  115. package/dist/cjs/js/src/abstract/bitfinex2.js +0 -9
  116. package/dist/cjs/js/src/abstract/bitflyer.js +0 -9
  117. package/dist/cjs/js/src/abstract/bitforex.js +0 -9
  118. package/dist/cjs/js/src/abstract/bitget.js +0 -9
  119. package/dist/cjs/js/src/abstract/bithumb.js +0 -9
  120. package/dist/cjs/js/src/abstract/bitmart.js +0 -9
  121. package/dist/cjs/js/src/abstract/bitmex.js +0 -9
  122. package/dist/cjs/js/src/abstract/bitopro.js +0 -9
  123. package/dist/cjs/js/src/abstract/bitpanda.js +0 -9
  124. package/dist/cjs/js/src/abstract/bitrue.js +0 -9
  125. package/dist/cjs/js/src/abstract/bitso.js +0 -9
  126. package/dist/cjs/js/src/abstract/bitstamp.js +0 -9
  127. package/dist/cjs/js/src/abstract/bitteam.js +0 -9
  128. package/dist/cjs/js/src/abstract/bitvavo.js +0 -9
  129. package/dist/cjs/js/src/abstract/bl3p.js +0 -9
  130. package/dist/cjs/js/src/abstract/blockchaincom.js +0 -9
  131. package/dist/cjs/js/src/abstract/btcalpha.js +0 -9
  132. package/dist/cjs/js/src/abstract/btcbox.js +0 -9
  133. package/dist/cjs/js/src/abstract/btcmarkets.js +0 -9
  134. package/dist/cjs/js/src/abstract/btcturk.js +0 -9
  135. package/dist/cjs/js/src/abstract/bybit.js +0 -9
  136. package/dist/cjs/js/src/abstract/cex.js +0 -9
  137. package/dist/cjs/js/src/abstract/coinbase.js +0 -9
  138. package/dist/cjs/js/src/abstract/coinbasepro.js +0 -9
  139. package/dist/cjs/js/src/abstract/coincheck.js +0 -9
  140. package/dist/cjs/js/src/abstract/coinex.js +0 -9
  141. package/dist/cjs/js/src/abstract/coinlist.js +0 -9
  142. package/dist/cjs/js/src/abstract/coinmate.js +0 -9
  143. package/dist/cjs/js/src/abstract/coinone.js +0 -9
  144. package/dist/cjs/js/src/abstract/coinsph.js +0 -9
  145. package/dist/cjs/js/src/abstract/coinspot.js +0 -9
  146. package/dist/cjs/js/src/abstract/cryptocom.js +0 -9
  147. package/dist/cjs/js/src/abstract/currencycom.js +0 -9
  148. package/dist/cjs/js/src/abstract/delta.js +0 -9
  149. package/dist/cjs/js/src/abstract/deribit.js +0 -9
  150. package/dist/cjs/js/src/abstract/digifinex.js +0 -9
  151. package/dist/cjs/js/src/abstract/exmo.js +0 -9
  152. package/dist/cjs/js/src/abstract/gate.js +0 -9
  153. package/dist/cjs/js/src/abstract/gemini.js +0 -9
  154. package/dist/cjs/js/src/abstract/hitbtc.js +0 -9
  155. package/dist/cjs/js/src/abstract/hollaex.js +0 -9
  156. package/dist/cjs/js/src/abstract/htx.js +0 -9
  157. package/dist/cjs/js/src/abstract/huobijp.js +0 -9
  158. package/dist/cjs/js/src/abstract/idex.js +0 -9
  159. package/dist/cjs/js/src/abstract/independentreserve.js +0 -9
  160. package/dist/cjs/js/src/abstract/indodax.js +0 -9
  161. package/dist/cjs/js/src/abstract/kraken.js +0 -9
  162. package/dist/cjs/js/src/abstract/krakenfutures.js +0 -9
  163. package/dist/cjs/js/src/abstract/kucoin.js +0 -9
  164. package/dist/cjs/js/src/abstract/kucoinfutures.js +0 -9
  165. package/dist/cjs/js/src/abstract/kuna.js +0 -9
  166. package/dist/cjs/js/src/abstract/latoken.js +0 -9
  167. package/dist/cjs/js/src/abstract/lbank.js +0 -9
  168. package/dist/cjs/js/src/abstract/luno.js +0 -9
  169. package/dist/cjs/js/src/abstract/lykke.js +0 -9
  170. package/dist/cjs/js/src/abstract/mercado.js +0 -9
  171. package/dist/cjs/js/src/abstract/mexc.js +0 -9
  172. package/dist/cjs/js/src/abstract/ndax.js +0 -9
  173. package/dist/cjs/js/src/abstract/novadax.js +0 -9
  174. package/dist/cjs/js/src/abstract/oceanex.js +0 -9
  175. package/dist/cjs/js/src/abstract/okcoin.js +0 -9
  176. package/dist/cjs/js/src/abstract/okx.js +0 -9
  177. package/dist/cjs/js/src/abstract/p2b.js +0 -9
  178. package/dist/cjs/js/src/abstract/paymium.js +0 -9
  179. package/dist/cjs/js/src/abstract/phemex.js +0 -9
  180. package/dist/cjs/js/src/abstract/poloniex.js +0 -9
  181. package/dist/cjs/js/src/abstract/poloniexfutures.js +0 -9
  182. package/dist/cjs/js/src/abstract/probit.js +0 -9
  183. package/dist/cjs/js/src/abstract/timex.js +0 -9
  184. package/dist/cjs/js/src/abstract/tokocrypto.js +0 -9
  185. package/dist/cjs/js/src/abstract/upbit.js +0 -9
  186. package/dist/cjs/js/src/abstract/wavesexchange.js +0 -9
  187. package/dist/cjs/js/src/abstract/wazirx.js +0 -9
  188. package/dist/cjs/js/src/abstract/whitebit.js +0 -9
  189. package/dist/cjs/js/src/abstract/woo.js +0 -9
  190. package/dist/cjs/js/src/abstract/yobit.js +0 -9
  191. package/dist/cjs/js/src/abstract/zaif.js +0 -9
  192. package/dist/cjs/js/src/abstract/zonda.js +0 -9
  193. package/dist/cjs/js/src/ace.js +0 -1058
  194. package/dist/cjs/js/src/alpaca.js +0 -1125
  195. package/dist/cjs/js/src/ascendex.js +0 -3365
  196. package/dist/cjs/js/src/base/Exchange.js +0 -5260
  197. package/dist/cjs/js/src/base/Precise.js +0 -263
  198. package/dist/cjs/js/src/base/errors.js +0 -299
  199. package/dist/cjs/js/src/base/functions/crypto.js +0 -78
  200. package/dist/cjs/js/src/base/functions/encode.js +0 -44
  201. package/dist/cjs/js/src/base/functions/generic.js +0 -193
  202. package/dist/cjs/js/src/base/functions/misc.js +0 -96
  203. package/dist/cjs/js/src/base/functions/number.js +0 -297
  204. package/dist/cjs/js/src/base/functions/platform.js +0 -28
  205. package/dist/cjs/js/src/base/functions/rsa.js +0 -34
  206. package/dist/cjs/js/src/base/functions/string.js +0 -48
  207. package/dist/cjs/js/src/base/functions/throttle.js +0 -66
  208. package/dist/cjs/js/src/base/functions/time.js +0 -187
  209. package/dist/cjs/js/src/base/functions/totp.js +0 -24
  210. package/dist/cjs/js/src/base/functions/type.js +0 -162
  211. package/dist/cjs/js/src/base/functions.js +0 -157
  212. package/dist/cjs/js/src/base/ws/Cache.js +0 -254
  213. package/dist/cjs/js/src/base/ws/Client.js +0 -299
  214. package/dist/cjs/js/src/base/ws/Future.js +0 -34
  215. package/dist/cjs/js/src/base/ws/OrderBook.js +0 -107
  216. package/dist/cjs/js/src/base/ws/OrderBookSide.js +0 -281
  217. package/dist/cjs/js/src/base/ws/WsClient.js +0 -69
  218. package/dist/cjs/js/src/bequant.js +0 -33
  219. package/dist/cjs/js/src/bigone.js +0 -2213
  220. package/dist/cjs/js/src/binance.js +0 -9851
  221. package/dist/cjs/js/src/binancecoinm.js +0 -45
  222. package/dist/cjs/js/src/binanceus.js +0 -92
  223. package/dist/cjs/js/src/binanceusdm.js +0 -58
  224. package/dist/cjs/js/src/bingx.js +0 -3872
  225. package/dist/cjs/js/src/bit2c.js +0 -916
  226. package/dist/cjs/js/src/bitbank.js +0 -1000
  227. package/dist/cjs/js/src/bitbay.js +0 -17
  228. package/dist/cjs/js/src/bitbns.js +0 -1220
  229. package/dist/cjs/js/src/bitcoincom.js +0 -17
  230. package/dist/cjs/js/src/bitfinex.js +0 -1670
  231. package/dist/cjs/js/src/bitfinex2.js +0 -2990
  232. package/dist/cjs/js/src/bitflyer.js +0 -1045
  233. package/dist/cjs/js/src/bitforex.js +0 -852
  234. package/dist/cjs/js/src/bitget.js +0 -8295
  235. package/dist/cjs/js/src/bithumb.js +0 -1090
  236. package/dist/cjs/js/src/bitmart.js +0 -4454
  237. package/dist/cjs/js/src/bitmex.js +0 -2881
  238. package/dist/cjs/js/src/bitopro.js +0 -1724
  239. package/dist/cjs/js/src/bitrue.js +0 -3253
  240. package/dist/cjs/js/src/bitso.js +0 -1753
  241. package/dist/cjs/js/src/bitstamp.js +0 -2188
  242. package/dist/cjs/js/src/bitteam.js +0 -2309
  243. package/dist/cjs/js/src/bitvavo.js +0 -1968
  244. package/dist/cjs/js/src/bl3p.js +0 -447
  245. package/dist/cjs/js/src/blockchaincom.js +0 -1160
  246. package/dist/cjs/js/src/btcalpha.js +0 -929
  247. package/dist/cjs/js/src/btcbox.js +0 -565
  248. package/dist/cjs/js/src/btcmarkets.js +0 -1237
  249. package/dist/cjs/js/src/btcturk.js +0 -929
  250. package/dist/cjs/js/src/bybit.js +0 -7624
  251. package/dist/cjs/js/src/cex.js +0 -1693
  252. package/dist/cjs/js/src/coinbase.js +0 -3424
  253. package/dist/cjs/js/src/coinbasepro.js +0 -1866
  254. package/dist/cjs/js/src/coincheck.js +0 -844
  255. package/dist/cjs/js/src/coinex.js +0 -5417
  256. package/dist/cjs/js/src/coinlist.js +0 -2337
  257. package/dist/cjs/js/src/coinmate.js +0 -989
  258. package/dist/cjs/js/src/coinone.js +0 -1185
  259. package/dist/cjs/js/src/coinsph.js +0 -1933
  260. package/dist/cjs/js/src/coinspot.js +0 -548
  261. package/dist/cjs/js/src/cryptocom.js +0 -3007
  262. package/dist/cjs/js/src/currencycom.js +0 -2015
  263. package/dist/cjs/js/src/delta.js +0 -3262
  264. package/dist/cjs/js/src/deribit.js +0 -3310
  265. package/dist/cjs/js/src/digifinex.js +0 -4307
  266. package/dist/cjs/js/src/exmo.js +0 -2645
  267. package/dist/cjs/js/src/fmfwio.js +0 -34
  268. package/dist/cjs/js/src/gate.js +0 -7077
  269. package/dist/cjs/js/src/gateio.js +0 -16
  270. package/dist/cjs/js/src/gemini.js +0 -1801
  271. package/dist/cjs/js/src/hitbtc.js +0 -3660
  272. package/dist/cjs/js/src/hitbtc3.js +0 -19
  273. package/dist/cjs/js/src/hollaex.js +0 -1882
  274. package/dist/cjs/js/src/htx.js +0 -9174
  275. package/dist/cjs/js/src/huobi.js +0 -16
  276. package/dist/cjs/js/src/huobijp.js +0 -1918
  277. package/dist/cjs/js/src/idex.js +0 -1770
  278. package/dist/cjs/js/src/independentreserve.js +0 -761
  279. package/dist/cjs/js/src/indodax.js +0 -1069
  280. package/dist/cjs/js/src/kraken.js +0 -2891
  281. package/dist/cjs/js/src/krakenfutures.js +0 -2407
  282. package/dist/cjs/js/src/kucoin.js +0 -4494
  283. package/dist/cjs/js/src/kucoinfutures.js +0 -2529
  284. package/dist/cjs/js/src/kuna.js +0 -1949
  285. package/dist/cjs/js/src/latoken.js +0 -1729
  286. package/dist/cjs/js/src/lbank.js +0 -2851
  287. package/dist/cjs/js/src/luno.js +0 -1044
  288. package/dist/cjs/js/src/lykke.js +0 -1303
  289. package/dist/cjs/js/src/mercado.js +0 -897
  290. package/dist/cjs/js/src/mexc.js +0 -5407
  291. package/dist/cjs/js/src/ndax.js +0 -2450
  292. package/dist/cjs/js/src/novadax.js +0 -1556
  293. package/dist/cjs/js/src/oceanex.js +0 -964
  294. package/dist/cjs/js/src/okcoin.js +0 -3115
  295. package/dist/cjs/js/src/okx.js +0 -7331
  296. package/dist/cjs/js/src/p2b.js +0 -1243
  297. package/dist/cjs/js/src/paymium.js +0 -597
  298. package/dist/cjs/js/src/phemex.js +0 -4725
  299. package/dist/cjs/js/src/poloniex.js +0 -2356
  300. package/dist/cjs/js/src/poloniexfutures.js +0 -1794
  301. package/dist/cjs/js/src/pro/alpaca.js +0 -714
  302. package/dist/cjs/js/src/pro/ascendex.js +0 -957
  303. package/dist/cjs/js/src/pro/bequant.js +0 -33
  304. package/dist/cjs/js/src/pro/binance.js +0 -2796
  305. package/dist/cjs/js/src/pro/binancecoinm.js +0 -23
  306. package/dist/cjs/js/src/pro/binanceus.js +0 -51
  307. package/dist/cjs/js/src/pro/binanceusdm.js +0 -32
  308. package/dist/cjs/js/src/pro/bingx.js +0 -944
  309. package/dist/cjs/js/src/pro/bitcoincom.js +0 -29
  310. package/dist/cjs/js/src/pro/bitfinex.js +0 -672
  311. package/dist/cjs/js/src/pro/bitfinex2.js +0 -1159
  312. package/dist/cjs/js/src/pro/bitget.js +0 -1733
  313. package/dist/cjs/js/src/pro/bitmart.js +0 -1486
  314. package/dist/cjs/js/src/pro/bitmex.js +0 -1576
  315. package/dist/cjs/js/src/pro/bitopro.js +0 -327
  316. package/dist/cjs/js/src/pro/bitrue.js +0 -462
  317. package/dist/cjs/js/src/pro/bitstamp.js +0 -547
  318. package/dist/cjs/js/src/pro/bitvavo.js +0 -704
  319. package/dist/cjs/js/src/pro/blockchaincom.js +0 -794
  320. package/dist/cjs/js/src/pro/bybit.js +0 -1843
  321. package/dist/cjs/js/src/pro/cex.js +0 -1510
  322. package/dist/cjs/js/src/pro/coinbase.js +0 -561
  323. package/dist/cjs/js/src/pro/coinbasepro.js +0 -968
  324. package/dist/cjs/js/src/pro/coinex.js +0 -1095
  325. package/dist/cjs/js/src/pro/cryptocom.js +0 -1020
  326. package/dist/cjs/js/src/pro/currencycom.js +0 -563
  327. package/dist/cjs/js/src/pro/deribit.js +0 -825
  328. package/dist/cjs/js/src/pro/exmo.js +0 -658
  329. package/dist/cjs/js/src/pro/gate.js +0 -1316
  330. package/dist/cjs/js/src/pro/gateio.js +0 -16
  331. package/dist/cjs/js/src/pro/gemini.js +0 -649
  332. package/dist/cjs/js/src/pro/hitbtc.js +0 -1294
  333. package/dist/cjs/js/src/pro/hollaex.js +0 -597
  334. package/dist/cjs/js/src/pro/htx.js +0 -2388
  335. package/dist/cjs/js/src/pro/huobi.js +0 -16
  336. package/dist/cjs/js/src/pro/huobijp.js +0 -606
  337. package/dist/cjs/js/src/pro/idex.js +0 -714
  338. package/dist/cjs/js/src/pro/independentreserve.js +0 -280
  339. package/dist/cjs/js/src/pro/kraken.js +0 -1364
  340. package/dist/cjs/js/src/pro/krakenfutures.js +0 -1506
  341. package/dist/cjs/js/src/pro/kucoin.js +0 -1062
  342. package/dist/cjs/js/src/pro/kucoinfutures.js +0 -989
  343. package/dist/cjs/js/src/pro/luno.js +0 -322
  344. package/dist/cjs/js/src/pro/mexc.js +0 -1170
  345. package/dist/cjs/js/src/pro/ndax.js +0 -545
  346. package/dist/cjs/js/src/pro/okcoin.js +0 -760
  347. package/dist/cjs/js/src/pro/okx.js +0 -1608
  348. package/dist/cjs/js/src/pro/phemex.js +0 -1511
  349. package/dist/cjs/js/src/pro/poloniex.js +0 -1253
  350. package/dist/cjs/js/src/pro/poloniexfutures.js +0 -1022
  351. package/dist/cjs/js/src/pro/probit.js +0 -586
  352. package/dist/cjs/js/src/pro/upbit.js +0 -234
  353. package/dist/cjs/js/src/pro/wazirx.js +0 -776
  354. package/dist/cjs/js/src/pro/whitebit.js +0 -927
  355. package/dist/cjs/js/src/pro/woo.js +0 -895
  356. package/dist/cjs/js/src/probit.js +0 -1867
  357. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +0 -401
  358. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -195
  359. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -308
  360. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -554
  361. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -94
  362. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -70
  363. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -91
  364. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -16
  365. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -1760
  366. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -52
  367. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -81
  368. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -376
  369. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -70
  370. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -1580
  371. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -74
  372. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -24
  373. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -158
  374. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -429
  375. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -176
  376. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -324
  377. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -163
  378. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -245
  379. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -1018
  380. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +0 -383
  381. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +0 -258
  382. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +0 -53
  383. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +0 -120
  384. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +0 -69
  385. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +0 -7
  386. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +0 -83
  387. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +0 -240
  388. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +0 -91
  389. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +0 -130
  390. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +0 -214
  391. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +0 -239
  392. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +0 -93
  393. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +0 -354
  394. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -16
  395. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +0 -20
  396. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -30
  397. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +0 -239
  398. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +0 -372
  399. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +0 -273
  400. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +0 -139
  401. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -14
  402. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -16
  403. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +0 -81
  404. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -292
  405. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +0 -103
  406. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -140
  407. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -175
  408. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -95
  409. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +0 -7
  410. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +0 -383
  411. package/dist/cjs/js/src/timex.js +0 -1562
  412. package/dist/cjs/js/src/tokocrypto.js +0 -2542
  413. package/dist/cjs/js/src/upbit.js +0 -1844
  414. package/dist/cjs/js/src/wavesexchange.js +0 -2607
  415. package/dist/cjs/js/src/wazirx.js +0 -953
  416. package/dist/cjs/js/src/whitebit.js +0 -2310
  417. package/dist/cjs/js/src/woo.js +0 -2769
  418. package/dist/cjs/js/src/yobit.js +0 -1314
  419. package/dist/cjs/js/src/zaif.js +0 -736
  420. package/dist/cjs/js/src/zonda.js +0 -1883
  421. package/dist/cjs/src/abstract/bitpanda.js +0 -9
  422. package/test.ts +0 -0
  423. /package/dist/cjs/{js/src/abstract/ace.js → src/abstract/onetrading.js} +0 -0
  424. /package/dist/cjs/{js/src → src}/pro/coincheck.js +0 -0
  425. /package/dist/cjs/{js/src → src}/pro/coinone.js +0 -0
  426. /package/js/src/abstract/{bitpanda.js → onetrading.js} +0 -0
@@ -1,1294 +0,0 @@
1
- 'use strict';
2
-
3
- var hitbtc$1 = require('../hitbtc.js');
4
- var Cache = require('../base/ws/Cache.js');
5
- var sha256 = require('../static_dependencies/noble-hashes/sha256.js');
6
- var errors = require('../base/errors.js');
7
-
8
- // ---------------------------------------------------------------------------
9
- // ---------------------------------------------------------------------------
10
- class hitbtc extends hitbtc$1 {
11
- describe() {
12
- return this.deepExtend(super.describe(), {
13
- 'has': {
14
- 'ws': true,
15
- 'watchTicker': true,
16
- 'watchTickers': true,
17
- 'watchTrades': true,
18
- 'watchOrderBook': true,
19
- 'watchBalance': true,
20
- 'watchOrders': true,
21
- 'watchOHLCV': true,
22
- 'watchMyTrades': false,
23
- 'createOrderWs': true,
24
- 'cancelOrderWs': true,
25
- 'fetchOpenOrdersWs': true,
26
- 'cancelAllOrdersWs': true,
27
- },
28
- 'urls': {
29
- 'api': {
30
- 'ws': {
31
- 'public': 'wss://api.hitbtc.com/api/3/ws/public',
32
- 'private': 'wss://api.hitbtc.com/api/3/ws/trading',
33
- },
34
- },
35
- },
36
- 'options': {
37
- 'tradesLimit': 1000,
38
- 'watchTicker': {
39
- 'method': 'ticker/{speed}', // 'ticker/{speed}' or 'ticker/price/{speed}'
40
- },
41
- 'watchTickers': {
42
- 'method': 'ticker/{speed}', // 'ticker/{speed}','ticker/price/{speed}', 'ticker/{speed}/batch', or 'ticker/{speed}/price/batch''
43
- },
44
- 'watchOrderBook': {
45
- 'method': 'orderbook/full', // 'orderbook/full', 'orderbook/{depth}/{speed}', 'orderbook/{depth}/{speed}/batch', 'orderbook/top/{speed}', or 'orderbook/top/{speed}/batch'
46
- },
47
- },
48
- 'timeframes': {
49
- '1m': 'M1',
50
- '3m': 'M3',
51
- '5m': 'M5',
52
- '15m': 'M15',
53
- '30m': 'M30',
54
- '1h': 'H1',
55
- '4h': 'H4',
56
- '1d': 'D1',
57
- '1w': 'D7',
58
- '1M': '1M',
59
- },
60
- 'streaming': {
61
- 'keepAlive': 4000,
62
- },
63
- });
64
- }
65
- async authenticate() {
66
- /**
67
- * @ignore
68
- * @method
69
- * @description authenticates the user to access private web socket channels
70
- * @see https://api.hitbtc.com/#socket-authentication
71
- * @returns {object} response from exchange
72
- */
73
- this.checkRequiredCredentials();
74
- const url = this.urls['api']['ws']['private'];
75
- const messageHash = 'authenticated';
76
- const client = this.client(url);
77
- const future = client.future(messageHash);
78
- const authenticated = this.safeValue(client.subscriptions, messageHash);
79
- if (authenticated === undefined) {
80
- const timestamp = this.milliseconds();
81
- const signature = this.hmac(this.encode(this.numberToString(timestamp)), this.encode(this.secret), sha256.sha256, 'hex');
82
- const request = {
83
- 'method': 'login',
84
- 'params': {
85
- 'type': 'HS256',
86
- 'api_key': this.apiKey,
87
- 'timestamp': timestamp,
88
- 'signature': signature,
89
- },
90
- };
91
- this.watch(url, messageHash, request, messageHash);
92
- //
93
- // {
94
- // "jsonrpc": "2.0",
95
- // "result": true
96
- // }
97
- //
98
- // # Failure to return results
99
- //
100
- // {
101
- // "jsonrpc": "2.0",
102
- // "error": {
103
- // "code": 1002,
104
- // "message": "Authorization is required or has been failed",
105
- // "description": "invalid signature format"
106
- // }
107
- // }
108
- //
109
- }
110
- return future;
111
- }
112
- async subscribePublic(name, symbols = undefined, params = {}) {
113
- /**
114
- * @ignore
115
- * @method
116
- * @param {string} name websocket endpoint name
117
- * @param {string[]} [symbols] unified CCXT symbol(s)
118
- * @param {object} [params] extra parameters specific to the hitbtc api
119
- */
120
- await this.loadMarkets();
121
- const url = this.urls['api']['ws']['public'];
122
- let messageHash = name;
123
- if (symbols !== undefined) {
124
- messageHash = messageHash + '::' + symbols.join(',');
125
- }
126
- const subscribe = {
127
- 'method': 'subscribe',
128
- 'id': this.nonce(),
129
- 'ch': name,
130
- };
131
- const request = this.extend(subscribe, params);
132
- return await this.watch(url, messageHash, request, messageHash);
133
- }
134
- async subscribePrivate(name, symbol = undefined, params = {}) {
135
- /**
136
- * @ignore
137
- * @method
138
- * @param {string} name websocket endpoint name
139
- * @param {string} [symbol] unified CCXT symbol
140
- * @param {object} [params] extra parameters specific to the hitbtc api
141
- */
142
- await this.loadMarkets();
143
- await this.authenticate();
144
- const url = this.urls['api']['ws']['private'];
145
- const splitName = name.split('_subscribe');
146
- let messageHash = this.safeString(splitName, 0);
147
- if (symbol !== undefined) {
148
- messageHash = messageHash + '::' + symbol;
149
- }
150
- const subscribe = {
151
- 'method': name,
152
- 'params': params,
153
- 'id': this.nonce(),
154
- };
155
- return await this.watch(url, messageHash, subscribe, messageHash);
156
- }
157
- async tradeRequest(name, params = {}) {
158
- /**
159
- * @ignore
160
- * @method
161
- * @param {string} name websocket endpoint name
162
- * @param {string} [symbol] unified CCXT symbol
163
- * @param {object} [params] extra parameters specific to the hitbtc api
164
- */
165
- await this.loadMarkets();
166
- await this.authenticate();
167
- const url = this.urls['api']['ws']['private'];
168
- const messageHash = this.nonce();
169
- const subscribe = {
170
- 'method': name,
171
- 'params': params,
172
- 'id': messageHash,
173
- };
174
- return await this.watch(url, messageHash, subscribe, messageHash);
175
- }
176
- async watchOrderBook(symbol, limit = undefined, params = {}) {
177
- /**
178
- * @method
179
- * @name hitbtc#watchOrderBook
180
- * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
181
- * @see https://api.hitbtc.com/#subscribe-to-full-order-book
182
- * @see https://api.hitbtc.com/#subscribe-to-partial-order-book
183
- * @see https://api.hitbtc.com/#subscribe-to-partial-order-book-in-batches
184
- * @see https://api.hitbtc.com/#subscribe-to-top-of-book
185
- * @see https://api.hitbtc.com/#subscribe-to-top-of-book-in-batches
186
- * @param {string} symbol unified symbol of the market to fetch the order book for
187
- * @param {int} [limit] the maximum amount of order book entries to return
188
- * @param {object} [params] extra parameters specific to the exchange API endpoint
189
- * @param {string} [params.method] 'orderbook/full', 'orderbook/{depth}/{speed}', 'orderbook/{depth}/{speed}/batch', 'orderbook/top/{speed}', or 'orderbook/top/{speed}/batch'
190
- * @param {int} [params.depth] 5 , 10, or 20 (default)
191
- * @param {int} [params.speed] 100 (default), 500, or 1000
192
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
193
- */
194
- const options = this.safeValue(this.options, 'watchOrderBook');
195
- const defaultMethod = this.safeString(options, 'method', 'orderbook/full');
196
- let name = this.safeString2(params, 'method', 'defaultMethod', defaultMethod);
197
- const depth = this.safeString(params, 'depth', '20');
198
- const speed = this.safeString(params, 'depth', '100');
199
- if (name === 'orderbook/{depth}/{speed}') {
200
- name = 'orderbook/D' + depth + '/' + speed + 'ms';
201
- }
202
- else if (name === 'orderbook/{depth}/{speed}/batch') {
203
- name = 'orderbook/D' + depth + '/' + speed + 'ms/batch';
204
- }
205
- else if (name === 'orderbook/top/{speed}') {
206
- name = 'orderbook/top/' + speed + 'ms';
207
- }
208
- else if (name === 'orderbook/top/{speed}/batch') {
209
- name = 'orderbook/top/' + speed + 'ms/batch';
210
- }
211
- const market = this.market(symbol);
212
- const request = {
213
- 'params': {
214
- 'symbols': [market['id']],
215
- },
216
- };
217
- const orderbook = await this.subscribePublic(name, [symbol], this.deepExtend(request, params));
218
- return orderbook.limit();
219
- }
220
- handleOrderBook(client, message) {
221
- //
222
- // {
223
- // "ch": "orderbook/full", // Channel
224
- // "snapshot": {
225
- // "ETHBTC": {
226
- // "t": 1626866578796, // Timestamp in milliseconds
227
- // "s": 27617207, // Sequence number
228
- // "a": [ // Asks
229
- // ["0.060506", "0"],
230
- // ["0.060549", "12.6431"],
231
- // ["0.060570", "0"],
232
- // ["0.060612", "0"]
233
- // ],
234
- // "b": [ // Bids
235
- // ["0.060439", "4.4095"],
236
- // ["0.060414", "0"],
237
- // ["0.060407", "7.3349"],
238
- // ["0.060390", "0"]
239
- // ]
240
- // }
241
- // }
242
- // }
243
- //
244
- const data = this.safeValue2(message, 'snapshot', 'update', {});
245
- const marketIds = Object.keys(data);
246
- const channel = this.safeString(message, 'ch');
247
- for (let i = 0; i < marketIds.length; i++) {
248
- const marketId = marketIds[i];
249
- const market = this.safeMarket(marketId);
250
- const symbol = market['symbol'];
251
- const item = data[marketId];
252
- const messageHash = channel + '::' + symbol;
253
- if (!(symbol in this.orderbooks)) {
254
- const subscription = this.safeValue(client.subscriptions, messageHash, {});
255
- const limit = this.safeInteger(subscription, 'limit');
256
- this.orderbooks[symbol] = this.orderBook({}, limit);
257
- }
258
- const timestamp = this.safeInteger(item, 't');
259
- const nonce = this.safeInteger(item, 's');
260
- const orderbook = this.orderbooks[symbol];
261
- const asks = this.safeValue(item, 'a', []);
262
- const bids = this.safeValue(item, 'b', []);
263
- this.handleDeltas(orderbook['asks'], asks);
264
- this.handleDeltas(orderbook['bids'], bids);
265
- orderbook['timestamp'] = timestamp;
266
- orderbook['datetime'] = this.iso8601(timestamp);
267
- orderbook['nonce'] = nonce;
268
- orderbook['symbol'] = symbol;
269
- this.orderbooks[symbol] = orderbook;
270
- client.resolve(orderbook, messageHash);
271
- }
272
- }
273
- handleDelta(bookside, delta) {
274
- const price = this.safeNumber(delta, 0);
275
- const amount = this.safeNumber(delta, 1);
276
- bookside.store(price, amount);
277
- }
278
- handleDeltas(bookside, deltas) {
279
- for (let i = 0; i < deltas.length; i++) {
280
- this.handleDelta(bookside, deltas[i]);
281
- }
282
- }
283
- async watchTicker(symbol, params = {}) {
284
- /**
285
- * @method
286
- * @name hitbtc#watchTicker
287
- * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
288
- * @see https://api.hitbtc.com/#subscribe-to-ticker
289
- * @see https://api.hitbtc.com/#subscribe-to-ticker-in-batches
290
- * @see https://api.hitbtc.com/#subscribe-to-mini-ticker
291
- * @see https://api.hitbtc.com/#subscribe-to-mini-ticker-in-batches
292
- * @param {string} symbol unified symbol of the market to fetch the ticker for
293
- * @param {object} [params] extra parameters specific to the exchange API endpoint
294
- * @param {string} [params.method] 'ticker/{speed}' (default), or 'ticker/price/{speed}'
295
- * @param {string} [params.speed] '1s' (default), or '3s'
296
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
297
- */
298
- const options = this.safeValue(this.options, 'watchTicker');
299
- const defaultMethod = this.safeString(options, 'method', 'ticker/{speed}');
300
- const method = this.safeString2(params, 'method', 'defaultMethod', defaultMethod);
301
- const speed = this.safeString(params, 'speed', '1s');
302
- const name = this.implodeParams(method, { 'speed': speed });
303
- params = this.omit(params, ['method', 'speed']);
304
- const market = this.market(symbol);
305
- const request = {
306
- 'params': {
307
- 'symbols': [market['id']],
308
- },
309
- };
310
- const result = await this.subscribePublic(name, [symbol], this.deepExtend(request, params));
311
- return this.safeValue(result, symbol);
312
- }
313
- async watchTickers(symbols = undefined, params = {}) {
314
- /**
315
- * @method
316
- * @name hitbtc#watchTicker
317
- * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
318
- * @param {string} symbol unified symbol of the market to fetch the ticker for
319
- * @param {object} params extra parameters specific to the exchange API endpoint
320
- * @param {string} params.method 'ticker/{speed}' (default),'ticker/price/{speed}', 'ticker/{speed}/batch', or 'ticker/{speed}/price/batch''
321
- * @param {string} params.speed '1s' (default), or '3s'
322
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/en/latest/manual.html#ticker-structure}
323
- */
324
- await this.loadMarkets();
325
- const options = this.safeValue(this.options, 'watchTicker');
326
- const defaultMethod = this.safeString(options, 'method', 'ticker/{speed}');
327
- const method = this.safeString2(params, 'method', 'defaultMethod', defaultMethod);
328
- const speed = this.safeString(params, 'speed', '1s');
329
- const name = this.implodeParams(method, { 'speed': speed });
330
- params = this.omit(params, ['method', 'speed']);
331
- const marketIds = [];
332
- if (symbols === undefined) {
333
- marketIds.push('*');
334
- }
335
- else {
336
- for (let i = 0; i < symbols.length; i++) {
337
- const marketId = this.marketId(symbols[i]);
338
- marketIds.push(marketId);
339
- }
340
- }
341
- const request = {
342
- 'params': {
343
- 'symbols': marketIds,
344
- },
345
- };
346
- const tickers = await this.subscribePublic(name, symbols, this.deepExtend(request, params));
347
- if (this.newUpdates) {
348
- return tickers;
349
- }
350
- return this.filterByArray(this.tickers, 'symbol', symbols);
351
- }
352
- handleTicker(client, message) {
353
- //
354
- // {
355
- // "ch": "ticker/1s",
356
- // "data": {
357
- // "ETHBTC": {
358
- // "t": 1614815872000, // Timestamp in milliseconds
359
- // "a": "0.031175", // Best ask
360
- // "A": "0.03329", // Best ask quantity
361
- // "b": "0.031148", // Best bid
362
- // "B": "0.10565", // Best bid quantity
363
- // "c": "0.031210", // Last price
364
- // "o": "0.030781", // Open price
365
- // "h": "0.031788", // High price
366
- // "l": "0.030733", // Low price
367
- // "v": "62.587", // Base asset volume
368
- // "q": "1.951420577", // Quote asset volume
369
- // "p": "0.000429", // Price change
370
- // "P": "1.39", // Price change percent
371
- // "L": 1182694927 // Last trade identifier
372
- // }
373
- // }
374
- // }
375
- //
376
- // {
377
- // "ch": "ticker/price/1s",
378
- // "data": {
379
- // "BTCUSDT": {
380
- // "t": 1614815872030,
381
- // "o": "32636.79",
382
- // "c": "32085.51",
383
- // "h": "33379.92",
384
- // "l": "30683.28",
385
- // "v": "11.90667",
386
- // "q": "384081.1955629"
387
- // }
388
- // }
389
- // }
390
- //
391
- const data = this.safeValue(message, 'data', {});
392
- const marketIds = Object.keys(data);
393
- const channel = this.safeString(message, 'ch');
394
- const newTickers = {};
395
- for (let i = 0; i < marketIds.length; i++) {
396
- const marketId = marketIds[i];
397
- const market = this.safeMarket(marketId);
398
- const symbol = market['symbol'];
399
- const ticker = this.parseWsTicker(data[marketId], market);
400
- this.tickers[symbol] = ticker;
401
- newTickers[symbol] = ticker;
402
- const messageHash = channel + '::' + symbol;
403
- client.resolve(newTickers, messageHash);
404
- }
405
- const messageHashes = this.findMessageHashes(client, channel + '::');
406
- for (let i = 0; i < messageHashes.length; i++) {
407
- const messageHash = messageHashes[i];
408
- const parts = messageHash.split('::');
409
- const symbolsString = parts[1];
410
- const symbols = symbolsString.split(',');
411
- const tickers = this.filterByArray(newTickers, 'symbol', symbols);
412
- const tickersSymbols = Object.keys(tickers);
413
- const numTickers = tickersSymbols.length;
414
- if (numTickers > 0) {
415
- client.resolve(tickers, messageHash);
416
- }
417
- }
418
- client.resolve(this.tickers, channel);
419
- return message;
420
- }
421
- parseWsTicker(ticker, market = undefined) {
422
- //
423
- // {
424
- // "t": 1614815872000, // Timestamp in milliseconds
425
- // "a": "0.031175", // Best ask
426
- // "A": "0.03329", // Best ask quantity
427
- // "b": "0.031148", // Best bid
428
- // "B": "0.10565", // Best bid quantity
429
- // "c": "0.031210", // Last price
430
- // "o": "0.030781", // Open price
431
- // "h": "0.031788", // High price
432
- // "l": "0.030733", // Low price
433
- // "v": "62.587", // Base asset volume
434
- // "q": "1.951420577", // Quote asset volume
435
- // "p": "0.000429", // Price change
436
- // "P": "1.39", // Price change percent
437
- // "L": 1182694927 // Last trade identifier
438
- // }
439
- //
440
- // {
441
- // "t": 1614815872030,
442
- // "o": "32636.79",
443
- // "c": "32085.51",
444
- // "h": "33379.92",
445
- // "l": "30683.28",
446
- // "v": "11.90667",
447
- // "q": "384081.1955629"
448
- // }
449
- //
450
- const timestamp = this.safeInteger(ticker, 't');
451
- const symbol = this.safeSymbol(undefined, market);
452
- const last = this.safeString(ticker, 'c');
453
- return this.safeTicker({
454
- 'symbol': symbol,
455
- 'timestamp': timestamp,
456
- 'datetime': this.iso8601(timestamp),
457
- 'high': this.safeString(ticker, 'h'),
458
- 'low': this.safeString(ticker, 'l'),
459
- 'bid': this.safeString(ticker, 'b'),
460
- 'bidVolume': this.safeString(ticker, 'B'),
461
- 'ask': this.safeString(ticker, 'a'),
462
- 'askVolume': this.safeString(ticker, 'A'),
463
- 'vwap': undefined,
464
- 'open': this.safeString(ticker, 'o'),
465
- 'close': last,
466
- 'last': last,
467
- 'previousClose': undefined,
468
- 'change': undefined,
469
- 'percentage': undefined,
470
- 'average': undefined,
471
- 'baseVolume': this.safeString(ticker, 'v'),
472
- 'quoteVolume': this.safeString(ticker, 'q'),
473
- 'info': ticker,
474
- }, market);
475
- }
476
- async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
477
- /**
478
- * @method
479
- * @name hitbtc#watchTrades
480
- * @description get the list of most recent trades for a particular symbol
481
- * @see https://api.hitbtc.com/#subscribe-to-trades
482
- * @param {string} symbol unified symbol of the market to fetch trades for
483
- * @param {int} [since] timestamp in ms of the earliest trade to fetch
484
- * @param {int} [limit] the maximum amount of trades to fetch
485
- * @param {object} [params] extra parameters specific to the exchange API endpoint
486
- * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
487
- */
488
- await this.loadMarkets();
489
- const market = this.market(symbol);
490
- const request = {
491
- 'params': {
492
- 'symbols': [market['id']],
493
- },
494
- };
495
- if (limit !== undefined) {
496
- request['limit'] = limit;
497
- }
498
- const trades = await this.subscribePublic('trades', [symbol], this.deepExtend(request, params));
499
- if (this.newUpdates) {
500
- limit = trades.getLimit(symbol, limit);
501
- }
502
- return this.filterBySinceLimit(trades, since, limit, 'timestamp');
503
- }
504
- handleTrades(client, message) {
505
- //
506
- // {
507
- // "result": {
508
- // "ch": "trades", // Channel
509
- // "subscriptions": ["ETHBTC", "BTCUSDT"]
510
- // },
511
- // "id": 123
512
- // }
513
- //
514
- // Notification snapshot
515
- //
516
- // {
517
- // "ch": "trades", // Channel
518
- // "snapshot": {
519
- // "BTCUSDT": [{
520
- // "t": 1626861109494, // Timestamp in milliseconds
521
- // "i": 1555634969, // Trade identifier
522
- // "p": "30881.96", // Price
523
- // "q": "12.66828", // Quantity
524
- // "s": "buy" // Side
525
- // }]
526
- // }
527
- // }
528
- //
529
- // Notification update
530
- //
531
- // {
532
- // "ch": "trades",
533
- // "update": {
534
- // "BTCUSDT": [{
535
- // "t": 1626861123552,
536
- // "i": 1555634969,
537
- // "p": "30877.68",
538
- // "q": "0.00006",
539
- // "s": "sell"
540
- // }]
541
- // }
542
- // }
543
- //
544
- const data = this.safeValue2(message, 'snapshot', 'update', {});
545
- const marketIds = Object.keys(data);
546
- for (let i = 0; i < marketIds.length; i++) {
547
- const marketId = marketIds[i];
548
- const market = this.safeMarket(marketId);
549
- const tradesLimit = this.safeInteger(this.options, 'tradesLimit', 1000);
550
- const symbol = market['symbol'];
551
- let stored = this.safeValue(this.trades, symbol);
552
- if (stored === undefined) {
553
- stored = new Cache.ArrayCache(tradesLimit);
554
- this.trades[symbol] = stored;
555
- }
556
- const trades = this.parseWsTrades(data[marketId], market);
557
- for (let j = 0; j < trades.length; j++) {
558
- stored.append(trades[j]);
559
- }
560
- const messageHash = 'trades::' + symbol;
561
- client.resolve(stored, messageHash);
562
- }
563
- return message;
564
- }
565
- parseWsTrades(trades, market = undefined, since = undefined, limit = undefined, params = {}) {
566
- trades = this.toArray(trades);
567
- let result = [];
568
- for (let i = 0; i < trades.length; i++) {
569
- const trade = this.extend(this.parseWsTrade(trades[i], market), params);
570
- result.push(trade);
571
- }
572
- result = this.sortBy2(result, 'timestamp', 'id');
573
- const symbol = this.safeString(market, 'symbol');
574
- return this.filterBySymbolSinceLimit(result, symbol, since, limit);
575
- }
576
- parseWsTrade(trade, market = undefined) {
577
- //
578
- // {
579
- // "t": 1626861123552, // Timestamp in milliseconds
580
- // "i": 1555634969, // Trade identifier
581
- // "p": "30877.68", // Price
582
- // "q": "0.00006", // Quantity
583
- // "s": "sell" // Side
584
- // }
585
- //
586
- const timestamp = this.safeInteger(trade, 't');
587
- return this.safeTrade({
588
- 'info': trade,
589
- 'id': this.safeString(trade, 'i'),
590
- 'order': undefined,
591
- 'timestamp': timestamp,
592
- 'datetime': this.iso8601(timestamp),
593
- 'symbol': this.safeString(market, 'symbol'),
594
- 'type': undefined,
595
- 'side': this.safeString(trade, 's'),
596
- 'takerOrMaker': undefined,
597
- 'price': this.safeString(trade, 'p'),
598
- 'amount': this.safeString(trade, 'q'),
599
- 'cost': undefined,
600
- 'fee': undefined,
601
- }, market);
602
- }
603
- async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
604
- /**
605
- * @method
606
- * @name hitbtc#watchOHLCV
607
- * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
608
- * @see https://api.hitbtc.com/#subscribe-to-candles
609
- * @param {string} symbol unified symbol of the market to fetch OHLCV data for
610
- * @param {string} [timeframe] the length of time each candle represents
611
- * @param {int} [since] not used by hitbtc watchOHLCV
612
- * @param {int} [limit] 0 – 1000, default value = 0 (no history returned)
613
- * @param {object} [params] extra parameters specific to the exchange API endpoint
614
- * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
615
- */
616
- const period = this.safeString(this.timeframes, timeframe, timeframe);
617
- const name = 'candles/' + period;
618
- const market = this.market(symbol);
619
- const request = {
620
- 'params': {
621
- 'symbols': [market['id']],
622
- },
623
- };
624
- if (limit !== undefined) {
625
- request['params']['limit'] = limit;
626
- }
627
- const ohlcv = await this.subscribePublic(name, [symbol], this.deepExtend(request, params));
628
- if (this.newUpdates) {
629
- limit = ohlcv.getLimit(symbol, limit);
630
- }
631
- return this.filterBySinceLimit(ohlcv, since, limit, 0);
632
- }
633
- handleOHLCV(client, message) {
634
- //
635
- // {
636
- // "ch": "candles/M1", // Channel
637
- // "snapshot": {
638
- // "BTCUSDT": [{
639
- // "t": 1626860340000, // Message timestamp
640
- // "o": "30881.95", // Open price
641
- // "c": "30890.96", // Last price
642
- // "h": "30900.8", // High price
643
- // "l": "30861.27", // Low price
644
- // "v": "1.27852", // Base asset volume
645
- // "q": "39493.9021811" // Quote asset volume
646
- // }
647
- // ...
648
- // ]
649
- // }
650
- // }
651
- //
652
- // {
653
- // "ch": "candles/M1",
654
- // "update": {
655
- // "ETHBTC": [{
656
- // "t": 1626860880000,
657
- // "o": "0.060711",
658
- // "c": "0.060749",
659
- // "h": "0.060749",
660
- // "l": "0.060711",
661
- // "v": "12.2800",
662
- // "q": "0.7455339675"
663
- // }]
664
- // }
665
- // }
666
- //
667
- const data = this.safeValue2(message, 'snapshot', 'update', {});
668
- const marketIds = Object.keys(data);
669
- const channel = this.safeString(message, 'ch');
670
- const splitChannel = channel.split('/');
671
- const period = this.safeString(splitChannel, 1);
672
- const timeframe = this.findTimeframe(period);
673
- for (let i = 0; i < marketIds.length; i++) {
674
- const marketId = marketIds[i];
675
- const market = this.safeMarket(marketId);
676
- const symbol = market['symbol'];
677
- this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
678
- let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
679
- if (stored === undefined) {
680
- const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
681
- stored = new Cache.ArrayCacheByTimestamp(limit);
682
- this.ohlcvs[symbol][timeframe] = stored;
683
- }
684
- const ohlcvs = this.parseWsOHLCVs(data[marketId], market);
685
- for (let j = 0; j < ohlcvs.length; j++) {
686
- stored.append(ohlcvs[j]);
687
- }
688
- const messageHash = channel + '::' + symbol;
689
- client.resolve(stored, messageHash);
690
- }
691
- return message;
692
- }
693
- parseWsOHLCV(ohlcv, market = undefined) {
694
- //
695
- // {
696
- // "t": 1626860340000, // Message timestamp
697
- // "o": "30881.95", // Open price
698
- // "c": "30890.96", // Last price
699
- // "h": "30900.8", // High price
700
- // "l": "30861.27", // Low price
701
- // "v": "1.27852", // Base asset volume
702
- // "q": "39493.9021811" // Quote asset volume
703
- // }
704
- //
705
- return [
706
- this.safeInteger(ohlcv, 't'),
707
- this.safeNumber(ohlcv, 'o'),
708
- this.safeNumber(ohlcv, 'h'),
709
- this.safeNumber(ohlcv, 'l'),
710
- this.safeNumber(ohlcv, 'c'),
711
- this.safeNumber(ohlcv, 'v'),
712
- ];
713
- }
714
- async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
715
- /**
716
- * @method
717
- * @name hitbtc#watchOrders
718
- * @description watches information on multiple orders made by the user
719
- * @see https://api.hitbtc.com/#subscribe-to-reports
720
- * @see https://api.hitbtc.com/#subscribe-to-reports-2
721
- * @see https://api.hitbtc.com/#subscribe-to-reports-3
722
- * @param {string} [symbol] unified CCXT market symbol
723
- * @param {int} [since] timestamp in ms of the earliest order to fetch
724
- * @param {int} [limit] the maximum amount of orders to fetch
725
- * @param {object} [params] extra parameters specific to the exchange API endpoint
726
- * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/en/latest/manual.html#order-structure}
727
- */
728
- await this.loadMarkets();
729
- let marketType = undefined;
730
- let market = undefined;
731
- if (symbol !== undefined) {
732
- market = this.market(symbol);
733
- }
734
- [marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
735
- const name = this.getSupportedMapping(marketType, {
736
- 'spot': 'spot_subscribe',
737
- 'margin': 'margin_subscribe',
738
- 'swap': 'futures_subscribe',
739
- 'future': 'futures_subscribe',
740
- });
741
- const orders = await this.subscribePrivate(name, symbol, params);
742
- if (this.newUpdates) {
743
- limit = orders.getLimit(symbol, limit);
744
- }
745
- return this.filterBySinceLimit(orders, since, limit, 'timestamp');
746
- }
747
- handleOrder(client, message) {
748
- //
749
- // {
750
- // "jsonrpc": "2.0",
751
- // "method": "spot_order", // "margin_order", "future_order"
752
- // "params": {
753
- // "id": 584244931496,
754
- // "client_order_id": "b5acd79c0a854b01b558665bcf379456",
755
- // "symbol": "BTCUSDT",
756
- // "side": "buy",
757
- // "status": "new",
758
- // "type": "limit",
759
- // "time_in_force": "GTC",
760
- // "quantity": "0.01000",
761
- // "quantity_cumulative": "0",
762
- // "price": "0.01", // only updates and snapshots
763
- // "post_only": false,
764
- // "reduce_only": false, // only margin and contract
765
- // "display_quantity": "0", // only updates and snapshot
766
- // "created_at": "2021-07-02T22:52:32.864Z",
767
- // "updated_at": "2021-07-02T22:52:32.864Z",
768
- // "trade_id": 1361977606, // only trades
769
- // "trade_quantity": "0.00001", // only trades
770
- // "trade_price": "49595.04", // only trades
771
- // "trade_fee": "0.001239876000", // only trades
772
- // "trade_taker": true, // only trades, only spot
773
- // "trade_position_id": 485308, // only trades, only margin
774
- // "report_type": "new" // "trade", "status" (snapshot)
775
- // }
776
- // }
777
- //
778
- // {
779
- // "jsonrpc": "2.0",
780
- // "method": "spot_orders", // "margin_orders", "future_orders"
781
- // "params": [
782
- // {
783
- // "id": 584244931496,
784
- // "client_order_id": "b5acd79c0a854b01b558665bcf379456",
785
- // "symbol": "BTCUSDT",
786
- // "side": "buy",
787
- // "status": "new",
788
- // "type": "limit",
789
- // "time_in_force": "GTC",
790
- // "quantity": "0.01000",
791
- // "quantity_cumulative": "0",
792
- // "price": "0.01", // only updates and snapshots
793
- // "post_only": false,
794
- // "reduce_only": false, // only margin and contract
795
- // "display_quantity": "0", // only updates and snapshot
796
- // "created_at": "2021-07-02T22:52:32.864Z",
797
- // "updated_at": "2021-07-02T22:52:32.864Z",
798
- // "trade_id": 1361977606, // only trades
799
- // "trade_quantity": "0.00001", // only trades
800
- // "trade_price": "49595.04", // only trades
801
- // "trade_fee": "0.001239876000", // only trades
802
- // "trade_taker": true, // only trades, only spot
803
- // "trade_position_id": 485308, // only trades, only margin
804
- // "report_type": "new" // "trade", "status" (snapshot)
805
- // }
806
- // ]
807
- // }
808
- //
809
- if (this.orders === undefined) {
810
- const limit = this.safeInteger(this.options, 'ordersLimit');
811
- this.orders = new Cache.ArrayCacheBySymbolById(limit);
812
- }
813
- const data = this.safeValue(message, 'params', []);
814
- if (Array.isArray(data)) {
815
- for (let i = 0; i < data.length; i++) {
816
- const order = data[i];
817
- this.handleOrderHelper(client, message, order);
818
- }
819
- }
820
- else {
821
- this.handleOrderHelper(client, message, data);
822
- }
823
- return message;
824
- }
825
- handleOrderHelper(client, message, order) {
826
- const orders = this.orders;
827
- const marketId = this.safeStringLower2(order, 'instrument', 'symbol');
828
- const method = this.safeString(message, 'method');
829
- const splitMethod = method.split('_order');
830
- const messageHash = this.safeString(splitMethod, 0);
831
- const symbol = this.safeSymbol(marketId);
832
- const parsed = this.parseOrder(order);
833
- orders.append(parsed);
834
- client.resolve(orders, messageHash);
835
- client.resolve(orders, messageHash + '::' + symbol);
836
- }
837
- parseWsOrderTrade(trade, market = undefined) {
838
- //
839
- // {
840
- // "id": 584244931496,
841
- // "client_order_id": "b5acd79c0a854b01b558665bcf379456",
842
- // "symbol": "BTCUSDT",
843
- // "side": "buy",
844
- // "status": "new",
845
- // "type": "limit",
846
- // "time_in_force": "GTC",
847
- // "quantity": "0.01000",
848
- // "quantity_cumulative": "0",
849
- // "price": "0.01", // only updates and snapshots
850
- // "post_only": false,
851
- // "reduce_only": false, // only margin and contract
852
- // "display_quantity": "0", // only updates and snapshot
853
- // "created_at": "2021-07-02T22:52:32.864Z",
854
- // "updated_at": "2021-07-02T22:52:32.864Z",
855
- // "trade_id": 1361977606, // only trades
856
- // "trade_quantity": "0.00001", // only trades
857
- // "trade_price": "49595.04", // only trades
858
- // "trade_fee": "0.001239876000", // only trades
859
- // "trade_taker": true, // only trades, only spot
860
- // "trade_position_id": 485308, // only trades, only margin
861
- // "report_type": "new" // "trade", "status" (snapshot)
862
- // }
863
- //
864
- const timestamp = this.safeInteger(trade, 'created_at');
865
- const marketId = this.safeString(trade, 'symbol');
866
- return this.safeTrade({
867
- 'info': trade,
868
- 'id': this.safeString(trade, 'trade_id'),
869
- 'order': this.safeString(trade, 'id'),
870
- 'timestamp': timestamp,
871
- 'datetime': this.iso8601(timestamp),
872
- 'symbol': this.safeMarket(marketId, market),
873
- 'type': undefined,
874
- 'side': this.safeString(trade, 'side'),
875
- 'takerOrMaker': this.safeString(trade, 'trade_taker'),
876
- 'price': this.safeString(trade, 'trade_price'),
877
- 'amount': this.safeString(trade, 'trade_quantity'),
878
- 'cost': undefined,
879
- 'fee': {
880
- 'cost': this.safeString(trade, 'trade_fee'),
881
- 'currency': undefined,
882
- 'rate': undefined,
883
- },
884
- }, market);
885
- }
886
- parseWsOrder(order, market = undefined) {
887
- //
888
- // {
889
- // "id": 584244931496,
890
- // "client_order_id": "b5acd79c0a854b01b558665bcf379456",
891
- // "symbol": "BTCUSDT",
892
- // "side": "buy",
893
- // "status": "new",
894
- // "type": "limit",
895
- // "time_in_force": "GTC",
896
- // "quantity": "0.01000",
897
- // "quantity_cumulative": "0",
898
- // "price": "0.01", // only updates and snapshots
899
- // "post_only": false,
900
- // "reduce_only": false, // only margin and contract
901
- // "display_quantity": "0", // only updates and snapshot
902
- // "created_at": "2021-07-02T22:52:32.864Z",
903
- // "updated_at": "2021-07-02T22:52:32.864Z",
904
- // "trade_id": 1361977606, // only trades
905
- // "trade_quantity": "0.00001", // only trades
906
- // "trade_price": "49595.04", // only trades
907
- // "trade_fee": "0.001239876000", // only trades
908
- // "trade_taker": true, // only trades, only spot
909
- // "trade_position_id": 485308, // only trades, only margin
910
- // "report_type": "new" // "trade", "status" (snapshot)
911
- // }
912
- //
913
- const timestamp = this.safeString(order, 'created_at');
914
- const marketId = this.safeString(order, 'symbol');
915
- market = this.safeMarket(marketId, market);
916
- const tradeId = this.safeString(order, 'trade_id');
917
- let trades = undefined;
918
- if (tradeId !== undefined) {
919
- const trade = this.parseWsOrderTrade(order, market);
920
- trades = [trade];
921
- }
922
- const rawStatus = this.safeString(order, 'status');
923
- const report_type = this.safeString(order, 'report_type');
924
- let parsedStatus = undefined;
925
- if (report_type === 'canceled') {
926
- parsedStatus = this.parseOrderStatus(report_type);
927
- }
928
- else {
929
- parsedStatus = this.parseOrderStatus(rawStatus);
930
- }
931
- return this.safeOrder({
932
- 'info': order,
933
- 'id': this.safeString(order, 'id'),
934
- 'clientOrderId': this.safeString(order, 'client_order_id'),
935
- 'timestamp': timestamp,
936
- 'datetime': this.iso8601(timestamp),
937
- 'lastTradeTimestamp': undefined,
938
- 'symbol': market['symbol'],
939
- 'price': this.safeString(order, 'price'),
940
- 'amount': this.safeString(order, 'quantity'),
941
- 'type': this.safeString(order, 'type'),
942
- 'side': this.safeStringUpper(order, 'side'),
943
- 'timeInForce': this.safeString(order, 'time_in_force'),
944
- 'postOnly': this.safeString(order, 'post_only'),
945
- 'reduceOnly': this.safeValue(order, 'reduce_only'),
946
- 'filled': undefined,
947
- 'remaining': undefined,
948
- 'cost': undefined,
949
- 'status': parsedStatus,
950
- 'average': undefined,
951
- 'trades': trades,
952
- 'fee': undefined,
953
- }, market);
954
- }
955
- async watchBalance(params = {}) {
956
- /**
957
- * @method
958
- * @name hitbtc#watchBalance
959
- * @description watches balance updates, cannot subscribe to margin account balances
960
- * @see https://api.hitbtc.com/#subscribe-to-spot-balances
961
- * @see https://api.hitbtc.com/#subscribe-to-futures-balances
962
- * @param {object} [params] extra parameters specific to the exchange API endpoint
963
- * @param {string} [params.type] 'spot', 'swap', or 'future'
964
- *
965
- * EXCHANGE SPECIFIC PARAMETERS
966
- * @param {string} [params.mode] 'updates' or 'batches' (default), 'updates' = messages arrive after balance updates, 'batches' = messages arrive at equal intervals if there were any updates
967
- * @returns {object[]} a list of [balance structures]{@link https://docs.ccxt.com/#/?id=balance-structure}
968
- */
969
- await this.loadMarkets();
970
- let type = undefined;
971
- [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
972
- const name = this.getSupportedMapping(type, {
973
- 'spot': 'spot_balance_subscribe',
974
- 'swap': 'futures_balance_subscribe',
975
- 'future': 'futures_balance_subscribe',
976
- });
977
- const mode = this.safeString(params, 'mode', 'batches');
978
- params = this.omit(params, 'mode');
979
- const request = {
980
- 'mode': mode,
981
- };
982
- return await this.subscribePrivate(name, undefined, this.extend(request, params));
983
- }
984
- async createOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
985
- /**
986
- * @method
987
- * @name hitbtc#createOrder
988
- * @description create a trade order
989
- * @see https://api.hitbtc.com/#create-new-spot-order
990
- * @see https://api.hitbtc.com/#create-margin-order
991
- * @see https://api.hitbtc.com/#create-futures-order
992
- * @param {string} symbol unified symbol of the market to create an order in
993
- * @param {string} type 'market' or 'limit'
994
- * @param {string} side 'buy' or 'sell'
995
- * @param {float} amount how much of currency you want to trade in units of base currency
996
- * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
997
- * @param {object} [params] extra parameters specific to the exchange API endpoint
998
- * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported for spot-margin, swap supports both, default is 'cross'
999
- * @param {bool} [params.margin] true for creating a margin order
1000
- * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
1001
- * @param {bool} [params.postOnly] if true, the order will only be posted to the order book and not executed immediately
1002
- * @param {string} [params.timeInForce] "GTC", "IOC", "FOK", "Day", "GTD"
1003
- * @returns {object} an [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
1004
- */
1005
- await this.loadMarkets();
1006
- const market = this.market(symbol);
1007
- let request = undefined;
1008
- let marketType = undefined;
1009
- [marketType, params] = this.handleMarketTypeAndParams('createOrder', market, params);
1010
- let marginMode = undefined;
1011
- [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
1012
- [request, params] = this.createOrderRequest(market, marketType, type, side, amount, price, marginMode, params);
1013
- request = this.extend(request, params);
1014
- if (marketType === 'swap') {
1015
- return await this.tradeRequest('futures_new_order', request);
1016
- }
1017
- else if ((marketType === 'margin') || (marginMode !== undefined)) {
1018
- return await this.tradeRequest('margin_new_order', request);
1019
- }
1020
- else {
1021
- return await this.tradeRequest('spot_new_order', request);
1022
- }
1023
- }
1024
- async cancelOrderWs(id, symbol = undefined, params = {}) {
1025
- /**
1026
- * @method
1027
- * @name hitbtc#cancelOrderWs
1028
- * @see https://api.hitbtc.com/#cancel-spot-order-2
1029
- * @see https://api.hitbtc.com/#cancel-futures-order-2
1030
- * @see https://api.hitbtc.com/#cancel-margin-order-2
1031
- * @description cancels an open order
1032
- * @param {string} id order id
1033
- * @param {string} symbol unified symbol of the market the order was made in
1034
- * @param {object} [params] extra parameters specific to the exchange API endpoint
1035
- * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
1036
- * @param {bool} [params.margin] true for canceling a margin order
1037
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1038
- */
1039
- await this.loadMarkets();
1040
- let market = undefined;
1041
- let request = {
1042
- 'client_order_id': id,
1043
- };
1044
- if (symbol !== undefined) {
1045
- market = this.market(symbol);
1046
- }
1047
- let marketType = undefined;
1048
- [marketType, params] = this.handleMarketTypeAndParams('cancelOrderWs', market, params);
1049
- const [marginMode, query] = this.handleMarginModeAndParams('cancelOrderWs', params);
1050
- request = this.extend(request, query);
1051
- if (marketType === 'swap') {
1052
- return await this.tradeRequest('futures_cancel_order', request);
1053
- }
1054
- else if ((marketType === 'margin') || (marginMode !== undefined)) {
1055
- return await this.tradeRequest('margin_cancel_order', request);
1056
- }
1057
- else {
1058
- return await this.tradeRequest('spot_cancel_order', request);
1059
- }
1060
- }
1061
- async cancelAllOrdersWs(symbol = undefined, params = {}) {
1062
- /**
1063
- * @method
1064
- * @name hitbtc#cancelAllOrdersWs
1065
- * @see https://api.hitbtc.com/#cancel-spot-orders
1066
- * @see https://api.hitbtc.com/#cancel-futures-order-3
1067
- * @description cancel all open orders
1068
- * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
1069
- * @param {object} [params] extra parameters specific to the exchange API endpoint
1070
- * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
1071
- * @param {bool} [params.margin] true for canceling margin orders
1072
- * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1073
- */
1074
- await this.loadMarkets();
1075
- let market = undefined;
1076
- if (symbol !== undefined) {
1077
- market = this.market(symbol);
1078
- }
1079
- let marketType = undefined;
1080
- [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrdersWs', market, params);
1081
- let marginMode = undefined;
1082
- [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrdersWs', params);
1083
- if (marketType === 'swap') {
1084
- return await this.tradeRequest('futures_cancel_orders', params);
1085
- }
1086
- else if ((marketType === 'margin') || (marginMode !== undefined)) {
1087
- throw new errors.NotSupported(this.id + ' cancelAllOrdersWs is not supported for margin orders');
1088
- }
1089
- else {
1090
- return await this.tradeRequest('spot_cancel_orders', params);
1091
- }
1092
- }
1093
- async fetchOpenOrdersWs(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1094
- /**
1095
- * @method
1096
- * @name hitbtc#fetchOpenOrdersWs
1097
- * @see https://api.hitbtc.com/#get-active-futures-orders-2
1098
- * @see https://api.hitbtc.com/#get-margin-orders
1099
- * @see https://api.hitbtc.com/#get-active-spot-orders
1100
- * @description fetch all unfilled currently open orders
1101
- * @param {string} symbol unified market symbol
1102
- * @param {int} [since] the earliest time in ms to fetch open orders for
1103
- * @param {int} [limit] the maximum number of open orders structures to retrieve
1104
- * @param {object} [params] extra parameters specific to the exchange API endpoint
1105
- * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
1106
- * @param {bool} [params.margin] true for fetching open margin orders
1107
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1108
- */
1109
- await this.loadMarkets();
1110
- let market = undefined;
1111
- const request = {};
1112
- if (symbol !== undefined) {
1113
- market = this.market(symbol);
1114
- request['symbol'] = market['id'];
1115
- }
1116
- let marketType = undefined;
1117
- [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrdersWs', market, params);
1118
- let marginMode = undefined;
1119
- [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrdersWs', params);
1120
- if (marketType === 'swap') {
1121
- return await this.tradeRequest('futures_get_orders', request);
1122
- }
1123
- else if ((marketType === 'margin') || (marginMode !== undefined)) {
1124
- return await this.tradeRequest('margin_get_orders', request);
1125
- }
1126
- else {
1127
- return await this.tradeRequest('spot_get_orders', request);
1128
- }
1129
- }
1130
- handleBalance(client, message) {
1131
- //
1132
- // {
1133
- // "jsonrpc": "2.0",
1134
- // "method": "futures_balance",
1135
- // "params": [
1136
- // {
1137
- // "currency": "BCN",
1138
- // "available": "100.000000000000",
1139
- // "reserved": "0",
1140
- // "reserved_margin": "0"
1141
- // },
1142
- // ...
1143
- // ]
1144
- // }
1145
- //
1146
- const messageHash = this.safeString(message, 'method');
1147
- const params = this.safeValue(message, 'params');
1148
- const balance = this.parseBalance(params);
1149
- this.balance = this.deepExtend(this.balance, balance);
1150
- client.resolve(this.balance, messageHash);
1151
- }
1152
- handleNotification(client, message) {
1153
- //
1154
- // { jsonrpc: "2.0", result: true, id: null }
1155
- //
1156
- return message;
1157
- }
1158
- handleOrderRequest(client, message) {
1159
- //
1160
- // createOrderWs, cancelOrderWs
1161
- //
1162
- // {
1163
- // "jsonrpc": "2.0",
1164
- // "result": {
1165
- // "id": 1130310696965,
1166
- // "client_order_id": "OPC2oyHSkEBqIpPtniLqeW-597hUL3Yo",
1167
- // "symbol": "ADAUSDT",
1168
- // "side": "buy",
1169
- // "status": "new",
1170
- // "type": "limit",
1171
- // "time_in_force": "GTC",
1172
- // "quantity": "4",
1173
- // "quantity_cumulative": "0",
1174
- // "price": "0.3300000",
1175
- // "post_only": false,
1176
- // "created_at": "2023-11-17T14:58:15.903Z",
1177
- // "updated_at": "2023-11-17T14:58:15.903Z",
1178
- // "original_client_order_id": "d6b645556af740b1bd1683400fd9cbce", // spot_replace_order only
1179
- // "report_type": "new"
1180
- // "margin_mode": "isolated", // margin and future only
1181
- // "reduce_only": false, // margin and future only
1182
- // },
1183
- // "id": 1700233093414
1184
- // }
1185
- //
1186
- const messageHash = this.safeInteger(message, 'id');
1187
- const result = this.safeValue(message, 'result', {});
1188
- if (Array.isArray(result)) {
1189
- const parsedOrders = [];
1190
- for (let i = 0; i < result.length; i++) {
1191
- const parsedOrder = this.parseWsOrder(result[i]);
1192
- parsedOrders.push(parsedOrder);
1193
- }
1194
- client.resolve(parsedOrders, messageHash);
1195
- }
1196
- else {
1197
- const parsedOrder = this.parseWsOrder(result);
1198
- client.resolve(parsedOrder, messageHash);
1199
- }
1200
- return message;
1201
- }
1202
- handleMessage(client, message) {
1203
- this.handleError(client, message);
1204
- let channel = this.safeString2(message, 'ch', 'method');
1205
- if (channel !== undefined) {
1206
- const splitChannel = channel.split('/');
1207
- channel = this.safeString(splitChannel, 0);
1208
- const methods = {
1209
- 'candles': this.handleOHLCV,
1210
- 'ticker': this.handleTicker,
1211
- 'trades': this.handleTrades,
1212
- 'orderbook': this.handleOrderBook,
1213
- 'spot_order': this.handleOrder,
1214
- 'spot_orders': this.handleOrder,
1215
- 'margin_order': this.handleOrder,
1216
- 'margin_orders': this.handleOrder,
1217
- 'futures_order': this.handleOrder,
1218
- 'futures_orders': this.handleOrder,
1219
- 'spot_balance': this.handleBalance,
1220
- 'futures_balance': this.handleBalance,
1221
- };
1222
- const method = this.safeValue(methods, channel);
1223
- if (method !== undefined) {
1224
- method.call(this, client, message);
1225
- }
1226
- }
1227
- else {
1228
- const result = this.safeValue(message, 'result');
1229
- const clientOrderId = this.safeString(result, 'client_order_id');
1230
- if (clientOrderId !== undefined) {
1231
- this.handleOrderRequest(client, message);
1232
- }
1233
- if ((result === true) && !('id' in message)) {
1234
- this.handleAuthenticate(client, message);
1235
- }
1236
- if (Array.isArray(result)) {
1237
- // to do improve this, not very reliable right now
1238
- const first = this.safeValue(result, 0, {});
1239
- const arrayLength = result.length;
1240
- if ((arrayLength === 0) || ('client_order_id' in first)) {
1241
- this.handleOrderRequest(client, message);
1242
- }
1243
- }
1244
- }
1245
- }
1246
- handleAuthenticate(client, message) {
1247
- //
1248
- // {
1249
- // "jsonrpc": "2.0",
1250
- // "result": true
1251
- // }
1252
- //
1253
- const success = this.safeValue(message, 'result');
1254
- const messageHash = 'authenticated';
1255
- if (success) {
1256
- const future = this.safeValue(client.futures, messageHash);
1257
- future.resolve(true);
1258
- }
1259
- else {
1260
- const error = new errors.AuthenticationError(this.id + ' ' + this.json(message));
1261
- client.reject(error, messageHash);
1262
- if (messageHash in client.subscriptions) {
1263
- delete client.subscriptions[messageHash];
1264
- }
1265
- }
1266
- return message;
1267
- }
1268
- handleError(client, message) {
1269
- //
1270
- // {
1271
- // jsonrpc: '2.0',
1272
- // error: {
1273
- // code: 20001,
1274
- // message: 'Insufficient funds',
1275
- // description: 'Check that the funds are sufficient, given commissions'
1276
- // },
1277
- // id: 1700228604325
1278
- // }
1279
- //
1280
- const error = this.safeValue(message, 'error');
1281
- if (error !== undefined) {
1282
- const code = this.safeValue(error, 'code');
1283
- const errorMessage = this.safeString(error, 'message');
1284
- const description = this.safeString(error, 'description');
1285
- const feedback = this.id + ' ' + description;
1286
- this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
1287
- this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessage, feedback);
1288
- throw new errors.ExchangeError(feedback); // unknown message
1289
- }
1290
- return undefined;
1291
- }
1292
- }
1293
-
1294
- module.exports = hitbtc;