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,3211 @@
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/okcoin.js';
9
+ import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, PermissionDenied, NetworkError, InsufficientFunds, InvalidNonce, CancelPending, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, AccountNotEnabled, BadSymbol, RateLimitExceeded, NotSupported } from './base/errors.js';
10
+ import { Precise } from './base/Precise.js';
11
+ import { TICK_SIZE } from './base/functions/number.js';
12
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class okcoin
16
+ * @augments Exchange
17
+ */
18
+ export default class okcoin extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'okcoin',
22
+ 'name': 'OKCoin',
23
+ 'countries': ['CN', 'US'],
24
+ 'version': 'v5',
25
+ // cheapest endpoint is 100 requests per 2 seconds
26
+ // 50 requests per second => 1000 / 50 = 20ms
27
+ 'rateLimit': 20,
28
+ 'pro': true,
29
+ 'has': {
30
+ 'CORS': undefined,
31
+ 'spot': true,
32
+ 'margin': false,
33
+ 'swap': false,
34
+ 'future': true,
35
+ 'option': undefined,
36
+ 'cancelOrder': true,
37
+ 'createMarketBuyOrderWithCost': true,
38
+ 'createMarketOrderWithCost': false,
39
+ 'createMarketSellOrderWithCost': false,
40
+ 'createOrder': true,
41
+ 'createPostOnlyOrder': true,
42
+ 'createReduceOnlyOrder': true,
43
+ 'createStopLimitOrder': true,
44
+ 'createStopMarketOrder': true,
45
+ 'createStopOrder': true,
46
+ 'createTriggerOrder': true,
47
+ 'fetchBalance': true,
48
+ 'fetchBorrowInterest': false,
49
+ 'fetchBorrowRate': false,
50
+ 'fetchBorrowRateHistories': false,
51
+ 'fetchBorrowRateHistory': false,
52
+ 'fetchBorrowRates': false,
53
+ 'fetchBorrowRatesPerSymbol': false,
54
+ 'fetchClosedOrders': true,
55
+ 'fetchCurrencies': true,
56
+ 'fetchDepositAddress': true,
57
+ 'fetchDepositAddresses': false,
58
+ 'fetchDepositAddressesByNetwork': false,
59
+ 'fetchDeposits': true,
60
+ 'fetchFundingHistory': false,
61
+ 'fetchFundingRate': false,
62
+ 'fetchFundingRateHistory': false,
63
+ 'fetchFundingRates': false,
64
+ 'fetchLedger': true,
65
+ 'fetchMarkets': true,
66
+ 'fetchMyTrades': true,
67
+ 'fetchOHLCV': true,
68
+ 'fetchOpenOrders': true,
69
+ 'fetchOrder': true,
70
+ 'fetchOrderBook': true,
71
+ 'fetchOrders': undefined,
72
+ 'fetchOrderTrades': true,
73
+ 'fetchPosition': false,
74
+ 'fetchPositions': false,
75
+ 'fetchTicker': true,
76
+ 'fetchTickers': true,
77
+ 'fetchTime': true,
78
+ 'fetchTrades': true,
79
+ 'fetchTransactions': undefined,
80
+ 'fetchWithdrawals': true,
81
+ 'reduceMargin': false,
82
+ 'repayCrossMargin': false,
83
+ 'repayIsolatedMargin': false,
84
+ 'setMargin': false,
85
+ 'transfer': true,
86
+ 'withdraw': true,
87
+ },
88
+ 'timeframes': {
89
+ '1m': '1m',
90
+ '3m': '3m',
91
+ '5m': '5m',
92
+ '15m': '15m',
93
+ '30m': '30m',
94
+ '1h': '1H',
95
+ '2h': '2H',
96
+ '4h': '4H',
97
+ '6h': '6H',
98
+ '12h': '12H',
99
+ '1d': '1D',
100
+ '1w': '1W',
101
+ '1M': '1M',
102
+ '3M': '3M',
103
+ },
104
+ 'hostname': 'okcoin.com',
105
+ 'urls': {
106
+ 'logo': 'https://user-images.githubusercontent.com/51840849/87295551-102fbf00-c50e-11ea-90a9-462eebba5829.jpg',
107
+ 'api': {
108
+ 'rest': 'https://www.{hostname}',
109
+ },
110
+ 'www': 'https://www.okcoin.com',
111
+ 'doc': 'https://www.okcoin.com/docs/en/',
112
+ 'fees': 'https://www.okcoin.com/coin-fees',
113
+ 'referral': 'https://www.okcoin.com/account/register?flag=activity&channelId=600001513',
114
+ 'test': {
115
+ 'rest': 'https://testnet.okex.com',
116
+ },
117
+ },
118
+ 'api': {
119
+ 'public': {
120
+ 'get': {
121
+ 'market/tickers': 1,
122
+ 'market/ticker': 1,
123
+ 'market/books': 1 / 2,
124
+ 'market/candles': 1 / 2,
125
+ 'market/history-candles': 1 / 2,
126
+ 'market/trades': 1 / 5,
127
+ 'market/history-trades': 2,
128
+ 'market/platform-24-volume': 10,
129
+ 'market/open-oracle': 50,
130
+ 'market/exchange-rate': 20,
131
+ 'public/instruments': 1,
132
+ 'public/time': 2,
133
+ },
134
+ },
135
+ 'private': {
136
+ 'get': {
137
+ // trade
138
+ 'trade/order': 1 / 3,
139
+ 'trade/orders-pending': 1 / 3,
140
+ 'trade/orders-history': 1 / 2,
141
+ 'trade/orders-history-archive': 1 / 2,
142
+ 'trade/fills': 1 / 3,
143
+ 'trade/fills-history': 2.2,
144
+ 'trade/fills-archive': 2,
145
+ 'trade/order-algo': 1,
146
+ 'trade/orders-algo-pending': 1,
147
+ 'trade/orders-algo-history': 1,
148
+ // rfq
149
+ 'otc/rfq/trade': 4,
150
+ 'otc/rfq/history': 4,
151
+ // account
152
+ 'account/balance': 2,
153
+ 'account/bills': 5 / 3,
154
+ 'account/bills-archive': 5 / 3,
155
+ 'account/config': 4,
156
+ 'account/max-size': 4,
157
+ 'account/max-avail-size': 4,
158
+ 'account/trade-fee': 4,
159
+ 'account/max-withdrawal': 4,
160
+ // funding or assets
161
+ 'asset/currencies': 5 / 3,
162
+ 'asset/balances': 5 / 3,
163
+ 'asset/asset-valuation': 10,
164
+ 'asset/transfer-state': 10,
165
+ 'asset/bills': 5 / 3,
166
+ 'asset/deposit-lightning': 5,
167
+ 'asset/deposit-address': 5 / 3,
168
+ 'asset/deposit-history': 5 / 3,
169
+ 'asset/withdrawal-history': 5 / 3,
170
+ 'asset/deposit-withdraw-status': 20,
171
+ // fiat
172
+ 'fiat/deposit-history': 5 / 3,
173
+ 'fiat-withdraw-history': 5 / 3,
174
+ 'fiat-channel': 5 / 3,
175
+ // sub-account
176
+ 'users/subaccount/list': 10,
177
+ 'users/subaccount/apiKey': 10,
178
+ 'account/subaccount/balances': 10,
179
+ 'asset/subaccount/balances': 10,
180
+ 'asset/subaccount/bills': 10,
181
+ },
182
+ 'post': {
183
+ // trade
184
+ 'trade/order': 1 / 3,
185
+ 'trade/batch-orders': 1 / 15,
186
+ 'trade/cancel-order': 1 / 3,
187
+ 'trade/cancel-batch-orders': 1 / 15,
188
+ 'trade/amend-order': 1 / 3,
189
+ 'trade/amend-batch-orders': 1 / 150,
190
+ 'trade/order-algo': 1,
191
+ 'trade/cancel-algos': 1,
192
+ 'trade/cancel-advance-algos': 1,
193
+ // rfq
194
+ 'otc/rfq/quote': 4,
195
+ 'otc/rfq/trade': 4,
196
+ // funding
197
+ 'asset/transfer': 4,
198
+ 'asset/withdrawal': 4,
199
+ 'asset/withdrawal-lightning': 4,
200
+ 'asset/withdrawal-cancel': 4,
201
+ // fiat
202
+ 'fiat/deposit': 5 / 3,
203
+ 'fiat/cancel-deposit': 5 / 3,
204
+ 'fiat/withdrawal': 5 / 3,
205
+ 'fiat/cancel-withdrawal': 5 / 3,
206
+ // sub-account
207
+ 'asset/subaccount/transfer': 10,
208
+ },
209
+ },
210
+ },
211
+ 'features': {
212
+ 'spot': {
213
+ 'sandbox': false,
214
+ 'createOrder': {
215
+ 'marginMode': true,
216
+ 'triggerPrice': true,
217
+ 'triggerDirection': true,
218
+ 'triggerPriceType': {
219
+ 'last': true,
220
+ 'mark': false,
221
+ 'index': false,
222
+ },
223
+ 'stopLossPrice': true,
224
+ 'takeProfitPrice': true,
225
+ 'attachedStopLossTakeProfit': {
226
+ 'triggerPriceType': {
227
+ 'last': true,
228
+ 'mark': false,
229
+ 'index': false,
230
+ },
231
+ 'price': true,
232
+ },
233
+ 'timeInForce': {
234
+ 'IOC': true,
235
+ 'FOK': true,
236
+ 'PO': true,
237
+ 'GTD': false,
238
+ },
239
+ 'hedged': false,
240
+ 'trailing': true,
241
+ 'leverage': false,
242
+ 'marketBuyByCost': true,
243
+ 'marketBuyRequiresPrice': true,
244
+ 'selfTradePrevention': false,
245
+ 'iceberg': true, // todo
246
+ },
247
+ 'createOrders': undefined,
248
+ 'fetchMyTrades': {
249
+ 'marginMode': false,
250
+ 'limit': 100,
251
+ 'daysBack': 90,
252
+ 'untilDays': 90,
253
+ 'symbolRequired': false,
254
+ },
255
+ 'fetchOrder': {
256
+ 'marginMode': false,
257
+ 'trigger': true,
258
+ 'trailing': true,
259
+ 'symbolRequired': true,
260
+ },
261
+ 'fetchOpenOrders': {
262
+ 'marginMode': false,
263
+ 'limit': 100,
264
+ 'trigger': true,
265
+ 'trailing': true,
266
+ 'symbolRequired': false,
267
+ },
268
+ 'fetchOrders': undefined,
269
+ 'fetchClosedOrders': {
270
+ 'marginMode': false,
271
+ 'limit': 100,
272
+ 'daysBack': 90,
273
+ 'daysBackCanceled': 1 / 12,
274
+ 'untilDays': 90,
275
+ 'trigger': true,
276
+ 'trailing': true,
277
+ 'symbolRequired': false,
278
+ },
279
+ 'fetchOHLCV': {
280
+ 'limit': 100, // 300 is only possible for 'recent' 1440 candles, which does not make much sense
281
+ },
282
+ },
283
+ 'swap': {
284
+ 'linear': undefined,
285
+ 'inverse': undefined,
286
+ },
287
+ 'future': {
288
+ 'linear': undefined,
289
+ 'inverse': undefined,
290
+ },
291
+ },
292
+ 'fees': {
293
+ 'trading': {
294
+ 'taker': 0.002,
295
+ 'maker': 0.001,
296
+ },
297
+ 'spot': {
298
+ 'taker': 0.0015,
299
+ 'maker': 0.0010,
300
+ },
301
+ },
302
+ 'requiredCredentials': {
303
+ 'apiKey': true,
304
+ 'secret': true,
305
+ 'password': true,
306
+ },
307
+ 'exceptions': {
308
+ 'exact': {
309
+ // Public error codes from 50000-53999
310
+ // General Class
311
+ '1': ExchangeError,
312
+ '2': ExchangeError,
313
+ '50000': BadRequest,
314
+ '50001': OnMaintenance,
315
+ '50002': BadRequest,
316
+ '50004': RequestTimeout,
317
+ '50005': ExchangeNotAvailable,
318
+ '50006': BadRequest,
319
+ '50007': AccountSuspended,
320
+ '50008': AuthenticationError,
321
+ '50009': AccountSuspended,
322
+ '50010': ExchangeError,
323
+ '50011': RateLimitExceeded,
324
+ '50012': ExchangeError,
325
+ '50013': ExchangeNotAvailable,
326
+ '50014': BadRequest,
327
+ '50015': ExchangeError,
328
+ '50016': ExchangeError,
329
+ '50017': ExchangeError,
330
+ '50018': ExchangeError,
331
+ '50019': ExchangeError,
332
+ '50020': ExchangeError,
333
+ '50021': ExchangeError,
334
+ '50022': ExchangeError,
335
+ '50023': ExchangeError,
336
+ '50024': BadRequest,
337
+ '50025': ExchangeError,
338
+ '50026': ExchangeNotAvailable,
339
+ '50027': PermissionDenied,
340
+ '50028': ExchangeError,
341
+ '50029': ExchangeError,
342
+ '50030': PermissionDenied,
343
+ '50032': AccountSuspended,
344
+ '50033': AccountSuspended,
345
+ '50035': BadRequest,
346
+ '50036': BadRequest,
347
+ '50037': BadRequest,
348
+ '50038': ExchangeError,
349
+ '50039': ExchangeError,
350
+ '50041': ExchangeError,
351
+ '50044': BadRequest,
352
+ // API Class
353
+ '50100': ExchangeError,
354
+ '50101': AuthenticationError,
355
+ '50102': InvalidNonce,
356
+ '50103': AuthenticationError,
357
+ '50104': AuthenticationError,
358
+ '50105': AuthenticationError,
359
+ '50106': AuthenticationError,
360
+ '50107': AuthenticationError,
361
+ '50108': ExchangeError,
362
+ '50109': ExchangeError,
363
+ '50110': PermissionDenied,
364
+ '50111': AuthenticationError,
365
+ '50112': AuthenticationError,
366
+ '50113': AuthenticationError,
367
+ '50114': AuthenticationError,
368
+ '50115': BadRequest,
369
+ // Trade Class
370
+ '51000': BadRequest,
371
+ '51001': BadSymbol,
372
+ '51002': BadSymbol,
373
+ '51003': BadRequest,
374
+ '51004': InvalidOrder,
375
+ '51005': InvalidOrder,
376
+ '51006': InvalidOrder,
377
+ '51007': InvalidOrder,
378
+ '51008': InsufficientFunds,
379
+ '51009': AccountSuspended,
380
+ '51010': AccountNotEnabled,
381
+ '51011': InvalidOrder,
382
+ '51012': BadSymbol,
383
+ '51014': BadSymbol,
384
+ '51015': BadSymbol,
385
+ '51016': InvalidOrder,
386
+ '51017': ExchangeError,
387
+ '51018': ExchangeError,
388
+ '51019': ExchangeError,
389
+ '51020': InvalidOrder,
390
+ '51023': ExchangeError,
391
+ '51024': AccountSuspended,
392
+ '51025': ExchangeError,
393
+ '51026': BadSymbol,
394
+ '51030': InvalidOrder,
395
+ '51031': InvalidOrder,
396
+ '51032': InvalidOrder,
397
+ '51033': InvalidOrder,
398
+ '51037': InvalidOrder,
399
+ '51038': InvalidOrder,
400
+ '51044': InvalidOrder,
401
+ '51046': InvalidOrder,
402
+ '51047': InvalidOrder,
403
+ '51048': InvalidOrder,
404
+ '51049': InvalidOrder,
405
+ '51050': InvalidOrder,
406
+ '51051': InvalidOrder,
407
+ '51052': InvalidOrder,
408
+ '51053': InvalidOrder,
409
+ '51054': BadRequest,
410
+ '51056': InvalidOrder,
411
+ '51058': InvalidOrder,
412
+ '51059': InvalidOrder,
413
+ '51100': InvalidOrder,
414
+ '51102': InvalidOrder,
415
+ '51103': InvalidOrder,
416
+ '51108': InvalidOrder,
417
+ '51109': InvalidOrder,
418
+ '51110': InvalidOrder,
419
+ '51111': BadRequest,
420
+ '51112': InvalidOrder,
421
+ '51113': RateLimitExceeded,
422
+ '51115': InvalidOrder,
423
+ '51116': InvalidOrder,
424
+ '51117': InvalidOrder,
425
+ '51118': InvalidOrder,
426
+ '51119': InsufficientFunds,
427
+ '51120': InvalidOrder,
428
+ '51121': InvalidOrder,
429
+ '51122': InvalidOrder,
430
+ '51124': InvalidOrder,
431
+ '51125': InvalidOrder,
432
+ '51126': InvalidOrder,
433
+ '51127': InsufficientFunds,
434
+ '51128': InvalidOrder,
435
+ '51129': InvalidOrder,
436
+ '51130': BadSymbol,
437
+ '51131': InsufficientFunds,
438
+ '51132': InvalidOrder,
439
+ '51133': InvalidOrder,
440
+ '51134': InvalidOrder,
441
+ '51135': InvalidOrder,
442
+ '51136': InvalidOrder,
443
+ '51137': InvalidOrder,
444
+ '51138': InvalidOrder,
445
+ '51139': InvalidOrder,
446
+ '51156': BadRequest,
447
+ '51159': BadRequest,
448
+ '51162': InvalidOrder,
449
+ '51163': InvalidOrder,
450
+ '51166': InvalidOrder,
451
+ '51174': InvalidOrder,
452
+ '51201': InvalidOrder,
453
+ '51202': InvalidOrder,
454
+ '51203': InvalidOrder,
455
+ '51204': InvalidOrder,
456
+ '51205': InvalidOrder,
457
+ '51250': InvalidOrder,
458
+ '51251': InvalidOrder,
459
+ '51252': InvalidOrder,
460
+ '51253': InvalidOrder,
461
+ '51254': InvalidOrder,
462
+ '51255': InvalidOrder,
463
+ '51256': InvalidOrder,
464
+ '51257': InvalidOrder,
465
+ '51258': InvalidOrder,
466
+ '51259': InvalidOrder,
467
+ '51260': InvalidOrder,
468
+ '51261': InvalidOrder,
469
+ '51262': InvalidOrder,
470
+ '51263': InvalidOrder,
471
+ '51264': InvalidOrder,
472
+ '51265': InvalidOrder,
473
+ '51267': InvalidOrder,
474
+ '51268': InvalidOrder,
475
+ '51269': InvalidOrder,
476
+ '51270': InvalidOrder,
477
+ '51271': InvalidOrder,
478
+ '51272': InvalidOrder,
479
+ '51273': InvalidOrder,
480
+ '51274': InvalidOrder,
481
+ '51275': InvalidOrder,
482
+ '51276': InvalidOrder,
483
+ '51277': InvalidOrder,
484
+ '51278': InvalidOrder,
485
+ '51279': InvalidOrder,
486
+ '51280': InvalidOrder,
487
+ '51321': InvalidOrder,
488
+ '51322': InvalidOrder,
489
+ '51323': BadRequest,
490
+ '51324': BadRequest,
491
+ '51325': InvalidOrder,
492
+ '51327': InvalidOrder,
493
+ '51328': InvalidOrder,
494
+ '51329': InvalidOrder,
495
+ '51330': InvalidOrder,
496
+ '51400': OrderNotFound,
497
+ '51401': OrderNotFound,
498
+ '51402': OrderNotFound,
499
+ '51403': InvalidOrder,
500
+ '51404': InvalidOrder,
501
+ '51405': ExchangeError,
502
+ '51406': ExchangeError,
503
+ '51407': BadRequest,
504
+ '51408': ExchangeError,
505
+ '51409': ExchangeError,
506
+ '51410': CancelPending,
507
+ '51500': ExchangeError,
508
+ '51501': ExchangeError,
509
+ '51502': InsufficientFunds,
510
+ '51503': ExchangeError,
511
+ '51506': ExchangeError,
512
+ '51508': ExchangeError,
513
+ '51509': ExchangeError,
514
+ '51510': ExchangeError,
515
+ '51511': ExchangeError,
516
+ '51600': ExchangeError,
517
+ '51601': ExchangeError,
518
+ '51602': ExchangeError,
519
+ '51603': OrderNotFound,
520
+ '51732': AuthenticationError,
521
+ '51733': AuthenticationError,
522
+ '51734': AuthenticationError,
523
+ '51735': ExchangeError,
524
+ '51736': InsufficientFunds,
525
+ // Data class
526
+ '52000': ExchangeError,
527
+ // SPOT/MARGIN error codes 54000-54999
528
+ '54000': ExchangeError,
529
+ '54001': ExchangeError,
530
+ // FUNDING error codes 58000-58999
531
+ '58000': ExchangeError,
532
+ '58001': AuthenticationError,
533
+ '58002': PermissionDenied,
534
+ '58003': ExchangeError,
535
+ '58004': AccountSuspended,
536
+ '58005': ExchangeError,
537
+ '58006': ExchangeError,
538
+ '58007': ExchangeError,
539
+ '58100': ExchangeError,
540
+ '58101': AccountSuspended,
541
+ '58102': RateLimitExceeded,
542
+ '58103': ExchangeError,
543
+ '58104': ExchangeError,
544
+ '58105': ExchangeError,
545
+ '58106': ExchangeError,
546
+ '58107': ExchangeError,
547
+ '58108': ExchangeError,
548
+ '58109': ExchangeError,
549
+ '58110': ExchangeError,
550
+ '58111': ExchangeError,
551
+ '58112': ExchangeError,
552
+ '58114': ExchangeError,
553
+ '58115': ExchangeError,
554
+ '58116': ExchangeError,
555
+ '58117': ExchangeError,
556
+ '58125': BadRequest,
557
+ '58126': BadRequest,
558
+ '58127': BadRequest,
559
+ '58128': BadRequest,
560
+ '58200': ExchangeError,
561
+ '58201': ExchangeError,
562
+ '58202': ExchangeError,
563
+ '58203': InvalidAddress,
564
+ '58204': AccountSuspended,
565
+ '58205': ExchangeError,
566
+ '58206': ExchangeError,
567
+ '58207': InvalidAddress,
568
+ '58208': ExchangeError,
569
+ '58209': ExchangeError,
570
+ '58210': ExchangeError,
571
+ '58211': ExchangeError,
572
+ '58212': ExchangeError,
573
+ '58213': AuthenticationError,
574
+ '58221': BadRequest,
575
+ '58222': BadRequest,
576
+ '58224': BadRequest,
577
+ '58227': BadRequest,
578
+ '58228': BadRequest,
579
+ '58229': InsufficientFunds,
580
+ '58300': ExchangeError,
581
+ '58350': InsufficientFunds,
582
+ // Account error codes 59000-59999
583
+ '59000': ExchangeError,
584
+ '59001': ExchangeError,
585
+ '59100': ExchangeError,
586
+ '59101': ExchangeError,
587
+ '59102': ExchangeError,
588
+ '59103': InsufficientFunds,
589
+ '59104': ExchangeError,
590
+ '59105': ExchangeError,
591
+ '59106': ExchangeError,
592
+ '59107': ExchangeError,
593
+ '59108': InsufficientFunds,
594
+ '59109': ExchangeError,
595
+ '59128': InvalidOrder,
596
+ '59200': InsufficientFunds,
597
+ '59201': InsufficientFunds,
598
+ '59216': BadRequest,
599
+ '59300': ExchangeError,
600
+ '59301': ExchangeError,
601
+ '59313': ExchangeError,
602
+ '59401': ExchangeError,
603
+ '59500': ExchangeError,
604
+ '59501': ExchangeError,
605
+ '59502': ExchangeError,
606
+ '59503': ExchangeError,
607
+ '59504': ExchangeError,
608
+ '59505': ExchangeError,
609
+ '59506': ExchangeError,
610
+ '59507': ExchangeError,
611
+ '59508': AccountSuspended,
612
+ // WebSocket error Codes from 60000-63999
613
+ '60001': AuthenticationError,
614
+ '60002': AuthenticationError,
615
+ '60003': AuthenticationError,
616
+ '60004': AuthenticationError,
617
+ '60005': AuthenticationError,
618
+ '60006': InvalidNonce,
619
+ '60007': AuthenticationError,
620
+ '60008': AuthenticationError,
621
+ '60009': AuthenticationError,
622
+ '60010': AuthenticationError,
623
+ '60011': AuthenticationError,
624
+ '60012': BadRequest,
625
+ '60013': BadRequest,
626
+ '60014': RateLimitExceeded,
627
+ '60015': NetworkError,
628
+ '60016': ExchangeNotAvailable,
629
+ '60017': BadRequest,
630
+ '60018': BadRequest,
631
+ '60019': BadRequest,
632
+ '63999': ExchangeError,
633
+ '70010': BadRequest,
634
+ '70013': BadRequest,
635
+ '70016': BadRequest, // Please specify your instrument settings for at least one instType.
636
+ },
637
+ 'broad': {
638
+ 'Internal Server Error': ExchangeNotAvailable,
639
+ 'server error': ExchangeNotAvailable, // {"code":500,"data":{},"detailMsg":"","error_code":"500","error_message":"server error 1236805249","msg":"server error 1236805249"}
640
+ },
641
+ },
642
+ 'precisionMode': TICK_SIZE,
643
+ 'options': {
644
+ 'fetchOHLCV': {
645
+ 'type': 'Candles', // Candles or HistoryCandles
646
+ },
647
+ 'createMarketBuyOrderRequiresPrice': true,
648
+ 'fetchMarkets': ['spot'],
649
+ 'defaultType': 'spot',
650
+ 'accountsByType': {
651
+ 'classic': '1',
652
+ 'spot': '1',
653
+ 'funding': '6',
654
+ 'main': '6',
655
+ 'unified': '18',
656
+ },
657
+ 'accountsById': {
658
+ '1': 'spot',
659
+ '6': 'funding',
660
+ '18': 'unified',
661
+ },
662
+ 'auth': {
663
+ 'time': 'public',
664
+ 'currencies': 'private',
665
+ 'instruments': 'public',
666
+ 'rate': 'public',
667
+ '{instrument_id}/constituents': 'public',
668
+ },
669
+ 'warnOnFetchCurrenciesWithoutAuthorization': false,
670
+ 'defaultNetwork': 'ERC20',
671
+ 'networks': {
672
+ 'ERC20': 'Ethereum',
673
+ 'BTC': 'Bitcoin',
674
+ 'OMNI': 'Omni',
675
+ 'TRC20': 'TRON',
676
+ },
677
+ },
678
+ 'commonCurrencies': {
679
+ // OKEX refers to ERC20 version of Aeternity (AEToken)
680
+ 'AE': 'AET',
681
+ 'BOX': 'DefiBox',
682
+ 'HOT': 'Hydro Protocol',
683
+ 'HSR': 'HC',
684
+ 'MAG': 'Maggie',
685
+ 'SBTC': 'Super Bitcoin',
686
+ 'TRADE': 'Unitrade',
687
+ 'YOYO': 'YOYOW',
688
+ 'WIN': 'WinToken', // https://github.com/ccxt/ccxt/issues/5701
689
+ },
690
+ });
691
+ }
692
+ /**
693
+ * @method
694
+ * @name okcoin#fetchTime
695
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
696
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
697
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
698
+ */
699
+ async fetchTime(params = {}) {
700
+ const response = await this.publicGetPublicTime(params);
701
+ //
702
+ // {
703
+ // "code": "0",
704
+ // "data":
705
+ // [
706
+ // {
707
+ // "ts": "1737379360033"
708
+ // }
709
+ // ],
710
+ // "msg": ""
711
+ // }
712
+ //
713
+ const data = this.safeList(response, 'data');
714
+ const timestamp = this.safeDict(data, 0);
715
+ return this.safeInteger(timestamp, 'ts');
716
+ }
717
+ /**
718
+ * @method
719
+ * @name okcoin#fetchMarkets
720
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-public-data-get-instruments
721
+ * @description retrieves data on all markets for okcoin
722
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
723
+ * @returns {object[]} an array of objects representing market data
724
+ */
725
+ async fetchMarkets(params = {}) {
726
+ const request = {
727
+ 'instType': 'SPOT',
728
+ };
729
+ const response = await this.publicGetPublicInstruments(this.extend(request, params));
730
+ const markets = this.safeValue(response, 'data', []);
731
+ return this.parseMarkets(markets);
732
+ }
733
+ parseMarket(market) {
734
+ //
735
+ // spot markets
736
+ //
737
+ // {
738
+ // "base_currency": "EOS",
739
+ // "instrument_id": "EOS-OKB",
740
+ // "min_size": "0.01",
741
+ // "quote_currency": "OKB",
742
+ // "size_increment": "0.000001",
743
+ // "tick_size": "0.0001"
744
+ // }
745
+ //
746
+ const id = this.safeString(market, 'instId');
747
+ let type = this.safeStringLower(market, 'instType');
748
+ if (type === 'futures') {
749
+ type = 'future';
750
+ }
751
+ const spot = (type === 'spot');
752
+ const future = (type === 'future');
753
+ const swap = (type === 'swap');
754
+ const option = (type === 'option');
755
+ const contract = swap || future || option;
756
+ const baseId = this.safeString(market, 'baseCcy');
757
+ const quoteId = this.safeString(market, 'quoteCcy');
758
+ const base = this.safeCurrencyCode(baseId);
759
+ const quote = this.safeCurrencyCode(quoteId);
760
+ const symbol = base + '/' + quote;
761
+ const tickSize = this.safeString(market, 'tickSz');
762
+ const fees = this.safeValue2(this.fees, type, 'trading', {});
763
+ let maxLeverage = this.safeString(market, 'lever', '1');
764
+ maxLeverage = Precise.stringMax(maxLeverage, '1');
765
+ const maxSpotCost = this.safeNumber(market, 'maxMktSz');
766
+ return this.extend(fees, {
767
+ 'id': id,
768
+ 'symbol': symbol,
769
+ 'base': base,
770
+ 'quote': quote,
771
+ 'settle': undefined,
772
+ 'baseId': baseId,
773
+ 'quoteId': quoteId,
774
+ 'settleId': undefined,
775
+ 'type': type,
776
+ 'spot': spot,
777
+ 'margin': spot && (Precise.stringGt(maxLeverage, '1')),
778
+ 'swap': false,
779
+ 'future': false,
780
+ 'option': false,
781
+ 'active': true,
782
+ 'contract': false,
783
+ 'linear': undefined,
784
+ 'inverse': undefined,
785
+ 'contractSize': contract ? this.safeNumber(market, 'ctVal') : undefined,
786
+ 'expiry': undefined,
787
+ 'expiryDatetime': undefined,
788
+ 'strike': undefined,
789
+ 'optionType': undefined,
790
+ 'created': this.safeInteger(market, 'listTime'),
791
+ 'precision': {
792
+ 'amount': this.safeNumber(market, 'lotSz'),
793
+ 'price': this.parseNumber(tickSize),
794
+ },
795
+ 'limits': {
796
+ 'leverage': {
797
+ 'min': this.parseNumber('1'),
798
+ 'max': this.parseNumber(maxLeverage),
799
+ },
800
+ 'amount': {
801
+ 'min': this.safeNumber(market, 'minSz'),
802
+ 'max': undefined,
803
+ },
804
+ 'price': {
805
+ 'min': undefined,
806
+ 'max': undefined,
807
+ },
808
+ 'cost': {
809
+ 'min': undefined,
810
+ 'max': contract ? undefined : maxSpotCost,
811
+ },
812
+ },
813
+ 'info': market,
814
+ });
815
+ }
816
+ /**
817
+ * @method
818
+ * @name okcoin#fetchCurrencies
819
+ * @description fetches all available currencies on an exchange
820
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
821
+ * @returns {object} an associative dictionary of currencies
822
+ */
823
+ async fetchCurrencies(params = {}) {
824
+ if (!this.checkRequiredCredentials(false)) {
825
+ if (this.options['warnOnFetchCurrenciesWithoutAuthorization']) {
826
+ throw new ExchangeError(this.id + ' fetchCurrencies() is a private API endpoint that requires authentication with API keys. Set the API keys on the exchange instance or exchange.options["warnOnFetchCurrenciesWithoutAuthorization"] = false to suppress this warning message.');
827
+ }
828
+ return undefined;
829
+ }
830
+ else {
831
+ const response = await this.privateGetAssetCurrencies(params);
832
+ const data = this.safeList(response, 'data', []);
833
+ const result = {};
834
+ const dataByCurrencyId = this.groupBy(data, 'ccy');
835
+ const currencyIds = Object.keys(dataByCurrencyId);
836
+ for (let i = 0; i < currencyIds.length; i++) {
837
+ const currencyId = currencyIds[i];
838
+ const code = this.safeCurrencyCode(currencyId);
839
+ const chains = dataByCurrencyId[currencyId];
840
+ const networks = {};
841
+ for (let j = 0; j < chains.length; j++) {
842
+ const chain = chains[j];
843
+ const networkId = this.safeString(chain, 'chain');
844
+ if ((networkId !== undefined) && (networkId.indexOf('-') >= 0)) {
845
+ const parts = networkId.split('-');
846
+ const chainPart = this.safeString(parts, 1, networkId);
847
+ const networkCode = this.networkIdToCode(chainPart);
848
+ networks[networkCode] = {
849
+ 'id': networkId,
850
+ 'network': networkCode,
851
+ 'active': undefined,
852
+ 'deposit': this.safeBool(chain, 'canDep'),
853
+ 'withdraw': this.safeBool(chain, 'canWd'),
854
+ 'fee': this.safeNumber(chain, 'minFee'),
855
+ 'precision': this.parseNumber(this.parsePrecision(this.safeString(chain, 'wdTickSz'))),
856
+ 'limits': {
857
+ 'withdraw': {
858
+ 'min': this.safeNumber(chain, 'minWd'),
859
+ 'max': this.safeNumber(chain, 'maxWd'),
860
+ },
861
+ },
862
+ 'info': chain,
863
+ };
864
+ }
865
+ }
866
+ const firstChain = this.safeValue(chains, 0);
867
+ result[code] = this.safeCurrencyStructure({
868
+ 'info': chains,
869
+ 'code': code,
870
+ 'id': currencyId,
871
+ 'name': this.safeString(firstChain, 'name'),
872
+ 'active': undefined,
873
+ 'deposit': undefined,
874
+ 'withdraw': undefined,
875
+ 'fee': undefined,
876
+ 'precision': undefined,
877
+ 'limits': {
878
+ 'amount': {
879
+ 'min': undefined,
880
+ 'max': undefined,
881
+ },
882
+ },
883
+ 'networks': networks,
884
+ });
885
+ }
886
+ return result;
887
+ }
888
+ }
889
+ /**
890
+ * @method
891
+ * @name okcoin#fetchOrderBook
892
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-order-book
893
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
894
+ * @param {string} symbol unified symbol of the market to fetch the order book for
895
+ * @param {int} [limit] the maximum amount of order book entries to return
896
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
897
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
898
+ */
899
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
900
+ await this.loadMarkets();
901
+ const market = this.market(symbol);
902
+ const request = {
903
+ 'instId': market['id'],
904
+ };
905
+ limit = (limit === undefined) ? 20 : limit;
906
+ if (limit !== undefined) {
907
+ request['sz'] = limit; // max 400
908
+ }
909
+ const response = await this.publicGetMarketBooks(this.extend(request, params));
910
+ //
911
+ // {
912
+ // "code": "0",
913
+ // "msg": "",
914
+ // "data": [
915
+ // {
916
+ // "asks": [
917
+ // ["0.07228","4.211619","0","2"], // price, amount, liquidated orders, total open orders
918
+ // ["0.0723","299.880364","0","2"],
919
+ // ["0.07231","3.72832","0","1"],
920
+ // ],
921
+ // "bids": [
922
+ // ["0.07221","18.5","0","1"],
923
+ // ["0.0722","18.5","0","1"],
924
+ // ["0.07219","0.505407","0","1"],
925
+ // ],
926
+ // "ts": "1621438475342"
927
+ // }
928
+ // ]
929
+ // }
930
+ //
931
+ const data = this.safeValue(response, 'data', []);
932
+ const first = this.safeValue(data, 0, {});
933
+ const timestamp = this.safeInteger(first, 'ts');
934
+ return this.parseOrderBook(first, symbol, timestamp);
935
+ }
936
+ parseTicker(ticker, market = undefined) {
937
+ //
938
+ // {
939
+ // "instType": "SPOT",
940
+ // "instId": "ETH-BTC",
941
+ // "last": "0.07319",
942
+ // "lastSz": "0.044378",
943
+ // "askPx": "0.07322",
944
+ // "askSz": "4.2",
945
+ // "bidPx": "0.0732",
946
+ // "bidSz": "6.050058",
947
+ // "open24h": "0.07801",
948
+ // "high24h": "0.07975",
949
+ // "low24h": "0.06019",
950
+ // "volCcy24h": "11788.887619",
951
+ // "vol24h": "167493.829229",
952
+ // "ts": "1621440583784",
953
+ // "sodUtc0": "0.07872",
954
+ // "sodUtc8": "0.07345"
955
+ // }
956
+ //
957
+ const timestamp = this.safeInteger(ticker, 'ts');
958
+ const marketId = this.safeString(ticker, 'instId');
959
+ market = this.safeMarket(marketId, market, '-');
960
+ const symbol = market['symbol'];
961
+ const last = this.safeString(ticker, 'last');
962
+ const open = this.safeString(ticker, 'open24h');
963
+ const spot = this.safeBool(market, 'spot', false);
964
+ const quoteVolume = spot ? this.safeString(ticker, 'volCcy24h') : undefined;
965
+ const baseVolume = this.safeString(ticker, 'vol24h');
966
+ const high = this.safeString(ticker, 'high24h');
967
+ const low = this.safeString(ticker, 'low24h');
968
+ return this.safeTicker({
969
+ 'symbol': symbol,
970
+ 'timestamp': timestamp,
971
+ 'datetime': this.iso8601(timestamp),
972
+ 'high': high,
973
+ 'low': low,
974
+ 'bid': this.safeString(ticker, 'bidPx'),
975
+ 'bidVolume': this.safeString(ticker, 'bidSz'),
976
+ 'ask': this.safeString(ticker, 'askPx'),
977
+ 'askVolume': this.safeString(ticker, 'askSz'),
978
+ 'vwap': undefined,
979
+ 'open': open,
980
+ 'close': last,
981
+ 'last': last,
982
+ 'previousClose': undefined,
983
+ 'change': undefined,
984
+ 'percentage': undefined,
985
+ 'average': undefined,
986
+ 'baseVolume': baseVolume,
987
+ 'quoteVolume': quoteVolume,
988
+ 'info': ticker,
989
+ }, market);
990
+ }
991
+ /**
992
+ * @method
993
+ * @name okcoin#fetchTicker
994
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-ticker
995
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
996
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
997
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
998
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
999
+ */
1000
+ async fetchTicker(symbol, params = {}) {
1001
+ await this.loadMarkets();
1002
+ const market = this.market(symbol);
1003
+ const request = {
1004
+ 'instId': market['id'],
1005
+ };
1006
+ const response = await this.publicGetMarketTicker(this.extend(request, params));
1007
+ const data = this.safeValue(response, 'data', []);
1008
+ const first = this.safeValue(data, 0, {});
1009
+ //
1010
+ // {
1011
+ // "code": "0",
1012
+ // "msg": "",
1013
+ // "data": [
1014
+ // {
1015
+ // "instType": "SPOT",
1016
+ // "instId": "ETH-BTC",
1017
+ // "last": "0.07319",
1018
+ // "lastSz": "0.044378",
1019
+ // "askPx": "0.07322",
1020
+ // "askSz": "4.2",
1021
+ // "bidPx": "0.0732",
1022
+ // "bidSz": "6.050058",
1023
+ // "open24h": "0.07801",
1024
+ // "high24h": "0.07975",
1025
+ // "low24h": "0.06019",
1026
+ // "volCcy24h": "11788.887619",
1027
+ // "vol24h": "167493.829229",
1028
+ // "ts": "1621440583784",
1029
+ // "sodUtc0": "0.07872",
1030
+ // "sodUtc8": "0.07345"
1031
+ // }
1032
+ // ]
1033
+ // }
1034
+ //
1035
+ return this.parseTicker(first, market);
1036
+ }
1037
+ /**
1038
+ * @method
1039
+ * @name okcoin#fetchTickers
1040
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-tickers
1041
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1042
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1043
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1044
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1045
+ */
1046
+ async fetchTickers(symbols = undefined, params = {}) {
1047
+ symbols = this.marketSymbols(symbols);
1048
+ const request = {
1049
+ 'instType': 'SPOT',
1050
+ };
1051
+ const response = await this.publicGetMarketTickers(this.extend(request, params));
1052
+ const data = this.safeList(response, 'data', []);
1053
+ return this.parseTickers(data, symbols, params);
1054
+ }
1055
+ parseTrade(trade, market = undefined) {
1056
+ //
1057
+ // public fetchTrades
1058
+ //
1059
+ // {
1060
+ // "instId": "ETH-BTC",
1061
+ // "side": "sell",
1062
+ // "sz": "0.119501",
1063
+ // "px": "0.07065",
1064
+ // "tradeId": "15826757",
1065
+ // "ts": "1621446178316"
1066
+ // }
1067
+ //
1068
+ // private fetchMyTrades
1069
+ //
1070
+ // {
1071
+ // "side": "buy",
1072
+ // "fillSz": "0.007533",
1073
+ // "fillPx": "2654.98",
1074
+ // "fee": "-0.000007533",
1075
+ // "ordId": "317321390244397056",
1076
+ // "instType": "SPOT",
1077
+ // "instId": "ETH-USDT",
1078
+ // "clOrdId": "",
1079
+ // "posSide": "net",
1080
+ // "billId": "317321390265368576",
1081
+ // "tag": "0",
1082
+ // "execType": "T",
1083
+ // "tradeId": "107601752",
1084
+ // "feeCcy": "ETH",
1085
+ // "ts": "1621927314985"
1086
+ // }
1087
+ //
1088
+ const id = this.safeString(trade, 'tradeId');
1089
+ const marketId = this.safeString(trade, 'instId');
1090
+ market = this.safeMarket(marketId, market, '-');
1091
+ const symbol = market['symbol'];
1092
+ const timestamp = this.safeInteger(trade, 'ts');
1093
+ const price = this.safeString2(trade, 'fillPx', 'px');
1094
+ const amount = this.safeString2(trade, 'fillSz', 'sz');
1095
+ const side = this.safeString(trade, 'side');
1096
+ const orderId = this.safeString(trade, 'ordId');
1097
+ const feeCostString = this.safeString(trade, 'fee');
1098
+ let fee = undefined;
1099
+ if (feeCostString !== undefined) {
1100
+ const feeCostSigned = Precise.stringNeg(feeCostString);
1101
+ const feeCurrencyId = this.safeString(trade, 'feeCcy');
1102
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1103
+ fee = {
1104
+ 'cost': feeCostSigned,
1105
+ 'currency': feeCurrencyCode,
1106
+ };
1107
+ }
1108
+ let takerOrMaker = this.safeString(trade, 'execType');
1109
+ if (takerOrMaker === 'T') {
1110
+ takerOrMaker = 'taker';
1111
+ }
1112
+ else if (takerOrMaker === 'M') {
1113
+ takerOrMaker = 'maker';
1114
+ }
1115
+ return this.safeTrade({
1116
+ 'info': trade,
1117
+ 'timestamp': timestamp,
1118
+ 'datetime': this.iso8601(timestamp),
1119
+ 'symbol': symbol,
1120
+ 'id': id,
1121
+ 'order': orderId,
1122
+ 'type': undefined,
1123
+ 'takerOrMaker': takerOrMaker,
1124
+ 'side': side,
1125
+ 'price': price,
1126
+ 'amount': amount,
1127
+ 'cost': undefined,
1128
+ 'fee': fee,
1129
+ }, market);
1130
+ }
1131
+ /**
1132
+ * @method
1133
+ * @name okcoin#fetchTrades
1134
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades
1135
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades-history
1136
+ * @description get the list of most recent trades for a particular symbol
1137
+ * @param {string} symbol unified symbol of the market to fetch trades for
1138
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1139
+ * @param {int} [limit] the maximum amount of trades to fetch
1140
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1141
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1142
+ */
1143
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1144
+ await this.loadMarkets();
1145
+ const market = this.market(symbol);
1146
+ if ((limit === undefined) || (limit > 100)) {
1147
+ limit = 100; // maximum = default = 100
1148
+ }
1149
+ const request = {
1150
+ 'instId': market['id'],
1151
+ };
1152
+ let method = undefined;
1153
+ [method, params] = this.handleOptionAndParams(params, 'fetchTrades', 'method', 'publicGetMarketTrades');
1154
+ let response = undefined;
1155
+ if (method === 'publicGetMarketTrades') {
1156
+ response = await this.publicGetMarketTrades(this.extend(request, params));
1157
+ }
1158
+ else {
1159
+ response = await this.publicGetMarketHistoryTrades(this.extend(request, params));
1160
+ }
1161
+ const data = this.safeList(response, 'data', []);
1162
+ return this.parseTrades(data, market, since, limit);
1163
+ }
1164
+ parseOHLCV(ohlcv, market = undefined) {
1165
+ //
1166
+ // [
1167
+ // "1678928760000", // timestamp
1168
+ // "24341.4", // open
1169
+ // "24344", // high
1170
+ // "24313.2", // low
1171
+ // "24323", // close
1172
+ // "628", // contract volume
1173
+ // "2.5819", // base volume
1174
+ // "62800", // quote volume
1175
+ // "0" // candlestick state
1176
+ // ]
1177
+ //
1178
+ return [
1179
+ this.safeInteger(ohlcv, 0),
1180
+ this.safeNumber(ohlcv, 1),
1181
+ this.safeNumber(ohlcv, 2),
1182
+ this.safeNumber(ohlcv, 3),
1183
+ this.safeNumber(ohlcv, 4),
1184
+ this.safeNumber(ohlcv, 5),
1185
+ ];
1186
+ }
1187
+ /**
1188
+ * @method
1189
+ * @name okcoin#fetchOHLCV
1190
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks
1191
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks-history
1192
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1193
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1194
+ * @param {string} timeframe the length of time each candle represents
1195
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1196
+ * @param {int} [limit] the maximum amount of candles to fetch
1197
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1198
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1199
+ */
1200
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1201
+ await this.loadMarkets();
1202
+ const market = this.market(symbol);
1203
+ const duration = this.parseTimeframe(timeframe);
1204
+ const options = this.safeValue(this.options, 'fetchOHLCV', {});
1205
+ let bar = this.safeString(this.timeframes, timeframe, timeframe);
1206
+ const timezone = this.safeString(options, 'timezone', 'UTC');
1207
+ if ((timezone === 'UTC') && (duration >= 21600)) { // if utc and timeframe >= 6h
1208
+ bar += timezone.toLowerCase();
1209
+ }
1210
+ const request = {
1211
+ 'instId': market['id'],
1212
+ 'bar': bar,
1213
+ };
1214
+ if (limit !== undefined) {
1215
+ request['limit'] = limit; // default 100, max 100
1216
+ }
1217
+ let method = undefined;
1218
+ [method, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'method', 'publicGetMarketCandles');
1219
+ let response = undefined;
1220
+ if (method === 'publicGetMarketCandles') {
1221
+ response = await this.publicGetMarketCandles(this.extend(request, params));
1222
+ }
1223
+ else {
1224
+ response = await this.publicGetMarketHistoryCandles(this.extend(request, params));
1225
+ }
1226
+ const data = this.safeList(response, 'data', []);
1227
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
1228
+ }
1229
+ parseAccountBalance(response) {
1230
+ //
1231
+ // account
1232
+ //
1233
+ // [
1234
+ // {
1235
+ // "balance": 0,
1236
+ // "available": 0,
1237
+ // "currency": "BTC",
1238
+ // "hold": 0
1239
+ // },
1240
+ // {
1241
+ // "balance": 0,
1242
+ // "available": 0,
1243
+ // "currency": "ETH",
1244
+ // "hold": 0
1245
+ // }
1246
+ // ]
1247
+ //
1248
+ // spot
1249
+ //
1250
+ // [
1251
+ // {
1252
+ // "frozen": "0",
1253
+ // "hold": "0",
1254
+ // "id": "2149632",
1255
+ // "currency": "BTC",
1256
+ // "balance": "0.0000000497717339",
1257
+ // "available": "0.0000000497717339",
1258
+ // "holds": "0"
1259
+ // },
1260
+ // {
1261
+ // "frozen": "0",
1262
+ // "hold": "0",
1263
+ // "id": "2149632",
1264
+ // "currency": "ICN",
1265
+ // "balance": "0.00000000925",
1266
+ // "available": "0.00000000925",
1267
+ // "holds": "0"
1268
+ // }
1269
+ // ]
1270
+ //
1271
+ const result = {
1272
+ 'info': response,
1273
+ 'timestamp': undefined,
1274
+ 'datetime': undefined,
1275
+ };
1276
+ for (let i = 0; i < response.length; i++) {
1277
+ const balance = response[i];
1278
+ const currencyId = this.safeString(balance, 'currency');
1279
+ const code = this.safeCurrencyCode(currencyId);
1280
+ const account = this.account();
1281
+ account['total'] = this.safeString(balance, 'balance');
1282
+ account['used'] = this.safeString(balance, 'hold');
1283
+ account['free'] = this.safeString(balance, 'available');
1284
+ result[code] = account;
1285
+ }
1286
+ return this.safeBalance(result);
1287
+ }
1288
+ /**
1289
+ * @method
1290
+ * @name okcoin#fetchBalance
1291
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1292
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1293
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1294
+ */
1295
+ async fetchBalance(params = {}) {
1296
+ await this.loadMarkets();
1297
+ const [marketType, query] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
1298
+ const request = {
1299
+ // 'ccy': 'BTC,ETH', // comma-separated list of currency ids
1300
+ };
1301
+ let response = undefined;
1302
+ if (marketType === 'funding') {
1303
+ response = await this.privateGetAssetBalances(this.extend(request, query));
1304
+ }
1305
+ else {
1306
+ response = await this.privateGetAccountBalance(this.extend(request, query));
1307
+ }
1308
+ //
1309
+ // {
1310
+ // "code": "0",
1311
+ // "data": [
1312
+ // {
1313
+ // "category": "1",
1314
+ // "delivery": "",
1315
+ // "exercise": "",
1316
+ // "instType": "SPOT",
1317
+ // "level": "Lv1",
1318
+ // "maker": "-0.0008",
1319
+ // "taker": "-0.001",
1320
+ // "ts": "1639043138472"
1321
+ // }
1322
+ // ],
1323
+ // "msg": ""
1324
+ // }
1325
+ //
1326
+ if (marketType === 'funding') {
1327
+ return this.parseFundingBalance(response);
1328
+ }
1329
+ else {
1330
+ return this.parseTradingBalance(response);
1331
+ }
1332
+ }
1333
+ parseTradingBalance(response) {
1334
+ const result = { 'info': response };
1335
+ const data = this.safeValue(response, 'data', []);
1336
+ const first = this.safeValue(data, 0, {});
1337
+ const timestamp = this.safeInteger(first, 'uTime');
1338
+ const details = this.safeValue(first, 'details', []);
1339
+ for (let i = 0; i < details.length; i++) {
1340
+ const balance = details[i];
1341
+ const currencyId = this.safeString(balance, 'ccy');
1342
+ const code = this.safeCurrencyCode(currencyId);
1343
+ const account = this.account();
1344
+ // it may be incorrect to use total, free and used for swap accounts
1345
+ const eq = this.safeString(balance, 'eq');
1346
+ const availEq = this.safeString(balance, 'availEq');
1347
+ if ((eq === undefined) || (availEq === undefined)) {
1348
+ account['free'] = this.safeString(balance, 'availBal');
1349
+ account['used'] = this.safeString(balance, 'frozenBal');
1350
+ }
1351
+ else {
1352
+ account['total'] = eq;
1353
+ account['free'] = availEq;
1354
+ }
1355
+ result[code] = account;
1356
+ }
1357
+ result['timestamp'] = timestamp;
1358
+ result['datetime'] = this.iso8601(timestamp);
1359
+ return this.safeBalance(result);
1360
+ }
1361
+ parseFundingBalance(response) {
1362
+ const result = { 'info': response };
1363
+ const data = this.safeValue(response, 'data', []);
1364
+ for (let i = 0; i < data.length; i++) {
1365
+ const balance = data[i];
1366
+ const currencyId = this.safeString(balance, 'ccy');
1367
+ const code = this.safeCurrencyCode(currencyId);
1368
+ const account = this.account();
1369
+ // it may be incorrect to use total, free and used for swap accounts
1370
+ account['total'] = this.safeString(balance, 'bal');
1371
+ account['free'] = this.safeString(balance, 'availBal');
1372
+ account['used'] = this.safeString(balance, 'frozenBal');
1373
+ result[code] = account;
1374
+ }
1375
+ return this.safeBalance(result);
1376
+ }
1377
+ /**
1378
+ * @method
1379
+ * @name okcoin#createMarketBuyOrderWithCost
1380
+ * @description create a market buy order by providing the symbol and cost
1381
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
1382
+ * @param {string} symbol unified symbol of the market to create an order in
1383
+ * @param {float} cost how much you want to trade in units of the quote currency
1384
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1385
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1386
+ */
1387
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
1388
+ await this.loadMarkets();
1389
+ const market = this.market(symbol);
1390
+ if (!market['spot']) {
1391
+ throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
1392
+ }
1393
+ params['createMarketBuyOrderRequiresPrice'] = false;
1394
+ params['tgtCcy'] = 'quote_ccy';
1395
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
1396
+ }
1397
+ /**
1398
+ * @method
1399
+ * @name okcoin#createOrder
1400
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
1401
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-algo-order
1402
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-multiple-orders
1403
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1404
+ * @description create a trade order
1405
+ * @param {string} symbol unified symbol of the market to create an order in
1406
+ * @param {string} type 'market' or 'limit'
1407
+ * @param {string} side 'buy' or 'sell'
1408
+ * @param {float} amount how much of currency you want to trade in units of base currency
1409
+ * @param {float} price the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1410
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1411
+ * @param {bool} [params.reduceOnly] MARGIN orders only, or swap/future orders in net mode
1412
+ * @param {bool} [params.postOnly] true to place a post only order
1413
+ * @param {float} [params.triggerPrice] conditional orders only, the price at which the order is to be triggered
1414
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered (perpetual swap markets only)
1415
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
1416
+ * @param {float} [params.takeProfit.price] used for take profit limit orders, not used for take profit market price orders
1417
+ * @param {string} [params.takeProfit.type] 'market' or 'limit' used to specify the take profit price type
1418
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered (perpetual swap markets only)
1419
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
1420
+ * @param {float} [params.stopLoss.price] used for stop loss limit orders, not used for stop loss market price orders
1421
+ * @param {string} [params.stopLoss.type] 'market' or 'limit' used to specify the stop loss price type
1422
+ * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
1423
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1424
+ */
1425
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1426
+ await this.loadMarkets();
1427
+ const market = this.market(symbol);
1428
+ let request = this.createOrderRequest(symbol, type, side, amount, price, params);
1429
+ let method = this.safeString(this.options, 'createOrder', 'privatePostTradeBatchOrders');
1430
+ const requestOrdType = this.safeString(request, 'ordType');
1431
+ if ((requestOrdType === 'trigger') || (requestOrdType === 'conditional') || (type === 'oco') || (type === 'move_order_stop') || (type === 'iceberg') || (type === 'twap')) {
1432
+ method = 'privatePostTradeOrderAlgo';
1433
+ }
1434
+ if (method === 'privatePostTradeBatchOrders') {
1435
+ // keep the request body the same
1436
+ // submit a single order in an array to the batch order endpoint
1437
+ // because it has a lower ratelimit
1438
+ request = [request];
1439
+ }
1440
+ let response = undefined;
1441
+ if (method === 'privatePostTradeOrder') {
1442
+ response = await this.privatePostTradeOrder(request);
1443
+ }
1444
+ else if (method === 'privatePostTradeOrderAlgo') {
1445
+ response = await this.privatePostTradeOrderAlgo(request);
1446
+ }
1447
+ else if (method === 'privatePostTradeBatchOrders') {
1448
+ response = await this.privatePostTradeBatchOrders(request);
1449
+ }
1450
+ else {
1451
+ throw new ExchangeError(this.id + ' createOrder() this.options["createOrder"] must be either privatePostTradeBatchOrders or privatePostTradeOrder or privatePostTradeOrderAlgo');
1452
+ }
1453
+ const data = this.safeValue(response, 'data', []);
1454
+ const first = this.safeValue(data, 0);
1455
+ const order = this.parseOrder(first, market);
1456
+ order['type'] = type;
1457
+ order['side'] = side;
1458
+ return order;
1459
+ }
1460
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1461
+ const market = this.market(symbol);
1462
+ const request = {
1463
+ 'instId': market['id'],
1464
+ // 'ccy': currency['id'], // only applicable to cross MARGIN orders in single-currency margin
1465
+ // 'clOrdId': clientOrderId, // up to 32 characters, must be unique
1466
+ // 'tag': tag, // up to 8 characters
1467
+ 'side': side,
1468
+ // 'posSide': 'long', // long, short, // required in the long/short mode, and can only be long or short (only for future or swap)
1469
+ 'ordType': type,
1470
+ // 'ordType': type, // privatePostTradeOrder: market, limit, post_only, fok, ioc, optimal_limit_ioc
1471
+ // 'ordType': type, // privatePostTradeOrderAlgo: conditional, oco, trigger, move_order_stop, iceberg, twap
1472
+ // 'sz': this.amountToPrecision (symbol, amount),
1473
+ // 'px': this.priceToPrecision (symbol, price), // limit orders only
1474
+ // 'reduceOnly': false,
1475
+ //
1476
+ // 'triggerPx': 10, // stopPrice (trigger orders)
1477
+ // 'orderPx': 10, // Order price if -1, the order will be executed at the market price. (trigger orders)
1478
+ // 'triggerPxType': 'last', // Conditional default is last, mark or index (trigger orders)
1479
+ //
1480
+ // 'tpTriggerPx': 10, // takeProfitPrice (conditional orders)
1481
+ // 'tpTriggerPxType': 'last', // Conditional default is last, mark or index (conditional orders)
1482
+ // 'tpOrdPx': 10, // Order price for Take-Profit orders, if -1 will be executed at market price (conditional orders)
1483
+ //
1484
+ // 'slTriggerPx': 10, // stopLossPrice (conditional orders)
1485
+ // 'slTriggerPxType': 'last', // Conditional default is last, mark or index (conditional orders)
1486
+ // 'slOrdPx': 10, // Order price for Stop-Loss orders, if -1 will be executed at market price (conditional orders)
1487
+ };
1488
+ const triggerPrice = this.safeValueN(params, ['triggerPrice', 'stopPrice', 'triggerPx']);
1489
+ const timeInForce = this.safeString(params, 'timeInForce', 'GTC');
1490
+ const takeProfitPrice = this.safeValue2(params, 'takeProfitPrice', 'tpTriggerPx');
1491
+ const tpOrdPx = this.safeValue(params, 'tpOrdPx', price);
1492
+ const tpTriggerPxType = this.safeString(params, 'tpTriggerPxType', 'last');
1493
+ const stopLossPrice = this.safeValue2(params, 'stopLossPrice', 'slTriggerPx');
1494
+ const slOrdPx = this.safeValue(params, 'slOrdPx', price);
1495
+ const slTriggerPxType = this.safeString(params, 'slTriggerPxType', 'last');
1496
+ const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');
1497
+ const stopLoss = this.safeValue(params, 'stopLoss');
1498
+ const stopLossDefined = (stopLoss !== undefined);
1499
+ const takeProfit = this.safeValue(params, 'takeProfit');
1500
+ const takeProfitDefined = (takeProfit !== undefined);
1501
+ const defaultMarginMode = this.safeString2(this.options, 'defaultMarginMode', 'marginMode', 'cross');
1502
+ let marginMode = this.safeString2(params, 'marginMode', 'tdMode'); // cross or isolated, tdMode not ommited so as to be extended into the request
1503
+ let margin = false;
1504
+ if ((marginMode !== undefined) && (marginMode !== 'cash')) {
1505
+ margin = true;
1506
+ }
1507
+ else {
1508
+ marginMode = defaultMarginMode;
1509
+ margin = this.safeBool(params, 'margin', false);
1510
+ }
1511
+ if (margin) {
1512
+ const defaultCurrency = (side === 'buy') ? market['quote'] : market['base'];
1513
+ const currency = this.safeString(params, 'ccy', defaultCurrency);
1514
+ request['ccy'] = this.safeCurrencyCode(currency);
1515
+ }
1516
+ const tradeMode = margin ? marginMode : 'cash';
1517
+ request['tdMode'] = tradeMode;
1518
+ const isMarketOrder = type === 'market';
1519
+ let postOnly = false;
1520
+ [postOnly, params] = this.handlePostOnly(isMarketOrder, type === 'post_only', params);
1521
+ params = this.omit(params, ['currency', 'ccy', 'marginMode', 'timeInForce', 'stopPrice', 'triggerPrice', 'clientOrderId', 'stopLossPrice', 'takeProfitPrice', 'slOrdPx', 'tpOrdPx', 'margin', 'stopLoss', 'takeProfit']);
1522
+ const ioc = (timeInForce === 'IOC') || (type === 'ioc');
1523
+ const fok = (timeInForce === 'FOK') || (type === 'fok');
1524
+ const trigger = (triggerPrice !== undefined) || (type === 'trigger');
1525
+ const conditional = (stopLossPrice !== undefined) || (takeProfitPrice !== undefined) || (type === 'conditional');
1526
+ const marketIOC = (isMarketOrder && ioc) || (type === 'optimal_limit_ioc');
1527
+ const defaultTgtCcy = this.safeString(this.options, 'tgtCcy', 'base_ccy');
1528
+ const tgtCcy = this.safeString(params, 'tgtCcy', defaultTgtCcy);
1529
+ if ((!margin)) {
1530
+ request['tgtCcy'] = tgtCcy;
1531
+ }
1532
+ if (isMarketOrder || marketIOC) {
1533
+ request['ordType'] = 'market';
1534
+ if (side === 'buy') {
1535
+ // spot market buy: "sz" can refer either to base currency units or to quote currency units
1536
+ // see documentation: https://www.okx.com/docs-v5/en/#rest-api-trade-place-order
1537
+ if (tgtCcy === 'quote_ccy') {
1538
+ // quote_ccy: sz refers to units of quote currency
1539
+ let quoteAmount = undefined;
1540
+ let createMarketBuyOrderRequiresPrice = true;
1541
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
1542
+ const cost = this.safeNumber2(params, 'cost', 'sz');
1543
+ params = this.omit(params, ['cost', 'sz']);
1544
+ if (cost !== undefined) {
1545
+ quoteAmount = this.costToPrecision(symbol, cost);
1546
+ }
1547
+ else if (createMarketBuyOrderRequiresPrice) {
1548
+ if (price === undefined) {
1549
+ throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument');
1550
+ }
1551
+ else {
1552
+ const amountString = this.numberToString(amount);
1553
+ const priceString = this.numberToString(price);
1554
+ const costRequest = Precise.stringMul(amountString, priceString);
1555
+ quoteAmount = this.costToPrecision(symbol, costRequest);
1556
+ }
1557
+ }
1558
+ else {
1559
+ quoteAmount = this.costToPrecision(symbol, amount);
1560
+ }
1561
+ request['sz'] = quoteAmount;
1562
+ }
1563
+ else {
1564
+ request['sz'] = this.amountToPrecision(symbol, amount);
1565
+ }
1566
+ }
1567
+ else {
1568
+ request['sz'] = this.amountToPrecision(symbol, amount);
1569
+ }
1570
+ }
1571
+ else {
1572
+ request['sz'] = this.amountToPrecision(symbol, amount);
1573
+ if ((!trigger) && (!conditional)) {
1574
+ request['px'] = this.priceToPrecision(symbol, price);
1575
+ }
1576
+ }
1577
+ if (postOnly) {
1578
+ request['ordType'] = 'post_only';
1579
+ }
1580
+ else if (ioc && !marketIOC) {
1581
+ request['ordType'] = 'ioc';
1582
+ }
1583
+ else if (fok) {
1584
+ request['ordType'] = 'fok';
1585
+ }
1586
+ else if (stopLossDefined || takeProfitDefined) {
1587
+ if (stopLossDefined) {
1588
+ const stopLossTriggerPrice = this.safeValueN(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx']);
1589
+ if (stopLossTriggerPrice === undefined) {
1590
+ throw new InvalidOrder(this.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order');
1591
+ }
1592
+ request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
1593
+ const stopLossLimitPrice = this.safeValueN(stopLoss, ['price', 'stopLossPrice', 'slOrdPx']);
1594
+ const stopLossOrderType = this.safeString(stopLoss, 'type');
1595
+ if (stopLossOrderType !== undefined) {
1596
+ const stopLossLimitOrderType = (stopLossOrderType === 'limit');
1597
+ const stopLossMarketOrderType = (stopLossOrderType === 'market');
1598
+ if ((!stopLossLimitOrderType) && (!stopLossMarketOrderType)) {
1599
+ throw new InvalidOrder(this.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"');
1600
+ }
1601
+ else if (stopLossLimitOrderType) {
1602
+ if (stopLossLimitPrice === undefined) {
1603
+ throw new InvalidOrder(this.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order');
1604
+ }
1605
+ else {
1606
+ request['slOrdPx'] = this.priceToPrecision(symbol, stopLossLimitPrice);
1607
+ }
1608
+ }
1609
+ else if (stopLossOrderType === 'market') {
1610
+ request['slOrdPx'] = '-1';
1611
+ }
1612
+ }
1613
+ else if (stopLossLimitPrice !== undefined) {
1614
+ request['slOrdPx'] = this.priceToPrecision(symbol, stopLossLimitPrice); // limit sl order
1615
+ }
1616
+ else {
1617
+ request['slOrdPx'] = '-1'; // market sl order
1618
+ }
1619
+ const stopLossTriggerPriceType = this.safeString2(stopLoss, 'triggerPriceType', 'slTriggerPxType', 'last');
1620
+ if (stopLossTriggerPriceType !== undefined) {
1621
+ if ((stopLossTriggerPriceType !== 'last') && (stopLossTriggerPriceType !== 'index') && (stopLossTriggerPriceType !== 'mark')) {
1622
+ throw new InvalidOrder(this.id + ' createOrder() stop loss trigger price type must be one of "last", "index" or "mark"');
1623
+ }
1624
+ request['slTriggerPxType'] = stopLossTriggerPriceType;
1625
+ }
1626
+ }
1627
+ if (takeProfitDefined) {
1628
+ const takeProfitTriggerPrice = this.safeValueN(takeProfit, ['triggerPrice', 'stopPrice', 'tpTriggerPx']);
1629
+ if (takeProfitTriggerPrice === undefined) {
1630
+ throw new InvalidOrder(this.id + ' createOrder() requires a trigger price in params["takeProfit"]["triggerPrice"], or params["takeProfit"]["stopPrice"], or params["takeProfit"]["tpTriggerPx"] for a take profit order');
1631
+ }
1632
+ request['tpTriggerPx'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
1633
+ const takeProfitLimitPrice = this.safeValueN(takeProfit, ['price', 'takeProfitPrice', 'tpOrdPx']);
1634
+ const takeProfitOrderType = this.safeString(takeProfit, 'type');
1635
+ if (takeProfitOrderType !== undefined) {
1636
+ const takeProfitLimitOrderType = (takeProfitOrderType === 'limit');
1637
+ const takeProfitMarketOrderType = (takeProfitOrderType === 'market');
1638
+ if ((!takeProfitLimitOrderType) && (!takeProfitMarketOrderType)) {
1639
+ throw new InvalidOrder(this.id + ' createOrder() params["takeProfit"]["type"] must be either "limit" or "market"');
1640
+ }
1641
+ else if (takeProfitLimitOrderType) {
1642
+ if (takeProfitLimitPrice === undefined) {
1643
+ throw new InvalidOrder(this.id + ' createOrder() requires a limit price in params["takeProfit"]["price"] or params["takeProfit"]["tpOrdPx"] for a take profit limit order');
1644
+ }
1645
+ else {
1646
+ request['tpOrdPx'] = this.priceToPrecision(symbol, takeProfitLimitPrice);
1647
+ }
1648
+ }
1649
+ else if (takeProfitOrderType === 'market') {
1650
+ request['tpOrdPx'] = '-1';
1651
+ }
1652
+ }
1653
+ else if (takeProfitLimitPrice !== undefined) {
1654
+ request['tpOrdPx'] = this.priceToPrecision(symbol, takeProfitLimitPrice); // limit tp order
1655
+ }
1656
+ else {
1657
+ request['tpOrdPx'] = '-1'; // market tp order
1658
+ }
1659
+ const takeProfitTriggerPriceType = this.safeString2(takeProfit, 'triggerPriceType', 'tpTriggerPxType', 'last');
1660
+ if (takeProfitTriggerPriceType !== undefined) {
1661
+ if ((takeProfitTriggerPriceType !== 'last') && (takeProfitTriggerPriceType !== 'index') && (takeProfitTriggerPriceType !== 'mark')) {
1662
+ throw new InvalidOrder(this.id + ' createOrder() take profit trigger price type must be one of "last", "index" or "mark"');
1663
+ }
1664
+ request['tpTriggerPxType'] = takeProfitTriggerPriceType;
1665
+ }
1666
+ }
1667
+ }
1668
+ else if (trigger) {
1669
+ request['ordType'] = 'trigger';
1670
+ request['triggerPx'] = this.priceToPrecision(symbol, triggerPrice);
1671
+ request['orderPx'] = isMarketOrder ? '-1' : this.priceToPrecision(symbol, price);
1672
+ }
1673
+ else if (conditional) {
1674
+ request['ordType'] = 'conditional';
1675
+ const twoWayCondition = ((takeProfitPrice !== undefined) && (stopLossPrice !== undefined));
1676
+ // if TP and SL are sent together
1677
+ // as ordType 'conditional' only stop-loss order will be applied
1678
+ if (twoWayCondition) {
1679
+ request['ordType'] = 'oco';
1680
+ }
1681
+ if (takeProfitPrice !== undefined) {
1682
+ request['tpTriggerPx'] = this.priceToPrecision(symbol, takeProfitPrice);
1683
+ request['tpOrdPx'] = (tpOrdPx === undefined) ? '-1' : this.priceToPrecision(symbol, tpOrdPx);
1684
+ request['tpTriggerPxType'] = tpTriggerPxType;
1685
+ }
1686
+ if (stopLossPrice !== undefined) {
1687
+ request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossPrice);
1688
+ request['slOrdPx'] = (slOrdPx === undefined) ? '-1' : this.priceToPrecision(symbol, slOrdPx);
1689
+ request['slTriggerPxType'] = slTriggerPxType;
1690
+ }
1691
+ }
1692
+ if (clientOrderId === undefined) {
1693
+ const brokerId = this.safeString(this.options, 'brokerId');
1694
+ if (brokerId !== undefined) {
1695
+ request['clOrdId'] = brokerId + this.uuid16();
1696
+ request['tag'] = brokerId;
1697
+ }
1698
+ }
1699
+ else {
1700
+ request['clOrdId'] = clientOrderId;
1701
+ params = this.omit(params, ['clOrdId', 'clientOrderId']);
1702
+ }
1703
+ return this.extend(request, params);
1704
+ }
1705
+ /**
1706
+ * @method
1707
+ * @name okcoin#cancelOrder
1708
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-order
1709
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
1710
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1711
+ * @description cancels an open order
1712
+ * @param {string} id order id
1713
+ * @param {string} symbol unified symbol of the market the order was made in
1714
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1715
+ * @param {bool} [params.trigger] True if cancel trigger or conditional orders
1716
+ * @param {bool} [params.advanced] True if canceling advanced orders only
1717
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1718
+ */
1719
+ async cancelOrder(id, symbol = undefined, params = {}) {
1720
+ if (symbol === undefined) {
1721
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
1722
+ }
1723
+ await this.loadMarkets();
1724
+ const trigger = this.safeValue2(params, 'stop', 'trigger');
1725
+ const advanced = this.safeValue(params, 'advanced');
1726
+ if (trigger || advanced) {
1727
+ const orderInner = await this.cancelOrders([id], symbol, params);
1728
+ return this.safeDict(orderInner, 0);
1729
+ }
1730
+ const market = this.market(symbol);
1731
+ const request = {
1732
+ 'instId': market['id'],
1733
+ // 'ordId': id, // either ordId or clOrdId is required
1734
+ // 'clOrdId': clientOrderId,
1735
+ };
1736
+ const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');
1737
+ if (clientOrderId !== undefined) {
1738
+ request['clOrdId'] = clientOrderId;
1739
+ }
1740
+ else {
1741
+ request['ordId'] = id.toString();
1742
+ }
1743
+ const query = this.omit(params, ['clOrdId', 'clientOrderId']);
1744
+ const response = await this.privatePostTradeCancelOrder(this.extend(request, query));
1745
+ // {"code":"0","data":[{"clOrdId":"","ordId":"317251910906576896","sCode":"0","sMsg":""}],"msg":""}
1746
+ const data = this.safeValue(response, 'data', []);
1747
+ const order = this.safeDict(data, 0);
1748
+ return this.parseOrder(order, market);
1749
+ }
1750
+ parseIds(ids) {
1751
+ /**
1752
+ * @ignore
1753
+ * @method
1754
+ * @name okx#parseIds
1755
+ * @param {string[]|string} ids order ids
1756
+ * @returns {string[]} list of order ids
1757
+ */
1758
+ if (typeof ids === 'string') {
1759
+ return ids.split(',');
1760
+ }
1761
+ else {
1762
+ return ids;
1763
+ }
1764
+ }
1765
+ /**
1766
+ * @method
1767
+ * @name okcoin#cancelOrders
1768
+ * @description cancel multiple orders
1769
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-multiple-orders
1770
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
1771
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1772
+ * @param {string[]} ids order ids
1773
+ * @param {string} symbol unified market symbol
1774
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1775
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1776
+ */
1777
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1778
+ if (symbol === undefined) {
1779
+ throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
1780
+ }
1781
+ await this.loadMarkets();
1782
+ const trigger = this.safeValue2(params, 'stop', 'trigger');
1783
+ const advanced = this.safeValue(params, 'advanced');
1784
+ params = this.omit(params, ['stop', 'trigger', 'advanced']);
1785
+ const market = this.market(symbol);
1786
+ const request = [];
1787
+ const clientOrderIds = this.parseIds(this.safeValue2(params, 'clOrdId', 'clientOrderId'));
1788
+ const algoIds = this.parseIds(this.safeValue(params, 'algoId'));
1789
+ if (clientOrderIds === undefined) {
1790
+ ids = this.parseIds(ids);
1791
+ if (algoIds !== undefined) {
1792
+ for (let i = 0; i < algoIds.length; i++) {
1793
+ request.push({
1794
+ 'algoId': algoIds[i],
1795
+ 'instId': market['id'],
1796
+ });
1797
+ }
1798
+ }
1799
+ for (let i = 0; i < ids.length; i++) {
1800
+ if (trigger || advanced) {
1801
+ request.push({
1802
+ 'algoId': ids[i],
1803
+ 'instId': market['id'],
1804
+ });
1805
+ }
1806
+ else {
1807
+ request.push({
1808
+ 'ordId': ids[i],
1809
+ 'instId': market['id'],
1810
+ });
1811
+ }
1812
+ }
1813
+ }
1814
+ else {
1815
+ for (let i = 0; i < clientOrderIds.length; i++) {
1816
+ request.push({
1817
+ 'instId': market['id'],
1818
+ 'clOrdId': clientOrderIds[i],
1819
+ });
1820
+ }
1821
+ }
1822
+ let response = undefined;
1823
+ if (trigger) {
1824
+ response = await this.privatePostTradeCancelAlgos(request);
1825
+ }
1826
+ else if (advanced) {
1827
+ response = await this.privatePostTradeCancelAdvanceAlgos(request);
1828
+ }
1829
+ else {
1830
+ response = await this.privatePostTradeCancelBatchOrders(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT
1831
+ }
1832
+ //
1833
+ // {
1834
+ // "code": "0",
1835
+ // "data": [
1836
+ // {
1837
+ // "clOrdId": "e123456789ec4dBC1123456ba123b45e",
1838
+ // "ordId": "405071912345641543",
1839
+ // "sCode": "0",
1840
+ // "sMsg": ""
1841
+ // },
1842
+ // ...
1843
+ // ],
1844
+ // "msg": ""
1845
+ // }
1846
+ //
1847
+ //
1848
+ const ordersData = this.safeList(response, 'data', []);
1849
+ return this.parseOrders(ordersData, market, undefined, undefined, params);
1850
+ }
1851
+ parseOrderStatus(status) {
1852
+ const statuses = {
1853
+ 'canceled': 'canceled',
1854
+ 'live': 'open',
1855
+ 'partially_filled': 'open',
1856
+ 'filled': 'closed',
1857
+ 'effective': 'closed',
1858
+ };
1859
+ return this.safeString(statuses, status, status);
1860
+ }
1861
+ parseOrder(order, market = undefined) {
1862
+ //
1863
+ // createOrder
1864
+ //
1865
+ // {
1866
+ // "clOrdId": "oktswap6",
1867
+ // "ordId": "312269865356374016",
1868
+ // "tag": "",
1869
+ // "sCode": "0",
1870
+ // "sMsg": ""
1871
+ // }
1872
+ //
1873
+ // editOrder
1874
+ //
1875
+ // {
1876
+ // "clOrdId": "e847386590ce4dBCc1a045253497a547",
1877
+ // "ordId": "559176536793178112",
1878
+ // "reqId": "",
1879
+ // "sCode": "0",
1880
+ // "sMsg": ""
1881
+ // }
1882
+ //
1883
+ // Spot and Swap fetchOrder, fetchOpenOrders
1884
+ //
1885
+ // {
1886
+ // "accFillSz": "0",
1887
+ // "avgPx": "",
1888
+ // "cTime": "1621910749815",
1889
+ // "category": "normal",
1890
+ // "ccy": "",
1891
+ // "clOrdId": "",
1892
+ // "fee": "0",
1893
+ // "feeCcy": "ETH",
1894
+ // "fillPx": "",
1895
+ // "fillSz": "0",
1896
+ // "fillTime": "",
1897
+ // "instId": "ETH-USDT",
1898
+ // "instType": "SPOT",
1899
+ // "lever": "",
1900
+ // "ordId": "317251910906576896",
1901
+ // "ordType": "limit",
1902
+ // "pnl": "0",
1903
+ // "posSide": "net",
1904
+ // "px": "2000",
1905
+ // "rebate": "0",
1906
+ // "rebateCcy": "USDT",
1907
+ // "side": "buy",
1908
+ // "slOrdPx": "",
1909
+ // "slTriggerPx": "",
1910
+ // "state": "live",
1911
+ // "sz": "0.001",
1912
+ // "tag": "",
1913
+ // "tdMode": "cash",
1914
+ // "tpOrdPx": "",
1915
+ // "tpTriggerPx": "",
1916
+ // "tradeId": "",
1917
+ // "uTime": "1621910749815"
1918
+ // }
1919
+ //
1920
+ // Algo Order fetchOpenOrders, fetchCanceledOrders, fetchClosedOrders
1921
+ //
1922
+ // {
1923
+ // "activePx": "",
1924
+ // "activePxType": "",
1925
+ // "actualPx": "",
1926
+ // "actualSide": "buy",
1927
+ // "actualSz": "0",
1928
+ // "algoId": "431375349042380800",
1929
+ // "cTime": "1649119897778",
1930
+ // "callbackRatio": "",
1931
+ // "callbackSpread": "",
1932
+ // "ccy": "",
1933
+ // "ctVal": "0.01",
1934
+ // "instId": "BTC-USDT-SWAP",
1935
+ // "instType": "SWAP",
1936
+ // "last": "46538.9",
1937
+ // "lever": "125",
1938
+ // "moveTriggerPx": "",
1939
+ // "notionalUsd": "467.059",
1940
+ // "ordId": "",
1941
+ // "ordPx": "50000",
1942
+ // "ordType": "trigger",
1943
+ // "posSide": "long",
1944
+ // "pxLimit": "",
1945
+ // "pxSpread": "",
1946
+ // "pxVar": "",
1947
+ // "side": "buy",
1948
+ // "slOrdPx": "",
1949
+ // "slTriggerPx": "",
1950
+ // "slTriggerPxType": "",
1951
+ // "state": "live",
1952
+ // "sz": "1",
1953
+ // "szLimit": "",
1954
+ // "tag": "",
1955
+ // "tdMode": "isolated",
1956
+ // "tgtCcy": "",
1957
+ // "timeInterval": "",
1958
+ // "tpOrdPx": "",
1959
+ // "tpTriggerPx": "",
1960
+ // "tpTriggerPxType": "",
1961
+ // "triggerPx": "50000",
1962
+ // "triggerPxType": "last",
1963
+ // "triggerTime": "",
1964
+ // "uly": "BTC-USDT"
1965
+ // }
1966
+ //
1967
+ const id = this.safeString2(order, 'algoId', 'ordId');
1968
+ const timestamp = this.safeInteger(order, 'cTime');
1969
+ const lastUpdateTimestamp = this.safeInteger(order, 'uTime');
1970
+ const lastTradeTimestamp = this.safeInteger(order, 'fillTime');
1971
+ const side = this.safeString(order, 'side');
1972
+ let type = this.safeString(order, 'ordType');
1973
+ let postOnly = undefined;
1974
+ let timeInForce = undefined;
1975
+ if (type === 'post_only') {
1976
+ postOnly = true;
1977
+ type = 'limit';
1978
+ }
1979
+ else if (type === 'fok') {
1980
+ timeInForce = 'FOK';
1981
+ type = 'limit';
1982
+ }
1983
+ else if (type === 'ioc') {
1984
+ timeInForce = 'IOC';
1985
+ type = 'limit';
1986
+ }
1987
+ const marketId = this.safeString(order, 'instId');
1988
+ market = this.safeMarket(marketId, market);
1989
+ const symbol = this.safeSymbol(marketId, market, '-');
1990
+ const filled = this.safeString(order, 'accFillSz');
1991
+ const price = this.safeString2(order, 'px', 'ordPx');
1992
+ const average = this.safeString(order, 'avgPx');
1993
+ const status = this.parseOrderStatus(this.safeString(order, 'state'));
1994
+ const feeCostString = this.safeString(order, 'fee');
1995
+ let amount = undefined;
1996
+ let cost = undefined;
1997
+ // spot market buy: "sz" can refer either to base currency units or to quote currency units
1998
+ // see documentation: https://www.okx.com/docs-v5/en/#rest-api-trade-place-order
1999
+ const defaultTgtCcy = this.safeString(this.options, 'tgtCcy', 'base_ccy');
2000
+ const tgtCcy = this.safeString(order, 'tgtCcy', defaultTgtCcy);
2001
+ if ((side === 'buy') && (type === 'market') && (tgtCcy === 'quote_ccy')) {
2002
+ // "sz" refers to the cost
2003
+ cost = this.safeString(order, 'sz');
2004
+ }
2005
+ else {
2006
+ // "sz" refers to the trade currency amount
2007
+ amount = this.safeString(order, 'sz');
2008
+ }
2009
+ let fee = undefined;
2010
+ if (feeCostString !== undefined) {
2011
+ const feeCostSigned = Precise.stringNeg(feeCostString);
2012
+ const feeCurrencyId = this.safeString(order, 'feeCcy');
2013
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
2014
+ fee = {
2015
+ 'cost': this.parseNumber(feeCostSigned),
2016
+ 'currency': feeCurrencyCode,
2017
+ };
2018
+ }
2019
+ let clientOrderId = this.safeString(order, 'clOrdId');
2020
+ if ((clientOrderId !== undefined) && (clientOrderId.length < 1)) {
2021
+ clientOrderId = undefined; // fix empty clientOrderId string
2022
+ }
2023
+ const stopLossPrice = this.safeNumber2(order, 'slTriggerPx', 'slOrdPx');
2024
+ const takeProfitPrice = this.safeNumber2(order, 'tpTriggerPx', 'tpOrdPx');
2025
+ const reduceOnlyRaw = this.safeString(order, 'reduceOnly');
2026
+ let reduceOnly = false;
2027
+ if (reduceOnly !== undefined) {
2028
+ reduceOnly = (reduceOnlyRaw === 'true');
2029
+ }
2030
+ return this.safeOrder({
2031
+ 'info': order,
2032
+ 'id': id,
2033
+ 'clientOrderId': clientOrderId,
2034
+ 'timestamp': timestamp,
2035
+ 'datetime': this.iso8601(timestamp),
2036
+ 'lastTradeTimestamp': lastTradeTimestamp,
2037
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
2038
+ 'symbol': symbol,
2039
+ 'type': type,
2040
+ 'timeInForce': timeInForce,
2041
+ 'postOnly': postOnly,
2042
+ 'side': side,
2043
+ 'price': price,
2044
+ 'stopLossPrice': stopLossPrice,
2045
+ 'takeProfitPrice': takeProfitPrice,
2046
+ 'triggerPrice': this.safeNumberN(order, ['triggerPx', 'moveTriggerPx']),
2047
+ 'average': average,
2048
+ 'cost': cost,
2049
+ 'amount': amount,
2050
+ 'filled': filled,
2051
+ 'remaining': undefined,
2052
+ 'status': status,
2053
+ 'fee': fee,
2054
+ 'trades': undefined,
2055
+ 'reduceOnly': reduceOnly,
2056
+ }, market);
2057
+ }
2058
+ /**
2059
+ * @method
2060
+ * @name okcoin#fetchOrder
2061
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-details
2062
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
2063
+ * @description fetches information on an order made by the user
2064
+ * @param {string} id order id
2065
+ * @param {string} symbol unified symbol of the market the order was made in
2066
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2067
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2068
+ */
2069
+ async fetchOrder(id, symbol = undefined, params = {}) {
2070
+ if (symbol === undefined) {
2071
+ throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
2072
+ }
2073
+ await this.loadMarkets();
2074
+ const market = this.market(symbol);
2075
+ const request = {
2076
+ 'instId': market['id'],
2077
+ // 'clOrdId': 'abcdef12345', // optional, [a-z0-9]{1,32}
2078
+ // 'ordId': id,
2079
+ };
2080
+ const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');
2081
+ const trigger = this.safeValue2(params, 'stop', 'trigger');
2082
+ if (trigger) {
2083
+ if (clientOrderId !== undefined) {
2084
+ request['algoClOrdId'] = clientOrderId;
2085
+ }
2086
+ else {
2087
+ request['algoId'] = id;
2088
+ }
2089
+ }
2090
+ else {
2091
+ if (clientOrderId !== undefined) {
2092
+ request['clOrdId'] = clientOrderId;
2093
+ }
2094
+ else {
2095
+ request['ordId'] = id;
2096
+ }
2097
+ }
2098
+ const query = this.omit(params, ['clientOrderId', 'stop', 'trigger']);
2099
+ let response = undefined;
2100
+ if (trigger) {
2101
+ response = await this.privateGetTradeOrderAlgo(this.extend(request, query));
2102
+ }
2103
+ else {
2104
+ response = await this.privateGetTradeOrder(this.extend(request, query));
2105
+ }
2106
+ const data = this.safeValue(response, 'data', []);
2107
+ const order = this.safeDict(data, 0);
2108
+ return this.parseOrder(order);
2109
+ }
2110
+ /**
2111
+ * @method
2112
+ * @name okcoin#fetchOpenOrders
2113
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-list
2114
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
2115
+ * @description fetch all unfilled currently open orders
2116
+ * @param {string} symbol unified market symbol
2117
+ * @param {int} [since] the earliest time in ms to fetch open orders for
2118
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
2119
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2120
+ * @param {bool} [params.trigger] True if fetching trigger or conditional orders
2121
+ * @param {string} [params.ordType] "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
2122
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2123
+ */
2124
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2125
+ await this.loadMarkets();
2126
+ const request = {
2127
+ // 'instId': market['id'],
2128
+ // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated, stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap
2129
+ // 'state': 'live', // live, partially_filled
2130
+ // 'after': orderId,
2131
+ // 'before': orderId,
2132
+ // 'limit': limit, // default 100, max 100
2133
+ };
2134
+ let market = undefined;
2135
+ if (symbol !== undefined) {
2136
+ market = this.market(symbol);
2137
+ request['instId'] = market['id'];
2138
+ }
2139
+ if (limit !== undefined) {
2140
+ request['limit'] = limit; // default 100, max 100
2141
+ }
2142
+ const ordType = this.safeString(params, 'ordType');
2143
+ const trigger = this.safeValue(params, 'stop') || (this.safeString(params, 'ordType') !== undefined);
2144
+ if (trigger && (ordType === undefined)) {
2145
+ request['ordType'] = 'trigger'; // default to trigger
2146
+ }
2147
+ params = this.omit(params, ['stop']);
2148
+ let response = undefined;
2149
+ if (trigger) {
2150
+ response = await this.privateGetTradeOrdersAlgoPending(this.extend(request, params));
2151
+ }
2152
+ else {
2153
+ response = await this.privateGetTradeOrdersPending(this.extend(request, params));
2154
+ }
2155
+ const data = this.safeList(response, 'data', []);
2156
+ return this.parseOrders(data, market, since, limit);
2157
+ }
2158
+ /**
2159
+ * @method
2160
+ * @name okcoin#fetchClosedOrders
2161
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-history
2162
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-3-months
2163
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-7-days
2164
+ * @description fetches information on multiple closed orders made by the user
2165
+ * @param {string} symbol unified market symbol of the market orders were made in
2166
+ * @param {int} [since] the earliest time in ms to fetch orders for
2167
+ * @param {int} [limit] the maximum number of order structures to retrieve
2168
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2169
+ * @param {bool} [params.trigger] True if fetching trigger or conditional orders
2170
+ * @param {string} [params.ordType] "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
2171
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2172
+ */
2173
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2174
+ await this.loadMarkets();
2175
+ const request = {
2176
+ 'instType': 'SPOT',
2177
+ };
2178
+ let market = undefined;
2179
+ if (symbol !== undefined) {
2180
+ market = this.market(symbol);
2181
+ request['instId'] = market['id'];
2182
+ }
2183
+ const ordType = this.safeString(params, 'ordType');
2184
+ const trigger = this.safeValue(params, 'stop') || (this.safeString(params, 'ordType') !== undefined);
2185
+ if (trigger && (ordType === undefined)) {
2186
+ request['ordType'] = 'trigger'; // default to trigger
2187
+ }
2188
+ params = this.omit(params, ['stop']);
2189
+ let response = undefined;
2190
+ if (trigger) {
2191
+ response = await this.privateGetTradeOrdersAlgoHistory(this.extend(request, params));
2192
+ }
2193
+ else {
2194
+ let method = undefined;
2195
+ [method, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'method', 'privateGetTradeOrdersHistory');
2196
+ if (method === 'privateGetTradeOrdersHistory') {
2197
+ response = await this.privateGetTradeOrdersHistory(this.extend(request, params));
2198
+ }
2199
+ else {
2200
+ response = await this.privateGetTradeOrdersHistoryArchive(this.extend(request, params));
2201
+ }
2202
+ }
2203
+ // {
2204
+ // "code": "0",
2205
+ // "data": [
2206
+ // {
2207
+ // "accFillSz": "0",
2208
+ // "avgPx": "",
2209
+ // "cTime": "1621910749815",
2210
+ // "category": "normal",
2211
+ // "ccy": "",
2212
+ // "clOrdId": "",
2213
+ // "fee": "0",
2214
+ // "feeCcy": "ETH",
2215
+ // "fillPx": "",
2216
+ // "fillSz": "0",
2217
+ // "fillTime": "",
2218
+ // "instId": "ETH-USDT",
2219
+ // "instType": "SPOT",
2220
+ // "lever": "",
2221
+ // "ordId": "317251910906576896",
2222
+ // "ordType": "limit",
2223
+ // "pnl": "0",
2224
+ // "posSide": "net",
2225
+ // "px":"20 00",
2226
+ // "rebate": "0",
2227
+ // "rebateCcy": "USDT",
2228
+ // "side": "buy",
2229
+ // "slOrdPx": "",
2230
+ // "slTriggerPx": "",
2231
+ // "state": "live",
2232
+ // "sz":"0. 001",
2233
+ // "tag": "",
2234
+ // "tdMode": "cash",
2235
+ // "tpOrdPx": "",
2236
+ // "tpTriggerPx": "",
2237
+ // "tradeId": "",
2238
+ // "uTime": "1621910749815"
2239
+ // }
2240
+ // ],
2241
+ // "msg":""
2242
+ // }
2243
+ //
2244
+ const data = this.safeList(response, 'data', []);
2245
+ return this.parseOrders(data, market, since, limit);
2246
+ }
2247
+ parseDepositAddress(depositAddress, currency = undefined) {
2248
+ //
2249
+ // {
2250
+ // "addr": "okbtothemoon",
2251
+ // "memo": "971668", // may be missing
2252
+ // "tag":"52055", // may be missing
2253
+ // "pmtId": "", // may be missing
2254
+ // "ccy": "BTC",
2255
+ // "to": "6", // 1 SPOT, 3 FUTURES, 6 FUNDING, 9 SWAP, 12 OPTION, 18 Unified account
2256
+ // "selected": true
2257
+ // }
2258
+ //
2259
+ // {
2260
+ // "ccy":"usdt-erc20",
2261
+ // "to":"6",
2262
+ // "addr":"0x696abb81974a8793352cbd33aadcf78eda3cfdfa",
2263
+ // "selected":true
2264
+ // }
2265
+ //
2266
+ // {
2267
+ // "chain": "ETH-OKExChain",
2268
+ // "addrEx": { "comment": "6040348" }, // some currencies like TON may have this field,
2269
+ // "ctAddr": "72315c",
2270
+ // "ccy": "ETH",
2271
+ // "to": "6",
2272
+ // "addr": "0x1c9f2244d1ccaa060bd536827c18925db10db102",
2273
+ // "selected": true
2274
+ // }
2275
+ //
2276
+ const address = this.safeString(depositAddress, 'addr');
2277
+ let tag = this.safeStringN(depositAddress, ['tag', 'pmtId', 'memo']);
2278
+ if (tag === undefined) {
2279
+ const addrEx = this.safeValue(depositAddress, 'addrEx', {});
2280
+ tag = this.safeString(addrEx, 'comment');
2281
+ }
2282
+ const currencyId = this.safeString(depositAddress, 'ccy');
2283
+ currency = this.safeCurrency(currencyId, currency);
2284
+ const code = currency['code'];
2285
+ const chain = this.safeString(depositAddress, 'chain');
2286
+ const networkId = chain.replace(currencyId + '-', '');
2287
+ const network = this.networkIdToCode(networkId);
2288
+ // inconsistent naming responses from exchange
2289
+ // with respect to network naming provided in currency info vs address chain-names and ids
2290
+ //
2291
+ // response from address endpoint:
2292
+ // {
2293
+ // "chain": "USDT-Polygon",
2294
+ // "ctAddr": "",
2295
+ // "ccy": "USDT",
2296
+ // "to":"6" ,
2297
+ // "addr": "0x1903441e386cc49d937f6302955b5feb4286dcfa",
2298
+ // "selected": true
2299
+ // }
2300
+ // network information from currency['networks'] field:
2301
+ // Polygon: {
2302
+ // "info": {
2303
+ // "canDep": false,
2304
+ // "canInternal": false,
2305
+ // "canWd": false,
2306
+ // "ccy": "USDT",
2307
+ // "chain": "USDT-Polygon-Bridge",
2308
+ // "mainNet": false,
2309
+ // "maxFee": "26.879528",
2310
+ // "minFee": "13.439764",
2311
+ // "minWd": "0.001",
2312
+ // "name": ''
2313
+ // },
2314
+ // "id": "USDT-Polygon-Bridge",
2315
+ // "network": "Polygon",
2316
+ // "active": false,
2317
+ // "deposit": false,
2318
+ // "withdraw": false,
2319
+ // "fee": 13.439764,
2320
+ // "precision": undefined,
2321
+ // "limits": {
2322
+ // "withdraw": {
2323
+ // "min": 0.001,
2324
+ // "max": undefined
2325
+ // }
2326
+ // }
2327
+ // },
2328
+ //
2329
+ this.checkAddress(address);
2330
+ return {
2331
+ 'info': depositAddress,
2332
+ 'currency': code,
2333
+ 'network': network,
2334
+ 'address': address,
2335
+ 'tag': tag,
2336
+ };
2337
+ }
2338
+ /**
2339
+ * @method
2340
+ * @name okcoin#fetchDepositAddress
2341
+ * @description fetch the deposit address for a currency associated with this account
2342
+ * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
2343
+ * @param {string} code unified currency code
2344
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2345
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2346
+ */
2347
+ async fetchDepositAddress(code, params = {}) {
2348
+ await this.loadMarkets();
2349
+ const defaultNetwork = this.safeString(this.options, 'defaultNetwork', 'ERC20');
2350
+ const networkId = this.safeString(params, 'network', defaultNetwork);
2351
+ const networkCode = this.networkIdToCode(networkId);
2352
+ params = this.omit(params, 'network');
2353
+ const response = await this.fetchDepositAddressesByNetwork(code, params);
2354
+ const result = this.safeValue(response, networkCode);
2355
+ if (result === undefined) {
2356
+ throw new InvalidAddress(this.id + ' fetchDepositAddress() cannot find ' + networkCode + ' deposit address for ' + code);
2357
+ }
2358
+ return result;
2359
+ }
2360
+ /**
2361
+ * @method
2362
+ * @name okcoin#fetchDepositAddressesByNetwork
2363
+ * @description fetch a dictionary of addresses for a currency, indexed by network
2364
+ * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
2365
+ * @param {string} code unified currency code of the currency for the deposit address
2366
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2367
+ * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network
2368
+ */
2369
+ async fetchDepositAddressesByNetwork(code, params = {}) {
2370
+ await this.loadMarkets();
2371
+ const currency = this.currency(code);
2372
+ const request = {
2373
+ 'ccy': currency['id'],
2374
+ };
2375
+ const response = await this.privateGetAssetDepositAddress(this.extend(request, params));
2376
+ //
2377
+ // {
2378
+ // "code": "0",
2379
+ // "msg": "",
2380
+ // "data": [
2381
+ // {
2382
+ // "addr": "okbtothemoon",
2383
+ // "memo": "971668", // may be missing
2384
+ // "tag":"52055", // may be missing
2385
+ // "pmtId": "", // may be missing
2386
+ // "ccy": "BTC",
2387
+ // "to": "6", // 1 SPOT, 3 FUTURES, 6 FUNDING, 9 SWAP, 12 OPTION, 18 Unified account
2388
+ // "selected": true
2389
+ // },
2390
+ // // {"ccy":"usdt-erc20","to":"6","addr":"0x696abb81974a8793352cbd33aadcf78eda3cfdfa","selected":true},
2391
+ // // {"ccy":"usdt-trc20","to":"6","addr":"TRrd5SiSZrfQVRKm4e9SRSbn2LNTYqCjqx","selected":true},
2392
+ // // {"ccy":"usdt_okexchain","to":"6","addr":"0x696abb81974a8793352cbd33aadcf78eda3cfdfa","selected":true},
2393
+ // // {"ccy":"usdt_kip20","to":"6","addr":"0x696abb81974a8793352cbd33aadcf78eda3cfdfa","selected":true},
2394
+ // ]
2395
+ // }
2396
+ //
2397
+ const data = this.safeValue(response, 'data', []);
2398
+ const filtered = this.filterBy(data, 'selected', true);
2399
+ const parsed = this.parseDepositAddresses(filtered, [currency['code']], false);
2400
+ return this.indexBy(parsed, 'network');
2401
+ }
2402
+ /**
2403
+ * @method
2404
+ * @name okcoin#transfer
2405
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-funding-funds-transfer
2406
+ * @description transfer currency internally between wallets on the same account
2407
+ * @param {string} code unified currency code
2408
+ * @param {float} amount amount to transfer
2409
+ * @param {string} fromAccount account to transfer from
2410
+ * @param {string} toAccount account to transfer to
2411
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2412
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
2413
+ */
2414
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
2415
+ await this.loadMarkets();
2416
+ const currency = this.currency(code);
2417
+ const accountsByType = this.safeValue(this.options, 'accountsByType', {});
2418
+ const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
2419
+ const toId = this.safeString(accountsByType, toAccount, toAccount);
2420
+ const request = {
2421
+ 'ccy': currency['id'],
2422
+ 'amt': this.currencyToPrecision(code, amount),
2423
+ 'type': '0',
2424
+ 'from': fromId,
2425
+ 'to': toId, // beneficiary account, 6: Funding account, 18: Trading account
2426
+ // 'subAcct': 'sub-account-name', // optional, only required when type is 1, 2 or 4
2427
+ // 'loanTrans': false, // Whether or not borrowed coins can be transferred out under Multi-currency margin and Portfolio margin. The default is false
2428
+ // 'clientId': 'client-supplied id', // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters
2429
+ // 'omitPosRisk': false, // Ignore position risk. Default is false. Applicable to Portfolio margin
2430
+ };
2431
+ if (fromId === 'master') {
2432
+ request['type'] = '1';
2433
+ request['subAcct'] = toId;
2434
+ request['from'] = this.safeString(params, 'from', '6');
2435
+ request['to'] = this.safeString(params, 'to', '6');
2436
+ }
2437
+ else if (toId === 'master') {
2438
+ request['type'] = '2';
2439
+ request['subAcct'] = fromId;
2440
+ request['from'] = this.safeString(params, 'from', '6');
2441
+ request['to'] = this.safeString(params, 'to', '6');
2442
+ }
2443
+ const response = await this.privatePostAssetTransfer(this.extend(request, params));
2444
+ //
2445
+ // {
2446
+ // "code": "0",
2447
+ // "msg": "",
2448
+ // "data": [
2449
+ // {
2450
+ // "transId": "754147",
2451
+ // "ccy": "USDT",
2452
+ // "from": "6",
2453
+ // "amt": "0.1",
2454
+ // "to": "18"
2455
+ // }
2456
+ // ]
2457
+ // }
2458
+ //
2459
+ const data = this.safeValue(response, 'data', []);
2460
+ const rawTransfer = this.safeDict(data, 0, {});
2461
+ return this.parseTransfer(rawTransfer, currency);
2462
+ }
2463
+ parseTransfer(transfer, currency = undefined) {
2464
+ //
2465
+ // transfer
2466
+ //
2467
+ // {
2468
+ // "transId": "754147",
2469
+ // "ccy": "USDT",
2470
+ // "from": "6",
2471
+ // "amt": "0.1",
2472
+ // "to": "18"
2473
+ // }
2474
+ //
2475
+ // fetchTransfer
2476
+ //
2477
+ // {
2478
+ // "amt": "5",
2479
+ // "ccy": "USDT",
2480
+ // "from": "18",
2481
+ // "instId": "",
2482
+ // "state": "success",
2483
+ // "subAcct": "",
2484
+ // "to": "6",
2485
+ // "toInstId": "",
2486
+ // "transId": "464424732",
2487
+ // "type": "0"
2488
+ // }
2489
+ //
2490
+ // fetchTransfers
2491
+ //
2492
+ // {
2493
+ // "bal": "70.6874353780312913",
2494
+ // "balChg": "-4.0000000000000000", // negative means "to funding", positive meand "from funding"
2495
+ // "billId": "588900695232225299",
2496
+ // "ccy": "USDT",
2497
+ // "execType": "",
2498
+ // "fee": "",
2499
+ // "from": "18",
2500
+ // "instId": "",
2501
+ // "instType": "",
2502
+ // "mgnMode": "",
2503
+ // "notes": "To Funding Account",
2504
+ // "ordId": "",
2505
+ // "pnl": "",
2506
+ // "posBal": "",
2507
+ // "posBalChg": "",
2508
+ // "price": "0",
2509
+ // "subType": "12",
2510
+ // "sz": "-4",
2511
+ // "to": "6",
2512
+ // "ts": "1686676866989",
2513
+ // "type": "1"
2514
+ // }
2515
+ //
2516
+ const id = this.safeString2(transfer, 'transId', 'billId');
2517
+ const currencyId = this.safeString(transfer, 'ccy');
2518
+ const code = this.safeCurrencyCode(currencyId, currency);
2519
+ let amount = this.safeNumber(transfer, 'amt');
2520
+ const fromAccountId = this.safeString(transfer, 'from');
2521
+ const toAccountId = this.safeString(transfer, 'to');
2522
+ const accountsById = this.safeValue(this.options, 'accountsById', {});
2523
+ const timestamp = this.safeInteger(transfer, 'ts', this.milliseconds());
2524
+ const balanceChange = this.safeString(transfer, 'sz');
2525
+ if (balanceChange !== undefined) {
2526
+ amount = this.parseNumber(Precise.stringAbs(balanceChange));
2527
+ }
2528
+ return {
2529
+ 'info': transfer,
2530
+ 'id': id,
2531
+ 'timestamp': timestamp,
2532
+ 'datetime': this.iso8601(timestamp),
2533
+ 'currency': code,
2534
+ 'amount': amount,
2535
+ 'fromAccount': this.safeString(accountsById, fromAccountId),
2536
+ 'toAccount': this.safeString(accountsById, toAccountId),
2537
+ 'status': this.parseTransferStatus(this.safeString(transfer, 'state')),
2538
+ };
2539
+ }
2540
+ parseTransferStatus(status) {
2541
+ const statuses = {
2542
+ 'success': 'ok',
2543
+ };
2544
+ return this.safeString(statuses, status, status);
2545
+ }
2546
+ /**
2547
+ * @method
2548
+ * @name okcoin#withdraw
2549
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-funding-withdrawal
2550
+ * @description make a withdrawal
2551
+ * @param {string} code unified currency code
2552
+ * @param {float} amount the amount to withdraw
2553
+ * @param {string} address the address to withdraw to
2554
+ * @param {string} tag
2555
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2556
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2557
+ */
2558
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2559
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2560
+ this.checkAddress(address);
2561
+ await this.loadMarkets();
2562
+ const currency = this.currency(code);
2563
+ if ((tag !== undefined) && (tag.length > 0)) {
2564
+ address = address + ':' + tag;
2565
+ }
2566
+ const request = {
2567
+ 'ccy': currency['id'],
2568
+ 'toAddr': address,
2569
+ 'dest': '4',
2570
+ 'amt': this.numberToString(amount),
2571
+ };
2572
+ let network = this.safeString(params, 'network'); // this line allows the user to specify either ERC20 or ETH
2573
+ if (network !== undefined) {
2574
+ const networks = this.safeValue(this.options, 'networks', {});
2575
+ network = this.safeString(networks, network.toUpperCase(), network); // handle ETH>ERC20 alias
2576
+ request['chain'] = currency['id'] + '-' + network;
2577
+ params = this.omit(params, 'network');
2578
+ }
2579
+ let fee = this.safeString(params, 'fee');
2580
+ if (fee === undefined) {
2581
+ const targetNetwork = this.safeValue(currency['networks'], this.networkIdToCode(network), {});
2582
+ fee = this.safeString(targetNetwork, 'fee');
2583
+ if (fee === undefined) {
2584
+ throw new ArgumentsRequired(this.id + ' withdraw() requires a "fee" string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set "0". Withdrawing to external digital asset address requires network transaction fee.');
2585
+ }
2586
+ }
2587
+ request['fee'] = this.numberToString(fee); // withdrawals to OKCoin or OKX are fee-free, please set 0
2588
+ const response = await this.privatePostAssetWithdrawal(this.extend(request, params));
2589
+ //
2590
+ // {
2591
+ // "code": "0",
2592
+ // "msg": "",
2593
+ // "data": [
2594
+ // {
2595
+ // "amt": "0.1",
2596
+ // "wdId": "67485",
2597
+ // "ccy": "BTC"
2598
+ // }
2599
+ // ]
2600
+ // }
2601
+ //
2602
+ const data = this.safeValue(response, 'data', []);
2603
+ const transaction = this.safeDict(data, 0);
2604
+ return this.parseTransaction(transaction, currency);
2605
+ }
2606
+ /**
2607
+ * @method
2608
+ * @name okcoin#fetchDeposits
2609
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-deposit-history
2610
+ * @description fetch all deposits made to an account
2611
+ * @param {string} code unified currency code
2612
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2613
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2614
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2615
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2616
+ */
2617
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2618
+ await this.loadMarkets();
2619
+ let request = {
2620
+ // 'ccy': currency['id'],
2621
+ // 'state': 2, // 0 waiting for confirmation, 1 deposit credited, 2 deposit successful
2622
+ // 'after': since,
2623
+ // 'before' this.milliseconds (),
2624
+ // 'limit': limit, // default 100, max 100
2625
+ };
2626
+ let currency = undefined;
2627
+ if (code !== undefined) {
2628
+ currency = this.currency(code);
2629
+ request['ccy'] = currency['id'];
2630
+ }
2631
+ if (since !== undefined) {
2632
+ request['before'] = Math.max(since - 1, 0);
2633
+ }
2634
+ if (limit !== undefined) {
2635
+ request['limit'] = limit; // default 100, max 100
2636
+ }
2637
+ [request, params] = this.handleUntilOption('after', request, params);
2638
+ const response = await this.privateGetAssetDepositHistory(this.extend(request, params));
2639
+ //
2640
+ // {
2641
+ // "code": "0",
2642
+ // "msg": "",
2643
+ // "data": [
2644
+ // {
2645
+ // "amt": "0.01044408",
2646
+ // "txId": "1915737_3_0_0_asset",
2647
+ // "ccy": "BTC",
2648
+ // "from": "13801825426",
2649
+ // "to": "",
2650
+ // "ts": "1597026383085",
2651
+ // "state": "2",
2652
+ // "depId": "4703879"
2653
+ // },
2654
+ // {
2655
+ // "amt": "491.6784211",
2656
+ // "txId": "1744594_3_184_0_asset",
2657
+ // "ccy": "OKB",
2658
+ // "from": "",
2659
+ // "to": "",
2660
+ // "ts": "1597026383085",
2661
+ // "state": "2",
2662
+ // "depId": "4703809"
2663
+ // },
2664
+ // {
2665
+ // "amt": "223.18782496",
2666
+ // "txId": "6d892c669225b1092c780bf0da0c6f912fc7dc8f6b8cc53b003288624c",
2667
+ // "ccy": "USDT",
2668
+ // "from": "",
2669
+ // "to": "39kK4XvgEuM7rX9frgyHoZkWqx4iKu1spD",
2670
+ // "ts": "1597026383085",
2671
+ // "state": "2",
2672
+ // "depId": "4703779"
2673
+ // }
2674
+ // ]
2675
+ // }
2676
+ //
2677
+ const data = this.safeList(response, 'data', []);
2678
+ return this.parseTransactions(data, currency, since, limit, params);
2679
+ }
2680
+ /**
2681
+ * @method
2682
+ * @name okcoin#fetchWithdrawals
2683
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-withdrawal-history
2684
+ * @description fetch all withdrawals made from an account
2685
+ * @param {string} code unified currency code
2686
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2687
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2688
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2689
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2690
+ */
2691
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2692
+ await this.loadMarkets();
2693
+ let request = {
2694
+ // 'ccy': currency['id'],
2695
+ // 'state': 2, // -3: pending cancel, -2 canceled, -1 failed, 0, pending, 1 sending, 2 sent, 3 awaiting email verification, 4 awaiting manual verification, 5 awaiting identity verification
2696
+ // 'after': since,
2697
+ // 'before': this.milliseconds (),
2698
+ // 'limit': limit, // default 100, max 100
2699
+ };
2700
+ let currency = undefined;
2701
+ if (code !== undefined) {
2702
+ currency = this.currency(code);
2703
+ request['ccy'] = currency['id'];
2704
+ }
2705
+ if (since !== undefined) {
2706
+ request['before'] = Math.max(since - 1, 0);
2707
+ }
2708
+ if (limit !== undefined) {
2709
+ request['limit'] = limit; // default 100, max 100
2710
+ }
2711
+ [request, params] = this.handleUntilOption('after', request, params);
2712
+ const response = await this.privateGetAssetWithdrawalHistory(this.extend(request, params));
2713
+ //
2714
+ // {
2715
+ // "code": "0",
2716
+ // "msg": "",
2717
+ // "data": [
2718
+ // {
2719
+ // "amt": "0.094",
2720
+ // "wdId": "4703879",
2721
+ // "fee": "0.01000000eth",
2722
+ // "txId": "0x62477bac6509a04512819bb1455e923a60dea5966c7caeaa0b24eb8fb0432b85",
2723
+ // "ccy": "ETH",
2724
+ // "from": "13426335357",
2725
+ // "to": "0xA41446125D0B5b6785f6898c9D67874D763A1519",
2726
+ // "ts": "1597026383085",
2727
+ // "state": "2"
2728
+ // },
2729
+ // {
2730
+ // "amt": "0.01",
2731
+ // "wdId": "4703879",
2732
+ // "fee": "0.00000000btc",
2733
+ // "txId": "",
2734
+ // "ccy": "BTC",
2735
+ // "from": "13426335357",
2736
+ // "to": "13426335357",
2737
+ // "ts": "1597026383085",
2738
+ // "state": "2"
2739
+ // }
2740
+ // ]
2741
+ // }
2742
+ //
2743
+ const data = this.safeList(response, 'data', []);
2744
+ return this.parseTransactions(data, currency, since, limit, params);
2745
+ }
2746
+ parseTransactionStatus(status) {
2747
+ //
2748
+ // deposit statuses
2749
+ //
2750
+ // {
2751
+ // "0": "waiting for confirmation",
2752
+ // "1": "confirmation account",
2753
+ // "2": "recharge success"
2754
+ // }
2755
+ //
2756
+ // withdrawal statues
2757
+ //
2758
+ // {
2759
+ // '-3': "pending cancel",
2760
+ // "-2": "cancelled",
2761
+ // "-1": "failed",
2762
+ // "0": "pending",
2763
+ // "1": "sending",
2764
+ // "2": "sent",
2765
+ // "3": "email confirmation",
2766
+ // "4": "manual confirmation",
2767
+ // "5": "awaiting identity confirmation"
2768
+ // }
2769
+ //
2770
+ const statuses = {
2771
+ '-3': 'pending',
2772
+ '-2': 'canceled',
2773
+ '-1': 'failed',
2774
+ '0': 'pending',
2775
+ '1': 'pending',
2776
+ '2': 'ok',
2777
+ '3': 'pending',
2778
+ '4': 'pending',
2779
+ '5': 'pending',
2780
+ };
2781
+ return this.safeString(statuses, status, status);
2782
+ }
2783
+ parseTransaction(transaction, currency = undefined) {
2784
+ //
2785
+ // withdraw
2786
+ //
2787
+ // {
2788
+ // "amt": "0.1",
2789
+ // "wdId": "67485",
2790
+ // "ccy": "BTC"
2791
+ // }
2792
+ //
2793
+ // fetchWithdrawals
2794
+ //
2795
+ // {
2796
+ // "amt": "0.094",
2797
+ // "wdId": "4703879",
2798
+ // "fee": "0.01000000eth",
2799
+ // "txId": "0x62477bac6509a04512819bb1455e923a60dea5966c7caeaa0b24eb8fb0432b85",
2800
+ // "ccy": "ETH",
2801
+ // "from": "13426335357",
2802
+ // "to": "0xA41446125D0B5b6785f6898c9D67874D763A1519",
2803
+ // "tag",
2804
+ // "pmtId",
2805
+ // "memo",
2806
+ // "ts": "1597026383085",
2807
+ // "state": "2"
2808
+ // }
2809
+ //
2810
+ // fetchDeposits
2811
+ //
2812
+ // {
2813
+ // "amt": "0.01044408",
2814
+ // "txId": "1915737_3_0_0_asset",
2815
+ // "ccy": "BTC",
2816
+ // "from": "13801825426",
2817
+ // "to": "",
2818
+ // "ts": "1597026383085",
2819
+ // "state": "2",
2820
+ // "depId": "4703879"
2821
+ // }
2822
+ //
2823
+ let type = undefined;
2824
+ let id = undefined;
2825
+ const withdrawalId = this.safeString(transaction, 'wdId');
2826
+ const addressFrom = this.safeString(transaction, 'from');
2827
+ const addressTo = this.safeString(transaction, 'to');
2828
+ const address = addressTo;
2829
+ let tagTo = this.safeString2(transaction, 'tag', 'memo');
2830
+ tagTo = this.safeString2(transaction, 'pmtId', tagTo);
2831
+ if (withdrawalId !== undefined) {
2832
+ type = 'withdrawal';
2833
+ id = withdrawalId;
2834
+ }
2835
+ else {
2836
+ // the payment_id will appear on new deposits but appears to be removed from the response after 2 months
2837
+ id = this.safeString(transaction, 'depId');
2838
+ type = 'deposit';
2839
+ }
2840
+ const currencyId = this.safeString(transaction, 'ccy');
2841
+ const code = this.safeCurrencyCode(currencyId);
2842
+ const amount = this.safeNumber(transaction, 'amt');
2843
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'state'));
2844
+ const txid = this.safeString(transaction, 'txId');
2845
+ const timestamp = this.safeInteger(transaction, 'ts');
2846
+ let feeCost = undefined;
2847
+ if (type === 'deposit') {
2848
+ feeCost = 0;
2849
+ }
2850
+ else {
2851
+ feeCost = this.safeNumber(transaction, 'fee');
2852
+ }
2853
+ // todo parse tags
2854
+ return {
2855
+ 'info': transaction,
2856
+ 'id': id,
2857
+ 'currency': code,
2858
+ 'amount': amount,
2859
+ 'network': undefined,
2860
+ 'addressFrom': addressFrom,
2861
+ 'addressTo': addressTo,
2862
+ 'address': address,
2863
+ 'tagFrom': undefined,
2864
+ 'tagTo': tagTo,
2865
+ 'tag': tagTo,
2866
+ 'status': status,
2867
+ 'type': type,
2868
+ 'updated': undefined,
2869
+ 'txid': txid,
2870
+ 'timestamp': timestamp,
2871
+ 'datetime': this.iso8601(timestamp),
2872
+ 'comment': undefined,
2873
+ 'internal': undefined,
2874
+ 'fee': {
2875
+ 'currency': code,
2876
+ 'cost': feeCost,
2877
+ },
2878
+ };
2879
+ }
2880
+ /**
2881
+ * @method
2882
+ * @name okcoin#fetchMyTrades
2883
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-days
2884
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-months
2885
+ * @description fetch all trades made by the user
2886
+ * @param {string} symbol unified market symbol
2887
+ * @param {int} [since] the earliest time in ms to fetch trades for
2888
+ * @param {int} [limit] the maximum number of trades structures to retrieve
2889
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2890
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2891
+ */
2892
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2893
+ await this.loadMarkets();
2894
+ const request = {
2895
+ 'instType': 'SPOT',
2896
+ };
2897
+ if ((limit !== undefined) && (limit > 100)) {
2898
+ limit = 100;
2899
+ }
2900
+ let market = undefined;
2901
+ if (symbol !== undefined) {
2902
+ market = this.market(symbol);
2903
+ request['instId'] = market['id'];
2904
+ }
2905
+ let method = undefined;
2906
+ [method, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'method', 'privateGetTradeFillsHistory');
2907
+ let response = undefined;
2908
+ if (method === 'privateGetTradeFillsHistory') {
2909
+ response = await this.privateGetTradeFillsHistory(this.extend(request, params));
2910
+ }
2911
+ else {
2912
+ response = await this.privateGetTradeFills(this.extend(request, params));
2913
+ }
2914
+ const data = this.safeList(response, 'data', []);
2915
+ return this.parseTrades(data, market, since, limit);
2916
+ }
2917
+ /**
2918
+ * @method
2919
+ * @name okcoin#fetchOrderTrades
2920
+ * @description fetch all the trades made from a single order
2921
+ * @param {string} id order id
2922
+ * @param {string} symbol unified market symbol
2923
+ * @param {int} [since] the earliest time in ms to fetch trades for
2924
+ * @param {int} [limit] the maximum number of trades to retrieve
2925
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2926
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2927
+ */
2928
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2929
+ const request = {
2930
+ // 'instrument_id': market['id'],
2931
+ 'order_id': id,
2932
+ // 'after': '1', // return the page after the specified page number
2933
+ // 'before': '1', // return the page before the specified page number
2934
+ // 'limit': limit, // optional, number of results per request, default = maximum = 100
2935
+ };
2936
+ return await this.fetchMyTrades(symbol, since, limit, this.extend(request, params));
2937
+ }
2938
+ /**
2939
+ * @method
2940
+ * @name okcoin#fetchLedger
2941
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
2942
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-funding-asset-bills-details
2943
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days
2944
+ * @see https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months
2945
+ * @param {string} [code] unified currency code, default is undefined
2946
+ * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
2947
+ * @param {int} [limit] max number of ledger entries to return, default is undefined
2948
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2949
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
2950
+ */
2951
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
2952
+ await this.loadMarkets();
2953
+ let method = undefined;
2954
+ [method, params] = this.handleOptionAndParams(params, 'fetchLedger', 'method', 'privateGetAccountBills');
2955
+ let request = {
2956
+ // 'instType': undefined, // 'SPOT', 'MARGIN', 'SWAP', 'FUTURES", 'OPTION'
2957
+ // 'ccy': undefined, // currency['id'],
2958
+ // 'ctType': undefined, // 'linear', 'inverse', only applicable to FUTURES/SWAP
2959
+ // 'type': varies depending the 'method' endpoint :
2960
+ // - https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days
2961
+ // - https://www.okx.com/docs-v5/en/#rest-api-funding-asset-bills-details
2962
+ // - https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months
2963
+ // 'after': 'id', // return records earlier than the requested bill id
2964
+ // 'before': 'id', // return records newer than the requested bill id
2965
+ // 'limit': 100, // default 100, max 100
2966
+ };
2967
+ if (limit !== undefined) {
2968
+ request['limit'] = limit;
2969
+ }
2970
+ let currency = undefined;
2971
+ if (code !== undefined) {
2972
+ currency = this.currency(code);
2973
+ request['ccy'] = currency['id'];
2974
+ }
2975
+ [request, params] = this.handleUntilOption('end', request, params);
2976
+ let response = undefined;
2977
+ if (method === 'privateGetAccountBillsArchive') {
2978
+ response = await this.privateGetAccountBillsArchive(this.extend(request, params));
2979
+ }
2980
+ else if (method === 'privateGetAssetBills') {
2981
+ response = await this.privateGetAssetBills(this.extend(request, params));
2982
+ }
2983
+ else {
2984
+ response = await this.privateGetAccountBills(this.extend(request, params));
2985
+ }
2986
+ //
2987
+ // privateGetAccountBills, privateGetAccountBillsArchive
2988
+ //
2989
+ // {
2990
+ // "code": "0",
2991
+ // "msg": "",
2992
+ // "data": [
2993
+ // {
2994
+ // "bal": "0.0000819307998198",
2995
+ // "balChg": "-664.2679586599999802",
2996
+ // "billId": "310394313544966151",
2997
+ // "ccy": "USDT",
2998
+ // "fee": "0",
2999
+ // "from": "",
3000
+ // "instId": "LTC-USDT",
3001
+ // "instType": "SPOT",
3002
+ // "mgnMode": "cross",
3003
+ // "notes": "",
3004
+ // "ordId": "310394313519800320",
3005
+ // "pnl": "0",
3006
+ // "posBal": "0",
3007
+ // "posBalChg": "0",
3008
+ // "subType": "2",
3009
+ // "sz": "664.26795866",
3010
+ // "to": "",
3011
+ // "ts": "1620275771196",
3012
+ // "type": "2"
3013
+ // }
3014
+ // ]
3015
+ // }
3016
+ //
3017
+ // privateGetAssetBills
3018
+ //
3019
+ // {
3020
+ // "code": "0",
3021
+ // "msg": "",
3022
+ // "data": [
3023
+ // {
3024
+ // "billId": "12344",
3025
+ // "ccy": "BTC",
3026
+ // "balChg": "2",
3027
+ // "bal": "12",
3028
+ // "type": "1",
3029
+ // "ts": "1597026383085"
3030
+ // }
3031
+ // ]
3032
+ // }
3033
+ //
3034
+ const data = this.safeValue(response, 'data', []);
3035
+ return this.parseLedger(data, currency, since, limit);
3036
+ }
3037
+ parseLedgerEntryType(type) {
3038
+ const types = {
3039
+ '1': 'transfer',
3040
+ '2': 'trade',
3041
+ '3': 'trade',
3042
+ '4': 'rebate',
3043
+ '5': 'trade',
3044
+ '6': 'transfer',
3045
+ '7': 'trade',
3046
+ '8': 'fee',
3047
+ '9': 'trade',
3048
+ '10': 'trade',
3049
+ '11': 'trade', // system token conversion
3050
+ };
3051
+ return this.safeString(types, type, type);
3052
+ }
3053
+ parseLedgerEntry(item, currency = undefined) {
3054
+ //
3055
+ // privateGetAccountBills, privateGetAccountBillsArchive
3056
+ //
3057
+ // {
3058
+ // "bal": "0.0000819307998198",
3059
+ // "balChg": "-664.2679586599999802",
3060
+ // "billId": "310394313544966151",
3061
+ // "ccy": "USDT",
3062
+ // "fee": "0",
3063
+ // "from": "",
3064
+ // "instId": "LTC-USDT",
3065
+ // "instType": "SPOT",
3066
+ // "mgnMode": "cross",
3067
+ // "notes": "",
3068
+ // "ordId": "310394313519800320",
3069
+ // "pnl": "0",
3070
+ // "posBal": "0",
3071
+ // "posBalChg": "0",
3072
+ // "subType": "2",
3073
+ // "sz": "664.26795866",
3074
+ // "to": "",
3075
+ // "ts": "1620275771196",
3076
+ // "type": "2"
3077
+ // }
3078
+ //
3079
+ // privateGetAssetBills
3080
+ //
3081
+ // {
3082
+ // "billId": "12344",
3083
+ // "ccy": "BTC",
3084
+ // "balChg": "2",
3085
+ // "bal": "12",
3086
+ // "type": "1",
3087
+ // "ts": "1597026383085"
3088
+ // }
3089
+ //
3090
+ const currencyId = this.safeString(item, 'ccy');
3091
+ const code = this.safeCurrencyCode(currencyId, currency);
3092
+ currency = this.safeCurrency(currencyId, currency);
3093
+ const timestamp = this.safeInteger(item, 'ts');
3094
+ const feeCostString = this.safeString(item, 'fee');
3095
+ let fee = undefined;
3096
+ if (feeCostString !== undefined) {
3097
+ fee = {
3098
+ 'cost': this.parseToNumeric(Precise.stringNeg(feeCostString)),
3099
+ 'currency': code,
3100
+ };
3101
+ }
3102
+ const marketId = this.safeString(item, 'instId');
3103
+ const symbol = this.safeSymbol(marketId, undefined, '-');
3104
+ return this.safeLedgerEntry({
3105
+ 'info': item,
3106
+ 'id': this.safeString(item, 'billId'),
3107
+ 'timestamp': timestamp,
3108
+ 'datetime': this.iso8601(timestamp),
3109
+ 'account': undefined,
3110
+ 'referenceId': this.safeString(item, 'ordId'),
3111
+ 'referenceAccount': undefined,
3112
+ 'type': this.parseLedgerEntryType(this.safeString(item, 'type')),
3113
+ 'currency': code,
3114
+ 'symbol': symbol,
3115
+ 'amount': this.safeNumber(item, 'balChg'),
3116
+ 'before': undefined,
3117
+ 'after': this.safeNumber(item, 'bal'),
3118
+ 'status': 'ok',
3119
+ 'fee': fee,
3120
+ }, currency);
3121
+ }
3122
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3123
+ const isArray = Array.isArray(params);
3124
+ const request = '/api/' + this.version + '/' + this.implodeParams(path, params);
3125
+ const query = this.omit(params, this.extractParams(path));
3126
+ let url = this.implodeHostname(this.urls['api']['rest']) + request;
3127
+ if (api === 'public') {
3128
+ if (Object.keys(query).length) {
3129
+ url += '?' + this.urlencode(query);
3130
+ }
3131
+ }
3132
+ else if (api === 'private') {
3133
+ this.checkRequiredCredentials();
3134
+ const timestamp = this.iso8601(this.milliseconds());
3135
+ headers = {
3136
+ 'OK-ACCESS-KEY': this.apiKey,
3137
+ 'OK-ACCESS-PASSPHRASE': this.password,
3138
+ 'OK-ACCESS-TIMESTAMP': timestamp,
3139
+ // 'OK-FROM': '',
3140
+ // 'OK-TO': '',
3141
+ // 'OK-LIMIT': '',
3142
+ };
3143
+ let auth = timestamp + method + request;
3144
+ if (method === 'GET') {
3145
+ if (Object.keys(query).length) {
3146
+ const urlencodedQuery = '?' + this.urlencode(query);
3147
+ url += urlencodedQuery;
3148
+ auth += urlencodedQuery;
3149
+ }
3150
+ }
3151
+ else {
3152
+ if (isArray || Object.keys(query).length) {
3153
+ body = this.json(query);
3154
+ auth += body;
3155
+ }
3156
+ headers['Content-Type'] = 'application/json';
3157
+ }
3158
+ const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'base64');
3159
+ headers['OK-ACCESS-SIGN'] = signature;
3160
+ }
3161
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
3162
+ }
3163
+ parseBalanceByType(type, response) {
3164
+ if (type === 'funding') {
3165
+ return this.parseFundingBalance(response);
3166
+ }
3167
+ else {
3168
+ return this.parseTradingBalance(response);
3169
+ }
3170
+ }
3171
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
3172
+ if (!response) {
3173
+ return undefined; // fallback to default error handler
3174
+ }
3175
+ //
3176
+ // {
3177
+ // "code": "1",
3178
+ // "data": [
3179
+ // {
3180
+ // "clOrdId": "",
3181
+ // "ordId": "",
3182
+ // "sCode": "51119",
3183
+ // "sMsg": "Order placement failed due to insufficient balance. ",
3184
+ // "tag": ""
3185
+ // }
3186
+ // ],
3187
+ // "msg": ""
3188
+ // },
3189
+ // {
3190
+ // "code": "58001",
3191
+ // "data": [],
3192
+ // "msg": "Incorrect trade password"
3193
+ // }
3194
+ //
3195
+ const code = this.safeString(response, 'code');
3196
+ if (code !== '0') {
3197
+ const feedback = this.id + ' ' + body;
3198
+ const data = this.safeValue(response, 'data', []);
3199
+ for (let i = 0; i < data.length; i++) {
3200
+ const error = data[i];
3201
+ const errorCode = this.safeString(error, 'sCode');
3202
+ const message = this.safeString(error, 'sMsg');
3203
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
3204
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
3205
+ }
3206
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
3207
+ throw new ExchangeError(feedback); // unknown message
3208
+ }
3209
+ return undefined;
3210
+ }
3211
+ }