ccxt 4.2.17 → 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 (439) hide show
  1. package/README.md +9 -9
  2. package/dist/ccxt.browser.js +48992 -47725
  3. package/dist/ccxt.browser.min.js +3 -3
  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/coincheck.js +208 -0
  49. package/dist/cjs/src/pro/hitbtc.js +5 -4
  50. package/dist/cjs/src/pro/htx.js +6 -1
  51. package/dist/cjs/src/pro/kraken.js +1 -1
  52. package/dist/cjs/src/pro/krakenfutures.js +7 -1
  53. package/dist/cjs/src/pro/kucoin.js +46 -36
  54. package/dist/cjs/src/pro/kucoinfutures.js +45 -37
  55. package/dist/cjs/src/pro/lbank.js +881 -0
  56. package/dist/cjs/src/pro/okx.js +52 -2
  57. package/dist/cjs/{js/src/pro/bitpanda.js → src/pro/onetrading.js} +4 -7
  58. package/dist/cjs/src/pro/poloniex.js +2 -2
  59. package/dist/cjs/src/pro/poloniexfutures.js +43 -35
  60. package/dist/cjs/src/pro/woo.js +126 -0
  61. package/dist/cjs/src/probit.js +4 -2
  62. package/dist/cjs/src/upbit.js +12 -12
  63. package/dist/cjs/src/wavesexchange.js +1 -1
  64. package/dist/cjs/src/whitebit.js +1 -0
  65. package/dist/cjs/src/woo.js +56 -0
  66. package/js/ccxt.d.ts +14 -2
  67. package/js/ccxt.js +10 -2
  68. package/js/src/abstract/bitpanda.d.ts +4 -4
  69. package/js/src/abstract/bitstamp.d.ts +8 -0
  70. package/js/src/abstract/gate.d.ts +1 -0
  71. package/js/src/abstract/gateio.d.ts +1 -0
  72. package/js/src/abstract/htx.d.ts +3 -0
  73. package/js/src/abstract/huobi.d.ts +3 -0
  74. package/js/src/abstract/luno.d.ts +1 -0
  75. package/js/src/abstract/onetrading.d.ts +38 -0
  76. package/js/src/ascendex.js +2 -0
  77. package/js/src/base/Exchange.d.ts +2 -3
  78. package/js/src/base/Exchange.js +5 -2
  79. package/js/src/binance.js +7 -1
  80. package/js/src/bingx.d.ts +1 -0
  81. package/js/src/bingx.js +26 -0
  82. package/js/src/bitget.js +22 -3
  83. package/js/src/bitpanda.d.ts +2 -72
  84. package/js/src/bitpanda.js +5 -1991
  85. package/js/src/bitstamp.js +8 -0
  86. package/js/src/bybit.js +21 -47
  87. package/js/src/coincheck.js +1 -0
  88. package/js/src/deribit.js +16 -4
  89. package/js/src/gate.d.ts +1 -0
  90. package/js/src/gate.js +50 -110
  91. package/js/src/htx.js +3 -0
  92. package/js/src/kraken.d.ts +1 -0
  93. package/js/src/kraken.js +40 -39
  94. package/js/src/lbank.js +1 -0
  95. package/js/src/luno.d.ts +3 -1
  96. package/js/src/luno.js +84 -2
  97. package/js/src/mexc.js +1 -2
  98. package/js/src/onetrading.d.ts +74 -0
  99. package/js/src/onetrading.js +2003 -0
  100. package/js/src/poloniexfutures.js +1 -0
  101. package/js/src/pro/binance.js +7 -2
  102. package/js/src/pro/bitget.js +1 -1
  103. package/js/src/pro/bitpanda.d.ts +2 -34
  104. package/js/src/pro/bitpanda.js +5 -1330
  105. package/js/src/pro/coincheck.d.ts +12 -0
  106. package/js/src/pro/coincheck.js +209 -0
  107. package/js/src/pro/kucoin.js +43 -35
  108. package/js/src/pro/kucoinfutures.js +45 -37
  109. package/js/src/pro/lbank.d.ts +29 -0
  110. package/js/src/pro/lbank.js +882 -0
  111. package/js/src/pro/onetrading.d.ts +36 -0
  112. package/js/src/pro/onetrading.js +1339 -0
  113. package/js/src/pro/poloniexfutures.js +43 -35
  114. package/js/src/whitebit.js +1 -0
  115. package/package.json +2 -2
  116. package/rollup.config.js +2 -0
  117. package/skip-tests.json +14 -2
  118. package/test-commonjs.cjs +25 -1
  119. package/dist/cjs/js/ccxt.js +0 -476
  120. package/dist/cjs/js/src/abstract/alpaca.js +0 -9
  121. package/dist/cjs/js/src/abstract/ascendex.js +0 -9
  122. package/dist/cjs/js/src/abstract/bigone.js +0 -9
  123. package/dist/cjs/js/src/abstract/binance.js +0 -9
  124. package/dist/cjs/js/src/abstract/bingx.js +0 -9
  125. package/dist/cjs/js/src/abstract/bit2c.js +0 -9
  126. package/dist/cjs/js/src/abstract/bitbank.js +0 -9
  127. package/dist/cjs/js/src/abstract/bitbns.js +0 -9
  128. package/dist/cjs/js/src/abstract/bitfinex.js +0 -9
  129. package/dist/cjs/js/src/abstract/bitfinex2.js +0 -9
  130. package/dist/cjs/js/src/abstract/bitflyer.js +0 -9
  131. package/dist/cjs/js/src/abstract/bitforex.js +0 -9
  132. package/dist/cjs/js/src/abstract/bitget.js +0 -9
  133. package/dist/cjs/js/src/abstract/bithumb.js +0 -9
  134. package/dist/cjs/js/src/abstract/bitmart.js +0 -9
  135. package/dist/cjs/js/src/abstract/bitmex.js +0 -9
  136. package/dist/cjs/js/src/abstract/bitopro.js +0 -9
  137. package/dist/cjs/js/src/abstract/bitpanda.js +0 -9
  138. package/dist/cjs/js/src/abstract/bitrue.js +0 -9
  139. package/dist/cjs/js/src/abstract/bitso.js +0 -9
  140. package/dist/cjs/js/src/abstract/bitstamp.js +0 -9
  141. package/dist/cjs/js/src/abstract/bitteam.js +0 -9
  142. package/dist/cjs/js/src/abstract/bitvavo.js +0 -9
  143. package/dist/cjs/js/src/abstract/bl3p.js +0 -9
  144. package/dist/cjs/js/src/abstract/blockchaincom.js +0 -9
  145. package/dist/cjs/js/src/abstract/btcalpha.js +0 -9
  146. package/dist/cjs/js/src/abstract/btcbox.js +0 -9
  147. package/dist/cjs/js/src/abstract/btcmarkets.js +0 -9
  148. package/dist/cjs/js/src/abstract/btcturk.js +0 -9
  149. package/dist/cjs/js/src/abstract/bybit.js +0 -9
  150. package/dist/cjs/js/src/abstract/cex.js +0 -9
  151. package/dist/cjs/js/src/abstract/coinbase.js +0 -9
  152. package/dist/cjs/js/src/abstract/coinbasepro.js +0 -9
  153. package/dist/cjs/js/src/abstract/coincheck.js +0 -9
  154. package/dist/cjs/js/src/abstract/coinex.js +0 -9
  155. package/dist/cjs/js/src/abstract/coinlist.js +0 -9
  156. package/dist/cjs/js/src/abstract/coinmate.js +0 -9
  157. package/dist/cjs/js/src/abstract/coinone.js +0 -9
  158. package/dist/cjs/js/src/abstract/coinsph.js +0 -9
  159. package/dist/cjs/js/src/abstract/coinspot.js +0 -9
  160. package/dist/cjs/js/src/abstract/cryptocom.js +0 -9
  161. package/dist/cjs/js/src/abstract/currencycom.js +0 -9
  162. package/dist/cjs/js/src/abstract/delta.js +0 -9
  163. package/dist/cjs/js/src/abstract/deribit.js +0 -9
  164. package/dist/cjs/js/src/abstract/digifinex.js +0 -9
  165. package/dist/cjs/js/src/abstract/exmo.js +0 -9
  166. package/dist/cjs/js/src/abstract/gate.js +0 -9
  167. package/dist/cjs/js/src/abstract/gemini.js +0 -9
  168. package/dist/cjs/js/src/abstract/hitbtc.js +0 -9
  169. package/dist/cjs/js/src/abstract/hollaex.js +0 -9
  170. package/dist/cjs/js/src/abstract/htx.js +0 -9
  171. package/dist/cjs/js/src/abstract/huobijp.js +0 -9
  172. package/dist/cjs/js/src/abstract/idex.js +0 -9
  173. package/dist/cjs/js/src/abstract/independentreserve.js +0 -9
  174. package/dist/cjs/js/src/abstract/indodax.js +0 -9
  175. package/dist/cjs/js/src/abstract/kraken.js +0 -9
  176. package/dist/cjs/js/src/abstract/krakenfutures.js +0 -9
  177. package/dist/cjs/js/src/abstract/kucoin.js +0 -9
  178. package/dist/cjs/js/src/abstract/kucoinfutures.js +0 -9
  179. package/dist/cjs/js/src/abstract/kuna.js +0 -9
  180. package/dist/cjs/js/src/abstract/latoken.js +0 -9
  181. package/dist/cjs/js/src/abstract/lbank.js +0 -9
  182. package/dist/cjs/js/src/abstract/luno.js +0 -9
  183. package/dist/cjs/js/src/abstract/lykke.js +0 -9
  184. package/dist/cjs/js/src/abstract/mercado.js +0 -9
  185. package/dist/cjs/js/src/abstract/mexc.js +0 -9
  186. package/dist/cjs/js/src/abstract/ndax.js +0 -9
  187. package/dist/cjs/js/src/abstract/novadax.js +0 -9
  188. package/dist/cjs/js/src/abstract/oceanex.js +0 -9
  189. package/dist/cjs/js/src/abstract/okcoin.js +0 -9
  190. package/dist/cjs/js/src/abstract/okx.js +0 -9
  191. package/dist/cjs/js/src/abstract/p2b.js +0 -9
  192. package/dist/cjs/js/src/abstract/paymium.js +0 -9
  193. package/dist/cjs/js/src/abstract/phemex.js +0 -9
  194. package/dist/cjs/js/src/abstract/poloniex.js +0 -9
  195. package/dist/cjs/js/src/abstract/poloniexfutures.js +0 -9
  196. package/dist/cjs/js/src/abstract/probit.js +0 -9
  197. package/dist/cjs/js/src/abstract/timex.js +0 -9
  198. package/dist/cjs/js/src/abstract/tokocrypto.js +0 -9
  199. package/dist/cjs/js/src/abstract/upbit.js +0 -9
  200. package/dist/cjs/js/src/abstract/wavesexchange.js +0 -9
  201. package/dist/cjs/js/src/abstract/wazirx.js +0 -9
  202. package/dist/cjs/js/src/abstract/whitebit.js +0 -9
  203. package/dist/cjs/js/src/abstract/woo.js +0 -9
  204. package/dist/cjs/js/src/abstract/yobit.js +0 -9
  205. package/dist/cjs/js/src/abstract/zaif.js +0 -9
  206. package/dist/cjs/js/src/abstract/zonda.js +0 -9
  207. package/dist/cjs/js/src/ace.js +0 -1058
  208. package/dist/cjs/js/src/alpaca.js +0 -1125
  209. package/dist/cjs/js/src/ascendex.js +0 -3365
  210. package/dist/cjs/js/src/base/Exchange.js +0 -5257
  211. package/dist/cjs/js/src/base/Precise.js +0 -263
  212. package/dist/cjs/js/src/base/errors.js +0 -299
  213. package/dist/cjs/js/src/base/functions/crypto.js +0 -78
  214. package/dist/cjs/js/src/base/functions/encode.js +0 -44
  215. package/dist/cjs/js/src/base/functions/generic.js +0 -193
  216. package/dist/cjs/js/src/base/functions/misc.js +0 -96
  217. package/dist/cjs/js/src/base/functions/number.js +0 -297
  218. package/dist/cjs/js/src/base/functions/platform.js +0 -28
  219. package/dist/cjs/js/src/base/functions/rsa.js +0 -34
  220. package/dist/cjs/js/src/base/functions/string.js +0 -48
  221. package/dist/cjs/js/src/base/functions/throttle.js +0 -66
  222. package/dist/cjs/js/src/base/functions/time.js +0 -187
  223. package/dist/cjs/js/src/base/functions/totp.js +0 -24
  224. package/dist/cjs/js/src/base/functions/type.js +0 -162
  225. package/dist/cjs/js/src/base/functions.js +0 -157
  226. package/dist/cjs/js/src/base/ws/Cache.js +0 -254
  227. package/dist/cjs/js/src/base/ws/Client.js +0 -299
  228. package/dist/cjs/js/src/base/ws/Future.js +0 -34
  229. package/dist/cjs/js/src/base/ws/OrderBook.js +0 -107
  230. package/dist/cjs/js/src/base/ws/OrderBookSide.js +0 -281
  231. package/dist/cjs/js/src/base/ws/WsClient.js +0 -69
  232. package/dist/cjs/js/src/bequant.js +0 -33
  233. package/dist/cjs/js/src/bigone.js +0 -2213
  234. package/dist/cjs/js/src/binance.js +0 -9845
  235. package/dist/cjs/js/src/binancecoinm.js +0 -45
  236. package/dist/cjs/js/src/binanceus.js +0 -92
  237. package/dist/cjs/js/src/binanceusdm.js +0 -58
  238. package/dist/cjs/js/src/bingx.js +0 -3846
  239. package/dist/cjs/js/src/bit2c.js +0 -916
  240. package/dist/cjs/js/src/bitbank.js +0 -1000
  241. package/dist/cjs/js/src/bitbay.js +0 -17
  242. package/dist/cjs/js/src/bitbns.js +0 -1220
  243. package/dist/cjs/js/src/bitcoincom.js +0 -17
  244. package/dist/cjs/js/src/bitfinex.js +0 -1670
  245. package/dist/cjs/js/src/bitfinex2.js +0 -2990
  246. package/dist/cjs/js/src/bitflyer.js +0 -1045
  247. package/dist/cjs/js/src/bitforex.js +0 -852
  248. package/dist/cjs/js/src/bitget.js +0 -8295
  249. package/dist/cjs/js/src/bithumb.js +0 -1090
  250. package/dist/cjs/js/src/bitmart.js +0 -4454
  251. package/dist/cjs/js/src/bitmex.js +0 -2881
  252. package/dist/cjs/js/src/bitopro.js +0 -1724
  253. package/dist/cjs/js/src/bitrue.js +0 -3253
  254. package/dist/cjs/js/src/bitso.js +0 -1753
  255. package/dist/cjs/js/src/bitstamp.js +0 -2188
  256. package/dist/cjs/js/src/bitteam.js +0 -2309
  257. package/dist/cjs/js/src/bitvavo.js +0 -1968
  258. package/dist/cjs/js/src/bl3p.js +0 -447
  259. package/dist/cjs/js/src/blockchaincom.js +0 -1160
  260. package/dist/cjs/js/src/btcalpha.js +0 -929
  261. package/dist/cjs/js/src/btcbox.js +0 -565
  262. package/dist/cjs/js/src/btcmarkets.js +0 -1237
  263. package/dist/cjs/js/src/btcturk.js +0 -929
  264. package/dist/cjs/js/src/bybit.js +0 -7650
  265. package/dist/cjs/js/src/cex.js +0 -1693
  266. package/dist/cjs/js/src/coinbase.js +0 -3424
  267. package/dist/cjs/js/src/coinbasepro.js +0 -1866
  268. package/dist/cjs/js/src/coincheck.js +0 -843
  269. package/dist/cjs/js/src/coinex.js +0 -5417
  270. package/dist/cjs/js/src/coinlist.js +0 -2337
  271. package/dist/cjs/js/src/coinmate.js +0 -989
  272. package/dist/cjs/js/src/coinone.js +0 -1185
  273. package/dist/cjs/js/src/coinsph.js +0 -1933
  274. package/dist/cjs/js/src/coinspot.js +0 -548
  275. package/dist/cjs/js/src/cryptocom.js +0 -3007
  276. package/dist/cjs/js/src/currencycom.js +0 -2015
  277. package/dist/cjs/js/src/delta.js +0 -3262
  278. package/dist/cjs/js/src/deribit.js +0 -3306
  279. package/dist/cjs/js/src/digifinex.js +0 -4307
  280. package/dist/cjs/js/src/exmo.js +0 -2645
  281. package/dist/cjs/js/src/fmfwio.js +0 -34
  282. package/dist/cjs/js/src/gate.js +0 -7077
  283. package/dist/cjs/js/src/gateio.js +0 -16
  284. package/dist/cjs/js/src/gemini.js +0 -1801
  285. package/dist/cjs/js/src/hitbtc.js +0 -3660
  286. package/dist/cjs/js/src/hitbtc3.js +0 -19
  287. package/dist/cjs/js/src/hollaex.js +0 -1882
  288. package/dist/cjs/js/src/htx.js +0 -9174
  289. package/dist/cjs/js/src/huobi.js +0 -16
  290. package/dist/cjs/js/src/huobijp.js +0 -1918
  291. package/dist/cjs/js/src/idex.js +0 -1770
  292. package/dist/cjs/js/src/independentreserve.js +0 -761
  293. package/dist/cjs/js/src/indodax.js +0 -1069
  294. package/dist/cjs/js/src/kraken.js +0 -2891
  295. package/dist/cjs/js/src/krakenfutures.js +0 -2407
  296. package/dist/cjs/js/src/kucoin.js +0 -4494
  297. package/dist/cjs/js/src/kucoinfutures.js +0 -2529
  298. package/dist/cjs/js/src/kuna.js +0 -1949
  299. package/dist/cjs/js/src/latoken.js +0 -1729
  300. package/dist/cjs/js/src/lbank.js +0 -2851
  301. package/dist/cjs/js/src/luno.js +0 -1044
  302. package/dist/cjs/js/src/lykke.js +0 -1303
  303. package/dist/cjs/js/src/mercado.js +0 -897
  304. package/dist/cjs/js/src/mexc.js +0 -5407
  305. package/dist/cjs/js/src/ndax.js +0 -2450
  306. package/dist/cjs/js/src/novadax.js +0 -1556
  307. package/dist/cjs/js/src/oceanex.js +0 -964
  308. package/dist/cjs/js/src/okcoin.js +0 -3115
  309. package/dist/cjs/js/src/okx.js +0 -7331
  310. package/dist/cjs/js/src/p2b.js +0 -1243
  311. package/dist/cjs/js/src/paymium.js +0 -597
  312. package/dist/cjs/js/src/phemex.js +0 -4725
  313. package/dist/cjs/js/src/poloniex.js +0 -2356
  314. package/dist/cjs/js/src/poloniexfutures.js +0 -1794
  315. package/dist/cjs/js/src/pro/alpaca.js +0 -714
  316. package/dist/cjs/js/src/pro/ascendex.js +0 -957
  317. package/dist/cjs/js/src/pro/bequant.js +0 -33
  318. package/dist/cjs/js/src/pro/binance.js +0 -2796
  319. package/dist/cjs/js/src/pro/binancecoinm.js +0 -23
  320. package/dist/cjs/js/src/pro/binanceus.js +0 -51
  321. package/dist/cjs/js/src/pro/binanceusdm.js +0 -32
  322. package/dist/cjs/js/src/pro/bingx.js +0 -944
  323. package/dist/cjs/js/src/pro/bitcoincom.js +0 -29
  324. package/dist/cjs/js/src/pro/bitfinex.js +0 -672
  325. package/dist/cjs/js/src/pro/bitfinex2.js +0 -1159
  326. package/dist/cjs/js/src/pro/bitget.js +0 -1733
  327. package/dist/cjs/js/src/pro/bitmart.js +0 -1486
  328. package/dist/cjs/js/src/pro/bitmex.js +0 -1576
  329. package/dist/cjs/js/src/pro/bitopro.js +0 -327
  330. package/dist/cjs/js/src/pro/bitrue.js +0 -462
  331. package/dist/cjs/js/src/pro/bitstamp.js +0 -547
  332. package/dist/cjs/js/src/pro/bitvavo.js +0 -704
  333. package/dist/cjs/js/src/pro/blockchaincom.js +0 -794
  334. package/dist/cjs/js/src/pro/bybit.js +0 -1843
  335. package/dist/cjs/js/src/pro/cex.js +0 -1510
  336. package/dist/cjs/js/src/pro/coinbase.js +0 -561
  337. package/dist/cjs/js/src/pro/coinbasepro.js +0 -968
  338. package/dist/cjs/js/src/pro/coinex.js +0 -1095
  339. package/dist/cjs/js/src/pro/cryptocom.js +0 -1020
  340. package/dist/cjs/js/src/pro/currencycom.js +0 -563
  341. package/dist/cjs/js/src/pro/deribit.js +0 -825
  342. package/dist/cjs/js/src/pro/exmo.js +0 -658
  343. package/dist/cjs/js/src/pro/gate.js +0 -1316
  344. package/dist/cjs/js/src/pro/gateio.js +0 -16
  345. package/dist/cjs/js/src/pro/gemini.js +0 -649
  346. package/dist/cjs/js/src/pro/hitbtc.js +0 -1294
  347. package/dist/cjs/js/src/pro/hollaex.js +0 -597
  348. package/dist/cjs/js/src/pro/htx.js +0 -2388
  349. package/dist/cjs/js/src/pro/huobi.js +0 -16
  350. package/dist/cjs/js/src/pro/huobijp.js +0 -606
  351. package/dist/cjs/js/src/pro/idex.js +0 -714
  352. package/dist/cjs/js/src/pro/independentreserve.js +0 -280
  353. package/dist/cjs/js/src/pro/kraken.js +0 -1364
  354. package/dist/cjs/js/src/pro/krakenfutures.js +0 -1506
  355. package/dist/cjs/js/src/pro/kucoin.js +0 -1054
  356. package/dist/cjs/js/src/pro/kucoinfutures.js +0 -981
  357. package/dist/cjs/js/src/pro/luno.js +0 -322
  358. package/dist/cjs/js/src/pro/mexc.js +0 -1170
  359. package/dist/cjs/js/src/pro/ndax.js +0 -545
  360. package/dist/cjs/js/src/pro/okcoin.js +0 -760
  361. package/dist/cjs/js/src/pro/okx.js +0 -1608
  362. package/dist/cjs/js/src/pro/phemex.js +0 -1511
  363. package/dist/cjs/js/src/pro/poloniex.js +0 -1253
  364. package/dist/cjs/js/src/pro/poloniexfutures.js +0 -1014
  365. package/dist/cjs/js/src/pro/probit.js +0 -586
  366. package/dist/cjs/js/src/pro/upbit.js +0 -234
  367. package/dist/cjs/js/src/pro/wazirx.js +0 -776
  368. package/dist/cjs/js/src/pro/whitebit.js +0 -927
  369. package/dist/cjs/js/src/pro/woo.js +0 -895
  370. package/dist/cjs/js/src/probit.js +0 -1867
  371. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +0 -401
  372. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -195
  373. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -308
  374. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -554
  375. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -94
  376. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -70
  377. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -91
  378. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -16
  379. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -1760
  380. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -52
  381. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -81
  382. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -376
  383. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -70
  384. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -1580
  385. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -74
  386. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -24
  387. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -158
  388. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -429
  389. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -176
  390. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -324
  391. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -163
  392. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -245
  393. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -1018
  394. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +0 -383
  395. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +0 -258
  396. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +0 -53
  397. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +0 -120
  398. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +0 -69
  399. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +0 -7
  400. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +0 -83
  401. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +0 -240
  402. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +0 -91
  403. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +0 -130
  404. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +0 -214
  405. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +0 -239
  406. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +0 -93
  407. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +0 -354
  408. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -16
  409. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +0 -20
  410. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -30
  411. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +0 -239
  412. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +0 -372
  413. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +0 -273
  414. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +0 -139
  415. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -14
  416. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -16
  417. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +0 -81
  418. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -292
  419. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +0 -103
  420. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -140
  421. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -175
  422. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -95
  423. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +0 -7
  424. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +0 -383
  425. package/dist/cjs/js/src/timex.js +0 -1562
  426. package/dist/cjs/js/src/tokocrypto.js +0 -2542
  427. package/dist/cjs/js/src/upbit.js +0 -1844
  428. package/dist/cjs/js/src/wavesexchange.js +0 -2607
  429. package/dist/cjs/js/src/wazirx.js +0 -953
  430. package/dist/cjs/js/src/whitebit.js +0 -2309
  431. package/dist/cjs/js/src/woo.js +0 -2769
  432. package/dist/cjs/js/src/yobit.js +0 -1314
  433. package/dist/cjs/js/src/zaif.js +0 -736
  434. package/dist/cjs/js/src/zonda.js +0 -1883
  435. package/dist/cjs/src/abstract/bitpanda.js +0 -9
  436. package/test.ts +0 -0
  437. /package/dist/cjs/{js/src/abstract/ace.js → src/abstract/onetrading.js} +0 -0
  438. /package/dist/cjs/{js/src → src}/pro/coinone.js +0 -0
  439. /package/js/src/abstract/{bitpanda.js → onetrading.js} +0 -0
@@ -1,1364 +0,0 @@
1
- 'use strict';
2
-
3
- var kraken$1 = require('../kraken.js');
4
- var errors = require('../base/errors.js');
5
- var Cache = require('../base/ws/Cache.js');
6
- var Precise = require('../base/Precise.js');
7
-
8
- // ---------------------------------------------------------------------------
9
- // ---------------------------------------------------------------------------
10
- class kraken extends kraken$1 {
11
- describe() {
12
- return this.deepExtend(super.describe(), {
13
- 'has': {
14
- 'ws': true,
15
- 'watchBalance': false,
16
- 'watchMyTrades': true,
17
- 'watchOHLCV': true,
18
- 'watchOrderBook': true,
19
- 'watchOrders': true,
20
- 'watchTicker': true,
21
- 'watchTickers': false,
22
- 'watchTrades': true,
23
- 'createOrderWs': true,
24
- 'editOrderWs': true,
25
- 'cancelOrderWs': true,
26
- 'cancelOrdersWs': true,
27
- 'cancelAllOrdersWs': true,
28
- // 'watchHeartbeat': true,
29
- // 'watchStatus': true,
30
- },
31
- 'urls': {
32
- 'api': {
33
- 'ws': {
34
- 'public': 'wss://ws.kraken.com',
35
- 'private': 'wss://ws-auth.kraken.com',
36
- 'beta': 'wss://beta-ws.kraken.com',
37
- 'beta-private': 'wss://beta-ws-auth.kraken.com',
38
- },
39
- },
40
- },
41
- // 'versions': {
42
- // 'ws': '0.2.0',
43
- // },
44
- 'options': {
45
- 'tradesLimit': 1000,
46
- 'OHLCVLimit': 1000,
47
- 'ordersLimit': 1000,
48
- 'symbolsByOrderId': {},
49
- 'checksum': true,
50
- },
51
- 'exceptions': {
52
- 'ws': {
53
- 'exact': {
54
- 'Event(s) not found': errors.BadRequest,
55
- },
56
- 'broad': {
57
- 'Already subscribed': errors.BadRequest,
58
- 'Currency pair not in ISO 4217-A3 format': errors.BadSymbol,
59
- 'Malformed request': errors.BadRequest,
60
- 'Pair field must be an array': errors.BadRequest,
61
- 'Pair field unsupported for this subscription type': errors.BadRequest,
62
- 'Pair(s) not found': errors.BadSymbol,
63
- 'Subscription book depth must be an integer': errors.BadRequest,
64
- 'Subscription depth not supported': errors.BadRequest,
65
- 'Subscription field must be an object': errors.BadRequest,
66
- 'Subscription name invalid': errors.BadRequest,
67
- 'Subscription object unsupported field': errors.BadRequest,
68
- 'Subscription ohlc interval must be an integer': errors.BadRequest,
69
- 'Subscription ohlc interval not supported': errors.BadRequest,
70
- 'Subscription ohlc requires interval': errors.BadRequest,
71
- 'EAccount:Invalid permissions': errors.PermissionDenied,
72
- 'EAuth:Account temporary disabled': errors.AccountSuspended,
73
- 'EAuth:Account unconfirmed': errors.AuthenticationError,
74
- 'EAuth:Rate limit exceeded': errors.RateLimitExceeded,
75
- 'EAuth:Too many requests': errors.RateLimitExceeded,
76
- 'EDatabase: Internal error (to be deprecated)': errors.ExchangeError,
77
- 'EGeneral:Internal error[:<code>]': errors.ExchangeError,
78
- 'EGeneral:Invalid arguments': errors.BadRequest,
79
- 'EOrder:Cannot open opposing position': errors.InvalidOrder,
80
- 'EOrder:Cannot open position': errors.InvalidOrder,
81
- 'EOrder:Insufficient funds (insufficient user funds)': errors.InsufficientFunds,
82
- 'EOrder:Insufficient margin (exchange does not have sufficient funds to allow margin trading)': errors.InsufficientFunds,
83
- 'EOrder:Invalid price': errors.InvalidOrder,
84
- 'EOrder:Margin allowance exceeded': errors.InvalidOrder,
85
- 'EOrder:Margin level too low': errors.InvalidOrder,
86
- 'EOrder:Margin position size exceeded (client would exceed the maximum position size for this pair)': errors.InvalidOrder,
87
- 'EOrder:Order minimum not met (volume too low)': errors.InvalidOrder,
88
- 'EOrder:Orders limit exceeded': errors.InvalidOrder,
89
- 'EOrder:Positions limit exceeded': errors.InvalidOrder,
90
- 'EOrder:Rate limit exceeded': errors.RateLimitExceeded,
91
- 'EOrder:Scheduled orders limit exceeded': errors.InvalidOrder,
92
- 'EOrder:Unknown position': errors.OrderNotFound,
93
- 'EOrder:Unknown order': errors.OrderNotFound,
94
- 'EOrder:Invalid order': errors.InvalidOrder,
95
- 'EService:Deadline elapsed': errors.ExchangeNotAvailable,
96
- 'EService:Market in cancel_only mode': errors.NotSupported,
97
- 'EService:Market in limit_only mode': errors.NotSupported,
98
- 'EService:Market in post_only mode': errors.NotSupported,
99
- 'EService:Unavailable': errors.ExchangeNotAvailable,
100
- 'ETrade:Invalid request': errors.BadRequest,
101
- },
102
- },
103
- },
104
- });
105
- }
106
- async createOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
107
- /**
108
- * @method
109
- * @name kraken#createOrderWs
110
- * @see https://docs.kraken.com/websockets/#message-addOrder
111
- * @description create a trade order
112
- * @param {string} symbol unified symbol of the market to create an order in
113
- * @param {string} type 'market' or 'limit'
114
- * @param {string} side 'buy' or 'sell'
115
- * @param {float} amount how much of currency you want to trade in units of base currency
116
- * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
117
- * @param {object} [params] extra parameters specific to the exchange API endpoint
118
- * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
119
- */
120
- await this.loadMarkets();
121
- const token = await this.authenticate();
122
- const market = this.market(symbol);
123
- const url = this.urls['api']['ws']['private'];
124
- const requestId = this.requestId();
125
- const messageHash = requestId;
126
- let request = {
127
- 'event': 'addOrder',
128
- 'token': token,
129
- 'reqid': requestId,
130
- 'ordertype': type,
131
- 'type': side,
132
- 'pair': market['wsId'],
133
- 'volume': this.amountToPrecision(symbol, amount),
134
- };
135
- [request, params] = this.orderRequest('createOrderWs()', symbol, type, request, price, params);
136
- return await this.watch(url, messageHash, this.extend(request, params), messageHash);
137
- }
138
- handleCreateEditOrder(client, message) {
139
- //
140
- // createOrder
141
- // {
142
- // "descr": "sell 0.00010000 XBTUSDT @ market",
143
- // "event": "addOrderStatus",
144
- // "reqid": 1,
145
- // "status": "ok",
146
- // "txid": "OAVXZH-XIE54-JCYYDG"
147
- // }
148
- // editOrder
149
- // {
150
- // "descr": "order edited price = 9000.00000000",
151
- // "event": "editOrderStatus",
152
- // "originaltxid": "O65KZW-J4AW3-VFS74A",
153
- // "reqid": 3,
154
- // "status": "ok",
155
- // "txid": "OTI672-HJFAO-XOIPPK"
156
- // }
157
- //
158
- const order = this.parseOrder(message);
159
- const messageHash = this.safeValue(message, 'reqid');
160
- client.resolve(order, messageHash);
161
- }
162
- async editOrderWs(id, symbol, type, side, amount, price = undefined, params = {}) {
163
- /**
164
- * @method
165
- * @name kraken#editOrderWs
166
- * @description edit a trade order
167
- * @see https://docs.kraken.com/websockets/#message-editOrder
168
- * @param {string} id order id
169
- * @param {string} symbol unified symbol of the market to create an order in
170
- * @param {string} type 'market' or 'limit'
171
- * @param {string} side 'buy' or 'sell'
172
- * @param {float} amount how much of the currency you want to trade in units of the base currency
173
- * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
174
- * @param {object} [params] extra parameters specific to the exchange API endpoint
175
- * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
176
- */
177
- await this.loadMarkets();
178
- const token = await this.authenticate();
179
- const market = this.market(symbol);
180
- const url = this.urls['api']['ws']['private'];
181
- const requestId = this.requestId();
182
- const messageHash = requestId;
183
- let request = {
184
- 'event': 'editOrder',
185
- 'token': token,
186
- 'reqid': requestId,
187
- 'orderid': id,
188
- 'pair': market['wsId'],
189
- 'volume': this.amountToPrecision(symbol, amount),
190
- };
191
- [request, params] = this.orderRequest('editOrderWs()', symbol, type, request, price, params);
192
- return await this.watch(url, messageHash, this.extend(request, params), messageHash);
193
- }
194
- async cancelOrdersWs(ids, symbol = undefined, params = {}) {
195
- /**
196
- * @method
197
- * @name kraken#cancelOrdersWs
198
- * @see https://docs.kraken.com/websockets/#message-cancelOrder
199
- * @description cancel multiple orders
200
- * @param {string[]} ids order ids
201
- * @param {string} symbol unified market symbol, default is undefined
202
- * @param {object} [params] extra parameters specific to the exchange API endpoint
203
- * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
204
- */
205
- await this.loadMarkets();
206
- const token = await this.authenticate();
207
- const url = this.urls['api']['ws']['private'];
208
- const requestId = this.requestId();
209
- const messageHash = requestId;
210
- const request = {
211
- 'event': 'cancelOrder',
212
- 'token': token,
213
- 'reqid': requestId,
214
- 'txid': ids,
215
- };
216
- return await this.watch(url, messageHash, this.extend(request, params), messageHash);
217
- }
218
- async cancelOrderWs(id, symbol = undefined, params = {}) {
219
- /**
220
- * @method
221
- * @name kraken#cancelOrderWs
222
- * @see https://docs.kraken.com/websockets/#message-cancelOrder
223
- * @description cancels an open order
224
- * @param {string} id order id
225
- * @param {string} symbol unified symbol of the market the order was made in
226
- * @param {object} [params] extra parameters specific to the exchange API endpoint
227
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
228
- */
229
- await this.loadMarkets();
230
- const token = await this.authenticate();
231
- const url = this.urls['api']['ws']['private'];
232
- const requestId = this.requestId();
233
- const messageHash = requestId;
234
- const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId', id);
235
- params = this.omit(params, ['userref', 'clientOrderId']);
236
- const request = {
237
- 'event': 'cancelOrder',
238
- 'token': token,
239
- 'reqid': requestId,
240
- 'txid': [clientOrderId],
241
- };
242
- return await this.watch(url, messageHash, this.extend(request, params), messageHash);
243
- }
244
- handleCancelOrder(client, message) {
245
- //
246
- // success
247
- // {
248
- // "event": "cancelOrderStatus",
249
- // "status": "ok"
250
- // "reqid": 1,
251
- // }
252
- //
253
- const reqId = this.safeValue(message, 'reqid');
254
- client.resolve(message, reqId);
255
- }
256
- async cancelAllOrdersWs(symbol = undefined, params = {}) {
257
- /**
258
- * @method
259
- * @name kraken#cancelAllOrdersWs
260
- * @see https://docs.kraken.com/websockets/#message-cancelAll
261
- * @description cancel all open orders
262
- * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
263
- * @param {object} [params] extra parameters specific to the exchange API endpoint
264
- * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
265
- */
266
- if (symbol !== undefined) {
267
- throw new errors.NotSupported(this.id + ' cancelAllOrdersWs () does not support cancelling orders in a specific market.');
268
- }
269
- await this.loadMarkets();
270
- const token = await this.authenticate();
271
- const url = this.urls['api']['ws']['private'];
272
- const requestId = this.requestId();
273
- const messageHash = requestId;
274
- const request = {
275
- 'event': 'cancelAll',
276
- 'token': token,
277
- 'reqid': requestId,
278
- };
279
- return await this.watch(url, messageHash, this.extend(request, params), messageHash);
280
- }
281
- handleCancelAllOrders(client, message) {
282
- //
283
- // {
284
- // "count": 2,
285
- // "event": "cancelAllStatus",
286
- // "status": "ok",
287
- // "reqId": 1
288
- // }
289
- //
290
- const reqId = this.safeValue(message, 'reqid');
291
- client.resolve(message, reqId);
292
- }
293
- handleTicker(client, message, subscription) {
294
- //
295
- // [
296
- // 0, // channelID
297
- // {
298
- // "a": [ "5525.40000", 1, "1.000" ], // ask, wholeAskVolume, askVolume
299
- // "b": [ "5525.10000", 1, "1.000" ], // bid, wholeBidVolume, bidVolume
300
- // "c": [ "5525.10000", "0.00398963" ], // closing price, volume
301
- // "h": [ "5783.00000", "5783.00000" ], // high price today, high price 24h ago
302
- // "l": [ "5505.00000", "5505.00000" ], // low price today, low price 24h ago
303
- // "o": [ "5760.70000", "5763.40000" ], // open price today, open price 24h ago
304
- // "p": [ "5631.44067", "5653.78939" ], // vwap today, vwap 24h ago
305
- // "t": [ 11493, 16267 ], // number of trades today, 24 hours ago
306
- // "v": [ "2634.11501494", "3591.17907851" ], // volume today, volume 24 hours ago
307
- // },
308
- // "ticker",
309
- // "XBT/USD"
310
- // ]
311
- //
312
- const wsName = message[3];
313
- const name = 'ticker';
314
- const messageHash = name + ':' + wsName;
315
- const market = this.safeValue(this.options['marketsByWsName'], wsName);
316
- const symbol = market['symbol'];
317
- const ticker = message[1];
318
- const vwap = this.safeString(ticker['p'], 0);
319
- let quoteVolume = undefined;
320
- const baseVolume = this.safeString(ticker['v'], 0);
321
- if (baseVolume !== undefined && vwap !== undefined) {
322
- quoteVolume = Precise["default"].stringMul(baseVolume, vwap);
323
- }
324
- const last = this.safeString(ticker['c'], 0);
325
- const result = this.safeTicker({
326
- 'symbol': symbol,
327
- 'timestamp': undefined,
328
- 'datetime': undefined,
329
- 'high': this.safeString(ticker['h'], 0),
330
- 'low': this.safeString(ticker['l'], 0),
331
- 'bid': this.safeString(ticker['b'], 0),
332
- 'bidVolume': this.safeString(ticker['b'], 2),
333
- 'ask': this.safeString(ticker['a'], 0),
334
- 'askVolume': this.safeString(ticker['a'], 2),
335
- 'vwap': vwap,
336
- 'open': this.safeString(ticker['o'], 0),
337
- 'close': last,
338
- 'last': last,
339
- 'previousClose': undefined,
340
- 'change': undefined,
341
- 'percentage': undefined,
342
- 'average': undefined,
343
- 'baseVolume': baseVolume,
344
- 'quoteVolume': quoteVolume,
345
- 'info': ticker,
346
- });
347
- // todo add support for multiple tickers (may be tricky)
348
- // kraken confirms multi-pair subscriptions separately one by one
349
- // trigger correct watchTickers calls upon receiving any of symbols
350
- this.tickers[symbol] = result;
351
- client.resolve(result, messageHash);
352
- }
353
- handleTrades(client, message, subscription) {
354
- //
355
- // [
356
- // 0, // channelID
357
- // [ // price volume time side type misc
358
- // [ "5541.20000", "0.15850568", "1534614057.321597", "s", "l", "" ],
359
- // [ "6060.00000", "0.02455000", "1534614057.324998", "b", "l", "" ],
360
- // ],
361
- // "trade",
362
- // "XBT/USD"
363
- // ]
364
- //
365
- const wsName = this.safeString(message, 3);
366
- const name = this.safeString(message, 2);
367
- const messageHash = name + ':' + wsName;
368
- const market = this.safeValue(this.options['marketsByWsName'], wsName);
369
- const symbol = market['symbol'];
370
- let stored = this.safeValue(this.trades, symbol);
371
- if (stored === undefined) {
372
- const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
373
- stored = new Cache.ArrayCache(limit);
374
- this.trades[symbol] = stored;
375
- }
376
- const trades = this.safeValue(message, 1, []);
377
- const parsed = this.parseTrades(trades, market);
378
- for (let i = 0; i < parsed.length; i++) {
379
- stored.append(parsed[i]);
380
- }
381
- client.resolve(stored, messageHash);
382
- }
383
- handleOHLCV(client, message, subscription) {
384
- //
385
- // [
386
- // 216, // channelID
387
- // [
388
- // "1574454214.962096", // Time, seconds since epoch
389
- // "1574454240.000000", // End timestamp of the interval
390
- // "0.020970", // Open price at midnight UTC
391
- // "0.020970", // Intraday high price
392
- // "0.020970", // Intraday low price
393
- // "0.020970", // Closing price at midnight UTC
394
- // "0.020970", // Volume weighted average price
395
- // "0.08636138", // Accumulated volume today
396
- // 1, // Number of trades today
397
- // ],
398
- // "ohlc-1", // Channel Name of subscription
399
- // "ETH/XBT", // Asset pair
400
- // ]
401
- //
402
- const info = this.safeValue(subscription, 'subscription', {});
403
- const interval = this.safeInteger(info, 'interval');
404
- const name = this.safeString(info, 'name');
405
- const wsName = this.safeString(message, 3);
406
- const market = this.safeValue(this.options['marketsByWsName'], wsName);
407
- const symbol = market['symbol'];
408
- const timeframe = this.findTimeframe(interval);
409
- const duration = this.parseTimeframe(timeframe);
410
- if (timeframe !== undefined) {
411
- const candle = this.safeValue(message, 1);
412
- const messageHash = name + ':' + timeframe + ':' + wsName;
413
- let timestamp = this.safeFloat(candle, 1);
414
- timestamp -= duration;
415
- const ts = this.parseToInt(timestamp * 1000);
416
- const result = [
417
- ts,
418
- this.safeFloat(candle, 2),
419
- this.safeFloat(candle, 3),
420
- this.safeFloat(candle, 4),
421
- this.safeFloat(candle, 5),
422
- this.safeFloat(candle, 7),
423
- ];
424
- this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
425
- let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
426
- if (stored === undefined) {
427
- const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
428
- stored = new Cache.ArrayCacheByTimestamp(limit);
429
- this.ohlcvs[symbol][timeframe] = stored;
430
- }
431
- stored.append(result);
432
- client.resolve(stored, messageHash);
433
- }
434
- }
435
- requestId() {
436
- // their support said that reqid must be an int32, not documented
437
- const reqid = this.sum(this.safeInteger(this.options, 'reqid', 0), 1);
438
- this.options['reqid'] = reqid;
439
- return reqid;
440
- }
441
- async watchPublic(name, symbol, params = {}) {
442
- await this.loadMarkets();
443
- const market = this.market(symbol);
444
- const wsName = this.safeValue(market['info'], 'wsname');
445
- const messageHash = name + ':' + wsName;
446
- const url = this.urls['api']['ws']['public'];
447
- const requestId = this.requestId();
448
- const subscribe = {
449
- 'event': 'subscribe',
450
- 'reqid': requestId,
451
- 'pair': [
452
- wsName,
453
- ],
454
- 'subscription': {
455
- 'name': name,
456
- },
457
- };
458
- const request = this.deepExtend(subscribe, params);
459
- return await this.watch(url, messageHash, request, messageHash);
460
- }
461
- async watchTicker(symbol, params = {}) {
462
- /**
463
- * @method
464
- * @name kraken#watchTicker
465
- * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
466
- * @param {string} symbol unified symbol of the market to fetch the ticker for
467
- * @param {object} [params] extra parameters specific to the exchange API endpoint
468
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
469
- */
470
- return await this.watchPublic('ticker', symbol, params);
471
- }
472
- async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
473
- /**
474
- * @method
475
- * @name kraken#watchTrades
476
- * @description get the list of most recent trades for a particular symbol
477
- * @param {string} symbol unified symbol of the market to fetch trades for
478
- * @param {int} [since] timestamp in ms of the earliest trade to fetch
479
- * @param {int} [limit] the maximum amount of trades to fetch
480
- * @param {object} [params] extra parameters specific to the exchange API endpoint
481
- * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
482
- */
483
- await this.loadMarkets();
484
- symbol = this.symbol(symbol);
485
- const name = 'trade';
486
- const trades = await this.watchPublic(name, symbol, params);
487
- if (this.newUpdates) {
488
- limit = trades.getLimit(symbol, limit);
489
- }
490
- return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
491
- }
492
- async watchOrderBook(symbol, limit = undefined, params = {}) {
493
- /**
494
- * @method
495
- * @name kraken#watchOrderBook
496
- * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
497
- * @param {string} symbol unified symbol of the market to fetch the order book for
498
- * @param {int} [limit] the maximum amount of order book entries to return
499
- * @param {object} [params] extra parameters specific to the exchange API endpoint
500
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
501
- */
502
- const name = 'book';
503
- const request = {};
504
- if (limit !== undefined) {
505
- if ((limit === 10) || (limit === 25) || (limit === 100) || (limit === 500) || (limit === 1000)) {
506
- request['subscription'] = {
507
- 'depth': limit, // default 10, valid options 10, 25, 100, 500, 1000
508
- };
509
- }
510
- else {
511
- throw new errors.NotSupported(this.id + ' watchOrderBook accepts limit values of 10, 25, 100, 500 and 1000 only');
512
- }
513
- }
514
- const orderbook = await this.watchPublic(name, symbol, this.extend(request, params));
515
- return orderbook.limit();
516
- }
517
- async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
518
- /**
519
- * @method
520
- * @name kraken#watchOHLCV
521
- * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
522
- * @param {string} symbol unified symbol of the market to fetch OHLCV data for
523
- * @param {string} timeframe the length of time each candle represents
524
- * @param {int} [since] timestamp in ms of the earliest candle to fetch
525
- * @param {int} [limit] the maximum amount of candles to fetch
526
- * @param {object} [params] extra parameters specific to the exchange API endpoint
527
- * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
528
- */
529
- await this.loadMarkets();
530
- const name = 'ohlc';
531
- const market = this.market(symbol);
532
- symbol = market['symbol'];
533
- const wsName = this.safeValue(market['info'], 'wsname');
534
- const messageHash = name + ':' + timeframe + ':' + wsName;
535
- const url = this.urls['api']['ws']['public'];
536
- const requestId = this.requestId();
537
- const subscribe = {
538
- 'event': 'subscribe',
539
- 'reqid': requestId,
540
- 'pair': [
541
- wsName,
542
- ],
543
- 'subscription': {
544
- 'name': name,
545
- 'interval': this.safeValue(this.timeframes, timeframe, timeframe),
546
- },
547
- };
548
- const request = this.deepExtend(subscribe, params);
549
- const ohlcv = await this.watch(url, messageHash, request, messageHash);
550
- if (this.newUpdates) {
551
- limit = ohlcv.getLimit(symbol, limit);
552
- }
553
- return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
554
- }
555
- async loadMarkets(reload = false, params = {}) {
556
- const markets = await super.loadMarkets(reload, params);
557
- let marketsByWsName = this.safeValue(this.options, 'marketsByWsName');
558
- if ((marketsByWsName === undefined) || reload) {
559
- marketsByWsName = {};
560
- for (let i = 0; i < this.symbols.length; i++) {
561
- const symbol = this.symbols[i];
562
- const market = this.markets[symbol];
563
- if (market['darkpool']) {
564
- const info = this.safeValue(market, 'info', {});
565
- const altname = this.safeString(info, 'altname');
566
- const wsName = altname.slice(0, 3) + '/' + altname.slice(3);
567
- marketsByWsName[wsName] = market;
568
- }
569
- else {
570
- const info = this.safeValue(market, 'info', {});
571
- const wsName = this.safeString(info, 'wsname');
572
- marketsByWsName[wsName] = market;
573
- }
574
- }
575
- this.options['marketsByWsName'] = marketsByWsName;
576
- }
577
- return markets;
578
- }
579
- async watchHeartbeat(params = {}) {
580
- await this.loadMarkets();
581
- const event = 'heartbeat';
582
- const url = this.urls['api']['ws']['public'];
583
- return await this.watch(url, event);
584
- }
585
- handleHeartbeat(client, message) {
586
- //
587
- // every second (approx) if no other updates are sent
588
- //
589
- // { "event": "heartbeat" }
590
- //
591
- const event = this.safeString(message, 'event');
592
- client.resolve(message, event);
593
- }
594
- handleOrderBook(client, message, subscription) {
595
- //
596
- // first message (snapshot)
597
- //
598
- // [
599
- // 1234, // channelID
600
- // {
601
- // "as": [
602
- // [ "5541.30000", "2.50700000", "1534614248.123678" ],
603
- // [ "5541.80000", "0.33000000", "1534614098.345543" ],
604
- // [ "5542.70000", "0.64700000", "1534614244.654432" ]
605
- // ],
606
- // "bs": [
607
- // [ "5541.20000", "1.52900000", "1534614248.765567" ],
608
- // [ "5539.90000", "0.30000000", "1534614241.769870" ],
609
- // [ "5539.50000", "5.00000000", "1534613831.243486" ]
610
- // ]
611
- // },
612
- // "book-10",
613
- // "XBT/USD"
614
- // ]
615
- //
616
- // subsequent updates
617
- //
618
- // [
619
- // 1234,
620
- // { // optional
621
- // "a": [
622
- // [ "5541.30000", "2.50700000", "1534614248.456738" ],
623
- // [ "5542.50000", "0.40100000", "1534614248.456738" ]
624
- // ]
625
- // },
626
- // { // optional
627
- // "b": [
628
- // [ "5541.30000", "0.00000000", "1534614335.345903" ]
629
- // ]
630
- // },
631
- // "book-10",
632
- // "XBT/USD"
633
- // ]
634
- //
635
- const messageLength = message.length;
636
- const wsName = message[messageLength - 1];
637
- const bookDepthString = message[messageLength - 2];
638
- const parts = bookDepthString.split('-');
639
- const depth = this.safeInteger(parts, 1, 10);
640
- const market = this.safeValue(this.options['marketsByWsName'], wsName);
641
- const symbol = market['symbol'];
642
- let timestamp = undefined;
643
- const messageHash = 'book:' + wsName;
644
- // if this is a snapshot
645
- if ('as' in message[1]) {
646
- // todo get depth from marketsByWsName
647
- this.orderbooks[symbol] = this.orderBook({}, depth);
648
- const orderbook = this.orderbooks[symbol];
649
- const sides = {
650
- 'as': 'asks',
651
- 'bs': 'bids',
652
- };
653
- const keys = Object.keys(sides);
654
- for (let i = 0; i < keys.length; i++) {
655
- const key = keys[i];
656
- const side = sides[key];
657
- const bookside = orderbook[side];
658
- const deltas = this.safeValue(message[1], key, []);
659
- timestamp = this.handleDeltas(bookside, deltas, timestamp);
660
- }
661
- orderbook['symbol'] = symbol;
662
- orderbook['timestamp'] = timestamp;
663
- orderbook['datetime'] = this.iso8601(timestamp);
664
- client.resolve(orderbook, messageHash);
665
- }
666
- else {
667
- const orderbook = this.orderbooks[symbol];
668
- // else, if this is an orderbook update
669
- let a = undefined;
670
- let b = undefined;
671
- let c = undefined;
672
- if (messageLength === 5) {
673
- a = this.safeValue(message[1], 'a', []);
674
- b = this.safeValue(message[2], 'b', []);
675
- c = this.safeInteger(message[1], 'c');
676
- c = this.safeInteger(message[2], 'c', c);
677
- }
678
- else {
679
- c = this.safeInteger(message[1], 'c');
680
- if ('a' in message[1]) {
681
- a = this.safeValue(message[1], 'a', []);
682
- }
683
- else {
684
- b = this.safeValue(message[1], 'b', []);
685
- }
686
- }
687
- const storedAsks = orderbook['asks'];
688
- const storedBids = orderbook['bids'];
689
- let example = undefined;
690
- if (a !== undefined) {
691
- timestamp = this.handleDeltas(storedAsks, a, timestamp);
692
- example = this.safeValue(a, 0);
693
- }
694
- if (b !== undefined) {
695
- timestamp = this.handleDeltas(storedBids, b, timestamp);
696
- example = this.safeValue(b, 0);
697
- }
698
- // don't remove this line or I will poop on your face
699
- orderbook.limit();
700
- const checksum = this.safeValue(this.options, 'checksum', true);
701
- if (checksum) {
702
- const priceString = this.safeString(example, 0);
703
- const amountString = this.safeString(example, 1);
704
- const priceParts = priceString.split('.');
705
- const amountParts = amountString.split('.');
706
- const priceLength = priceParts[1].length - 0;
707
- const amountLength = amountParts[1].length - 0;
708
- const payloadArray = [];
709
- if (c !== undefined) {
710
- for (let i = 0; i < 10; i++) {
711
- const formatted = this.formatNumber(storedAsks[i][0], priceLength) + this.formatNumber(storedAsks[i][1], amountLength);
712
- payloadArray.push(formatted);
713
- }
714
- for (let i = 0; i < 10; i++) {
715
- const formatted = this.formatNumber(storedBids[i][0], priceLength) + this.formatNumber(storedBids[i][1], amountLength);
716
- payloadArray.push(formatted);
717
- }
718
- }
719
- const payload = payloadArray.join('');
720
- const localChecksum = this.crc32(payload, false);
721
- if (localChecksum !== c) {
722
- const error = new errors.InvalidNonce(this.id + ' invalid checksum');
723
- client.reject(error, messageHash);
724
- }
725
- }
726
- orderbook['symbol'] = symbol;
727
- orderbook['timestamp'] = timestamp;
728
- orderbook['datetime'] = this.iso8601(timestamp);
729
- client.resolve(orderbook, messageHash);
730
- }
731
- }
732
- formatNumber(n, length) {
733
- const stringNumber = this.numberToString(n);
734
- const parts = stringNumber.split('.');
735
- const integer = this.safeString(parts, 0);
736
- const decimals = this.safeString(parts, 1, '');
737
- const paddedDecimals = decimals.padEnd(length, '0');
738
- const joined = integer + paddedDecimals;
739
- let i = 0;
740
- while (joined[i] === '0') {
741
- i += 1;
742
- }
743
- if (i > 0) {
744
- return joined.slice(i);
745
- }
746
- else {
747
- return joined;
748
- }
749
- }
750
- handleDeltas(bookside, deltas, timestamp = undefined) {
751
- for (let j = 0; j < deltas.length; j++) {
752
- const delta = deltas[j];
753
- const price = this.parseNumber(delta[0]);
754
- const amount = this.parseNumber(delta[1]);
755
- const oldTimestamp = timestamp ? timestamp : 0;
756
- timestamp = Math.max(oldTimestamp, this.parseToInt(parseFloat(delta[2]) * 1000));
757
- bookside.store(price, amount);
758
- }
759
- return timestamp;
760
- }
761
- handleSystemStatus(client, message) {
762
- //
763
- // todo: answer the question whether handleSystemStatus should be renamed
764
- // and unified as handleStatus for any usage pattern that
765
- // involves system status and maintenance updates
766
- //
767
- // {
768
- // "connectionID": 15527282728335292000,
769
- // "event": "systemStatus",
770
- // "status": "online", // online|maintenance|(custom status tbd)
771
- // "version": "0.2.0"
772
- // }
773
- //
774
- return message;
775
- }
776
- async authenticate(params = {}) {
777
- const url = this.urls['api']['ws']['private'];
778
- const client = this.client(url);
779
- const authenticated = 'authenticated';
780
- let subscription = this.safeValue(client.subscriptions, authenticated);
781
- if (subscription === undefined) {
782
- const response = await this.privatePostGetWebSocketsToken(params);
783
- //
784
- // {
785
- // "error":[],
786
- // "result":{
787
- // "token":"xeAQ\/RCChBYNVh53sTv1yZ5H4wIbwDF20PiHtTF+4UI",
788
- // "expires":900
789
- // }
790
- // }
791
- //
792
- subscription = this.safeValue(response, 'result');
793
- client.subscriptions[authenticated] = subscription;
794
- }
795
- return this.safeString(subscription, 'token');
796
- }
797
- async watchPrivate(name, symbol = undefined, since = undefined, limit = undefined, params = {}) {
798
- await this.loadMarkets();
799
- const token = await this.authenticate();
800
- const subscriptionHash = name;
801
- let messageHash = name;
802
- if (symbol !== undefined) {
803
- symbol = this.symbol(symbol);
804
- messageHash += ':' + symbol;
805
- }
806
- const url = this.urls['api']['ws']['private'];
807
- const requestId = this.requestId();
808
- const subscribe = {
809
- 'event': 'subscribe',
810
- 'reqid': requestId,
811
- 'subscription': {
812
- 'name': name,
813
- 'token': token,
814
- },
815
- };
816
- const request = this.deepExtend(subscribe, params);
817
- const result = await this.watch(url, messageHash, request, subscriptionHash);
818
- if (this.newUpdates) {
819
- limit = result.getLimit(symbol, limit);
820
- }
821
- return this.filterBySymbolSinceLimit(result, symbol, since, limit);
822
- }
823
- async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
824
- /**
825
- * @method
826
- * @name kraken#watchMyTrades
827
- * @description watches information on multiple trades made by the user
828
- * @param {string} symbol unified market symbol of the market trades were made in
829
- * @param {int} [since] the earliest time in ms to fetch trades for
830
- * @param {int} [limit] the maximum number of trade structures to retrieve
831
- * @param {object} [params] extra parameters specific to the exchange API endpoint
832
- * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
833
- */
834
- return await this.watchPrivate('ownTrades', symbol, since, limit, params);
835
- }
836
- handleMyTrades(client, message, subscription = undefined) {
837
- //
838
- // [
839
- // [
840
- // {
841
- // "TT5UC3-GOIRW-6AZZ6R": {
842
- // "cost": "1493.90107",
843
- // "fee": "3.88415",
844
- // "margin": "0.00000",
845
- // "ordertxid": "OTLAS3-RRHUF-NDWH5A",
846
- // "ordertype": "market",
847
- // "pair": "XBT/USDT",
848
- // "postxid": "TKH2SE-M7IF5-CFI7LT",
849
- // "price": "6851.50005",
850
- // "time": "1586822919.335498",
851
- // "type": "sell",
852
- // "vol": "0.21804000"
853
- // }
854
- // },
855
- // {
856
- // "TIY6G4-LKLAI-Y3GD4A": {
857
- // "cost": "22.17134",
858
- // "fee": "0.05765",
859
- // "margin": "0.00000",
860
- // "ordertxid": "ODQXS7-MOLK6-ICXKAA",
861
- // "ordertype": "market",
862
- // "pair": "ETH/USD",
863
- // "postxid": "TKH2SE-M7IF5-CFI7LT",
864
- // "price": "169.97999",
865
- // "time": "1586340530.895739",
866
- // "type": "buy",
867
- // "vol": "0.13043500"
868
- // }
869
- // },
870
- // ],
871
- // "ownTrades",
872
- // { sequence: 1 }
873
- // ]
874
- //
875
- const allTrades = this.safeValue(message, 0, []);
876
- const allTradesLength = allTrades.length;
877
- if (allTradesLength > 0) {
878
- if (this.myTrades === undefined) {
879
- const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
880
- this.myTrades = new Cache.ArrayCache(limit);
881
- }
882
- const stored = this.myTrades;
883
- const symbols = {};
884
- for (let i = 0; i < allTrades.length; i++) {
885
- const trades = this.safeValue(allTrades, i, {});
886
- const ids = Object.keys(trades);
887
- for (let j = 0; j < ids.length; j++) {
888
- const id = ids[j];
889
- const trade = trades[id];
890
- const parsed = this.parseWsTrade(this.extend({ 'id': id }, trade));
891
- stored.append(parsed);
892
- const symbol = parsed['symbol'];
893
- symbols[symbol] = true;
894
- }
895
- }
896
- const name = 'ownTrades';
897
- client.resolve(this.myTrades, name);
898
- const keys = Object.keys(symbols);
899
- for (let i = 0; i < keys.length; i++) {
900
- const messageHash = name + ':' + keys[i];
901
- client.resolve(this.myTrades, messageHash);
902
- }
903
- }
904
- }
905
- parseWsTrade(trade, market = undefined) {
906
- //
907
- // {
908
- // "id": "TIMIRG-WUNNE-RRJ6GT", // injected from outside
909
- // "ordertxid": "OQRPN2-LRHFY-HIFA7D",
910
- // "postxid": "TKH2SE-M7IF5-CFI7LT",
911
- // "pair": "USDCUSDT",
912
- // "time": 1586340086.457,
913
- // "type": "sell",
914
- // "ordertype": "market",
915
- // "price": "0.99860000",
916
- // "cost": "22.16892001",
917
- // "fee": "0.04433784",
918
- // "vol": "22.20000000",
919
- // "margin": "0.00000000",
920
- // "misc": ''
921
- // }
922
- //
923
- // {
924
- // "id": "TIY6G4-LKLAI-Y3GD4A",
925
- // "cost": "22.17134",
926
- // "fee": "0.05765",
927
- // "margin": "0.00000",
928
- // "ordertxid": "ODQXS7-MOLK6-ICXKAA",
929
- // "ordertype": "market",
930
- // "pair": "ETH/USD",
931
- // "postxid": "TKH2SE-M7IF5-CFI7LT",
932
- // "price": "169.97999",
933
- // "time": "1586340530.895739",
934
- // "type": "buy",
935
- // "vol": "0.13043500"
936
- // }
937
- //
938
- const wsName = this.safeString(trade, 'pair');
939
- market = this.safeValue(this.options['marketsByWsName'], wsName, market);
940
- let symbol = undefined;
941
- const orderId = this.safeString(trade, 'ordertxid');
942
- const id = this.safeString2(trade, 'id', 'postxid');
943
- const timestamp = this.safeTimestamp(trade, 'time');
944
- const side = this.safeString(trade, 'type');
945
- const type = this.safeString(trade, 'ordertype');
946
- const price = this.safeFloat(trade, 'price');
947
- const amount = this.safeFloat(trade, 'vol');
948
- let cost = undefined;
949
- let fee = undefined;
950
- if ('fee' in trade) {
951
- let currency = undefined;
952
- if (market !== undefined) {
953
- currency = market['quote'];
954
- }
955
- fee = {
956
- 'cost': this.safeFloat(trade, 'fee'),
957
- 'currency': currency,
958
- };
959
- }
960
- if (market !== undefined) {
961
- symbol = market['symbol'];
962
- }
963
- if (price !== undefined) {
964
- if (amount !== undefined) {
965
- cost = price * amount;
966
- }
967
- }
968
- return {
969
- 'id': id,
970
- 'order': orderId,
971
- 'info': trade,
972
- 'timestamp': timestamp,
973
- 'datetime': this.iso8601(timestamp),
974
- 'symbol': symbol,
975
- 'type': type,
976
- 'side': side,
977
- 'takerOrMaker': undefined,
978
- 'price': price,
979
- 'amount': amount,
980
- 'cost': cost,
981
- 'fee': fee,
982
- };
983
- }
984
- async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
985
- /**
986
- * @method
987
- * @name kraken#watchOrders
988
- * @see https://docs.kraken.com/websockets/#message-openOrders
989
- * @description watches information on multiple orders made by the user
990
- * @param {string} symbol unified market symbol of the market orders were made in
991
- * @param {int} [since] the earliest time in ms to fetch orders for
992
- * @param {int} [limit] the maximum number of orde structures to retrieve
993
- * @param {object} [params] maximum number of orderic to the exchange API endpoint
994
- * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
995
- */
996
- return await this.watchPrivate('openOrders', symbol, since, limit, params);
997
- }
998
- handleOrders(client, message, subscription = undefined) {
999
- //
1000
- // [
1001
- // [
1002
- // {
1003
- // "OGTT3Y-C6I3P-XRI6HX": {
1004
- // "cost": "0.00000",
1005
- // "descr": {
1006
- // "close": "",
1007
- // "leverage": "0:1",
1008
- // "order": "sell 10.00345345 XBT/EUR @ limit 34.50000 with 0:1 leverage",
1009
- // "ordertype": "limit",
1010
- // "pair": "XBT/EUR",
1011
- // "price": "34.50000",
1012
- // "price2": "0.00000",
1013
- // "type": "sell"
1014
- // },
1015
- // "expiretm": "0.000000",
1016
- // "fee": "0.00000",
1017
- // "limitprice": "34.50000",
1018
- // "misc": "",
1019
- // "oflags": "fcib",
1020
- // "opentm": "0.000000",
1021
- // "price": "34.50000",
1022
- // "refid": "OKIVMP-5GVZN-Z2D2UA",
1023
- // "starttm": "0.000000",
1024
- // "status": "open",
1025
- // "stopprice": "0.000000",
1026
- // "userref": 0,
1027
- // "vol": "10.00345345",
1028
- // "vol_exec": "0.00000000"
1029
- // }
1030
- // },
1031
- // {
1032
- // "OGTT3Y-C6I3P-XRI6HX": {
1033
- // "cost": "0.00000",
1034
- // "descr": {
1035
- // "close": "",
1036
- // "leverage": "0:1",
1037
- // "order": "sell 0.00000010 XBT/EUR @ limit 5334.60000 with 0:1 leverage",
1038
- // "ordertype": "limit",
1039
- // "pair": "XBT/EUR",
1040
- // "price": "5334.60000",
1041
- // "price2": "0.00000",
1042
- // "type": "sell"
1043
- // },
1044
- // "expiretm": "0.000000",
1045
- // "fee": "0.00000",
1046
- // "limitprice": "5334.60000",
1047
- // "misc": "",
1048
- // "oflags": "fcib",
1049
- // "opentm": "0.000000",
1050
- // "price": "5334.60000",
1051
- // "refid": "OKIVMP-5GVZN-Z2D2UA",
1052
- // "starttm": "0.000000",
1053
- // "status": "open",
1054
- // "stopprice": "0.000000",
1055
- // "userref": 0,
1056
- // "vol": "0.00000010",
1057
- // "vol_exec": "0.00000000"
1058
- // }
1059
- // },
1060
- // ],
1061
- // "openOrders",
1062
- // { "sequence": 234 }
1063
- // ]
1064
- //
1065
- // status-change
1066
- //
1067
- // [
1068
- // [
1069
- // { "OGTT3Y-C6I3P-XRI6HX": { "status": "closed" }},
1070
- // { "OGTT3Y-C6I3P-XRI6HX": { "status": "closed" }},
1071
- // ],
1072
- // "openOrders",
1073
- // { "sequence": 59342 }
1074
- // ]
1075
- //
1076
- const allOrders = this.safeValue(message, 0, []);
1077
- const allOrdersLength = allOrders.length;
1078
- if (allOrdersLength > 0) {
1079
- const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
1080
- if (this.orders === undefined) {
1081
- this.orders = new Cache.ArrayCacheBySymbolById(limit);
1082
- }
1083
- const stored = this.orders;
1084
- const symbols = {};
1085
- for (let i = 0; i < allOrders.length; i++) {
1086
- const orders = this.safeValue(allOrders, i, {});
1087
- const ids = Object.keys(orders);
1088
- for (let j = 0; j < ids.length; j++) {
1089
- const id = ids[j];
1090
- const order = orders[id];
1091
- const parsed = this.parseWsOrder(order);
1092
- parsed['id'] = id;
1093
- let symbol = undefined;
1094
- const symbolsByOrderId = this.safeValue(this.options, 'symbolsByOrderId', {});
1095
- if (parsed['symbol'] !== undefined) {
1096
- symbol = parsed['symbol'];
1097
- symbolsByOrderId[id] = symbol;
1098
- this.options['symbolsByOrderId'] = symbolsByOrderId;
1099
- }
1100
- else {
1101
- symbol = this.safeString(symbolsByOrderId, id);
1102
- }
1103
- const previousOrders = this.safeValue(stored.hashmap, symbol);
1104
- const previousOrder = this.safeValue(previousOrders, id);
1105
- let newOrder = parsed;
1106
- if (previousOrder !== undefined) {
1107
- const newRawOrder = this.extend(previousOrder['info'], newOrder['info']);
1108
- newOrder = this.parseWsOrder(newRawOrder);
1109
- newOrder['id'] = id;
1110
- }
1111
- const length = stored.length;
1112
- if (length === limit && (previousOrder === undefined)) {
1113
- const first = stored[0];
1114
- if (first['id'] in symbolsByOrderId) {
1115
- delete symbolsByOrderId[first['id']];
1116
- }
1117
- }
1118
- stored.append(newOrder);
1119
- symbols[symbol] = true;
1120
- }
1121
- }
1122
- const name = 'openOrders';
1123
- client.resolve(this.orders, name);
1124
- const keys = Object.keys(symbols);
1125
- for (let i = 0; i < keys.length; i++) {
1126
- const messageHash = name + ':' + keys[i];
1127
- client.resolve(this.orders, messageHash);
1128
- }
1129
- }
1130
- }
1131
- parseWsOrder(order, market = undefined) {
1132
- //
1133
- // createOrder
1134
- // {
1135
- // "avg_price": "0.00000",
1136
- // "cost": "0.00000",
1137
- // "descr": {
1138
- // "close": null,
1139
- // "leverage": null,
1140
- // "order": "sell 0.01000000 ETH/USDT @ limit 1900.00000",
1141
- // "ordertype": "limit",
1142
- // "pair": "ETH/USDT",
1143
- // "price": "1900.00000",
1144
- // "price2": "0.00000",
1145
- // "type": "sell"
1146
- // },
1147
- // "expiretm": null,
1148
- // "fee": "0.00000",
1149
- // "limitprice": "0.00000",
1150
- // "misc": '',
1151
- // "oflags": "fciq",
1152
- // "opentm": "1667522705.757622",
1153
- // "refid": null,
1154
- // "starttm": null,
1155
- // "status": "open",
1156
- // "stopprice": "0.00000",
1157
- // "timeinforce": "GTC",
1158
- // "userref": 0,
1159
- // "vol": "0.01000000",
1160
- // "vol_exec": "0.00000000"
1161
- // }
1162
- //
1163
- const description = this.safeValue(order, 'descr', {});
1164
- const orderDescription = this.safeString(description, 'order');
1165
- let side = undefined;
1166
- let type = undefined;
1167
- let wsName = undefined;
1168
- let price = undefined;
1169
- let amount = undefined;
1170
- if (orderDescription !== undefined) {
1171
- const parts = orderDescription.split(' ');
1172
- side = this.safeString(parts, 0);
1173
- amount = this.safeString(parts, 1);
1174
- wsName = this.safeString(parts, 2);
1175
- type = this.safeString(parts, 4);
1176
- price = this.safeString(parts, 5);
1177
- }
1178
- side = this.safeString(description, 'type', side);
1179
- type = this.safeString(description, 'ordertype', type);
1180
- wsName = this.safeString(description, 'pair', wsName);
1181
- market = this.safeValue(this.options['marketsByWsName'], wsName, market);
1182
- let symbol = undefined;
1183
- const timestamp = this.safeTimestamp(order, 'opentm');
1184
- amount = this.safeString(order, 'vol', amount);
1185
- const filled = this.safeString(order, 'vol_exec');
1186
- let fee = undefined;
1187
- const cost = this.safeString(order, 'cost');
1188
- price = this.safeString(description, 'price', price);
1189
- if ((price === undefined) || (Precise["default"].stringEq(price, '0.0'))) {
1190
- price = this.safeString(description, 'price2');
1191
- }
1192
- if ((price === undefined) || (Precise["default"].stringEq(price, '0.0'))) {
1193
- price = this.safeString(order, 'price', price);
1194
- }
1195
- const average = this.safeString2(order, 'avg_price', 'price');
1196
- if (market !== undefined) {
1197
- symbol = market['symbol'];
1198
- if ('fee' in order) {
1199
- const flags = order['oflags'];
1200
- const feeCost = this.safeString(order, 'fee');
1201
- fee = {
1202
- 'cost': feeCost,
1203
- 'rate': undefined,
1204
- };
1205
- if (flags.indexOf('fciq') >= 0) {
1206
- fee['currency'] = market['quote'];
1207
- }
1208
- else if (flags.indexOf('fcib') >= 0) {
1209
- fee['currency'] = market['base'];
1210
- }
1211
- }
1212
- }
1213
- const status = this.parseOrderStatus(this.safeString(order, 'status'));
1214
- let id = this.safeString(order, 'id');
1215
- if (id === undefined) {
1216
- const txid = this.safeValue(order, 'txid');
1217
- id = this.safeString(txid, 0);
1218
- }
1219
- const clientOrderId = this.safeString(order, 'userref');
1220
- const rawTrades = this.safeValue(order, 'trades');
1221
- let trades = undefined;
1222
- if (rawTrades !== undefined) {
1223
- trades = this.parseTrades(rawTrades, market, undefined, undefined, { 'order': id });
1224
- }
1225
- const stopPrice = this.safeNumber(order, 'stopprice');
1226
- return this.safeOrder({
1227
- 'id': id,
1228
- 'clientOrderId': clientOrderId,
1229
- 'info': order,
1230
- 'timestamp': timestamp,
1231
- 'datetime': this.iso8601(timestamp),
1232
- 'lastTradeTimestamp': undefined,
1233
- 'status': status,
1234
- 'symbol': symbol,
1235
- 'type': type,
1236
- 'timeInForce': undefined,
1237
- 'postOnly': undefined,
1238
- 'side': side,
1239
- 'price': price,
1240
- 'stopPrice': stopPrice,
1241
- 'triggerPrice': stopPrice,
1242
- 'cost': cost,
1243
- 'amount': amount,
1244
- 'filled': filled,
1245
- 'average': average,
1246
- 'remaining': undefined,
1247
- 'fee': fee,
1248
- 'trades': trades,
1249
- });
1250
- }
1251
- handleSubscriptionStatus(client, message) {
1252
- //
1253
- // public
1254
- //
1255
- // {
1256
- // "channelID": 210,
1257
- // "channelName": "book-10",
1258
- // "event": "subscriptionStatus",
1259
- // "reqid": 1574146735269,
1260
- // "pair": "ETH/XBT",
1261
- // "status": "subscribed",
1262
- // "subscription": { depth: 10, name: "book" }
1263
- // }
1264
- //
1265
- // private
1266
- //
1267
- // {
1268
- // "channelName": "openOrders",
1269
- // "event": "subscriptionStatus",
1270
- // "reqid": 1,
1271
- // "status": "subscribed",
1272
- // "subscription": { maxratecount: 125, name: "openOrders" }
1273
- // }
1274
- //
1275
- const channelId = this.safeString(message, 'channelID');
1276
- if (channelId !== undefined) {
1277
- client.subscriptions[channelId] = message;
1278
- }
1279
- // const requestId = this.safeString (message, "reqid");
1280
- // if (requestId in client.futures) {
1281
- // delete client.futures[requestId];
1282
- // }
1283
- }
1284
- handleErrorMessage(client, message) {
1285
- //
1286
- // {
1287
- // "errorMessage": "Currency pair not in ISO 4217-A3 format foobar",
1288
- // "event": "subscriptionStatus",
1289
- // "pair": "foobar",
1290
- // "reqid": 1574146735269,
1291
- // "status": "error",
1292
- // "subscription": { name: "ticker" }
1293
- // }
1294
- //
1295
- const errorMessage = this.safeValue(message, 'errorMessage');
1296
- if (errorMessage !== undefined) {
1297
- const requestId = this.safeValue(message, 'reqid');
1298
- if (requestId !== undefined) {
1299
- const broad = this.exceptions['ws']['broad'];
1300
- const broadKey = this.findBroadlyMatchedKey(broad, errorMessage);
1301
- let exception = undefined;
1302
- if (broadKey === undefined) {
1303
- exception = new errors.ExchangeError(errorMessage);
1304
- }
1305
- else {
1306
- exception = new broad[broadKey](errorMessage);
1307
- }
1308
- client.reject(exception, requestId);
1309
- return false;
1310
- }
1311
- }
1312
- return true;
1313
- }
1314
- handleMessage(client, message) {
1315
- if (Array.isArray(message)) {
1316
- const channelId = this.safeString(message, 0);
1317
- const subscription = this.safeValue(client.subscriptions, channelId, {});
1318
- const info = this.safeValue(subscription, 'subscription', {});
1319
- const messageLength = message.length;
1320
- const channelName = this.safeString(message, messageLength - 2);
1321
- const name = this.safeString(info, 'name');
1322
- const methods = {
1323
- // public
1324
- 'book': this.handleOrderBook,
1325
- 'ohlc': this.handleOHLCV,
1326
- 'ticker': this.handleTicker,
1327
- 'trade': this.handleTrades,
1328
- // private
1329
- 'openOrders': this.handleOrders,
1330
- 'ownTrades': this.handleMyTrades,
1331
- };
1332
- const method = this.safeValue2(methods, name, channelName);
1333
- if (method === undefined) {
1334
- return message;
1335
- }
1336
- else {
1337
- return method.call(this, client, message, subscription);
1338
- }
1339
- }
1340
- else {
1341
- if (this.handleErrorMessage(client, message)) {
1342
- const event = this.safeString(message, 'event');
1343
- const methods = {
1344
- 'heartbeat': this.handleHeartbeat,
1345
- 'systemStatus': this.handleSystemStatus,
1346
- 'subscriptionStatus': this.handleSubscriptionStatus,
1347
- 'addOrderStatus': this.handleCreateEditOrder,
1348
- 'editOrderStatus': this.handleCreateEditOrder,
1349
- 'cancelOrderStatus': this.handleCancelOrder,
1350
- 'cancelAllStatus': this.handleCancelAllOrders,
1351
- };
1352
- const method = this.safeValue(methods, event);
1353
- if (method === undefined) {
1354
- return message;
1355
- }
1356
- else {
1357
- return method.call(this, client, message);
1358
- }
1359
- }
1360
- }
1361
- }
1362
- }
1363
-
1364
- module.exports = kraken;