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,3146 @@
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/lbank.js';
9
+ import { ExchangeError, InvalidAddress, DuplicateOrderId, InsufficientFunds, InvalidOrder, InvalidNonce, AuthenticationError, RateLimitExceeded, PermissionDenied, BadRequest, BadSymbol, ArgumentsRequired, NotSupported } from './base/errors.js';
10
+ import { TICK_SIZE } from './base/functions/number.js';
11
+ import { Precise } from './base/Precise.js';
12
+ import { md5 } from './static_dependencies/noble-hashes/md5.js';
13
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
14
+ import { rsa } from './base/functions/rsa.js';
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * @class lbank
18
+ * @augments Exchange
19
+ */
20
+ export default class lbank extends Exchange {
21
+ describe() {
22
+ return this.deepExtend(super.describe(), {
23
+ 'id': 'lbank',
24
+ 'name': 'LBank',
25
+ 'countries': ['CN'],
26
+ 'version': 'v2',
27
+ // 50 per second for making and cancelling orders 1000ms / 50 = 20
28
+ // 20 per second for all other requests, cost = 50 / 20 = 2.5
29
+ 'rateLimit': 20,
30
+ 'pro': true,
31
+ 'has': {
32
+ 'CORS': false,
33
+ 'spot': true,
34
+ 'margin': false,
35
+ 'swap': undefined,
36
+ 'future': false,
37
+ 'option': false,
38
+ 'addMargin': false,
39
+ 'cancelAllOrders': true,
40
+ 'cancelOrder': true,
41
+ 'createMarketBuyOrderWithCost': true,
42
+ 'createMarketOrderWithCost': false,
43
+ 'createMarketSellOrderWithCost': false,
44
+ 'createOrder': true,
45
+ 'createReduceOnlyOrder': false,
46
+ 'createStopLimitOrder': false,
47
+ 'createStopMarketOrder': false,
48
+ 'createStopOrder': false,
49
+ 'fetchBalance': true,
50
+ 'fetchBorrowRateHistories': false,
51
+ 'fetchBorrowRateHistory': false,
52
+ 'fetchClosedOrders': false,
53
+ 'fetchCrossBorrowRate': false,
54
+ 'fetchCrossBorrowRates': false,
55
+ 'fetchCurrencies': true,
56
+ 'fetchDepositAddress': true,
57
+ 'fetchDepositAddresses': false,
58
+ 'fetchDepositAddressesByNetwork': false,
59
+ 'fetchDepositWithdrawFee': 'emulated',
60
+ 'fetchDepositWithdrawFees': true,
61
+ 'fetchFundingHistory': false,
62
+ 'fetchFundingRate': false,
63
+ 'fetchFundingRateHistory': false,
64
+ 'fetchFundingRates': true,
65
+ 'fetchIndexOHLCV': false,
66
+ 'fetchIsolatedBorrowRate': false,
67
+ 'fetchIsolatedBorrowRates': false,
68
+ 'fetchIsolatedPositions': false,
69
+ 'fetchLeverage': false,
70
+ 'fetchLeverageTiers': false,
71
+ 'fetchMarginMode': false,
72
+ 'fetchMarkets': true,
73
+ 'fetchMarkOHLCV': false,
74
+ 'fetchMyTrades': true,
75
+ 'fetchOHLCV': true,
76
+ 'fetchOpenOrders': true,
77
+ 'fetchOrder': true,
78
+ 'fetchOrderBook': true,
79
+ 'fetchOrders': true,
80
+ 'fetchPosition': false,
81
+ 'fetchPositionMode': false,
82
+ 'fetchPositions': false,
83
+ 'fetchPositionsRisk': false,
84
+ 'fetchPremiumIndexOHLCV': false,
85
+ 'fetchTicker': true,
86
+ 'fetchTickers': true,
87
+ 'fetchTime': true,
88
+ 'fetchTrades': true,
89
+ 'fetchTradingFees': true,
90
+ 'fetchTransactionFees': true,
91
+ 'reduceMargin': false,
92
+ 'setLeverage': false,
93
+ 'setMarginMode': false,
94
+ 'setPositionMode': false,
95
+ 'withdraw': true,
96
+ },
97
+ 'timeframes': {
98
+ '1m': 'minute1',
99
+ '5m': 'minute5',
100
+ '15m': 'minute15',
101
+ '30m': 'minute30',
102
+ '1h': 'hour1',
103
+ '2h': 'hour2',
104
+ '4h': 'hour4',
105
+ '6h': 'hour6',
106
+ '8h': 'hour8',
107
+ '12h': 'hour12',
108
+ '1d': 'day1',
109
+ '1w': 'week1',
110
+ },
111
+ 'urls': {
112
+ 'logo': 'https://user-images.githubusercontent.com/1294454/38063602-9605e28a-3302-11e8-81be-64b1e53c4cfb.jpg',
113
+ 'api': {
114
+ 'rest': 'https://api.lbank.info',
115
+ 'contract': 'https://lbkperp.lbank.com',
116
+ },
117
+ 'api2': 'https://api.lbkex.com',
118
+ 'www': 'https://www.lbank.com',
119
+ 'doc': 'https://www.lbank.com/en-US/docs/index.html',
120
+ 'fees': 'https://support.lbank.site/hc/en-gb/articles/900000535703-Trading-Fees-From-14-00-on-April-7-2020-UTC-8-',
121
+ 'referral': 'https://www.lbank.com/login/?icode=7QCY',
122
+ },
123
+ 'api': {
124
+ 'spot': {
125
+ 'public': {
126
+ 'get': {
127
+ 'currencyPairs': 2.5,
128
+ 'accuracy': 2.5,
129
+ 'usdToCny': 2.5,
130
+ 'assetConfigs': 2.5,
131
+ 'withdrawConfigs': 2.5 * 1.5,
132
+ 'timestamp': 2.5,
133
+ 'ticker/24hr': 2.5,
134
+ 'ticker': 2.5,
135
+ 'depth': 2.5,
136
+ 'incrDepth': 2.5,
137
+ 'trades': 2.5,
138
+ 'kline': 2.5,
139
+ // new quote endpoints
140
+ 'supplement/system_ping': 2.5,
141
+ 'supplement/incrDepth': 2.5,
142
+ 'supplement/trades': 2.5,
143
+ 'supplement/ticker/price': 2.5,
144
+ 'supplement/ticker/bookTicker': 2.5,
145
+ },
146
+ 'post': {
147
+ 'supplement/system_status': 2.5,
148
+ },
149
+ },
150
+ 'private': {
151
+ 'post': {
152
+ // account
153
+ 'user_info': 2.5,
154
+ 'subscribe/get_key': 2.5,
155
+ 'subscribe/refresh_key': 2.5,
156
+ 'subscribe/destroy_key': 2.5,
157
+ 'get_deposit_address': 2.5,
158
+ 'deposit_history': 2.5,
159
+ // order
160
+ 'create_order': 1,
161
+ 'batch_create_order': 1,
162
+ 'cancel_order': 1,
163
+ 'cancel_clientOrders': 1,
164
+ 'orders_info': 2.5,
165
+ 'orders_info_history': 2.5,
166
+ 'order_transaction_detail': 2.5,
167
+ 'transaction_history': 2.5,
168
+ 'orders_info_no_deal': 2.5,
169
+ // withdraw
170
+ 'withdraw': 2.5,
171
+ 'withdrawCancel': 2.5,
172
+ 'withdraws': 2.5,
173
+ 'supplement/user_info': 2.5,
174
+ 'supplement/withdraw': 2.5,
175
+ 'supplement/deposit_history': 2.5,
176
+ 'supplement/withdraws': 2.5,
177
+ 'supplement/get_deposit_address': 2.5,
178
+ 'supplement/asset_detail': 2.5,
179
+ 'supplement/customer_trade_fee': 2.5,
180
+ 'supplement/api_Restrictions': 2.5,
181
+ // new quote endpoints
182
+ 'supplement/system_ping': 2.5,
183
+ // new order endpoints
184
+ 'supplement/create_order_test': 1,
185
+ 'supplement/create_order': 1,
186
+ 'supplement/cancel_order': 1,
187
+ 'supplement/cancel_order_by_symbol': 1,
188
+ 'supplement/orders_info': 2.5,
189
+ 'supplement/orders_info_no_deal': 2.5,
190
+ 'supplement/orders_info_history': 2.5,
191
+ 'supplement/user_info_account': 2.5,
192
+ 'supplement/transaction_history': 2.5,
193
+ },
194
+ },
195
+ },
196
+ 'contract': {
197
+ 'public': {
198
+ 'get': {
199
+ 'cfd/openApi/v1/pub/getTime': 2.5,
200
+ 'cfd/openApi/v1/pub/instrument': 2.5,
201
+ 'cfd/openApi/v1/pub/marketData': 2.5,
202
+ 'cfd/openApi/v1/pub/marketOrder': 2.5,
203
+ },
204
+ },
205
+ },
206
+ },
207
+ 'fees': {
208
+ 'trading': {
209
+ 'maker': this.parseNumber('0.001'),
210
+ 'taker': this.parseNumber('0.001'),
211
+ },
212
+ 'funding': {
213
+ 'withdraw': {},
214
+ },
215
+ },
216
+ 'commonCurrencies': {
217
+ 'XBT': 'XBT',
218
+ 'HIT': 'Hiver',
219
+ 'VET_ERC20': 'VEN',
220
+ 'PNT': 'Penta',
221
+ },
222
+ 'precisionMode': TICK_SIZE,
223
+ 'options': {
224
+ 'cacheSecretAsPem': true,
225
+ 'createMarketBuyOrderRequiresPrice': true,
226
+ 'fetchTrades': {
227
+ 'method': 'spotPublicGetTrades', // or 'spotPublicGetTradesSupplement'
228
+ },
229
+ 'fetchTransactionFees': {
230
+ 'method': 'fetchPrivateTransactionFees', // or 'fetchPublicTransactionFees'
231
+ },
232
+ 'fetchDepositWithdrawFees': {
233
+ 'method': 'fetchPrivateDepositWithdrawFees', // or 'fetchPublicDepositWithdrawFees'
234
+ },
235
+ 'fetchDepositAddress': {
236
+ 'method': 'fetchDepositAddressDefault', // or fetchDepositAddressSupplement
237
+ },
238
+ 'createOrder': {
239
+ 'method': 'spotPrivatePostSupplementCreateOrder', // or spotPrivatePostCreateOrder
240
+ },
241
+ 'fetchOrder': {
242
+ 'method': 'fetchOrderSupplement', // or fetchOrderDefault
243
+ },
244
+ 'fetchBalance': {
245
+ 'method': 'spotPrivatePostSupplementUserInfo', // or spotPrivatePostSupplementUserInfoAccount or spotPrivatePostUserInfo
246
+ },
247
+ 'networks': {
248
+ 'ERC20': 'erc20',
249
+ 'ETH': 'erc20',
250
+ 'TRC20': 'trc20',
251
+ 'TRX': 'trc20',
252
+ 'OMNI': 'omni',
253
+ 'ASA': 'asa',
254
+ 'BEP20': 'bep20(bsc)',
255
+ 'BSC': 'bep20(bsc)',
256
+ 'HT': 'heco',
257
+ 'BNB': 'bep2',
258
+ 'BTC': 'btc',
259
+ 'DOGE': 'dogecoin',
260
+ 'MATIC': 'matic',
261
+ 'POLYGON': 'matic',
262
+ 'OEC': 'oec',
263
+ 'BTCTRON': 'btctron',
264
+ 'XRP': 'xrp',
265
+ // other unusual chains with number of listed currencies supported
266
+ // 'avax c-chain': 1,
267
+ // klay: 12,
268
+ // bta: 1,
269
+ // fantom: 1,
270
+ // celo: 1,
271
+ // sol: 2,
272
+ // zenith: 1,
273
+ // ftm: 5,
274
+ // bep20: 1, (single token with mis-named chain) SSS
275
+ // bitci: 1,
276
+ // sgb: 1,
277
+ // moonbeam: 1,
278
+ // ekta: 1,
279
+ // etl: 1,
280
+ // arbitrum: 1,
281
+ // tpc: 1,
282
+ // ptx: 1
283
+ // }
284
+ },
285
+ 'networksById': {
286
+ 'erc20': 'ERC20',
287
+ 'trc20': 'TRC20',
288
+ 'TRX': 'TRC20',
289
+ 'bep20(bsc)': 'BEP20',
290
+ 'bep20': 'BEP20',
291
+ },
292
+ 'defaultNetworks': {
293
+ 'USDT': 'TRC20',
294
+ },
295
+ },
296
+ 'features': {
297
+ 'default': {
298
+ 'sandbox': false,
299
+ 'createOrder': {
300
+ 'marginMode': false,
301
+ 'triggerPrice': false,
302
+ 'triggerPriceType': undefined,
303
+ 'triggerDirection': false,
304
+ 'stopLossPrice': false,
305
+ 'takeProfitPrice': false,
306
+ 'attachedStopLossTakeProfit': undefined,
307
+ 'timeInForce': {
308
+ 'IOC': true,
309
+ 'FOK': true,
310
+ 'PO': false,
311
+ 'GTD': false,
312
+ },
313
+ 'hedged': false,
314
+ 'selfTradePrevention': false,
315
+ 'trailing': false,
316
+ 'leverage': false,
317
+ 'marketBuyByCost': true,
318
+ 'marketBuyRequiresPrice': false,
319
+ 'iceberg': false,
320
+ },
321
+ 'createOrders': undefined,
322
+ 'fetchMyTrades': {
323
+ 'marginMode': false,
324
+ 'limit': 100,
325
+ 'daysBack': 100000,
326
+ 'untilDays': 2,
327
+ 'symbolRequired': true,
328
+ },
329
+ 'fetchOrder': {
330
+ 'marginMode': false,
331
+ 'trigger': false,
332
+ 'trailing': false,
333
+ 'symbolRequired': true,
334
+ },
335
+ 'fetchOpenOrders': {
336
+ 'marginMode': false,
337
+ 'limit': 200,
338
+ 'trigger': false,
339
+ 'trailing': false,
340
+ 'symbolRequired': true,
341
+ },
342
+ 'fetchOrders': {
343
+ 'marginMode': false,
344
+ 'limit': 200,
345
+ 'daysBack': undefined,
346
+ 'untilDays': undefined,
347
+ 'trigger': false,
348
+ 'trailing': false,
349
+ 'symbolRequired': true,
350
+ },
351
+ 'fetchClosedOrders': undefined,
352
+ 'fetchOHLCV': {
353
+ 'limit': 2000,
354
+ },
355
+ },
356
+ 'spot': {
357
+ 'extends': 'default',
358
+ },
359
+ 'swap': {
360
+ 'linear': {
361
+ 'extends': 'default',
362
+ },
363
+ 'inverse': undefined,
364
+ },
365
+ 'future': {
366
+ 'linear': undefined,
367
+ 'inverse': undefined,
368
+ },
369
+ },
370
+ });
371
+ }
372
+ /**
373
+ * @method
374
+ * @name lbank#fetchTime
375
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
376
+ * @see https://www.lbank.com/en-US/docs/index.html#get-timestamp
377
+ * @see https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
378
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
379
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
380
+ */
381
+ async fetchTime(params = {}) {
382
+ let type = undefined;
383
+ [type, params] = this.handleMarketTypeAndParams('fetchTime', undefined, params);
384
+ let response = undefined;
385
+ if (type === 'swap') {
386
+ response = await this.contractPublicGetCfdOpenApiV1PubGetTime(params);
387
+ }
388
+ else {
389
+ response = await this.spotPublicGetTimestamp(params);
390
+ }
391
+ //
392
+ // spot
393
+ //
394
+ // {
395
+ // "result": "true",
396
+ // "data": 1691789627950,
397
+ // "error_code": 0,
398
+ // "ts": 1691789627950
399
+ // }
400
+ //
401
+ // swap
402
+ //
403
+ // {
404
+ // "data": 1691789627950,
405
+ // "error_code": 0,
406
+ // "msg": "Success",
407
+ // "result": "true",
408
+ // "success": true
409
+ // }
410
+ //
411
+ return this.safeInteger(response, 'data');
412
+ }
413
+ /**
414
+ * @method
415
+ * @name lbank#fetchCurrencies
416
+ * @description fetches all available currencies on an exchange
417
+ * @param {dict} [params] extra parameters specific to the exchange API endpoint
418
+ * @returns {dict} an associative dictionary of currencies
419
+ */
420
+ async fetchCurrencies(params = {}) {
421
+ const response = await this.spotPublicGetWithdrawConfigs(params);
422
+ //
423
+ // {
424
+ // "msg": "Success",
425
+ // "result": "true",
426
+ // "data": [
427
+ // {
428
+ // "amountScale": "4",
429
+ // "chain": "bep20(bsc)",
430
+ // "assetCode": "usdt",
431
+ // "min": "10",
432
+ // "transferAmtScale": "4",
433
+ // "canWithDraw": true,
434
+ // "fee": "0.0000",
435
+ // "minTransfer": "0.0001",
436
+ // "type": "1"
437
+ // },
438
+ // {
439
+ // "amountScale": "4",
440
+ // "chain": "trc20",
441
+ // "assetCode": "usdt",
442
+ // "min": "1",
443
+ // "transferAmtScale": "4",
444
+ // "canWithDraw": true,
445
+ // "fee": "1.0000",
446
+ // "minTransfer": "0.0001",
447
+ // "type": "1"
448
+ // },
449
+ // ...
450
+ // ],
451
+ // "error_code": "0",
452
+ // "ts": "1747973911431"
453
+ // }
454
+ //
455
+ const currenciesData = this.safeList(response, 'data', []);
456
+ const grouped = this.groupBy(currenciesData, 'assetCode');
457
+ const groupedKeys = Object.keys(grouped);
458
+ const result = {};
459
+ for (let i = 0; i < groupedKeys.length; i++) {
460
+ const id = (groupedKeys[i]).toString(); // some currencies are numeric
461
+ const code = this.safeCurrencyCode(id);
462
+ const networksRaw = grouped[id];
463
+ const networks = {};
464
+ for (let j = 0; j < networksRaw.length; j++) {
465
+ const networkEntry = networksRaw[j];
466
+ const networkId = this.safeString(networkEntry, 'chain');
467
+ const networkCode = this.networkIdToCode(networkId);
468
+ networks[networkCode] = {
469
+ 'id': networkId,
470
+ 'network': networkCode,
471
+ 'limits': {
472
+ 'withdraw': {
473
+ 'min': this.safeNumber(networkEntry, 'min'),
474
+ 'max': undefined,
475
+ },
476
+ 'deposit': {
477
+ 'min': this.safeNumber(networkEntry, 'minTransfer'),
478
+ 'max': undefined,
479
+ },
480
+ },
481
+ 'active': undefined,
482
+ 'deposit': undefined,
483
+ 'withdraw': this.safeBool(networkEntry, 'canWithDraw'),
484
+ 'fee': this.safeNumber(networkEntry, 'fee'),
485
+ 'precision': this.parseNumber(this.parsePrecision(this.safeString(networkEntry, 'transferAmtScale'))),
486
+ 'info': networkEntry,
487
+ };
488
+ }
489
+ result[code] = this.safeCurrencyStructure({
490
+ 'id': id,
491
+ 'code': code,
492
+ 'precision': undefined,
493
+ 'type': undefined,
494
+ 'name': undefined,
495
+ 'active': undefined,
496
+ 'deposit': undefined,
497
+ 'withdraw': undefined,
498
+ 'fee': undefined,
499
+ 'limits': {
500
+ 'withdraw': {
501
+ 'min': undefined,
502
+ 'max': undefined,
503
+ },
504
+ 'deposit': {
505
+ 'min': undefined,
506
+ 'max': undefined,
507
+ },
508
+ },
509
+ 'networks': networks,
510
+ 'info': networksRaw,
511
+ });
512
+ }
513
+ return result;
514
+ }
515
+ /**
516
+ * @method
517
+ * @name lbank#fetchMarkets
518
+ * @description retrieves data on all markets for lbank
519
+ * @see https://www.lbank.com/en-US/docs/index.html#trading-pairs
520
+ * @see https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
521
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
522
+ * @returns {object[]} an array of objects representing market data
523
+ */
524
+ async fetchMarkets(params = {}) {
525
+ const marketsPromises = [
526
+ this.fetchSpotMarkets(params),
527
+ this.fetchSwapMarkets(params),
528
+ ];
529
+ const resolvedMarkets = await Promise.all(marketsPromises);
530
+ return this.arrayConcat(resolvedMarkets[0], resolvedMarkets[1]);
531
+ }
532
+ async fetchSpotMarkets(params = {}) {
533
+ const response = await this.spotPublicGetAccuracy(params);
534
+ //
535
+ // {
536
+ // "result": "true",
537
+ // "data": [
538
+ // {
539
+ // "symbol": "btc_usdt",
540
+ // "quantityAccuracy": "4",
541
+ // "minTranQua": "0.0001",
542
+ // "priceAccuracy": "2"
543
+ // },
544
+ // ],
545
+ // "error_code": 0,
546
+ // "ts": 1691560288484
547
+ // }
548
+ //
549
+ const data = this.safeValue(response, 'data', []);
550
+ const result = [];
551
+ for (let i = 0; i < data.length; i++) {
552
+ const market = data[i];
553
+ const marketId = this.safeString(market, 'symbol');
554
+ const parts = marketId.split('_');
555
+ const baseId = parts[0];
556
+ const quoteId = parts[1];
557
+ const base = this.safeCurrencyCode(baseId);
558
+ const quote = this.safeCurrencyCode(quoteId);
559
+ const symbol = base + '/' + quote;
560
+ result.push({
561
+ 'id': marketId,
562
+ 'symbol': symbol,
563
+ 'base': base,
564
+ 'quote': quote,
565
+ 'baseId': baseId,
566
+ 'quoteId': quoteId,
567
+ 'settle': undefined,
568
+ 'settleId': undefined,
569
+ 'type': 'spot',
570
+ 'spot': true,
571
+ 'margin': false,
572
+ 'swap': false,
573
+ 'future': false,
574
+ 'option': false,
575
+ 'active': true,
576
+ 'contract': false,
577
+ 'linear': undefined,
578
+ 'inverse': undefined,
579
+ 'contractSize': undefined,
580
+ 'expiry': undefined,
581
+ 'expiryDatetime': undefined,
582
+ 'strike': undefined,
583
+ 'optionType': undefined,
584
+ 'precision': {
585
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'quantityAccuracy'))),
586
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'priceAccuracy'))),
587
+ },
588
+ 'limits': {
589
+ 'leverage': {
590
+ 'min': undefined,
591
+ 'max': undefined,
592
+ },
593
+ 'amount': {
594
+ 'min': this.safeNumber(market, 'minTranQua'),
595
+ 'max': undefined,
596
+ },
597
+ 'price': {
598
+ 'min': undefined,
599
+ 'max': undefined,
600
+ },
601
+ 'cost': {
602
+ 'min': undefined,
603
+ 'max': undefined,
604
+ },
605
+ },
606
+ 'created': undefined,
607
+ 'info': market,
608
+ });
609
+ }
610
+ return result;
611
+ }
612
+ async fetchSwapMarkets(params = {}) {
613
+ const request = {
614
+ 'productGroup': 'SwapU',
615
+ };
616
+ const response = await this.contractPublicGetCfdOpenApiV1PubInstrument(this.extend(request, params));
617
+ //
618
+ // {
619
+ // "data": [
620
+ // {
621
+ // "priceLimitUpperValue": 0.2,
622
+ // "symbol": "BTCUSDT",
623
+ // "volumeTick": 0.0001,
624
+ // "indexPrice": "29707.70200000",
625
+ // "minOrderVolume": "0.0001",
626
+ // "priceTick": 0.1,
627
+ // "maxOrderVolume": "30.0",
628
+ // "baseCurrency": "BTC",
629
+ // "volumeMultiple": 1.0,
630
+ // "exchangeID": "Exchange",
631
+ // "priceCurrency": "USDT",
632
+ // "priceLimitLowerValue": 0.2,
633
+ // "clearCurrency": "USDT",
634
+ // "symbolName": "BTCUSDT",
635
+ // "defaultLeverage": 20.0,
636
+ // "minOrderCost": "5.0"
637
+ // },
638
+ // ],
639
+ // "error_code": 0,
640
+ // "msg": "Success",
641
+ // "result": "true",
642
+ // "success": true
643
+ // }
644
+ //
645
+ const data = this.safeValue(response, 'data', []);
646
+ const result = [];
647
+ for (let i = 0; i < data.length; i++) {
648
+ const market = data[i];
649
+ const marketId = this.safeString(market, 'symbol');
650
+ const baseId = this.safeString(market, 'baseCurrency');
651
+ const settleId = this.safeString(market, 'clearCurrency');
652
+ const quoteId = settleId;
653
+ const base = this.safeCurrencyCode(baseId);
654
+ const quote = this.safeCurrencyCode(quoteId);
655
+ const settle = this.safeCurrencyCode(settleId);
656
+ const symbol = base + '/' + quote + ':' + settle;
657
+ result.push({
658
+ 'id': marketId,
659
+ 'symbol': symbol,
660
+ 'base': base,
661
+ 'quote': quote,
662
+ 'settle': settle,
663
+ 'baseId': baseId,
664
+ 'quoteId': quoteId,
665
+ 'settleId': settleId,
666
+ 'type': 'swap',
667
+ 'spot': false,
668
+ 'margin': false,
669
+ 'swap': true,
670
+ 'future': false,
671
+ 'option': false,
672
+ 'active': true,
673
+ 'contract': true,
674
+ 'linear': true,
675
+ 'inverse': false,
676
+ 'contractSize': this.safeNumber(market, 'volumeMultiple'),
677
+ 'expiry': undefined,
678
+ 'expiryDatetime': undefined,
679
+ 'strike': undefined,
680
+ 'optionType': undefined,
681
+ 'precision': {
682
+ 'amount': this.safeNumber(market, 'volumeTick'),
683
+ 'price': this.safeNumber(market, 'priceTick'),
684
+ },
685
+ 'limits': {
686
+ 'leverage': {
687
+ 'min': undefined,
688
+ 'max': undefined,
689
+ },
690
+ 'amount': {
691
+ 'min': this.safeNumber(market, 'minOrderVolume'),
692
+ 'max': this.safeNumber(market, 'maxOrderVolume'),
693
+ },
694
+ 'price': {
695
+ 'min': this.safeNumber(market, 'priceLimitLowerValue'),
696
+ 'max': this.safeNumber(market, 'priceLimitUpperValue'),
697
+ },
698
+ 'cost': {
699
+ 'min': this.safeNumber(market, 'minOrderCost'),
700
+ 'max': undefined,
701
+ },
702
+ },
703
+ 'created': undefined,
704
+ 'info': market,
705
+ });
706
+ }
707
+ return result;
708
+ }
709
+ parseTicker(ticker, market = undefined) {
710
+ //
711
+ // spot: fetchTicker, fetchTickers
712
+ //
713
+ // {
714
+ // "symbol": "btc_usdt",
715
+ // "ticker": {
716
+ // "high": "29695.57",
717
+ // "vol": "6890.2789",
718
+ // "low": "29110",
719
+ // "change": "0.58",
720
+ // "turnover": "202769821.06",
721
+ // "latest": "29405.98"
722
+ // },
723
+ // "timestamp": :1692064274908
724
+ // }
725
+ //
726
+ // swap: fetchTickers
727
+ //
728
+ // {
729
+ // "prePositionFeeRate": "0.000053",
730
+ // "volume": "2435.459",
731
+ // "symbol": "BTCUSDT",
732
+ // "highestPrice": "29446.5",
733
+ // "lowestPrice": "29362.9",
734
+ // "openPrice": "29419.5",
735
+ // "markedPrice": "29385.1",
736
+ // "turnover": "36345526.2438402",
737
+ // "lastPrice": "29387.0"
738
+ // }
739
+ //
740
+ const timestamp = this.safeInteger(ticker, 'timestamp');
741
+ const marketId = this.safeString(ticker, 'symbol');
742
+ const symbol = this.safeSymbol(marketId, market);
743
+ const tickerData = this.safeValue(ticker, 'ticker', {});
744
+ market = this.safeMarket(marketId, market);
745
+ const data = (market['contract']) ? ticker : tickerData;
746
+ return this.safeTicker({
747
+ 'symbol': symbol,
748
+ 'timestamp': timestamp,
749
+ 'datetime': this.iso8601(timestamp),
750
+ 'high': this.safeString2(data, 'high', 'highestPrice'),
751
+ 'low': this.safeString2(data, 'low', 'lowestPrice'),
752
+ 'bid': undefined,
753
+ 'bidVolume': undefined,
754
+ 'ask': undefined,
755
+ 'askVolume': undefined,
756
+ 'vwap': undefined,
757
+ 'open': this.safeString(data, 'openPrice'),
758
+ 'close': undefined,
759
+ 'last': this.safeString2(data, 'latest', 'lastPrice'),
760
+ 'previousClose': undefined,
761
+ 'change': undefined,
762
+ 'percentage': this.safeString(data, 'change'),
763
+ 'average': undefined,
764
+ 'baseVolume': this.safeString2(data, 'vol', 'volume'),
765
+ 'quoteVolume': this.safeString(data, 'turnover'),
766
+ 'info': ticker,
767
+ }, market);
768
+ }
769
+ /**
770
+ * @method
771
+ * @name lbank#fetchTicker
772
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
773
+ * @see https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
774
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
775
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
776
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
777
+ */
778
+ async fetchTicker(symbol, params = {}) {
779
+ await this.loadMarkets();
780
+ const market = this.market(symbol);
781
+ if (market['swap']) {
782
+ const responseForSwap = await this.fetchTickers([market['symbol']], params);
783
+ return this.safeValue(responseForSwap, market['symbol']);
784
+ }
785
+ const request = {
786
+ 'symbol': market['id'],
787
+ };
788
+ const response = await this.spotPublicGetTicker24hr(this.extend(request, params));
789
+ //
790
+ // {
791
+ // "result": "true",
792
+ // "data": [
793
+ // {
794
+ // "symbol": "btc_usdt",
795
+ // "ticker": {
796
+ // "high": "29695.57",
797
+ // "vol": "6890.2789",
798
+ // "low": "29110",
799
+ // "change": "0.58",
800
+ // "turnover": "202769821.06",
801
+ // "latest": "29405.98"
802
+ // },
803
+ // "timestamp": :1692064274908
804
+ // }
805
+ // ],
806
+ // "error_code": 0,
807
+ // "ts": :1692064276872
808
+ // }
809
+ //
810
+ const data = this.safeValue(response, 'data', []);
811
+ const first = this.safeDict(data, 0, {});
812
+ return this.parseTicker(first, market);
813
+ }
814
+ /**
815
+ * @method
816
+ * @name lbank#fetchTickers
817
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
818
+ * @see https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
819
+ * @see https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
820
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
821
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
822
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
823
+ */
824
+ async fetchTickers(symbols = undefined, params = {}) {
825
+ await this.loadMarkets();
826
+ let market = undefined;
827
+ if (symbols !== undefined) {
828
+ symbols = this.marketSymbols(symbols);
829
+ const symbolsLength = symbols.length;
830
+ if (symbolsLength > 0) {
831
+ market = this.market(symbols[0]);
832
+ }
833
+ }
834
+ const request = {};
835
+ let type = undefined;
836
+ [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
837
+ let response = undefined;
838
+ if (type === 'swap') {
839
+ request['productGroup'] = 'SwapU';
840
+ response = await this.contractPublicGetCfdOpenApiV1PubMarketData(this.extend(request, params));
841
+ }
842
+ else {
843
+ request['symbol'] = 'all';
844
+ response = await this.spotPublicGetTicker24hr(this.extend(request, params));
845
+ }
846
+ //
847
+ // spot
848
+ //
849
+ // {
850
+ // "result": "true",
851
+ // "data": [
852
+ // {
853
+ // "symbol": "btc_usdt",
854
+ // "ticker": {
855
+ // "high": "29695.57",
856
+ // "vol": "6890.2789",
857
+ // "low": "29110",
858
+ // "change": "0.58",
859
+ // "turnover": "202769821.06",
860
+ // "latest": "29405.98"
861
+ // },
862
+ // "timestamp": :1692064274908
863
+ // }
864
+ // ],
865
+ // "error_code": 0,
866
+ // "ts": :1692064276872
867
+ // }
868
+ //
869
+ // swap
870
+ //
871
+ // {
872
+ // "data": [
873
+ // {
874
+ // "prePositionFeeRate": "0.000053",
875
+ // "volume": "2435.459",
876
+ // "symbol": "BTCUSDT",
877
+ // "highestPrice": "29446.5",
878
+ // "lowestPrice": "29362.9",
879
+ // "openPrice": "29419.5",
880
+ // "markedPrice": "29385.1",
881
+ // "turnover": "36345526.2438402",
882
+ // "lastPrice": "29387.0"
883
+ // },
884
+ // ],
885
+ // "error_code": 0,
886
+ // "msg": "Success",
887
+ // "result": "true",
888
+ // "success": true
889
+ // }
890
+ //
891
+ const data = this.safeList(response, 'data', []);
892
+ return this.parseTickers(data, symbols);
893
+ }
894
+ /**
895
+ * @method
896
+ * @name lbank#fetchOrderBook
897
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
898
+ * @see https://www.lbank.com/en-US/docs/index.html#query-market-depth
899
+ * @see https://www.lbank.com/en-US/docs/contract.html#get-handicap
900
+ * @param {string} symbol unified symbol of the market to fetch the order book for
901
+ * @param {int} [limit] the maximum amount of order book entries to return
902
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
903
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
904
+ */
905
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
906
+ await this.loadMarkets();
907
+ const market = this.market(symbol);
908
+ if (limit === undefined) {
909
+ limit = 60;
910
+ }
911
+ const request = {
912
+ 'symbol': market['id'],
913
+ };
914
+ let type = undefined;
915
+ [type, params] = this.handleMarketTypeAndParams('fetchOrderBook', market, params);
916
+ let response = undefined;
917
+ if (type === 'swap') {
918
+ request['depth'] = limit;
919
+ response = await this.contractPublicGetCfdOpenApiV1PubMarketOrder(this.extend(request, params));
920
+ }
921
+ else {
922
+ request['size'] = limit;
923
+ response = await this.spotPublicGetDepth(this.extend(request, params));
924
+ }
925
+ //
926
+ // spot
927
+ //
928
+ // {
929
+ // "result": "true",
930
+ // "data": {
931
+ // "asks": [
932
+ // ["29243.37", "2.8783"],
933
+ // ["29243.39", "2.2842"],
934
+ // ["29243.4", "0.0337"]
935
+ // ],
936
+ // "bids": [
937
+ // ["29243.36", "1.5258"],
938
+ // ["29243.34", "0.8218"],
939
+ // ["29243.28", "1.285"]
940
+ // ],
941
+ // "timestamp": :1692157328820
942
+ // },
943
+ // "error_code": 0,
944
+ // "ts": :1692157328820
945
+ // }
946
+ //
947
+ // swap
948
+ //
949
+ // {
950
+ // "data": {
951
+ // "symbol": "BTCUSDT",
952
+ // "asks": [
953
+ // {
954
+ // "volume": "14.6535",
955
+ // "price": "29234.2",
956
+ // "orders": "1"
957
+ // },
958
+ // ],
959
+ // "bids": [
960
+ // {
961
+ // "volume": "13.4899",
962
+ // "price": "29234.1",
963
+ // "orders": "4"
964
+ // },
965
+ // ]
966
+ // },
967
+ // "error_code": 0,
968
+ // "msg": "Success",
969
+ // "result": "true",
970
+ // "success": true
971
+ // }
972
+ //
973
+ const orderbook = this.safeValue(response, 'data', {});
974
+ const timestamp = this.milliseconds();
975
+ if (market['swap']) {
976
+ return this.parseOrderBook(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume');
977
+ }
978
+ return this.parseOrderBook(orderbook, market['symbol'], timestamp, 'bids', 'asks');
979
+ }
980
+ parseTrade(trade, market = undefined) {
981
+ //
982
+ // fetchTrades (old) spotPublicGetTrades
983
+ //
984
+ // {
985
+ // "date_ms":1647021989789,
986
+ // "amount":0.0028,
987
+ // "price":38804.2,
988
+ // "type":"buy",
989
+ // "tid":"52d5616ee35c43019edddebe59b3e094"
990
+ // }
991
+ //
992
+ //
993
+ // fetchTrades (new) spotPublicGetTradesSupplement
994
+ //
995
+ // {
996
+ // "quoteQty":1675.048485,
997
+ // "price":0.127545,
998
+ // "qty":13133,
999
+ // "id":"3589541dc22e4357b227283650f714e2",
1000
+ // "time":1648058297110,
1001
+ // "isBuyerMaker":false
1002
+ // }
1003
+ //
1004
+ // fetchMyTrades (private)
1005
+ //
1006
+ // {
1007
+ // "orderUuid":"38b4e7a4-14f6-45fd-aba1-1a37024124a0",
1008
+ // "tradeFeeRate":0.0010000000,
1009
+ // "dealTime":1648500944496,
1010
+ // "dealQuantity":30.00000000000000000000,
1011
+ // "tradeFee":0.00453300000000000000,
1012
+ // "txUuid":"11f3850cc6214ea3b495adad3a032794",
1013
+ // "dealPrice":0.15111300000000000000,
1014
+ // "dealVolumePrice":4.53339000000000000000,
1015
+ // "tradeType":"sell_market"
1016
+ // }
1017
+ //
1018
+ let timestamp = this.safeInteger2(trade, 'date_ms', 'time');
1019
+ if (timestamp === undefined) {
1020
+ timestamp = this.safeInteger(trade, 'dealTime');
1021
+ }
1022
+ let amountString = this.safeString2(trade, 'amount', 'qty');
1023
+ if (amountString === undefined) {
1024
+ amountString = this.safeString(trade, 'dealQuantity');
1025
+ }
1026
+ let priceString = this.safeString(trade, 'price');
1027
+ if (priceString === undefined) {
1028
+ priceString = this.safeString(trade, 'dealPrice');
1029
+ }
1030
+ let costString = this.safeString(trade, 'quoteQty');
1031
+ if (costString === undefined) {
1032
+ costString = this.safeString(trade, 'dealVolumePrice');
1033
+ }
1034
+ let side = this.safeString2(trade, 'tradeType', 'type');
1035
+ let type = undefined;
1036
+ let takerOrMaker = undefined;
1037
+ if (side !== undefined) {
1038
+ const parts = side.split('_');
1039
+ side = this.safeString(parts, 0);
1040
+ const typePart = this.safeString(parts, 1);
1041
+ type = 'limit';
1042
+ takerOrMaker = 'taker';
1043
+ if (typePart !== undefined) {
1044
+ if (typePart === 'market') {
1045
+ type = 'market';
1046
+ }
1047
+ else if (typePart === 'maker') {
1048
+ takerOrMaker = 'maker';
1049
+ }
1050
+ }
1051
+ }
1052
+ let id = this.safeString2(trade, 'tid', 'id');
1053
+ if (id === undefined) {
1054
+ id = this.safeString(trade, 'txUuid');
1055
+ }
1056
+ const order = this.safeString(trade, 'orderUuid');
1057
+ const symbol = this.safeSymbol(undefined, market);
1058
+ let fee = undefined;
1059
+ const feeCost = this.safeString(trade, 'tradeFee');
1060
+ if (feeCost !== undefined) {
1061
+ fee = {
1062
+ 'cost': feeCost,
1063
+ 'currency': (side === 'buy') ? market['base'] : market['quote'],
1064
+ 'rate': this.safeString(trade, 'tradeFeeRate'),
1065
+ };
1066
+ }
1067
+ return this.safeTrade({
1068
+ 'timestamp': timestamp,
1069
+ 'datetime': this.iso8601(timestamp),
1070
+ 'symbol': symbol,
1071
+ 'id': id,
1072
+ 'order': order,
1073
+ 'type': type,
1074
+ 'takerOrMaker': takerOrMaker,
1075
+ 'side': side,
1076
+ 'price': priceString,
1077
+ 'amount': amountString,
1078
+ 'cost': costString,
1079
+ 'fee': fee,
1080
+ 'info': trade,
1081
+ }, market);
1082
+ }
1083
+ /**
1084
+ * @method
1085
+ * @name lbank#fetchTrades
1086
+ * @description get the list of most recent trades for a particular symbol
1087
+ * @see https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
1088
+ * @see https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
1089
+ * @param {string} symbol unified symbol of the market to fetch trades for
1090
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1091
+ * @param {int} [limit] the maximum amount of trades to fetch
1092
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1093
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1094
+ */
1095
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1096
+ await this.loadMarkets();
1097
+ const market = this.market(symbol);
1098
+ const request = {
1099
+ 'symbol': market['id'],
1100
+ };
1101
+ if (since !== undefined) {
1102
+ request['time'] = since;
1103
+ }
1104
+ if (limit !== undefined) {
1105
+ request['size'] = Math.min(limit, 600);
1106
+ }
1107
+ else {
1108
+ request['size'] = 600; // max
1109
+ }
1110
+ const options = this.safeValue(this.options, 'fetchTrades', {});
1111
+ const defaultMethod = this.safeString(options, 'method', 'spotPublicGetTrades');
1112
+ const method = this.safeString(params, 'method', defaultMethod);
1113
+ params = this.omit(params, 'method');
1114
+ let response = undefined;
1115
+ if (method === 'spotPublicGetSupplementTrades') {
1116
+ response = await this.spotPublicGetSupplementTrades(this.extend(request, params));
1117
+ }
1118
+ else {
1119
+ response = await this.spotPublicGetTrades(this.extend(request, params));
1120
+ }
1121
+ //
1122
+ // {
1123
+ // "result":"true",
1124
+ // "data": [
1125
+ // {
1126
+ // "date_ms":1647021989789,
1127
+ // "amount":0.0028,
1128
+ // "price":38804.2,
1129
+ // "type":"buy",
1130
+ // "tid":"52d5616ee35c43019edddebe59b3e094"
1131
+ // }
1132
+ // ],
1133
+ // "error_code":0,
1134
+ // "ts":1647021999308
1135
+ // }
1136
+ //
1137
+ const trades = this.safeList(response, 'data', []);
1138
+ return this.parseTrades(trades, market, since, limit);
1139
+ }
1140
+ parseOHLCV(ohlcv, market = undefined) {
1141
+ //
1142
+ // [
1143
+ // 1482311500, // timestamp
1144
+ // 5423.23, // open
1145
+ // 5472.80, // high
1146
+ // 5516.09, // low
1147
+ // 5462, // close
1148
+ // 234.3250 // volume
1149
+ // ],
1150
+ //
1151
+ return [
1152
+ this.safeTimestamp(ohlcv, 0),
1153
+ this.safeNumber(ohlcv, 1),
1154
+ this.safeNumber(ohlcv, 2),
1155
+ this.safeNumber(ohlcv, 3),
1156
+ this.safeNumber(ohlcv, 4),
1157
+ this.safeNumber(ohlcv, 5), // volume
1158
+ ];
1159
+ }
1160
+ /**
1161
+ * @method
1162
+ * @name lbank#fetchOHLCV
1163
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1164
+ * @see https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
1165
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1166
+ * @param {string} timeframe the length of time each candle represents
1167
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1168
+ * @param {int} [limit] the maximum amount of candles to fetch
1169
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1170
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1171
+ */
1172
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1173
+ // endpoint doesnt work
1174
+ await this.loadMarkets();
1175
+ const market = this.market(symbol);
1176
+ if (limit === undefined) {
1177
+ limit = 100;
1178
+ }
1179
+ else {
1180
+ limit = Math.min(limit, 2000);
1181
+ }
1182
+ if (since === undefined) {
1183
+ const duration = this.parseTimeframe(timeframe);
1184
+ since = this.milliseconds() - (duration * 1000 * limit);
1185
+ }
1186
+ const request = {
1187
+ 'symbol': market['id'],
1188
+ 'type': this.safeString(this.timeframes, timeframe, timeframe),
1189
+ 'time': this.parseToInt(since / 1000),
1190
+ 'size': Math.min(limit + 1, 2000), // max 2000
1191
+ };
1192
+ const response = await this.spotPublicGetKline(this.extend(request, params));
1193
+ const ohlcvs = this.safeList(response, 'data', []);
1194
+ //
1195
+ //
1196
+ // [
1197
+ // [
1198
+ // 1482311500,
1199
+ // 5423.23,
1200
+ // 5472.80,
1201
+ // 5516.09,
1202
+ // 5462,
1203
+ // 234.3250
1204
+ // ],
1205
+ // [
1206
+ // 1482311400,
1207
+ // 5432.52,
1208
+ // 5459.87,
1209
+ // 5414.30,
1210
+ // 5428.23,
1211
+ // 213.7329
1212
+ // ]
1213
+ // ]
1214
+ //
1215
+ return this.parseOHLCVs(ohlcvs, market, timeframe, since, limit);
1216
+ }
1217
+ parseBalance(response) {
1218
+ //
1219
+ // spotPrivatePostUserInfo
1220
+ //
1221
+ // {
1222
+ // "toBtc": {
1223
+ // "egc:": "0",
1224
+ // "iog": "0",
1225
+ // "ksm": "0",
1226
+ // },
1227
+ // "freeze": {
1228
+ // "egc": "0",
1229
+ // "iog": "0",
1230
+ // "ksm": "0" ,
1231
+ // },
1232
+ // "asset": {
1233
+ // "egc": "0",
1234
+ // "iog": "0",
1235
+ // "ksm": "0",
1236
+ // },
1237
+ // "free": {
1238
+ // "egc": "0",
1239
+ // "iog": "0",
1240
+ // "ksm": "0",
1241
+ // }
1242
+ // }
1243
+ //
1244
+ // spotPrivatePostSupplementUserInfoAccount
1245
+ //
1246
+ // {
1247
+ // "balances":[
1248
+ // {
1249
+ // "asset":"lbk",
1250
+ // "free":"0",
1251
+ // "locked":"0"
1252
+ // }, ...
1253
+ // ]
1254
+ // }
1255
+ //
1256
+ // spotPrivatePostSupplementUserInfo
1257
+ //
1258
+ // [
1259
+ // {
1260
+ // "usableAmt":"31.45130723",
1261
+ // "assetAmt":"31.45130723",
1262
+ // "networkList":[
1263
+ // {
1264
+ // "isDefault":true,
1265
+ // "withdrawFeeRate":"",
1266
+ // "name":"bep20(bsc)",
1267
+ // "withdrawMin":30,
1268
+ // "minLimit":0.0001,
1269
+ // "minDeposit":0.0001,
1270
+ // "feeAssetCode":"doge",
1271
+ // "withdrawFee":"30",
1272
+ // "type":1,
1273
+ // "coin":"doge",
1274
+ // "network":"bsc"
1275
+ // },
1276
+ // {
1277
+ // "isDefault":false,
1278
+ // "withdrawFeeRate":"",
1279
+ // "name":"dogecoin",
1280
+ // "withdrawMin":10,
1281
+ // "minLimit":0.0001,
1282
+ // "minDeposit":10,
1283
+ // "feeAssetCode":"doge",
1284
+ // "withdrawFee":"10",
1285
+ // "type":1,
1286
+ // "coin":"doge",
1287
+ // "network":"dogecoin"
1288
+ // }
1289
+ // ],
1290
+ // "freezeAmt":"0",
1291
+ // "coin":"doge"
1292
+ // }, ...
1293
+ // ]
1294
+ //
1295
+ const timestamp = this.safeInteger(response, 'ts');
1296
+ const result = {
1297
+ 'info': response,
1298
+ 'timestamp': timestamp,
1299
+ 'datetime': this.iso8601(timestamp),
1300
+ };
1301
+ const data = this.safeValue(response, 'data');
1302
+ // from spotPrivatePostUserInfo
1303
+ const toBtc = this.safeValue(data, 'toBtc');
1304
+ if (toBtc !== undefined) {
1305
+ const used = this.safeValue(data, 'freeze', {});
1306
+ const free = this.safeValue(data, 'free', {});
1307
+ const currencies = Object.keys(free);
1308
+ for (let i = 0; i < currencies.length; i++) {
1309
+ const currencyId = currencies[i];
1310
+ const code = this.safeCurrencyCode(currencyId);
1311
+ const account = this.account();
1312
+ account['used'] = this.safeString(used, currencyId);
1313
+ account['free'] = this.safeString(free, currencyId);
1314
+ result[code] = account;
1315
+ }
1316
+ return this.safeBalance(result);
1317
+ }
1318
+ // from spotPrivatePostSupplementUserInfoAccount
1319
+ const balances = this.safeValue(data, 'balances');
1320
+ if (balances !== undefined) {
1321
+ for (let i = 0; i < balances.length; i++) {
1322
+ const item = balances[i];
1323
+ const currencyId = this.safeString(item, 'asset');
1324
+ const codeInner = this.safeCurrencyCode(currencyId);
1325
+ const account = this.account();
1326
+ account['free'] = this.safeString(item, 'free');
1327
+ account['used'] = this.safeString(item, 'locked');
1328
+ result[codeInner] = account;
1329
+ }
1330
+ return this.safeBalance(result);
1331
+ }
1332
+ // from spotPrivatePostSupplementUserInfo
1333
+ const isArray = Array.isArray(data);
1334
+ if (isArray === true) {
1335
+ for (let i = 0; i < data.length; i++) {
1336
+ const item = data[i];
1337
+ const currencyId = this.safeString(item, 'coin');
1338
+ const codeInner = this.safeCurrencyCode(currencyId);
1339
+ const account = this.account();
1340
+ account['free'] = this.safeString(item, 'usableAmt');
1341
+ account['used'] = this.safeString(item, 'freezeAmt');
1342
+ result[codeInner] = account;
1343
+ }
1344
+ return this.safeBalance(result);
1345
+ }
1346
+ return undefined;
1347
+ }
1348
+ parseFundingRate(ticker, market = undefined) {
1349
+ // {
1350
+ // "symbol": "BTCUSDT",
1351
+ // "highestPrice": "69495.5",
1352
+ // "underlyingPrice": "68455.904",
1353
+ // "lowestPrice": "68182.1",
1354
+ // "openPrice": "68762.4",
1355
+ // "positionFeeRate": "0.0001",
1356
+ // "volume": "33534.2858",
1357
+ // "markedPrice": "68434.1",
1358
+ // "turnover": "1200636218.210558",
1359
+ // "positionFeeTime": "28800",
1360
+ // "lastPrice": "68427.3",
1361
+ // "nextFeeTime": "1730736000000",
1362
+ // "fundingRate": "0.0001",
1363
+ // }
1364
+ const marketId = this.safeString(ticker, 'symbol');
1365
+ const symbol = this.safeSymbol(marketId, market);
1366
+ const markPrice = this.safeNumber(ticker, 'markedPrice');
1367
+ const indexPrice = this.safeNumber(ticker, 'underlyingPrice');
1368
+ const fundingRate = this.safeNumber(ticker, 'fundingRate');
1369
+ const fundingTime = this.safeInteger(ticker, 'nextFeeTime');
1370
+ const positionFeeTime = this.safeInteger(ticker, 'positionFeeTime');
1371
+ let intervalString = undefined;
1372
+ if (positionFeeTime !== undefined) {
1373
+ const interval = this.parseToInt(positionFeeTime / 60 / 60);
1374
+ intervalString = interval.toString() + 'h';
1375
+ }
1376
+ return {
1377
+ 'info': ticker,
1378
+ 'symbol': symbol,
1379
+ 'markPrice': markPrice,
1380
+ 'indexPrice': indexPrice,
1381
+ 'fundingRate': fundingRate,
1382
+ 'fundingTimestamp': fundingTime,
1383
+ 'fundingDatetime': this.iso8601(fundingTime),
1384
+ 'timestamp': undefined,
1385
+ 'datetime': undefined,
1386
+ 'nextFundingRate': undefined,
1387
+ 'nextFundingTimestamp': undefined,
1388
+ 'nextFundingDatetime': undefined,
1389
+ 'previousFundingRate': undefined,
1390
+ 'previousFundingTimestamp': undefined,
1391
+ 'previousFundingDatetime': undefined,
1392
+ 'interval': intervalString,
1393
+ };
1394
+ }
1395
+ /**
1396
+ * @method
1397
+ * @name lbank#fetchFundingRate
1398
+ * @description fetch the current funding rate
1399
+ * @see https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1400
+ * @param {string} symbol unified market symbol
1401
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1402
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
1403
+ */
1404
+ async fetchFundingRate(symbol, params = {}) {
1405
+ await this.loadMarkets();
1406
+ const market = this.market(symbol);
1407
+ const responseForSwap = await this.fetchFundingRates([market['symbol']], params);
1408
+ return this.safeValue(responseForSwap, market['symbol']);
1409
+ }
1410
+ /**
1411
+ * @method
1412
+ * @name lbank#fetchFundingRates
1413
+ * @description fetch the funding rate for multiple markets
1414
+ * @see https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1415
+ * @param {string[]|undefined} symbols list of unified market symbols
1416
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1417
+ * @returns {object} a dictionary of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexed by market symbols
1418
+ */
1419
+ async fetchFundingRates(symbols = undefined, params = {}) {
1420
+ await this.loadMarkets();
1421
+ symbols = this.marketSymbols(symbols);
1422
+ const request = {
1423
+ 'productGroup': 'SwapU',
1424
+ };
1425
+ const response = await this.contractPublicGetCfdOpenApiV1PubMarketData(this.extend(request, params));
1426
+ // {
1427
+ // "data": [
1428
+ // {
1429
+ // "symbol": "BTCUSDT",
1430
+ // "highestPrice": "69495.5",
1431
+ // "underlyingPrice": "68455.904",
1432
+ // "lowestPrice": "68182.1",
1433
+ // "openPrice": "68762.4",
1434
+ // "positionFeeRate": "0.0001",
1435
+ // "volume": "33534.2858",
1436
+ // "markedPrice": "68434.1",
1437
+ // "turnover": "1200636218.210558",
1438
+ // "positionFeeTime": "28800",
1439
+ // "lastPrice": "68427.3",
1440
+ // "nextFeeTime": "1730736000000",
1441
+ // "fundingRate": "0.0001",
1442
+ // }
1443
+ // ],
1444
+ // "error_code": "0",
1445
+ // "msg": "Success",
1446
+ // "result": "true",
1447
+ // "success": True,
1448
+ // }
1449
+ const data = this.safeList(response, 'data', []);
1450
+ return this.parseFundingRates(data, symbols);
1451
+ }
1452
+ /**
1453
+ * @method
1454
+ * @name lbank#fetchBalance
1455
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1456
+ * @see https://www.lbank.com/en-US/docs/index.html#asset-information
1457
+ * @see https://www.lbank.com/en-US/docs/index.html#account-information
1458
+ * @see https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1459
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1460
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1461
+ */
1462
+ async fetchBalance(params = {}) {
1463
+ await this.loadMarkets();
1464
+ const options = this.safeValue(this.options, 'fetchBalance', {});
1465
+ const defaultMethod = this.safeString(options, 'method', 'spotPrivatePostSupplementUserInfo');
1466
+ const method = this.safeString(params, 'method', defaultMethod);
1467
+ let response = undefined;
1468
+ if (method === 'spotPrivatePostSupplementUserInfoAccount') {
1469
+ response = await this.spotPrivatePostSupplementUserInfoAccount();
1470
+ }
1471
+ else if (method === 'spotPrivatePostUserInfo') {
1472
+ response = await this.spotPrivatePostUserInfo();
1473
+ }
1474
+ else {
1475
+ response = await this.spotPrivatePostSupplementUserInfo();
1476
+ }
1477
+ //
1478
+ // {
1479
+ // "result": "true",
1480
+ // "data": [
1481
+ // {
1482
+ // "usableAmt": "14.36",
1483
+ // "assetAmt": "14.36",
1484
+ // "networkList": [
1485
+ // {
1486
+ // "isDefault": false,
1487
+ // "withdrawFeeRate": "",
1488
+ // "name": "erc20",
1489
+ // "withdrawMin": 30,
1490
+ // "minLimit": 0.0001,
1491
+ // "minDeposit": 20,
1492
+ // "feeAssetCode": "usdt",
1493
+ // "withdrawFee": "30",
1494
+ // "type": 1,
1495
+ // "coin": "usdt",
1496
+ // "network": "eth"
1497
+ // },
1498
+ // ...
1499
+ // ],
1500
+ // "freezeAmt": "0",
1501
+ // "coin": "ada"
1502
+ // }
1503
+ // ],
1504
+ // "code": 0
1505
+ // }
1506
+ //
1507
+ return this.parseBalance(response);
1508
+ }
1509
+ parseTradingFee(fee, market = undefined) {
1510
+ //
1511
+ // {
1512
+ // "symbol":"skt_usdt",
1513
+ // "makerCommission":"0.10",
1514
+ // "takerCommission":"0.10"
1515
+ // }
1516
+ //
1517
+ const marketId = this.safeString(fee, 'symbol');
1518
+ const symbol = this.safeSymbol(marketId);
1519
+ return {
1520
+ 'info': fee,
1521
+ 'symbol': symbol,
1522
+ 'maker': this.safeNumber(fee, 'makerCommission'),
1523
+ 'taker': this.safeNumber(fee, 'takerCommission'),
1524
+ 'percentage': undefined,
1525
+ 'tierBased': undefined,
1526
+ };
1527
+ }
1528
+ /**
1529
+ * @method
1530
+ * @name lbank#fetchTradingFee
1531
+ * @description fetch the trading fees for a market
1532
+ * @see https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1533
+ * @param {string} symbol unified market symbol
1534
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1535
+ * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
1536
+ */
1537
+ async fetchTradingFee(symbol, params = {}) {
1538
+ const market = this.market(symbol);
1539
+ const result = await this.fetchTradingFees(this.extend(params, { 'category': market['id'] }));
1540
+ return this.safeDict(result, symbol);
1541
+ }
1542
+ /**
1543
+ * @method
1544
+ * @name lbank#fetchTradingFees
1545
+ * @description fetch the trading fees for multiple markets
1546
+ * @see https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1547
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1548
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
1549
+ */
1550
+ async fetchTradingFees(params = {}) {
1551
+ await this.loadMarkets();
1552
+ const request = {};
1553
+ const response = await this.spotPrivatePostSupplementCustomerTradeFee(this.extend(request, params));
1554
+ const fees = this.safeValue(response, 'data', []);
1555
+ const result = {};
1556
+ for (let i = 0; i < fees.length; i++) {
1557
+ const fee = this.parseTradingFee(fees[i]);
1558
+ const symbol = fee['symbol'];
1559
+ result[symbol] = fee;
1560
+ }
1561
+ return result;
1562
+ }
1563
+ /**
1564
+ * @method
1565
+ * @name lbank#createMarketBuyOrderWithCost
1566
+ * @description create a market buy order by providing the symbol and cost
1567
+ * @see https://www.lbank.com/en-US/docs/index.html#place-order
1568
+ * @see https://www.lbank.com/en-US/docs/index.html#place-an-order
1569
+ * @param {string} symbol unified symbol of the market to create an order in
1570
+ * @param {float} cost how much you want to trade in units of the quote currency
1571
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1572
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1573
+ */
1574
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
1575
+ await this.loadMarkets();
1576
+ const market = this.market(symbol);
1577
+ if (!market['spot']) {
1578
+ throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
1579
+ }
1580
+ params['createMarketBuyOrderRequiresPrice'] = false;
1581
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
1582
+ }
1583
+ /**
1584
+ * @method
1585
+ * @name lbank#createOrder
1586
+ * @description create a trade order
1587
+ * @see https://www.lbank.com/en-US/docs/index.html#place-order
1588
+ * @see https://www.lbank.com/en-US/docs/index.html#place-an-order
1589
+ * @param {string} symbol unified symbol of the market to create an order in
1590
+ * @param {string} type 'market' or 'limit'
1591
+ * @param {string} side 'buy' or 'sell'
1592
+ * @param {float} amount how much of currency you want to trade in units of base currency
1593
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1594
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1595
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1596
+ */
1597
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1598
+ await this.loadMarkets();
1599
+ const market = this.market(symbol);
1600
+ const clientOrderId = this.safeString2(params, 'custom_id', 'clientOrderId');
1601
+ const postOnly = this.safeBool(params, 'postOnly', false);
1602
+ const timeInForce = this.safeStringUpper(params, 'timeInForce');
1603
+ params = this.omit(params, ['custom_id', 'clientOrderId', 'timeInForce', 'postOnly']);
1604
+ const request = {
1605
+ 'symbol': market['id'],
1606
+ };
1607
+ const ioc = (timeInForce === 'IOC');
1608
+ const fok = (timeInForce === 'FOK');
1609
+ const maker = (postOnly || (timeInForce === 'PO'));
1610
+ if ((type === 'market') && (ioc || fok || maker)) {
1611
+ throw new InvalidOrder(this.id + ' createOrder () does not allow market FOK, IOC, or postOnly orders. Only limit IOC, FOK, and postOnly orders are allowed');
1612
+ }
1613
+ if (type === 'limit') {
1614
+ request['type'] = side;
1615
+ request['price'] = this.priceToPrecision(symbol, price);
1616
+ request['amount'] = this.amountToPrecision(symbol, amount);
1617
+ if (ioc) {
1618
+ request['type'] = side + '_' + 'ioc';
1619
+ }
1620
+ else if (fok) {
1621
+ request['type'] = side + '_' + 'fok';
1622
+ }
1623
+ else if (maker) {
1624
+ request['type'] = side + '_' + 'maker';
1625
+ }
1626
+ }
1627
+ else if (type === 'market') {
1628
+ if (side === 'sell') {
1629
+ request['type'] = side + '_' + 'market';
1630
+ request['amount'] = this.amountToPrecision(symbol, amount);
1631
+ }
1632
+ else if (side === 'buy') {
1633
+ request['type'] = side + '_' + 'market';
1634
+ let quoteAmount = undefined;
1635
+ let createMarketBuyOrderRequiresPrice = true;
1636
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
1637
+ const cost = this.safeNumber(params, 'cost');
1638
+ params = this.omit(params, 'cost');
1639
+ if (cost !== undefined) {
1640
+ quoteAmount = this.costToPrecision(symbol, cost);
1641
+ }
1642
+ else if (createMarketBuyOrderRequiresPrice) {
1643
+ if (price === undefined) {
1644
+ 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 in the amount argument');
1645
+ }
1646
+ else {
1647
+ const amountString = this.numberToString(amount);
1648
+ const priceString = this.numberToString(price);
1649
+ const costRequest = Precise.stringMul(amountString, priceString);
1650
+ quoteAmount = this.costToPrecision(symbol, costRequest);
1651
+ }
1652
+ }
1653
+ else {
1654
+ quoteAmount = this.costToPrecision(symbol, amount);
1655
+ }
1656
+ // market buys require filling the price param instead of the amount param, for market buys the price is treated as the cost by lbank
1657
+ request['price'] = quoteAmount;
1658
+ }
1659
+ }
1660
+ if (clientOrderId !== undefined) {
1661
+ request['custom_id'] = clientOrderId;
1662
+ }
1663
+ const options = this.safeValue(this.options, 'createOrder', {});
1664
+ const defaultMethod = this.safeString(options, 'method', 'spotPrivatePostSupplementCreateOrder');
1665
+ const method = this.safeString(params, 'method', defaultMethod);
1666
+ params = this.omit(params, 'method');
1667
+ let response = undefined;
1668
+ if (method === 'spotPrivatePostCreateOrder') {
1669
+ response = await this.spotPrivatePostCreateOrder(this.extend(request, params));
1670
+ }
1671
+ else {
1672
+ response = await this.spotPrivatePostSupplementCreateOrder(this.extend(request, params));
1673
+ }
1674
+ //
1675
+ // {
1676
+ // "result":true,
1677
+ // "data":{
1678
+ // "symbol":"doge_usdt",
1679
+ // "order_id":"0cf8a3de-4597-4296-af45-be7abaa06b07"
1680
+ // },
1681
+ // "error_code":0,
1682
+ // "ts":1648162321043
1683
+ // }
1684
+ //
1685
+ const result = this.safeValue(response, 'data', {});
1686
+ return this.safeOrder({
1687
+ 'id': this.safeString(result, 'order_id'),
1688
+ 'info': result,
1689
+ }, market);
1690
+ }
1691
+ parseOrderStatus(status) {
1692
+ const statuses = {
1693
+ '-1': 'canceled',
1694
+ '0': 'open',
1695
+ '1': 'open',
1696
+ '2': 'closed',
1697
+ '3': 'canceled',
1698
+ '4': 'closed', // disposal processing
1699
+ };
1700
+ return this.safeString(statuses, status, status);
1701
+ }
1702
+ parseOrder(order, market = undefined) {
1703
+ //
1704
+ // fetchOrderSupplement (private)
1705
+ //
1706
+ // {
1707
+ // "cummulativeQuoteQty":0,
1708
+ // "symbol":"doge_usdt",
1709
+ // "executedQty":0,
1710
+ // "orderId":"53d2d53e-70fb-4398-b722-f48571a5f61e",
1711
+ // "origQty":1E+2,
1712
+ // "price":0.05,
1713
+ // "clientOrderId":null,
1714
+ // "origQuoteOrderQty":5,
1715
+ // "updateTime":1648163406000,
1716
+ // "time":1648163139387,
1717
+ // "type":"buy_maker",
1718
+ // "status":-1
1719
+ // }
1720
+ //
1721
+ //
1722
+ // fetchOrderDefault (private)
1723
+ //
1724
+ // {
1725
+ // "symbol":"shib_usdt",
1726
+ // "amount":1,
1727
+ // "create_time":1649367863356,
1728
+ // "price":0.0000246103,
1729
+ // "avg_price":0.00002466180000000104,
1730
+ // "type":"buy_market",
1731
+ // "order_id":"abe8b92d-86d9-4d6d-b71e-d14f5fb53ddf",
1732
+ // "custom_id": "007", // field only present if user creates it at order time
1733
+ // "deal_amount":40548.54065802,
1734
+ // "status":2
1735
+ // }
1736
+ //
1737
+ // fetchOpenOrders (private)
1738
+ //
1739
+ // {
1740
+ // "cummulativeQuoteQty":0,
1741
+ // "symbol":"doge_usdt",
1742
+ // "executedQty":0,
1743
+ // "orderId":"73878edf-008d-4e4c-8041-df1f1b2cd8bb",
1744
+ // "origQty":100,
1745
+ // "price":0.05,
1746
+ // "origQuoteOrderQty":5,
1747
+ // "updateTime":1648501762000,
1748
+ // "time":1648501762353,
1749
+ // "type":"buy",
1750
+ // "status":0
1751
+ // }
1752
+ //
1753
+ // fetchOrders (private)
1754
+ //
1755
+ // {
1756
+ // "cummulativeQuoteQty":0,
1757
+ // "symbol":"doge_usdt",
1758
+ // "executedQty":0,
1759
+ // "orderId":"2cadc7cc-b5f6-486b-a5b4-d6ac49a9c186",
1760
+ // "origQty":100,
1761
+ // "price":0.05,
1762
+ // "origQuoteOrderQty":5,
1763
+ // "updateTime":1648501384000,
1764
+ // "time":1648501363889,
1765
+ // "type":"buy",
1766
+ // "status":-1
1767
+ // }
1768
+ //
1769
+ // cancelOrder
1770
+ //
1771
+ // {
1772
+ // "executedQty":0.0,
1773
+ // "price":0.05,
1774
+ // "origQty":100.0,
1775
+ // "tradeType":"buy",
1776
+ // "status":0
1777
+ // }
1778
+ //
1779
+ // cancelAllOrders
1780
+ //
1781
+ // {
1782
+ // "executedQty":0.00000000000000000000,
1783
+ // "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1784
+ // "price":0.05000000000000000000,
1785
+ // "origQty":100.00000000000000000000,
1786
+ // "tradeType":"buy",
1787
+ // "status":0
1788
+ // }
1789
+ //
1790
+ const id = this.safeString2(order, 'orderId', 'order_id');
1791
+ const clientOrderId = this.safeString2(order, 'clientOrderId', 'custom_id');
1792
+ const timestamp = this.safeInteger2(order, 'time', 'create_time');
1793
+ const rawStatus = this.safeString(order, 'status');
1794
+ const marketId = this.safeString(order, 'symbol');
1795
+ market = this.safeMarket(marketId, market);
1796
+ let timeInForce = undefined;
1797
+ let postOnly = false;
1798
+ let type = 'limit';
1799
+ const rawType = this.safeString2(order, 'type', 'tradeType'); // buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1800
+ const parts = rawType.split('_');
1801
+ const side = this.safeString(parts, 0);
1802
+ const typePart = this.safeString(parts, 1); // market, maker, ioc, fok or undefined (limit)
1803
+ if (typePart === 'market') {
1804
+ type = 'market';
1805
+ }
1806
+ if (typePart === 'maker') {
1807
+ postOnly = true;
1808
+ timeInForce = 'PO';
1809
+ }
1810
+ if (typePart === 'ioc') {
1811
+ timeInForce = 'IOC';
1812
+ }
1813
+ if (typePart === 'fok') {
1814
+ timeInForce = 'FOK';
1815
+ }
1816
+ const price = this.safeString(order, 'price');
1817
+ const costString = this.safeString(order, 'cummulativeQuoteQty');
1818
+ let amountString = undefined;
1819
+ if (rawType !== 'buy_market') {
1820
+ amountString = this.safeString2(order, 'origQty', 'amount');
1821
+ }
1822
+ const filledString = this.safeString2(order, 'executedQty', 'deal_amount');
1823
+ return this.safeOrder({
1824
+ 'id': id,
1825
+ 'clientOrderId': clientOrderId,
1826
+ 'datetime': this.iso8601(timestamp),
1827
+ 'timestamp': timestamp,
1828
+ 'lastTradeTimestamp': undefined,
1829
+ 'status': this.parseOrderStatus(rawStatus),
1830
+ 'symbol': market['symbol'],
1831
+ 'type': type,
1832
+ 'timeInForce': timeInForce,
1833
+ 'postOnly': postOnly,
1834
+ 'side': side,
1835
+ 'price': price,
1836
+ 'triggerPrice': undefined,
1837
+ 'cost': costString,
1838
+ 'amount': amountString,
1839
+ 'filled': filledString,
1840
+ 'remaining': undefined,
1841
+ 'trades': undefined,
1842
+ 'fee': undefined,
1843
+ 'info': order,
1844
+ 'average': undefined,
1845
+ }, market);
1846
+ }
1847
+ /**
1848
+ * @method
1849
+ * @name lbank#fetchOrder
1850
+ * @description fetches information on an order made by the user
1851
+ * @see https://www.lbank.com/en-US/docs/index.html#query-order
1852
+ * @see https://www.lbank.com/en-US/docs/index.html#query-order-new
1853
+ * @param {string} id order id
1854
+ * @param {string} symbol unified symbol of the market the order was made in
1855
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1856
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1857
+ */
1858
+ async fetchOrder(id, symbol = undefined, params = {}) {
1859
+ await this.loadMarkets();
1860
+ let method = this.safeString(params, 'method');
1861
+ if (method === undefined) {
1862
+ const options = this.safeValue(this.options, 'fetchOrder', {});
1863
+ method = this.safeString(options, 'method', 'fetchOrderSupplement');
1864
+ }
1865
+ if (method === 'fetchOrderSupplement') {
1866
+ return await this.fetchOrderSupplement(id, symbol, params);
1867
+ }
1868
+ return await this.fetchOrderDefault(id, symbol, params);
1869
+ }
1870
+ async fetchOrderSupplement(id, symbol = undefined, params = {}) {
1871
+ if (symbol === undefined) {
1872
+ throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
1873
+ }
1874
+ await this.loadMarkets();
1875
+ const market = this.market(symbol);
1876
+ const request = {
1877
+ 'symbol': market['id'],
1878
+ 'orderId': id,
1879
+ };
1880
+ const response = await this.spotPrivatePostSupplementOrdersInfo(this.extend(request, params));
1881
+ //
1882
+ // {
1883
+ // "result":true,
1884
+ // "data":{
1885
+ // "cummulativeQuoteQty":0,
1886
+ // "symbol":"doge_usdt",
1887
+ // "executedQty":0,
1888
+ // "orderId":"53d2d53e-70fb-4398-b722-f48571a5f61e",
1889
+ // "origQty":1E+2,
1890
+ // "price":0.05,
1891
+ // "clientOrderId":null,
1892
+ // "origQuoteOrderQty":5,
1893
+ // "updateTime":1648163406000,
1894
+ // "time":1648163139387,
1895
+ // "type":"buy_maker",
1896
+ // "status":-1
1897
+ // },
1898
+ // "error_code":0,
1899
+ // "ts":1648164471827
1900
+ // }
1901
+ //
1902
+ const result = this.safeDict(response, 'data', {});
1903
+ return this.parseOrder(result);
1904
+ }
1905
+ async fetchOrderDefault(id, symbol = undefined, params = {}) {
1906
+ // Id can be a list of ids delimited by a comma
1907
+ if (symbol === undefined) {
1908
+ throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
1909
+ }
1910
+ await this.loadMarkets();
1911
+ const market = this.market(symbol);
1912
+ const request = {
1913
+ 'symbol': market['id'],
1914
+ 'order_id': id,
1915
+ };
1916
+ const response = await this.spotPrivatePostOrdersInfo(this.extend(request, params));
1917
+ //
1918
+ // {
1919
+ // "result":true,
1920
+ // "data":[
1921
+ // {
1922
+ // "symbol":"doge_usdt",
1923
+ // "amount":18,
1924
+ // "create_time":1647455223186,
1925
+ // "price":0,
1926
+ // "avg_price":0.113344,
1927
+ // "type":"sell_market",
1928
+ // "order_id":"d4ca1ddd-40d9-42c1-9717-5de435865bec",
1929
+ // "deal_amount":18,
1930
+ // "status":2
1931
+ // }
1932
+ // ],
1933
+ // "error_code":0,
1934
+ // "ts":1647455270776
1935
+ // }
1936
+ //
1937
+ const result = this.safeValue(response, 'data', []);
1938
+ const numOrders = result.length;
1939
+ if (numOrders === 1) {
1940
+ return this.parseOrder(result[0]);
1941
+ }
1942
+ else {
1943
+ // const parsedOrders = [];
1944
+ // for (let i = 0; i < numOrders; i++) {
1945
+ // const parsedOrder = this.parseOrder (result[i]);
1946
+ // parsedOrders.push (parsedOrder);
1947
+ // }
1948
+ // return parsedOrders;
1949
+ throw new BadRequest(this.id + ' fetchOrder() can only fetch one order at a time');
1950
+ }
1951
+ }
1952
+ /**
1953
+ * @method
1954
+ * @name lbank#fetchMyTrades
1955
+ * @description fetch all trades made by the user
1956
+ * @see https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1957
+ * @param {string} symbol unified market symbol
1958
+ * @param {int} [since] the earliest time in ms to fetch trades for
1959
+ * @param {int} [limit] the maximum number of trade structures to retrieve
1960
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1961
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1962
+ */
1963
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1964
+ if (symbol === undefined) {
1965
+ throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
1966
+ }
1967
+ await this.loadMarkets();
1968
+ const market = this.market(symbol);
1969
+ since = this.safeValue(params, 'start_date', since);
1970
+ params = this.omit(params, 'start_date');
1971
+ const request = {
1972
+ 'symbol': market['id'],
1973
+ // 'start_date' Start time yyyy-mm-dd, the maximum is today, the default is yesterday
1974
+ // 'end_date' Finish time yyyy-mm-dd, the maximum is today, the default is today
1975
+ // 'The start': and end date of the query window is up to 2 days
1976
+ // 'from' Initial transaction number inquiring
1977
+ // 'direct' inquire direction,The default is the 'next' which is the positive sequence of dealing time,the 'prev' is inverted order of dealing time
1978
+ // 'size' Query the number of defaults to 100
1979
+ };
1980
+ if (limit !== undefined) {
1981
+ request['size'] = limit;
1982
+ }
1983
+ if (since !== undefined) {
1984
+ request['start_date'] = this.ymd(since, '-'); // max query 2 days ago
1985
+ request['end_date'] = this.ymd(since + 86400000, '-'); // will cover 2 days
1986
+ }
1987
+ const response = await this.spotPrivatePostTransactionHistory(this.extend(request, params));
1988
+ //
1989
+ // {
1990
+ // "result":true,
1991
+ // "data":[
1992
+ // {
1993
+ // "orderUuid":"38b4e7a4-14f6-45fd-aba1-1a37024124a0",
1994
+ // "tradeFeeRate":0.0010000000,
1995
+ // "dealTime":1648500944496,
1996
+ // "dealQuantity":30.00000000000000000000,
1997
+ // "tradeFee":0.00453300000000000000,
1998
+ // "txUuid":"11f3850cc6214ea3b495adad3a032794",
1999
+ // "dealPrice":0.15111300000000000000,
2000
+ // "dealVolumePrice":4.53339000000000000000,
2001
+ // "tradeType":"sell_market"
2002
+ // }
2003
+ // ],
2004
+ // "error_code":0,
2005
+ // "ts":1648509742164
2006
+ // }
2007
+ //
2008
+ const trades = this.safeList(response, 'data', []);
2009
+ return this.parseTrades(trades, market, since, limit);
2010
+ }
2011
+ /**
2012
+ * @method
2013
+ * @name lbank#fetchOrders
2014
+ * @description fetches information on multiple orders made by the user
2015
+ * @see https://www.lbank.com/en-US/docs/index.html#query-all-orders
2016
+ * @param {string} symbol unified market symbol of the market orders were made in
2017
+ * @param {int} [since] the earliest time in ms to fetch orders for
2018
+ * @param {int} [limit] the maximum number of order structures to retrieve
2019
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2020
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2021
+ */
2022
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2023
+ // default query is for canceled and completely filled orders
2024
+ // does not return open orders unless specified explicitly
2025
+ if (symbol === undefined) {
2026
+ throw new ArgumentsRequired(this.id + ' fetchOrders() requires a symbol argument');
2027
+ }
2028
+ await this.loadMarkets();
2029
+ const market = this.market(symbol);
2030
+ if (limit === undefined) {
2031
+ limit = 100;
2032
+ }
2033
+ const request = {
2034
+ 'symbol': market['id'],
2035
+ 'current_page': 1,
2036
+ 'page_length': limit,
2037
+ // 'status' -1: Cancelled, 0: Unfilled, 1: Partially filled, 2: Completely filled, 3: Partially filled and cancelled, 4: Cancellation is being processed
2038
+ };
2039
+ const response = await this.spotPrivatePostSupplementOrdersInfoHistory(this.extend(request, params));
2040
+ //
2041
+ // {
2042
+ // "result":true,
2043
+ // "data":{
2044
+ // "total":1,
2045
+ // "page_length":100,
2046
+ // "orders":[
2047
+ // {
2048
+ // "cummulativeQuoteQty":0,
2049
+ // "symbol":"doge_usdt",
2050
+ // "executedQty":0,
2051
+ // "orderId":"2cadc7cc-b5f6-486b-a5b4-d6ac49a9c186",
2052
+ // "origQty":100,
2053
+ // "price":0.05,
2054
+ // "origQuoteOrderQty":5,
2055
+ // "updateTime":1648501384000,
2056
+ // "time":1648501363889,
2057
+ // "type":"buy",
2058
+ // "status":-1
2059
+ // }, ...
2060
+ // ],
2061
+ // "current_page":1
2062
+ // },
2063
+ // "error_code":0,
2064
+ // "ts":1648505706348
2065
+ // }
2066
+ //
2067
+ const result = this.safeValue(response, 'data', {});
2068
+ const orders = this.safeList(result, 'orders', []);
2069
+ return this.parseOrders(orders, market, since, limit);
2070
+ }
2071
+ /**
2072
+ * @method
2073
+ * @name lbank#fetchOpenOrders
2074
+ * @description fetch all unfilled currently open orders
2075
+ * @see https://www.lbank.com/en-US/docs/index.html#current-pending-order
2076
+ * @param {string} symbol unified market symbol
2077
+ * @param {int} [since] the earliest time in ms to fetch open orders for
2078
+ * @param {int} [limit] the maximum number of open order structures to retrieve
2079
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2080
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2081
+ */
2082
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2083
+ if (symbol === undefined) {
2084
+ throw new ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
2085
+ }
2086
+ await this.loadMarkets();
2087
+ const market = this.market(symbol);
2088
+ if (limit === undefined) {
2089
+ limit = 100;
2090
+ }
2091
+ const request = {
2092
+ 'symbol': market['id'],
2093
+ 'current_page': 1,
2094
+ 'page_length': limit,
2095
+ };
2096
+ const response = await this.spotPrivatePostSupplementOrdersInfoNoDeal(this.extend(request, params));
2097
+ //
2098
+ // {
2099
+ // "result":true,
2100
+ // "data":{
2101
+ // "total":1,
2102
+ // "page_length":100,
2103
+ // "orders":[
2104
+ // {
2105
+ // "cummulativeQuoteQty":0,
2106
+ // "symbol":"doge_usdt",
2107
+ // "executedQty":0,
2108
+ // "orderId":"73878edf-008d-4e4c-8041-df1f1b2cd8bb",
2109
+ // "origQty":100,
2110
+ // "price":0.05,
2111
+ // "origQuoteOrderQty":5,
2112
+ // "updateTime":1648501762000,
2113
+ // "time":1648501762353,
2114
+ // "type":"buy",
2115
+ // "status":0
2116
+ // }, ...
2117
+ // ],
2118
+ // "current_page":1
2119
+ // },
2120
+ // "error_code":0,
2121
+ // "ts":1648506110196
2122
+ // }
2123
+ //
2124
+ const result = this.safeValue(response, 'data', {});
2125
+ const orders = this.safeList(result, 'orders', []);
2126
+ return this.parseOrders(orders, market, since, limit);
2127
+ }
2128
+ /**
2129
+ * @method
2130
+ * @name lbank#cancelOrder
2131
+ * @description cancels an open order
2132
+ * @see https://www.lbank.com/en-US/docs/index.html#cancel-order-new
2133
+ * @param {string} id order id
2134
+ * @param {string} symbol unified symbol of the market the order was made in
2135
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2136
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2137
+ */
2138
+ async cancelOrder(id, symbol = undefined, params = {}) {
2139
+ if (symbol === undefined) {
2140
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
2141
+ }
2142
+ await this.loadMarkets();
2143
+ const clientOrderId = this.safeString2(params, 'origClientOrderId', 'clientOrderId');
2144
+ params = this.omit(params, ['origClientOrderId', 'clientOrderId']);
2145
+ const market = this.market(symbol);
2146
+ const request = {
2147
+ 'symbol': market['id'],
2148
+ 'orderId': id,
2149
+ };
2150
+ if (clientOrderId !== undefined) {
2151
+ request['origClientOrderId'] = clientOrderId;
2152
+ }
2153
+ const response = await this.spotPrivatePostSupplementCancelOrder(this.extend(request, params));
2154
+ //
2155
+ // {
2156
+ // "result":true,
2157
+ // "data":{
2158
+ // "executedQty":0.0,
2159
+ // "price":0.05,
2160
+ // "origQty":100.0,
2161
+ // "tradeType":"buy",
2162
+ // "status":0
2163
+ // },
2164
+ // "error_code":0,
2165
+ // "ts":1648501286196
2166
+ // }
2167
+ const data = this.safeDict(response, 'data', {});
2168
+ return this.parseOrder(data);
2169
+ }
2170
+ /**
2171
+ * @method
2172
+ * @name lbank#cancelAllOrders
2173
+ * @description cancel all open orders in a market
2174
+ * @see https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2175
+ * @param {string} symbol unified market symbol of the market to cancel orders in
2176
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2177
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2178
+ */
2179
+ async cancelAllOrders(symbol = undefined, params = {}) {
2180
+ if (symbol === undefined) {
2181
+ throw new ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol argument');
2182
+ }
2183
+ await this.loadMarkets();
2184
+ const market = this.market(symbol);
2185
+ const request = {
2186
+ 'symbol': market['id'],
2187
+ };
2188
+ const response = await this.spotPrivatePostSupplementCancelOrderBySymbol(this.extend(request, params));
2189
+ //
2190
+ // {
2191
+ // "result":"true",
2192
+ // "data":[
2193
+ // {
2194
+ // "executedQty":0.00000000000000000000,
2195
+ // "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
2196
+ // "price":0.05000000000000000000,
2197
+ // "origQty":100.00000000000000000000,
2198
+ // "tradeType":"buy",
2199
+ // "status":0
2200
+ // },
2201
+ // ],
2202
+ // "error_code":0,
2203
+ // "ts":1648506641469
2204
+ // }
2205
+ //
2206
+ const data = this.safeList(response, 'data', []);
2207
+ return this.parseOrders(data);
2208
+ }
2209
+ getNetworkCodeForCurrency(currencyCode, params) {
2210
+ const defaultNetworks = this.safeValue(this.options, 'defaultNetworks');
2211
+ const defaultNetwork = this.safeStringUpper(defaultNetworks, currencyCode);
2212
+ const networks = this.safeValue(this.options, 'networks', {});
2213
+ let network = this.safeStringUpper(params, 'network', defaultNetwork); // this line allows the user to specify either ERC20 or ETH
2214
+ network = this.safeString(networks, network, network); // handle ERC20>ETH alias
2215
+ return network;
2216
+ }
2217
+ /**
2218
+ * @method
2219
+ * @name lbank#fetchDepositAddress
2220
+ * @description fetch the deposit address for a currency associated with this account
2221
+ * @see https://www.lbank.com/en-US/docs/index.html#get-deposit-address
2222
+ * @see https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2223
+ * @param {string} code unified currency code
2224
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2225
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2226
+ */
2227
+ async fetchDepositAddress(code, params = {}) {
2228
+ await this.loadMarkets();
2229
+ const options = this.safeValue(this.options, 'fetchDepositAddress', {});
2230
+ const defaultMethod = this.safeString(options, 'method', 'fetchDepositAddressDefault');
2231
+ const method = this.safeString(params, 'method', defaultMethod);
2232
+ params = this.omit(params, 'method');
2233
+ let response = undefined;
2234
+ if (method === 'fetchDepositAddressSupplement') {
2235
+ response = await this.fetchDepositAddressSupplement(code, params);
2236
+ }
2237
+ else {
2238
+ response = await this.fetchDepositAddressDefault(code, params);
2239
+ }
2240
+ return response;
2241
+ }
2242
+ async fetchDepositAddressDefault(code, params = {}) {
2243
+ await this.loadMarkets();
2244
+ const currency = this.currency(code);
2245
+ const request = {
2246
+ 'assetCode': currency['id'],
2247
+ };
2248
+ const network = this.getNetworkCodeForCurrency(code, params);
2249
+ if (network !== undefined) {
2250
+ request['netWork'] = network; // ... yes, really lol
2251
+ params = this.omit(params, 'network');
2252
+ }
2253
+ const response = await this.spotPrivatePostGetDepositAddress(this.extend(request, params));
2254
+ //
2255
+ // {
2256
+ // "result":true,
2257
+ // "data":{
2258
+ // "assetCode":"usdt",
2259
+ // "address":"0xc85689d37ca650bf2f2161364cdedee21eb6ca53",
2260
+ // "memo":null,
2261
+ // "netWork":"bep20(bsc)"
2262
+ // },
2263
+ // "error_code":0,
2264
+ // "ts":1648075865103
2265
+ // }
2266
+ //
2267
+ const result = this.safeValue(response, 'data');
2268
+ const address = this.safeString(result, 'address');
2269
+ const tag = this.safeString(result, 'memo');
2270
+ return {
2271
+ 'info': response,
2272
+ 'currency': code,
2273
+ 'network': this.networkIdToCode(this.safeString(result, 'netWork')),
2274
+ 'address': address,
2275
+ 'tag': tag,
2276
+ };
2277
+ }
2278
+ async fetchDepositAddressSupplement(code, params = {}) {
2279
+ // returns the address for whatever the default network is...
2280
+ await this.loadMarkets();
2281
+ const currency = this.currency(code);
2282
+ const request = {
2283
+ 'coin': currency['id'],
2284
+ };
2285
+ const networks = this.safeValue(this.options, 'networks');
2286
+ let network = this.safeStringUpper(params, 'network');
2287
+ network = this.safeString(networks, network, network);
2288
+ if (network !== undefined) {
2289
+ request['networkName'] = network;
2290
+ params = this.omit(params, 'network');
2291
+ }
2292
+ const response = await this.spotPrivatePostSupplementGetDepositAddress(this.extend(request, params));
2293
+ //
2294
+ // {
2295
+ // "result":true,
2296
+ // "data":{
2297
+ // "address":"TDxtabCC8iQwaxUUrPcE4WL2jArGAfvQ5A",
2298
+ // "memo":null,
2299
+ // "coin":"usdt"
2300
+ // },
2301
+ // "error_code":0,
2302
+ // "ts":1648073818880
2303
+ // }
2304
+ //
2305
+ const result = this.safeValue(response, 'data');
2306
+ const address = this.safeString(result, 'address');
2307
+ const tag = this.safeString(result, 'memo');
2308
+ return {
2309
+ 'info': response,
2310
+ 'currency': code,
2311
+ 'network': undefined,
2312
+ 'address': address,
2313
+ 'tag': tag,
2314
+ };
2315
+ }
2316
+ /**
2317
+ * @method
2318
+ * @name lbank#withdraw
2319
+ * @description make a withdrawal
2320
+ * @see https://www.lbank.com/en-US/docs/index.html#withdrawal
2321
+ * @param {string} code unified currency code
2322
+ * @param {float} amount the amount to withdraw
2323
+ * @param {string} address the address to withdraw to
2324
+ * @param {string} tag
2325
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2326
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2327
+ */
2328
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2329
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2330
+ this.checkAddress(address);
2331
+ await this.loadMarkets();
2332
+ const fee = this.safeString(params, 'fee');
2333
+ params = this.omit(params, 'fee');
2334
+ // The relevant coin network fee can be found by calling fetchDepositWithdrawFees (), note: if no network param is supplied then the default network will be used, this can also be found in fetchDepositWithdrawFees ().
2335
+ this.checkRequiredArgument('withdraw', fee, 'fee');
2336
+ const currency = this.currency(code);
2337
+ const request = {
2338
+ 'address': address,
2339
+ 'coin': currency['id'],
2340
+ 'amount': amount,
2341
+ 'fee': fee, // the correct coin-network fee must be supplied, which can be found by calling fetchDepositWithdrawFees (private)
2342
+ // 'networkName': defaults to the defaultNetwork of the coin which can be found in the /supplement/user_info endpoint
2343
+ // 'memo': memo: memo word of bts and dct
2344
+ // 'mark': Withdrawal Notes
2345
+ // 'name': Remarks of the address. After filling in this parameter, it will be added to the withdrawal address book of the currency.
2346
+ // 'withdrawOrderId': withdrawOrderId
2347
+ // 'type': type=1 is for intra-site transfer
2348
+ };
2349
+ if (tag !== undefined) {
2350
+ request['memo'] = tag;
2351
+ }
2352
+ const network = this.safeStringUpper2(params, 'network', 'networkName');
2353
+ params = this.omit(params, ['network', 'networkName']);
2354
+ const networks = this.safeValue(this.options, 'networks');
2355
+ const networkId = this.safeString(networks, network, network);
2356
+ if (networkId !== undefined) {
2357
+ request['networkName'] = networkId;
2358
+ }
2359
+ const response = await this.spotPrivatePostSupplementWithdraw(this.extend(request, params));
2360
+ //
2361
+ // {
2362
+ // "result":true,
2363
+ // "data": {
2364
+ // "fee":10.00000000000000000000,
2365
+ // "withdrawId":1900376
2366
+ // },
2367
+ // "error_code":0,
2368
+ // "ts":1648992501414
2369
+ // }
2370
+ //
2371
+ const result = this.safeValue(response, 'data', {});
2372
+ return {
2373
+ 'info': result,
2374
+ 'id': this.safeString(result, 'withdrawId'),
2375
+ };
2376
+ }
2377
+ parseTransactionStatus(status, type) {
2378
+ const statuses = {
2379
+ 'deposit': {
2380
+ '1': 'pending',
2381
+ '2': 'ok',
2382
+ '3': 'failed',
2383
+ '4': 'canceled',
2384
+ '5': 'transfer',
2385
+ },
2386
+ 'withdrawal': {
2387
+ '1': 'pending',
2388
+ '2': 'canceled',
2389
+ '3': 'failed',
2390
+ '4': 'ok',
2391
+ },
2392
+ };
2393
+ return this.safeString(this.safeValue(statuses, type, {}), status, status);
2394
+ }
2395
+ parseTransaction(transaction, currency = undefined) {
2396
+ //
2397
+ // fetchDeposits (private)
2398
+ //
2399
+ // {
2400
+ // "insertTime":1649012310000,
2401
+ // "amount":9.00000000000000000000,
2402
+ // "address":"TYASr5UV6HEcXatwdFQfmLVUqQQQMUxHLS",
2403
+ // "networkName":"trc20",
2404
+ // "txId":"081e4e9351dd0274922168da5f2d14ea6c495b1c3b440244f4a6dd9fe196bf2b",
2405
+ // "coin":"usdt",
2406
+ // "status":"2"
2407
+ // }
2408
+ //
2409
+ //
2410
+ // fetchWithdrawals (private)
2411
+ //
2412
+ // {
2413
+ // "amount":2.00000000000000000000,
2414
+ // "address":"TBjrW5JHDyPZjFc5nrRMhRWUDaJmhGhmD6",
2415
+ // "fee":1.00000000000000000000,
2416
+ // "networkName":"trc20",
2417
+ // "coid":"usdt",
2418
+ // "transferType":"数字资产提现",
2419
+ // "txId":"47eeee2763ad49b8817524dacfa7d092fb58f8b0ab7e5d25473314df1a793c3d",
2420
+ // "id":1902194,
2421
+ // "applyTime":1649014002000,
2422
+ // "status":"4"
2423
+ // }
2424
+ //
2425
+ const id = this.safeString(transaction, 'id');
2426
+ let type = undefined;
2427
+ if (id === undefined) {
2428
+ type = 'deposit';
2429
+ }
2430
+ else {
2431
+ type = 'withdrawal';
2432
+ }
2433
+ const txid = this.safeString(transaction, 'txId');
2434
+ const timestamp = this.safeInteger2(transaction, 'insertTime', 'applyTime');
2435
+ const address = this.safeString(transaction, 'address');
2436
+ let addressFrom = undefined;
2437
+ let addressTo = undefined;
2438
+ if (type === 'deposit') {
2439
+ addressFrom = address;
2440
+ }
2441
+ else {
2442
+ addressTo = address;
2443
+ }
2444
+ const amount = this.safeNumber(transaction, 'amount');
2445
+ const currencyId = this.safeString2(transaction, 'coin', 'coid');
2446
+ const code = this.safeCurrencyCode(currencyId, currency);
2447
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'status'), type);
2448
+ let fee = undefined;
2449
+ const feeCost = this.safeNumber(transaction, 'fee');
2450
+ if (feeCost !== undefined) {
2451
+ fee = {
2452
+ 'cost': feeCost,
2453
+ 'currency': code,
2454
+ };
2455
+ }
2456
+ return {
2457
+ 'info': transaction,
2458
+ 'id': id,
2459
+ 'txid': txid,
2460
+ 'timestamp': timestamp,
2461
+ 'datetime': this.iso8601(timestamp),
2462
+ 'network': this.networkIdToCode(this.safeString(transaction, 'networkName')),
2463
+ 'address': address,
2464
+ 'addressTo': addressTo,
2465
+ 'addressFrom': addressFrom,
2466
+ 'tag': undefined,
2467
+ 'tagTo': undefined,
2468
+ 'tagFrom': undefined,
2469
+ 'type': type,
2470
+ 'amount': amount,
2471
+ 'currency': code,
2472
+ 'status': status,
2473
+ 'updated': undefined,
2474
+ 'comment': undefined,
2475
+ 'internal': (status === 'transfer'),
2476
+ 'fee': fee,
2477
+ };
2478
+ }
2479
+ /**
2480
+ * @method
2481
+ * @name lbank#fetchDeposits
2482
+ * @description fetch all deposits made to an account
2483
+ * @see https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2484
+ * @param {string} code unified currency code
2485
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2486
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2487
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2488
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2489
+ */
2490
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2491
+ await this.loadMarkets();
2492
+ const request = {
2493
+ // 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"), ("5", "Transfer")
2494
+ // 'endTime': end time, timestamp in milliseconds, default now
2495
+ };
2496
+ let currency = undefined;
2497
+ if (code !== undefined) {
2498
+ currency = this.currency(code);
2499
+ request['coin'] = currency['id'];
2500
+ }
2501
+ if (since !== undefined) {
2502
+ request['startTime'] = since;
2503
+ }
2504
+ const response = await this.spotPrivatePostSupplementDepositHistory(this.extend(request, params));
2505
+ //
2506
+ // {
2507
+ // "result":true,
2508
+ // "data": {
2509
+ // "total":1,
2510
+ // "depositOrders": [
2511
+ // {
2512
+ // "insertTime":1649012310000,
2513
+ // "amount":9.00000000000000000000,
2514
+ // "address":"TYASr5UV6HEcXatwdFQfmLVUqQQQMUxHLS",
2515
+ // "networkName":"trc20",
2516
+ // "txId":"081e4e9351dd0274922168da5f2d14ea6c495b1c3b440244f4a6dd9fe196bf2b",
2517
+ // "coin":"usdt",
2518
+ // "status":"2"
2519
+ // },
2520
+ // ],
2521
+ // "page_length":20,
2522
+ // "current_page":1
2523
+ // },
2524
+ // "error_code":0,
2525
+ // "ts":1649719721758
2526
+ // }
2527
+ //
2528
+ const data = this.safeValue(response, 'data', {});
2529
+ const deposits = this.safeList(data, 'depositOrders', []);
2530
+ return this.parseTransactions(deposits, currency, since, limit);
2531
+ }
2532
+ /**
2533
+ * @method
2534
+ * @name lbank#fetchWithdrawals
2535
+ * @description fetch all withdrawals made from an account
2536
+ * @see https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2537
+ * @param {string} code unified currency code
2538
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2539
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2540
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2541
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2542
+ */
2543
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2544
+ await this.loadMarkets();
2545
+ const request = {
2546
+ // 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"), ("5", "Transfer")
2547
+ // 'endTime': end time, timestamp in milliseconds, default now
2548
+ // 'withdrawOrderId': Custom withdrawal id
2549
+ };
2550
+ let currency = undefined;
2551
+ if (code !== undefined) {
2552
+ currency = this.currency(code);
2553
+ request['coin'] = currency['id'];
2554
+ }
2555
+ if (since !== undefined) {
2556
+ request['startTime'] = since;
2557
+ }
2558
+ const response = await this.spotPrivatePostSupplementWithdraws(this.extend(request, params));
2559
+ //
2560
+ // {
2561
+ // "result":true,
2562
+ // "data": {
2563
+ // "total":1,
2564
+ // "withdraws": [
2565
+ // {
2566
+ // "amount":2.00000000000000000000,
2567
+ // "address":"TBjrW5JHDyPZjFc5nrRMhRWUDaJmhGhmD6",
2568
+ // "fee":1.00000000000000000000,
2569
+ // "networkName":"trc20",
2570
+ // "coid":"usdt",
2571
+ // "transferType":"数字资产提现",
2572
+ // "txId":"47eeee2763ad49b8817524dacfa7d092fb58f8b0ab7e5d25473314df1a793c3d",
2573
+ // "id":1902194,
2574
+ // "applyTime":1649014002000,
2575
+ // "status":"4"
2576
+ // },
2577
+ // ],
2578
+ // "page_length":20,
2579
+ // "current_page":1
2580
+ // },
2581
+ // "error_code":0,
2582
+ // "ts":1649720362362
2583
+ // }
2584
+ //
2585
+ const data = this.safeValue(response, 'data', {});
2586
+ const withdraws = this.safeList(data, 'withdraws', []);
2587
+ return this.parseTransactions(withdraws, currency, since, limit);
2588
+ }
2589
+ /**
2590
+ * @method
2591
+ * @name lbank#fetchTransactionFees
2592
+ * @deprecated
2593
+ * @description please use fetchDepositWithdrawFees instead
2594
+ * @param {string[]|undefined} codes not used by lbank fetchTransactionFees ()
2595
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2596
+ * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
2597
+ */
2598
+ async fetchTransactionFees(codes = undefined, params = {}) {
2599
+ // private only returns information for currencies with non-zero balance
2600
+ await this.loadMarkets();
2601
+ const isAuthorized = this.checkRequiredCredentials(false);
2602
+ let result = undefined;
2603
+ if (isAuthorized === true) {
2604
+ const options = this.safeValue(this.options, 'fetchTransactionFees', {});
2605
+ const defaultMethod = this.safeString(options, 'method', 'fetchPrivateTransactionFees');
2606
+ const method = this.safeString(params, 'method', defaultMethod);
2607
+ params = this.omit(params, 'method');
2608
+ if (method === 'fetchPublicTransactionFees') {
2609
+ result = await this.fetchPublicTransactionFees(params);
2610
+ }
2611
+ else {
2612
+ result = await this.fetchPrivateTransactionFees(params);
2613
+ }
2614
+ }
2615
+ else {
2616
+ result = await this.fetchPublicTransactionFees(params);
2617
+ }
2618
+ return result;
2619
+ }
2620
+ async fetchPrivateTransactionFees(params = {}) {
2621
+ // complete response
2622
+ // incl. for coins which undefined in public method
2623
+ await this.loadMarkets();
2624
+ const response = await this.spotPrivatePostSupplementUserInfo();
2625
+ //
2626
+ // {
2627
+ // "result": "true",
2628
+ // "data": [
2629
+ // {
2630
+ // "usableAmt": "14.36",
2631
+ // "assetAmt": "14.36",
2632
+ // "networkList": [
2633
+ // {
2634
+ // "isDefault": false,
2635
+ // "withdrawFeeRate": "",
2636
+ // "name": "erc20",
2637
+ // "withdrawMin": 30,
2638
+ // "minLimit": 0.0001,
2639
+ // "minDeposit": 20,
2640
+ // "feeAssetCode": "usdt",
2641
+ // "withdrawFee": "30",
2642
+ // "type": 1,
2643
+ // "coin": "usdt",
2644
+ // "network": "eth"
2645
+ // },
2646
+ // ...
2647
+ // ],
2648
+ // "freezeAmt": "0",
2649
+ // "coin": "ada"
2650
+ // }
2651
+ // ],
2652
+ // "code": 0
2653
+ // }
2654
+ //
2655
+ const result = this.safeValue(response, 'data', []);
2656
+ const withdrawFees = {};
2657
+ for (let i = 0; i < result.length; i++) {
2658
+ const entry = result[i];
2659
+ const currencyId = this.safeString(entry, 'coin');
2660
+ const code = this.safeCurrencyCode(currencyId);
2661
+ const networkList = this.safeValue(entry, 'networkList', []);
2662
+ withdrawFees[code] = {};
2663
+ for (let j = 0; j < networkList.length; j++) {
2664
+ const networkEntry = networkList[j];
2665
+ const fee = this.safeNumber(networkEntry, 'withdrawFee');
2666
+ if (fee !== undefined) {
2667
+ const networkCode = this.networkIdToCode(this.safeString(networkEntry, 'name'));
2668
+ withdrawFees[code][networkCode] = fee;
2669
+ }
2670
+ }
2671
+ }
2672
+ return {
2673
+ 'withdraw': withdrawFees,
2674
+ 'deposit': {},
2675
+ 'info': response,
2676
+ };
2677
+ }
2678
+ async fetchPublicTransactionFees(params = {}) {
2679
+ // extremely incomplete response
2680
+ // vast majority fees undefined
2681
+ await this.loadMarkets();
2682
+ const code = this.safeString2(params, 'coin', 'assetCode');
2683
+ params = this.omit(params, ['coin', 'assetCode']);
2684
+ const request = {};
2685
+ if (code !== undefined) {
2686
+ const currency = this.currency(code);
2687
+ request['assetCode'] = currency['id'];
2688
+ }
2689
+ const response = await this.spotPublicGetWithdrawConfigs(this.extend(request, params));
2690
+ //
2691
+ // {
2692
+ // "result": "true",
2693
+ // "data": [
2694
+ // {
2695
+ // "amountScale": "4",
2696
+ // "chain": "heco",
2697
+ // "assetCode": "lbk",
2698
+ // "min": "200",
2699
+ // "transferAmtScale": "4",
2700
+ // "canWithDraw": true,
2701
+ // "fee": "100",
2702
+ // "minTransfer": "0.0001",
2703
+ // "type": "1"
2704
+ // },
2705
+ // ...
2706
+ // ],
2707
+ // "error_code": "0",
2708
+ // "ts": "1663364435973"
2709
+ // }
2710
+ //
2711
+ const result = this.safeValue(response, 'data', []);
2712
+ const withdrawFees = {};
2713
+ for (let i = 0; i < result.length; i++) {
2714
+ const item = result[i];
2715
+ const canWithdraw = this.safeValue(item, 'canWithDraw');
2716
+ if (canWithdraw === 'true') {
2717
+ const currencyId = this.safeString(item, 'assetCode');
2718
+ const codeInner = this.safeCurrencyCode(currencyId);
2719
+ let network = this.networkIdToCode(this.safeString(item, 'chain'));
2720
+ if (network === undefined) {
2721
+ network = codeInner;
2722
+ }
2723
+ const fee = this.safeString(item, 'fee');
2724
+ if (withdrawFees[codeInner] === undefined) {
2725
+ withdrawFees[codeInner] = {};
2726
+ }
2727
+ withdrawFees[codeInner][network] = this.parseNumber(fee);
2728
+ }
2729
+ }
2730
+ return {
2731
+ 'withdraw': withdrawFees,
2732
+ 'deposit': {},
2733
+ 'info': response,
2734
+ };
2735
+ }
2736
+ /**
2737
+ * @method
2738
+ * @name lbank#fetchDepositWithdrawFees
2739
+ * @description when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying this.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
2740
+ * @see https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2741
+ * @see https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2742
+ * @param {string[]} [codes] array of unified currency codes
2743
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2744
+ * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
2745
+ */
2746
+ async fetchDepositWithdrawFees(codes = undefined, params = {}) {
2747
+ await this.loadMarkets();
2748
+ const isAuthorized = this.checkRequiredCredentials(false);
2749
+ let response = undefined;
2750
+ if (isAuthorized === true) {
2751
+ const options = this.safeValue(this.options, 'fetchDepositWithdrawFees', {});
2752
+ const defaultMethod = this.safeString(options, 'method', 'fetchPrivateDepositWithdrawFees');
2753
+ const method = this.safeString(params, 'method', defaultMethod);
2754
+ params = this.omit(params, 'method');
2755
+ if (method === 'fetchPublicDepositWithdrawFees') {
2756
+ response = await this.fetchPublicDepositWithdrawFees(codes, params);
2757
+ }
2758
+ else {
2759
+ response = await this.fetchPrivateDepositWithdrawFees(codes, params);
2760
+ }
2761
+ }
2762
+ else {
2763
+ response = await this.fetchPublicDepositWithdrawFees(codes, params);
2764
+ }
2765
+ return response;
2766
+ }
2767
+ async fetchPrivateDepositWithdrawFees(codes = undefined, params = {}) {
2768
+ // complete response
2769
+ // incl. for coins which undefined in public method
2770
+ await this.loadMarkets();
2771
+ const response = await this.spotPrivatePostSupplementUserInfo(params);
2772
+ //
2773
+ // {
2774
+ // "result": "true",
2775
+ // "data": [
2776
+ // {
2777
+ // "usableAmt": "14.36",
2778
+ // "assetAmt": "14.36",
2779
+ // "networkList": [
2780
+ // {
2781
+ // "isDefault": false,
2782
+ // "withdrawFeeRate": "",
2783
+ // "name": "erc20",
2784
+ // "withdrawMin": 30,
2785
+ // "minLimit": 0.0001,
2786
+ // "minDeposit": 20,
2787
+ // "feeAssetCode": "usdt",
2788
+ // "withdrawFee": "30",
2789
+ // "type": 1,
2790
+ // "coin": "usdt",
2791
+ // "network": "eth"
2792
+ // },
2793
+ // ...
2794
+ // ],
2795
+ // "freezeAmt": "0",
2796
+ // "coin": "ada"
2797
+ // }
2798
+ // ],
2799
+ // "code": 0
2800
+ // }
2801
+ //
2802
+ const data = this.safeList(response, 'data', []);
2803
+ return this.parseDepositWithdrawFees(data, codes, 'coin');
2804
+ }
2805
+ async fetchPublicDepositWithdrawFees(codes = undefined, params = {}) {
2806
+ // extremely incomplete response
2807
+ // vast majority fees undefined
2808
+ await this.loadMarkets();
2809
+ const request = {};
2810
+ const response = await this.spotPublicGetWithdrawConfigs(this.extend(request, params));
2811
+ //
2812
+ // {
2813
+ // "result": "true",
2814
+ // "data": [
2815
+ // {
2816
+ // "amountScale": "4",
2817
+ // "chain": "heco",
2818
+ // "assetCode": "lbk",
2819
+ // "min": "200",
2820
+ // "transferAmtScale": "4",
2821
+ // "canWithDraw": true,
2822
+ // "fee": "100",
2823
+ // "minTransfer": "0.0001",
2824
+ // "type": "1"
2825
+ // },
2826
+ // ...
2827
+ // ],
2828
+ // "error_code": "0",
2829
+ // "ts": "1663364435973"
2830
+ // }
2831
+ //
2832
+ const data = this.safeValue(response, 'data', []);
2833
+ return this.parsePublicDepositWithdrawFees(data, codes);
2834
+ }
2835
+ parsePublicDepositWithdrawFees(response, codes = undefined) {
2836
+ //
2837
+ // [
2838
+ // {
2839
+ // "amountScale": "4",
2840
+ // "chain": "heco",
2841
+ // "assetCode": "lbk",
2842
+ // "min": "200",
2843
+ // "transferAmtScale": "4",
2844
+ // "canWithDraw": true,
2845
+ // "fee": "100",
2846
+ // "minTransfer": "0.0001",
2847
+ // "type": "1"
2848
+ // },
2849
+ // ...
2850
+ // ]
2851
+ //
2852
+ const result = {};
2853
+ for (let i = 0; i < response.length; i++) {
2854
+ const fee = response[i];
2855
+ const canWithdraw = this.safeValue(fee, 'canWithDraw');
2856
+ if (canWithdraw === true) {
2857
+ const currencyId = this.safeString(fee, 'assetCode');
2858
+ const code = this.safeCurrencyCode(currencyId);
2859
+ if (codes === undefined || this.inArray(code, codes)) {
2860
+ const withdrawFee = this.safeNumber(fee, 'fee');
2861
+ if (withdrawFee !== undefined) {
2862
+ const resultValue = this.safeValue(result, code);
2863
+ if (resultValue === undefined) {
2864
+ result[code] = this.depositWithdrawFee([fee]);
2865
+ }
2866
+ else {
2867
+ const resultCodeInfo = result[code]['info'];
2868
+ resultCodeInfo.push(fee);
2869
+ }
2870
+ const networkCode = this.networkIdToCode(this.safeString(fee, 'chain'));
2871
+ if (networkCode !== undefined) {
2872
+ result[code]['networks'][networkCode] = {
2873
+ 'withdraw': {
2874
+ 'fee': withdrawFee,
2875
+ 'percentage': undefined,
2876
+ },
2877
+ 'deposit': {
2878
+ 'fee': undefined,
2879
+ 'percentage': undefined,
2880
+ },
2881
+ };
2882
+ }
2883
+ else {
2884
+ result[code]['withdraw'] = {
2885
+ 'fee': withdrawFee,
2886
+ 'percentage': undefined,
2887
+ };
2888
+ }
2889
+ }
2890
+ }
2891
+ }
2892
+ }
2893
+ return result;
2894
+ }
2895
+ parseDepositWithdrawFee(fee, currency = undefined) {
2896
+ //
2897
+ // * only used for fetchPrivateDepositWithdrawFees
2898
+ //
2899
+ // {
2900
+ // "usableAmt": "14.36",
2901
+ // "assetAmt": "14.36",
2902
+ // "networkList": [
2903
+ // {
2904
+ // "isDefault": false,
2905
+ // "withdrawFeeRate": "",
2906
+ // "name": "erc20",
2907
+ // "withdrawMin": 30,
2908
+ // "minLimit": 0.0001,
2909
+ // "minDeposit": 20,
2910
+ // "feeAssetCode": "usdt",
2911
+ // "withdrawFee": "30",
2912
+ // "type": 1,
2913
+ // "coin": "usdt",
2914
+ // "network": "eth"
2915
+ // },
2916
+ // ...
2917
+ // ],
2918
+ // "freezeAmt": "0",
2919
+ // "coin": "ada"
2920
+ // }
2921
+ //
2922
+ const result = this.depositWithdrawFee(fee);
2923
+ const networkList = this.safeValue(fee, 'networkList', []);
2924
+ for (let j = 0; j < networkList.length; j++) {
2925
+ const networkEntry = networkList[j];
2926
+ const networkCode = this.networkIdToCode(this.safeString(networkEntry, 'name'));
2927
+ const withdrawFee = this.safeNumber(networkEntry, 'withdrawFee');
2928
+ const isDefault = this.safeValue(networkEntry, 'isDefault');
2929
+ if (withdrawFee !== undefined) {
2930
+ if (isDefault) {
2931
+ result['withdraw'] = {
2932
+ 'fee': withdrawFee,
2933
+ 'percentage': undefined,
2934
+ };
2935
+ }
2936
+ result['networks'][networkCode] = {
2937
+ 'withdraw': {
2938
+ 'fee': withdrawFee,
2939
+ 'percentage': undefined,
2940
+ },
2941
+ 'deposit': {
2942
+ 'fee': undefined,
2943
+ 'percentage': undefined,
2944
+ },
2945
+ };
2946
+ }
2947
+ }
2948
+ return result;
2949
+ }
2950
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2951
+ let query = this.omit(params, this.extractParams(path));
2952
+ let url = this.urls['api']['rest'] + '/' + this.version + '/' + this.implodeParams(path, params);
2953
+ // Every spot endpoint ends with ".do"
2954
+ if (api[0] === 'spot') {
2955
+ url += '.do';
2956
+ }
2957
+ else {
2958
+ url = this.urls['api']['contract'] + '/' + this.implodeParams(path, params);
2959
+ }
2960
+ if (api[1] === 'public') {
2961
+ if (Object.keys(query).length) {
2962
+ url += '?' + this.urlencode(this.keysort(query));
2963
+ }
2964
+ }
2965
+ else {
2966
+ this.checkRequiredCredentials();
2967
+ const timestamp = this.milliseconds().toString();
2968
+ const echostr = this.uuid22() + this.uuid16();
2969
+ query = this.extend({
2970
+ 'api_key': this.apiKey,
2971
+ }, query);
2972
+ let signatureMethod = undefined;
2973
+ if (this.secret.length > 32) {
2974
+ signatureMethod = 'RSA';
2975
+ }
2976
+ else {
2977
+ signatureMethod = 'HmacSHA256';
2978
+ }
2979
+ const auth = this.rawencode(this.keysort(this.extend({
2980
+ 'echostr': echostr,
2981
+ 'signature_method': signatureMethod,
2982
+ 'timestamp': timestamp,
2983
+ }, query)));
2984
+ const encoded = this.encode(auth);
2985
+ const hash = this.hash(encoded, md5);
2986
+ const uppercaseHash = hash.toUpperCase();
2987
+ let sign = undefined;
2988
+ if (signatureMethod === 'RSA') {
2989
+ const cacheSecretAsPem = this.safeBool(this.options, 'cacheSecretAsPem', true);
2990
+ let pem = undefined;
2991
+ if (cacheSecretAsPem) {
2992
+ pem = this.safeValue(this.options, 'pem');
2993
+ if (pem === undefined) {
2994
+ pem = this.convertSecretToPem(this.encode(this.secret));
2995
+ this.options['pem'] = pem;
2996
+ }
2997
+ }
2998
+ else {
2999
+ pem = this.convertSecretToPem(this.encode(this.secret));
3000
+ }
3001
+ sign = rsa(uppercaseHash, pem, sha256);
3002
+ }
3003
+ else if (signatureMethod === 'HmacSHA256') {
3004
+ sign = this.hmac(this.encode(uppercaseHash), this.encode(this.secret), sha256);
3005
+ }
3006
+ query['sign'] = sign;
3007
+ body = this.urlencode(this.keysort(query));
3008
+ headers = {
3009
+ 'Content-Type': 'application/x-www-form-urlencoded',
3010
+ 'timestamp': timestamp,
3011
+ 'signature_method': signatureMethod,
3012
+ 'echostr': echostr,
3013
+ };
3014
+ }
3015
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
3016
+ }
3017
+ convertSecretToPem(secret) {
3018
+ const lineLength = 64;
3019
+ const secretLength = secret.length - 0;
3020
+ let numLines = this.parseToInt(secretLength / lineLength);
3021
+ numLines = this.sum(numLines, 1);
3022
+ let pem = "-----BEGIN PRIVATE KEY-----\n"; // eslint-disable-line
3023
+ for (let i = 0; i < numLines; i++) {
3024
+ const start = i * lineLength;
3025
+ const end = this.sum(start, lineLength);
3026
+ pem += this.secret.slice(start, end) + "\n"; // eslint-disable-line
3027
+ }
3028
+ return pem + '-----END PRIVATE KEY-----';
3029
+ }
3030
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
3031
+ if (response === undefined) {
3032
+ return undefined;
3033
+ }
3034
+ const success = this.safeValue(response, 'result');
3035
+ if (success === 'false' || !success) {
3036
+ const errorCode = this.safeString(response, 'error_code');
3037
+ const message = this.safeString({
3038
+ '10000': 'Internal error',
3039
+ '10001': 'The required parameters can not be empty',
3040
+ '10002': 'Validation failed',
3041
+ '10003': 'Invalid parameter',
3042
+ '10004': 'Request too frequent',
3043
+ '10005': 'Secret key does not exist',
3044
+ '10006': 'User does not exist',
3045
+ '10007': 'Invalid signature',
3046
+ '10008': 'Invalid Trading Pair',
3047
+ '10009': 'Price and/or Amount are required for limit order',
3048
+ '10010': 'Price and/or Amount must be less than minimum requirement',
3049
+ // '10011': 'Market orders can not be missing the amount of the order',
3050
+ // '10012': 'market sell orders can not be missing orders',
3051
+ '10013': 'The amount is too small',
3052
+ '10014': 'Insufficient amount of money in the account',
3053
+ '10015': 'Invalid order type',
3054
+ '10016': 'Insufficient account balance',
3055
+ '10017': 'Server Error',
3056
+ '10018': 'Page size should be between 1 and 50',
3057
+ '10019': 'Cancel NO more than 3 orders in one request',
3058
+ '10020': 'Volume < 0.001',
3059
+ '10021': 'Price < 0.01',
3060
+ '10022': 'Invalid authorization',
3061
+ '10023': 'Market Order is not supported yet',
3062
+ '10024': 'User cannot trade on this pair',
3063
+ '10025': 'Order has been filled',
3064
+ '10026': 'Order has been cancelld',
3065
+ '10027': 'Order is cancelling',
3066
+ '10028': 'Wrong query time',
3067
+ '10029': 'from is not in the query time',
3068
+ '10030': 'from do not match the transaction type of inqury',
3069
+ '10031': 'echostr length must be valid and length must be from 30 to 40',
3070
+ '10033': 'Failed to create order',
3071
+ '10036': 'customID duplicated',
3072
+ '10100': 'Has no privilege to withdraw',
3073
+ '10101': 'Invalid fee rate to withdraw',
3074
+ '10102': 'Too little to withdraw',
3075
+ '10103': 'Exceed daily limitation of withdraw',
3076
+ '10104': 'Cancel was rejected',
3077
+ '10105': 'Request has been cancelled',
3078
+ '10106': 'None trade time',
3079
+ '10107': 'Start price exception',
3080
+ '10108': 'can not create order',
3081
+ '10109': 'wallet address is not mapping',
3082
+ '10110': 'transfer fee is not mapping',
3083
+ '10111': 'mount > 0',
3084
+ '10112': 'fee is too lower',
3085
+ '10113': 'transfer fee is 0',
3086
+ '10600': 'intercepted by replay attacks filter, check timestamp',
3087
+ '10601': 'Interface closed unavailable',
3088
+ '10701': 'invalid asset code',
3089
+ '10702': 'not allowed deposit',
3090
+ }, errorCode, this.json(response));
3091
+ const ErrorClass = this.safeValue({
3092
+ '10001': BadRequest,
3093
+ '10002': AuthenticationError,
3094
+ '10003': BadRequest,
3095
+ '10004': RateLimitExceeded,
3096
+ '10005': AuthenticationError,
3097
+ '10006': AuthenticationError,
3098
+ '10007': AuthenticationError,
3099
+ '10008': BadSymbol,
3100
+ '10009': InvalidOrder,
3101
+ '10010': InvalidOrder,
3102
+ '10013': InvalidOrder,
3103
+ '10014': InsufficientFunds,
3104
+ '10015': InvalidOrder,
3105
+ '10016': InsufficientFunds,
3106
+ '10017': ExchangeError,
3107
+ '10018': BadRequest,
3108
+ '10019': BadRequest,
3109
+ '10020': BadRequest,
3110
+ '10021': InvalidOrder,
3111
+ '10022': PermissionDenied,
3112
+ '10023': InvalidOrder,
3113
+ '10024': PermissionDenied,
3114
+ '10025': InvalidOrder,
3115
+ '10026': InvalidOrder,
3116
+ '10027': InvalidOrder,
3117
+ '10028': BadRequest,
3118
+ '10029': BadRequest,
3119
+ '10030': BadRequest,
3120
+ '10031': InvalidNonce,
3121
+ '10033': ExchangeError,
3122
+ '10036': DuplicateOrderId,
3123
+ '10100': PermissionDenied,
3124
+ '10101': BadRequest,
3125
+ '10102': InsufficientFunds,
3126
+ '10103': ExchangeError,
3127
+ '10104': ExchangeError,
3128
+ '10105': ExchangeError,
3129
+ '10106': BadRequest,
3130
+ '10107': BadRequest,
3131
+ '10108': ExchangeError,
3132
+ '10109': InvalidAddress,
3133
+ '10110': ExchangeError,
3134
+ '10111': BadRequest,
3135
+ '10112': BadRequest,
3136
+ '10113': BadRequest,
3137
+ '10600': BadRequest,
3138
+ '10601': ExchangeError,
3139
+ '10701': BadSymbol,
3140
+ '10702': PermissionDenied, // 'not allowed deposit',
3141
+ }, errorCode, ExchangeError);
3142
+ throw new ErrorClass(message);
3143
+ }
3144
+ return undefined;
3145
+ }
3146
+ }