ccxt-ir 4.9.32 → 4.11.0

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 (1059) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +7 -1
  4. package/dist/cjs/package.json +1 -1
  5. package/dist/cjs/src/abstract/asretether.js +11 -0
  6. package/dist/cjs/src/abstract/bidarz.js +11 -0
  7. package/dist/cjs/src/asretether.js +325 -0
  8. package/dist/cjs/src/bidarz.js +337 -0
  9. package/dist/cjs/src/bit24.js +4 -3
  10. package/dist/cjs/src/raastin.js +144 -16
  11. package/js/ccxt.d.ts +8 -2
  12. package/js/ccxt.js +6 -2
  13. package/js/src/abstract/asretether.d.ts +8 -0
  14. package/js/src/abstract/asretether.js +11 -0
  15. package/js/src/abstract/bidarz.d.ts +9 -0
  16. package/js/src/abstract/bidarz.js +11 -0
  17. package/js/src/abstract/raastin.d.ts +1 -0
  18. package/js/src/asretether.d.ts +21 -0
  19. package/js/src/asretether.js +324 -0
  20. package/js/src/bidarz.d.ts +22 -0
  21. package/js/src/bidarz.js +336 -0
  22. package/js/src/bit24.js +4 -3
  23. package/js/src/raastin.d.ts +2 -0
  24. package/js/src/raastin.js +144 -16
  25. package/js/src/src/abantether.d.ts +21 -0
  26. package/js/src/src/abantether.js +353 -0
  27. package/js/src/src/abstract/abantether.d.ts +8 -0
  28. package/js/src/src/abstract/abantether.js +11 -0
  29. package/js/src/src/abstract/afratether.d.ts +9 -0
  30. package/js/src/src/abstract/afratether.js +11 -0
  31. package/js/src/src/abstract/alpaca.d.ts +77 -0
  32. package/js/src/src/abstract/alpaca.js +11 -0
  33. package/js/src/src/abstract/apex.d.ts +34 -0
  34. package/js/src/src/abstract/apex.js +11 -0
  35. package/js/src/src/abstract/arzinja.d.ts +8 -0
  36. package/js/src/src/abstract/arzinja.js +11 -0
  37. package/js/src/src/abstract/arzplus.d.ts +11 -0
  38. package/js/src/src/abstract/arzplus.js +11 -0
  39. package/js/src/src/abstract/ascendex.d.ts +80 -0
  40. package/js/src/src/abstract/ascendex.js +11 -0
  41. package/js/src/src/abstract/asretether.d.ts +8 -0
  42. package/js/src/src/abstract/asretether.js +11 -0
  43. package/js/src/src/abstract/bidarz.d.ts +9 -0
  44. package/js/src/src/abstract/bidarz.js +11 -0
  45. package/js/src/src/abstract/bigone.d.ts +48 -0
  46. package/js/src/src/abstract/bigone.js +11 -0
  47. package/js/src/src/abstract/binance.d.ts +773 -0
  48. package/js/src/src/abstract/binance.js +11 -0
  49. package/js/src/src/abstract/bingx.d.ts +165 -0
  50. package/js/src/src/abstract/bingx.js +11 -0
  51. package/js/src/src/abstract/bit24.d.ts +9 -0
  52. package/js/src/src/abstract/bit24.js +11 -0
  53. package/js/src/src/abstract/bit2c.d.ts +30 -0
  54. package/js/src/src/abstract/bit2c.js +11 -0
  55. package/js/src/src/abstract/bitbank.d.ts +35 -0
  56. package/js/src/src/abstract/bitbank.js +11 -0
  57. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  58. package/js/src/src/abstract/bitbarg.js +11 -0
  59. package/js/src/src/abstract/bitbns.d.ts +43 -0
  60. package/js/src/src/abstract/bitbns.js +11 -0
  61. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  62. package/js/src/src/abstract/bitfinex.js +11 -0
  63. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  64. package/js/src/src/abstract/bitflyer.js +11 -0
  65. package/js/src/src/abstract/bitget.d.ts +578 -0
  66. package/js/src/src/abstract/bitget.js +11 -0
  67. package/js/src/src/abstract/bithumb.d.ts +35 -0
  68. package/js/src/src/abstract/bithumb.js +11 -0
  69. package/js/src/src/abstract/bitimen.d.ts +10 -0
  70. package/js/src/src/abstract/bitimen.js +11 -0
  71. package/js/src/src/abstract/bitir.d.ts +10 -0
  72. package/js/src/src/abstract/bitir.js +11 -0
  73. package/js/src/src/abstract/bitmart.d.ts +120 -0
  74. package/js/src/src/abstract/bitmart.js +11 -0
  75. package/js/src/src/abstract/bitmex.d.ts +100 -0
  76. package/js/src/src/abstract/bitmex.js +11 -0
  77. package/js/src/src/abstract/bitopro.d.ts +33 -0
  78. package/js/src/src/abstract/bitopro.js +11 -0
  79. package/js/src/src/abstract/bitpin.d.ts +11 -0
  80. package/js/src/src/abstract/bitpin.js +11 -0
  81. package/js/src/src/abstract/bitrue.d.ts +75 -0
  82. package/js/src/src/abstract/bitrue.js +11 -0
  83. package/js/src/src/abstract/bitso.d.ts +46 -0
  84. package/js/src/src/abstract/bitso.js +11 -0
  85. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  86. package/js/src/src/abstract/bitstamp.js +11 -0
  87. package/js/src/src/abstract/bitteam.d.ts +32 -0
  88. package/js/src/src/abstract/bitteam.js +11 -0
  89. package/js/src/src/abstract/bittrade.d.ts +117 -0
  90. package/js/src/src/abstract/bittrade.js +11 -0
  91. package/js/src/src/abstract/bitunix.d.ts +9 -0
  92. package/js/src/src/abstract/bitunix.js +11 -0
  93. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  94. package/js/src/src/abstract/bitvavo.js +11 -0
  95. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  96. package/js/src/src/abstract/blockchaincom.js +11 -0
  97. package/js/src/src/abstract/blofin.d.ts +70 -0
  98. package/js/src/src/abstract/blofin.js +11 -0
  99. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  100. package/js/src/src/abstract/btcalpha.js +11 -0
  101. package/js/src/src/abstract/btcbox.d.ts +18 -0
  102. package/js/src/src/abstract/btcbox.js +11 -0
  103. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  104. package/js/src/src/abstract/btcmarkets.js +11 -0
  105. package/js/src/src/abstract/btcturk.d.ts +23 -0
  106. package/js/src/src/abstract/btcturk.js +11 -0
  107. package/js/src/src/abstract/bybit.d.ts +316 -0
  108. package/js/src/src/abstract/bybit.js +11 -0
  109. package/js/src/src/abstract/bydfi.d.ts +11 -0
  110. package/js/src/src/abstract/bydfi.js +11 -0
  111. package/js/src/src/abstract/cafearz.d.ts +8 -0
  112. package/js/src/src/abstract/cafearz.js +11 -0
  113. package/js/src/src/abstract/cex.d.ts +35 -0
  114. package/js/src/src/abstract/cex.js +11 -0
  115. package/js/src/src/abstract/coinbase.d.ts +97 -0
  116. package/js/src/src/abstract/coinbase.js +11 -0
  117. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  118. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  119. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  120. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  121. package/js/src/src/abstract/coincatch.d.ts +97 -0
  122. package/js/src/src/abstract/coincatch.js +11 -0
  123. package/js/src/src/abstract/coincheck.d.ts +36 -0
  124. package/js/src/src/abstract/coincheck.js +11 -0
  125. package/js/src/src/abstract/coinex.d.ts +240 -0
  126. package/js/src/src/abstract/coinex.js +11 -0
  127. package/js/src/src/abstract/coinmate.d.ts +65 -0
  128. package/js/src/src/abstract/coinmate.js +11 -0
  129. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  130. package/js/src/src/abstract/coinmetro.js +11 -0
  131. package/js/src/src/abstract/coinone.d.ts +70 -0
  132. package/js/src/src/abstract/coinone.js +11 -0
  133. package/js/src/src/abstract/coinsph.d.ts +57 -0
  134. package/js/src/src/abstract/coinsph.js +11 -0
  135. package/js/src/src/abstract/coinspot.d.ts +31 -0
  136. package/js/src/src/abstract/coinspot.js +11 -0
  137. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  138. package/js/src/src/abstract/cryptocom.js +11 -0
  139. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  140. package/js/src/src/abstract/cryptomus.js +11 -0
  141. package/js/src/src/abstract/defx.d.ts +72 -0
  142. package/js/src/src/abstract/defx.js +11 -0
  143. package/js/src/src/abstract/delta.d.ts +53 -0
  144. package/js/src/src/abstract/delta.js +11 -0
  145. package/js/src/src/abstract/deribit.d.ts +129 -0
  146. package/js/src/src/abstract/deribit.js +11 -0
  147. package/js/src/src/abstract/derive.d.ts +120 -0
  148. package/js/src/src/abstract/derive.js +11 -0
  149. package/js/src/src/abstract/digifinex.d.ts +95 -0
  150. package/js/src/src/abstract/digifinex.js +11 -0
  151. package/js/src/src/abstract/ellipx.d.ts +28 -0
  152. package/js/src/src/abstract/ellipx.js +11 -0
  153. package/js/src/src/abstract/eterex.d.ts +8 -0
  154. package/js/src/src/abstract/eterex.js +11 -0
  155. package/js/src/src/abstract/excoino.d.ts +10 -0
  156. package/js/src/src/abstract/excoino.js +11 -0
  157. package/js/src/src/abstract/exir.d.ts +11 -0
  158. package/js/src/src/abstract/exir.js +11 -0
  159. package/js/src/src/abstract/exmo.d.ts +58 -0
  160. package/js/src/src/abstract/exmo.js +11 -0
  161. package/js/src/src/abstract/exnovin.d.ts +9 -0
  162. package/js/src/src/abstract/exnovin.js +11 -0
  163. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  164. package/js/src/src/abstract/farhadexchange.js +11 -0
  165. package/js/src/src/abstract/foxbit.d.ts +29 -0
  166. package/js/src/src/abstract/foxbit.js +11 -0
  167. package/js/src/src/abstract/gate.d.ts +287 -0
  168. package/js/src/src/abstract/gate.js +11 -0
  169. package/js/src/src/abstract/gemini.d.ts +62 -0
  170. package/js/src/src/abstract/gemini.js +11 -0
  171. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  172. package/js/src/src/abstract/hamtapay.js +11 -0
  173. package/js/src/src/abstract/hashkey.d.ts +70 -0
  174. package/js/src/src/abstract/hashkey.js +11 -0
  175. package/js/src/src/abstract/hibachi.d.ts +29 -0
  176. package/js/src/src/abstract/hibachi.js +11 -0
  177. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  178. package/js/src/src/abstract/hitbtc.js +11 -0
  179. package/js/src/src/abstract/hitobit.d.ts +11 -0
  180. package/js/src/src/abstract/hitobit.js +11 -0
  181. package/js/src/src/abstract/hollaex.d.ts +36 -0
  182. package/js/src/src/abstract/hollaex.js +11 -0
  183. package/js/src/src/abstract/htx.d.ts +551 -0
  184. package/js/src/src/abstract/htx.js +11 -0
  185. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  186. package/js/src/src/abstract/hyperliquid.js +11 -0
  187. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  188. package/js/src/src/abstract/independentreserve.js +11 -0
  189. package/js/src/src/abstract/indodax.d.ts +29 -0
  190. package/js/src/src/abstract/indodax.js +11 -0
  191. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  192. package/js/src/src/abstract/iranexchange.js +11 -0
  193. package/js/src/src/abstract/jibitex.d.ts +10 -0
  194. package/js/src/src/abstract/jibitex.js +11 -0
  195. package/js/src/src/abstract/kcex.d.ts +10 -0
  196. package/js/src/src/abstract/kcex.js +11 -0
  197. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  198. package/js/src/src/abstract/kifpoolme.js +11 -0
  199. package/js/src/src/abstract/kraken.d.ts +61 -0
  200. package/js/src/src/abstract/kraken.js +11 -0
  201. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  202. package/js/src/src/abstract/krakenfutures.js +11 -0
  203. package/js/src/src/abstract/kucoin.d.ts +227 -0
  204. package/js/src/src/abstract/kucoin.js +11 -0
  205. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  206. package/js/src/src/abstract/kucoinfutures.js +11 -0
  207. package/js/src/src/abstract/latoken.d.ts +59 -0
  208. package/js/src/src/abstract/latoken.js +11 -0
  209. package/js/src/src/abstract/lbank.d.ts +65 -0
  210. package/js/src/src/abstract/lbank.js +11 -0
  211. package/js/src/src/abstract/luno.d.ts +41 -0
  212. package/js/src/src/abstract/luno.js +11 -0
  213. package/js/src/src/abstract/mazdax.d.ts +11 -0
  214. package/js/src/src/abstract/mazdax.js +11 -0
  215. package/js/src/src/abstract/mercado.d.ts +28 -0
  216. package/js/src/src/abstract/mercado.js +11 -0
  217. package/js/src/src/abstract/mexc.d.ts +183 -0
  218. package/js/src/src/abstract/mexc.js +11 -0
  219. package/js/src/src/abstract/modetrade.d.ts +122 -0
  220. package/js/src/src/abstract/modetrade.js +11 -0
  221. package/js/src/src/abstract/ndax.d.ts +100 -0
  222. package/js/src/src/abstract/ndax.js +11 -0
  223. package/js/src/src/abstract/nobitex.d.ts +10 -0
  224. package/js/src/src/abstract/nobitex.js +11 -0
  225. package/js/src/src/abstract/novadax.d.ts +32 -0
  226. package/js/src/src/abstract/novadax.js +11 -0
  227. package/js/src/src/abstract/oceanex.d.ts +30 -0
  228. package/js/src/src/abstract/oceanex.js +11 -0
  229. package/js/src/src/abstract/okcoin.d.ts +77 -0
  230. package/js/src/src/abstract/okcoin.js +11 -0
  231. package/js/src/src/abstract/okexchange.d.ts +11 -0
  232. package/js/src/src/abstract/okexchange.js +11 -0
  233. package/js/src/src/abstract/okx.d.ts +352 -0
  234. package/js/src/src/abstract/okx.js +11 -0
  235. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  236. package/js/src/src/abstract/ompfinex.js +11 -0
  237. package/js/src/src/abstract/onetrading.d.ts +26 -0
  238. package/js/src/src/abstract/onetrading.js +11 -0
  239. package/js/src/src/abstract/oxfun.d.ts +37 -0
  240. package/js/src/src/abstract/oxfun.js +11 -0
  241. package/js/src/src/abstract/p2b.d.ts +25 -0
  242. package/js/src/src/abstract/p2b.js +11 -0
  243. package/js/src/src/abstract/paradex.d.ts +66 -0
  244. package/js/src/src/abstract/paradex.js +11 -0
  245. package/js/src/src/abstract/paymium.d.ts +31 -0
  246. package/js/src/src/abstract/paymium.js +11 -0
  247. package/js/src/src/abstract/phemex.d.ts +120 -0
  248. package/js/src/src/abstract/phemex.js +11 -0
  249. package/js/src/src/abstract/pingi.d.ts +9 -0
  250. package/js/src/src/abstract/pingi.js +11 -0
  251. package/js/src/src/abstract/poloniex.d.ts +108 -0
  252. package/js/src/src/abstract/poloniex.js +11 -0
  253. package/js/src/src/abstract/pooleno.d.ts +8 -0
  254. package/js/src/src/abstract/pooleno.js +11 -0
  255. package/js/src/src/abstract/probit.d.ts +26 -0
  256. package/js/src/src/abstract/probit.js +11 -0
  257. package/js/src/src/abstract/raastin.d.ts +11 -0
  258. package/js/src/src/abstract/raastin.js +11 -0
  259. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  260. package/js/src/src/abstract/ramzinex.js +11 -0
  261. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  262. package/js/src/src/abstract/sarmayex.js +11 -0
  263. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  264. package/js/src/src/abstract/sarrafex.js +11 -0
  265. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  266. package/js/src/src/abstract/tabdeal.js +11 -0
  267. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  268. package/js/src/src/abstract/tehran_exchange.js +11 -0
  269. package/js/src/src/abstract/tetherland.d.ts +8 -0
  270. package/js/src/src/abstract/tetherland.js +11 -0
  271. package/js/src/src/abstract/timex.d.ts +65 -0
  272. package/js/src/src/abstract/timex.js +11 -0
  273. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  274. package/js/src/src/abstract/tokocrypto.js +11 -0
  275. package/js/src/src/abstract/toobit.d.ts +10 -0
  276. package/js/src/src/abstract/toobit.js +11 -0
  277. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  278. package/js/src/src/abstract/tradeogre.js +11 -0
  279. package/js/src/src/abstract/twox.d.ts +8 -0
  280. package/js/src/src/abstract/twox.js +11 -0
  281. package/js/src/src/abstract/ubitex.d.ts +10 -0
  282. package/js/src/src/abstract/ubitex.js +11 -0
  283. package/js/src/src/abstract/upbit.d.ts +58 -0
  284. package/js/src/src/abstract/upbit.js +11 -0
  285. package/js/src/src/abstract/vertex.d.ts +22 -0
  286. package/js/src/src/abstract/vertex.js +11 -0
  287. package/js/src/src/abstract/wallex.d.ts +11 -0
  288. package/js/src/src/abstract/wallex.js +11 -0
  289. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  290. package/js/src/src/abstract/wavesexchange.js +11 -0
  291. package/js/src/src/abstract/whitebit.d.ts +117 -0
  292. package/js/src/src/abstract/whitebit.js +11 -0
  293. package/js/src/src/abstract/woo.d.ts +144 -0
  294. package/js/src/src/abstract/woo.js +11 -0
  295. package/js/src/src/abstract/woofipro.d.ts +122 -0
  296. package/js/src/src/abstract/woofipro.js +11 -0
  297. package/js/src/src/abstract/xt.d.ts +160 -0
  298. package/js/src/src/abstract/xt.js +11 -0
  299. package/js/src/src/abstract/yobit.d.ts +19 -0
  300. package/js/src/src/abstract/yobit.js +11 -0
  301. package/js/src/src/abstract/zaif.d.ts +41 -0
  302. package/js/src/src/abstract/zaif.js +11 -0
  303. package/js/src/src/abstract/zonda.d.ts +56 -0
  304. package/js/src/src/abstract/zonda.js +11 -0
  305. package/js/src/src/afratether.d.ts +21 -0
  306. package/js/src/src/afratether.js +356 -0
  307. package/js/src/src/alpaca.d.ts +332 -0
  308. package/js/src/src/alpaca.js +1908 -0
  309. package/js/src/src/apex.d.ts +333 -0
  310. package/js/src/src/apex.js +1942 -0
  311. package/js/src/src/arzinja.d.ts +21 -0
  312. package/js/src/src/arzinja.js +298 -0
  313. package/js/src/src/arzplus.d.ts +26 -0
  314. package/js/src/src/arzplus.js +581 -0
  315. package/js/src/src/ascendex.d.ts +424 -0
  316. package/js/src/src/ascendex.js +3699 -0
  317. package/js/src/src/asretether.d.ts +21 -0
  318. package/js/src/src/asretether.js +324 -0
  319. package/js/src/src/base/Exchange.d.ts +926 -0
  320. package/js/src/src/base/Exchange.js +7399 -0
  321. package/js/src/src/base/Precise.d.ts +42 -0
  322. package/js/src/src/base/Precise.js +275 -0
  323. package/js/src/src/base/errors.d.ts +168 -0
  324. package/js/src/src/base/errors.js +255 -0
  325. package/js/src/src/base/functions/crypto.d.ts +16 -0
  326. package/js/src/src/base/functions/crypto.js +131 -0
  327. package/js/src/src/base/functions/encode.d.ts +4 -0
  328. package/js/src/src/base/functions/encode.js +32 -0
  329. package/js/src/src/base/functions/generic.d.ts +29 -0
  330. package/js/src/src/base/functions/generic.js +203 -0
  331. package/js/src/src/base/functions/misc.d.ts +9 -0
  332. package/js/src/src/base/functions/misc.js +101 -0
  333. package/js/src/src/base/functions/number.d.ts +27 -0
  334. package/js/src/src/base/functions/number.js +313 -0
  335. package/js/src/src/base/functions/platform.d.ts +7 -0
  336. package/js/src/src/base/functions/platform.js +27 -0
  337. package/js/src/src/base/functions/rsa.d.ts +5 -0
  338. package/js/src/src/base/functions/rsa.js +49 -0
  339. package/js/src/src/base/functions/string.d.ts +7 -0
  340. package/js/src/src/base/functions/string.js +44 -0
  341. package/js/src/src/base/functions/throttle.d.ts +6 -0
  342. package/js/src/src/base/functions/throttle.js +67 -0
  343. package/js/src/src/base/functions/time.d.ts +21 -0
  344. package/js/src/src/base/functions/time.js +171 -0
  345. package/js/src/src/base/functions/totp.d.ts +3 -0
  346. package/js/src/src/base/functions/totp.js +25 -0
  347. package/js/src/src/base/functions/type.d.ts +37 -0
  348. package/js/src/src/base/functions/type.js +179 -0
  349. package/js/src/src/base/functions.d.ts +10 -0
  350. package/js/src/src/base/functions.js +18 -0
  351. package/js/src/src/base/types.d.ts +586 -0
  352. package/js/src/src/base/types.js +7 -0
  353. package/js/src/src/base/ws/Cache.d.ts +27 -0
  354. package/js/src/src/base/ws/Cache.js +260 -0
  355. package/js/src/src/base/ws/Client.d.ts +53 -0
  356. package/js/src/src/base/ws/Client.js +307 -0
  357. package/js/src/src/base/ws/Future.d.ts +8 -0
  358. package/js/src/src/base/ws/Future.js +35 -0
  359. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  360. package/js/src/src/base/ws/OrderBook.js +130 -0
  361. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  362. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  363. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  364. package/js/src/src/base/ws/WsClient.js +69 -0
  365. package/js/src/src/bequant.d.ts +4 -0
  366. package/js/src/src/bequant.js +35 -0
  367. package/js/src/src/bidarz.d.ts +16 -0
  368. package/js/src/src/bidarz.js +327 -0
  369. package/js/src/src/bigone.d.ts +296 -0
  370. package/js/src/src/bigone.js +2340 -0
  371. package/js/src/src/binance.d.ts +1667 -0
  372. package/js/src/src/binance.js +14400 -0
  373. package/js/src/src/binancecoinm.d.ts +6 -0
  374. package/js/src/src/binancecoinm.js +51 -0
  375. package/js/src/src/binanceus.d.ts +4 -0
  376. package/js/src/src/binanceus.js +225 -0
  377. package/js/src/src/binanceusdm.d.ts +6 -0
  378. package/js/src/src/binanceusdm.js +63 -0
  379. package/js/src/src/bingx.d.ts +778 -0
  380. package/js/src/src/bingx.js +6705 -0
  381. package/js/src/src/bit24.d.ts +24 -0
  382. package/js/src/src/bit24.js +520 -0
  383. package/js/src/src/bit2c.d.ts +146 -0
  384. package/js/src/src/bit2c.js +1029 -0
  385. package/js/src/src/bitbank.d.ts +181 -0
  386. package/js/src/src/bitbank.js +1146 -0
  387. package/js/src/src/bitbarg.d.ts +21 -0
  388. package/js/src/src/bitbarg.js +312 -0
  389. package/js/src/src/bitbns.d.ts +184 -0
  390. package/js/src/src/bitbns.js +1288 -0
  391. package/js/src/src/bitfinex.d.ts +516 -0
  392. package/js/src/src/bitfinex.js +3951 -0
  393. package/js/src/src/bitflyer.d.ts +229 -0
  394. package/js/src/src/bitflyer.js +1209 -0
  395. package/js/src/src/bitget.d.ts +1109 -0
  396. package/js/src/src/bitget.js +11033 -0
  397. package/js/src/src/bithumb.d.ts +165 -0
  398. package/js/src/src/bithumb.js +1257 -0
  399. package/js/src/src/bitimen.d.ts +23 -0
  400. package/js/src/src/bitimen.js +424 -0
  401. package/js/src/src/bitir.d.ts +23 -0
  402. package/js/src/src/bitir.js +521 -0
  403. package/js/src/src/bitmart.d.ts +736 -0
  404. package/js/src/src/bitmart.js +5639 -0
  405. package/js/src/src/bitmex.d.ts +395 -0
  406. package/js/src/src/bitmex.js +3088 -0
  407. package/js/src/src/bitopro.d.ts +295 -0
  408. package/js/src/src/bitopro.js +1892 -0
  409. package/js/src/src/bitpin.d.ts +23 -0
  410. package/js/src/src/bitpin.js +487 -0
  411. package/js/src/src/bitrue.d.ts +384 -0
  412. package/js/src/src/bitrue.js +3382 -0
  413. package/js/src/src/bitso.d.ts +270 -0
  414. package/js/src/src/bitso.js +1881 -0
  415. package/js/src/src/bitstamp.d.ts +355 -0
  416. package/js/src/src/bitstamp.js +2445 -0
  417. package/js/src/src/bitteam.d.ts +229 -0
  418. package/js/src/src/bitteam.js +2420 -0
  419. package/js/src/src/bittrade.d.ts +298 -0
  420. package/js/src/src/bittrade.js +2050 -0
  421. package/js/src/src/bitunix.d.ts +21 -0
  422. package/js/src/src/bitunix.js +326 -0
  423. package/js/src/src/bitvavo.d.ts +311 -0
  424. package/js/src/src/bitvavo.js +2204 -0
  425. package/js/src/src/blockchaincom.d.ts +256 -0
  426. package/js/src/src/blockchaincom.js +1259 -0
  427. package/js/src/src/blofin.d.ts +439 -0
  428. package/js/src/src/blofin.js +2576 -0
  429. package/js/src/src/btcalpha.d.ts +209 -0
  430. package/js/src/src/btcalpha.js +1056 -0
  431. package/js/src/src/btcbox.d.ts +144 -0
  432. package/js/src/src/btcbox.js +834 -0
  433. package/js/src/src/btcmarkets.d.ts +253 -0
  434. package/js/src/src/btcmarkets.js +1418 -0
  435. package/js/src/src/btcturk.d.ts +161 -0
  436. package/js/src/src/btcturk.js +1058 -0
  437. package/js/src/src/bybit.d.ts +1097 -0
  438. package/js/src/src/bybit.js +9382 -0
  439. package/js/src/src/bydfi.d.ts +23 -0
  440. package/js/src/src/bydfi.js +434 -0
  441. package/js/src/src/cafearz.d.ts +21 -0
  442. package/js/src/src/cafearz.js +346 -0
  443. package/js/src/src/cex.d.ts +286 -0
  444. package/js/src/src/cex.js +1799 -0
  445. package/js/src/src/coinbase.d.ts +623 -0
  446. package/js/src/src/coinbase.js +5220 -0
  447. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  448. package/js/src/src/coinbaseadvanced.js +18 -0
  449. package/js/src/src/coinbaseexchange.d.ts +334 -0
  450. package/js/src/src/coinbaseexchange.js +2127 -0
  451. package/js/src/src/coinbaseinternational.d.ts +443 -0
  452. package/js/src/src/coinbaseinternational.js +2336 -0
  453. package/js/src/src/coincatch.d.ts +786 -0
  454. package/js/src/src/coincatch.js +5492 -0
  455. package/js/src/src/coincheck.d.ts +147 -0
  456. package/js/src/src/coincheck.js +962 -0
  457. package/js/src/src/coinex.d.ts +719 -0
  458. package/js/src/src/coinex.js +6166 -0
  459. package/js/src/src/coinmate.d.ts +202 -0
  460. package/js/src/src/coinmate.js +1215 -0
  461. package/js/src/src/coinmetro.d.ts +244 -0
  462. package/js/src/src/coinmetro.js +2024 -0
  463. package/js/src/src/coinone.d.ts +158 -0
  464. package/js/src/src/coinone.js +1278 -0
  465. package/js/src/src/coinsph.d.ts +310 -0
  466. package/js/src/src/coinsph.js +2203 -0
  467. package/js/src/src/coinspot.d.ts +108 -0
  468. package/js/src/src/coinspot.js +653 -0
  469. package/js/src/src/cryptocom.d.ts +463 -0
  470. package/js/src/src/cryptocom.js +3549 -0
  471. package/js/src/src/cryptomus.d.ts +158 -0
  472. package/js/src/src/cryptomus.js +1169 -0
  473. package/js/src/src/defx.d.ts +348 -0
  474. package/js/src/src/defx.js +2139 -0
  475. package/js/src/src/delta.d.ts +407 -0
  476. package/js/src/src/delta.js +3654 -0
  477. package/js/src/src/deribit.d.ts +516 -0
  478. package/js/src/src/deribit.js +3790 -0
  479. package/js/src/src/derive.d.ts +324 -0
  480. package/js/src/src/derive.js +2655 -0
  481. package/js/src/src/digifinex.d.ts +544 -0
  482. package/js/src/src/digifinex.js +4453 -0
  483. package/js/src/src/ellipx.d.ts +237 -0
  484. package/js/src/src/ellipx.js +2071 -0
  485. package/js/src/src/eterex.d.ts +21 -0
  486. package/js/src/src/eterex.js +299 -0
  487. package/js/src/src/excoino.d.ts +23 -0
  488. package/js/src/src/excoino.js +426 -0
  489. package/js/src/src/exir.d.ts +23 -0
  490. package/js/src/src/exir.js +403 -0
  491. package/js/src/src/exmo.d.ts +426 -0
  492. package/js/src/src/exmo.js +2825 -0
  493. package/js/src/src/exnovin.d.ts +22 -0
  494. package/js/src/src/exnovin.js +378 -0
  495. package/js/src/src/farhadexchange.d.ts +21 -0
  496. package/js/src/src/farhadexchange.js +280 -0
  497. package/js/src/src/fmfwio.d.ts +4 -0
  498. package/js/src/src/fmfwio.js +35 -0
  499. package/js/src/src/foxbit.d.ts +352 -0
  500. package/js/src/src/foxbit.js +2016 -0
  501. package/js/src/src/gate.d.ts +1071 -0
  502. package/js/src/src/gate.js +8282 -0
  503. package/js/src/src/gateio.d.ts +4 -0
  504. package/js/src/src/gateio.js +17 -0
  505. package/js/src/src/gemini.d.ts +257 -0
  506. package/js/src/src/gemini.js +2006 -0
  507. package/js/src/src/hamtapay.d.ts +21 -0
  508. package/js/src/src/hamtapay.js +303 -0
  509. package/js/src/src/hashkey.d.ts +628 -0
  510. package/js/src/src/hashkey.js +4363 -0
  511. package/js/src/src/hibachi.d.ts +346 -0
  512. package/js/src/src/hibachi.js +2137 -0
  513. package/js/src/src/hitbtc.d.ts +558 -0
  514. package/js/src/src/hitbtc.js +3847 -0
  515. package/js/src/src/hitobit.d.ts +23 -0
  516. package/js/src/src/hitobit.js +412 -0
  517. package/js/src/src/hollaex.d.ts +305 -0
  518. package/js/src/src/hollaex.js +2046 -0
  519. package/js/src/src/htx.d.ts +961 -0
  520. package/js/src/src/htx.js +9668 -0
  521. package/js/src/src/huobi.d.ts +4 -0
  522. package/js/src/src/huobi.js +17 -0
  523. package/js/src/src/hyperliquid.d.ts +651 -0
  524. package/js/src/src/hyperliquid.js +3937 -0
  525. package/js/src/src/independentreserve.d.ts +169 -0
  526. package/js/src/src/independentreserve.js +1115 -0
  527. package/js/src/src/indodax.d.ts +217 -0
  528. package/js/src/src/indodax.js +1454 -0
  529. package/js/src/src/iranexchange.d.ts +21 -0
  530. package/js/src/src/iranexchange.js +399 -0
  531. package/js/src/src/jibitex.d.ts +23 -0
  532. package/js/src/src/jibitex.js +416 -0
  533. package/js/src/src/kcex.d.ts +21 -0
  534. package/js/src/src/kcex.js +335 -0
  535. package/js/src/src/kifpoolme.d.ts +23 -0
  536. package/js/src/src/kifpoolme.js +410 -0
  537. package/js/src/src/kraken.d.ts +484 -0
  538. package/js/src/src/kraken.js +3518 -0
  539. package/js/src/src/krakenfutures.d.ts +362 -0
  540. package/js/src/src/krakenfutures.js +2885 -0
  541. package/js/src/src/kucoin.d.ts +759 -0
  542. package/js/src/src/kucoin.js +5153 -0
  543. package/js/src/src/kucoinfutures.d.ts +521 -0
  544. package/js/src/src/kucoinfutures.js +3381 -0
  545. package/js/src/src/latoken.d.ts +274 -0
  546. package/js/src/src/latoken.js +1824 -0
  547. package/js/src/src/lbank.d.ts +350 -0
  548. package/js/src/src/lbank.js +3146 -0
  549. package/js/src/src/luno.d.ts +252 -0
  550. package/js/src/src/luno.js +1479 -0
  551. package/js/src/src/mazdax.d.ts +23 -0
  552. package/js/src/src/mazdax.js +534 -0
  553. package/js/src/src/mercado.d.ts +160 -0
  554. package/js/src/src/mercado.js +1011 -0
  555. package/js/src/src/mexc.d.ts +768 -0
  556. package/js/src/src/mexc.js +6102 -0
  557. package/js/src/src/modetrade.d.ts +496 -0
  558. package/js/src/src/modetrade.js +2936 -0
  559. package/js/src/src/myokx.d.ts +4 -0
  560. package/js/src/src/myokx.js +54 -0
  561. package/js/src/src/ndax.d.ts +285 -0
  562. package/js/src/src/ndax.js +2598 -0
  563. package/js/src/src/nobitex.d.ts +23 -0
  564. package/js/src/src/nobitex.js +454 -0
  565. package/js/src/src/novadax.d.ts +279 -0
  566. package/js/src/src/novadax.js +1676 -0
  567. package/js/src/src/oceanex.d.ts +231 -0
  568. package/js/src/src/oceanex.js +1123 -0
  569. package/js/src/src/okcoin.d.ts +346 -0
  570. package/js/src/src/okcoin.js +3211 -0
  571. package/js/src/src/okexchange.d.ts +23 -0
  572. package/js/src/src/okexchange.js +373 -0
  573. package/js/src/src/okx.d.ts +1125 -0
  574. package/js/src/src/okx.js +9009 -0
  575. package/js/src/src/okxus.d.ts +4 -0
  576. package/js/src/src/okxus.js +54 -0
  577. package/js/src/src/ompfinex.d.ts +23 -0
  578. package/js/src/src/ompfinex.js +510 -0
  579. package/js/src/src/onetrading.d.ts +228 -0
  580. package/js/src/src/onetrading.js +1769 -0
  581. package/js/src/src/oxfun.d.ts +442 -0
  582. package/js/src/src/oxfun.js +2920 -0
  583. package/js/src/src/p2b.d.ts +189 -0
  584. package/js/src/src/p2b.js +1344 -0
  585. package/js/src/src/paradex.d.ts +389 -0
  586. package/js/src/src/paradex.js +2607 -0
  587. package/js/src/src/paymium.d.ts +133 -0
  588. package/js/src/src/paymium.js +644 -0
  589. package/js/src/src/phemex.d.ts +497 -0
  590. package/js/src/src/phemex.js +5333 -0
  591. package/js/src/src/pingi.d.ts +22 -0
  592. package/js/src/src/pingi.js +446 -0
  593. package/js/src/src/poloniex.d.ts +441 -0
  594. package/js/src/src/poloniex.js +3681 -0
  595. package/js/src/src/pooleno.d.ts +21 -0
  596. package/js/src/src/pooleno.js +347 -0
  597. package/js/src/src/pro/alpaca.d.ts +95 -0
  598. package/js/src/src/pro/alpaca.js +724 -0
  599. package/js/src/src/pro/apex.d.ts +160 -0
  600. package/js/src/src/pro/apex.js +1044 -0
  601. package/js/src/src/pro/ascendex.d.ts +99 -0
  602. package/js/src/src/pro/ascendex.js +1012 -0
  603. package/js/src/src/pro/bequant.d.ts +4 -0
  604. package/js/src/src/pro/bequant.js +42 -0
  605. package/js/src/src/pro/binance.d.ts +796 -0
  606. package/js/src/src/pro/binance.js +4373 -0
  607. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  608. package/js/src/src/pro/binancecoinm.js +32 -0
  609. package/js/src/src/pro/binanceus.d.ts +4 -0
  610. package/js/src/src/pro/binanceus.js +52 -0
  611. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  612. package/js/src/src/pro/binanceusdm.js +37 -0
  613. package/js/src/src/pro/bingx.d.ts +151 -0
  614. package/js/src/src/pro/bingx.js +1568 -0
  615. package/js/src/src/pro/bitfinex.d.ts +99 -0
  616. package/js/src/src/pro/bitfinex.js +1165 -0
  617. package/js/src/src/pro/bitget.d.ts +257 -0
  618. package/js/src/src/pro/bitget.js +2327 -0
  619. package/js/src/src/pro/bithumb.d.ts +59 -0
  620. package/js/src/src/pro/bithumb.js +395 -0
  621. package/js/src/src/pro/bitmart.d.ts +168 -0
  622. package/js/src/src/pro/bitmart.js +1686 -0
  623. package/js/src/src/pro/bitmex.d.ts +170 -0
  624. package/js/src/src/pro/bitmex.js +1760 -0
  625. package/js/src/src/pro/bitopro.d.ts +69 -0
  626. package/js/src/src/pro/bitopro.js +477 -0
  627. package/js/src/src/pro/bitrue.d.ts +40 -0
  628. package/js/src/src/pro/bitrue.js +461 -0
  629. package/js/src/src/pro/bitstamp.d.ts +53 -0
  630. package/js/src/src/pro/bitstamp.js +587 -0
  631. package/js/src/src/pro/bittrade.d.ts +66 -0
  632. package/js/src/src/pro/bittrade.js +606 -0
  633. package/js/src/src/pro/bitvavo.d.ts +321 -0
  634. package/js/src/src/pro/bitvavo.js +1451 -0
  635. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  636. package/js/src/src/pro/blockchaincom.js +777 -0
  637. package/js/src/src/pro/blofin.d.ts +174 -0
  638. package/js/src/src/pro/blofin.js +743 -0
  639. package/js/src/src/pro/bybit.d.ts +397 -0
  640. package/js/src/src/pro/bybit.js +2519 -0
  641. package/js/src/src/pro/cex.d.ts +220 -0
  642. package/js/src/src/pro/cex.js +1535 -0
  643. package/js/src/src/pro/coinbase.d.ts +119 -0
  644. package/js/src/src/pro/coinbase.js +736 -0
  645. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  646. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  647. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  648. package/js/src/src/pro/coinbaseexchange.js +969 -0
  649. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  650. package/js/src/src/pro/coinbaseinternational.js +804 -0
  651. package/js/src/src/pro/coincatch.d.ts +207 -0
  652. package/js/src/src/pro/coincatch.js +1562 -0
  653. package/js/src/src/pro/coincheck.d.ts +33 -0
  654. package/js/src/src/pro/coincheck.js +210 -0
  655. package/js/src/src/pro/coinex.d.ts +147 -0
  656. package/js/src/src/pro/coinex.js +1426 -0
  657. package/js/src/src/pro/coinone.d.ts +51 -0
  658. package/js/src/src/pro/coinone.js +413 -0
  659. package/js/src/src/pro/cryptocom.d.ts +300 -0
  660. package/js/src/src/pro/cryptocom.js +1414 -0
  661. package/js/src/src/pro/defx.d.ts +236 -0
  662. package/js/src/src/pro/defx.js +865 -0
  663. package/js/src/src/pro/deribit.d.ts +163 -0
  664. package/js/src/src/pro/deribit.js +1066 -0
  665. package/js/src/src/pro/derive.d.ts +100 -0
  666. package/js/src/src/pro/derive.js +753 -0
  667. package/js/src/src/pro/exmo.d.ts +97 -0
  668. package/js/src/src/pro/exmo.js +903 -0
  669. package/js/src/src/pro/gate.d.ts +360 -0
  670. package/js/src/src/pro/gate.js +2119 -0
  671. package/js/src/src/pro/gateio.d.ts +4 -0
  672. package/js/src/src/pro/gateio.js +17 -0
  673. package/js/src/src/pro/gemini.d.ts +106 -0
  674. package/js/src/src/pro/gemini.js +932 -0
  675. package/js/src/src/pro/hashkey.d.ts +121 -0
  676. package/js/src/src/pro/hashkey.js +843 -0
  677. package/js/src/src/pro/hitbtc.d.ts +235 -0
  678. package/js/src/src/pro/hitbtc.js +1400 -0
  679. package/js/src/src/pro/hollaex.d.ts +77 -0
  680. package/js/src/src/pro/hollaex.js +604 -0
  681. package/js/src/src/pro/htx.d.ts +141 -0
  682. package/js/src/src/pro/htx.js +2415 -0
  683. package/js/src/src/pro/huobi.d.ts +4 -0
  684. package/js/src/src/pro/huobi.js +17 -0
  685. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  686. package/js/src/src/pro/hyperliquid.js +1126 -0
  687. package/js/src/src/pro/independentreserve.d.ts +36 -0
  688. package/js/src/src/pro/independentreserve.js +287 -0
  689. package/js/src/src/pro/kraken.d.ts +233 -0
  690. package/js/src/src/pro/kraken.js +1785 -0
  691. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  692. package/js/src/src/pro/krakenfutures.js +1592 -0
  693. package/js/src/src/pro/kucoin.d.ts +221 -0
  694. package/js/src/src/pro/kucoin.js +1430 -0
  695. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  696. package/js/src/src/pro/kucoinfutures.js +1295 -0
  697. package/js/src/src/pro/lbank.d.ts +134 -0
  698. package/js/src/src/pro/lbank.js +950 -0
  699. package/js/src/src/pro/luno.d.ts +44 -0
  700. package/js/src/src/pro/luno.js +322 -0
  701. package/js/src/src/pro/mexc.d.ts +210 -0
  702. package/js/src/src/pro/mexc.js +2009 -0
  703. package/js/src/src/pro/modetrade.d.ts +155 -0
  704. package/js/src/src/pro/modetrade.js +1335 -0
  705. package/js/src/src/pro/myokx.d.ts +4 -0
  706. package/js/src/src/pro/myokx.js +39 -0
  707. package/js/src/src/pro/ndax.d.ts +60 -0
  708. package/js/src/src/pro/ndax.js +545 -0
  709. package/js/src/src/pro/okcoin.d.ts +91 -0
  710. package/js/src/src/pro/okcoin.js +763 -0
  711. package/js/src/src/pro/okx.d.ts +408 -0
  712. package/js/src/src/pro/okx.js +2479 -0
  713. package/js/src/src/pro/okxus.d.ts +4 -0
  714. package/js/src/src/pro/okxus.js +39 -0
  715. package/js/src/src/pro/onetrading.d.ts +107 -0
  716. package/js/src/src/pro/onetrading.js +1343 -0
  717. package/js/src/src/pro/oxfun.d.ts +234 -0
  718. package/js/src/src/pro/oxfun.js +1112 -0
  719. package/js/src/src/pro/p2b.d.ts +104 -0
  720. package/js/src/src/pro/p2b.js +506 -0
  721. package/js/src/src/pro/paradex.d.ts +54 -0
  722. package/js/src/src/pro/paradex.js +370 -0
  723. package/js/src/src/pro/phemex.d.ts +129 -0
  724. package/js/src/src/pro/phemex.js +1569 -0
  725. package/js/src/src/pro/poloniex.d.ts +214 -0
  726. package/js/src/src/pro/poloniex.js +1318 -0
  727. package/js/src/src/pro/probit.d.ts +91 -0
  728. package/js/src/src/pro/probit.js +593 -0
  729. package/js/src/src/pro/tradeogre.d.ts +49 -0
  730. package/js/src/src/pro/tradeogre.js +284 -0
  731. package/js/src/src/pro/upbit.d.ts +124 -0
  732. package/js/src/src/pro/upbit.js +689 -0
  733. package/js/src/src/pro/vertex.d.ts +104 -0
  734. package/js/src/src/pro/vertex.js +999 -0
  735. package/js/src/src/pro/whitebit.d.ts +123 -0
  736. package/js/src/src/pro/whitebit.js +971 -0
  737. package/js/src/src/pro/woo.d.ts +161 -0
  738. package/js/src/src/pro/woo.js +1351 -0
  739. package/js/src/src/pro/woofipro.d.ts +155 -0
  740. package/js/src/src/pro/woofipro.js +1335 -0
  741. package/js/src/src/pro/xt.d.ts +165 -0
  742. package/js/src/src/pro/xt.js +1230 -0
  743. package/js/src/src/probit.d.ts +283 -0
  744. package/js/src/src/probit.js +1935 -0
  745. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  746. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  747. package/js/src/src/raastin.d.ts +24 -0
  748. package/js/src/src/raastin.js +494 -0
  749. package/js/src/src/ramzinex.d.ts +23 -0
  750. package/js/src/src/ramzinex.js +510 -0
  751. package/js/src/src/sarmayex.d.ts +21 -0
  752. package/js/src/src/sarmayex.js +376 -0
  753. package/js/src/src/sarrafex.d.ts +23 -0
  754. package/js/src/src/sarrafex.js +501 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  756. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  758. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  760. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  762. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  764. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  766. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  768. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  770. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  772. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  774. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  776. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  778. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  780. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  782. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  784. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  786. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  788. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  790. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  792. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  794. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  796. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  797. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  798. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  799. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  800. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  801. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  802. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  806. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  808. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  810. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  812. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  814. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  816. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  818. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  820. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  826. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  828. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  830. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  832. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  833. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  834. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  838. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  860. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  862. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  878. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  880. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  882. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  884. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  890. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  892. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  894. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  896. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  904. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  906. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  910. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  912. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  916. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  917. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  918. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  919. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  920. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  921. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  922. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  923. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  924. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  925. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  926. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  927. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  928. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  930. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  931. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  932. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  933. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  934. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  936. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  938. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  940. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  950. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  952. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  954. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  960. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  994. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  996. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1010. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1012. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1014. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1016. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1017. package/js/src/src/tabdeal.d.ts +23 -0
  1018. package/js/src/src/tabdeal.js +387 -0
  1019. package/js/src/src/tehran_exchange.d.ts +21 -0
  1020. package/js/src/src/tehran_exchange.js +333 -0
  1021. package/js/src/src/tetherland.d.ts +21 -0
  1022. package/js/src/src/tetherland.js +367 -0
  1023. package/js/src/src/timex.d.ts +247 -0
  1024. package/js/src/src/timex.js +1792 -0
  1025. package/js/src/src/tokocrypto.d.ts +261 -0
  1026. package/js/src/src/tokocrypto.js +2641 -0
  1027. package/js/src/src/toobit.d.ts +22 -0
  1028. package/js/src/src/toobit.js +445 -0
  1029. package/js/src/src/tradeogre.d.ts +149 -0
  1030. package/js/src/src/tradeogre.js +878 -0
  1031. package/js/src/src/twox.d.ts +21 -0
  1032. package/js/src/src/twox.js +371 -0
  1033. package/js/src/src/ubitex.d.ts +23 -0
  1034. package/js/src/src/ubitex.js +433 -0
  1035. package/js/src/src/upbit.d.ts +377 -0
  1036. package/js/src/src/upbit.js +2340 -0
  1037. package/js/src/src/vertex.d.ts +346 -0
  1038. package/js/src/src/vertex.js +3146 -0
  1039. package/js/src/src/wallex.d.ts +23 -0
  1040. package/js/src/src/wallex.js +467 -0
  1041. package/js/src/src/wavesexchange.d.ts +244 -0
  1042. package/js/src/src/wavesexchange.js +2747 -0
  1043. package/js/src/src/whitebit.d.ts +571 -0
  1044. package/js/src/src/whitebit.js +3437 -0
  1045. package/js/src/src/woo.d.ts +727 -0
  1046. package/js/src/src/woo.js +4183 -0
  1047. package/js/src/src/woofipro.d.ts +497 -0
  1048. package/js/src/src/woofipro.js +2941 -0
  1049. package/js/src/src/xt.d.ts +568 -0
  1050. package/js/src/src/xt.js +5184 -0
  1051. package/js/src/src/yobit.d.ts +197 -0
  1052. package/js/src/src/yobit.js +1453 -0
  1053. package/js/src/src/zaif.d.ts +136 -0
  1054. package/js/src/src/zaif.js +821 -0
  1055. package/js/src/src/zonda.d.ts +214 -0
  1056. package/js/src/src/zonda.js +1984 -0
  1057. package/js/test.d.ts +1 -1
  1058. package/js/test.js +33 -33
  1059. package/package.json +1 -1
@@ -0,0 +1,3549 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import Exchange from './abstract/cryptocom.js';
9
+ import { Precise } from './base/Precise.js';
10
+ import { AuthenticationError, ArgumentsRequired, ExchangeError, InsufficientFunds, DDoSProtection, InvalidNonce, PermissionDenied, BadRequest, BadSymbol, NotSupported, AccountNotEnabled, OnMaintenance, InvalidOrder, RequestTimeout, OrderNotFound, RateLimitExceeded } from './base/errors.js';
11
+ import { TICK_SIZE } from './base/functions/number.js';
12
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
+ /**
14
+ * @class cryptocom
15
+ * @augments Exchange
16
+ */
17
+ export default class cryptocom extends Exchange {
18
+ describe() {
19
+ return this.deepExtend(super.describe(), {
20
+ 'id': 'cryptocom',
21
+ 'name': 'Crypto.com',
22
+ 'countries': ['MT'],
23
+ 'version': 'v2',
24
+ 'rateLimit': 10,
25
+ 'certified': true,
26
+ 'pro': true,
27
+ 'has': {
28
+ 'CORS': false,
29
+ 'spot': true,
30
+ 'margin': true,
31
+ 'swap': true,
32
+ 'future': true,
33
+ 'option': true,
34
+ 'addMargin': false,
35
+ 'cancelAllOrders': true,
36
+ 'cancelOrder': true,
37
+ 'cancelOrders': true,
38
+ 'cancelOrdersForSymbols': true,
39
+ 'closeAllPositions': false,
40
+ 'closePosition': true,
41
+ 'createMarketBuyOrderWithCost': false,
42
+ 'createMarketOrderWithCost': false,
43
+ 'createMarketSellOrderWithCost': false,
44
+ 'createOrder': true,
45
+ 'createOrders': true,
46
+ 'createStopOrder': true,
47
+ 'createTriggerOrder': true,
48
+ 'editOrder': true,
49
+ 'fetchAccounts': true,
50
+ 'fetchBalance': true,
51
+ 'fetchBidsAsks': false,
52
+ 'fetchBorrowInterest': false,
53
+ 'fetchBorrowRateHistories': false,
54
+ 'fetchBorrowRateHistory': false,
55
+ 'fetchClosedOrders': 'emulated',
56
+ 'fetchCrossBorrowRate': false,
57
+ 'fetchCrossBorrowRates': false,
58
+ 'fetchCurrencies': true,
59
+ 'fetchDepositAddress': true,
60
+ 'fetchDepositAddresses': false,
61
+ 'fetchDepositAddressesByNetwork': true,
62
+ 'fetchDeposits': true,
63
+ 'fetchDepositsWithdrawals': false,
64
+ 'fetchDepositWithdrawFee': 'emulated',
65
+ 'fetchDepositWithdrawFees': true,
66
+ 'fetchFundingHistory': false,
67
+ 'fetchFundingRate': true,
68
+ 'fetchFundingRateHistory': true,
69
+ 'fetchFundingRates': false,
70
+ 'fetchGreeks': false,
71
+ 'fetchIndexOHLCV': false,
72
+ 'fetchIsolatedBorrowRate': false,
73
+ 'fetchIsolatedBorrowRates': false,
74
+ 'fetchLedger': true,
75
+ 'fetchLeverage': false,
76
+ 'fetchLeverageTiers': false,
77
+ 'fetchMarginAdjustmentHistory': false,
78
+ 'fetchMarginMode': false,
79
+ 'fetchMarketLeverageTiers': false,
80
+ 'fetchMarkets': true,
81
+ 'fetchMarkOHLCV': false,
82
+ 'fetchMySettlementHistory': false,
83
+ 'fetchMyTrades': true,
84
+ 'fetchOHLCV': true,
85
+ 'fetchOpenOrders': true,
86
+ 'fetchOrder': true,
87
+ 'fetchOrderBook': true,
88
+ 'fetchOrders': true,
89
+ 'fetchPosition': true,
90
+ 'fetchPositionHistory': false,
91
+ 'fetchPositionMode': false,
92
+ 'fetchPositions': true,
93
+ 'fetchPositionsHistory': false,
94
+ 'fetchPremiumIndexOHLCV': false,
95
+ 'fetchSettlementHistory': true,
96
+ 'fetchStatus': false,
97
+ 'fetchTicker': true,
98
+ 'fetchTickers': true,
99
+ 'fetchTime': false,
100
+ 'fetchTrades': true,
101
+ 'fetchTradingFee': true,
102
+ 'fetchTradingFees': true,
103
+ 'fetchTransactionFees': false,
104
+ 'fetchTransactions': false,
105
+ 'fetchTransfers': false,
106
+ 'fetchUnderlyingAssets': false,
107
+ 'fetchVolatilityHistory': false,
108
+ 'fetchWithdrawals': true,
109
+ 'reduceMargin': false,
110
+ 'repayCrossMargin': false,
111
+ 'repayIsolatedMargin': false,
112
+ 'sandbox': true,
113
+ 'setLeverage': false,
114
+ 'setMarginMode': false,
115
+ 'setPositionMode': false,
116
+ 'transfer': false,
117
+ 'withdraw': true,
118
+ },
119
+ 'timeframes': {
120
+ '1m': '1m',
121
+ '5m': '5m',
122
+ '15m': '15m',
123
+ '30m': '30m',
124
+ '1h': '1h',
125
+ '4h': '4h',
126
+ '6h': '6h',
127
+ '12h': '12h',
128
+ '1d': '1D',
129
+ '1w': '7D',
130
+ '2w': '14D',
131
+ '1M': '1M',
132
+ },
133
+ 'urls': {
134
+ 'logo': 'https://user-images.githubusercontent.com/1294454/147792121-38ed5e36-c229-48d6-b49a-48d05fc19ed4.jpeg',
135
+ 'test': {
136
+ 'v1': 'https://uat-api.3ona.co/exchange/v1',
137
+ 'v2': 'https://uat-api.3ona.co/v2',
138
+ 'derivatives': 'https://uat-api.3ona.co/v2',
139
+ },
140
+ 'api': {
141
+ 'base': 'https://api.crypto.com',
142
+ 'v1': 'https://api.crypto.com/exchange/v1',
143
+ 'v2': 'https://api.crypto.com/v2',
144
+ 'derivatives': 'https://deriv-api.crypto.com/v1',
145
+ },
146
+ 'www': 'https://crypto.com/',
147
+ 'referral': {
148
+ 'url': 'https://crypto.com/exch/kdacthrnxt',
149
+ 'discount': 0.75,
150
+ },
151
+ 'doc': [
152
+ 'https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html',
153
+ 'https://exchange-docs.crypto.com/spot/index.html',
154
+ 'https://exchange-docs.crypto.com/derivatives/index.html',
155
+ ],
156
+ 'fees': 'https://crypto.com/exchange/document/fees-limits',
157
+ },
158
+ 'api': {
159
+ 'base': {
160
+ 'public': {
161
+ 'get': {
162
+ 'v1/public/get-announcements': 1, // no description of rate limit
163
+ },
164
+ },
165
+ },
166
+ 'v1': {
167
+ 'public': {
168
+ 'get': {
169
+ 'public/auth': 10 / 3,
170
+ 'public/get-instruments': 10 / 3,
171
+ 'public/get-book': 1,
172
+ 'public/get-candlestick': 1,
173
+ 'public/get-trades': 1,
174
+ 'public/get-tickers': 1,
175
+ 'public/get-valuations': 1,
176
+ 'public/get-expired-settlement-price': 10 / 3,
177
+ 'public/get-insurance': 1,
178
+ 'public/get-risk-parameters': 1,
179
+ },
180
+ 'post': {
181
+ 'public/staking/get-conversion-rate': 2,
182
+ },
183
+ },
184
+ 'private': {
185
+ 'post': {
186
+ 'private/set-cancel-on-disconnect': 10 / 3,
187
+ 'private/get-cancel-on-disconnect': 10 / 3,
188
+ 'private/user-balance': 10 / 3,
189
+ 'private/user-balance-history': 10 / 3,
190
+ 'private/get-positions': 10 / 3,
191
+ 'private/create-order': 2 / 3,
192
+ 'private/amend-order': 4 / 3,
193
+ 'private/create-order-list': 10 / 3,
194
+ 'private/cancel-order': 2 / 3,
195
+ 'private/cancel-order-list': 10 / 3,
196
+ 'private/cancel-all-orders': 2 / 3,
197
+ 'private/close-position': 10 / 3,
198
+ 'private/get-order-history': 100,
199
+ 'private/get-open-orders': 10 / 3,
200
+ 'private/get-order-detail': 1 / 3,
201
+ 'private/get-trades': 100,
202
+ 'private/change-account-leverage': 10 / 3,
203
+ 'private/get-transactions': 10 / 3,
204
+ 'private/create-subaccount-transfer': 10 / 3,
205
+ 'private/get-subaccount-balances': 10 / 3,
206
+ 'private/get-order-list': 10 / 3,
207
+ 'private/create-withdrawal': 10 / 3,
208
+ 'private/get-currency-networks': 10 / 3,
209
+ 'private/get-deposit-address': 10 / 3,
210
+ 'private/get-accounts': 10 / 3,
211
+ 'private/get-withdrawal-history': 10 / 3,
212
+ 'private/get-deposit-history': 10 / 3,
213
+ 'private/get-fee-rate': 2,
214
+ 'private/get-instrument-fee-rate': 2,
215
+ 'private/staking/stake': 2,
216
+ 'private/staking/unstake': 2,
217
+ 'private/staking/get-staking-position': 2,
218
+ 'private/staking/get-staking-instruments': 2,
219
+ 'private/staking/get-open-stake': 2,
220
+ 'private/staking/get-stake-history': 2,
221
+ 'private/staking/get-reward-history': 2,
222
+ 'private/staking/convert': 2,
223
+ 'private/staking/get-open-convert': 2,
224
+ 'private/staking/get-convert-history': 2,
225
+ },
226
+ },
227
+ },
228
+ 'v2': {
229
+ 'public': {
230
+ 'get': {
231
+ 'public/auth': 1,
232
+ 'public/get-instruments': 1,
233
+ 'public/get-book': 1,
234
+ 'public/get-candlestick': 1,
235
+ 'public/get-ticker': 1,
236
+ 'public/get-trades': 1,
237
+ 'public/margin/get-transfer-currencies': 1,
238
+ 'public/margin/get-load-currenices': 1,
239
+ 'public/respond-heartbeat': 1,
240
+ },
241
+ },
242
+ 'private': {
243
+ 'post': {
244
+ 'private/set-cancel-on-disconnect': 10 / 3,
245
+ 'private/get-cancel-on-disconnect': 10 / 3,
246
+ 'private/create-withdrawal': 10 / 3,
247
+ 'private/get-withdrawal-history': 10 / 3,
248
+ 'private/get-currency-networks': 10 / 3,
249
+ 'private/get-deposit-history': 10 / 3,
250
+ 'private/get-deposit-address': 10 / 3,
251
+ 'private/export/create-export-request': 10 / 3,
252
+ 'private/export/get-export-requests': 10 / 3,
253
+ 'private/export/download-export-output': 10 / 3,
254
+ 'private/get-account-summary': 10 / 3,
255
+ 'private/create-order': 2 / 3,
256
+ 'private/cancel-order': 2 / 3,
257
+ 'private/cancel-all-orders': 2 / 3,
258
+ 'private/create-order-list': 10 / 3,
259
+ 'private/get-order-history': 10 / 3,
260
+ 'private/get-open-orders': 10 / 3,
261
+ 'private/get-order-detail': 1 / 3,
262
+ 'private/get-trades': 100,
263
+ 'private/get-accounts': 10 / 3,
264
+ 'private/get-subaccount-balances': 10 / 3,
265
+ 'private/create-subaccount-transfer': 10 / 3,
266
+ 'private/otc/get-otc-user': 10 / 3,
267
+ 'private/otc/get-instruments': 10 / 3,
268
+ 'private/otc/request-quote': 100,
269
+ 'private/otc/accept-quote': 100,
270
+ 'private/otc/get-quote-history': 10 / 3,
271
+ 'private/otc/get-trade-history': 10 / 3,
272
+ 'private/otc/create-order': 10 / 3,
273
+ },
274
+ },
275
+ },
276
+ 'derivatives': {
277
+ 'public': {
278
+ 'get': {
279
+ 'public/auth': 10 / 3,
280
+ 'public/get-instruments': 10 / 3,
281
+ 'public/get-book': 1,
282
+ 'public/get-candlestick': 1,
283
+ 'public/get-trades': 1,
284
+ 'public/get-tickers': 1,
285
+ 'public/get-valuations': 1,
286
+ 'public/get-expired-settlement-price': 10 / 3,
287
+ 'public/get-insurance': 1,
288
+ },
289
+ },
290
+ 'private': {
291
+ 'post': {
292
+ 'private/set-cancel-on-disconnect': 10 / 3,
293
+ 'private/get-cancel-on-disconnect': 10 / 3,
294
+ 'private/user-balance': 10 / 3,
295
+ 'private/user-balance-history': 10 / 3,
296
+ 'private/get-positions': 10 / 3,
297
+ 'private/create-order': 2 / 3,
298
+ 'private/create-order-list': 10 / 3,
299
+ 'private/cancel-order': 2 / 3,
300
+ 'private/cancel-order-list': 10 / 3,
301
+ 'private/cancel-all-orders': 2 / 3,
302
+ 'private/close-position': 10 / 3,
303
+ 'private/convert-collateral': 10 / 3,
304
+ 'private/get-order-history': 100,
305
+ 'private/get-open-orders': 10 / 3,
306
+ 'private/get-order-detail': 1 / 3,
307
+ 'private/get-trades': 100,
308
+ 'private/change-account-leverage': 10 / 3,
309
+ 'private/get-transactions': 10 / 3,
310
+ 'private/create-subaccount-transfer': 10 / 3,
311
+ 'private/get-subaccount-balances': 10 / 3,
312
+ 'private/get-order-list': 10 / 3,
313
+ },
314
+ },
315
+ },
316
+ },
317
+ 'fees': {
318
+ 'trading': {
319
+ 'maker': this.parseNumber('0.004'),
320
+ 'taker': this.parseNumber('0.004'),
321
+ 'tiers': {
322
+ 'maker': [
323
+ [this.parseNumber('0'), this.parseNumber('0.004')],
324
+ [this.parseNumber('25000'), this.parseNumber('0.0035')],
325
+ [this.parseNumber('50000'), this.parseNumber('0.0015')],
326
+ [this.parseNumber('100000'), this.parseNumber('0.001')],
327
+ [this.parseNumber('250000'), this.parseNumber('0.0009')],
328
+ [this.parseNumber('1000000'), this.parseNumber('0.0008')],
329
+ [this.parseNumber('20000000'), this.parseNumber('0.0007')],
330
+ [this.parseNumber('100000000'), this.parseNumber('0.0006')],
331
+ [this.parseNumber('200000000'), this.parseNumber('0.0004')],
332
+ ],
333
+ 'taker': [
334
+ [this.parseNumber('0'), this.parseNumber('0.004')],
335
+ [this.parseNumber('25000'), this.parseNumber('0.0035')],
336
+ [this.parseNumber('50000'), this.parseNumber('0.0025')],
337
+ [this.parseNumber('100000'), this.parseNumber('0.0016')],
338
+ [this.parseNumber('250000'), this.parseNumber('0.00015')],
339
+ [this.parseNumber('1000000'), this.parseNumber('0.00014')],
340
+ [this.parseNumber('20000000'), this.parseNumber('0.00013')],
341
+ [this.parseNumber('100000000'), this.parseNumber('0.00012')],
342
+ [this.parseNumber('200000000'), this.parseNumber('0.0001')],
343
+ ],
344
+ },
345
+ },
346
+ },
347
+ 'options': {
348
+ 'defaultType': 'spot',
349
+ 'accountsById': {
350
+ 'funding': 'SPOT',
351
+ 'spot': 'SPOT',
352
+ 'margin': 'MARGIN',
353
+ 'derivatives': 'DERIVATIVES',
354
+ 'swap': 'DERIVATIVES',
355
+ 'future': 'DERIVATIVES',
356
+ },
357
+ 'networks': {
358
+ 'BEP20': 'BSC',
359
+ 'ERC20': 'ETH',
360
+ 'TRC20': 'TRON',
361
+ },
362
+ 'broker': 'CCXT',
363
+ },
364
+ 'features': {
365
+ 'default': {
366
+ 'sandbox': true,
367
+ 'createOrder': {
368
+ 'marginMode': true,
369
+ 'triggerPrice': true,
370
+ // todo: implementation fix
371
+ 'triggerPriceType': {
372
+ 'last': true,
373
+ 'mark': true,
374
+ 'index': true,
375
+ },
376
+ 'triggerDirection': false,
377
+ 'stopLossPrice': true,
378
+ 'takeProfitPrice': true,
379
+ 'attachedStopLossTakeProfit': undefined,
380
+ 'timeInForce': {
381
+ 'IOC': true,
382
+ 'FOK': true,
383
+ 'PO': true,
384
+ 'GTD': false,
385
+ },
386
+ 'hedged': false,
387
+ 'selfTradePrevention': true,
388
+ 'trailing': false,
389
+ 'iceberg': false,
390
+ 'leverage': false,
391
+ 'marketBuyByCost': true,
392
+ 'marketBuyRequiresPrice': true,
393
+ },
394
+ 'createOrders': {
395
+ 'max': 10,
396
+ },
397
+ 'fetchMyTrades': {
398
+ 'marginMode': false,
399
+ 'limit': 100,
400
+ 'daysBack': undefined,
401
+ 'untilDays': 1,
402
+ 'symbolRequired': false,
403
+ },
404
+ 'fetchOrder': {
405
+ 'marginMode': false,
406
+ 'trigger': false,
407
+ 'trailing': false,
408
+ 'symbolRequired': false,
409
+ },
410
+ 'fetchOpenOrders': {
411
+ 'marginMode': true,
412
+ 'limit': 100,
413
+ 'trigger': false,
414
+ 'trailing': false,
415
+ 'symbolRequired': false,
416
+ },
417
+ 'fetchOrders': {
418
+ 'marginMode': false,
419
+ 'limit': 100,
420
+ 'daysBack': undefined,
421
+ 'untilDays': 1,
422
+ 'trigger': false,
423
+ 'trailing': false,
424
+ 'symbolRequired': false,
425
+ },
426
+ 'fetchClosedOrders': {
427
+ 'marginMode': false,
428
+ 'limit': 100,
429
+ 'daysBack': undefined,
430
+ 'daysBackCanceled': undefined,
431
+ 'untilDays': 1,
432
+ 'trigger': false,
433
+ 'trailing': false,
434
+ 'symbolRequired': false,
435
+ },
436
+ 'fetchOHLCV': {
437
+ 'limit': 300,
438
+ },
439
+ },
440
+ 'spot': {
441
+ 'extends': 'default',
442
+ },
443
+ 'swap': {
444
+ 'linear': {
445
+ 'extends': 'default',
446
+ },
447
+ 'inverse': {
448
+ 'extends': 'default',
449
+ },
450
+ },
451
+ 'future': {
452
+ 'linear': {
453
+ 'extends': 'default',
454
+ },
455
+ 'inverse': {
456
+ 'extends': 'default',
457
+ },
458
+ },
459
+ },
460
+ // https://exchange-docs.crypto.com/spot/index.html#response-and-reason-codes
461
+ 'commonCurrencies': {
462
+ 'USD_STABLE_COIN': 'USDC',
463
+ },
464
+ 'precisionMode': TICK_SIZE,
465
+ 'exceptions': {
466
+ 'exact': {
467
+ '219': InvalidOrder,
468
+ '306': InsufficientFunds,
469
+ '314': InvalidOrder,
470
+ '325': InvalidOrder,
471
+ '415': InvalidOrder,
472
+ '10001': ExchangeError,
473
+ '10002': PermissionDenied,
474
+ '10003': PermissionDenied,
475
+ '10004': BadRequest,
476
+ '10005': PermissionDenied,
477
+ '10006': DDoSProtection,
478
+ '10007': InvalidNonce,
479
+ '10008': BadRequest,
480
+ '10009': BadRequest,
481
+ '20001': BadRequest,
482
+ '20002': InsufficientFunds,
483
+ '20005': AccountNotEnabled,
484
+ '30003': BadSymbol,
485
+ '30004': BadRequest,
486
+ '30005': BadRequest,
487
+ '30006': InvalidOrder,
488
+ '30007': InvalidOrder,
489
+ '30008': InvalidOrder,
490
+ '30009': InvalidOrder,
491
+ '30010': BadRequest,
492
+ '30013': InvalidOrder,
493
+ '30014': InvalidOrder,
494
+ '30016': InvalidOrder,
495
+ '30017': InvalidOrder,
496
+ '30023': InvalidOrder,
497
+ '30024': InvalidOrder,
498
+ '30025': InvalidOrder,
499
+ '40001': BadRequest,
500
+ '40002': BadRequest,
501
+ '40003': BadRequest,
502
+ '40004': BadRequest,
503
+ '40005': BadRequest,
504
+ '40006': BadRequest,
505
+ '40007': BadRequest,
506
+ '40101': AuthenticationError,
507
+ '40102': InvalidNonce,
508
+ '40103': AuthenticationError,
509
+ '40104': AuthenticationError,
510
+ '40107': BadRequest,
511
+ '40401': OrderNotFound,
512
+ '40801': RequestTimeout,
513
+ '42901': RateLimitExceeded,
514
+ '43005': InvalidOrder,
515
+ '43003': InvalidOrder,
516
+ '43004': InvalidOrder,
517
+ '43012': BadRequest,
518
+ '50001': ExchangeError,
519
+ '9010001': OnMaintenance, // {"code":9010001,"message":"SYSTEM_MAINTENANCE","details":"Crypto.com Exchange is currently under maintenance. Please refer to https://status.crypto.com for more details."}
520
+ },
521
+ 'broad': {},
522
+ },
523
+ });
524
+ }
525
+ /**
526
+ * @method
527
+ * @name cryptocom#fetchCurrencies
528
+ * @description fetches all available currencies on an exchange
529
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-currency-networks
530
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
531
+ * @returns {object} an associative dictionary of currencies
532
+ */
533
+ async fetchCurrencies(params = {}) {
534
+ // this endpoint requires authentication
535
+ if (!this.checkRequiredCredentials(false)) {
536
+ return undefined;
537
+ }
538
+ let skipFetchCurrencies = false;
539
+ [skipFetchCurrencies, params] = this.handleOptionAndParams(params, 'fetchCurrencies', 'skipFetchCurrencies', false);
540
+ if (skipFetchCurrencies) {
541
+ // sub-accounts can't access this endpoint
542
+ return undefined;
543
+ }
544
+ let response = {};
545
+ try {
546
+ response = await this.v1PrivatePostPrivateGetCurrencyNetworks(params);
547
+ }
548
+ catch (e) {
549
+ if (e instanceof ExchangeError) {
550
+ // sub-accounts can't access this endpoint
551
+ // {"code":"10001","msg":"SYS_ERROR"}
552
+ return undefined;
553
+ }
554
+ throw e;
555
+ // do nothing
556
+ // sub-accounts can't access this endpoint
557
+ }
558
+ //
559
+ // {
560
+ // "id": "1747502328559",
561
+ // "method": "private/get-currency-networks",
562
+ // "code": "0",
563
+ // "result": {
564
+ // "update_time": "1747502281000",
565
+ // "currency_map": {
566
+ // "USDT": {
567
+ // "full_name": "Tether USD",
568
+ // "default_network": "ETH",
569
+ // "network_list": [
570
+ // {
571
+ // "network_id": "ETH",
572
+ // "withdrawal_fee": "10.00000000",
573
+ // "withdraw_enabled": true,
574
+ // "min_withdrawal_amount": "20.0",
575
+ // "deposit_enabled": true,
576
+ // "confirmation_required": "32"
577
+ // },
578
+ // {
579
+ // "network_id": "CRONOS",
580
+ // "withdrawal_fee": "0.18000000",
581
+ // "withdraw_enabled": true,
582
+ // "min_withdrawal_amount": "0.35",
583
+ // "deposit_enabled": true,
584
+ // "confirmation_required": "15"
585
+ // },
586
+ // {
587
+ // "network_id": "SOL",
588
+ // "withdrawal_fee": "5.31000000",
589
+ // "withdraw_enabled": true,
590
+ // "min_withdrawal_amount": "10.62",
591
+ // "deposit_enabled": true,
592
+ // "confirmation_required": "1"
593
+ // }
594
+ // ]
595
+ // }
596
+ // }
597
+ // }
598
+ // }
599
+ //
600
+ const resultData = this.safeDict(response, 'result', {});
601
+ const currencyMap = this.safeDict(resultData, 'currency_map', {});
602
+ const keys = Object.keys(currencyMap);
603
+ const result = {};
604
+ for (let i = 0; i < keys.length; i++) {
605
+ const key = keys[i];
606
+ const currency = currencyMap[key];
607
+ const id = key;
608
+ const code = this.safeCurrencyCode(id);
609
+ const networks = {};
610
+ const chains = this.safeList(currency, 'network_list', []);
611
+ for (let j = 0; j < chains.length; j++) {
612
+ const chain = chains[j];
613
+ const networkId = this.safeString(chain, 'network_id');
614
+ const network = this.networkIdToCode(networkId);
615
+ networks[network] = {
616
+ 'info': chain,
617
+ 'id': networkId,
618
+ 'network': network,
619
+ 'active': undefined,
620
+ 'deposit': this.safeBool(chain, 'deposit_enabled', false),
621
+ 'withdraw': this.safeBool(chain, 'withdraw_enabled', false),
622
+ 'fee': this.safeNumber(chain, 'withdrawal_fee'),
623
+ 'precision': undefined,
624
+ 'limits': {
625
+ 'withdraw': {
626
+ 'min': this.safeNumber(chain, 'min_withdrawal_amount'),
627
+ 'max': undefined,
628
+ },
629
+ },
630
+ };
631
+ }
632
+ result[code] = this.safeCurrencyStructure({
633
+ 'info': currency,
634
+ 'id': id,
635
+ 'code': code,
636
+ 'name': this.safeString(currency, 'full_name'),
637
+ 'active': undefined,
638
+ 'deposit': undefined,
639
+ 'withdraw': undefined,
640
+ 'fee': undefined,
641
+ 'precision': undefined,
642
+ 'limits': {
643
+ 'amount': {
644
+ 'min': undefined,
645
+ 'max': undefined,
646
+ },
647
+ },
648
+ 'type': 'crypto',
649
+ 'networks': networks,
650
+ });
651
+ }
652
+ return result;
653
+ }
654
+ /**
655
+ * @method
656
+ * @name cryptocom#fetchMarkets
657
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-instruments
658
+ * @description retrieves data on all markets for cryptocom
659
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
660
+ * @returns {object[]} an array of objects representing market data
661
+ */
662
+ async fetchMarkets(params = {}) {
663
+ const response = await this.v1PublicGetPublicGetInstruments(params);
664
+ //
665
+ // {
666
+ // "id": 1,
667
+ // "method": "public/get-instruments",
668
+ // "code": 0,
669
+ // "result": {
670
+ // "data": [
671
+ // {
672
+ // "symbol": "BTC_USDT",
673
+ // "inst_type": "CCY_PAIR",
674
+ // "display_name": "BTC/USDT",
675
+ // "base_ccy": "BTC",
676
+ // "quote_ccy": "USDT",
677
+ // "quote_decimals": 2,
678
+ // "quantity_decimals": 5,
679
+ // "price_tick_size": "0.01",
680
+ // "qty_tick_size": "0.00001",
681
+ // "max_leverage": "50",
682
+ // "tradable": true,
683
+ // "expiry_timestamp_ms": 0,
684
+ // "beta_product": false,
685
+ // "margin_buy_enabled": false,
686
+ // "margin_sell_enabled": true
687
+ // },
688
+ // {
689
+ // "symbol": "RUNEUSD-PERP",
690
+ // "inst_type": "PERPETUAL_SWAP",
691
+ // "display_name": "RUNEUSD Perpetual",
692
+ // "base_ccy": "RUNE",
693
+ // "quote_ccy": "USD",
694
+ // "quote_decimals": 3,
695
+ // "quantity_decimals": 1,
696
+ // "price_tick_size": "0.001",
697
+ // "qty_tick_size": "0.1",
698
+ // "max_leverage": "50",
699
+ // "tradable": true,
700
+ // "expiry_timestamp_ms": 0,
701
+ // "beta_product": false,
702
+ // "underlying_symbol": "RUNEUSD-INDEX",
703
+ // "contract_size": "1",
704
+ // "margin_buy_enabled": false,
705
+ // "margin_sell_enabled": false
706
+ // },
707
+ // {
708
+ // "symbol": "ETHUSD-230825",
709
+ // "inst_type": "FUTURE",
710
+ // "display_name": "ETHUSD Futures 20230825",
711
+ // "base_ccy": "ETH",
712
+ // "quote_ccy": "USD",
713
+ // "quote_decimals": 2,
714
+ // "quantity_decimals": 4,
715
+ // "price_tick_size": "0.01",
716
+ // "qty_tick_size": "0.0001",
717
+ // "max_leverage": "100",
718
+ // "tradable": true,
719
+ // "expiry_timestamp_ms": 1692950400000,
720
+ // "beta_product": false,
721
+ // "underlying_symbol": "ETHUSD-INDEX",
722
+ // "contract_size": "1",
723
+ // "margin_buy_enabled": false,
724
+ // "margin_sell_enabled": false
725
+ // },
726
+ // {
727
+ // "symbol": "BTCUSD-230630-CW30000",
728
+ // "inst_type": "WARRANT",
729
+ // "display_name": "BTCUSD-230630-CW30000",
730
+ // "base_ccy": "BTC",
731
+ // "quote_ccy": "USD",
732
+ // "quote_decimals": 3,
733
+ // "quantity_decimals": 0,
734
+ // "price_tick_size": "0.001",
735
+ // "qty_tick_size": "10",
736
+ // "max_leverage": "50",
737
+ // "tradable": true,
738
+ // "expiry_timestamp_ms": 1688112000000,
739
+ // "beta_product": false,
740
+ // "underlying_symbol": "BTCUSD-INDEX",
741
+ // "put_call": "CALL",
742
+ // "strike": "30000",
743
+ // "contract_size": "0.0001",
744
+ // "margin_buy_enabled": false,
745
+ // "margin_sell_enabled": false
746
+ // },
747
+ // ]
748
+ // }
749
+ // }
750
+ //
751
+ const resultResponse = this.safeDict(response, 'result', {});
752
+ const data = this.safeList(resultResponse, 'data', []);
753
+ const result = [];
754
+ for (let i = 0; i < data.length; i++) {
755
+ const market = data[i];
756
+ const inst_type = this.safeString(market, 'inst_type');
757
+ const spot = inst_type === 'CCY_PAIR';
758
+ const swap = inst_type === 'PERPETUAL_SWAP';
759
+ const future = inst_type === 'FUTURE';
760
+ const option = inst_type === 'WARRANT';
761
+ const baseId = this.safeString(market, 'base_ccy');
762
+ const quoteId = this.safeString(market, 'quote_ccy');
763
+ const settleId = spot ? undefined : quoteId;
764
+ const base = this.safeCurrencyCode(baseId);
765
+ const quote = this.safeCurrencyCode(quoteId);
766
+ const settle = spot ? undefined : this.safeCurrencyCode(settleId);
767
+ const optionType = this.safeStringLower(market, 'put_call');
768
+ const strike = this.safeString(market, 'strike');
769
+ const marginBuyEnabled = this.safeBool(market, 'margin_buy_enabled');
770
+ const marginSellEnabled = this.safeBool(market, 'margin_sell_enabled');
771
+ const expiryString = this.omitZero(this.safeString(market, 'expiry_timestamp_ms'));
772
+ const expiry = (expiryString !== undefined) ? parseInt(expiryString) : undefined;
773
+ let symbol = base + '/' + quote;
774
+ let type = undefined;
775
+ let contract = undefined;
776
+ if (inst_type === 'CCY_PAIR') {
777
+ type = 'spot';
778
+ contract = false;
779
+ }
780
+ else if (inst_type === 'PERPETUAL_SWAP') {
781
+ type = 'swap';
782
+ symbol = symbol + ':' + quote;
783
+ contract = true;
784
+ }
785
+ else if (inst_type === 'FUTURE') {
786
+ type = 'future';
787
+ symbol = symbol + ':' + quote + '-' + this.yymmdd(expiry);
788
+ contract = true;
789
+ }
790
+ else if (inst_type === 'WARRANT') {
791
+ type = 'option';
792
+ const symbolOptionType = (optionType === 'call') ? 'C' : 'P';
793
+ symbol = symbol + ':' + quote + '-' + this.yymmdd(expiry) + '-' + strike + '-' + symbolOptionType;
794
+ contract = true;
795
+ }
796
+ result.push({
797
+ 'id': this.safeString(market, 'symbol'),
798
+ 'symbol': symbol,
799
+ 'base': base,
800
+ 'quote': quote,
801
+ 'settle': settle,
802
+ 'baseId': baseId,
803
+ 'quoteId': quoteId,
804
+ 'settleId': settleId,
805
+ 'type': type,
806
+ 'spot': spot,
807
+ 'margin': ((marginBuyEnabled) || (marginSellEnabled)),
808
+ 'swap': swap,
809
+ 'future': future,
810
+ 'option': option,
811
+ 'active': this.safeBool(market, 'tradable'),
812
+ 'contract': contract,
813
+ 'linear': (contract) ? true : undefined,
814
+ 'inverse': (contract) ? false : undefined,
815
+ 'contractSize': this.safeNumber(market, 'contract_size'),
816
+ 'expiry': expiry,
817
+ 'expiryDatetime': this.iso8601(expiry),
818
+ 'strike': this.parseNumber(strike),
819
+ 'optionType': optionType,
820
+ 'precision': {
821
+ 'price': this.parseNumber(this.safeString(market, 'price_tick_size')),
822
+ 'amount': this.parseNumber(this.safeString(market, 'qty_tick_size')),
823
+ },
824
+ 'limits': {
825
+ 'leverage': {
826
+ 'min': this.parseNumber('1'),
827
+ 'max': this.safeNumber(market, 'max_leverage'),
828
+ },
829
+ 'amount': {
830
+ 'min': undefined,
831
+ 'max': undefined,
832
+ },
833
+ 'price': {
834
+ 'min': undefined,
835
+ 'max': undefined,
836
+ },
837
+ 'cost': {
838
+ 'min': undefined,
839
+ 'max': undefined,
840
+ },
841
+ },
842
+ 'created': undefined,
843
+ 'info': market,
844
+ });
845
+ }
846
+ return result;
847
+ }
848
+ /**
849
+ * @method
850
+ * @name cryptocom#fetchTickers
851
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
852
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-tickers
853
+ * @see https://exchange-docs.crypto.com/derivatives/index.html#public-get-tickers
854
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
855
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
856
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
857
+ */
858
+ async fetchTickers(symbols = undefined, params = {}) {
859
+ await this.loadMarkets();
860
+ let market = undefined;
861
+ const request = {};
862
+ if (symbols !== undefined) {
863
+ let symbol = undefined;
864
+ if (Array.isArray(symbols)) {
865
+ const symbolsLength = symbols.length;
866
+ if (symbolsLength > 1) {
867
+ throw new BadRequest(this.id + ' fetchTickers() symbols argument cannot contain more than 1 symbol');
868
+ }
869
+ symbol = symbols[0];
870
+ }
871
+ else {
872
+ symbol = symbols;
873
+ }
874
+ market = this.market(symbol);
875
+ request['instrument_name'] = market['id'];
876
+ }
877
+ const response = await this.v1PublicGetPublicGetTickers(this.extend(request, params));
878
+ //
879
+ // {
880
+ // "id": -1,
881
+ // "method": "public/get-tickers",
882
+ // "code": 0,
883
+ // "result": {
884
+ // "data": [
885
+ // {
886
+ // "i": "AVAXUSD-PERP",
887
+ // "h": "13.209",
888
+ // "l": "12.148",
889
+ // "a": "13.209",
890
+ // "v": "1109.8",
891
+ // "vv": "14017.33",
892
+ // "c": "0.0732",
893
+ // "b": "13.210",
894
+ // "k": "13.230",
895
+ // "oi": "10888.9",
896
+ // "t": 1687402657575
897
+ // },
898
+ // ]
899
+ // }
900
+ // }
901
+ //
902
+ const result = this.safeDict(response, 'result', {});
903
+ const data = this.safeList(result, 'data', []);
904
+ return this.parseTickers(data, symbols);
905
+ }
906
+ /**
907
+ * @method
908
+ * @name cryptocom#fetchTicker
909
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-tickers
910
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
911
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
912
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
913
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
914
+ */
915
+ async fetchTicker(symbol, params = {}) {
916
+ await this.loadMarkets();
917
+ symbol = this.symbol(symbol);
918
+ const tickers = await this.fetchTickers([symbol], params);
919
+ return this.safeValue(tickers, symbol);
920
+ }
921
+ /**
922
+ * @method
923
+ * @name cryptocom#fetchOrders
924
+ * @description fetches information on multiple orders made by the user
925
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-order-history
926
+ * @param {string} symbol unified market symbol of the market the orders were made in
927
+ * @param {int} [since] the earliest time in ms to fetch orders for, max date range is one day
928
+ * @param {int} [limit] the maximum number of order structures to retrieve, default 100 max 100
929
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
930
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
931
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
932
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
933
+ */
934
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
935
+ await this.loadMarkets();
936
+ let paginate = false;
937
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');
938
+ if (paginate) {
939
+ return await this.fetchPaginatedCallDynamic('fetchOrders', symbol, since, limit, params);
940
+ }
941
+ let market = undefined;
942
+ const request = {};
943
+ if (symbol !== undefined) {
944
+ market = this.market(symbol);
945
+ request['instrument_name'] = market['id'];
946
+ }
947
+ if (since !== undefined) {
948
+ request['start_time'] = since;
949
+ }
950
+ if (limit !== undefined) {
951
+ request['limit'] = limit;
952
+ }
953
+ const until = this.safeInteger(params, 'until');
954
+ params = this.omit(params, ['until']);
955
+ if (until !== undefined) {
956
+ request['end_time'] = until;
957
+ }
958
+ const response = await this.v1PrivatePostPrivateGetOrderHistory(this.extend(request, params));
959
+ //
960
+ // {
961
+ // "id": 1686881486183,
962
+ // "method": "private/get-order-history",
963
+ // "code": 0,
964
+ // "result": {
965
+ // "data": [
966
+ // {
967
+ // "account_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
968
+ // "order_id": "6142909895014042762",
969
+ // "client_oid": "4e918597-1234-4321-8201-a7577e1e1d91",
970
+ // "order_type": "MARKET",
971
+ // "time_in_force": "GOOD_TILL_CANCEL",
972
+ // "side": "SELL",
973
+ // "exec_inst": [ ],
974
+ // "quantity": "0.00024",
975
+ // "order_value": "5.7054672",
976
+ // "maker_fee_rate": "0",
977
+ // "taker_fee_rate": "0",
978
+ // "avg_price": "25023.97",
979
+ // "trigger_price": "0",
980
+ // "ref_price": "0",
981
+ // "ref_price_type": "NULL_VAL",
982
+ // "cumulative_quantity": "0.00024",
983
+ // "cumulative_value": "6.0057528",
984
+ // "cumulative_fee": "0.001501438200",
985
+ // "status": "FILLED",
986
+ // "update_user_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
987
+ // "order_date": "2023-06-15",
988
+ // "instrument_name": "BTC_USD",
989
+ // "fee_instrument_name": "USD",
990
+ // "create_time": 1686805465891,
991
+ // "create_time_ns": "1686805465891812578",
992
+ // "update_time": 1686805465891
993
+ // }
994
+ // ]
995
+ // }
996
+ // }
997
+ //
998
+ const data = this.safeDict(response, 'result', {});
999
+ const orders = this.safeList(data, 'data', []);
1000
+ return this.parseOrders(orders, market, since, limit);
1001
+ }
1002
+ /**
1003
+ * @method
1004
+ * @name cryptocom#fetchTrades
1005
+ * @description get a list of the most recent trades for a particular symbol
1006
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-trades
1007
+ * @param {string} symbol unified symbol of the market to fetch trades for
1008
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch, maximum date range is one day
1009
+ * @param {int} [limit] the maximum number of trades to fetch
1010
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1011
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
1012
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1013
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1014
+ */
1015
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1016
+ await this.loadMarkets();
1017
+ let paginate = false;
1018
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');
1019
+ if (paginate) {
1020
+ return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params);
1021
+ }
1022
+ const market = this.market(symbol);
1023
+ const request = {
1024
+ 'instrument_name': market['id'],
1025
+ };
1026
+ if (since !== undefined) {
1027
+ request['start_ts'] = since;
1028
+ }
1029
+ if (limit !== undefined) {
1030
+ request['count'] = limit;
1031
+ }
1032
+ const until = this.safeInteger(params, 'until');
1033
+ params = this.omit(params, ['until']);
1034
+ if (until !== undefined) {
1035
+ request['end_ts'] = until;
1036
+ }
1037
+ const response = await this.v1PublicGetPublicGetTrades(this.extend(request, params));
1038
+ //
1039
+ // {
1040
+ // "id": -1,
1041
+ // "method": "public/get-trades",
1042
+ // "code": 0,
1043
+ // "result": {
1044
+ // "data": [
1045
+ // {
1046
+ // "s": "sell",
1047
+ // "p": "26386.00",
1048
+ // "q": "0.00453",
1049
+ // "t": 1686944282062,
1050
+ // "tn" : 1704476468851524373,
1051
+ // "d": "4611686018455979970",
1052
+ // "i": "BTC_USD"
1053
+ // },
1054
+ // ]
1055
+ // }
1056
+ // }
1057
+ //
1058
+ const result = this.safeDict(response, 'result', {});
1059
+ const trades = this.safeList(result, 'data', []);
1060
+ return this.parseTrades(trades, market, since, limit);
1061
+ }
1062
+ /**
1063
+ * @method
1064
+ * @name cryptocom#fetchOHLCV
1065
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1066
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-candlestick
1067
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1068
+ * @param {string} timeframe the length of time each candle represents
1069
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1070
+ * @param {int} [limit] the maximum amount of candles to fetch
1071
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1072
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
1073
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1074
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1075
+ */
1076
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1077
+ await this.loadMarkets();
1078
+ let paginate = false;
1079
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
1080
+ if (paginate) {
1081
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 300);
1082
+ }
1083
+ const market = this.market(symbol);
1084
+ const request = {
1085
+ 'instrument_name': market['id'],
1086
+ 'timeframe': this.safeString(this.timeframes, timeframe, timeframe),
1087
+ };
1088
+ if (limit !== undefined) {
1089
+ if (limit > 300) {
1090
+ limit = 300;
1091
+ }
1092
+ request['count'] = limit;
1093
+ }
1094
+ const now = this.microseconds();
1095
+ const duration = this.parseTimeframe(timeframe);
1096
+ const until = this.safeInteger(params, 'until', now);
1097
+ params = this.omit(params, ['until']);
1098
+ if (since !== undefined) {
1099
+ request['start_ts'] = since - duration * 1000;
1100
+ if (limit !== undefined) {
1101
+ request['end_ts'] = this.sum(since, duration * limit * 1000);
1102
+ }
1103
+ else {
1104
+ request['end_ts'] = until;
1105
+ }
1106
+ }
1107
+ else {
1108
+ request['end_ts'] = until;
1109
+ }
1110
+ const response = await this.v1PublicGetPublicGetCandlestick(this.extend(request, params));
1111
+ //
1112
+ // {
1113
+ // "id": -1,
1114
+ // "method": "public/get-candlestick",
1115
+ // "code": 0,
1116
+ // "result": {
1117
+ // "interval": "1m",
1118
+ // "data": [
1119
+ // {
1120
+ // "o": "26949.89",
1121
+ // "h": "26957.64",
1122
+ // "l": "26948.24",
1123
+ // "c": "26950.00",
1124
+ // "v": "0.0670",
1125
+ // "t": 1687237080000
1126
+ // },
1127
+ // ],
1128
+ // "instrument_name": "BTC_USD"
1129
+ // }
1130
+ // }
1131
+ //
1132
+ const result = this.safeDict(response, 'result', {});
1133
+ const data = this.safeList(result, 'data', []);
1134
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
1135
+ }
1136
+ /**
1137
+ * @method
1138
+ * @name cryptocom#fetchOrderBook
1139
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1140
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-book
1141
+ * @param {string} symbol unified symbol of the market to fetch the order book for
1142
+ * @param {int} [limit] the number of order book entries to return, max 50
1143
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1144
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1145
+ */
1146
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1147
+ await this.loadMarkets();
1148
+ const market = this.market(symbol);
1149
+ const request = {
1150
+ 'instrument_name': market['id'],
1151
+ };
1152
+ if (limit) {
1153
+ request['depth'] = Math.min(limit, 50); // max 50
1154
+ }
1155
+ const response = await this.v1PublicGetPublicGetBook(this.extend(request, params));
1156
+ //
1157
+ // {
1158
+ // "id": -1,
1159
+ // "method": "public/get-book",
1160
+ // "code": 0,
1161
+ // "result": {
1162
+ // "depth": 3,
1163
+ // "data": [
1164
+ // {
1165
+ // "bids": [ [ "30025.00", "0.00004", "1" ], [ "30020.15", "0.02498", "1" ], [ "30020.00", "0.00004", "1" ] ],
1166
+ // "asks": [ [ "30025.01", "0.04090", "1" ], [ "30025.70", "0.01000", "1" ], [ "30026.94", "0.02681", "1" ] ],
1167
+ // "t": 1687491287380
1168
+ // }
1169
+ // ],
1170
+ // "instrument_name": "BTC_USD"
1171
+ // }
1172
+ // }
1173
+ //
1174
+ const result = this.safeDict(response, 'result', {});
1175
+ const data = this.safeList(result, 'data', []);
1176
+ const orderBook = this.safeValue(data, 0);
1177
+ const timestamp = this.safeInteger(orderBook, 't');
1178
+ return this.parseOrderBook(orderBook, symbol, timestamp);
1179
+ }
1180
+ parseBalance(response) {
1181
+ const responseResult = this.safeDict(response, 'result', {});
1182
+ const data = this.safeList(responseResult, 'data', []);
1183
+ const positionBalances = this.safeValue(data[0], 'position_balances', []);
1184
+ const result = { 'info': response };
1185
+ for (let i = 0; i < positionBalances.length; i++) {
1186
+ const balance = positionBalances[i];
1187
+ const currencyId = this.safeString(balance, 'instrument_name');
1188
+ const code = this.safeCurrencyCode(currencyId);
1189
+ const account = this.account();
1190
+ account['total'] = this.safeString(balance, 'quantity');
1191
+ account['used'] = this.safeString(balance, 'reserved_qty');
1192
+ result[code] = account;
1193
+ }
1194
+ return this.safeBalance(result);
1195
+ }
1196
+ /**
1197
+ * @method
1198
+ * @name cryptocom#fetchBalance
1199
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1200
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-user-balance
1201
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1202
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1203
+ */
1204
+ async fetchBalance(params = {}) {
1205
+ await this.loadMarkets();
1206
+ const response = await this.v1PrivatePostPrivateUserBalance(params);
1207
+ //
1208
+ // {
1209
+ // "id": 1687300499018,
1210
+ // "method": "private/user-balance",
1211
+ // "code": 0,
1212
+ // "result": {
1213
+ // "data": [
1214
+ // {
1215
+ // "total_available_balance": "5.84684368",
1216
+ // "total_margin_balance": "5.84684368",
1217
+ // "total_initial_margin": "0",
1218
+ // "total_maintenance_margin": "0",
1219
+ // "total_position_cost": "0",
1220
+ // "total_cash_balance": "6.44412101",
1221
+ // "total_collateral_value": "5.846843685",
1222
+ // "total_session_unrealized_pnl": "0",
1223
+ // "instrument_name": "USD",
1224
+ // "total_session_realized_pnl": "0",
1225
+ // "position_balances": [
1226
+ // {
1227
+ // "quantity": "0.0002119875",
1228
+ // "reserved_qty": "0",
1229
+ // "collateral_weight": "0.9",
1230
+ // "collateral_amount": "5.37549592",
1231
+ // "market_value": "5.97277325",
1232
+ // "max_withdrawal_balance": "0.00021198",
1233
+ // "instrument_name": "BTC",
1234
+ // "hourly_interest_rate": "0"
1235
+ // },
1236
+ // ],
1237
+ // "total_effective_leverage": "0",
1238
+ // "position_limit": "3000000",
1239
+ // "used_position_limit": "0",
1240
+ // "total_borrow": "0",
1241
+ // "margin_score": "0",
1242
+ // "is_liquidating": false,
1243
+ // "has_risk": false,
1244
+ // "terminatable": true
1245
+ // }
1246
+ // ]
1247
+ // }
1248
+ // }
1249
+ //
1250
+ return this.parseBalance(response);
1251
+ }
1252
+ /**
1253
+ * @method
1254
+ * @name cryptocom#fetchOrder
1255
+ * @description fetches information on an order made by the user
1256
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-order-detail
1257
+ * @param {string} id order id
1258
+ * @param {string} symbol unified symbol of the market the order was made in
1259
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1260
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1261
+ */
1262
+ async fetchOrder(id, symbol = undefined, params = {}) {
1263
+ await this.loadMarkets();
1264
+ let market = undefined;
1265
+ if (symbol !== undefined) {
1266
+ market = this.market(symbol);
1267
+ }
1268
+ const request = {
1269
+ 'order_id': id,
1270
+ };
1271
+ const response = await this.v1PrivatePostPrivateGetOrderDetail(this.extend(request, params));
1272
+ //
1273
+ // {
1274
+ // "id": 1686872583882,
1275
+ // "method": "private/get-order-detail",
1276
+ // "code": 0,
1277
+ // "result": {
1278
+ // "account_id": "ae075bef-1234-4321-bd6g-bb9007252a63",
1279
+ // "order_id": "6142909895025252686",
1280
+ // "client_oid": "CCXT_c2d2152cc32d40a3ae7fbf",
1281
+ // "order_type": "LIMIT",
1282
+ // "time_in_force": "GOOD_TILL_CANCEL",
1283
+ // "side": "BUY",
1284
+ // "exec_inst": [ ],
1285
+ // "quantity": "0.00020",
1286
+ // "limit_price": "20000.00",
1287
+ // "order_value": "4",
1288
+ // "avg_price": "0",
1289
+ // "trigger_price": "0",
1290
+ // "ref_price": "0",
1291
+ // "cumulative_quantity": "0",
1292
+ // "cumulative_value": "0",
1293
+ // "cumulative_fee": "0",
1294
+ // "status": "ACTIVE",
1295
+ // "update_user_id": "ae075bef-1234-4321-bd6g-bb9007252a63",
1296
+ // "order_date": "2023-06-15",
1297
+ // "instrument_name": "BTC_USD",
1298
+ // "fee_instrument_name": "BTC",
1299
+ // "create_time": 1686870220684,
1300
+ // "create_time_ns": "1686870220684239675",
1301
+ // "update_time": 1686870220684
1302
+ // }
1303
+ // }
1304
+ //
1305
+ const order = this.safeDict(response, 'result', {});
1306
+ return this.parseOrder(order, market);
1307
+ }
1308
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1309
+ const market = this.market(symbol);
1310
+ const uppercaseType = type.toUpperCase();
1311
+ const request = {
1312
+ 'instrument_name': market['id'],
1313
+ 'side': side.toUpperCase(),
1314
+ 'quantity': this.amountToPrecision(symbol, amount),
1315
+ };
1316
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
1317
+ request['price'] = this.priceToPrecision(symbol, price);
1318
+ }
1319
+ const broker = this.safeString(this.options, 'broker', 'CCXT');
1320
+ request['broker_id'] = broker;
1321
+ let marketType = undefined;
1322
+ let marginMode = undefined;
1323
+ [marketType, params] = this.handleMarketTypeAndParams('createOrder', market, params);
1324
+ [marginMode, params] = this.customHandleMarginModeAndParams('createOrder', params);
1325
+ if ((marketType === 'margin') || (marginMode !== undefined)) {
1326
+ request['spot_margin'] = 'MARGIN';
1327
+ }
1328
+ else if (marketType === 'spot') {
1329
+ request['spot_margin'] = 'SPOT';
1330
+ }
1331
+ const timeInForce = this.safeStringUpper2(params, 'timeInForce', 'time_in_force');
1332
+ if (timeInForce !== undefined) {
1333
+ if (timeInForce === 'GTC') {
1334
+ request['time_in_force'] = 'GOOD_TILL_CANCEL';
1335
+ }
1336
+ else if (timeInForce === 'IOC') {
1337
+ request['time_in_force'] = 'IMMEDIATE_OR_CANCEL';
1338
+ }
1339
+ else if (timeInForce === 'FOK') {
1340
+ request['time_in_force'] = 'FILL_OR_KILL';
1341
+ }
1342
+ else {
1343
+ request['time_in_force'] = timeInForce;
1344
+ }
1345
+ }
1346
+ const postOnly = this.safeBool(params, 'postOnly', false);
1347
+ if ((postOnly) || (timeInForce === 'PO')) {
1348
+ request['exec_inst'] = ['POST_ONLY'];
1349
+ request['time_in_force'] = 'GOOD_TILL_CANCEL';
1350
+ }
1351
+ const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
1352
+ const stopLossPrice = this.safeNumber(params, 'stopLossPrice');
1353
+ const takeProfitPrice = this.safeNumber(params, 'takeProfitPrice');
1354
+ const isTrigger = (triggerPrice !== undefined);
1355
+ const isStopLossTrigger = (stopLossPrice !== undefined);
1356
+ const isTakeProfitTrigger = (takeProfitPrice !== undefined);
1357
+ if (isTrigger) {
1358
+ request['ref_price'] = this.priceToPrecision(symbol, triggerPrice);
1359
+ const priceString = this.numberToString(price);
1360
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
1361
+ if (side === 'buy') {
1362
+ if (Precise.stringLt(priceString, triggerPrice)) {
1363
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1364
+ }
1365
+ else {
1366
+ request['type'] = 'STOP_LIMIT';
1367
+ }
1368
+ }
1369
+ else {
1370
+ if (Precise.stringLt(priceString, triggerPrice)) {
1371
+ request['type'] = 'STOP_LIMIT';
1372
+ }
1373
+ else {
1374
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1375
+ }
1376
+ }
1377
+ }
1378
+ else {
1379
+ if (side === 'buy') {
1380
+ if (Precise.stringLt(priceString, triggerPrice)) {
1381
+ request['type'] = 'TAKE_PROFIT';
1382
+ }
1383
+ else {
1384
+ request['type'] = 'STOP_LOSS';
1385
+ }
1386
+ }
1387
+ else {
1388
+ if (Precise.stringLt(priceString, triggerPrice)) {
1389
+ request['type'] = 'STOP_LOSS';
1390
+ }
1391
+ else {
1392
+ request['type'] = 'TAKE_PROFIT';
1393
+ }
1394
+ }
1395
+ }
1396
+ }
1397
+ else if (isStopLossTrigger) {
1398
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT')) {
1399
+ request['type'] = 'STOP_LIMIT';
1400
+ }
1401
+ else {
1402
+ request['type'] = 'STOP_LOSS';
1403
+ }
1404
+ request['ref_price'] = this.priceToPrecision(symbol, stopLossPrice);
1405
+ }
1406
+ else if (isTakeProfitTrigger) {
1407
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
1408
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1409
+ }
1410
+ else {
1411
+ request['type'] = 'TAKE_PROFIT';
1412
+ }
1413
+ request['ref_price'] = this.priceToPrecision(symbol, takeProfitPrice);
1414
+ }
1415
+ else {
1416
+ request['type'] = uppercaseType;
1417
+ }
1418
+ params = this.omit(params, ['postOnly', 'clientOrderId', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
1419
+ return this.extend(request, params);
1420
+ }
1421
+ /**
1422
+ * @method
1423
+ * @name cryptocom#createOrder
1424
+ * @description create a trade order
1425
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-order
1426
+ * @param {string} symbol unified symbol of the market to create an order in
1427
+ * @param {string} type 'market', 'limit', 'stop_loss', 'stop_limit', 'take_profit', 'take_profit_limit'
1428
+ * @param {string} side 'buy' or 'sell'
1429
+ * @param {float} amount how much you want to trade in units of base currency
1430
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1431
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1432
+ * @param {string} [params.timeInForce] 'GTC', 'IOC', 'FOK' or 'PO'
1433
+ * @param {string} [params.ref_price_type] 'MARK_PRICE', 'INDEX_PRICE', 'LAST_PRICE' which trigger price type to use, default is MARK_PRICE
1434
+ * @param {float} [params.triggerPrice] price to trigger a trigger order
1435
+ * @param {float} [params.stopLossPrice] price to trigger a stop-loss trigger order
1436
+ * @param {float} [params.takeProfitPrice] price to trigger a take-profit trigger order
1437
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1438
+ */
1439
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1440
+ await this.loadMarkets();
1441
+ const market = this.market(symbol);
1442
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
1443
+ const response = await this.v1PrivatePostPrivateCreateOrder(request);
1444
+ //
1445
+ // {
1446
+ // "id": 1686804664362,
1447
+ // "method": "private/create-order",
1448
+ // "code" : 0,
1449
+ // "result": {
1450
+ // "order_id": "6540219377766741832",
1451
+ // "client_oid": "CCXT_d6ef7c3db6c1495aa8b757"
1452
+ // }
1453
+ // }
1454
+ //
1455
+ const result = this.safeDict(response, 'result', {});
1456
+ return this.parseOrder(result, market);
1457
+ }
1458
+ /**
1459
+ * @method
1460
+ * @name cryptocom#createOrders
1461
+ * @description create a list of trade orders
1462
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-order-list-list
1463
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-order-list-oco
1464
+ * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
1465
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1466
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1467
+ */
1468
+ async createOrders(orders, params = {}) {
1469
+ await this.loadMarkets();
1470
+ const ordersRequests = [];
1471
+ for (let i = 0; i < orders.length; i++) {
1472
+ const rawOrder = orders[i];
1473
+ const marketId = this.safeString(rawOrder, 'symbol');
1474
+ const type = this.safeString(rawOrder, 'type');
1475
+ const side = this.safeString(rawOrder, 'side');
1476
+ const amount = this.safeValue(rawOrder, 'amount');
1477
+ const price = this.safeValue(rawOrder, 'price');
1478
+ const orderParams = this.safeDict(rawOrder, 'params', {});
1479
+ const orderRequest = this.createAdvancedOrderRequest(marketId, type, side, amount, price, orderParams);
1480
+ ordersRequests.push(orderRequest);
1481
+ }
1482
+ const contigency = this.safeString(params, 'contingency_type', 'LIST');
1483
+ const request = {
1484
+ 'contingency_type': contigency,
1485
+ 'order_list': ordersRequests,
1486
+ };
1487
+ const response = await this.v1PrivatePostPrivateCreateOrderList(this.extend(request, params));
1488
+ //
1489
+ // {
1490
+ // "id": 12,
1491
+ // "method": "private/create-order-list",
1492
+ // "code": 10001,
1493
+ // "result": {
1494
+ // "result_list": [
1495
+ // {
1496
+ // "index": 0,
1497
+ // "code": 0,
1498
+ // "order_id": "2015106383706015873",
1499
+ // "client_oid": "my_order_0001"
1500
+ // },
1501
+ // {
1502
+ // "index": 1,
1503
+ // "code": 20007,
1504
+ // "message": "INVALID_REQUEST",
1505
+ // "client_oid": "my_order_0002"
1506
+ // }
1507
+ // ]
1508
+ // }
1509
+ // }
1510
+ //
1511
+ // {
1512
+ // "id" : 1698068111133,
1513
+ // "method" : "private/create-order-list",
1514
+ // "code" : 0,
1515
+ // "result" : [ {
1516
+ // "code" : 0,
1517
+ // "index" : 0,
1518
+ // "client_oid" : "1698068111133_0",
1519
+ // "order_id" : "6142909896519488206"
1520
+ // }, {
1521
+ // "code" : 306,
1522
+ // "index" : 1,
1523
+ // "client_oid" : "1698068111133_1",
1524
+ // "message" : "INSUFFICIENT_AVAILABLE_BALANCE",
1525
+ // "order_id" : "6142909896519488207"
1526
+ // } ]
1527
+ // }
1528
+ //
1529
+ const result = this.safeValue(response, 'result', []);
1530
+ const listId = this.safeString(result, 'list_id');
1531
+ if (listId !== undefined) {
1532
+ const ocoOrders = [{ 'order_id': listId }];
1533
+ return this.parseOrders(ocoOrders);
1534
+ }
1535
+ return this.parseOrders(result);
1536
+ }
1537
+ createAdvancedOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1538
+ // differs slightly from createOrderRequest
1539
+ // since the advanced order endpoint requires a different set of parameters
1540
+ // namely here we don't support ref_price or spot_margin
1541
+ // and market-buy orders need to send notional instead of quantity
1542
+ const market = this.market(symbol);
1543
+ const uppercaseType = type.toUpperCase();
1544
+ const request = {
1545
+ 'instrument_name': market['id'],
1546
+ 'side': side.toUpperCase(),
1547
+ };
1548
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
1549
+ request['price'] = this.priceToPrecision(symbol, price);
1550
+ }
1551
+ const broker = this.safeString(this.options, 'broker', 'CCXT');
1552
+ request['broker_id'] = broker;
1553
+ const timeInForce = this.safeStringUpper2(params, 'timeInForce', 'time_in_force');
1554
+ if (timeInForce !== undefined) {
1555
+ if (timeInForce === 'GTC') {
1556
+ request['time_in_force'] = 'GOOD_TILL_CANCEL';
1557
+ }
1558
+ else if (timeInForce === 'IOC') {
1559
+ request['time_in_force'] = 'IMMEDIATE_OR_CANCEL';
1560
+ }
1561
+ else if (timeInForce === 'FOK') {
1562
+ request['time_in_force'] = 'FILL_OR_KILL';
1563
+ }
1564
+ else {
1565
+ request['time_in_force'] = timeInForce;
1566
+ }
1567
+ }
1568
+ const postOnly = this.safeBool(params, 'postOnly', false);
1569
+ if ((postOnly) || (timeInForce === 'PO')) {
1570
+ request['exec_inst'] = ['POST_ONLY'];
1571
+ request['time_in_force'] = 'GOOD_TILL_CANCEL';
1572
+ }
1573
+ const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
1574
+ const stopLossPrice = this.safeNumber(params, 'stopLossPrice');
1575
+ const takeProfitPrice = this.safeNumber(params, 'takeProfitPrice');
1576
+ const isTrigger = (triggerPrice !== undefined);
1577
+ const isStopLossTrigger = (stopLossPrice !== undefined);
1578
+ const isTakeProfitTrigger = (takeProfitPrice !== undefined);
1579
+ if (isTrigger) {
1580
+ const priceString = this.numberToString(price);
1581
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
1582
+ if (side === 'buy') {
1583
+ if (Precise.stringLt(priceString, triggerPrice)) {
1584
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1585
+ }
1586
+ else {
1587
+ request['type'] = 'STOP_LIMIT';
1588
+ }
1589
+ }
1590
+ else {
1591
+ if (Precise.stringLt(priceString, triggerPrice)) {
1592
+ request['type'] = 'STOP_LIMIT';
1593
+ }
1594
+ else {
1595
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1596
+ }
1597
+ }
1598
+ }
1599
+ else {
1600
+ if (side === 'buy') {
1601
+ if (Precise.stringLt(priceString, triggerPrice)) {
1602
+ request['type'] = 'TAKE_PROFIT';
1603
+ }
1604
+ else {
1605
+ request['type'] = 'STOP_LOSS';
1606
+ }
1607
+ }
1608
+ else {
1609
+ if (Precise.stringLt(priceString, triggerPrice)) {
1610
+ request['type'] = 'STOP_LOSS';
1611
+ }
1612
+ else {
1613
+ request['type'] = 'TAKE_PROFIT';
1614
+ }
1615
+ }
1616
+ }
1617
+ }
1618
+ else if (isStopLossTrigger) {
1619
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT')) {
1620
+ request['type'] = 'STOP_LIMIT';
1621
+ }
1622
+ else {
1623
+ request['type'] = 'STOP_LOSS';
1624
+ }
1625
+ }
1626
+ else if (isTakeProfitTrigger) {
1627
+ if ((uppercaseType === 'LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
1628
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1629
+ }
1630
+ else {
1631
+ request['type'] = 'TAKE_PROFIT';
1632
+ }
1633
+ }
1634
+ else {
1635
+ request['type'] = uppercaseType;
1636
+ }
1637
+ if ((side === 'buy') && ((uppercaseType === 'MARKET') || (uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT'))) {
1638
+ // use createmarketBuy logic here
1639
+ let quoteAmount = undefined;
1640
+ let createMarketBuyOrderRequiresPrice = true;
1641
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
1642
+ const cost = this.safeNumber2(params, 'cost', 'notional');
1643
+ params = this.omit(params, 'cost');
1644
+ if (cost !== undefined) {
1645
+ quoteAmount = this.costToPrecision(symbol, cost);
1646
+ }
1647
+ else if (createMarketBuyOrderRequiresPrice) {
1648
+ if (price === undefined) {
1649
+ throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument');
1650
+ }
1651
+ else {
1652
+ const amountString = this.numberToString(amount);
1653
+ const priceString = this.numberToString(price);
1654
+ const costRequest = Precise.stringMul(amountString, priceString);
1655
+ quoteAmount = this.costToPrecision(symbol, costRequest);
1656
+ }
1657
+ }
1658
+ else {
1659
+ quoteAmount = this.costToPrecision(symbol, amount);
1660
+ }
1661
+ request['notional'] = quoteAmount;
1662
+ }
1663
+ else {
1664
+ request['quantity'] = this.amountToPrecision(symbol, amount);
1665
+ }
1666
+ params = this.omit(params, ['postOnly', 'clientOrderId', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
1667
+ return this.extend(request, params);
1668
+ }
1669
+ /**
1670
+ * @method
1671
+ * @name cryptocom#editOrder
1672
+ * @description edit a trade order
1673
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-amend-order
1674
+ * @param {string} id order id
1675
+ * @param {string} symbol unified market symbol of the order to edit
1676
+ * @param {string} [type] not used by cryptocom editOrder
1677
+ * @param {string} [side] not used by cryptocom editOrder
1678
+ * @param {float} amount (mandatory) how much of the currency you want to trade in units of the base currency
1679
+ * @param {float} price (mandatory) the price for the order, in units of the quote currency, ignored in market orders
1680
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1681
+ * @param {string} [params.clientOrderId] the original client order id of the order to edit, required if id is not provided
1682
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1683
+ */
1684
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
1685
+ await this.loadMarkets();
1686
+ const request = this.editOrderRequest(id, symbol, amount, price, params);
1687
+ const response = await this.v1PrivatePostPrivateAmendOrder(request);
1688
+ const result = this.safeDict(response, 'result', {});
1689
+ return this.parseOrder(result);
1690
+ }
1691
+ editOrderRequest(id, symbol, amount, price = undefined, params = {}) {
1692
+ const request = {};
1693
+ if (id !== undefined) {
1694
+ request['order_id'] = id;
1695
+ }
1696
+ else {
1697
+ const originalClientOrderId = this.safeString2(params, 'orig_client_oid', 'clientOrderId');
1698
+ if (originalClientOrderId === undefined) {
1699
+ throw new ArgumentsRequired(this.id + ' editOrder() requires an id argument or orig_client_oid parameter');
1700
+ }
1701
+ else {
1702
+ request['orig_client_oid'] = originalClientOrderId;
1703
+ params = this.omit(params, ['orig_client_oid', 'clientOrderId']);
1704
+ }
1705
+ }
1706
+ if ((amount === undefined) || (price === undefined)) {
1707
+ throw new ArgumentsRequired(this.id + ' editOrder() requires both amount and price arguments. If you do not want to change the amount or price, you should pass the original values');
1708
+ }
1709
+ request['new_quantity'] = this.amountToPrecision(symbol, amount);
1710
+ request['new_price'] = this.priceToPrecision(symbol, price);
1711
+ return this.extend(request, params);
1712
+ }
1713
+ /**
1714
+ * @method
1715
+ * @name cryptocom#cancelAllOrders
1716
+ * @description cancel all open orders
1717
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-all-orders
1718
+ * @param {string} symbol unified market symbol of the orders to cancel
1719
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1720
+ * @returns {object} Returns exchange raw message{@link https://docs.ccxt.com/#/?id=order-structure}
1721
+ */
1722
+ async cancelAllOrders(symbol = undefined, params = {}) {
1723
+ await this.loadMarkets();
1724
+ let market = undefined;
1725
+ const request = {};
1726
+ if (symbol !== undefined) {
1727
+ market = this.market(symbol);
1728
+ request['instrument_name'] = market['id'];
1729
+ }
1730
+ const response = await this.v1PrivatePostPrivateCancelAllOrders(this.extend(request, params));
1731
+ return [this.safeOrder({ 'info': response })];
1732
+ }
1733
+ /**
1734
+ * @method
1735
+ * @name cryptocom#cancelOrder
1736
+ * @description cancels an open order
1737
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order
1738
+ * @param {string} id the order id of the order to cancel
1739
+ * @param {string} [symbol] unified symbol of the market the order was made in
1740
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1741
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1742
+ */
1743
+ async cancelOrder(id, symbol = undefined, params = {}) {
1744
+ await this.loadMarkets();
1745
+ let market = undefined;
1746
+ if (symbol !== undefined) {
1747
+ market = this.market(symbol);
1748
+ }
1749
+ const request = {
1750
+ 'order_id': id,
1751
+ };
1752
+ const response = await this.v1PrivatePostPrivateCancelOrder(this.extend(request, params));
1753
+ //
1754
+ // {
1755
+ // "id": 1686882846638,
1756
+ // "method": "private/cancel-order",
1757
+ // "code": 0,
1758
+ // "message": "NO_ERROR",
1759
+ // "result": {
1760
+ // "client_oid": "CCXT_c2d2152cc32d40a3ae7fbf",
1761
+ // "order_id": "6142909895025252686"
1762
+ // }
1763
+ // }
1764
+ //
1765
+ const result = this.safeDict(response, 'result', {});
1766
+ return this.parseOrder(result, market);
1767
+ }
1768
+ /**
1769
+ * @method
1770
+ * @name cryptocom#cancelOrders
1771
+ * @description cancel multiple orders
1772
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
1773
+ * @param {string[]} ids order ids
1774
+ * @param {string} symbol unified market symbol
1775
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1776
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1777
+ */
1778
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1779
+ if (symbol === undefined) {
1780
+ throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
1781
+ }
1782
+ await this.loadMarkets();
1783
+ const market = this.market(symbol);
1784
+ const orderRequests = [];
1785
+ for (let i = 0; i < ids.length; i++) {
1786
+ const id = ids[i];
1787
+ const order = {
1788
+ 'instrument_name': market['id'],
1789
+ 'order_id': id.toString(),
1790
+ };
1791
+ orderRequests.push(order);
1792
+ }
1793
+ const request = {
1794
+ 'contingency_type': 'LIST',
1795
+ 'order_list': orderRequests,
1796
+ };
1797
+ const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
1798
+ const result = this.safeList(response, 'result', []);
1799
+ return this.parseOrders(result, market, undefined, undefined, params);
1800
+ }
1801
+ /**
1802
+ * @method
1803
+ * @name cryptocom#cancelOrdersForSymbols
1804
+ * @description cancel multiple orders for multiple symbols
1805
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
1806
+ * @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol, example [{"id": "a", "symbol": "BTC/USDT"}, {"id": "b", "symbol": "ETH/USDT"}]
1807
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1808
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1809
+ */
1810
+ async cancelOrdersForSymbols(orders, params = {}) {
1811
+ await this.loadMarkets();
1812
+ const orderRequests = [];
1813
+ for (let i = 0; i < orders.length; i++) {
1814
+ const order = orders[i];
1815
+ const id = this.safeString(order, 'id');
1816
+ const symbol = this.safeString(order, 'symbol');
1817
+ const market = this.market(symbol);
1818
+ const orderItem = {
1819
+ 'instrument_name': market['id'],
1820
+ 'order_id': id.toString(),
1821
+ };
1822
+ orderRequests.push(orderItem);
1823
+ }
1824
+ const request = {
1825
+ 'contingency_type': 'LIST',
1826
+ 'order_list': orderRequests,
1827
+ };
1828
+ const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
1829
+ const result = this.safeList(response, 'result', []);
1830
+ return this.parseOrders(result, undefined, undefined, undefined, params);
1831
+ }
1832
+ /**
1833
+ * @method
1834
+ * @name cryptocom#fetchOpenOrders
1835
+ * @description fetch all unfilled currently open orders
1836
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-open-orders
1837
+ * @param {string} symbol unified market symbol
1838
+ * @param {int} [since] the earliest time in ms to fetch open orders for
1839
+ * @param {int} [limit] the maximum number of open order structures to retrieve
1840
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1841
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1842
+ */
1843
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1844
+ await this.loadMarkets();
1845
+ let market = undefined;
1846
+ const request = {};
1847
+ if (symbol !== undefined) {
1848
+ market = this.market(symbol);
1849
+ request['instrument_name'] = market['id'];
1850
+ }
1851
+ const response = await this.v1PrivatePostPrivateGetOpenOrders(this.extend(request, params));
1852
+ //
1853
+ // {
1854
+ // "id": 1686806134961,
1855
+ // "method": "private/get-open-orders",
1856
+ // "code": 0,
1857
+ // "result": {
1858
+ // "data": [
1859
+ // {
1860
+ // "account_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
1861
+ // "order_id": "6530219477767564494",
1862
+ // "client_oid": "CCXT_7ce730f0388441df9bc218",
1863
+ // "order_type": "LIMIT",
1864
+ // "time_in_force": "GOOD_TILL_CANCEL",
1865
+ // "side": "BUY",
1866
+ // "exec_inst": [ ],
1867
+ // "quantity": "0.00020",
1868
+ // "limit_price": "20000.00",
1869
+ // "order_value": "4",
1870
+ // "avg_price": "0",
1871
+ // "trigger_price": "0",
1872
+ // "ref_price": "0",
1873
+ // "cumulative_quantity": "0",
1874
+ // "cumulative_value": "0",
1875
+ // "cumulative_fee": "0",
1876
+ // "status": "ACTIVE",
1877
+ // "update_user_id": "ce075bef-1234-4321-bd6g-gg9007252e63",
1878
+ // "order_date": "2023-06-15",
1879
+ // "instrument_name": "BTC_USD",
1880
+ // "fee_instrument_name": "BTC",
1881
+ // "create_time": 1686806053992,
1882
+ // "create_time_ns": "1686806053992921880",
1883
+ // "update_time": 1686806053993
1884
+ // }
1885
+ // ]
1886
+ // }
1887
+ // }
1888
+ //
1889
+ const data = this.safeDict(response, 'result', {});
1890
+ const orders = this.safeList(data, 'data', []);
1891
+ return this.parseOrders(orders, market, since, limit);
1892
+ }
1893
+ /**
1894
+ * @method
1895
+ * @name cryptocom#fetchMyTrades
1896
+ * @description fetch all trades made by the user
1897
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-trades
1898
+ * @param {string} symbol unified market symbol
1899
+ * @param {int} [since] the earliest time in ms to fetch trades for, maximum date range is one day
1900
+ * @param {int} [limit] the maximum number of trade structures to retrieve
1901
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1902
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
1903
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1904
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1905
+ */
1906
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1907
+ await this.loadMarkets();
1908
+ let paginate = false;
1909
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
1910
+ if (paginate) {
1911
+ return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params, 100);
1912
+ }
1913
+ const request = {};
1914
+ let market = undefined;
1915
+ if (symbol !== undefined) {
1916
+ market = this.market(symbol);
1917
+ request['instrument_name'] = market['id'];
1918
+ }
1919
+ if (since !== undefined) {
1920
+ request['start_time'] = since;
1921
+ }
1922
+ if (limit !== undefined) {
1923
+ request['limit'] = limit;
1924
+ }
1925
+ const until = this.safeInteger(params, 'until');
1926
+ params = this.omit(params, ['until']);
1927
+ if (until !== undefined) {
1928
+ request['end_time'] = until;
1929
+ }
1930
+ const response = await this.v1PrivatePostPrivateGetTrades(this.extend(request, params));
1931
+ //
1932
+ // {
1933
+ // "id": 1686942003520,
1934
+ // "method": "private/get-trades",
1935
+ // "code": 0,
1936
+ // "result": {
1937
+ // "data": [
1938
+ // {
1939
+ // "account_id": "ds075abc-1234-4321-bd6g-ff9007252r63",
1940
+ // "event_date": "2023-06-16",
1941
+ // "journal_type": "TRADING",
1942
+ // "side": "BUY",
1943
+ // "instrument_name": "BTC_USD",
1944
+ // "fees": "-0.0000000525",
1945
+ // "trade_id": "6142909898247428343",
1946
+ // "trade_match_id": "4611686018455978480",
1947
+ // "create_time": 1686941992887,
1948
+ // "traded_price": "26347.16",
1949
+ // "traded_quantity": "0.00021",
1950
+ // "fee_instrument_name": "BTC",
1951
+ // "client_oid": "d1c70a60-810e-4c92-b2a0-72b931cb31e0",
1952
+ // "taker_side": "TAKER",
1953
+ // "order_id": "6142909895036331486",
1954
+ // "create_time_ns": "1686941992887207066"
1955
+ // }
1956
+ // ]
1957
+ // }
1958
+ // }
1959
+ //
1960
+ const result = this.safeDict(response, 'result', {});
1961
+ const trades = this.safeList(result, 'data', []);
1962
+ return this.parseTrades(trades, market, since, limit);
1963
+ }
1964
+ parseAddress(addressString) {
1965
+ let address = undefined;
1966
+ let tag = undefined;
1967
+ let rawTag = undefined;
1968
+ if (addressString.indexOf('?') > 0) {
1969
+ [address, rawTag] = addressString.split('?');
1970
+ const splitted = rawTag.split('=');
1971
+ tag = splitted[1];
1972
+ }
1973
+ else {
1974
+ address = addressString;
1975
+ }
1976
+ return [address, tag];
1977
+ }
1978
+ /**
1979
+ * @method
1980
+ * @name cryptocom#withdraw
1981
+ * @description make a withdrawal
1982
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-withdrawal
1983
+ * @param {string} code unified currency code
1984
+ * @param {float} amount the amount to withdraw
1985
+ * @param {string} address the address to withdraw to
1986
+ * @param {string} tag
1987
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1988
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1989
+ */
1990
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
1991
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
1992
+ await this.loadMarkets();
1993
+ const currency = this.safeCurrency(code); // for instance, USDC is not inferred from markets but it's still available
1994
+ const request = {
1995
+ 'currency': currency['id'],
1996
+ 'amount': amount,
1997
+ 'address': address,
1998
+ };
1999
+ if (tag !== undefined) {
2000
+ request['address_tag'] = tag;
2001
+ }
2002
+ let networkCode = undefined;
2003
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2004
+ const networkId = this.networkCodeToId(networkCode);
2005
+ if (networkId !== undefined) {
2006
+ request['network_id'] = networkId;
2007
+ }
2008
+ const response = await this.v1PrivatePostPrivateCreateWithdrawal(this.extend(request, params));
2009
+ //
2010
+ // {
2011
+ // "id":-1,
2012
+ // "method":"private/create-withdrawal",
2013
+ // "code":0,
2014
+ // "result": {
2015
+ // "id": 2220,
2016
+ // "amount": 1,
2017
+ // "fee": 0.0004,
2018
+ // "symbol": "BTC",
2019
+ // "address": "2NBqqD5GRJ8wHy1PYyCXTe9ke5226FhavBf",
2020
+ // "client_wid": "my_withdrawal_002",
2021
+ // "create_time":1607063412000
2022
+ // }
2023
+ // }
2024
+ //
2025
+ const result = this.safeDict(response, 'result');
2026
+ return this.parseTransaction(result, currency);
2027
+ }
2028
+ /**
2029
+ * @method
2030
+ * @name cryptocom#fetchDepositAddressesByNetwork
2031
+ * @description fetch a dictionary of addresses for a currency, indexed by network
2032
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-address
2033
+ * @param {string} code unified currency code of the currency for the deposit address
2034
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2035
+ * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network
2036
+ */
2037
+ async fetchDepositAddressesByNetwork(code, params = {}) {
2038
+ await this.loadMarkets();
2039
+ const currency = this.safeCurrency(code);
2040
+ const request = {
2041
+ 'currency': currency['id'],
2042
+ };
2043
+ const response = await this.v1PrivatePostPrivateGetDepositAddress(this.extend(request, params));
2044
+ //
2045
+ // {
2046
+ // "id": 1234555011221,
2047
+ // "method": "private/get-deposit-address",
2048
+ // "code": 0,
2049
+ // "result": {
2050
+ // "deposit_address_list": [
2051
+ // {
2052
+ // "currency": "BTC",
2053
+ // "create_time": 1686730755000,
2054
+ // "id": "3737377",
2055
+ // "address": "3N9afggxTSmJ3H4jaMQuWyEiLBzZdAbK6d",
2056
+ // "status":"1",
2057
+ // "network": "BTC"
2058
+ // },
2059
+ // ]
2060
+ // }
2061
+ // }
2062
+ //
2063
+ const data = this.safeDict(response, 'result', {});
2064
+ const addresses = this.safeList(data, 'deposit_address_list', []);
2065
+ const addressesLength = addresses.length;
2066
+ if (addressesLength === 0) {
2067
+ throw new ExchangeError(this.id + ' fetchDepositAddressesByNetwork() generating address...');
2068
+ }
2069
+ const result = {};
2070
+ for (let i = 0; i < addressesLength; i++) {
2071
+ const value = this.safeDict(addresses, i);
2072
+ const addressString = this.safeString(value, 'address');
2073
+ const currencyId = this.safeString(value, 'currency');
2074
+ const responseCode = this.safeCurrencyCode(currencyId);
2075
+ const [address, tag] = this.parseAddress(addressString);
2076
+ this.checkAddress(address);
2077
+ const networkId = this.safeString(value, 'network');
2078
+ const network = this.networkIdToCode(networkId, responseCode);
2079
+ result[network] = {
2080
+ 'info': value,
2081
+ 'currency': responseCode,
2082
+ 'network': network,
2083
+ 'address': address,
2084
+ 'tag': tag,
2085
+ };
2086
+ }
2087
+ return result;
2088
+ }
2089
+ /**
2090
+ * @method
2091
+ * @name cryptocom#fetchDepositAddress
2092
+ * @description fetch the deposit address for a currency associated with this account
2093
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-address
2094
+ * @param {string} code unified currency code
2095
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2096
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2097
+ */
2098
+ async fetchDepositAddress(code, params = {}) {
2099
+ const network = this.safeStringUpper(params, 'network');
2100
+ params = this.omit(params, ['network']);
2101
+ const depositAddresses = await this.fetchDepositAddressesByNetwork(code, params);
2102
+ if (network in depositAddresses) {
2103
+ return depositAddresses[network];
2104
+ }
2105
+ else {
2106
+ const keys = Object.keys(depositAddresses);
2107
+ return depositAddresses[keys[0]];
2108
+ }
2109
+ }
2110
+ /**
2111
+ * @method
2112
+ * @name cryptocom#fetchDeposits
2113
+ * @description fetch all deposits made to an account
2114
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-history
2115
+ * @param {string} code unified currency code
2116
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2117
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2118
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2119
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
2120
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2121
+ */
2122
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2123
+ await this.loadMarkets();
2124
+ let currency = undefined;
2125
+ const request = {};
2126
+ if (code !== undefined) {
2127
+ currency = this.safeCurrency(code);
2128
+ request['currency'] = currency['id'];
2129
+ }
2130
+ if (since !== undefined) {
2131
+ // 90 days date range
2132
+ request['start_ts'] = since;
2133
+ }
2134
+ if (limit !== undefined) {
2135
+ request['page_size'] = limit;
2136
+ }
2137
+ const until = this.safeInteger(params, 'until');
2138
+ params = this.omit(params, ['until']);
2139
+ if (until !== undefined) {
2140
+ request['end_ts'] = until;
2141
+ }
2142
+ const response = await this.v1PrivatePostPrivateGetDepositHistory(this.extend(request, params));
2143
+ //
2144
+ // {
2145
+ // "id": 1688701375714,
2146
+ // "method": "private/get-deposit-history",
2147
+ // "code": 0,
2148
+ // "result": {
2149
+ // "deposit_list": [
2150
+ // {
2151
+ // "currency": "BTC",
2152
+ // "fee": 0,
2153
+ // "create_time": 1688023659000,
2154
+ // "id": "6201135",
2155
+ // "update_time": 1688178509000,
2156
+ // "amount": 0.00114571,
2157
+ // "address": "1234fggxTSmJ3H4jaMQuWyEiLBzZdAbK6d",
2158
+ // "status": "1",
2159
+ // "txid": "f0ae4202b76eb999c301eccdde44dc639bee42d1fdd5974105286ca3393f6065/2"
2160
+ // },
2161
+ // ]
2162
+ // }
2163
+ // }
2164
+ //
2165
+ const data = this.safeDict(response, 'result', {});
2166
+ const depositList = this.safeList(data, 'deposit_list', []);
2167
+ return this.parseTransactions(depositList, currency, since, limit);
2168
+ }
2169
+ /**
2170
+ * @method
2171
+ * @name cryptocom#fetchWithdrawals
2172
+ * @description fetch all withdrawals made from an account
2173
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-withdrawal-history
2174
+ * @param {string} code unified currency code
2175
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2176
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2177
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2178
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
2179
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2180
+ */
2181
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2182
+ await this.loadMarkets();
2183
+ let currency = undefined;
2184
+ const request = {};
2185
+ if (code !== undefined) {
2186
+ currency = this.safeCurrency(code);
2187
+ request['currency'] = currency['id'];
2188
+ }
2189
+ if (since !== undefined) {
2190
+ // 90 days date range
2191
+ request['start_ts'] = since;
2192
+ }
2193
+ if (limit !== undefined) {
2194
+ request['page_size'] = limit;
2195
+ }
2196
+ const until = this.safeInteger(params, 'until');
2197
+ params = this.omit(params, ['until']);
2198
+ if (until !== undefined) {
2199
+ request['end_ts'] = until;
2200
+ }
2201
+ const response = await this.v1PrivatePostPrivateGetWithdrawalHistory(this.extend(request, params));
2202
+ //
2203
+ // {
2204
+ // "id": 1688613879534,
2205
+ // "method": "private/get-withdrawal-history",
2206
+ // "code": 0,
2207
+ // "result": {
2208
+ // "withdrawal_list": [
2209
+ // {
2210
+ // "currency": "BTC",
2211
+ // "client_wid": "",
2212
+ // "fee": 0.0005,
2213
+ // "create_time": 1688613850000,
2214
+ // "id": "5275977",
2215
+ // "update_time": 1688613850000,
2216
+ // "amount": 0.0005,
2217
+ // "address": "1234NMEWbiF8ZkwUMxmfzMxi2A1MQ44bMn",
2218
+ // "status": "1",
2219
+ // "txid": "",
2220
+ // "network_id": "BTC"
2221
+ // }
2222
+ // ]
2223
+ // }
2224
+ // }
2225
+ //
2226
+ const data = this.safeDict(response, 'result', {});
2227
+ const withdrawalList = this.safeList(data, 'withdrawal_list', []);
2228
+ return this.parseTransactions(withdrawalList, currency, since, limit);
2229
+ }
2230
+ parseTicker(ticker, market = undefined) {
2231
+ //
2232
+ // fetchTicker
2233
+ //
2234
+ // {
2235
+ // "i": "BTC_USD",
2236
+ // "h": "30821.45",
2237
+ // "l": "28685.11",
2238
+ // "a": "30446.00",
2239
+ // "v": "1767.8734",
2240
+ // "vv": "52436726.42",
2241
+ // "c": "0.0583",
2242
+ // "b": "30442.00",
2243
+ // "k": "30447.66",
2244
+ // "t": 1687403045415
2245
+ // }
2246
+ //
2247
+ // fetchTickers
2248
+ //
2249
+ // {
2250
+ // "i": "AVAXUSD-PERP",
2251
+ // "h": "13.209",
2252
+ // "l": "12.148",
2253
+ // "a": "13.209",
2254
+ // "v": "1109.8",
2255
+ // "vv": "14017.33",
2256
+ // "c": "0.0732",
2257
+ // "b": "13.210",
2258
+ // "k": "13.230",
2259
+ // "oi": "10888.9",
2260
+ // "t": 1687402657575
2261
+ // }
2262
+ //
2263
+ const timestamp = this.safeInteger(ticker, 't');
2264
+ const marketId = this.safeString(ticker, 'i');
2265
+ market = this.safeMarket(marketId, market, '_');
2266
+ const quote = this.safeString(market, 'quote');
2267
+ const last = this.safeString(ticker, 'a');
2268
+ return this.safeTicker({
2269
+ 'symbol': market['symbol'],
2270
+ 'timestamp': timestamp,
2271
+ 'datetime': this.iso8601(timestamp),
2272
+ 'high': this.safeNumber(ticker, 'h'),
2273
+ 'low': this.safeNumber(ticker, 'l'),
2274
+ 'bid': this.safeNumber(ticker, 'b'),
2275
+ 'bidVolume': undefined,
2276
+ 'ask': this.safeNumber(ticker, 'k'),
2277
+ 'askVolume': undefined,
2278
+ 'vwap': undefined,
2279
+ 'open': undefined,
2280
+ 'close': last,
2281
+ 'last': last,
2282
+ 'previousClose': undefined,
2283
+ 'change': undefined,
2284
+ 'percentage': this.safeString(ticker, 'c'),
2285
+ 'average': undefined,
2286
+ 'baseVolume': this.safeString(ticker, 'v'),
2287
+ 'quoteVolume': (quote === 'USD') ? this.safeString(ticker, 'vv') : undefined,
2288
+ 'info': ticker,
2289
+ }, market);
2290
+ }
2291
+ parseTrade(trade, market = undefined) {
2292
+ //
2293
+ // fetchTrades
2294
+ //
2295
+ // {
2296
+ // "s": "sell",
2297
+ // "p": "26386.00",
2298
+ // "q": "0.00453",
2299
+ // "tn": 1686944282062,
2300
+ // "tn": 1704476468851524373,
2301
+ // "d": "4611686018455979970",
2302
+ // "i": "BTC_USD"
2303
+ // }
2304
+ //
2305
+ // fetchMyTrades
2306
+ //
2307
+ // {
2308
+ // "account_id": "ds075abc-1234-4321-bd6g-ff9007252r63",
2309
+ // "event_date": "2023-06-16",
2310
+ // "journal_type": "TRADING",
2311
+ // "side": "BUY",
2312
+ // "instrument_name": "BTC_USD",
2313
+ // "fees": "-0.0000000525",
2314
+ // "trade_id": "6142909898247428343",
2315
+ // "trade_match_id": "4611686018455978480",
2316
+ // "create_time": 1686941992887,
2317
+ // "traded_price": "26347.16",
2318
+ // "traded_quantity": "0.00021",
2319
+ // "fee_instrument_name": "BTC",
2320
+ // "client_oid": "d1c70a60-1234-4c92-b2a0-72b931cb31e0",
2321
+ // "taker_side": "TAKER",
2322
+ // "order_id": "6142909895036331486",
2323
+ // "create_time_ns": "1686941992887207066"
2324
+ // }
2325
+ //
2326
+ const timestamp = this.safeInteger2(trade, 't', 'create_time');
2327
+ const marketId = this.safeString2(trade, 'i', 'instrument_name');
2328
+ market = this.safeMarket(marketId, market, '_');
2329
+ const feeCurrency = this.safeString(trade, 'fee_instrument_name');
2330
+ const feeCostString = this.safeString(trade, 'fees');
2331
+ return this.safeTrade({
2332
+ 'info': trade,
2333
+ 'id': this.safeString2(trade, 'd', 'trade_id'),
2334
+ 'timestamp': timestamp,
2335
+ 'datetime': this.iso8601(timestamp),
2336
+ 'symbol': market['symbol'],
2337
+ 'order': this.safeString(trade, 'order_id'),
2338
+ 'side': this.safeStringLower2(trade, 's', 'side'),
2339
+ 'takerOrMaker': this.safeStringLower(trade, 'taker_side'),
2340
+ 'price': this.safeNumber2(trade, 'p', 'traded_price'),
2341
+ 'amount': this.safeNumber2(trade, 'q', 'traded_quantity'),
2342
+ 'cost': undefined,
2343
+ 'type': undefined,
2344
+ 'fee': {
2345
+ 'currency': this.safeCurrencyCode(feeCurrency),
2346
+ 'cost': this.parseNumber(Precise.stringNeg(feeCostString)),
2347
+ },
2348
+ }, market);
2349
+ }
2350
+ parseOHLCV(ohlcv, market = undefined) {
2351
+ //
2352
+ // {
2353
+ // "o": "26949.89",
2354
+ // "h": "26957.64",
2355
+ // "l": "26948.24",
2356
+ // "c": "26950.00",
2357
+ // "v": "0.0670",
2358
+ // "t": 1687237080000
2359
+ // }
2360
+ //
2361
+ return [
2362
+ this.safeInteger(ohlcv, 't'),
2363
+ this.safeNumber(ohlcv, 'o'),
2364
+ this.safeNumber(ohlcv, 'h'),
2365
+ this.safeNumber(ohlcv, 'l'),
2366
+ this.safeNumber(ohlcv, 'c'),
2367
+ this.safeNumber(ohlcv, 'v'),
2368
+ ];
2369
+ }
2370
+ parseOrderStatus(status) {
2371
+ const statuses = {
2372
+ 'ACTIVE': 'open',
2373
+ 'CANCELED': 'canceled',
2374
+ 'FILLED': 'closed',
2375
+ 'REJECTED': 'rejected',
2376
+ 'EXPIRED': 'expired',
2377
+ };
2378
+ return this.safeString(statuses, status, status);
2379
+ }
2380
+ parseTimeInForce(timeInForce) {
2381
+ const timeInForces = {
2382
+ 'GOOD_TILL_CANCEL': 'GTC',
2383
+ 'IMMEDIATE_OR_CANCEL': 'IOC',
2384
+ 'FILL_OR_KILL': 'FOK',
2385
+ };
2386
+ return this.safeString(timeInForces, timeInForce, timeInForce);
2387
+ }
2388
+ parseOrder(order, market = undefined) {
2389
+ //
2390
+ // createOrder, cancelOrder
2391
+ //
2392
+ // {
2393
+ // "order_id": "6540219377766741832",
2394
+ // "client_oid": "CCXT_d6ef7c3db6c1495aa8b757"
2395
+ // }
2396
+ //
2397
+ // fetchOpenOrders, fetchOrder, fetchOrders
2398
+ //
2399
+ // {
2400
+ // "account_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
2401
+ // "order_id": "6530219477767564494",
2402
+ // "client_oid": "CCXT_7ce730f0388441df9bc218",
2403
+ // "order_type": "LIMIT",
2404
+ // "time_in_force": "GOOD_TILL_CANCEL",
2405
+ // "side": "BUY",
2406
+ // "exec_inst": [ ],
2407
+ // "quantity": "0.00020",
2408
+ // "limit_price": "20000.00",
2409
+ // "order_value": "4",
2410
+ // "avg_price": "0",
2411
+ // "trigger_price": "0",
2412
+ // "ref_price": "0",
2413
+ // "cumulative_quantity": "0",
2414
+ // "cumulative_value": "0",
2415
+ // "cumulative_fee": "0",
2416
+ // "status": "ACTIVE",
2417
+ // "update_user_id": "ce075bef-1234-4321-bd6g-gg9007252e63",
2418
+ // "order_date": "2023-06-15",
2419
+ // "instrument_name": "BTC_USD",
2420
+ // "fee_instrument_name": "BTC",
2421
+ // "create_time": 1686806053992,
2422
+ // "create_time_ns": "1686806053992921880",
2423
+ // "update_time": 1686806053993
2424
+ // }
2425
+ //
2426
+ // createOrders
2427
+ // {
2428
+ // "code" : 306,
2429
+ // "index" : 1,
2430
+ // "client_oid" : "1698068111133_1",
2431
+ // "message" : "INSUFFICIENT_AVAILABLE_BALANCE",
2432
+ // "order_id" : "6142909896519488207"
2433
+ // }
2434
+ //
2435
+ const code = this.safeInteger(order, 'code');
2436
+ if ((code !== undefined) && (code !== 0)) {
2437
+ return this.safeOrder({
2438
+ 'id': this.safeString(order, 'order_id'),
2439
+ 'clientOrderId': this.safeString(order, 'client_oid'),
2440
+ 'info': order,
2441
+ 'status': 'rejected',
2442
+ });
2443
+ }
2444
+ const created = this.safeInteger(order, 'create_time');
2445
+ const marketId = this.safeString(order, 'instrument_name');
2446
+ const symbol = this.safeSymbol(marketId, market);
2447
+ const execInst = this.safeValue(order, 'exec_inst');
2448
+ let postOnly = undefined;
2449
+ if (execInst !== undefined) {
2450
+ postOnly = false;
2451
+ for (let i = 0; i < execInst.length; i++) {
2452
+ const inst = execInst[i];
2453
+ if (inst === 'POST_ONLY') {
2454
+ postOnly = true;
2455
+ break;
2456
+ }
2457
+ }
2458
+ }
2459
+ const feeCurrency = this.safeString(order, 'fee_instrument_name');
2460
+ return this.safeOrder({
2461
+ 'info': order,
2462
+ 'id': this.safeString(order, 'order_id'),
2463
+ 'clientOrderId': this.safeString(order, 'client_oid'),
2464
+ 'timestamp': created,
2465
+ 'datetime': this.iso8601(created),
2466
+ 'lastTradeTimestamp': this.safeInteger(order, 'update_time'),
2467
+ 'status': this.parseOrderStatus(this.safeString(order, 'status')),
2468
+ 'symbol': symbol,
2469
+ 'type': this.safeStringLower(order, 'order_type'),
2470
+ 'timeInForce': this.parseTimeInForce(this.safeString(order, 'time_in_force')),
2471
+ 'postOnly': postOnly,
2472
+ 'side': this.safeStringLower(order, 'side'),
2473
+ 'price': this.safeNumber(order, 'limit_price'),
2474
+ 'amount': this.safeNumber(order, 'quantity'),
2475
+ 'filled': this.safeNumber(order, 'cumulative_quantity'),
2476
+ 'remaining': undefined,
2477
+ 'average': this.safeNumber(order, 'avg_price'),
2478
+ 'cost': this.safeNumber(order, 'cumulative_value'),
2479
+ 'fee': {
2480
+ 'currency': this.safeCurrencyCode(feeCurrency),
2481
+ 'cost': this.safeNumber(order, 'cumulative_fee'),
2482
+ },
2483
+ 'trades': [],
2484
+ }, market);
2485
+ }
2486
+ parseDepositStatus(status) {
2487
+ const statuses = {
2488
+ '0': 'pending',
2489
+ '1': 'ok',
2490
+ '2': 'failed',
2491
+ '3': 'pending',
2492
+ };
2493
+ return this.safeString(statuses, status, status);
2494
+ }
2495
+ parseWithdrawalStatus(status) {
2496
+ const statuses = {
2497
+ '0': 'pending',
2498
+ '1': 'pending',
2499
+ '2': 'failed',
2500
+ '3': 'pending',
2501
+ '4': 'failed',
2502
+ '5': 'ok',
2503
+ '6': 'canceled',
2504
+ };
2505
+ return this.safeString(statuses, status, status);
2506
+ }
2507
+ parseTransaction(transaction, currency = undefined) {
2508
+ //
2509
+ // fetchDeposits
2510
+ //
2511
+ // {
2512
+ // "currency": "BTC",
2513
+ // "fee": 0,
2514
+ // "create_time": 1688023659000,
2515
+ // "id": "6201135",
2516
+ // "update_time": 1688178509000,
2517
+ // "amount": 0.00114571,
2518
+ // "address": "1234fggxTSmJ3H4jaMQuWyEiLBzZdAbK6d",
2519
+ // "status": "1",
2520
+ // "txid": "f0ae4202b76eb999c301eccdde44dc639bee42d1fdd5974105286ca3393f6065/2"
2521
+ // }
2522
+ //
2523
+ // fetchWithdrawals
2524
+ //
2525
+ // {
2526
+ // "currency": "BTC",
2527
+ // "client_wid": "",
2528
+ // "fee": 0.0005,
2529
+ // "create_time": 1688613850000,
2530
+ // "id": "5775977",
2531
+ // "update_time": 1688613850000,
2532
+ // "amount": 0.0005,
2533
+ // "address": "1234NMEWbiF8ZkwUMxmfzMxi2A1MQ44bMn",
2534
+ // "status": "1",
2535
+ // "txid": "",
2536
+ // "network_id": "BTC"
2537
+ // }
2538
+ //
2539
+ // withdraw
2540
+ //
2541
+ // {
2542
+ // "id": 2220,
2543
+ // "amount": 1,
2544
+ // "fee": 0.0004,
2545
+ // "symbol": "BTC",
2546
+ // "address": "2NBqqD5GRJ8wHy1PYyCXTe9ke5226FhavBf",
2547
+ // "client_wid": "my_withdrawal_002",
2548
+ // "create_time":1607063412000
2549
+ // }
2550
+ //
2551
+ let type = undefined;
2552
+ const rawStatus = this.safeString(transaction, 'status');
2553
+ let status = undefined;
2554
+ if ('client_wid' in transaction) {
2555
+ type = 'withdrawal';
2556
+ status = this.parseWithdrawalStatus(rawStatus);
2557
+ }
2558
+ else {
2559
+ type = 'deposit';
2560
+ status = this.parseDepositStatus(rawStatus);
2561
+ }
2562
+ const addressString = this.safeString(transaction, 'address');
2563
+ const [address, tag] = this.parseAddress(addressString);
2564
+ const currencyId = this.safeString(transaction, 'currency');
2565
+ const code = this.safeCurrencyCode(currencyId, currency);
2566
+ const timestamp = this.safeInteger(transaction, 'create_time');
2567
+ const feeCost = this.safeNumber(transaction, 'fee');
2568
+ let fee = undefined;
2569
+ if (feeCost !== undefined) {
2570
+ fee = { 'currency': code, 'cost': feeCost };
2571
+ }
2572
+ return {
2573
+ 'info': transaction,
2574
+ 'id': this.safeString(transaction, 'id'),
2575
+ 'txid': this.safeString(transaction, 'txid'),
2576
+ 'timestamp': timestamp,
2577
+ 'datetime': this.iso8601(timestamp),
2578
+ 'network': undefined,
2579
+ 'address': address,
2580
+ 'addressTo': address,
2581
+ 'addressFrom': undefined,
2582
+ 'tag': tag,
2583
+ 'tagTo': tag,
2584
+ 'tagFrom': undefined,
2585
+ 'type': type,
2586
+ 'amount': this.safeNumber(transaction, 'amount'),
2587
+ 'currency': code,
2588
+ 'status': status,
2589
+ 'updated': this.safeInteger(transaction, 'update_time'),
2590
+ 'internal': undefined,
2591
+ 'comment': this.safeString(transaction, 'client_wid'),
2592
+ 'fee': fee,
2593
+ };
2594
+ }
2595
+ customHandleMarginModeAndParams(methodName, params = {}) {
2596
+ /**
2597
+ * @ignore
2598
+ * @method
2599
+ * @description marginMode specified by params["marginMode"], this.options["marginMode"], this.options["defaultMarginMode"], params["margin"] = true or this.options["defaultType"] = 'margin'
2600
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2601
+ * @returns {Array} the marginMode in lowercase
2602
+ */
2603
+ const defaultType = this.safeString(this.options, 'defaultType');
2604
+ const isMargin = this.safeBool(params, 'margin', false);
2605
+ params = this.omit(params, 'margin');
2606
+ let marginMode = undefined;
2607
+ [marginMode, params] = this.handleMarginModeAndParams(methodName, params);
2608
+ if (marginMode !== undefined) {
2609
+ if (marginMode !== 'cross') {
2610
+ throw new NotSupported(this.id + ' only cross margin is supported');
2611
+ }
2612
+ }
2613
+ else {
2614
+ if ((defaultType === 'margin') || (isMargin === true)) {
2615
+ marginMode = 'cross';
2616
+ }
2617
+ }
2618
+ return [marginMode, params];
2619
+ }
2620
+ parseDepositWithdrawFee(fee, currency = undefined) {
2621
+ //
2622
+ // {
2623
+ // "full_name": "Alchemix",
2624
+ // "default_network": "ETH",
2625
+ // "network_list": [
2626
+ // {
2627
+ // "network_id": "ETH",
2628
+ // "withdrawal_fee": "0.25000000",
2629
+ // "withdraw_enabled": true,
2630
+ // "min_withdrawal_amount": "0.5",
2631
+ // "deposit_enabled": true,
2632
+ // "confirmation_required": "0"
2633
+ // }
2634
+ // ]
2635
+ // }
2636
+ //
2637
+ const networkList = this.safeList(fee, 'network_list', []);
2638
+ const networkListLength = networkList.length;
2639
+ const result = {
2640
+ 'info': fee,
2641
+ 'withdraw': {
2642
+ 'fee': undefined,
2643
+ 'percentage': undefined,
2644
+ },
2645
+ 'deposit': {
2646
+ 'fee': undefined,
2647
+ 'percentage': undefined,
2648
+ },
2649
+ 'networks': {},
2650
+ };
2651
+ if (networkList !== undefined) {
2652
+ for (let i = 0; i < networkListLength; i++) {
2653
+ const networkInfo = networkList[i];
2654
+ const networkId = this.safeString(networkInfo, 'network_id');
2655
+ const currencyCode = this.safeString(currency, 'code');
2656
+ const networkCode = this.networkIdToCode(networkId, currencyCode);
2657
+ result['networks'][networkCode] = {
2658
+ 'deposit': { 'fee': undefined, 'percentage': undefined },
2659
+ 'withdraw': { 'fee': this.safeNumber(networkInfo, 'withdrawal_fee'), 'percentage': false },
2660
+ };
2661
+ if (networkListLength === 1) {
2662
+ result['withdraw']['fee'] = this.safeNumber(networkInfo, 'withdrawal_fee');
2663
+ result['withdraw']['percentage'] = false;
2664
+ }
2665
+ }
2666
+ }
2667
+ return result;
2668
+ }
2669
+ /**
2670
+ * @method
2671
+ * @name cryptocom#fetchDepositWithdrawFees
2672
+ * @description fetch deposit and withdraw fees
2673
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-currency-networks
2674
+ * @param {string[]|undefined} codes list of unified currency codes
2675
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2676
+ * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
2677
+ */
2678
+ async fetchDepositWithdrawFees(codes = undefined, params = {}) {
2679
+ await this.loadMarkets();
2680
+ const response = await this.v1PrivatePostPrivateGetCurrencyNetworks(params);
2681
+ const data = this.safeValue(response, 'result');
2682
+ const currencyMap = this.safeList(data, 'currency_map');
2683
+ return this.parseDepositWithdrawFees(currencyMap, codes, 'full_name');
2684
+ }
2685
+ /**
2686
+ * @method
2687
+ * @name cryptocom#fetchLedger
2688
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
2689
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-transactions
2690
+ * @param {string} [code] unified currency code
2691
+ * @param {int} [since] timestamp in ms of the earliest ledger entry
2692
+ * @param {int} [limit] max number of ledger entries to return
2693
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2694
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
2695
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
2696
+ */
2697
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
2698
+ await this.loadMarkets();
2699
+ const request = {};
2700
+ let currency = undefined;
2701
+ if (code !== undefined) {
2702
+ currency = this.safeCurrency(code);
2703
+ }
2704
+ if (since !== undefined) {
2705
+ request['start_time'] = since;
2706
+ }
2707
+ if (limit !== undefined) {
2708
+ request['limit'] = limit;
2709
+ }
2710
+ const until = this.safeInteger(params, 'until');
2711
+ params = this.omit(params, ['until']);
2712
+ if (until !== undefined) {
2713
+ request['end_time'] = until;
2714
+ }
2715
+ const response = await this.v1PrivatePostPrivateGetTransactions(this.extend(request, params));
2716
+ //
2717
+ // {
2718
+ // "id": 1686813195698,
2719
+ // "method": "private/get-transactions",
2720
+ // "code": 0,
2721
+ // "result": {
2722
+ // "data": [
2723
+ // {
2724
+ // "account_id": "ce075cef-1234-4321-bd6e-gf9007351e64",
2725
+ // "event_date": "2023-06-15",
2726
+ // "journal_type": "TRADING",
2727
+ // "journal_id": "6530219460124075091",
2728
+ // "transaction_qty": "6.0091224",
2729
+ // "transaction_cost": "6.0091224",
2730
+ // "realized_pnl": "0",
2731
+ // "order_id": "6530219477766741833",
2732
+ // "trade_id": "6530219495775954765",
2733
+ // "trade_match_id": "4611686018455865176",
2734
+ // "event_timestamp_ms": 1686804665013,
2735
+ // "event_timestamp_ns": "1686804665013642422",
2736
+ // "client_oid": "CCXT_d6ea7c5db6c1495aa8b758",
2737
+ // "taker_side": "",
2738
+ // "side": "BUY",
2739
+ // "instrument_name": "USD"
2740
+ // },
2741
+ // ]
2742
+ // }
2743
+ // }
2744
+ //
2745
+ const result = this.safeDict(response, 'result', {});
2746
+ const ledger = this.safeList(result, 'data', []);
2747
+ return this.parseLedger(ledger, currency, since, limit);
2748
+ }
2749
+ parseLedgerEntry(item, currency = undefined) {
2750
+ //
2751
+ // {
2752
+ // "account_id": "ce075cef-1234-4321-bd6e-gf9007351e64",
2753
+ // "event_date": "2023-06-15",
2754
+ // "journal_type": "TRADING",
2755
+ // "journal_id": "6530219460124075091",
2756
+ // "transaction_qty": "6.0091224",
2757
+ // "transaction_cost": "6.0091224",
2758
+ // "realized_pnl": "0",
2759
+ // "order_id": "6530219477766741833",
2760
+ // "trade_id": "6530219495775954765",
2761
+ // "trade_match_id": "4611686018455865176",
2762
+ // "event_timestamp_ms": 1686804665013,
2763
+ // "event_timestamp_ns": "1686804665013642422",
2764
+ // "client_oid": "CCXT_d6ea7c5db6c1495aa8b758",
2765
+ // "taker_side": "",
2766
+ // "side": "BUY",
2767
+ // "instrument_name": "USD"
2768
+ // }
2769
+ //
2770
+ const timestamp = this.safeInteger(item, 'event_timestamp_ms');
2771
+ const currencyId = this.safeString(item, 'instrument_name');
2772
+ const code = this.safeCurrencyCode(currencyId, currency);
2773
+ currency = this.safeCurrency(currencyId, currency);
2774
+ let amount = this.safeString(item, 'transaction_qty');
2775
+ let direction = undefined;
2776
+ if (Precise.stringLt(amount, '0')) {
2777
+ direction = 'out';
2778
+ amount = Precise.stringAbs(amount);
2779
+ }
2780
+ else {
2781
+ direction = 'in';
2782
+ }
2783
+ return this.safeLedgerEntry({
2784
+ 'info': item,
2785
+ 'id': this.safeString(item, 'order_id'),
2786
+ 'direction': direction,
2787
+ 'account': this.safeString(item, 'account_id'),
2788
+ 'referenceId': this.safeString(item, 'trade_id'),
2789
+ 'referenceAccount': this.safeString(item, 'trade_match_id'),
2790
+ 'type': this.parseLedgerEntryType(this.safeString(item, 'journal_type')),
2791
+ 'currency': code,
2792
+ 'amount': this.parseNumber(amount),
2793
+ 'timestamp': timestamp,
2794
+ 'datetime': this.iso8601(timestamp),
2795
+ 'before': undefined,
2796
+ 'after': undefined,
2797
+ 'status': undefined,
2798
+ 'fee': {
2799
+ 'currency': undefined,
2800
+ 'cost': undefined,
2801
+ },
2802
+ }, currency);
2803
+ }
2804
+ parseLedgerEntryType(type) {
2805
+ const ledgerType = {
2806
+ 'TRADING': 'trade',
2807
+ 'TRADE_FEE': 'fee',
2808
+ 'WITHDRAW_FEE': 'fee',
2809
+ 'WITHDRAW': 'withdrawal',
2810
+ 'DEPOSIT': 'deposit',
2811
+ 'ROLLBACK_WITHDRAW': 'rollback',
2812
+ 'ROLLBACK_DEPOSIT': 'rollback',
2813
+ 'FUNDING': 'fee',
2814
+ 'REALIZED_PNL': 'trade',
2815
+ 'INSURANCE_FUND': 'insurance',
2816
+ 'SOCIALIZED_LOSS': 'trade',
2817
+ 'LIQUIDATION_FEE': 'fee',
2818
+ 'SESSION_RESET': 'reset',
2819
+ 'ADJUSTMENT': 'adjustment',
2820
+ 'SESSION_SETTLE': 'settlement',
2821
+ 'UNCOVERED_LOSS': 'trade',
2822
+ 'ADMIN_ADJUSTMENT': 'adjustment',
2823
+ 'DELIST': 'delist',
2824
+ 'SETTLEMENT_FEE': 'fee',
2825
+ 'AUTO_CONVERSION': 'conversion',
2826
+ 'MANUAL_CONVERSION': 'conversion',
2827
+ };
2828
+ return this.safeString(ledgerType, type, type);
2829
+ }
2830
+ /**
2831
+ * @method
2832
+ * @name cryptocom#fetchAccounts
2833
+ * @description fetch all the accounts associated with a profile
2834
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-accounts
2835
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2836
+ * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
2837
+ */
2838
+ async fetchAccounts(params = {}) {
2839
+ await this.loadMarkets();
2840
+ const response = await this.v1PrivatePostPrivateGetAccounts(params);
2841
+ //
2842
+ // {
2843
+ // "id": 1234567894321,
2844
+ // "method": "private/get-accounts",
2845
+ // "code": 0,
2846
+ // "result": {
2847
+ // "master_account": {
2848
+ // "uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
2849
+ // "user_uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
2850
+ // "enabled": true,
2851
+ // "tradable": true,
2852
+ // "name": "YOUR_NAME",
2853
+ // "country_code": "CAN",
2854
+ // "phone_country_code": "CAN",
2855
+ // "incorp_country_code": "",
2856
+ // "margin_access": "DEFAULT",
2857
+ // "derivatives_access": "DEFAULT",
2858
+ // "create_time": 1656445188000,
2859
+ // "update_time": 1660794567262,
2860
+ // "two_fa_enabled": true,
2861
+ // "kyc_level": "ADVANCED",
2862
+ // "suspended": false,
2863
+ // "terminated": false,
2864
+ // "spot_enabled": false,
2865
+ // "margin_enabled": false,
2866
+ // "derivatives_enabled": false
2867
+ // },
2868
+ // "sub_account_list": []
2869
+ // }
2870
+ // }
2871
+ //
2872
+ const result = this.safeDict(response, 'result', {});
2873
+ const masterAccount = this.safeDict(result, 'master_account', {});
2874
+ const accounts = this.safeList(result, 'sub_account_list', []);
2875
+ accounts.push(masterAccount);
2876
+ return this.parseAccounts(accounts, params);
2877
+ }
2878
+ parseAccount(account) {
2879
+ //
2880
+ // {
2881
+ // "uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
2882
+ // "user_uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
2883
+ // "master_account_uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
2884
+ // "label": "FORMER_MASTER_MARGIN",
2885
+ // "enabled": true,
2886
+ // "tradable": true,
2887
+ // "name": "YOUR_NAME",
2888
+ // "country_code": "YOUR_COUNTRY_CODE",
2889
+ // "incorp_country_code": "",
2890
+ // "margin_access": "DEFAULT",
2891
+ // "derivatives_access": "DEFAULT",
2892
+ // "create_time": 1656481992000,
2893
+ // "update_time": 1667272884594,
2894
+ // "two_fa_enabled": false,
2895
+ // "kyc_level": "ADVANCED",
2896
+ // "suspended": false,
2897
+ // "terminated": false,
2898
+ // "spot_enabled": false,
2899
+ // "margin_enabled": false,
2900
+ // "derivatives_enabled": false,
2901
+ // "system_label": "FORMER_MASTER_MARGIN"
2902
+ // }
2903
+ //
2904
+ return {
2905
+ 'id': this.safeString(account, 'uuid'),
2906
+ 'type': this.safeString(account, 'label'),
2907
+ 'code': undefined,
2908
+ 'info': account,
2909
+ };
2910
+ }
2911
+ /**
2912
+ * @method
2913
+ * @name cryptocom#fetchSettlementHistory
2914
+ * @description fetches historical settlement records
2915
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-expired-settlement-price
2916
+ * @param {string} symbol unified market symbol of the settlement history
2917
+ * @param {int} [since] timestamp in ms
2918
+ * @param {int} [limit] number of records
2919
+ * @param {object} [params] exchange specific params
2920
+ * @param {int} [params.type] 'future', 'option'
2921
+ * @returns {object[]} a list of [settlement history objects]{@link https://docs.ccxt.com/#/?id=settlement-history-structure}
2922
+ */
2923
+ async fetchSettlementHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2924
+ await this.loadMarkets();
2925
+ let market = undefined;
2926
+ if (symbol !== undefined) {
2927
+ market = this.market(symbol);
2928
+ }
2929
+ let type = undefined;
2930
+ [type, params] = this.handleMarketTypeAndParams('fetchSettlementHistory', market, params);
2931
+ this.checkRequiredArgument('fetchSettlementHistory', type, 'type', ['future', 'option', 'WARRANT', 'FUTURE']);
2932
+ if (type === 'option') {
2933
+ type = 'WARRANT';
2934
+ }
2935
+ const request = {
2936
+ 'instrument_type': type.toUpperCase(),
2937
+ };
2938
+ const response = await this.v1PublicGetPublicGetExpiredSettlementPrice(this.extend(request, params));
2939
+ //
2940
+ // {
2941
+ // "id": -1,
2942
+ // "method": "public/get-expired-settlement-price",
2943
+ // "code": 0,
2944
+ // "result": {
2945
+ // "data": [
2946
+ // {
2947
+ // "i": "BTCUSD-230526",
2948
+ // "x": 1685088000000,
2949
+ // "v": "26464.1",
2950
+ // "t": 1685087999500
2951
+ // }
2952
+ // ]
2953
+ // }
2954
+ // }
2955
+ //
2956
+ const result = this.safeDict(response, 'result', {});
2957
+ const data = this.safeList(result, 'data', []);
2958
+ const settlements = this.parseSettlements(data, market);
2959
+ const sorted = this.sortBy(settlements, 'timestamp');
2960
+ return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
2961
+ }
2962
+ parseSettlement(settlement, market) {
2963
+ //
2964
+ // {
2965
+ // "i": "BTCUSD-230526",
2966
+ // "x": 1685088000000,
2967
+ // "v": "26464.1",
2968
+ // "t": 1685087999500
2969
+ // }
2970
+ //
2971
+ const timestamp = this.safeInteger(settlement, 'x');
2972
+ const marketId = this.safeString(settlement, 'i');
2973
+ return {
2974
+ 'info': settlement,
2975
+ 'symbol': this.safeSymbol(marketId, market),
2976
+ 'price': this.safeNumber(settlement, 'v'),
2977
+ 'timestamp': timestamp,
2978
+ 'datetime': this.iso8601(timestamp),
2979
+ };
2980
+ }
2981
+ parseSettlements(settlements, market) {
2982
+ //
2983
+ // [
2984
+ // {
2985
+ // "i": "BTCUSD-230526",
2986
+ // "x": 1685088000000,
2987
+ // "v": "26464.1",
2988
+ // "t": 1685087999500
2989
+ // }
2990
+ // ]
2991
+ //
2992
+ const result = [];
2993
+ for (let i = 0; i < settlements.length; i++) {
2994
+ result.push(this.parseSettlement(settlements[i], market));
2995
+ }
2996
+ return result;
2997
+ }
2998
+ /**
2999
+ * @method
3000
+ * @name cryptocom#fetchFundingRate
3001
+ * @description fetches historical funding rates
3002
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-valuations
3003
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
3004
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3005
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
3006
+ */
3007
+ async fetchFundingRate(symbol, params = {}) {
3008
+ await this.loadMarkets();
3009
+ const market = this.market(symbol);
3010
+ if (!market['swap']) {
3011
+ throw new BadSymbol(this.id + ' fetchFundingRate() supports swap contracts only');
3012
+ }
3013
+ const request = {
3014
+ 'instrument_name': market['id'],
3015
+ 'valuation_type': 'estimated_funding_rate',
3016
+ 'count': 1,
3017
+ };
3018
+ const response = await this.v1PublicGetPublicGetValuations(this.extend(request, params));
3019
+ //
3020
+ // {
3021
+ // "id": -1,
3022
+ // "method": "public/get-valuations",
3023
+ // "code": 0,
3024
+ // "result": {
3025
+ // "data": [
3026
+ // {
3027
+ // "v": "-0.000001884",
3028
+ // "t": 1687892400000
3029
+ // },
3030
+ // ],
3031
+ // "instrument_name": "BTCUSD-PERP"
3032
+ // }
3033
+ // }
3034
+ //
3035
+ const result = this.safeDict(response, 'result', {});
3036
+ const data = this.safeList(result, 'data', []);
3037
+ const entry = this.safeDict(data, 0, {});
3038
+ return this.parseFundingRate(entry, market);
3039
+ }
3040
+ parseFundingRate(contract, market = undefined) {
3041
+ //
3042
+ // {
3043
+ // "v": "-0.000001884",
3044
+ // "t": 1687892400000
3045
+ // },
3046
+ //
3047
+ const timestamp = this.safeInteger(contract, 't');
3048
+ let fundingTimestamp = undefined;
3049
+ if (timestamp !== undefined) {
3050
+ fundingTimestamp = Math.ceil(timestamp / 3600000) * 3600000; // end of the next hour
3051
+ }
3052
+ return {
3053
+ 'info': contract,
3054
+ 'symbol': this.safeSymbol(undefined, market),
3055
+ 'markPrice': undefined,
3056
+ 'indexPrice': undefined,
3057
+ 'interestRate': undefined,
3058
+ 'estimatedSettlePrice': undefined,
3059
+ 'timestamp': timestamp,
3060
+ 'datetime': this.iso8601(timestamp),
3061
+ 'fundingRate': this.safeNumber(contract, 'v'),
3062
+ 'fundingTimestamp': fundingTimestamp,
3063
+ 'fundingDatetime': this.iso8601(fundingTimestamp),
3064
+ 'nextFundingRate': undefined,
3065
+ 'nextFundingTimestamp': undefined,
3066
+ 'nextFundingDatetime': undefined,
3067
+ 'previousFundingRate': undefined,
3068
+ 'previousFundingTimestamp': undefined,
3069
+ 'previousFundingDatetime': undefined,
3070
+ 'interval': '1h',
3071
+ };
3072
+ }
3073
+ /**
3074
+ * @method
3075
+ * @name cryptocom#fetchFundingRateHistory
3076
+ * @description fetches historical funding rates
3077
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-valuations
3078
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
3079
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
3080
+ * @param {int} [limit] the maximum amount of [funding rate structures] to fetch
3081
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3082
+ * @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
3083
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
3084
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
3085
+ */
3086
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
3087
+ if (symbol === undefined) {
3088
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
3089
+ }
3090
+ await this.loadMarkets();
3091
+ let paginate = false;
3092
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
3093
+ if (paginate) {
3094
+ return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params);
3095
+ }
3096
+ const market = this.market(symbol);
3097
+ if (!market['swap']) {
3098
+ throw new BadSymbol(this.id + ' fetchFundingRateHistory() supports swap contracts only');
3099
+ }
3100
+ const request = {
3101
+ 'instrument_name': market['id'],
3102
+ 'valuation_type': 'funding_hist',
3103
+ };
3104
+ if (since !== undefined) {
3105
+ request['start_ts'] = since;
3106
+ }
3107
+ if (limit !== undefined) {
3108
+ request['count'] = limit;
3109
+ }
3110
+ const until = this.safeInteger(params, 'until');
3111
+ params = this.omit(params, ['until']);
3112
+ if (until !== undefined) {
3113
+ request['end_ts'] = until;
3114
+ }
3115
+ const response = await this.v1PublicGetPublicGetValuations(this.extend(request, params));
3116
+ //
3117
+ // {
3118
+ // "id": -1,
3119
+ // "method": "public/get-valuations",
3120
+ // "code": 0,
3121
+ // "result": {
3122
+ // "data": [
3123
+ // {
3124
+ // "v": "-0.000001884",
3125
+ // "t": 1687892400000
3126
+ // },
3127
+ // ],
3128
+ // "instrument_name": "BTCUSD-PERP"
3129
+ // }
3130
+ // }
3131
+ //
3132
+ const result = this.safeDict(response, 'result', {});
3133
+ const data = this.safeList(result, 'data', []);
3134
+ const marketId = this.safeString(result, 'instrument_name');
3135
+ const rates = [];
3136
+ for (let i = 0; i < data.length; i++) {
3137
+ const entry = data[i];
3138
+ const timestamp = this.safeInteger(entry, 't');
3139
+ rates.push({
3140
+ 'info': entry,
3141
+ 'symbol': this.safeSymbol(marketId, market),
3142
+ 'fundingRate': this.safeNumber(entry, 'v'),
3143
+ 'timestamp': timestamp,
3144
+ 'datetime': this.iso8601(timestamp),
3145
+ });
3146
+ }
3147
+ const sorted = this.sortBy(rates, 'timestamp');
3148
+ return this.filterBySymbolSinceLimit(sorted, market['symbol'], since, limit);
3149
+ }
3150
+ /**
3151
+ * @method
3152
+ * @name cryptocom#fetchPosition
3153
+ * @description fetch data on a single open contract trade position
3154
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-positions
3155
+ * @param {string} symbol unified market symbol of the market the position is held in
3156
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3157
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
3158
+ */
3159
+ async fetchPosition(symbol, params = {}) {
3160
+ await this.loadMarkets();
3161
+ const market = this.market(symbol);
3162
+ const request = {
3163
+ 'instrument_name': market['id'],
3164
+ };
3165
+ const response = await this.v1PrivatePostPrivateGetPositions(this.extend(request, params));
3166
+ //
3167
+ // {
3168
+ // "id": 1688015952050,
3169
+ // "method": "private/get-positions",
3170
+ // "code": 0,
3171
+ // "result": {
3172
+ // "data": [
3173
+ // {
3174
+ // "account_id": "ce075bef-b600-4277-bd6e-ff9007251e63",
3175
+ // "quantity": "0.0001",
3176
+ // "cost": "3.02392",
3177
+ // "open_pos_cost": "3.02392",
3178
+ // "open_position_pnl": "-0.0010281328",
3179
+ // "session_pnl": "-0.0010281328",
3180
+ // "update_timestamp_ms": 1688015919091,
3181
+ // "instrument_name": "BTCUSD-PERP",
3182
+ // "type": "PERPETUAL_SWAP"
3183
+ // }
3184
+ // ]
3185
+ // }
3186
+ // }
3187
+ //
3188
+ const result = this.safeDict(response, 'result', {});
3189
+ const data = this.safeList(result, 'data', []);
3190
+ return this.parsePosition(this.safeDict(data, 0), market);
3191
+ }
3192
+ /**
3193
+ * @method
3194
+ * @name cryptocom#fetchPositions
3195
+ * @description fetch all open positions
3196
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-positions
3197
+ * @param {string[]|undefined} symbols list of unified market symbols
3198
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3199
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
3200
+ */
3201
+ async fetchPositions(symbols = undefined, params = {}) {
3202
+ await this.loadMarkets();
3203
+ symbols = this.marketSymbols(symbols);
3204
+ const request = {};
3205
+ let market = undefined;
3206
+ if (symbols !== undefined) {
3207
+ let symbol = undefined;
3208
+ if (Array.isArray(symbols)) {
3209
+ const symbolsLength = symbols.length;
3210
+ if (symbolsLength > 1) {
3211
+ throw new BadRequest(this.id + ' fetchPositions() symbols argument cannot contain more than 1 symbol');
3212
+ }
3213
+ symbol = symbols[0];
3214
+ }
3215
+ else {
3216
+ symbol = symbols;
3217
+ }
3218
+ market = this.market(symbol);
3219
+ request['instrument_name'] = market['id'];
3220
+ }
3221
+ const response = await this.v1PrivatePostPrivateGetPositions(this.extend(request, params));
3222
+ //
3223
+ // {
3224
+ // "id": 1688015952050,
3225
+ // "method": "private/get-positions",
3226
+ // "code": 0,
3227
+ // "result": {
3228
+ // "data": [
3229
+ // {
3230
+ // "account_id": "ce075bef-b600-4277-bd6e-ff9007251e63",
3231
+ // "quantity": "0.0001",
3232
+ // "cost": "3.02392",
3233
+ // "open_pos_cost": "3.02392",
3234
+ // "open_position_pnl": "-0.0010281328",
3235
+ // "session_pnl": "-0.0010281328",
3236
+ // "update_timestamp_ms": 1688015919091,
3237
+ // "instrument_name": "BTCUSD-PERP",
3238
+ // "type": "PERPETUAL_SWAP"
3239
+ // }
3240
+ // ]
3241
+ // }
3242
+ // }
3243
+ //
3244
+ const responseResult = this.safeDict(response, 'result', {});
3245
+ const positions = this.safeList(responseResult, 'data', []);
3246
+ const result = [];
3247
+ for (let i = 0; i < positions.length; i++) {
3248
+ const entry = positions[i];
3249
+ const marketId = this.safeString(entry, 'instrument_name');
3250
+ const marketInner = this.safeMarket(marketId, undefined, undefined, 'contract');
3251
+ result.push(this.parsePosition(entry, marketInner));
3252
+ }
3253
+ return this.filterByArrayPositions(result, 'symbol', undefined, false);
3254
+ }
3255
+ parsePosition(position, market = undefined) {
3256
+ //
3257
+ // {
3258
+ // "account_id": "ce075bef-b600-4277-bd6e-ff9007251e63",
3259
+ // "quantity": "0.0001",
3260
+ // "cost": "3.02392",
3261
+ // "open_pos_cost": "3.02392",
3262
+ // "open_position_pnl": "-0.0010281328",
3263
+ // "session_pnl": "-0.0010281328",
3264
+ // "update_timestamp_ms": 1688015919091,
3265
+ // "instrument_name": "BTCUSD-PERP",
3266
+ // "type": "PERPETUAL_SWAP"
3267
+ // }
3268
+ //
3269
+ const marketId = this.safeString(position, 'instrument_name');
3270
+ market = this.safeMarket(marketId, market, undefined, 'contract');
3271
+ const symbol = this.safeSymbol(marketId, market, undefined, 'contract');
3272
+ const timestamp = this.safeInteger(position, 'update_timestamp_ms');
3273
+ const amount = this.safeString(position, 'quantity');
3274
+ return this.safePosition({
3275
+ 'info': position,
3276
+ 'id': undefined,
3277
+ 'symbol': symbol,
3278
+ 'timestamp': timestamp,
3279
+ 'datetime': this.iso8601(timestamp),
3280
+ 'hedged': undefined,
3281
+ 'side': Precise.stringGt(amount, '0') ? 'buy' : 'sell',
3282
+ 'contracts': Precise.stringAbs(amount),
3283
+ 'contractSize': market['contractSize'],
3284
+ 'entryPrice': undefined,
3285
+ 'markPrice': undefined,
3286
+ 'notional': undefined,
3287
+ 'leverage': undefined,
3288
+ 'collateral': this.safeNumber(position, 'open_pos_cost'),
3289
+ 'initialMargin': this.safeNumber(position, 'cost'),
3290
+ 'maintenanceMargin': undefined,
3291
+ 'initialMarginPercentage': undefined,
3292
+ 'maintenanceMarginPercentage': undefined,
3293
+ 'unrealizedPnl': this.safeNumber(position, 'open_position_pnl'),
3294
+ 'liquidationPrice': undefined,
3295
+ 'marginMode': undefined,
3296
+ 'percentage': undefined,
3297
+ 'marginRatio': undefined,
3298
+ 'stopLossPrice': undefined,
3299
+ 'takeProfitPrice': undefined,
3300
+ });
3301
+ }
3302
+ nonce() {
3303
+ return this.milliseconds();
3304
+ }
3305
+ paramsToString(object, level) {
3306
+ const maxLevel = 3;
3307
+ if (level >= maxLevel) {
3308
+ return object.toString();
3309
+ }
3310
+ if (typeof object === 'string') {
3311
+ return object;
3312
+ }
3313
+ let returnString = '';
3314
+ let paramsKeys = undefined;
3315
+ if (Array.isArray(object)) {
3316
+ paramsKeys = object;
3317
+ }
3318
+ else {
3319
+ const sorted = this.keysort(object);
3320
+ paramsKeys = Object.keys(sorted);
3321
+ }
3322
+ for (let i = 0; i < paramsKeys.length; i++) {
3323
+ const key = paramsKeys[i];
3324
+ returnString += key;
3325
+ const value = object[key];
3326
+ if (value === 'undefined') {
3327
+ returnString += 'null';
3328
+ }
3329
+ else if (Array.isArray(value)) {
3330
+ for (let j = 0; j < value.length; j++) {
3331
+ returnString += this.paramsToString(value[j], level + 1);
3332
+ }
3333
+ }
3334
+ else {
3335
+ returnString += value.toString();
3336
+ }
3337
+ }
3338
+ return returnString;
3339
+ }
3340
+ /**
3341
+ * @method
3342
+ * @name cryptocom#closePositions
3343
+ * @description closes open positions for a market
3344
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-close-position
3345
+ * @param {string} symbol Unified CCXT market symbol
3346
+ * @param {string} [side] not used by cryptocom.closePositions
3347
+ * @param {object} [params] extra parameters specific to the okx api endpoint
3348
+ *
3349
+ * EXCHANGE SPECIFIC PARAMETERS
3350
+ * @param {string} [params.type] LIMIT or MARKET
3351
+ * @param {number} [params.price] for limit orders only
3352
+ * @returns {object[]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
3353
+ */
3354
+ async closePosition(symbol, side = undefined, params = {}) {
3355
+ await this.loadMarkets();
3356
+ const market = this.market(symbol);
3357
+ const request = {
3358
+ 'instrument_name': market['id'],
3359
+ 'type': 'MARKET',
3360
+ };
3361
+ const type = this.safeStringUpper(params, 'type');
3362
+ const price = this.safeString(params, 'price');
3363
+ if (type !== undefined) {
3364
+ request['type'] = type;
3365
+ }
3366
+ if (price !== undefined) {
3367
+ request['price'] = this.priceToPrecision(market['symbol'], price);
3368
+ }
3369
+ const response = await this.v1PrivatePostPrivateClosePosition(this.extend(request, params));
3370
+ //
3371
+ // {
3372
+ // "id" : 1700830813298,
3373
+ // "method" : "private/close-position",
3374
+ // "code" : 0,
3375
+ // "result" : {
3376
+ // "client_oid" : "179a909d-5614-655b-0d0e-9e85c9a25c85",
3377
+ // "order_id" : "6142909897021751347"
3378
+ // }
3379
+ // }
3380
+ //
3381
+ const result = this.safeDict(response, 'result');
3382
+ return this.parseOrder(result, market);
3383
+ }
3384
+ /**
3385
+ * @method
3386
+ * @name cryptocom#fetchTradingFee
3387
+ * @description fetch the trading fees for a market
3388
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-instrument-fee-rate
3389
+ * @param {string} symbol unified market symbol
3390
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3391
+ * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
3392
+ */
3393
+ async fetchTradingFee(symbol, params = {}) {
3394
+ await this.loadMarkets();
3395
+ const market = this.market(symbol);
3396
+ const request = {
3397
+ 'instrument_name': market['id'],
3398
+ };
3399
+ const response = await this.v1PrivatePostPrivateGetInstrumentFeeRate(this.extend(request, params));
3400
+ //
3401
+ // {
3402
+ // "id": 1,
3403
+ // "code": 0,
3404
+ // "method": "private/staking/unstake",
3405
+ // "result": {
3406
+ // "staking_id": "1",
3407
+ // "instrument_name": "SOL.staked",
3408
+ // "status": "NEW",
3409
+ // "quantity": "1",
3410
+ // "underlying_inst_name": "SOL",
3411
+ // "reason": "NO_ERROR"
3412
+ // }
3413
+ // }
3414
+ //
3415
+ const data = this.safeDict(response, 'result', {});
3416
+ return this.parseTradingFee(data, market);
3417
+ }
3418
+ /**
3419
+ * @method
3420
+ * @name cryptocom#fetchTradingFees
3421
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-fee-rate
3422
+ * @description fetch the trading fees for multiple markets
3423
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3424
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
3425
+ */
3426
+ async fetchTradingFees(params = {}) {
3427
+ await this.loadMarkets();
3428
+ const response = await this.v1PrivatePostPrivateGetFeeRate(params);
3429
+ //
3430
+ // {
3431
+ // "id": 1,
3432
+ // "method": "/private/get-fee-rate",
3433
+ // "code": 0,
3434
+ // "result": {
3435
+ // "spot_tier": "3",
3436
+ // "deriv_tier": "3",
3437
+ // "effective_spot_maker_rate_bps": "6.5",
3438
+ // "effective_spot_taker_rate_bps": "6.9",
3439
+ // "effective_deriv_maker_rate_bps": "1.1",
3440
+ // "effective_deriv_taker_rate_bps": "3"
3441
+ // }
3442
+ // }
3443
+ //
3444
+ const result = this.safeDict(response, 'result', {});
3445
+ return this.parseTradingFees(result);
3446
+ }
3447
+ parseTradingFees(response) {
3448
+ //
3449
+ // {
3450
+ // "spot_tier": "3",
3451
+ // "deriv_tier": "3",
3452
+ // "effective_spot_maker_rate_bps": "6.5",
3453
+ // "effective_spot_taker_rate_bps": "6.9",
3454
+ // "effective_deriv_maker_rate_bps": "1.1",
3455
+ // "effective_deriv_taker_rate_bps": "3"
3456
+ // }
3457
+ //
3458
+ const result = {};
3459
+ result['info'] = response;
3460
+ for (let i = 0; i < this.symbols.length; i++) {
3461
+ const symbol = this.symbols[i];
3462
+ const market = this.market(symbol);
3463
+ const isSwap = market['swap'];
3464
+ const takerFeeKey = isSwap ? 'effective_deriv_taker_rate_bps' : 'effective_spot_taker_rate_bps';
3465
+ const makerFeeKey = isSwap ? 'effective_deriv_maker_rate_bps' : 'effective_spot_maker_rate_bps';
3466
+ const tradingFee = {
3467
+ 'info': response,
3468
+ 'symbol': symbol,
3469
+ 'maker': this.parseNumber(Precise.stringDiv(this.safeString(response, makerFeeKey), '10000')),
3470
+ 'taker': this.parseNumber(Precise.stringDiv(this.safeString(response, takerFeeKey), '10000')),
3471
+ 'percentage': undefined,
3472
+ 'tierBased': undefined,
3473
+ };
3474
+ result[symbol] = tradingFee;
3475
+ }
3476
+ return result;
3477
+ }
3478
+ parseTradingFee(fee, market = undefined) {
3479
+ //
3480
+ // {
3481
+ // "instrument_name": "BTC_USD",
3482
+ // "effective_maker_rate_bps": "6.5",
3483
+ // "effective_taker_rate_bps": "6.9"
3484
+ // }
3485
+ //
3486
+ const marketId = this.safeString(fee, 'instrument_name');
3487
+ const symbol = this.safeSymbol(marketId, market);
3488
+ return {
3489
+ 'info': fee,
3490
+ 'symbol': symbol,
3491
+ 'maker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'effective_maker_rate_bps'), '10000')),
3492
+ 'taker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'effective_taker_rate_bps'), '10000')),
3493
+ 'percentage': undefined,
3494
+ 'tierBased': undefined,
3495
+ };
3496
+ }
3497
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3498
+ const type = this.safeString(api, 0);
3499
+ const access = this.safeString(api, 1);
3500
+ let url = this.urls['api'][type] + '/' + path;
3501
+ const query = this.omit(params, this.extractParams(path));
3502
+ if (access === 'public') {
3503
+ if (Object.keys(query).length) {
3504
+ url += '?' + this.urlencode(query);
3505
+ }
3506
+ }
3507
+ else {
3508
+ this.checkRequiredCredentials();
3509
+ const nonce = this.nonce().toString();
3510
+ const requestParams = this.extend({}, params);
3511
+ const paramsKeys = Object.keys(requestParams);
3512
+ const strSortKey = this.paramsToString(requestParams, 0);
3513
+ const payload = path + nonce + this.apiKey + strSortKey + nonce;
3514
+ const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256);
3515
+ const paramsKeysLength = paramsKeys.length;
3516
+ body = this.json({
3517
+ 'id': nonce,
3518
+ 'method': path,
3519
+ 'params': params,
3520
+ 'api_key': this.apiKey,
3521
+ 'sig': signature,
3522
+ 'nonce': nonce,
3523
+ });
3524
+ // fix issue https://github.com/ccxt/ccxt/issues/11179
3525
+ // php always encodes dictionaries as arrays
3526
+ // if an array is empty, php will put it in square brackets
3527
+ // python and js will put it in curly brackets
3528
+ // the code below checks and replaces those brackets in empty requests
3529
+ if (paramsKeysLength === 0) {
3530
+ const paramsString = '{}';
3531
+ const arrayString = '[]';
3532
+ body = body.replace(arrayString, paramsString);
3533
+ }
3534
+ headers = {
3535
+ 'Content-Type': 'application/json',
3536
+ };
3537
+ }
3538
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
3539
+ }
3540
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
3541
+ const errorCode = this.safeString(response, 'code');
3542
+ if (errorCode !== '0') {
3543
+ const feedback = this.id + ' ' + body;
3544
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
3545
+ throw new ExchangeError(this.id + ' ' + body);
3546
+ }
3547
+ return undefined;
3548
+ }
3549
+ }