ccxt 4.4.94 → 4.4.95

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 (892) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/abstract/alpaca.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/bigone.js +1 -1
  8. package/dist/cjs/src/abstract/binance.js +1 -1
  9. package/dist/cjs/src/abstract/bingx.js +1 -1
  10. package/dist/cjs/src/abstract/bit2c.js +1 -1
  11. package/dist/cjs/src/abstract/bitbank.js +1 -1
  12. package/dist/cjs/src/abstract/bitbns.js +1 -1
  13. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  14. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  15. package/dist/cjs/src/abstract/bitget.js +1 -1
  16. package/dist/cjs/src/abstract/bithumb.js +1 -1
  17. package/dist/cjs/src/abstract/bitmart.js +1 -1
  18. package/dist/cjs/src/abstract/bitmex.js +1 -1
  19. package/dist/cjs/src/abstract/bitopro.js +1 -1
  20. package/dist/cjs/src/abstract/bitrue.js +1 -1
  21. package/dist/cjs/src/abstract/bitso.js +1 -1
  22. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  23. package/dist/cjs/src/abstract/bitteam.js +1 -1
  24. package/dist/cjs/src/abstract/bittrade.js +1 -1
  25. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  26. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  27. package/dist/cjs/src/abstract/blofin.js +1 -1
  28. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  29. package/dist/cjs/src/abstract/btcbox.js +1 -1
  30. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  31. package/dist/cjs/src/abstract/btcturk.js +1 -1
  32. package/dist/cjs/src/abstract/bybit.js +1 -1
  33. package/dist/cjs/src/abstract/cex.js +1 -1
  34. package/dist/cjs/src/abstract/coinbase.js +1 -1
  35. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  37. package/dist/cjs/src/abstract/coincatch.js +1 -1
  38. package/dist/cjs/src/abstract/coincheck.js +1 -1
  39. package/dist/cjs/src/abstract/coinex.js +1 -1
  40. package/dist/cjs/src/abstract/coinmate.js +1 -1
  41. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  42. package/dist/cjs/src/abstract/coinone.js +1 -1
  43. package/dist/cjs/src/abstract/coinsph.js +1 -1
  44. package/dist/cjs/src/abstract/coinspot.js +1 -1
  45. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  46. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  47. package/dist/cjs/src/abstract/defx.js +1 -1
  48. package/dist/cjs/src/abstract/delta.js +1 -1
  49. package/dist/cjs/src/abstract/deribit.js +1 -1
  50. package/dist/cjs/src/abstract/derive.js +1 -1
  51. package/dist/cjs/src/abstract/digifinex.js +1 -1
  52. package/dist/cjs/src/abstract/ellipx.js +1 -1
  53. package/dist/cjs/src/abstract/exmo.js +1 -1
  54. package/dist/cjs/src/abstract/gate.js +1 -1
  55. package/dist/cjs/src/abstract/gemini.js +1 -1
  56. package/dist/cjs/src/abstract/hashkey.js +1 -1
  57. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  58. package/dist/cjs/src/abstract/hollaex.js +1 -1
  59. package/dist/cjs/src/abstract/htx.js +1 -1
  60. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  61. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  62. package/dist/cjs/src/abstract/indodax.js +1 -1
  63. package/dist/cjs/src/abstract/kraken.js +1 -1
  64. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  65. package/dist/cjs/src/abstract/kucoin.js +1 -1
  66. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  67. package/dist/cjs/src/abstract/latoken.js +1 -1
  68. package/dist/cjs/src/abstract/lbank.js +1 -1
  69. package/dist/cjs/src/abstract/luno.js +1 -1
  70. package/dist/cjs/src/abstract/mercado.js +1 -1
  71. package/dist/cjs/src/abstract/mexc.js +1 -1
  72. package/dist/cjs/src/abstract/modetrade.js +1 -1
  73. package/dist/cjs/src/abstract/ndax.js +1 -1
  74. package/dist/cjs/src/abstract/novadax.js +1 -1
  75. package/dist/cjs/src/abstract/oceanex.js +1 -1
  76. package/dist/cjs/src/abstract/okcoin.js +1 -1
  77. package/dist/cjs/src/abstract/okx.js +1 -1
  78. package/dist/cjs/src/abstract/onetrading.js +1 -1
  79. package/dist/cjs/src/abstract/oxfun.js +1 -1
  80. package/dist/cjs/src/abstract/p2b.js +1 -1
  81. package/dist/cjs/src/abstract/paradex.js +1 -1
  82. package/dist/cjs/src/abstract/paymium.js +1 -1
  83. package/dist/cjs/src/abstract/phemex.js +1 -1
  84. package/dist/cjs/src/abstract/poloniex.js +1 -1
  85. package/dist/cjs/src/abstract/probit.js +1 -1
  86. package/dist/cjs/src/abstract/timex.js +1 -1
  87. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  88. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  89. package/dist/cjs/src/abstract/upbit.js +1 -1
  90. package/dist/cjs/src/abstract/vertex.js +1 -1
  91. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  92. package/dist/cjs/src/abstract/whitebit.js +1 -1
  93. package/dist/cjs/src/abstract/woo.js +1 -1
  94. package/dist/cjs/src/abstract/woofipro.js +1 -1
  95. package/dist/cjs/src/abstract/xt.js +1 -1
  96. package/dist/cjs/src/abstract/yobit.js +1 -1
  97. package/dist/cjs/src/abstract/zaif.js +1 -1
  98. package/dist/cjs/src/abstract/zonda.js +1 -1
  99. package/dist/cjs/src/alpaca.js +1 -1
  100. package/dist/cjs/src/apex.js +1 -1
  101. package/dist/cjs/src/ascendex.js +1 -1
  102. package/dist/cjs/src/base/Exchange.js +2 -2
  103. package/dist/cjs/src/base/Precise.js +0 -6
  104. package/dist/cjs/src/base/errors.js +0 -6
  105. package/dist/cjs/src/base/functions/crypto.js +1 -1
  106. package/dist/cjs/src/base/functions/encode.js +1 -1
  107. package/dist/cjs/src/base/functions/misc.js +0 -1
  108. package/dist/cjs/src/base/functions/number.js +0 -6
  109. package/dist/cjs/src/base/functions/platform.js +0 -6
  110. package/dist/cjs/src/base/functions/rsa.js +0 -1
  111. package/dist/cjs/src/base/functions/string.js +0 -6
  112. package/dist/cjs/src/base/functions/throttle.js +1 -1
  113. package/dist/cjs/src/base/functions/time.js +0 -6
  114. package/dist/cjs/src/base/functions/totp.js +0 -1
  115. package/dist/cjs/src/base/functions/type.js +0 -6
  116. package/dist/cjs/src/base/functions.js +1 -1
  117. package/dist/cjs/src/base/ws/Cache.js +0 -6
  118. package/dist/cjs/src/base/ws/Client.js +0 -1
  119. package/dist/cjs/src/base/ws/Future.js +3 -3
  120. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  121. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  122. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  123. package/dist/cjs/src/bequant.js +1 -1
  124. package/dist/cjs/src/bigone.js +1 -1
  125. package/dist/cjs/src/binance.js +1 -1
  126. package/dist/cjs/src/binancecoinm.js +1 -1
  127. package/dist/cjs/src/binanceus.js +1 -1
  128. package/dist/cjs/src/binanceusdm.js +1 -1
  129. package/dist/cjs/src/bingx.js +149 -95
  130. package/dist/cjs/src/bit2c.js +1 -1
  131. package/dist/cjs/src/bitbank.js +1 -1
  132. package/dist/cjs/src/bitbns.js +1 -1
  133. package/dist/cjs/src/bitfinex.js +1 -1
  134. package/dist/cjs/src/bitflyer.js +1 -1
  135. package/dist/cjs/src/bitget.js +2 -2
  136. package/dist/cjs/src/bithumb.js +1 -1
  137. package/dist/cjs/src/bitmart.js +1 -1
  138. package/dist/cjs/src/bitmex.js +1 -1
  139. package/dist/cjs/src/bitopro.js +1 -1
  140. package/dist/cjs/src/bitrue.js +1 -1
  141. package/dist/cjs/src/bitso.js +1 -1
  142. package/dist/cjs/src/bitstamp.js +2 -1
  143. package/dist/cjs/src/bitteam.js +1 -1
  144. package/dist/cjs/src/bittrade.js +1 -1
  145. package/dist/cjs/src/blockchaincom.js +1 -1
  146. package/dist/cjs/src/blofin.js +8 -2
  147. package/dist/cjs/src/btcalpha.js +1 -1
  148. package/dist/cjs/src/btcbox.js +1 -1
  149. package/dist/cjs/src/btcmarkets.js +1 -1
  150. package/dist/cjs/src/btcturk.js +1 -1
  151. package/dist/cjs/src/bybit.js +2 -2
  152. package/dist/cjs/src/cex.js +1 -1
  153. package/dist/cjs/src/coinbase.js +36 -0
  154. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  155. package/dist/cjs/src/coincatch.js +1 -1
  156. package/dist/cjs/src/coincheck.js +1 -1
  157. package/dist/cjs/src/coinex.js +1 -1
  158. package/dist/cjs/src/coinmate.js +35 -1
  159. package/dist/cjs/src/coinmetro.js +1 -1
  160. package/dist/cjs/src/coinone.js +35 -1
  161. package/dist/cjs/src/coinsph.js +29 -1
  162. package/dist/cjs/src/coinspot.js +1 -1
  163. package/dist/cjs/src/cryptocom.js +1 -1
  164. package/dist/cjs/src/cryptomus.js +1 -1
  165. package/dist/cjs/src/defx.js +1 -1
  166. package/dist/cjs/src/delta.js +1 -1
  167. package/dist/cjs/src/deribit.js +1 -1
  168. package/dist/cjs/src/derive.js +1 -1
  169. package/dist/cjs/src/digifinex.js +1 -1
  170. package/dist/cjs/src/ellipx.js +1 -1
  171. package/dist/cjs/src/exmo.js +1 -1
  172. package/dist/cjs/src/fmfwio.js +1 -1
  173. package/dist/cjs/src/gate.js +2 -2
  174. package/dist/cjs/src/gateio.js +1 -1
  175. package/dist/cjs/src/gemini.js +1 -1
  176. package/dist/cjs/src/hashkey.js +1 -1
  177. package/dist/cjs/src/hitbtc.js +0 -1
  178. package/dist/cjs/src/hollaex.js +1 -1
  179. package/dist/cjs/src/htx.js +1 -1
  180. package/dist/cjs/src/huobi.js +1 -1
  181. package/dist/cjs/src/hyperliquid.js +3 -2
  182. package/dist/cjs/src/independentreserve.js +1 -1
  183. package/dist/cjs/src/indodax.js +1 -1
  184. package/dist/cjs/src/kraken.js +1 -1
  185. package/dist/cjs/src/krakenfutures.js +1 -1
  186. package/dist/cjs/src/kucoin.js +1 -1
  187. package/dist/cjs/src/kucoinfutures.js +1 -1
  188. package/dist/cjs/src/latoken.js +1 -1
  189. package/dist/cjs/src/lbank.js +1 -1
  190. package/dist/cjs/src/luno.js +1 -1
  191. package/dist/cjs/src/mercado.js +1 -1
  192. package/dist/cjs/src/mexc.js +1 -1
  193. package/dist/cjs/src/modetrade.js +1 -1
  194. package/dist/cjs/src/myokx.js +1 -1
  195. package/dist/cjs/src/ndax.js +1 -1
  196. package/dist/cjs/src/novadax.js +1 -1
  197. package/dist/cjs/src/oceanex.js +1 -1
  198. package/dist/cjs/src/okcoin.js +1 -1
  199. package/dist/cjs/src/okx.js +1 -1
  200. package/dist/cjs/src/okxus.js +1 -1
  201. package/dist/cjs/src/onetrading.js +1 -1
  202. package/dist/cjs/src/oxfun.js +1 -1
  203. package/dist/cjs/src/p2b.js +1 -1
  204. package/dist/cjs/src/paradex.js +1 -1
  205. package/dist/cjs/src/paymium.js +1 -1
  206. package/dist/cjs/src/poloniex.js +1 -1
  207. package/dist/cjs/src/pro/alpaca.js +1 -1
  208. package/dist/cjs/src/pro/apex.js +1 -1
  209. package/dist/cjs/src/pro/ascendex.js +1 -1
  210. package/dist/cjs/src/pro/bequant.js +1 -1
  211. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  212. package/dist/cjs/src/pro/binanceus.js +1 -1
  213. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  214. package/dist/cjs/src/pro/bingx.js +1 -1
  215. package/dist/cjs/src/pro/bitfinex.js +1 -1
  216. package/dist/cjs/src/pro/bitget.js +1 -1
  217. package/dist/cjs/src/pro/bithumb.js +1 -1
  218. package/dist/cjs/src/pro/bitmart.js +1 -1
  219. package/dist/cjs/src/pro/bitmex.js +1 -1
  220. package/dist/cjs/src/pro/bitrue.js +1 -1
  221. package/dist/cjs/src/pro/bitstamp.js +1 -1
  222. package/dist/cjs/src/pro/bitvavo.js +1 -1
  223. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  224. package/dist/cjs/src/pro/blofin.js +1 -1
  225. package/dist/cjs/src/pro/bybit.js +1 -1
  226. package/dist/cjs/src/pro/cex.js +1 -1
  227. package/dist/cjs/src/pro/coinbase.js +1 -1
  228. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  229. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  230. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  231. package/dist/cjs/src/pro/coincatch.js +1 -1
  232. package/dist/cjs/src/pro/coincheck.js +1 -1
  233. package/dist/cjs/src/pro/coinex.js +1 -1
  234. package/dist/cjs/src/pro/coinone.js +1 -1
  235. package/dist/cjs/src/pro/cryptocom.js +1 -1
  236. package/dist/cjs/src/pro/defx.js +1 -1
  237. package/dist/cjs/src/pro/deribit.js +1 -1
  238. package/dist/cjs/src/pro/exmo.js +1 -1
  239. package/dist/cjs/src/pro/gate.js +1 -1
  240. package/dist/cjs/src/pro/gateio.js +1 -1
  241. package/dist/cjs/src/pro/gemini.js +1 -1
  242. package/dist/cjs/src/pro/hashkey.js +1 -1
  243. package/dist/cjs/src/pro/hitbtc.js +1 -1
  244. package/dist/cjs/src/pro/hollaex.js +1 -1
  245. package/dist/cjs/src/pro/htx.js +1 -1
  246. package/dist/cjs/src/pro/huobi.js +1 -1
  247. package/dist/cjs/src/pro/hyperliquid.js +7 -7
  248. package/dist/cjs/src/pro/independentreserve.js +1 -1
  249. package/dist/cjs/src/pro/kraken.js +19 -19
  250. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  251. package/dist/cjs/src/pro/kucoin.js +1 -1
  252. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  253. package/dist/cjs/src/pro/lbank.js +0 -1
  254. package/dist/cjs/src/pro/luno.js +1 -1
  255. package/dist/cjs/src/pro/mexc.js +11 -11
  256. package/dist/cjs/src/pro/myokx.js +1 -1
  257. package/dist/cjs/src/pro/ndax.js +1 -1
  258. package/dist/cjs/src/pro/okcoin.js +1 -1
  259. package/dist/cjs/src/pro/okx.js +1 -1
  260. package/dist/cjs/src/pro/okxus.js +1 -1
  261. package/dist/cjs/src/pro/onetrading.js +1 -1
  262. package/dist/cjs/src/pro/oxfun.js +1 -1
  263. package/dist/cjs/src/pro/p2b.js +1 -1
  264. package/dist/cjs/src/pro/paradex.js +1 -1
  265. package/dist/cjs/src/pro/phemex.js +1 -1
  266. package/dist/cjs/src/pro/poloniex.js +1 -1
  267. package/dist/cjs/src/pro/probit.js +1 -1
  268. package/dist/cjs/src/pro/tradeogre.js +1 -1
  269. package/dist/cjs/src/pro/upbit.js +1 -1
  270. package/dist/cjs/src/pro/whitebit.js +1 -1
  271. package/dist/cjs/src/pro/xt.js +1 -1
  272. package/dist/cjs/src/probit.js +1 -1
  273. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  274. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  275. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  276. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  277. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  278. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  279. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  280. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  281. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  282. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  283. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  284. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  285. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  286. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  287. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  288. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  289. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  290. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  291. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  292. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  293. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  294. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  295. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  296. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  297. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  298. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  299. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  300. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  301. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  302. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  303. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  304. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  305. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  306. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  307. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  308. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  309. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  310. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  311. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  312. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  313. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  314. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  315. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  316. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  317. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  318. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  319. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  320. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  321. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  322. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  323. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  324. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  325. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  326. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  327. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  328. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  329. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  330. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  331. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  332. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  333. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  334. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  335. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  336. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  337. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  338. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  339. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  340. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  341. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  342. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  343. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  344. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  345. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  346. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  347. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  348. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  349. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  350. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  351. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  352. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  353. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  354. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  355. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  356. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  357. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  358. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  359. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  360. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  361. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  362. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  363. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  364. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  365. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  366. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  367. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  368. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  369. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  370. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  371. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  372. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  373. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  374. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  375. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  376. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  377. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  378. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  379. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  380. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  383. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  384. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  385. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  386. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  388. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  389. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  390. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  391. package/dist/cjs/src/timex.js +0 -1
  392. package/dist/cjs/src/tokocrypto.js +1 -1
  393. package/dist/cjs/src/tradeogre.js +1 -1
  394. package/dist/cjs/src/upbit.js +1 -1
  395. package/dist/cjs/src/vertex.js +1 -1
  396. package/dist/cjs/src/wavesexchange.js +1 -1
  397. package/dist/cjs/src/whitebit.js +1 -1
  398. package/dist/cjs/src/woo.js +1279 -897
  399. package/dist/cjs/src/woofipro.js +1 -1
  400. package/dist/cjs/src/xt.js +1 -1
  401. package/dist/cjs/src/yobit.js +1 -1
  402. package/dist/cjs/src/zaif.js +1 -1
  403. package/dist/cjs/src/zonda.js +1 -1
  404. package/js/ccxt.d.ts +1 -1
  405. package/js/ccxt.js +1 -7
  406. package/js/src/abstract/alpaca.js +0 -6
  407. package/js/src/abstract/apex.js +0 -6
  408. package/js/src/abstract/ascendex.js +0 -6
  409. package/js/src/abstract/bequant.js +0 -6
  410. package/js/src/abstract/bigone.js +0 -6
  411. package/js/src/abstract/binance.js +0 -6
  412. package/js/src/abstract/binancecoinm.js +0 -6
  413. package/js/src/abstract/binanceus.js +0 -6
  414. package/js/src/abstract/binanceusdm.js +0 -6
  415. package/js/src/abstract/bingx.d.ts +3 -0
  416. package/js/src/abstract/bingx.js +0 -6
  417. package/js/src/abstract/bit2c.js +0 -6
  418. package/js/src/abstract/bitbank.js +0 -6
  419. package/js/src/abstract/bitbns.js +0 -6
  420. package/js/src/abstract/bitfinex.js +0 -6
  421. package/js/src/abstract/bitflyer.js +0 -6
  422. package/js/src/abstract/bitget.js +0 -6
  423. package/js/src/abstract/bithumb.js +0 -6
  424. package/js/src/abstract/bitmart.js +0 -6
  425. package/js/src/abstract/bitmex.js +0 -6
  426. package/js/src/abstract/bitopro.js +0 -6
  427. package/js/src/abstract/bitrue.js +0 -6
  428. package/js/src/abstract/bitso.js +0 -6
  429. package/js/src/abstract/bitstamp.js +0 -6
  430. package/js/src/abstract/bitteam.js +0 -6
  431. package/js/src/abstract/bittrade.js +0 -6
  432. package/js/src/abstract/bitvavo.js +0 -6
  433. package/js/src/abstract/blockchaincom.js +0 -6
  434. package/js/src/abstract/blofin.js +0 -6
  435. package/js/src/abstract/btcalpha.js +0 -6
  436. package/js/src/abstract/btcbox.js +0 -6
  437. package/js/src/abstract/btcmarkets.js +0 -6
  438. package/js/src/abstract/btcturk.js +0 -6
  439. package/js/src/abstract/bybit.js +0 -6
  440. package/js/src/abstract/cex.js +0 -6
  441. package/js/src/abstract/coinbase.js +0 -6
  442. package/js/src/abstract/coinbaseadvanced.js +0 -6
  443. package/js/src/abstract/coinbaseexchange.js +0 -6
  444. package/js/src/abstract/coinbaseinternational.js +0 -6
  445. package/js/src/abstract/coincatch.js +0 -6
  446. package/js/src/abstract/coincheck.js +0 -6
  447. package/js/src/abstract/coinex.js +0 -6
  448. package/js/src/abstract/coinmate.js +0 -6
  449. package/js/src/abstract/coinmetro.js +0 -6
  450. package/js/src/abstract/coinone.js +0 -6
  451. package/js/src/abstract/coinsph.js +0 -6
  452. package/js/src/abstract/coinspot.js +0 -6
  453. package/js/src/abstract/cryptocom.js +0 -6
  454. package/js/src/abstract/cryptomus.js +0 -6
  455. package/js/src/abstract/defx.js +0 -6
  456. package/js/src/abstract/delta.js +0 -6
  457. package/js/src/abstract/deribit.js +0 -6
  458. package/js/src/abstract/derive.js +0 -6
  459. package/js/src/abstract/digifinex.js +0 -6
  460. package/js/src/abstract/ellipx.js +0 -6
  461. package/js/src/abstract/exmo.js +0 -6
  462. package/js/src/abstract/fmfwio.js +0 -6
  463. package/js/src/abstract/gate.js +0 -6
  464. package/js/src/abstract/gateio.js +0 -6
  465. package/js/src/abstract/gemini.js +0 -6
  466. package/js/src/abstract/hashkey.js +0 -6
  467. package/js/src/abstract/hitbtc.js +0 -6
  468. package/js/src/abstract/hollaex.js +0 -6
  469. package/js/src/abstract/htx.js +0 -6
  470. package/js/src/abstract/huobi.js +0 -6
  471. package/js/src/abstract/hyperliquid.js +0 -6
  472. package/js/src/abstract/independentreserve.js +0 -6
  473. package/js/src/abstract/indodax.js +0 -6
  474. package/js/src/abstract/kraken.js +0 -6
  475. package/js/src/abstract/krakenfutures.js +0 -6
  476. package/js/src/abstract/kucoin.js +0 -6
  477. package/js/src/abstract/kucoinfutures.js +0 -6
  478. package/js/src/abstract/latoken.js +0 -6
  479. package/js/src/abstract/lbank.js +0 -6
  480. package/js/src/abstract/luno.js +0 -6
  481. package/js/src/abstract/mercado.js +0 -6
  482. package/js/src/abstract/mexc.js +0 -6
  483. package/js/src/abstract/modetrade.js +0 -6
  484. package/js/src/abstract/myokx.js +0 -6
  485. package/js/src/abstract/ndax.js +0 -6
  486. package/js/src/abstract/novadax.js +0 -6
  487. package/js/src/abstract/oceanex.js +0 -6
  488. package/js/src/abstract/okcoin.js +0 -6
  489. package/js/src/abstract/okx.js +0 -6
  490. package/js/src/abstract/okxus.js +0 -6
  491. package/js/src/abstract/onetrading.js +0 -6
  492. package/js/src/abstract/oxfun.js +0 -6
  493. package/js/src/abstract/p2b.js +0 -6
  494. package/js/src/abstract/paradex.js +0 -6
  495. package/js/src/abstract/paymium.js +0 -6
  496. package/js/src/abstract/phemex.js +0 -6
  497. package/js/src/abstract/poloniex.js +0 -6
  498. package/js/src/abstract/probit.js +0 -6
  499. package/js/src/abstract/timex.js +0 -6
  500. package/js/src/abstract/tokocrypto.js +0 -6
  501. package/js/src/abstract/tradeogre.js +0 -6
  502. package/js/src/abstract/upbit.js +0 -6
  503. package/js/src/abstract/vertex.js +0 -6
  504. package/js/src/abstract/wavesexchange.js +0 -6
  505. package/js/src/abstract/whitebit.js +0 -6
  506. package/js/src/abstract/woo.d.ts +58 -3
  507. package/js/src/abstract/woo.js +0 -6
  508. package/js/src/abstract/woofipro.js +0 -6
  509. package/js/src/abstract/xt.js +0 -6
  510. package/js/src/abstract/yobit.js +0 -6
  511. package/js/src/abstract/zaif.js +0 -6
  512. package/js/src/abstract/zonda.js +0 -6
  513. package/js/src/alpaca.js +0 -6
  514. package/js/src/apex.js +0 -6
  515. package/js/src/ascendex.js +0 -6
  516. package/js/src/base/Exchange.js +2 -8
  517. package/js/src/base/Precise.js +0 -6
  518. package/js/src/base/errorHierarchy.js +0 -6
  519. package/js/src/base/errors.js +0 -6
  520. package/js/src/base/functions/crypto.js +0 -6
  521. package/js/src/base/functions/encode.js +0 -6
  522. package/js/src/base/functions/generic.js +0 -6
  523. package/js/src/base/functions/misc.js +0 -6
  524. package/js/src/base/functions/number.js +0 -6
  525. package/js/src/base/functions/platform.js +0 -6
  526. package/js/src/base/functions/rsa.js +0 -6
  527. package/js/src/base/functions/string.js +0 -6
  528. package/js/src/base/functions/throttle.js +0 -6
  529. package/js/src/base/functions/time.js +0 -6
  530. package/js/src/base/functions/totp.js +0 -6
  531. package/js/src/base/functions/type.js +0 -6
  532. package/js/src/base/functions.js +0 -6
  533. package/js/src/base/types.js +0 -6
  534. package/js/src/base/ws/Cache.js +0 -6
  535. package/js/src/base/ws/Client.js +0 -6
  536. package/js/src/base/ws/Future.js +2 -8
  537. package/js/src/base/ws/OrderBook.js +0 -6
  538. package/js/src/base/ws/OrderBookSide.js +0 -6
  539. package/js/src/base/ws/WsClient.js +0 -6
  540. package/js/src/base/ws/functions.js +0 -6
  541. package/js/src/bequant.js +0 -6
  542. package/js/src/bigone.js +0 -6
  543. package/js/src/binance.js +0 -6
  544. package/js/src/binancecoinm.js +0 -6
  545. package/js/src/binanceus.js +0 -6
  546. package/js/src/binanceusdm.js +0 -6
  547. package/js/src/bingx.d.ts +6 -6
  548. package/js/src/bingx.js +148 -100
  549. package/js/src/bit2c.js +0 -6
  550. package/js/src/bitbank.js +0 -6
  551. package/js/src/bitbns.js +0 -6
  552. package/js/src/bitfinex.js +0 -6
  553. package/js/src/bitflyer.js +0 -6
  554. package/js/src/bitget.js +1 -7
  555. package/js/src/bithumb.js +0 -6
  556. package/js/src/bitmart.js +0 -6
  557. package/js/src/bitmex.js +0 -6
  558. package/js/src/bitopro.js +0 -6
  559. package/js/src/bitrue.js +0 -6
  560. package/js/src/bitso.js +0 -6
  561. package/js/src/bitstamp.js +2 -7
  562. package/js/src/bitteam.js +0 -6
  563. package/js/src/bittrade.js +0 -6
  564. package/js/src/bitvavo.js +0 -6
  565. package/js/src/blockchaincom.js +0 -6
  566. package/js/src/blofin.d.ts +1 -0
  567. package/js/src/blofin.js +7 -7
  568. package/js/src/btcalpha.js +0 -6
  569. package/js/src/btcbox.js +0 -6
  570. package/js/src/btcmarkets.js +0 -6
  571. package/js/src/btcturk.js +0 -6
  572. package/js/src/bybit.js +1 -7
  573. package/js/src/cex.js +0 -6
  574. package/js/src/coinbase.js +36 -6
  575. package/js/src/coinbaseadvanced.js +0 -6
  576. package/js/src/coinbaseexchange.js +0 -6
  577. package/js/src/coinbaseinternational.js +0 -6
  578. package/js/src/coincatch.js +0 -6
  579. package/js/src/coincheck.js +0 -6
  580. package/js/src/coinex.js +0 -6
  581. package/js/src/coinmate.js +34 -6
  582. package/js/src/coinmetro.js +0 -6
  583. package/js/src/coinone.js +34 -6
  584. package/js/src/coinsph.js +29 -6
  585. package/js/src/coinspot.js +0 -6
  586. package/js/src/cryptocom.js +0 -6
  587. package/js/src/cryptomus.js +0 -6
  588. package/js/src/defx.js +0 -6
  589. package/js/src/delta.js +0 -6
  590. package/js/src/deribit.js +0 -6
  591. package/js/src/derive.js +0 -6
  592. package/js/src/digifinex.js +0 -6
  593. package/js/src/ellipx.js +0 -6
  594. package/js/src/exmo.js +0 -6
  595. package/js/src/fmfwio.js +0 -6
  596. package/js/src/gate.js +1 -7
  597. package/js/src/gateio.js +0 -6
  598. package/js/src/gemini.js +0 -6
  599. package/js/src/hashkey.js +0 -6
  600. package/js/src/hitbtc.js +0 -6
  601. package/js/src/hollaex.js +0 -6
  602. package/js/src/htx.js +0 -6
  603. package/js/src/huobi.js +0 -6
  604. package/js/src/hyperliquid.js +2 -7
  605. package/js/src/independentreserve.js +0 -6
  606. package/js/src/indodax.js +0 -6
  607. package/js/src/kraken.js +0 -6
  608. package/js/src/krakenfutures.js +0 -6
  609. package/js/src/kucoin.js +0 -6
  610. package/js/src/kucoinfutures.js +0 -6
  611. package/js/src/latoken.js +0 -6
  612. package/js/src/lbank.js +0 -6
  613. package/js/src/luno.js +0 -6
  614. package/js/src/mercado.js +0 -6
  615. package/js/src/mexc.js +0 -6
  616. package/js/src/modetrade.js +0 -6
  617. package/js/src/myokx.js +0 -6
  618. package/js/src/ndax.js +0 -6
  619. package/js/src/novadax.js +0 -6
  620. package/js/src/oceanex.js +0 -6
  621. package/js/src/okcoin.js +0 -6
  622. package/js/src/okx.js +0 -6
  623. package/js/src/okxus.js +0 -6
  624. package/js/src/onetrading.js +0 -6
  625. package/js/src/oxfun.js +0 -6
  626. package/js/src/p2b.js +0 -6
  627. package/js/src/paradex.js +0 -6
  628. package/js/src/paymium.js +0 -6
  629. package/js/src/phemex.js +0 -6
  630. package/js/src/poloniex.js +0 -6
  631. package/js/src/pro/alpaca.js +0 -6
  632. package/js/src/pro/apex.js +0 -6
  633. package/js/src/pro/ascendex.js +0 -6
  634. package/js/src/pro/bequant.js +0 -6
  635. package/js/src/pro/binance.js +0 -6
  636. package/js/src/pro/binancecoinm.js +0 -6
  637. package/js/src/pro/binanceus.js +0 -6
  638. package/js/src/pro/binanceusdm.js +0 -6
  639. package/js/src/pro/bingx.js +0 -6
  640. package/js/src/pro/bitfinex.js +0 -6
  641. package/js/src/pro/bitget.js +0 -6
  642. package/js/src/pro/bithumb.js +0 -6
  643. package/js/src/pro/bitmart.js +0 -6
  644. package/js/src/pro/bitmex.js +0 -6
  645. package/js/src/pro/bitopro.js +0 -6
  646. package/js/src/pro/bitrue.js +0 -6
  647. package/js/src/pro/bitstamp.js +0 -6
  648. package/js/src/pro/bittrade.js +0 -6
  649. package/js/src/pro/bitvavo.js +0 -6
  650. package/js/src/pro/blockchaincom.js +0 -6
  651. package/js/src/pro/blofin.js +0 -6
  652. package/js/src/pro/bybit.js +0 -6
  653. package/js/src/pro/cex.js +0 -6
  654. package/js/src/pro/coinbase.js +0 -6
  655. package/js/src/pro/coinbaseadvanced.js +0 -6
  656. package/js/src/pro/coinbaseexchange.js +0 -6
  657. package/js/src/pro/coinbaseinternational.js +0 -6
  658. package/js/src/pro/coincatch.js +0 -6
  659. package/js/src/pro/coincheck.js +0 -6
  660. package/js/src/pro/coinex.js +0 -6
  661. package/js/src/pro/coinone.js +0 -6
  662. package/js/src/pro/cryptocom.js +0 -6
  663. package/js/src/pro/defx.js +0 -6
  664. package/js/src/pro/deribit.js +0 -6
  665. package/js/src/pro/derive.js +0 -6
  666. package/js/src/pro/exmo.js +0 -6
  667. package/js/src/pro/gate.js +0 -6
  668. package/js/src/pro/gateio.js +0 -6
  669. package/js/src/pro/gemini.js +0 -6
  670. package/js/src/pro/hashkey.js +0 -6
  671. package/js/src/pro/hitbtc.js +0 -6
  672. package/js/src/pro/hollaex.js +0 -6
  673. package/js/src/pro/htx.js +0 -6
  674. package/js/src/pro/huobi.js +0 -6
  675. package/js/src/pro/hyperliquid.js +6 -12
  676. package/js/src/pro/independentreserve.js +0 -6
  677. package/js/src/pro/kraken.js +18 -24
  678. package/js/src/pro/krakenfutures.js +0 -6
  679. package/js/src/pro/kucoin.js +0 -6
  680. package/js/src/pro/kucoinfutures.js +0 -6
  681. package/js/src/pro/lbank.js +0 -6
  682. package/js/src/pro/luno.js +0 -6
  683. package/js/src/pro/mexc.js +10 -16
  684. package/js/src/pro/modetrade.js +0 -6
  685. package/js/src/pro/myokx.js +0 -6
  686. package/js/src/pro/ndax.js +0 -6
  687. package/js/src/pro/okcoin.js +0 -6
  688. package/js/src/pro/okx.js +0 -6
  689. package/js/src/pro/okxus.js +0 -6
  690. package/js/src/pro/onetrading.js +0 -6
  691. package/js/src/pro/oxfun.js +0 -6
  692. package/js/src/pro/p2b.js +0 -6
  693. package/js/src/pro/paradex.js +0 -6
  694. package/js/src/pro/phemex.js +0 -6
  695. package/js/src/pro/poloniex.js +0 -6
  696. package/js/src/pro/probit.js +0 -6
  697. package/js/src/pro/tradeogre.js +0 -6
  698. package/js/src/pro/upbit.js +0 -6
  699. package/js/src/pro/vertex.js +0 -6
  700. package/js/src/pro/whitebit.js +0 -6
  701. package/js/src/pro/woo.js +0 -6
  702. package/js/src/pro/woofipro.js +0 -6
  703. package/js/src/pro/xt.js +0 -6
  704. package/js/src/probit.js +0 -6
  705. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  706. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  707. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  708. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  709. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  710. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  711. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  712. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  713. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  714. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  715. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  716. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  717. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  718. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  719. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  720. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  721. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  722. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  723. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  724. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  725. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  726. package/js/src/static_dependencies/ethers/index.js +0 -6
  727. package/js/src/static_dependencies/ethers/interface.js +0 -6
  728. package/js/src/static_dependencies/ethers/typed.js +0 -6
  729. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  730. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  731. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  732. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  733. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  734. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  735. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  736. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  737. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  738. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  739. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  740. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  741. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  742. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  743. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  744. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  745. package/js/src/static_dependencies/fflake/browser.js +0 -6
  746. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  747. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  748. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  749. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  750. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  751. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  752. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  753. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  754. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  755. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  756. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  757. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  758. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  759. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  760. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  761. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  762. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  763. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  764. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  765. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  766. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  767. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  768. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  769. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  770. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  771. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  772. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  773. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  774. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  775. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  776. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  777. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  778. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  779. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  780. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  781. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  782. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  783. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  784. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  785. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  786. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  787. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  788. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  789. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  790. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  791. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  792. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  793. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  794. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  795. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  796. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  797. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  798. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  799. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  800. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  801. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  802. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  803. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  804. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  805. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  806. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  807. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  808. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  809. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  810. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  811. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  812. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  813. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  814. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  815. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  816. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  817. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  818. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  819. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  820. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  821. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  822. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  823. package/js/src/static_dependencies/qs/formats.cjs +0 -6
  824. package/js/src/static_dependencies/qs/index.cjs +0 -6
  825. package/js/src/static_dependencies/qs/parse.cjs +0 -6
  826. package/js/src/static_dependencies/qs/stringify.cjs +0 -6
  827. package/js/src/static_dependencies/qs/utils.cjs +0 -6
  828. package/js/src/static_dependencies/scure-base/index.js +0 -6
  829. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  830. package/js/src/static_dependencies/starknet/constants.js +0 -6
  831. package/js/src/static_dependencies/starknet/index.js +0 -6
  832. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  833. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  834. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  835. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  836. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  837. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  838. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  839. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  840. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  841. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  842. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  843. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  844. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  845. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  846. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  847. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  848. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  849. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  850. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  851. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  852. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  853. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  854. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  855. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  856. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  857. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  858. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  859. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  860. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  861. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  862. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  863. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  864. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  865. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  866. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  867. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  868. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  869. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  870. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  871. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  872. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  873. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  874. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  875. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  876. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  877. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  878. package/js/src/timex.js +0 -6
  879. package/js/src/tokocrypto.js +0 -6
  880. package/js/src/tradeogre.js +0 -6
  881. package/js/src/upbit.js +0 -6
  882. package/js/src/vertex.js +0 -6
  883. package/js/src/wavesexchange.js +0 -6
  884. package/js/src/whitebit.js +0 -6
  885. package/js/src/woo.d.ts +79 -49
  886. package/js/src/woo.js +1279 -903
  887. package/js/src/woofipro.js +0 -6
  888. package/js/src/xt.js +0 -6
  889. package/js/src/yobit.js +0 -6
  890. package/js/src/zaif.js +0 -6
  891. package/js/src/zonda.js +0 -6
  892. package/package.json +7 -7
package/js/src/woo.js CHANGED
@@ -1,9 +1,3 @@
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
1
  // ---------------------------------------------------------------------------
8
2
  import Exchange from './abstract/woo.js';
9
3
  import { AuthenticationError, RateLimitExceeded, BadRequest, OperationFailed, ExchangeError, InvalidOrder, ArgumentsRequired, NotSupported, OnMaintenance } from './base/errors.js';
@@ -105,7 +99,7 @@ export default class woo extends Exchange {
105
99
  'fetchTickers': false,
106
100
  'fetchTime': true,
107
101
  'fetchTrades': true,
108
- 'fetchTradingFee': false,
102
+ 'fetchTradingFee': true,
109
103
  'fetchTradingFees': true,
110
104
  'fetchTransactions': 'emulated',
111
105
  'fetchTransfers': true,
@@ -241,19 +235,56 @@ export default class woo extends Exchange {
241
235
  'v3': {
242
236
  'public': {
243
237
  'get': {
244
- 'insuranceFund': 3,
238
+ 'systemInfo': 1,
239
+ 'instruments': 1,
240
+ 'token': 1,
241
+ 'tokenNetwork': 1,
242
+ 'tokenInfo': 1,
243
+ 'marketTrades': 1,
244
+ 'marketTradesHistory': 1,
245
+ 'orderbook': 1,
246
+ 'kline': 1,
247
+ 'klineHistory': 1,
248
+ 'futures': 1,
249
+ 'fundingRate': 1,
250
+ 'fundingRateHistory': 1,
251
+ 'insuranceFund': 1, // 10/1s
245
252
  },
246
253
  },
247
254
  'private': {
248
255
  'get': {
256
+ 'trade/order': 2,
257
+ 'trade/orders': 1,
258
+ 'trade/algoOrder': 1,
259
+ 'trade/algoOrders': 1,
260
+ 'trade/transaction': 1,
261
+ 'trade/transactionHistory': 5,
262
+ 'trade/tradingFee': 5,
263
+ 'account/info': 60,
264
+ 'account/tokenConfig': 1,
265
+ 'account/symbolConfig': 1,
266
+ 'account/subAccounts/all': 60,
267
+ 'account/referral/summary': 60,
268
+ 'account/referral/rewardHistory': 60,
269
+ 'account/credentials': 60,
270
+ 'asset/balances': 1,
271
+ 'asset/token/history': 60,
272
+ 'asset/transfer/history': 30,
273
+ 'asset/wallet/history': 60,
274
+ 'asset/wallet/deposit': 60,
275
+ 'asset/staking/yieldHistory': 60,
276
+ 'futures/positions': 3.33,
277
+ 'futures/leverage': 60,
278
+ 'futures/defaultMarginMode': 60,
279
+ 'futures/fundingFee/history': 30,
280
+ 'spotMargin/interestRate': 60,
281
+ 'spotMargin/interestHistory': 60,
282
+ 'spotMargin/maxMargin': 60,
249
283
  'algo/order/{oid}': 1,
250
284
  'algo/orders': 1,
251
285
  'balances': 1,
252
- 'accountinfo': 60,
253
286
  'positions': 3.33,
254
287
  'buypower': 1,
255
- 'referrals': 60,
256
- 'referral_rewards': 60,
257
288
  'convert/exchangeInfo': 1,
258
289
  'convert/assetInfo': 1,
259
290
  'convert/rfq': 60,
@@ -261,16 +292,34 @@ export default class woo extends Exchange {
261
292
  'convert/trades': 1,
262
293
  },
263
294
  'post': {
295
+ 'trade/order': 2,
296
+ 'trade/algoOrder': 5,
297
+ 'trade/cancelAllAfter': 1,
298
+ 'account/tradingMode': 120,
299
+ 'account/listenKey': 20,
300
+ 'asset/transfer': 30,
301
+ 'asset/wallet/withdraw': 60,
302
+ 'spotMargin/leverage': 120,
303
+ 'spotMargin/interestRepay': 60,
264
304
  'algo/order': 5,
265
305
  'convert/rft': 60,
266
306
  },
267
307
  'put': {
308
+ 'trade/order': 2,
309
+ 'trade/algoOrder': 2,
310
+ 'futures/leverage': 60,
311
+ 'futures/positionMode': 120,
268
312
  'order/{oid}': 2,
269
313
  'order/client/{client_order_id}': 2,
270
314
  'algo/order/{oid}': 2,
271
315
  'algo/order/client/{client_order_id}': 2,
272
316
  },
273
317
  'delete': {
318
+ 'trade/order': 1,
319
+ 'trade/orders': 1,
320
+ 'trade/algoOrder': 1,
321
+ 'trade/algoOrders': 1,
322
+ 'trade/allOrders': 1,
274
323
  'algo/order/{order_id}': 1,
275
324
  'algo/orders/pending': 1,
276
325
  'algo/orders/pending/{symbol}': 1,
@@ -449,20 +498,21 @@ export default class woo extends Exchange {
449
498
  * @method
450
499
  * @name woo#fetchStatus
451
500
  * @description the latest known information on the availability of the exchange API
452
- * @see https://docs.woox.io/#get-system-maintenance-status-public
501
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/systemInfo
453
502
  * @param {object} [params] extra parameters specific to the exchange API endpoint
454
503
  * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}
455
504
  */
456
505
  async fetchStatus(params = {}) {
457
- const response = await this.v1PublicGetSystemInfo(params);
506
+ const response = await this.v3PublicGetSystemInfo(params);
458
507
  //
459
508
  // {
460
509
  // "success": true,
461
510
  // "data": {
462
- // "status": "0",
463
- // "msg": "System is functioning properly."
511
+ // "status": 0,
512
+ // "msg": "System is functioning properly.",
513
+ // "estimatedEndTime": 1749963600362
464
514
  // },
465
- // "timestamp": "1709274106602"
515
+ // "timestamp": 1751442989564
466
516
  // }
467
517
  //
468
518
  const data = this.safeDict(response, 'data', {});
@@ -488,20 +538,21 @@ export default class woo extends Exchange {
488
538
  * @method
489
539
  * @name woo#fetchTime
490
540
  * @description fetches the current integer timestamp in milliseconds from the exchange server
491
- * @see https://docs.woox.io/#get-system-maintenance-status-public
541
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/systemInfo
492
542
  * @param {object} [params] extra parameters specific to the exchange API endpoint
493
543
  * @returns {int} the current integer timestamp in milliseconds from the exchange server
494
544
  */
495
545
  async fetchTime(params = {}) {
496
- const response = await this.v1PublicGetSystemInfo(params);
546
+ const response = await this.v3PublicGetSystemInfo(params);
497
547
  //
498
548
  // {
499
549
  // "success": true,
500
550
  // "data": {
501
- // "status": "0",
502
- // "msg": "System is functioning properly."
551
+ // "status": 0,
552
+ // "msg": "System is functioning properly.",
553
+ // "estimatedEndTime": 1749963600362
503
554
  // },
504
- // "timestamp": "1709274106602"
555
+ // "timestamp": 1751442989564
505
556
  // }
506
557
  //
507
558
  return this.safeInteger(response, 'timestamp');
@@ -510,7 +561,7 @@ export default class woo extends Exchange {
510
561
  * @method
511
562
  * @name woo#fetchMarkets
512
563
  * @description retrieves data on all markets for woo
513
- * @see https://docs.woox.io/#exchange-information
564
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/instruments
514
565
  * @param {object} [params] extra parameters specific to the exchange API endpoint
515
566
  * @returns {object[]} an array of objects representing market data
516
567
  */
@@ -518,30 +569,42 @@ export default class woo extends Exchange {
518
569
  if (this.options['adjustForTimeDifference']) {
519
570
  await this.loadTimeDifference();
520
571
  }
521
- const response = await this.v1PublicGetInfo(params);
572
+ const response = await this.v3PublicGetInstruments(params);
522
573
  //
523
- // {
524
- // "rows": [
525
- // {
526
- // "symbol": "SPOT_AAVE_USDT",
527
- // "quote_min": 0,
528
- // "quote_max": 100000,
529
- // "quote_tick": 0.01,
530
- // "base_min": 0.01,
531
- // "base_max": 7284,
532
- // "base_tick": 0.0001,
533
- // "min_notional": 10,
534
- // "price_range": 0.1,
535
- // "created_time": "0",
536
- // "updated_time": "1639107647.988",
537
- // "is_stable": 0
574
+ // {
575
+ // "success": true,
576
+ // "data": {
577
+ // "rows": [
578
+ // {
579
+ // "symbol": "SPOT_AAVE_USDT",
580
+ // "status": "TRADING",
581
+ // "baseAsset": "AAVE",
582
+ // "baseAssetMultiplier": 1,
583
+ // "quoteAsset": "USDT",
584
+ // "quoteMin": "0",
585
+ // "quoteMax": "100000",
586
+ // "quoteTick": "0.01",
587
+ // "baseMin": "0.005",
588
+ // "baseMax": "5000",
589
+ // "baseTick": "0.0001",
590
+ // "minNotional": "1",
591
+ // "bidCapRatio": "1.1",
592
+ // "bidFloorRatio": null,
593
+ // "askCapRatio": null,
594
+ // "askFloorRatio": "0.9",
595
+ // "orderMode": "NORMAL",
596
+ // "impactNotional": null,
597
+ // "isAllowedRpi": false,
598
+ // "tickGranularity": null
599
+ // }
600
+ // ]
538
601
  // },
539
- // ...
540
- // "success": true
541
- // }
602
+ // "timestamp": 1751512951338
603
+ // }
542
604
  //
543
- const data = this.safeList(response, 'rows', []);
544
- return this.parseMarkets(data);
605
+ const data = this.safeDict(response, 'data', {});
606
+ const rows = this.safeList(data, 'rows', []);
607
+ return this.parseMarkets(rows);
545
608
  }
546
609
  parseMarket(market) {
547
610
  const marketId = this.safeString(market, 'symbol');
@@ -579,7 +642,7 @@ export default class woo extends Exchange {
579
642
  linear = true;
580
643
  inverse = false;
581
644
  }
582
- const active = this.safeString(market, 'is_trading') === '1';
645
+ const active = this.safeString(market, 'status') === 'TRADING';
583
646
  return {
584
647
  'id': marketId,
585
648
  'symbol': symbol,
@@ -605,8 +668,8 @@ export default class woo extends Exchange {
605
668
  'strike': undefined,
606
669
  'optionType': undefined,
607
670
  'precision': {
608
- 'amount': this.safeNumber(market, 'base_tick'),
609
- 'price': this.safeNumber(market, 'quote_tick'),
671
+ 'amount': this.safeNumber(market, 'baseTick'),
672
+ 'price': this.safeNumber(market, 'quoteTick'),
610
673
  },
611
674
  'limits': {
612
675
  'leverage': {
@@ -614,19 +677,19 @@ export default class woo extends Exchange {
614
677
  'max': undefined,
615
678
  },
616
679
  'amount': {
617
- 'min': this.safeNumber(market, 'base_min'),
618
- 'max': this.safeNumber(market, 'base_max'),
680
+ 'min': this.safeNumber(market, 'baseMin'),
681
+ 'max': this.safeNumber(market, 'baseMax'),
619
682
  },
620
683
  'price': {
621
- 'min': this.safeNumber(market, 'quote_min'),
622
- 'max': this.safeNumber(market, 'quote_max'),
684
+ 'min': this.safeNumber(market, 'quoteMin'),
685
+ 'max': this.safeNumber(market, 'quoteMax'),
623
686
  },
624
687
  'cost': {
625
- 'min': this.safeNumber(market, 'min_notional'),
688
+ 'min': this.safeNumber(market, 'minNotional'),
626
689
  'max': undefined,
627
690
  },
628
691
  },
629
- 'created': this.safeTimestamp(market, 'created_time'),
692
+ 'created': null,
630
693
  'info': market,
631
694
  };
632
695
  }
@@ -634,7 +697,7 @@ export default class woo extends Exchange {
634
697
  * @method
635
698
  * @name woo#fetchTrades
636
699
  * @description get the list of most recent trades for a particular symbol
637
- * @see https://docs.woox.io/#market-trades-public
700
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/marketTrades
638
701
  * @param {string} symbol unified symbol of the market to fetch trades for
639
702
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
640
703
  * @param {int} [limit] the maximum amount of trades to fetch
@@ -650,38 +713,28 @@ export default class woo extends Exchange {
650
713
  if (limit !== undefined) {
651
714
  request['limit'] = limit;
652
715
  }
653
- const response = await this.v1PublicGetMarketTrades(this.extend(request, params));
716
+ const response = await this.v3PublicGetMarketTrades(this.extend(request, params));
654
717
  //
655
- // {
656
- // "success": true,
657
- // "rows": [
658
- // {
659
- // "symbol": "SPOT_BTC_USDT",
660
- // "side": "SELL",
661
- // "executed_price": 46222.35,
662
- // "executed_quantity": 0.0012,
663
- // "executed_timestamp": "1641241162.329"
664
- // },
665
- // {
666
- // "symbol": "SPOT_BTC_USDT",
667
- // "side": "SELL",
668
- // "executed_price": 46222.35,
669
- // "executed_quantity": 0.0012,
670
- // "executed_timestamp": "1641241162.329"
671
- // },
672
- // {
673
- // "symbol": "SPOT_BTC_USDT",
674
- // "side": "BUY",
675
- // "executed_price": 46224.32,
676
- // "executed_quantity": 0.00039,
677
- // "executed_timestamp": "1641241162.287"
718
+ // {
719
+ // "success": true,
720
+ // "data": {
721
+ // "rows": [
722
+ // {
723
+ // "symbol": "SPOT_BTC_USDT",
724
+ // "side": "SELL",
725
+ // "source": 0,
726
+ // "executedPrice": "108741.01",
727
+ // "executedQuantity": "0.02477",
728
+ // "executedTimestamp": 1751513940144
729
+ // }
730
+ // ]
678
731
  // },
679
- // ...
680
- // ]
681
- // }
732
+ // "timestamp": 1751513988543
733
+ // }
682
734
  //
683
- const resultResponse = this.safeList(response, 'rows', []);
684
- return this.parseTrades(resultResponse, market, since, limit);
735
+ const data = this.safeDict(response, 'data', {});
736
+ const rows = this.safeList(data, 'rows', []);
737
+ return this.parseTrades(rows, market, since, limit);
685
738
  }
686
739
  parseTrade(trade, market = undefined) {
687
740
  //
@@ -690,36 +743,47 @@ export default class woo extends Exchange {
690
743
  // {
691
744
  // "symbol": "SPOT_BTC_USDT",
692
745
  // "side": "SELL",
693
- // "executed_price": 46222.35,
694
- // "executed_quantity": 0.0012,
695
- // "executed_timestamp": "1641241162.329"
746
+ // "source": 0,
747
+ // "executedPrice": "108741.01",
748
+ // "executedQuantity": "0.02477",
749
+ // "executedTimestamp": 1751513940144
696
750
  // }
697
751
  //
698
752
  // fetchOrderTrades, fetchOrder
699
753
  //
700
754
  // {
701
- // "id": "99119876",
702
- // "symbol": "SPOT_WOO_USDT",
703
- // "fee": "0.0024",
755
+ // "id": 1734947821,
756
+ // "symbol": "SPOT_LTC_USDT",
757
+ // "orderId": 60780383217,
758
+ // "executedPrice": 87.86,
759
+ // "executedQuantity": 0.1,
760
+ // "fee": 0.0001,
761
+ // "realizedPnl": null,
762
+ // "feeAsset": "LTC",
763
+ // "orderTag": "default",
704
764
  // "side": "BUY",
705
- // "executed_timestamp": "1641481113.084",
706
- // "order_id": "87001234",
707
- // "order_tag": "default", <-- this param only in "fetchOrderTrades"
708
- // "executed_price": "1",
709
- // "executed_quantity": "12",
710
- // "fee_asset": "WOO",
711
- // "is_maker": "1"
765
+ // "executedTimestamp": "1752055173.630",
766
+ // "isMaker": 0
712
767
  // }
713
768
  //
714
769
  const isFromFetchOrder = ('id' in trade);
715
- const timestamp = this.safeTimestamp(trade, 'executed_timestamp');
770
+ const timestampString = this.safeString2(trade, 'executed_timestamp', 'executedTimestamp');
771
+ let timestamp = undefined;
772
+ if (timestampString !== undefined) {
773
+ if (timestampString.indexOf('.') > -1) {
774
+ timestamp = this.safeTimestamp2(trade, 'executed_timestamp', 'executedTimestamp');
775
+ }
776
+ else {
777
+ timestamp = this.safeInteger(trade, 'executedTimestamp');
778
+ }
779
+ }
716
780
  const marketId = this.safeString(trade, 'symbol');
717
781
  market = this.safeMarket(marketId, market);
718
782
  const symbol = market['symbol'];
719
- const price = this.safeString(trade, 'executed_price');
720
- const amount = this.safeString(trade, 'executed_quantity');
721
- const order_id = this.safeString(trade, 'order_id');
722
- const fee = this.parseTokenAndFeeTemp(trade, 'fee_asset', 'fee');
783
+ const price = this.safeString2(trade, 'executed_price', 'executedPrice');
784
+ const amount = this.safeString2(trade, 'executed_quantity', 'executedQuantity');
785
+ const order_id = this.safeString2(trade, 'order_id', 'orderId');
786
+ const fee = this.parseTokenAndFeeTemp(trade, ['fee_asset', 'feeAsset'], ['fee']);
723
787
  const feeCost = this.safeString(fee, 'cost');
724
788
  if (feeCost !== undefined) {
725
789
  fee['cost'] = feeCost;
@@ -729,7 +793,7 @@ export default class woo extends Exchange {
729
793
  const id = this.safeString(trade, 'id');
730
794
  let takerOrMaker = undefined;
731
795
  if (isFromFetchOrder) {
732
- const isMaker = this.safeString(trade, 'is_maker') === '1';
796
+ const isMaker = this.safeString2(trade, 'is_maker', 'isMaker') === '1';
733
797
  takerOrMaker = isMaker ? 'maker' : 'taker';
734
798
  }
735
799
  return this.safeTrade({
@@ -748,11 +812,11 @@ export default class woo extends Exchange {
748
812
  'info': trade,
749
813
  }, market);
750
814
  }
751
- parseTokenAndFeeTemp(item, feeTokenKey, feeAmountKey) {
752
- const feeCost = this.safeString(item, feeAmountKey);
815
+ parseTokenAndFeeTemp(item, feeTokenKeys, feeAmountKeys) {
816
+ const feeCost = this.safeStringN(item, feeAmountKeys);
753
817
  let fee = undefined;
754
818
  if (feeCost !== undefined) {
755
- const feeCurrencyId = this.safeString(item, feeTokenKey);
819
+ const feeCurrencyId = this.safeStringN(item, feeTokenKeys);
756
820
  const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
757
821
  fee = {
758
822
  'cost': feeCost,
@@ -761,43 +825,90 @@ export default class woo extends Exchange {
761
825
  }
762
826
  return fee;
763
827
  }
828
+ parseTradingFee(fee, market = undefined) {
829
+ const marketId = this.safeString(fee, 'symbol');
830
+ const symbol = this.safeSymbol(marketId, market);
831
+ return {
832
+ 'info': fee,
833
+ 'symbol': symbol,
834
+ 'maker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'makerFee'), '100')),
835
+ 'taker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'takerFee'), '100')),
836
+ 'percentage': undefined,
837
+ 'tierBased': undefined,
838
+ };
839
+ }
840
+ /**
841
+ * @method
842
+ * @name woo#fetchTradingFee
843
+ * @description fetch the trading fees for a market
844
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_tradingFee
845
+ * @param {string} symbol unified market symbol
846
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
847
+ * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch trading fees in a portfolio margin account
848
+ * @param {string} [params.subType] "linear" or "inverse"
849
+ * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
850
+ */
851
+ async fetchTradingFee(symbol, params = {}) {
852
+ await this.loadMarkets();
853
+ const market = this.market(symbol);
854
+ const request = {
855
+ 'symbol': market['id'],
856
+ };
857
+ const response = await this.v3PrivateGetTradeTradingFee(this.extend(request, params));
858
+ //
859
+ // {
860
+ // "success": true,
861
+ // "data": {
862
+ // "symbol": "SPOT_BTC_USDT",
863
+ // "takerFee": "10",
864
+ // "makerFee": "8"
865
+ // },
866
+ // "timestamp": 1751858977368
867
+ // }
868
+ //
869
+ const data = this.safeDict(response, 'data', {});
870
+ return this.parseTradingFee(data, market);
871
+ }
764
872
  /**
765
873
  * @method
766
874
  * @name woo#fetchTradingFees
767
875
  * @description fetch the trading fees for multiple markets
768
- * @see https://docs.woox.io/#get-account-information-new
876
+ * @see https://developer.woox.io/api-reference/endpoint/account/get_account_info
769
877
  * @param {object} [params] extra parameters specific to the exchange API endpoint
770
878
  * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
771
879
  */
772
880
  async fetchTradingFees(params = {}) {
773
881
  await this.loadMarkets();
774
- const response = await this.v3PrivateGetAccountinfo(params);
882
+ const response = await this.v3PrivateGetAccountInfo(params);
775
883
  //
776
884
  // {
777
885
  // "success": true,
778
886
  // "data": {
779
- // "applicationId": "dsa",
780
- // "account": "dsa",
781
- // "alias": "haha",
782
- // "accountMode": "MARGIN",
783
- // "leverage": 1,
784
- // "takerFeeRate": 1,
785
- // "makerFeeRate": 1,
786
- // "interestRate": 1,
787
- // "futuresTakerFeeRate": 1,
788
- // "futuresMakerFeeRate": 1,
887
+ // "applicationId": "251bf5c4-f3c8-4544-bb8b-80001007c3c0",
888
+ // "account": "carlos_jose_lima@yahoo.com",
889
+ // "alias": "carlos_jose_lima@yahoo.com",
789
890
  // "otpauth": true,
790
- // "marginRatio": 1,
791
- // "openMarginRatio": 1,
792
- // "initialMarginRatio": 1,
793
- // "maintenanceMarginRatio": 1,
794
- // "totalCollateral": 1,
795
- // "freeCollateral": 1,
796
- // "totalAccountValue": 1,
797
- // "totalVaultValue": 1,
798
- // "totalStakingValue": 1
891
+ // "accountMode": "FUTURES",
892
+ // "positionMode": "ONE_WAY",
893
+ // "leverage": 0,
894
+ // "makerFeeRate": 0,
895
+ // "takerFeeRate": 0,
896
+ // "marginRatio": "10",
897
+ // "openMarginRatio": "10",
898
+ // "initialMarginRatio": "10",
899
+ // "maintenanceMarginRatio": "0.03",
900
+ // "totalCollateral": "165.55629469",
901
+ // "freeCollateral": "165.55629469",
902
+ // "totalAccountValue": "167.32418611",
903
+ // "totalTradingValue": "167.32418611",
904
+ // "totalVaultValue": "0",
905
+ // "totalStakingValue": "0",
906
+ // "totalLaunchpadValue": "0",
907
+ // "totalEarnValue": "0",
908
+ // "referrerID": null,
909
+ // "accountType": "Main"
799
910
  // },
800
- // "timestamp": 1673323685109
911
+ // "timestamp": 1752062807915
801
912
  // }
802
913
  //
803
914
  const data = this.safeDict(response, 'data', {});
@@ -1061,8 +1172,8 @@ export default class woo extends Exchange {
1061
1172
  * @method
1062
1173
  * @name woo#createOrder
1063
1174
  * @description create a trade order
1064
- * @see https://docs.woox.io/#send-order
1065
- * @see https://docs.woox.io/#send-algo-order
1175
+ * @see https://developer.woox.io/api-reference/endpoint/trading/post_order
1176
+ * @see https://developer.woox.io/api-reference/endpoint/trading/post_algo_order
1066
1177
  * @param {string} symbol unified symbol of the market to create an order in
1067
1178
  * @param {string} type 'market' or 'limit'
1068
1179
  * @param {string} side 'buy' or 'sell'
@@ -1097,7 +1208,7 @@ export default class woo extends Exchange {
1097
1208
  let marginMode = undefined;
1098
1209
  [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
1099
1210
  if (marginMode !== undefined) {
1100
- request['margin_mode'] = this.encodeMarginMode(marginMode);
1211
+ request['marginMode'] = this.encodeMarginMode(marginMode);
1101
1212
  }
1102
1213
  const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
1103
1214
  const stopLoss = this.safeValue(params, 'stopLoss');
@@ -1113,33 +1224,29 @@ export default class woo extends Exchange {
1113
1224
  const isMarket = orderType === 'MARKET';
1114
1225
  const timeInForce = this.safeStringLower(params, 'timeInForce');
1115
1226
  const postOnly = this.isPostOnly(isMarket, undefined, params);
1116
- const reduceOnlyKey = isConditional ? 'reduceOnly' : 'reduce_only';
1117
- const clientOrderIdKey = isConditional ? 'clientOrderId' : 'client_order_id';
1118
- const orderQtyKey = isConditional ? 'quantity' : 'order_quantity';
1119
- const priceKey = isConditional ? 'price' : 'order_price';
1120
- const typeKey = isConditional ? 'type' : 'order_type';
1121
- request[typeKey] = orderType; // LIMIT/MARKET/IOC/FOK/POST_ONLY/ASK/BID
1227
+ const clientOrderIdKey = isConditional ? 'clientAlgoOrderId' : 'clientOrderId';
1228
+ request['type'] = orderType; // LIMIT/MARKET/IOC/FOK/POST_ONLY/ASK/BID
1122
1229
  if (!isConditional) {
1123
1230
  if (postOnly) {
1124
- request['order_type'] = 'POST_ONLY';
1231
+ request['type'] = 'POST_ONLY';
1125
1232
  }
1126
1233
  else if (timeInForce === 'fok') {
1127
- request['order_type'] = 'FOK';
1234
+ request['type'] = 'FOK';
1128
1235
  }
1129
1236
  else if (timeInForce === 'ioc') {
1130
- request['order_type'] = 'IOC';
1237
+ request['type'] = 'IOC';
1131
1238
  }
1132
1239
  }
1133
1240
  if (reduceOnly) {
1134
- request[reduceOnlyKey] = reduceOnly;
1241
+ request['reduceOnly'] = reduceOnly;
1135
1242
  }
1136
1243
  if (!isMarket && price !== undefined) {
1137
- request[priceKey] = this.priceToPrecision(symbol, price);
1244
+ request['price'] = this.priceToPrecision(symbol, price);
1138
1245
  }
1139
1246
  if (isMarket && !isConditional) {
1140
1247
  // for market buy it requires the amount of quote currency to spend
1141
- const cost = this.safeString2(params, 'cost', 'order_amount');
1142
- params = this.omit(params, ['cost', 'order_amount']);
1248
+ const cost = this.safeStringN(params, ['cost', 'order_amount', 'orderAmount']);
1249
+ params = this.omit(params, ['cost', 'order_amount', 'orderAmount']);
1143
1250
  const isPriceProvided = price !== undefined;
1144
1251
  if (market['spot'] && (isPriceProvided || (cost !== undefined))) {
1145
1252
  let quoteAmount = undefined;
@@ -1152,14 +1259,14 @@ export default class woo extends Exchange {
1152
1259
  const costRequest = Precise.stringMul(amountString, priceString);
1153
1260
  quoteAmount = this.costToPrecision(symbol, costRequest);
1154
1261
  }
1155
- request['order_amount'] = quoteAmount;
1262
+ request['amount'] = quoteAmount;
1156
1263
  }
1157
1264
  else {
1158
- request['order_quantity'] = this.amountToPrecision(symbol, amount);
1265
+ request['quantity'] = this.amountToPrecision(symbol, amount);
1159
1266
  }
1160
1267
  }
1161
1268
  else if (algoType !== 'POSITIONAL_TP_SL') {
1162
- request[orderQtyKey] = this.amountToPrecision(symbol, amount);
1269
+ request['quantity'] = this.amountToPrecision(symbol, amount);
1163
1270
  }
1164
1271
  const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1165
1272
  if (clientOrderId !== undefined) {
@@ -1222,44 +1329,46 @@ export default class woo extends Exchange {
1222
1329
  params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id', 'postOnly', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLoss', 'takeProfit', 'trailingPercent', 'trailingAmount', 'trailingTriggerPrice']);
1223
1330
  let response = undefined;
1224
1331
  if (isConditional) {
1225
- response = await this.v3PrivatePostAlgoOrder(this.extend(request, params));
1332
+ response = await this.v3PrivatePostTradeAlgoOrder(this.extend(request, params));
1333
+ //
1334
+ // {
1335
+ // "success": true,
1336
+ // "data": {
1337
+ // "rows": [
1338
+ // {
1339
+ // "orderId": "1578938",
1340
+ // "clientOrderId": "0",
1341
+ // "algoType": "STOP_LOSS",
1342
+ // "quantity": "0.1"
1343
+ // }
1344
+ // ]
1345
+ // },
1346
+ // "timestamp": "1686149372216"
1347
+ // }
1348
+ //
1226
1349
  }
1227
1350
  else {
1228
- response = await this.v1PrivatePostOrder(this.extend(request, params));
1229
- }
1230
- // {
1231
- // "success": true,
1232
- // "timestamp": "1641383206.489",
1233
- // "order_id": "86980774",
1234
- // "order_type": "LIMIT",
1235
- // "order_price": "1", // null for "MARKET" order
1236
- // "order_quantity": "12", // null for "MARKET" order
1237
- // "order_amount": null, // NOT-null for "MARKET" order
1238
- // "client_order_id": "0"
1239
- // }
1240
- // stop orders
1241
- // {
1242
- // "success": true,
1243
- // "data": {
1244
- // "rows": [
1245
- // {
1246
- // "orderId": "1578938",
1247
- // "clientOrderId": "0",
1248
- // "algoType": "STOP_LOSS",
1249
- // "quantity": "0.1"
1250
- // }
1251
- // ]
1252
- // },
1253
- // "timestamp": "1686149372216"
1254
- // }
1255
- const data = this.safeDict(response, 'data');
1256
- if (data !== undefined) {
1257
- const rows = this.safeList(data, 'rows', []);
1258
- return this.parseOrder(rows[0], market);
1351
+ response = await this.v3PrivatePostTradeOrder(this.extend(request, params));
1352
+ //
1353
+ // {
1354
+ // "success": true,
1355
+ // "data": {
1356
+ // "orderId": 60667653330,
1357
+ // "clientOrderId": 0,
1358
+ // "type": "LIMIT",
1359
+ // "price": 60,
1360
+ // "quantity": 0.1,
1361
+ // "amount": null,
1362
+ // "bidAskLevel": null
1363
+ // },
1364
+ // "timestamp": 1751871779855
1365
+ // }
1366
+ //
1259
1367
  }
1260
- const order = this.parseOrder(response, market);
1261
- order['type'] = type;
1262
- return order;
1368
+ let data = this.safeDict(response, 'data', {});
1369
+ data = this.safeDict(this.safeList(data, 'rows'), 0, data);
1370
+ data['timestamp'] = this.safeString(response, 'timestamp');
1371
+ return this.parseOrder(data, market);
1263
1372
  }
1264
1373
  encodeMarginMode(mode) {
1265
1374
  const modes = {
@@ -1368,9 +1477,8 @@ export default class woo extends Exchange {
1368
1477
  /**
1369
1478
  * @method
1370
1479
  * @name woo#cancelOrder
1371
- * @see https://docs.woox.io/#cancel-algo-order
1372
- * @see https://docs.woox.io/#cancel-order
1373
- * @see https://docs.woox.io/#cancel-order-by-client_order_id
1480
+ * @see https://developer.woox.io/api-reference/endpoint/trading/cancel_order
1481
+ * @see https://developer.woox.io/api-reference/endpoint/trading/cancel_algo_order
1374
1482
  * @description cancels an open order
1375
1483
  * @param {string} id order id
1376
1484
  * @param {string} symbol unified symbol of the market the order was made in
@@ -1392,42 +1500,52 @@ export default class woo extends Exchange {
1392
1500
  const request = {};
1393
1501
  const clientOrderIdUnified = this.safeString2(params, 'clOrdID', 'clientOrderId');
1394
1502
  const clientOrderIdExchangeSpecific = this.safeString(params, 'client_order_id', clientOrderIdUnified);
1503
+ params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1395
1504
  const isByClientOrder = clientOrderIdExchangeSpecific !== undefined;
1396
1505
  let response = undefined;
1397
1506
  if (isTrigger) {
1398
- request['order_id'] = id;
1399
- response = await this.v3PrivateDeleteAlgoOrderOrderId(this.extend(request, params));
1507
+ if (isByClientOrder) {
1508
+ request['clientAlgoOrderId'] = clientOrderIdExchangeSpecific;
1509
+ }
1510
+ else {
1511
+ request['algoOrderId'] = id;
1512
+ }
1513
+ response = await this.v3PrivateDeleteTradeAlgoOrder(this.extend(request, params));
1400
1514
  }
1401
1515
  else {
1402
1516
  request['symbol'] = market['id'];
1403
1517
  if (isByClientOrder) {
1404
- request['client_order_id'] = clientOrderIdExchangeSpecific;
1405
- params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1406
- response = await this.v1PrivateDeleteClientOrder(this.extend(request, params));
1518
+ request['clientOrderId'] = clientOrderIdExchangeSpecific;
1407
1519
  }
1408
1520
  else {
1409
- request['order_id'] = id;
1410
- response = await this.v1PrivateDeleteOrder(this.extend(request, params));
1521
+ request['orderId'] = id;
1411
1522
  }
1523
+ response = await this.v3PrivateDeleteTradeOrder(this.extend(request, params));
1412
1524
  }
1413
1525
  //
1414
- // { success: true, status: "CANCEL_SENT" }
1526
+ // {
1527
+ // "success": true,
1528
+ // "data": {
1529
+ // "status": "CANCEL_SENT"
1530
+ // },
1531
+ // "timestamp": 1751940315838
1532
+ // }
1415
1533
  //
1416
- const extendParams = { 'symbol': symbol };
1534
+ const data = this.safeDict(response, 'data', {});
1535
+ data['timestamp'] = this.safeString(response, 'timestamp');
1417
1536
  if (isByClientOrder) {
1418
- extendParams['client_order_id'] = clientOrderIdExchangeSpecific;
1537
+ data['clientOrderId'] = clientOrderIdExchangeSpecific;
1419
1538
  }
1420
1539
  else {
1421
- extendParams['id'] = id;
1540
+ data['orderId'] = id;
1422
1541
  }
1423
- return this.extend(this.parseOrder(response), extendParams);
1542
+ return this.parseOrder(data, market);
1424
1543
  }
1425
1544
  /**
1426
1545
  * @method
1427
1546
  * @name woo#cancelAllOrders
1428
- * @see https://docs.woox.io/#cancel-all-pending-orders
1429
- * @see https://docs.woox.io/#cancel-orders
1430
- * @see https://docs.woox.io/#cancel-all-pending-algo-orders
1547
+ * @see https://developer.woox.io/api-reference/endpoint/trading/cancel_all_order
1548
+ * @see https://developer.woox.io/api-reference/endpoint/trading/cancel_algo_orders
1431
1549
  * @description cancel all open orders in a market
1432
1550
  * @param {string} symbol unified market symbol
1433
1551
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -1438,32 +1556,30 @@ export default class woo extends Exchange {
1438
1556
  await this.loadMarkets();
1439
1557
  const trigger = this.safeBool2(params, 'stop', 'trigger');
1440
1558
  params = this.omit(params, ['stop', 'trigger']);
1441
- if (trigger) {
1442
- return await this.v3PrivateDeleteAlgoOrdersPending(params);
1559
+ const request = {};
1560
+ if (symbol !== undefined) {
1561
+ const market = this.market(symbol);
1562
+ request['symbol'] = market['id'];
1443
1563
  }
1444
- if (symbol === undefined) {
1445
- throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
1564
+ if (trigger) {
1565
+ return await this.v3PrivateDeleteTradeAlgoOrders(params);
1446
1566
  }
1447
- const market = this.market(symbol);
1448
- const request = {
1449
- 'symbol': market['id'],
1450
- };
1451
- const response = await this.v1PrivateDeleteOrders(this.extend(request, params));
1452
1567
  //
1453
1568
  // {
1454
- // "success":true,
1455
- // "status":"CANCEL_ALL_SENT"
1569
+ // "success": true,
1570
+ // "data": {
1571
+ // "status": "CANCEL_ALL_SENT"
1572
+ // },
1573
+ // "timestamp": 1751941988134
1456
1574
  // }
1457
1575
  //
1458
- return [
1459
- this.safeOrder(response),
1460
- ];
1576
+ return await this.v3PrivateDeleteTradeOrders(this.extend(request, params));
1461
1577
  }
1462
1578
  /**
1463
1579
  * @method
1464
1580
  * @name woo#cancelAllOrdersAfter
1465
1581
  * @description dead man's switch, cancel all orders after the given timeout
1466
- * @see https://docs.woox.io/#cancel-all-after
1582
+ * @see https://developer.woox.io/api-reference/endpoint/trading/cancel_all_after
1467
1583
  * @param {number} timeout time in milliseconds, 0 represents cancel the timer
1468
1584
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1469
1585
  * @returns {object} the api result
@@ -1471,27 +1587,25 @@ export default class woo extends Exchange {
1471
1587
  async cancelAllOrdersAfter(timeout, params = {}) {
1472
1588
  await this.loadMarkets();
1473
1589
  const request = {
1474
- 'trigger_after': (timeout > 0) ? timeout : 0,
1590
+ 'triggerAfter': (timeout > 0) ? Math.min(timeout, 900000) : 0,
1475
1591
  };
1476
- const response = await this.v1PrivatePostOrderCancelAllAfter(this.extend(request, params));
1592
+ const response = await this.v3PrivatePostTradeCancelAllAfter(this.extend(request, params));
1477
1593
  //
1478
- // {
1479
- // "success": true,
1480
- // "data": {
1481
- // "expected_trigger_time": 1711534302938
1482
- // },
1483
- // "timestamp": 1711534302943
1594
+ // {
1595
+ // "success": true,
1596
+ // "timestamp": 123,
1597
+ // "data": {
1598
+ // "expectedTriggerTime": 123
1484
1599
  // }
1600
+ // }
1485
1601
  //
1486
- return [
1487
- this.safeOrder(response),
1488
- ];
1602
+ return response;
1489
1603
  }
1490
1604
  /**
1491
1605
  * @method
1492
1606
  * @name woo#fetchOrder
1493
- * @see https://docs.woox.io/#get-algo-order
1494
- * @see https://docs.woox.io/#get-order
1607
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_order
1608
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_algo_order
1495
1609
  * @description fetches information on an order made by the user
1496
1610
  * @param {string} id the order id
1497
1611
  * @param {string} symbol unified symbol of the market the order was made in
@@ -1501,68 +1615,109 @@ export default class woo extends Exchange {
1501
1615
  */
1502
1616
  async fetchOrder(id, symbol = undefined, params = {}) {
1503
1617
  await this.loadMarkets();
1504
- const market = (symbol !== undefined) ? this.market(symbol) : undefined;
1618
+ let market = undefined;
1619
+ if (symbol !== undefined) {
1620
+ market = this.market(symbol);
1621
+ }
1505
1622
  const trigger = this.safeBool2(params, 'stop', 'trigger');
1506
1623
  params = this.omit(params, ['stop', 'trigger']);
1507
1624
  const request = {};
1508
1625
  const clientOrderId = this.safeString2(params, 'clOrdID', 'clientOrderId');
1509
1626
  let response = undefined;
1510
1627
  if (trigger) {
1511
- request['oid'] = id;
1512
- response = await this.v3PrivateGetAlgoOrderOid(this.extend(request, params));
1513
- }
1514
- else if (clientOrderId) {
1515
- request['client_order_id'] = clientOrderId;
1516
- response = await this.v1PrivateGetClientOrderClientOrderId(this.extend(request, params));
1628
+ if (clientOrderId !== undefined) {
1629
+ request['clientAlgoOrderId'] = id;
1630
+ }
1631
+ else {
1632
+ request['algoOrderId'] = id;
1633
+ }
1634
+ response = await this.v3PrivateGetTradeAlgoOrder(this.extend(request, params));
1635
+ //
1636
+ // {
1637
+ // "success": true,
1638
+ // "data": {
1639
+ // "algoOrderId": 10399260,
1640
+ // "clientAlgoOrderId": 0,
1641
+ // "rootAlgoOrderId": 10399260,
1642
+ // "parentAlgoOrderId": 0,
1643
+ // "symbol": "SPOT_LTC_USDT",
1644
+ // "algoOrderTag": "default",
1645
+ // "algoType": "TAKE_PROFIT",
1646
+ // "side": "BUY",
1647
+ // "quantity": 0.1,
1648
+ // "isTriggered": false,
1649
+ // "triggerPrice": 65,
1650
+ // "triggerStatus": "USELESS",
1651
+ // "type": "LIMIT",
1652
+ // "rootAlgoStatus": "NEW",
1653
+ // "algoStatus": "NEW",
1654
+ // "triggerPriceType": "MARKET_PRICE",
1655
+ // "price": 60,
1656
+ // "triggerTime": "0",
1657
+ // "totalExecutedQuantity": 0,
1658
+ // "visibleQuantity": 0.1,
1659
+ // "averageExecutedPrice": 0,
1660
+ // "totalFee": 0,
1661
+ // "feeAsset": "",
1662
+ // "totalRebate": 0,
1663
+ // "rebateAsset": "",
1664
+ // "reduceOnly": false,
1665
+ // "createdTime": "1752049747.732",
1666
+ // "updatedTime": "1752049747.732",
1667
+ // "positionSide": "BOTH"
1668
+ // },
1669
+ // "timestamp": 1752049767550
1670
+ // }
1671
+ //
1517
1672
  }
1518
1673
  else {
1519
- request['oid'] = id;
1520
- response = await this.v1PrivateGetOrderOid(this.extend(request, params));
1674
+ if (clientOrderId !== undefined) {
1675
+ request['clientOrderId'] = clientOrderId;
1676
+ }
1677
+ else {
1678
+ request['orderId'] = id;
1679
+ }
1680
+ response = await this.v3PrivateGetTradeOrder(this.extend(request, params));
1681
+ //
1682
+ // {
1683
+ // "success": true,
1684
+ // "data": {
1685
+ // "orderId": 60780315704,
1686
+ // "clientOrderId": 0,
1687
+ // "symbol": "SPOT_LTC_USDT",
1688
+ // "orderTag": "default",
1689
+ // "side": "BUY",
1690
+ // "quantity": 0.1,
1691
+ // "amount": null,
1692
+ // "type": "LIMIT",
1693
+ // "status": "NEW",
1694
+ // "price": 60,
1695
+ // "executed": 0,
1696
+ // "visible": 0.1,
1697
+ // "averageExecutedPrice": 0,
1698
+ // "totalFee": 0,
1699
+ // "feeAsset": "LTC",
1700
+ // "totalRebate": 0,
1701
+ // "rebateAsset": "USDT",
1702
+ // "reduceOnly": false,
1703
+ // "createdTime": "1752049062.496",
1704
+ // "realizedPnl": null,
1705
+ // "positionSide": "BOTH",
1706
+ // "bidAskLevel": null
1707
+ // },
1708
+ // "timestamp": 1752049393466
1709
+ // }
1710
+ //
1521
1711
  }
1522
- //
1523
- // {
1524
- // "success": true,
1525
- // "symbol": "SPOT_WOO_USDT",
1526
- // "status": "FILLED", // FILLED, NEW
1527
- // "side": "BUY",
1528
- // "created_time": "1641480933.000",
1529
- // "order_id": "87541111",
1530
- // "order_tag": "default",
1531
- // "price": "1",
1532
- // "type": "LIMIT",
1533
- // "quantity": "12",
1534
- // "amount": null,
1535
- // "visible": "12",
1536
- // "executed": "12", // or any partial amount
1537
- // "total_fee": "0.0024",
1538
- // "fee_asset": "WOO",
1539
- // "client_order_id": null,
1540
- // "average_executed_price": "1",
1541
- // "Transactions": [
1542
- // {
1543
- // "id": "99111647",
1544
- // "symbol": "SPOT_WOO_USDT",
1545
- // "fee": "0.0024",
1546
- // "side": "BUY",
1547
- // "executed_timestamp": "1641482113.084",
1548
- // "order_id": "87541111",
1549
- // "executed_price": "1",
1550
- // "executed_quantity": "12",
1551
- // "fee_asset": "WOO",
1552
- // "is_maker": "1"
1553
- // }
1554
- // ]
1555
- // }
1556
- //
1557
- const orders = this.safeDict(response, 'data', response);
1558
- return this.parseOrder(orders, market);
1712
+ const data = this.safeDict(response, 'data', {});
1713
+ return this.parseOrder(data, market);
1559
1714
  }
1560
1715
  /**
1561
1716
  * @method
1562
1717
  * @name woo#fetchOrders
1563
1718
  * @description fetches information on multiple orders made by the user
1564
- * @see https://docs.woox.io/#get-orders
1565
- * @see https://docs.woox.io/#get-algo-orders
1719
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_orders
1720
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_algo_orders
1566
1721
  * @param {string} symbol unified market symbol of the market orders were made in
1567
1722
  * @param {int} [since] the earliest time in ms to fetch orders for
1568
1723
  * @param {int} [limit] the maximum number of order structures to retrieve
@@ -1570,7 +1725,6 @@ export default class woo extends Exchange {
1570
1725
  * @param {boolean} [params.trigger] whether the order is a trigger/algo order
1571
1726
  * @param {boolean} [params.isTriggered] whether the order has been triggered (false by default)
1572
1727
  * @param {string} [params.side] 'buy' or 'sell'
1573
- * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders
1574
1728
  * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
1575
1729
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1576
1730
  */
@@ -1584,80 +1738,124 @@ export default class woo extends Exchange {
1584
1738
  const request = {};
1585
1739
  let market = undefined;
1586
1740
  const trigger = this.safeBool2(params, 'stop', 'trigger');
1587
- const trailing = this.safeBool(params, 'trailing', false);
1588
- params = this.omit(params, ['stop', 'trailing', 'trigger']);
1741
+ params = this.omit(params, ['stop', 'trigger']);
1589
1742
  if (symbol !== undefined) {
1590
1743
  market = this.market(symbol);
1591
1744
  request['symbol'] = market['id'];
1592
1745
  }
1593
1746
  if (since !== undefined) {
1594
- if (trigger || trailing) {
1595
- request['createdTimeStart'] = since;
1596
- }
1597
- else {
1598
- request['start_t'] = since;
1599
- }
1600
- }
1601
- if (limit !== undefined) {
1602
- request['size'] = limit;
1603
- }
1604
- else {
1605
- request['size'] = trailing ? 50 : 500;
1747
+ request['startTime'] = since;
1606
1748
  }
1607
- if (trigger) {
1608
- request['algoType'] = 'stop';
1749
+ const until = this.safeInteger(params, 'until'); // unified in milliseconds
1750
+ params = this.omit(params, ['until']);
1751
+ if (until !== undefined) {
1752
+ request['endTime'] = until;
1609
1753
  }
1610
- else if (trailing) {
1611
- request['algoType'] = 'TRAILING_STOP';
1754
+ if (limit !== undefined) {
1755
+ request['size'] = Math.min(limit, 500);
1612
1756
  }
1613
1757
  let response = undefined;
1614
- if (trigger || trailing) {
1615
- response = await this.v3PrivateGetAlgoOrders(this.extend(request, params));
1758
+ if (trigger) {
1759
+ response = await this.v3PrivateGetTradeAlgoOrders(this.extend(request, params));
1760
+ //
1761
+ // {
1762
+ // "success": true,
1763
+ // "data": {
1764
+ // "rows": [
1765
+ // {
1766
+ // "algoOrderId": 10399260,
1767
+ // "clientAlgoOrderId": 0,
1768
+ // "rootAlgoOrderId": 10399260,
1769
+ // "parentAlgoOrderId": 0,
1770
+ // "symbol": "SPOT_LTC_USDT",
1771
+ // "algoOrderTag": "default",
1772
+ // "algoType": "TAKE_PROFIT",
1773
+ // "side": "BUY",
1774
+ // "quantity": 0.1,
1775
+ // "isTriggered": false,
1776
+ // "triggerPrice": 65,
1777
+ // "triggerStatus": "USELESS",
1778
+ // "type": "LIMIT",
1779
+ // "rootAlgoStatus": "NEW",
1780
+ // "algoStatus": "NEW",
1781
+ // "triggerPriceType": "MARKET_PRICE",
1782
+ // "price": 60,
1783
+ // "triggerTime": "0",
1784
+ // "totalExecutedQuantity": 0,
1785
+ // "visibleQuantity": 0.1,
1786
+ // "averageExecutedPrice": 0,
1787
+ // "totalFee": 0,
1788
+ // "feeAsset": "",
1789
+ // "totalRebate": 0,
1790
+ // "rebateAsset": "",
1791
+ // "reduceOnly": false,
1792
+ // "createdTime": "1752049747.730",
1793
+ // "updatedTime": "1752049747.730",
1794
+ // "positionSide": "BOTH"
1795
+ // }
1796
+ // ],
1797
+ // "meta": {
1798
+ // "total": 7,
1799
+ // "recordsPerPage": 1,
1800
+ // "currentPage": 1
1801
+ // }
1802
+ // },
1803
+ // "timestamp": 1752053127448
1804
+ // }
1805
+ //
1616
1806
  }
1617
1807
  else {
1618
- response = await this.v1PrivateGetOrders(this.extend(request, params));
1808
+ response = await this.v3PrivateGetTradeOrders(this.extend(request, params));
1809
+ //
1810
+ // {
1811
+ // "success": true,
1812
+ // "data": {
1813
+ // "rows": [
1814
+ // {
1815
+ // "orderId": 60780315704,
1816
+ // "clientOrderId": 0,
1817
+ // "symbol": "SPOT_LTC_USDT",
1818
+ // "orderTag": "default",
1819
+ // "side": "BUY",
1820
+ // "quantity": 0.1,
1821
+ // "amount": null,
1822
+ // "type": "LIMIT",
1823
+ // "status": "NEW",
1824
+ // "price": 60,
1825
+ // "executed": 0,
1826
+ // "visible": 0.1,
1827
+ // "averageExecutedPrice": 0,
1828
+ // "totalFee": 0,
1829
+ // "feeAsset": "LTC",
1830
+ // "totalRebate": 0,
1831
+ // "rebateAsset": "USDT",
1832
+ // "reduceOnly": false,
1833
+ // "createdTime": "1752049062.496",
1834
+ // "realizedPnl": null,
1835
+ // "positionSide": "BOTH",
1836
+ // "bidAskLevel": null
1837
+ // }
1838
+ // ],
1839
+ // "meta": {
1840
+ // "total": 11,
1841
+ // "recordsPerPage": 1,
1842
+ // "currentPage": 1
1843
+ // }
1844
+ // },
1845
+ // "timestamp": 1752053061236
1846
+ // }
1847
+ //
1619
1848
  }
1620
- //
1621
- // {
1622
- // "success":true,
1623
- // "meta":{
1624
- // "total":1,
1625
- // "records_per_page":100,
1626
- // "current_page":1
1627
- // },
1628
- // "rows":[
1629
- // {
1630
- // "symbol":"PERP_BTC_USDT",
1631
- // "status":"FILLED",
1632
- // "side":"SELL",
1633
- // "created_time":"1611617776.000",
1634
- // "updated_time":"1611617776.000",
1635
- // "order_id":52121167,
1636
- // "order_tag":"default",
1637
- // "price":null,
1638
- // "type":"MARKET",
1639
- // "quantity":0.002,
1640
- // "amount":null,
1641
- // "visible":0,
1642
- // "executed":0.002,
1643
- // "total_fee":0.01732885,
1644
- // "fee_asset":"USDT",
1645
- // "client_order_id":null,
1646
- // "average_executed_price":28881.41
1647
- // }
1648
- // ]
1649
- // }
1650
- //
1651
- const data = this.safeValue(response, 'data', response);
1652
- const orders = this.safeList(data, 'rows');
1849
+ const data = this.safeValue(response, 'data', {});
1850
+ const orders = this.safeList(data, 'rows', []);
1653
1851
  return this.parseOrders(orders, market, since, limit);
1654
1852
  }
1655
1853
  /**
1656
1854
  * @method
1657
1855
  * @name woo#fetchOpenOrders
1658
1856
  * @description fetches information on multiple orders made by the user
1659
- * @see https://docs.woox.io/#get-orders
1660
- * @see https://docs.woox.io/#get-algo-orders
1857
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_orders
1858
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_algo_orders
1661
1859
  * @param {string} symbol unified market symbol of the market orders were made in
1662
1860
  * @param {int} [since] the earliest time in ms to fetch orders for
1663
1861
  * @param {int} [limit] the maximum number of order structures to retrieve
@@ -1678,8 +1876,8 @@ export default class woo extends Exchange {
1678
1876
  * @method
1679
1877
  * @name woo#fetchClosedOrders
1680
1878
  * @description fetches information on multiple orders made by the user
1681
- * @see https://docs.woox.io/#get-orders
1682
- * @see https://docs.woox.io/#get-algo-orders
1879
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_orders
1880
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_algo_orders
1683
1881
  * @param {string} symbol unified market symbol of the market orders were made in
1684
1882
  * @param {int} [since] the earliest time in ms to fetch orders for
1685
1883
  * @param {int} [limit] the maximum number of order structures to retrieve
@@ -1706,83 +1904,108 @@ export default class woo extends Exchange {
1706
1904
  }
1707
1905
  parseOrder(order, market = undefined) {
1708
1906
  //
1709
- // Possible input functions:
1710
- // * createOrder
1711
- // * cancelOrder
1712
- // * fetchOrder
1713
- // * fetchOrders
1714
- // const isFromFetchOrder = ('order_tag' in order); TO_DO
1715
- //
1716
- // stop order after creating it:
1717
- // {
1718
- // "orderId": "1578938",
1719
- // "clientOrderId": "0",
1720
- // "algoType": "STOP_LOSS",
1721
- // "quantity": "0.1"
1722
- // }
1723
- // stop order after fetching it:
1724
- // {
1725
- // "algoOrderId": "1578958",
1726
- // "clientOrderId": "0",
1727
- // "rootAlgoOrderId": "1578958",
1728
- // "parentAlgoOrderId": "0",
1729
- // "symbol": "SPOT_LTC_USDT",
1730
- // "orderTag": "default",
1731
- // "algoType": "STOP_LOSS",
1732
- // "side": "BUY",
1733
- // "quantity": "0.1",
1734
- // "isTriggered": false,
1735
- // "triggerPrice": "100",
1736
- // "triggerStatus": "USELESS",
1737
- // "type": "LIMIT",
1738
- // "rootAlgoStatus": "CANCELLED",
1739
- // "algoStatus": "CANCELLED",
1740
- // "triggerPriceType": "MARKET_PRICE",
1741
- // "price": "75",
1742
- // "triggerTime": "0",
1743
- // "totalExecutedQuantity": "0",
1744
- // "averageExecutedPrice": "0",
1745
- // "totalFee": "0",
1746
- // "feeAsset": '',
1747
- // "reduceOnly": false,
1748
- // "createdTime": "1686149609.744",
1749
- // "updatedTime": "1686149903.362"
1750
- // }
1751
- //
1752
- const timestamp = this.safeTimestampN(order, ['timestamp', 'created_time', 'createdTime']);
1753
- const orderId = this.safeStringN(order, ['order_id', 'orderId', 'algoOrderId']);
1754
- const clientOrderId = this.omitZero(this.safeString2(order, 'client_order_id', 'clientOrderId')); // Somehow, this always returns 0 for limit order
1907
+ // createOrder
1908
+ // {
1909
+ // "orderId": 60667653330,
1910
+ // "clientOrderId": 0,
1911
+ // "type": "LIMIT",
1912
+ // "price": 60,
1913
+ // "quantity": 0.1,
1914
+ // "amount": null,
1915
+ // "bidAskLevel": null,
1916
+ // "timestamp": 1751871779855
1917
+ // }
1918
+ //
1919
+ // createOrder - algo
1920
+ // {
1921
+ // "orderId": "1578938",
1922
+ // "clientOrderId": "0",
1923
+ // "algoType": "STOP_LOSS",
1924
+ // "quantity": "0.1",
1925
+ // "timestamp": "1686149372216"
1926
+ // }
1927
+ //
1928
+ // fetchOrder
1929
+ // {
1930
+ // "orderId": 60780315704,
1931
+ // "clientOrderId": 0,
1932
+ // "symbol": "SPOT_LTC_USDT",
1933
+ // "orderTag": "default",
1934
+ // "side": "BUY",
1935
+ // "quantity": 0.1,
1936
+ // "amount": null,
1937
+ // "type": "LIMIT",
1938
+ // "status": "NEW",
1939
+ // "price": 60,
1940
+ // "executed": 0,
1941
+ // "visible": 0.1,
1942
+ // "averageExecutedPrice": 0,
1943
+ // "totalFee": 0,
1944
+ // "feeAsset": "LTC",
1945
+ // "totalRebate": 0,
1946
+ // "rebateAsset": "USDT",
1947
+ // "reduceOnly": false,
1948
+ // "createdTime": "1752049062.496",
1949
+ // "realizedPnl": null,
1950
+ // "positionSide": "BOTH",
1951
+ // "bidAskLevel": null
1952
+ // }
1953
+ //
1954
+ // fetchOrder - algo
1955
+ // {
1956
+ // "algoOrderId": 10399260,
1957
+ // "clientAlgoOrderId": 0,
1958
+ // "rootAlgoOrderId": 10399260,
1959
+ // "parentAlgoOrderId": 0,
1960
+ // "symbol": "SPOT_LTC_USDT",
1961
+ // "algoOrderTag": "default",
1962
+ // "algoType": "TAKE_PROFIT",
1963
+ // "side": "BUY",
1964
+ // "quantity": 0.1,
1965
+ // "isTriggered": false,
1966
+ // "triggerPrice": 65,
1967
+ // "triggerStatus": "USELESS",
1968
+ // "type": "LIMIT",
1969
+ // "rootAlgoStatus": "NEW",
1970
+ // "algoStatus": "NEW",
1971
+ // "triggerPriceType": "MARKET_PRICE",
1972
+ // "price": 60,
1973
+ // "triggerTime": "0",
1974
+ // "totalExecutedQuantity": 0,
1975
+ // "visibleQuantity": 0.1,
1976
+ // "averageExecutedPrice": 0,
1977
+ // "totalFee": 0,
1978
+ // "feeAsset": "",
1979
+ // "totalRebate": 0,
1980
+ // "rebateAsset": "",
1981
+ // "reduceOnly": false,
1982
+ // "createdTime": "1752049747.732",
1983
+ // "updatedTime": "1752049747.732",
1984
+ // "positionSide": "BOTH"
1985
+ // }
1986
+ //
1987
+ let timestamp = this.safeTimestamp(order, 'createdTime');
1988
+ if (timestamp === undefined) {
1989
+ timestamp = this.safeInteger(order, 'timestamp');
1990
+ }
1991
+ const orderId = this.safeString2(order, 'orderId', 'algoOrderId');
1992
+ const clientOrderId = this.omitZero(this.safeString2(order, 'clientOrderId', 'clientAlgoOrderId')); // Somehow, this always returns 0 for limit order
1755
1993
  const marketId = this.safeString(order, 'symbol');
1756
1994
  market = this.safeMarket(marketId, market);
1757
1995
  const symbol = market['symbol'];
1758
- const price = this.safeString2(order, 'order_price', 'price');
1759
- const amount = this.safeString2(order, 'order_quantity', 'quantity'); // This is base amount
1760
- const cost = this.safeString2(order, 'order_amount', 'amount'); // This is quote amount
1761
- const orderType = this.safeStringLower2(order, 'order_type', 'type');
1996
+ const price = this.safeString(order, 'price');
1997
+ const amount = this.safeString(order, 'quantity'); // This is base amount
1998
+ const cost = this.safeString(order, 'amount'); // This is quote amount
1999
+ const orderType = this.safeStringLower(order, 'type');
1762
2000
  const status = this.safeValue2(order, 'status', 'algoStatus');
1763
2001
  const side = this.safeStringLower(order, 'side');
1764
2002
  const filled = this.omitZero(this.safeValue2(order, 'executed', 'totalExecutedQuantity'));
1765
- const average = this.omitZero(this.safeString2(order, 'average_executed_price', 'averageExecutedPrice'));
2003
+ const average = this.omitZero(this.safeString(order, 'averageExecutedPrice'));
1766
2004
  // const remaining = Precise.stringSub (cost, filled);
1767
- const fee = this.safeNumber2(order, 'total_fee', 'totalFee');
1768
- const feeCurrency = this.safeString2(order, 'fee_asset', 'feeAsset');
1769
- const transactions = this.safeValue(order, 'Transactions');
2005
+ const fee = this.safeNumber(order, 'totalFee');
2006
+ const feeCurrency = this.safeString(order, 'feeAsset');
1770
2007
  const triggerPrice = this.safeNumber(order, 'triggerPrice');
1771
- let takeProfitPrice = undefined;
1772
- let stopLossPrice = undefined;
1773
- const childOrders = this.safeValue(order, 'childOrders');
1774
- if (childOrders !== undefined) {
1775
- const first = this.safeValue(childOrders, 0);
1776
- const innerChildOrders = this.safeValue(first, 'childOrders', []);
1777
- const innerChildOrdersLength = innerChildOrders.length;
1778
- if (innerChildOrdersLength > 0) {
1779
- const takeProfitOrder = this.safeValue(innerChildOrders, 0);
1780
- const stopLossOrder = this.safeValue(innerChildOrders, 1);
1781
- takeProfitPrice = this.safeNumber(takeProfitOrder, 'triggerPrice');
1782
- stopLossPrice = this.safeNumber(stopLossOrder, 'triggerPrice');
1783
- }
1784
- }
1785
- const lastUpdateTimestamp = this.safeTimestamp2(order, 'updatedTime', 'updated_time');
2008
+ const lastUpdateTimestamp = this.safeTimestamp(order, 'updatedTime');
1786
2009
  return this.safeOrder({
1787
2010
  'id': orderId,
1788
2011
  'clientOrderId': clientOrderId,
@@ -1795,18 +2018,18 @@ export default class woo extends Exchange {
1795
2018
  'type': orderType,
1796
2019
  'timeInForce': this.parseTimeInForce(orderType),
1797
2020
  'postOnly': undefined,
1798
- 'reduceOnly': this.safeBool(order, 'reduce_only'),
2021
+ 'reduceOnly': this.safeBool(order, 'reduceOnly'),
1799
2022
  'side': side,
1800
2023
  'price': price,
1801
2024
  'triggerPrice': triggerPrice,
1802
- 'takeProfitPrice': takeProfitPrice,
1803
- 'stopLossPrice': stopLossPrice,
2025
+ 'takeProfitPrice': undefined,
2026
+ 'stopLossPrice': undefined,
1804
2027
  'average': average,
1805
2028
  'amount': amount,
1806
2029
  'filled': filled,
1807
2030
  'remaining': undefined,
1808
2031
  'cost': cost,
1809
- 'trades': transactions,
2032
+ 'trades': undefined,
1810
2033
  'fee': {
1811
2034
  'cost': fee,
1812
2035
  'currency': feeCurrency,
@@ -1835,7 +2058,7 @@ export default class woo extends Exchange {
1835
2058
  * @method
1836
2059
  * @name woo#fetchOrderBook
1837
2060
  * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1838
- * @see https://docs.woox.io/#orderbook-snapshot-public
2061
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/orderbook
1839
2062
  * @param {string} symbol unified symbol of the market to fetch the order book for
1840
2063
  * @param {int} [limit] the maximum amount of order book entries to return
1841
2064
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -1848,40 +2071,45 @@ export default class woo extends Exchange {
1848
2071
  'symbol': market['id'],
1849
2072
  };
1850
2073
  if (limit !== undefined) {
1851
- limit = Math.min(limit, 1000);
1852
- request['max_level'] = limit;
2074
+ request['maxLevel'] = limit;
1853
2075
  }
1854
- const response = await this.v1PublicGetOrderbookSymbol(this.extend(request, params));
2076
+ const response = await this.v3PublicGetOrderbook(this.extend(request, params));
1855
2077
  //
1856
- // {
1857
- // "success": true,
1858
- // "timestamp": "1641562961192",
1859
- // "asks": [
1860
- // { price: '0.921', quantity: "76.01" },
1861
- // { price: '0.933', quantity: "477.10" },
1862
- // ...
1863
- // ],
1864
- // "bids": [
1865
- // { price: '0.940', quantity: "13502.47" },
1866
- // { price: '0.932', quantity: "43.91" },
1867
- // ...
1868
- // ]
1869
2078
  // }
1870
- //
1871
- const timestamp = this.safeInteger(response, 'timestamp');
1872
- return this.parseOrderBook(response, symbol, timestamp, 'bids', 'asks', 'price', 'quantity');
1873
- }
1874
- /**
1875
- * @method
1876
- * @name woo#fetchOHLCV
1877
- * @see https://docs.woox.io/#kline-public
1878
- * @see https://docs.woox.io/#kline-historical-data-public
2079
+ // {
2080
+ // "success": true,
2081
+ // "timestamp": 1751620923344,
2082
+ // "data": {
2083
+ // "asks": [
2084
+ // {
2085
+ // "price": "108924.86",
2086
+ // "quantity": "0.032126"
2087
+ // }
2088
+ // ],
2089
+ // "bids": [
2090
+ // {
2091
+ // "price": "108924.85",
2092
+ // "quantity": "1.714147"
2093
+ // }
2094
+ // ]
2095
+ // }
2096
+ // }
2097
+ //
2098
+ const data = this.safeDict(response, 'data', {});
2099
+ const timestamp = this.safeInteger(response, 'timestamp');
2100
+ return this.parseOrderBook(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity');
2101
+ }
2102
+ /**
2103
+ * @method
2104
+ * @name woo#fetchOHLCV
2105
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/klineHistory
1879
2106
  * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1880
2107
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1881
2108
  * @param {string} timeframe the length of time each candle represents
1882
2109
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
1883
2110
  * @param {int} [limit] max=1000, max=100 when since is defined and is less than (now - (999 * (timeframe in ms)))
1884
2111
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2112
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1885
2113
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1886
2114
  */
1887
2115
  async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
@@ -1891,75 +2119,47 @@ export default class woo extends Exchange {
1891
2119
  'symbol': market['id'],
1892
2120
  'type': this.safeString(this.timeframes, timeframe, timeframe),
1893
2121
  };
1894
- let useHistEndpoint = since !== undefined;
1895
- if ((limit !== undefined) && (since !== undefined)) {
1896
- const oneThousandCandles = this.parseTimeframe(timeframe) * 1000 * 999; // 999 because there will be delay between this and the request, causing the latest candle to be excluded sometimes
1897
- const startWithLimit = this.milliseconds() - oneThousandCandles;
1898
- useHistEndpoint = since < startWithLimit;
1899
- }
1900
- if (useHistEndpoint) {
1901
- request['start_time'] = since;
1902
- }
1903
- else if (limit !== undefined) { // the hist endpoint does not accept limit
2122
+ if (limit !== undefined) {
1904
2123
  request['limit'] = Math.min(limit, 1000);
1905
2124
  }
1906
- let response = undefined;
1907
- if (!useHistEndpoint) {
1908
- response = await this.v1PublicGetKline(this.extend(request, params));
1909
- //
1910
- // {
1911
- // "success": true,
1912
- // "rows": [
1913
- // {
1914
- // "open": "0.94238",
1915
- // "close": "0.94271",
1916
- // "low": "0.94238",
1917
- // "high": "0.94296",
1918
- // "volume": "73.55",
1919
- // "amount": "69.32040520",
1920
- // "symbol": "SPOT_WOO_USDT",
1921
- // "type": "1m",
1922
- // "start_timestamp": "1641584700000",
1923
- // "end_timestamp": "1641584760000"
1924
- // },
1925
- // ...
1926
- // ]
1927
- // }
1928
- //
2125
+ if (since !== undefined) {
2126
+ request['after'] = since;
1929
2127
  }
1930
- else {
1931
- response = await this.v1PubGetHistKline(this.extend(request, params));
1932
- response = this.safeDict(response, 'data');
1933
- //
1934
- // {
1935
- // "success": true,
1936
- // "data": {
1937
- // "rows": [
1938
- // {
1939
- // "symbol": "SPOT_BTC_USDT",
1940
- // "open": 44181.40000000,
1941
- // "close": 44174.29000000,
1942
- // "high": 44193.44000000,
1943
- // "low": 44148.34000000,
1944
- // "volume": 110.11930100,
1945
- // "amount": 4863796.24318878,
1946
- // "type": "1m",
1947
- // "start_timestamp": 1704153600000,
1948
- // "end_timestamp": 1704153660000
1949
- // },
1950
- // ...
1951
- // ]
1952
- // }
1953
- // }
1954
- //
2128
+ const until = this.safeInteger(params, 'until');
2129
+ params = this.omit(params, 'until');
2130
+ if (until !== undefined) {
2131
+ request['before'] = until;
1955
2132
  }
1956
- const rows = this.safeList(response, 'rows', []);
2133
+ const response = await this.v3PublicGetKlineHistory(this.extend(request, params));
2134
+ //
2135
+ // {
2136
+ // "success": true,
2137
+ // "data": {
2138
+ // "rows": [
2139
+ // {
2140
+ // "symbol": "SPOT_BTC_USDT",
2141
+ // "open": "108994.16",
2142
+ // "close": "108994.16",
2143
+ // "high": "108994.16",
2144
+ // "low": "108994.16",
2145
+ // "volume": "0",
2146
+ // "amount": "0",
2147
+ // "type": "1m",
2148
+ // "startTimestamp": 1751622120000,
2149
+ // "endTimestamp": 1751622180000
2150
+ // }
2151
+ // ]
2152
+ // },
2153
+ // "timestamp": 1751622205410
2154
+ // }
2155
+ //
2156
+ const data = this.safeDict(response, 'data', {});
2157
+ const rows = this.safeList(data, 'rows', []);
1957
2158
  return this.parseOHLCVs(rows, market, timeframe, since, limit);
1958
2159
  }
1959
2160
  parseOHLCV(ohlcv, market = undefined) {
1960
- // example response in fetchOHLCV
1961
2161
  return [
1962
- this.safeInteger(ohlcv, 'start_timestamp'),
2162
+ this.safeInteger(ohlcv, 'startTimestamp'),
1963
2163
  this.safeNumber(ohlcv, 'open'),
1964
2164
  this.safeNumber(ohlcv, 'high'),
1965
2165
  this.safeNumber(ohlcv, 'low'),
@@ -2014,7 +2214,7 @@ export default class woo extends Exchange {
2014
2214
  * @method
2015
2215
  * @name woo#fetchMyTrades
2016
2216
  * @description fetch all trades made by the user
2017
- * @see https://docs.woox.io/#get-trade-history
2217
+ * @see https://developer.woox.io/api-reference/endpoint/trading/get_transactions
2018
2218
  * @param {string} symbol unified market symbol
2019
2219
  * @param {int} [since] the earliest time in ms to fetch trades for
2020
2220
  * @param {int} [limit] the maximum number of trades structures to retrieve
@@ -2029,93 +2229,159 @@ export default class woo extends Exchange {
2029
2229
  if (paginate) {
2030
2230
  return await this.fetchPaginatedCallIncremental('fetchMyTrades', symbol, since, limit, params, 'page', 500);
2031
2231
  }
2032
- let request = {};
2232
+ const request = {};
2033
2233
  let market = undefined;
2034
2234
  if (symbol !== undefined) {
2035
2235
  market = this.market(symbol);
2036
2236
  request['symbol'] = market['id'];
2037
2237
  }
2038
2238
  if (since !== undefined) {
2039
- request['start_t'] = since;
2239
+ request['startTime'] = since;
2040
2240
  }
2041
- [request, params] = this.handleUntilOption('end_t', request, params);
2042
- if (limit !== undefined) {
2043
- request['size'] = limit;
2241
+ const until = this.safeInteger(params, 'until'); // unified in milliseconds
2242
+ params = this.omit(params, ['until']);
2243
+ if (until !== undefined) {
2244
+ request['endTime'] = until;
2044
2245
  }
2045
- else {
2046
- request['size'] = 500;
2246
+ if (limit !== undefined) {
2247
+ request['limit'] = limit;
2047
2248
  }
2048
- const response = await this.v1PrivateGetClientTrades(this.extend(request, params));
2049
- // {
2050
- // "success": true,
2051
- // "meta": {
2052
- // "records_per_page": 25,
2053
- // "current_page": 1
2054
- // },
2055
- // "rows": [
2056
- // {
2057
- // "id": 5,
2058
- // "symbol": "SPOT_BTC_USDT",
2059
- // "order_id": 211,
2060
- // "order_tag": "default",
2061
- // "executed_price": 10892.84,
2062
- // "executed_quantity": 0.002,
2063
- // "is_maker": 0,
2064
- // "side": "SELL",
2065
- // "fee": 0,
2066
- // "fee_asset": "USDT",
2067
- // "executed_timestamp": "1566264290.250"
2249
+ const response = await this.v3PrivateGetTradeTransactionHistory(this.extend(request, params));
2250
+ //
2251
+ // {
2252
+ // "success": true,
2253
+ // "data": {
2254
+ // "rows": [
2255
+ // {
2256
+ // "id": 1734947821,
2257
+ // "symbol": "SPOT_LTC_USDT",
2258
+ // "orderId": 60780383217,
2259
+ // "executedPrice": 87.86,
2260
+ // "executedQuantity": 0.1,
2261
+ // "fee": 0.0001,
2262
+ // "realizedPnl": null,
2263
+ // "feeAsset": "LTC",
2264
+ // "orderTag": "default",
2265
+ // "side": "BUY",
2266
+ // "executedTimestamp": "1752055173.630",
2267
+ // "isMaker": 0
2268
+ // }
2269
+ // ],
2270
+ // "meta": {
2271
+ // "total": 1,
2272
+ // "recordsPerPage": 100,
2273
+ // "currentPage": 1
2274
+ // }
2068
2275
  // },
2069
- // ...
2070
- // ]
2071
- // }
2072
- const trades = this.safeList(response, 'rows', []);
2276
+ // "timestamp": 1752055545121
2277
+ // }
2278
+ //
2279
+ const data = this.safeDict(response, 'data', {});
2280
+ const trades = this.safeList(data, 'rows', []);
2073
2281
  return this.parseTrades(trades, market, since, limit, params);
2074
2282
  }
2075
2283
  /**
2076
2284
  * @method
2077
2285
  * @name woo#fetchAccounts
2078
2286
  * @description fetch all the accounts associated with a profile
2079
- * @see https://docs.woox.io/#get-assets-of-subaccounts
2287
+ * @see https://developer.woox.io/api-reference/endpoint/account/get_account_info
2288
+ * @see https://developer.woox.io/api-reference/endpoint/account/sub_accounts
2080
2289
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2081
2290
  * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
2082
2291
  */
2083
2292
  async fetchAccounts(params = {}) {
2084
- const response = await this.v1PrivateGetSubAccountAssets(params);
2293
+ const mainAccountPromise = this.v3PrivateGetAccountInfo(params);
2085
2294
  //
2086
2295
  // {
2087
- // "rows": [{
2088
- // "application_id": "13e4fc34-e2ff-4cb7-b1e4-4c22fee7d365",
2089
- // "account": "Main",
2090
- // "usdt_balance": "4.0"
2091
- // },
2092
- // {
2093
- // "application_id": "432952aa-a401-4e26-aff6-972920aebba3",
2094
- // "account": "subaccount",
2095
- // "usdt_balance": "1.0"
2096
- // }
2097
- // ],
2098
- // "success": true
2296
+ // "success": true,
2297
+ // "data": {
2298
+ // "applicationId": "251bf5c4-f3c8-4544-bb8b-80001007c3c0",
2299
+ // "account": "carlos_jose_lima@yahoo.com",
2300
+ // "alias": "carlos_jose_lima@yahoo.com",
2301
+ // "otpauth": true,
2302
+ // "accountMode": "FUTURES",
2303
+ // "positionMode": "ONE_WAY",
2304
+ // "leverage": 0,
2305
+ // "marginRatio": "10",
2306
+ // "openMarginRatio": "10",
2307
+ // "initialMarginRatio": "10",
2308
+ // "maintenanceMarginRatio": "0.03",
2309
+ // "totalCollateral": "165.55629469",
2310
+ // "freeCollateral": "165.55629469",
2311
+ // "totalAccountValue": "167.32418611",
2312
+ // "totalTradingValue": "167.32418611",
2313
+ // "totalVaultValue": "0",
2314
+ // "totalStakingValue": "0",
2315
+ // "totalLaunchpadValue": "0",
2316
+ // "totalEarnValue": "0",
2317
+ // "referrerID": null,
2318
+ // "accountType": "Main"
2319
+ // },
2320
+ // "timestamp": 1752062807915
2321
+ // }
2322
+ //
2323
+ const subAccountPromise = this.v3PrivateGetAccountSubAccountsAll(params);
2324
+ //
2325
+ // {
2326
+ // "success": true,
2327
+ // "data": {
2328
+ // "rows": [
2329
+ // {
2330
+ // "applicationId": "6b43de5c-0955-4887-9862-d84e4689f9fe",
2331
+ // "name": "sub_account_2",
2332
+ // "createdTime": "1606897264.994"
2333
+ // },
2334
+ // ]
2335
+ // },
2336
+ // "timestamp": 1721295317627
2099
2337
  // }
2100
2338
  //
2101
- const rows = this.safeList(response, 'rows', []);
2339
+ const [mainAccountResponse, subAccountResponse] = await Promise.all([mainAccountPromise, subAccountPromise]);
2340
+ const mainData = this.safeDict(mainAccountResponse, 'data', {});
2341
+ const mainRows = [mainData];
2342
+ const subData = this.safeDict(subAccountResponse, 'data', {});
2343
+ const subRows = this.safeList(subData, 'rows', []);
2344
+ const rows = this.arrayConcat(mainRows, subRows);
2102
2345
  return this.parseAccounts(rows, params);
2103
2346
  }
2104
2347
  parseAccount(account) {
2105
2348
  //
2106
2349
  // {
2107
- // "application_id": "336952aa-a401-4e26-aff6-972920aebba3",
2108
- // "account": "subaccount",
2109
- // "usdt_balance": "1.0",
2350
+ // "applicationId": "251bf5c4-f3c8-4544-bb8b-80001007c3c0",
2351
+ // "account": "carlos_jose_lima@yahoo.com",
2352
+ // "alias": "carlos_jose_lima@yahoo.com",
2353
+ // "otpauth": true,
2354
+ // "accountMode": "FUTURES",
2355
+ // "positionMode": "ONE_WAY",
2356
+ // "leverage": 0,
2357
+ // "marginRatio": "10",
2358
+ // "openMarginRatio": "10",
2359
+ // "initialMarginRatio": "10",
2360
+ // "maintenanceMarginRatio": "0.03",
2361
+ // "totalCollateral": "165.55629469",
2362
+ // "freeCollateral": "165.55629469",
2363
+ // "totalAccountValue": "167.32418611",
2364
+ // "totalTradingValue": "167.32418611",
2365
+ // "totalVaultValue": "0",
2366
+ // "totalStakingValue": "0",
2367
+ // "totalLaunchpadValue": "0",
2368
+ // "totalEarnValue": "0",
2369
+ // "referrerID": null,
2370
+ // "accountType": "Main"
2371
+ // }
2372
+ //
2373
+ // {
2374
+ // "applicationId": "6b43de5c-0955-4887-9862-d84e4689f9fe",
2375
+ // "name": "sub_account_2",
2376
+ // "createdTime": "1606897264.994"
2110
2377
  // }
2111
2378
  //
2112
- const accountId = this.safeString(account, 'account');
2113
2379
  return {
2114
2380
  'info': account,
2115
- 'id': this.safeString(account, 'application_id'),
2116
- 'name': accountId,
2381
+ 'id': this.safeString(account, 'applicationId'),
2382
+ 'name': this.safeStringN(account, ['name', 'account', 'alias']),
2117
2383
  'code': undefined,
2118
- 'type': accountId === 'Main' ? 'main' : 'subaccount',
2384
+ 'type': this.safeStringLower(account, 'accountType', 'subaccount'),
2119
2385
  };
2120
2386
  }
2121
2387
  /**
@@ -2174,7 +2440,7 @@ export default class woo extends Exchange {
2174
2440
  * @method
2175
2441
  * @name woo#fetchDepositAddress
2176
2442
  * @description fetch the deposit address for a currency associated with this account
2177
- * @see https://docs.woox.io/#get-token-deposit-address
2443
+ * @see https://developer.woox.io/api-reference/endpoint/assets/get_wallet_deposit
2178
2444
  * @param {string} code unified currency code
2179
2445
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2180
2446
  * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
@@ -2183,18 +2449,25 @@ export default class woo extends Exchange {
2183
2449
  // this method is TODO because of networks unification
2184
2450
  await this.loadMarkets();
2185
2451
  const currency = this.currency(code);
2186
- let specialNetworkId = undefined;
2187
- [specialNetworkId, params] = this.getDedicatedNetworkId(currency, params);
2452
+ let networkCode = undefined;
2453
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2188
2454
  const request = {
2189
- 'token': specialNetworkId,
2455
+ 'token': currency['id'],
2456
+ 'network': this.networkCodeToId(networkCode),
2190
2457
  };
2191
- const response = await this.v1PrivateGetAssetDeposit(this.extend(request, params));
2192
- // {
2193
- // "success": true,
2194
- // "address": "3Jmtjx5544T4smrit9Eroe4PCrRkpDeKjP",
2195
- // "extra": ''
2196
- // }
2197
- return this.parseDepositAddress(response, currency);
2458
+ const response = await this.v3PrivateGetAssetWalletDeposit(this.extend(request, params));
2459
+ //
2460
+ // {
2461
+ // "success": true,
2462
+ // "data": {
2463
+ // "address": "0x31d64B3230f8baDD91dE1710A65DF536aF8f7cDa",
2464
+ // "extra": ""
2465
+ // },
2466
+ // "timestamp": 1721300689532
2467
+ // }
2468
+ //
2469
+ const data = this.safeDict(response, 'data', {});
2470
+ return this.parseDepositAddress(data, currency);
2198
2471
  }
2199
2472
  getDedicatedNetworkId(currency, params) {
2200
2473
  let networkCode = undefined;
@@ -2225,61 +2498,68 @@ export default class woo extends Exchange {
2225
2498
  let currency = undefined;
2226
2499
  if (code !== undefined) {
2227
2500
  currency = this.currency(code);
2228
- request['balance_token'] = currency['id'];
2501
+ request['token'] = currency['id'];
2502
+ }
2503
+ let networkCode = undefined;
2504
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2505
+ if (networkCode !== undefined) {
2506
+ request['network'] = this.networkCodeToId(networkCode);
2229
2507
  }
2230
2508
  if (since !== undefined) {
2231
- request['start_t'] = since;
2509
+ request['startTime'] = since;
2232
2510
  }
2233
2511
  if (limit !== undefined) {
2234
- request['pageSize'] = limit;
2512
+ request['size'] = Math.min(limit, 1000);
2235
2513
  }
2236
2514
  const transactionType = this.safeString(params, 'type');
2237
2515
  params = this.omit(params, 'type');
2238
2516
  if (transactionType !== undefined) {
2239
2517
  request['type'] = transactionType;
2240
2518
  }
2241
- const response = await this.v1PrivateGetAssetHistory(this.extend(request, params));
2242
- // {
2243
- // "rows": [
2244
- // {
2245
- // "id": "22010508193900165",
2246
- // "token": "TRON_USDT",
2247
- // "extra": '',
2248
- // "amount": "13.75848500",
2249
- // "status": "COMPLETED",
2250
- // "account": null,
2251
- // "description": null,
2252
- // "user_id": "42222",
2253
- // "application_id": "6ad2b303-f354-45c0-8105-9f5f19d0e335",
2254
- // "external_id": "220105081900134",
2255
- // "target_address": "TXnyFSnAYad3YCaqtwMw9jvXKkeU39NLnK",
2256
- // "source_address": "TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6",
2257
- // "type": "BALANCE",
2258
- // "token_side": "DEPOSIT",
2259
- // "tx_id": "35b0004022f6b3ad07f39a0b7af199f6b258c2c3e2c7cdc93c67efa74fd625ee",
2260
- // "fee_token": '',
2261
- // "fee_amount": "0.00000000",
2262
- // "created_time": "1641370779.442",
2263
- // "updated_time": "1641370779.465",
2264
- // "is_new_target_address": null,
2265
- // "confirmed_number": "29",
2266
- // "confirming_threshold": "27",
2267
- // "audit_tag": "1",
2268
- // "audit_result": "0",
2269
- // "balance_token": null, // TODO -write to support, that this seems broken. here should be the token id
2270
- // "network_name": null // TODO -write to support, that this seems broken. here should be the network id
2271
- // }
2272
- // ],
2273
- // "meta": { total: '1', records_per_page: "25", current_page: "1" },
2274
- // "success": true
2275
- // }
2276
- return [currency, this.safeList(response, 'rows', [])];
2519
+ const response = await this.v3PrivateGetAssetWalletHistory(this.extend(request, params));
2520
+ //
2521
+ // {
2522
+ // "success": true,
2523
+ // "data": {
2524
+ // "rows": [
2525
+ // {
2526
+ // "createdTime": "1734964440.523",
2527
+ // "updatedTime": "1734964614.081",
2528
+ // "id": "24122314340000585",
2529
+ // "externalId": "241223143600621",
2530
+ // "applicationId": "251bf5c4-f3c8-4544-bb8b-80001007c3c0",
2531
+ // "token": "ARB_USDCNATIVE",
2532
+ // "targetAddress": "0x4d6802d2736daa85e6242ef0dc0f00aa0e68f635",
2533
+ // "sourceAddress": "0x63DFE4e34A3bFC00eB0220786238a7C6cEF8Ffc4",
2534
+ // "extra": "",
2535
+ // "type": "BALANCE",
2536
+ // "tokenSide": "WITHDRAW",
2537
+ // "amount": "10.00000000",
2538
+ // "txId": "0x891ade0a47fd55466bb9d06702bea4edcb75ed9367d9afbc47b93a84f496d2e6",
2539
+ // "feeToken": "USDC",
2540
+ // "feeAmount": "2",
2541
+ // "status": "COMPLETED",
2542
+ // "confirmingThreshold": null,
2543
+ // "confirmedNumber": null
2544
+ // }
2545
+ // ],
2546
+ // "meta": {
2547
+ // "total": 1,
2548
+ // "records_per_page": 25,
2549
+ // "current_page": 1
2550
+ // }
2551
+ // },
2552
+ // "timestamp": 1752485344719
2553
+ // }
2554
+ //
2555
+ const data = this.safeDict(response, 'data', {});
2556
+ return [currency, this.safeList(data, 'rows', [])];
2277
2557
  }
2278
2558
  /**
2279
2559
  * @method
2280
2560
  * @name woo#fetchLedger
2281
2561
  * @description fetch the history of changes, actions done by the user or operations that altered balance of the user
2282
- * @see https://docs.woox.io/#get-asset-history
2562
+ * @see https://developer.woox.io/api-reference/endpoint/assets/get_wallet_history
2283
2563
  * @param {string} [code] unified currency code, default is undefined
2284
2564
  * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
2285
2565
  * @param {int} [limit] max number of ledger entries to return, default is undefined
@@ -2293,22 +2573,43 @@ export default class woo extends Exchange {
2293
2573
  return this.parseLedger(rows, currency, since, limit, params);
2294
2574
  }
2295
2575
  parseLedgerEntry(item, currency = undefined) {
2576
+ //
2577
+ // {
2578
+ // "createdTime": "1734964440.523",
2579
+ // "updatedTime": "1734964614.081",
2580
+ // "id": "24122314340000585",
2581
+ // "externalId": "241223143600621",
2582
+ // "applicationId": "251bf5c4-f3c8-4544-bb8b-80001007c3c0",
2583
+ // "token": "ARB_USDCNATIVE",
2584
+ // "targetAddress": "0x4d6802d2736daa85e6242ef0dc0f00aa0e68f635",
2585
+ // "sourceAddress": "0x63DFE4e34A3bFC00eB0220786238a7C6cEF8Ffc4",
2586
+ // "extra": "",
2587
+ // "type": "BALANCE",
2588
+ // "tokenSide": "WITHDRAW",
2589
+ // "amount": "10.00000000",
2590
+ // "txId": "0x891ade0a47fd55466bb9d06702bea4edcb75ed9367d9afbc47b93a84f496d2e6",
2591
+ // "feeToken": "USDC",
2592
+ // "feeAmount": "2",
2593
+ // "status": "COMPLETED",
2594
+ // "confirmingThreshold": null,
2595
+ // "confirmedNumber": null
2596
+ // }
2597
+ //
2296
2598
  const networkizedCode = this.safeString(item, 'token');
2297
- const currencyDefined = this.getCurrencyFromChaincode(networkizedCode, currency);
2298
- const code = currencyDefined['code'];
2599
+ const code = this.safeCurrencyCode(networkizedCode, currency);
2299
2600
  currency = this.safeCurrency(code, currency);
2300
2601
  const amount = this.safeNumber(item, 'amount');
2301
- const side = this.safeString(item, 'token_side');
2602
+ const side = this.safeString(item, 'tokenSide');
2302
2603
  const direction = (side === 'DEPOSIT') ? 'in' : 'out';
2303
- const timestamp = this.safeTimestamp(item, 'created_time');
2304
- const fee = this.parseTokenAndFeeTemp(item, 'fee_token', 'fee_amount');
2604
+ const timestamp = this.safeTimestamp(item, 'createdTime');
2605
+ const fee = this.parseTokenAndFeeTemp(item, ['feeToken'], ['feeAmount']);
2305
2606
  return this.safeLedgerEntry({
2306
2607
  'info': item,
2307
2608
  'id': this.safeString(item, 'id'),
2308
2609
  'currency': code,
2309
2610
  'account': this.safeString(item, 'account'),
2310
2611
  'referenceAccount': undefined,
2311
- 'referenceId': this.safeString(item, 'tx_id'),
2612
+ 'referenceId': this.safeString(item, 'txId'),
2312
2613
  'status': this.parseTransactionStatus(this.safeString(item, 'status')),
2313
2614
  'amount': amount,
2314
2615
  'before': undefined,
@@ -2347,7 +2648,7 @@ export default class woo extends Exchange {
2347
2648
  * @method
2348
2649
  * @name woo#fetchDeposits
2349
2650
  * @description fetch all deposits made to an account
2350
- * @see https://docs.woox.io/#get-asset-history
2651
+ * @see https://developer.woox.io/api-reference/endpoint/assets/get_wallet_history
2351
2652
  * @param {string} code unified currency code
2352
2653
  * @param {int} [since] the earliest time in ms to fetch deposits for
2353
2654
  * @param {int} [limit] the maximum number of deposits structures to retrieve
@@ -2356,7 +2657,7 @@ export default class woo extends Exchange {
2356
2657
  */
2357
2658
  async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2358
2659
  const request = {
2359
- 'token_side': 'DEPOSIT',
2660
+ 'tokenSide': 'DEPOSIT',
2360
2661
  };
2361
2662
  return await this.fetchDepositsWithdrawals(code, since, limit, this.extend(request, params));
2362
2663
  }
@@ -2364,7 +2665,7 @@ export default class woo extends Exchange {
2364
2665
  * @method
2365
2666
  * @name woo#fetchWithdrawals
2366
2667
  * @description fetch all withdrawals made from an account
2367
- * @see https://docs.woox.io/#get-asset-history
2668
+ * @see https://developer.woox.io/api-reference/endpoint/assets/get_wallet_history
2368
2669
  * @param {string} code unified currency code
2369
2670
  * @param {int} [since] the earliest time in ms to fetch withdrawals for
2370
2671
  * @param {int} [limit] the maximum number of withdrawals structures to retrieve
@@ -2373,7 +2674,7 @@ export default class woo extends Exchange {
2373
2674
  */
2374
2675
  async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2375
2676
  const request = {
2376
- 'token_side': 'WITHDRAW',
2677
+ 'tokenSide': 'WITHDRAW',
2377
2678
  };
2378
2679
  return await this.fetchDepositsWithdrawals(code, since, limit, this.extend(request, params));
2379
2680
  }
@@ -2381,7 +2682,7 @@ export default class woo extends Exchange {
2381
2682
  * @method
2382
2683
  * @name woo#fetchDepositsWithdrawals
2383
2684
  * @description fetch history of deposits and withdrawals
2384
- * @see https://docs.woox.io/#get-asset-history
2685
+ * @see https://developer.woox.io/api-reference/endpoint/assets/get_wallet_history
2385
2686
  * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
2386
2687
  * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
2387
2688
  * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
@@ -2395,36 +2696,46 @@ export default class woo extends Exchange {
2395
2696
  const currencyRows = await this.getAssetHistoryRows(code, since, limit, this.extend(request, params));
2396
2697
  const currency = this.safeValue(currencyRows, 0);
2397
2698
  const rows = this.safeList(currencyRows, 1);
2699
+ return this.parseTransactions(rows, currency, since, limit, params);
2700
+ }
2701
+ parseTransaction(transaction, currency = undefined) {
2398
2702
  //
2399
2703
  // {
2400
- // "rows":[],
2401
- // "meta":{
2402
- // "total":0,
2403
- // "records_per_page":25,
2404
- // "current_page":1
2405
- // },
2406
- // "success":true
2704
+ // "createdTime": "1734964440.523",
2705
+ // "updatedTime": "1734964614.081",
2706
+ // "id": "24122314340000585",
2707
+ // "externalId": "241223143600621",
2708
+ // "applicationId": "251bf5c4-f3c8-4544-bb8b-80001007c3c0",
2709
+ // "token": "ARB_USDCNATIVE",
2710
+ // "targetAddress": "0x4d6802d2736daa85e6242ef0dc0f00aa0e68f635",
2711
+ // "sourceAddress": "0x63DFE4e34A3bFC00eB0220786238a7C6cEF8Ffc4",
2712
+ // "extra": "",
2713
+ // "type": "BALANCE",
2714
+ // "tokenSide": "WITHDRAW",
2715
+ // "amount": "10.00000000",
2716
+ // "txId": "0x891ade0a47fd55466bb9d06702bea4edcb75ed9367d9afbc47b93a84f496d2e6",
2717
+ // "feeToken": "USDC",
2718
+ // "feeAmount": "2",
2719
+ // "status": "COMPLETED",
2720
+ // "confirmingThreshold": null,
2721
+ // "confirmedNumber": null
2407
2722
  // }
2408
2723
  //
2409
- return this.parseTransactions(rows, currency, since, limit, params);
2410
- }
2411
- parseTransaction(transaction, currency = undefined) {
2412
- // example in fetchLedger
2413
2724
  const networkizedCode = this.safeString(transaction, 'token');
2414
2725
  const currencyDefined = this.getCurrencyFromChaincode(networkizedCode, currency);
2415
2726
  const code = currencyDefined['code'];
2416
- let movementDirection = this.safeStringLower(transaction, 'token_side');
2727
+ let movementDirection = this.safeStringLower2(transaction, 'token_side', 'tokenSide');
2417
2728
  if (movementDirection === 'withdraw') {
2418
2729
  movementDirection = 'withdrawal';
2419
2730
  }
2420
- const fee = this.parseTokenAndFeeTemp(transaction, 'fee_token', 'fee_amount');
2421
- const addressTo = this.safeString(transaction, 'target_address');
2422
- const addressFrom = this.safeString(transaction, 'source_address');
2423
- const timestamp = this.safeTimestamp(transaction, 'created_time');
2731
+ const fee = this.parseTokenAndFeeTemp(transaction, ['fee_token', 'feeToken'], ['fee_amount', 'feeAmount']);
2732
+ const addressTo = this.safeString2(transaction, 'target_address', 'targetAddress');
2733
+ const addressFrom = this.safeString2(transaction, 'source_address', 'sourceAddress');
2734
+ const timestamp = this.safeTimestamp2(transaction, 'created_time', 'createdTime');
2424
2735
  return {
2425
2736
  'info': transaction,
2426
- 'id': this.safeString2(transaction, 'id', 'withdraw_id'),
2427
- 'txid': this.safeString(transaction, 'tx_id'),
2737
+ 'id': this.safeStringN(transaction, ['id', 'withdraw_id', 'withdrawId']),
2738
+ 'txid': this.safeString2(transaction, 'tx_id', 'txId'),
2428
2739
  'timestamp': timestamp,
2429
2740
  'datetime': this.iso8601(timestamp),
2430
2741
  'address': undefined,
@@ -2437,7 +2748,7 @@ export default class woo extends Exchange {
2437
2748
  'amount': this.safeNumber(transaction, 'amount'),
2438
2749
  'currency': code,
2439
2750
  'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
2440
- 'updated': this.safeTimestamp(transaction, 'updated_time'),
2751
+ 'updated': this.safeTimestamp2(transaction, 'updated_time', 'updatedTime'),
2441
2752
  'comment': undefined,
2442
2753
  'internal': undefined,
2443
2754
  'fee': fee,
@@ -2496,7 +2807,7 @@ export default class woo extends Exchange {
2496
2807
  * @method
2497
2808
  * @name woo#fetchTransfers
2498
2809
  * @description fetch a history of internal transfers made on an account
2499
- * @see https://docs.woox.io/#get-transfer-history
2810
+ * @see https://developer.woox.io/api-reference/endpoint/assets/get_transfer_history
2500
2811
  * @param {string} code unified currency code of the currency transferred
2501
2812
  * @param {int} [since] the earliest time in ms to fetch transfers for
2502
2813
  * @param {int} [limit] the maximum number of transfers structures to retrieve
@@ -2506,44 +2817,56 @@ export default class woo extends Exchange {
2506
2817
  */
2507
2818
  async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {
2508
2819
  const request = {};
2820
+ let currency = undefined;
2821
+ if (code !== undefined) {
2822
+ currency = this.currency(code);
2823
+ }
2509
2824
  if (limit !== undefined) {
2510
2825
  request['size'] = limit;
2511
2826
  }
2512
2827
  if (since !== undefined) {
2513
- request['start_t'] = since;
2828
+ request['startTime'] = since;
2514
2829
  }
2515
2830
  const until = this.safeInteger(params, 'until'); // unified in milliseconds
2516
2831
  params = this.omit(params, ['until']);
2517
2832
  if (until !== undefined) {
2518
- request['end_t'] = until;
2833
+ request['endTime'] = until;
2519
2834
  }
2520
- const response = await this.v1PrivateGetAssetMainSubTransferHistory(this.extend(request, params));
2835
+ const response = await this.v3PrivateGetAssetTransferHistory(this.extend(request, params));
2521
2836
  //
2522
2837
  // {
2523
- // "rows": [
2524
- // {
2525
- // "id": 46704,
2526
- // "token": "USDT",
2527
- // "amount": 30000.00000000,
2528
- // "status": "COMPLETED",
2529
- // "from_application_id": "0f1bd3cd-dba2-4563-b8bb-0adb1bfb83a3",
2530
- // "to_application_id": "c01e6940-a735-4022-9b6c-9d3971cdfdfa",
2531
- // "from_user": "LeverageLow",
2532
- // "to_user": "dev",
2533
- // "created_time": "1709022325.427",
2534
- // "updated_time": "1709022325.542"
2838
+ // "success": true,
2839
+ // "data": {
2840
+ // "rows": [
2841
+ // {
2842
+ // "id": 225,
2843
+ // "token": "USDT",
2844
+ // "amount": "1000000",
2845
+ // "status": "COMPLETED",
2846
+ // "from": {
2847
+ // "applicationId": "046b5c5c-5b44-4d27-9593-ddc32c0a08ae",
2848
+ // "accountName": "Main"
2849
+ // },
2850
+ // "to": {
2851
+ // "applicationId": "082ae5ae-e26a-4fb1-be5b-03e5b4867663",
2852
+ // "accountName": "sub001"
2853
+ // },
2854
+ // "createdTime": "1642660941.534",
2855
+ // "updatedTime": "1642660941.950"
2856
+ // }
2857
+ // ],
2858
+ // "meta": {
2859
+ // "total": 46,
2860
+ // "recordsPerPage": 1,
2861
+ // "currentPage": 1
2535
2862
  // }
2536
- // ],
2537
- // "meta": {
2538
- // "total": 50,
2539
- // "records_per_page": 25,
2540
- // "current_page": 1
2541
2863
  // },
2542
- // "success": true
2864
+ // "timestamp": 1721295317627
2543
2865
  // }
2544
2866
  //
2545
- const data = this.safeList(response, 'rows', []);
2546
- return this.parseTransfers(data, undefined, since, limit, params);
2867
+ const data = this.safeDict(response, 'data', {});
2868
+ const rows = this.safeList(data, 'rows', []);
2869
+ return this.parseTransfers(rows, currency, since, limit, params);
2547
2870
  }
2548
2871
  parseTransfer(transfer, currency = undefined) {
2549
2872
  //
@@ -2560,6 +2883,22 @@ export default class woo extends Exchange {
2560
2883
  // "created_time": "1709022325.427",
2561
2884
  // "updated_time": "1709022325.542"
2562
2885
  // }
2886
+ // {
2887
+ // "id": 225,
2888
+ // "token": "USDT",
2889
+ // "amount": "1000000",
2890
+ // "status": "COMPLETED",
2891
+ // "from": {
2892
+ // "applicationId": "046b5c5c-5b44-4d27-9593-ddc32c0a08ae",
2893
+ // "accountName": "Main"
2894
+ // },
2895
+ // "to": {
2896
+ // "applicationId": "082ae5ae-e26a-4fb1-be5b-03e5b4867663",
2897
+ // "accountName": "sub001"
2898
+ // },
2899
+ // "createdTime": "1642660941.534",
2900
+ // "updatedTime": "1642660941.950"
2901
+ // }
2563
2902
  //
2564
2903
  // transfer
2565
2904
  // {
@@ -2567,23 +2906,23 @@ export default class woo extends Exchange {
2567
2906
  // "id": 200
2568
2907
  // }
2569
2908
  //
2570
- const networkizedCode = this.safeString(transfer, 'token');
2571
- const currencyDefined = this.getCurrencyFromChaincode(networkizedCode, currency);
2572
- const code = currencyDefined['code'];
2573
- const timestamp = this.safeTimestamp(transfer, 'created_time');
2909
+ const code = this.safeCurrencyCode(this.safeString(transfer, 'token'), currency);
2910
+ const timestamp = this.safeTimestamp(transfer, 'createdTime');
2574
2911
  const success = this.safeBool(transfer, 'success');
2575
2912
  let status = undefined;
2576
2913
  if (success !== undefined) {
2577
2914
  status = success ? 'ok' : 'failed';
2578
2915
  }
2916
+ const fromAccount = this.safeDict(transfer, 'from', {});
2917
+ const toAccount = this.safeDict(transfer, 'to', {});
2579
2918
  return {
2580
2919
  'id': this.safeString(transfer, 'id'),
2581
2920
  'timestamp': timestamp,
2582
2921
  'datetime': this.iso8601(timestamp),
2583
2922
  'currency': code,
2584
2923
  'amount': this.safeNumber(transfer, 'amount'),
2585
- 'fromAccount': this.safeString(transfer, 'from_application_id'),
2586
- 'toAccount': this.safeString(transfer, 'to_application_id'),
2924
+ 'fromAccount': this.safeString(fromAccount, 'applicationId'),
2925
+ 'toAccount': this.safeString(toAccount, 'applicationId'),
2587
2926
  'status': this.parseTransferStatus(this.safeString(transfer, 'status', status)),
2588
2927
  'info': transfer,
2589
2928
  };
@@ -2710,7 +3049,7 @@ export default class woo extends Exchange {
2710
3049
  }
2711
3050
  else {
2712
3051
  this.checkRequiredCredentials();
2713
- if (method === 'POST' && (path === 'algo/order' || path === 'order')) {
3052
+ if (method === 'POST' && (path === 'trade/algoOrder' || path === 'trade/order')) {
2714
3053
  const isSandboxMode = this.safeBool(this.options, 'sandboxMode', false);
2715
3054
  if (!isSandboxMode) {
2716
3055
  const applicationId = 'bc830de7-50f3-460b-9ee0-f430f83f9dad';
@@ -2734,9 +3073,10 @@ export default class woo extends Exchange {
2734
3073
  };
2735
3074
  if (version === 'v3') {
2736
3075
  auth = ts + method + '/' + version + '/' + pathWithParams;
2737
- if (method === 'POST' || method === 'PUT' || method === 'DELETE') {
3076
+ if (method === 'POST' || method === 'PUT') {
2738
3077
  body = this.json(params);
2739
3078
  auth += body;
3079
+ headers['content-type'] = 'application/json';
2740
3080
  }
2741
3081
  else {
2742
3082
  if (Object.keys(params).length) {
@@ -2745,7 +3085,6 @@ export default class woo extends Exchange {
2745
3085
  auth += '?' + query;
2746
3086
  }
2747
3087
  }
2748
- headers['content-type'] = 'application/json';
2749
3088
  }
2750
3089
  else {
2751
3090
  auth = this.urlencode(params);
@@ -2784,25 +3123,26 @@ export default class woo extends Exchange {
2784
3123
  parseIncome(income, market = undefined) {
2785
3124
  //
2786
3125
  // {
2787
- // "id":666666,
2788
- // "symbol":"PERP_BTC_USDT",
2789
- // "funding_rate":0.00001198,
2790
- // "mark_price":28941.04000000,
2791
- // "funding_fee":0.00069343,
2792
- // "payment_type":"Pay",
2793
- // "status":"COMPLETED",
2794
- // "created_time":"1653616000.666",
2795
- // "updated_time":"1653616000.605"
3126
+ // "id": 1286360,
3127
+ // "symbol": "PERP_BTC_USDT",
3128
+ // "fundingRate": -0.00001445,
3129
+ // "markPrice": "26930.60000000",
3130
+ // "fundingFee": "9.56021744",
3131
+ // "fundingIntervalHours": 8,
3132
+ // "paymentType": "Pay",
3133
+ // "status": "COMPLETED",
3134
+ // "createdTime": 1696060873259,
3135
+ // "updatedTime": 1696060873286
2796
3136
  // }
2797
3137
  //
2798
3138
  const marketId = this.safeString(income, 'symbol');
2799
3139
  const symbol = this.safeSymbol(marketId, market);
2800
- let amount = this.safeString(income, 'funding_fee');
3140
+ let amount = this.safeString(income, 'fundingFee');
2801
3141
  const code = this.safeCurrencyCode('USD');
2802
3142
  const id = this.safeString(income, 'id');
2803
- const timestamp = this.safeTimestamp(income, 'updated_time');
2804
- const rate = this.safeNumber(income, 'funding_rate');
2805
- const paymentType = this.safeString(income, 'payment_type');
3143
+ const timestamp = this.safeInteger(income, 'updatedTime');
3144
+ const rate = this.safeNumber(income, 'fundingRate');
3145
+ const paymentType = this.safeString(income, 'paymentType');
2806
3146
  amount = (paymentType === 'Pay') ? Precise.stringNeg(amount) : amount;
2807
3147
  return {
2808
3148
  'info': income,
@@ -2819,7 +3159,7 @@ export default class woo extends Exchange {
2819
3159
  * @method
2820
3160
  * @name woo#fetchFundingHistory
2821
3161
  * @description fetch the history of funding payments paid and received on this account
2822
- * @see https://docs.woox.io/#get-funding-fee-history
3162
+ * @see https://developer.woox.io/api-reference/endpoint/futures/get_fundingFee_history
2823
3163
  * @param {string} [symbol] unified market symbol
2824
3164
  * @param {int} [since] the earliest time in ms to fetch funding history for
2825
3165
  * @param {int} [limit] the maximum number of funding history structures to retrieve
@@ -2832,7 +3172,7 @@ export default class woo extends Exchange {
2832
3172
  let paginate = false;
2833
3173
  [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingHistory', 'paginate');
2834
3174
  if (paginate) {
2835
- return await this.fetchPaginatedCallCursor('fetchFundingHistory', symbol, since, limit, params, 'page', 'page', 1, 500);
3175
+ return await this.fetchPaginatedCallIncremental('fetchFundingHistory', symbol, since, limit, params, 'page', 500);
2836
3176
  }
2837
3177
  const request = {};
2838
3178
  let market = undefined;
@@ -2841,70 +3181,67 @@ export default class woo extends Exchange {
2841
3181
  request['symbol'] = market['id'];
2842
3182
  }
2843
3183
  if (since !== undefined) {
2844
- request['start_t'] = since;
3184
+ request['startTime'] = since;
2845
3185
  }
2846
- if (limit !== undefined) {
2847
- request['size'] = limit;
3186
+ const until = this.safeInteger(params, 'until'); // unified in milliseconds
3187
+ params = this.omit(params, ['until']);
3188
+ if (until !== undefined) {
3189
+ request['endTime'] = until;
2848
3190
  }
2849
- else {
2850
- request['size'] = 5000;
3191
+ if (limit !== undefined) {
3192
+ request['size'] = Math.min(limit, 500);
2851
3193
  }
2852
- const response = await this.v1PrivateGetFundingFeeHistory(this.extend(request, params));
3194
+ const response = await this.v3PrivateGetFuturesFundingFeeHistory(this.extend(request, params));
2853
3195
  //
2854
3196
  // {
2855
- // "rows":[
2856
- // {
2857
- // "id":666666,
2858
- // "symbol":"PERP_BTC_USDT",
2859
- // "funding_rate":0.00001198,
2860
- // "mark_price":28941.04000000,
2861
- // "funding_fee":0.00069343,
2862
- // "payment_type":"Pay",
2863
- // "status":"COMPLETED",
2864
- // "created_time":"1653616000.666",
2865
- // "updated_time":"1653616000.605"
2866
- // }
2867
- // ],
2868
- // "meta":{
2869
- // "total":235,
2870
- // "records_per_page":25,
2871
- // "current_page":1
3197
+ // "success": true,
3198
+ // "data": {
3199
+ // "meta": {
3200
+ // "total": 670,
3201
+ // "recordsPerPage": 25,
3202
+ // "currentPage": 1
3203
+ // },
3204
+ // "rows": [
3205
+ // {
3206
+ // "id": 1286360,
3207
+ // "symbol": "PERP_BTC_USDT",
3208
+ // "fundingRate": -0.00001445,
3209
+ // "markPrice": "26930.60000000",
3210
+ // "fundingFee": "9.56021744",
3211
+ // "fundingIntervalHours": 8,
3212
+ // "paymentType": "Pay",
3213
+ // "status": "COMPLETED",
3214
+ // "createdTime": 1696060873259,
3215
+ // "updatedTime": 1696060873286
3216
+ // }
3217
+ // ]
2872
3218
  // },
2873
- // "success":true
3219
+ // "timestamp": 1721351502594
2874
3220
  // }
2875
3221
  //
2876
- const meta = this.safeDict(response, 'meta', {});
2877
- const cursor = this.safeInteger(meta, 'current_page');
2878
- const result = this.safeList(response, 'rows', []);
2879
- const resultLength = result.length;
2880
- if (resultLength > 0) {
2881
- const lastItem = result[resultLength - 1];
2882
- lastItem['page'] = cursor;
2883
- result[resultLength - 1] = lastItem;
2884
- }
2885
- return this.parseIncomes(result, market, since, limit);
3222
+ const data = this.safeDict(response, 'data', {});
3223
+ const rows = this.safeList(data, 'rows', []);
3224
+ return this.parseIncomes(rows, market, since, limit);
2886
3225
  }
2887
3226
  parseFundingRate(fundingRate, market = undefined) {
2888
3227
  //
2889
3228
  // {
2890
- // "success": true,
2891
- // "timestamp": 1727427915529,
2892
3229
  // "symbol": "PERP_BTC_USDT",
2893
- // "est_funding_rate": -0.00092719,
2894
- // "est_funding_rate_timestamp": 1727427899060,
2895
- // "last_funding_rate": -0.00092610,
2896
- // "last_funding_rate_timestamp": 1727424000000,
2897
- // "next_funding_time": 1727452800000,
2898
- // "last_funding_rate_interval": 8,
2899
- // "est_funding_rate_interval": 8
3230
+ // "estFundingRate": "-0.00000441",
3231
+ // "estFundingRateTimestamp": 1751623979022,
3232
+ // "lastFundingRate": "-0.00004953",
3233
+ // "lastFundingRateTimestamp": 1751616000000,
3234
+ // "nextFundingTime": 1751644800000,
3235
+ // "lastFundingIntervalHours": 8,
3236
+ // "estFundingIntervalHours": 8
2900
3237
  // }
2901
3238
  //
2902
3239
  const symbol = this.safeString(fundingRate, 'symbol');
2903
3240
  market = this.market(symbol);
2904
- const nextFundingTimestamp = this.safeInteger(fundingRate, 'next_funding_time');
2905
- const estFundingRateTimestamp = this.safeInteger(fundingRate, 'est_funding_rate_timestamp');
2906
- const lastFundingRateTimestamp = this.safeInteger(fundingRate, 'last_funding_rate_timestamp');
2907
- const intervalString = this.safeString(fundingRate, 'est_funding_rate_interval');
3241
+ const nextFundingTimestamp = this.safeInteger(fundingRate, 'nextFundingTime');
3242
+ const estFundingRateTimestamp = this.safeInteger(fundingRate, 'estFundingRateTimestamp');
3243
+ const lastFundingRateTimestamp = this.safeInteger(fundingRate, 'lastFundingRateTimestamp');
3244
+ const intervalString = this.safeString(fundingRate, 'estFundingIntervalHours');
2908
3245
  return {
2909
3246
  'info': fundingRate,
2910
3247
  'symbol': market['symbol'],
@@ -2914,13 +3251,13 @@ export default class woo extends Exchange {
2914
3251
  'estimatedSettlePrice': undefined,
2915
3252
  'timestamp': estFundingRateTimestamp,
2916
3253
  'datetime': this.iso8601(estFundingRateTimestamp),
2917
- 'fundingRate': this.safeNumber(fundingRate, 'est_funding_rate'),
3254
+ 'fundingRate': this.safeNumber(fundingRate, 'estFundingRate'),
2918
3255
  'fundingTimestamp': nextFundingTimestamp,
2919
3256
  'fundingDatetime': this.iso8601(nextFundingTimestamp),
2920
3257
  'nextFundingRate': undefined,
2921
3258
  'nextFundingTimestamp': undefined,
2922
3259
  'nextFundingDatetime': undefined,
2923
- 'previousFundingRate': this.safeNumber(fundingRate, 'last_funding_rate'),
3260
+ 'previousFundingRate': this.safeNumber(fundingRate, 'lastFundingRate'),
2924
3261
  'previousFundingTimestamp': lastFundingRateTimestamp,
2925
3262
  'previousFundingDatetime': this.iso8601(lastFundingRateTimestamp),
2926
3263
  'interval': intervalString + 'h',
@@ -2930,7 +3267,7 @@ export default class woo extends Exchange {
2930
3267
  * @method
2931
3268
  * @name woo#fetchFundingInterval
2932
3269
  * @description fetch the current funding rate interval
2933
- * @see https://docs.woox.io/#get-predicted-funding-rate-for-one-market-public
3270
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/fundingRate
2934
3271
  * @param {string} symbol unified market symbol
2935
3272
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2936
3273
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
@@ -2942,7 +3279,7 @@ export default class woo extends Exchange {
2942
3279
  * @method
2943
3280
  * @name woo#fetchFundingRate
2944
3281
  * @description fetch the current funding rate
2945
- * @see https://docs.woox.io/#get-predicted-funding-rate-for-one-market-public
3282
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/fundingRate
2946
3283
  * @param {string} symbol unified market symbol
2947
3284
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2948
3285
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
@@ -2953,28 +3290,37 @@ export default class woo extends Exchange {
2953
3290
  const request = {
2954
3291
  'symbol': market['id'],
2955
3292
  };
2956
- const response = await this.v1PublicGetFundingRateSymbol(this.extend(request, params));
3293
+ const response = await this.v3PublicGetFundingRate(this.extend(request, params));
2957
3294
  //
2958
3295
  // {
2959
3296
  // "success": true,
2960
- // "timestamp": 1727428037877,
2961
- // "symbol": "PERP_BTC_USDT",
2962
- // "est_funding_rate": -0.00092674,
2963
- // "est_funding_rate_timestamp": 1727428019064,
2964
- // "last_funding_rate": -0.00092610,
2965
- // "last_funding_rate_timestamp": 1727424000000,
2966
- // "next_funding_time": 1727452800000,
2967
- // "last_funding_rate_interval": 8,
2968
- // "est_funding_rate_interval": 8
3297
+ // "data": {
3298
+ // "rows": [
3299
+ // {
3300
+ // "symbol": "PERP_BTC_USDT",
3301
+ // "estFundingRate": "-0.00000441",
3302
+ // "estFundingRateTimestamp": 1751623979022,
3303
+ // "lastFundingRate": "-0.00004953",
3304
+ // "lastFundingRateTimestamp": 1751616000000,
3305
+ // "nextFundingTime": 1751644800000,
3306
+ // "lastFundingIntervalHours": 8,
3307
+ // "estFundingIntervalHours": 8
3308
+ // }
3309
+ // ]
3310
+ // },
3311
+ // "timestamp": 1751624037798
2969
3312
  // }
2970
3313
  //
2971
- return this.parseFundingRate(response, market);
3314
+ const data = this.safeDict(response, 'data', {});
3315
+ const rows = this.safeList(data, 'rows', []);
3316
+ const first = this.safeDict(rows, 0, {});
3317
+ return this.parseFundingRate(first, market);
2972
3318
  }
2973
3319
  /**
2974
3320
  * @method
2975
3321
  * @name woo#fetchFundingRates
2976
3322
  * @description fetch the funding rate for multiple markets
2977
- * @see https://docs.woox.io/#get-predicted-funding-rate-for-all-markets-public
3323
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/fundingRate
2978
3324
  * @param {string[]|undefined} symbols list of unified market symbols
2979
3325
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2980
3326
  * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexed by market symbols
@@ -2982,31 +3328,36 @@ export default class woo extends Exchange {
2982
3328
  async fetchFundingRates(symbols = undefined, params = {}) {
2983
3329
  await this.loadMarkets();
2984
3330
  symbols = this.marketSymbols(symbols);
2985
- const response = await this.v1PublicGetFundingRates(params);
3331
+ const response = await this.v3PublicGetFundingRate(params);
2986
3332
  //
2987
3333
  // {
2988
- // "success":true,
2989
- // "rows":[
2990
- // {
2991
- // "symbol":"PERP_AAVE_USDT",
2992
- // "est_funding_rate":-0.00003447,
2993
- // "est_funding_rate_timestamp":1653633959001,
2994
- // "last_funding_rate":-0.00002094,
2995
- // "last_funding_rate_timestamp":1653631200000,
2996
- // "next_funding_time":1653634800000
2997
- // }
2998
- // ],
2999
- // "timestamp":1653633985646
3334
+ // "success": true,
3335
+ // "data": {
3336
+ // "rows": [
3337
+ // {
3338
+ // "symbol": "PERP_BTC_USDT",
3339
+ // "estFundingRate": "-0.00000441",
3340
+ // "estFundingRateTimestamp": 1751623979022,
3341
+ // "lastFundingRate": "-0.00004953",
3342
+ // "lastFundingRateTimestamp": 1751616000000,
3343
+ // "nextFundingTime": 1751644800000,
3344
+ // "lastFundingIntervalHours": 8,
3345
+ // "estFundingIntervalHours": 8
3346
+ // }
3347
+ // ]
3348
+ // },
3349
+ // "timestamp": 1751624037798
3000
3350
  // }
3001
3351
  //
3002
- const rows = this.safeList(response, 'rows', []);
3352
+ const data = this.safeDict(response, 'data', {});
3353
+ const rows = this.safeList(data, 'rows', []);
3003
3354
  return this.parseFundingRates(rows, symbols);
3004
3355
  }
3005
3356
  /**
3006
3357
  * @method
3007
3358
  * @name woo#fetchFundingRateHistory
3008
3359
  * @description fetches historical funding rate prices
3009
- * @see https://docs.woox.io/#get-funding-rate-history-for-one-market-public
3360
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/fundingRateHistory
3010
3361
  * @param {string} symbol unified symbol of the market to fetch the funding rate history for
3011
3362
  * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
3012
3363
  * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
@@ -3022,46 +3373,52 @@ export default class woo extends Exchange {
3022
3373
  if (paginate) {
3023
3374
  return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'page', 25);
3024
3375
  }
3025
- let request = {};
3026
- if (symbol !== undefined) {
3027
- const market = this.market(symbol);
3028
- symbol = market['symbol'];
3029
- request['symbol'] = market['id'];
3376
+ if (symbol === undefined) {
3377
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
3030
3378
  }
3379
+ const market = this.market(symbol);
3380
+ symbol = market['symbol'];
3381
+ let request = {
3382
+ 'symbol': market['id'],
3383
+ };
3031
3384
  if (since !== undefined) {
3032
- request['start_t'] = this.parseToInt(since / 1000);
3385
+ request['startTime'] = since;
3033
3386
  }
3034
- [request, params] = this.handleUntilOption('end_t', request, params, 0.001);
3035
- const response = await this.v1PublicGetFundingRateHistory(this.extend(request, params));
3387
+ [request, params] = this.handleUntilOption('endTime', request, params);
3388
+ const response = await this.v3PublicGetFundingRateHistory(this.extend(request, params));
3036
3389
  //
3037
3390
  // {
3038
- // "success":true,
3039
- // "meta":{
3040
- // "total":2464,
3041
- // "records_per_page":25,
3042
- // "current_page":1
3043
- // },
3044
- // "rows":[
3045
- // {
3046
- // "symbol":"PERP_BTC_USDT",
3047
- // "funding_rate":0.00000629,
3048
- // "funding_rate_timestamp":1653638400000,
3049
- // "next_funding_time":1653642000000
3391
+ // "success": true,
3392
+ // "data": {
3393
+ // "rows": [
3394
+ // {
3395
+ // "symbol": "PERP_BTC_USDT",
3396
+ // "fundingRate": "-0.00004953",
3397
+ // "fundingRateTimestamp": 1751616000000,
3398
+ // "nextFundingTime": 1751644800000,
3399
+ // "markPrice": "108708"
3400
+ // }
3401
+ // ],
3402
+ // "meta": {
3403
+ // "total": 11690,
3404
+ // "recordsPerPage": 25,
3405
+ // "currentPage": 1
3050
3406
  // }
3051
- // ],
3052
- // "timestamp":1653640814885
3407
+ // },
3408
+ // "timestamp": 1751632390031
3053
3409
  // }
3054
3410
  //
3055
- const result = this.safeList(response, 'rows');
3411
+ const data = this.safeDict(response, 'data', {});
3412
+ const rows = this.safeList(data, 'rows', []);
3056
3413
  const rates = [];
3057
- for (let i = 0; i < result.length; i++) {
3058
- const entry = result[i];
3414
+ for (let i = 0; i < rows.length; i++) {
3415
+ const entry = rows[i];
3059
3416
  const marketId = this.safeString(entry, 'symbol');
3060
- const timestamp = this.safeInteger(entry, 'funding_rate_timestamp');
3417
+ const timestamp = this.safeInteger(entry, 'fundingRateTimestamp');
3061
3418
  rates.push({
3062
3419
  'info': entry,
3063
3420
  'symbol': this.safeSymbol(marketId),
3064
- 'fundingRate': this.safeNumber(entry, 'funding_rate'),
3421
+ 'fundingRate': this.safeNumber(entry, 'fundingRate'),
3065
3422
  'timestamp': timestamp,
3066
3423
  'datetime': this.iso8601(timestamp),
3067
3424
  });
@@ -3073,7 +3430,7 @@ export default class woo extends Exchange {
3073
3430
  * @method
3074
3431
  * @name woo#setPositionMode
3075
3432
  * @description set hedged to true or false for a market
3076
- * @see https://docs.woox.io/#update-position-mode
3433
+ * @see https://developer.woox.io/api-reference/endpoint/futures/position_mode
3077
3434
  * @param {bool} hedged set to true to use HEDGE_MODE, false for ONE_WAY
3078
3435
  * @param {string} symbol not used by woo setPositionMode
3079
3436
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -3088,14 +3445,13 @@ export default class woo extends Exchange {
3088
3445
  hedgeMode = 'ONE_WAY';
3089
3446
  }
3090
3447
  const request = {
3091
- 'position_mode': hedgeMode,
3448
+ 'positionMode': hedgeMode,
3092
3449
  };
3093
- const response = await this.v1PrivatePostClientPositionMode(this.extend(request, params));
3450
+ const response = await this.v3PrivatePutFuturesPositionMode(this.extend(request, params));
3094
3451
  //
3095
3452
  // {
3096
3453
  // "success": true,
3097
- // "data": {},
3098
- // "timestamp": "1709195608551"
3454
+ // "timestamp": 1752550492845
3099
3455
  // }
3100
3456
  //
3101
3457
  return response;
@@ -3104,11 +3460,12 @@ export default class woo extends Exchange {
3104
3460
  * @method
3105
3461
  * @name woo#fetchLeverage
3106
3462
  * @description fetch the set leverage for a market
3107
- * @see https://docs.woox.io/#get-account-information-new
3463
+ * @see https://developer.woox.io/api-reference/endpoint/account/get_account_info
3464
+ * @see https://developer.woox.io/api-reference/endpoint/futures/get_leverage
3108
3465
  * @param {string} symbol unified market symbol
3109
3466
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3110
3467
  * @param {string} [params.marginMode] *for swap markets only* 'cross' or 'isolated'
3111
- * @param {string} [params.position_mode] *for swap markets only* 'ONE_WAY' or 'HEDGE_MODE'
3468
+ * @param {string} [params.positionMode] *for swap markets only* 'ONE_WAY' or 'HEDGE_MODE'
3112
3469
  * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
3113
3470
  */
3114
3471
  async fetchLeverage(symbol, params = {}) {
@@ -3116,7 +3473,7 @@ export default class woo extends Exchange {
3116
3473
  const market = this.market(symbol);
3117
3474
  let response = undefined;
3118
3475
  if (market['spot']) {
3119
- response = await this.v3PrivateGetAccountinfo(params);
3476
+ response = await this.v3PrivateGetAccountInfo(params);
3120
3477
  //
3121
3478
  // {
3122
3479
  // "success": true,
@@ -3124,25 +3481,26 @@ export default class woo extends Exchange {
3124
3481
  // "applicationId": "dsa",
3125
3482
  // "account": "dsa",
3126
3483
  // "alias": "haha",
3127
- // "accountMode": "MARGIN",
3128
- // "leverage": 1,
3129
- // "takerFeeRate": 1,
3130
- // "makerFeeRate": 1,
3131
- // "interestRate": 1,
3132
- // "futuresTakerFeeRate": 1,
3133
- // "futuresMakerFeeRate": 1,
3134
3484
  // "otpauth": true,
3135
- // "marginRatio": 1,
3136
- // "openMarginRatio": 1,
3137
- // "initialMarginRatio": 1,
3138
- // "maintenanceMarginRatio": 1,
3139
- // "totalCollateral": 1,
3140
- // "freeCollateral": 1,
3141
- // "totalAccountValue": 1,
3142
- // "totalVaultValue": 1,
3143
- // "totalStakingValue": 1
3485
+ // "accountMode": "FUTURES",
3486
+ // "positionMode": "ONE_WAY",
3487
+ // "leverage": 0,
3488
+ // "marginRatio": "10",
3489
+ // "openMarginRatio": "10",
3490
+ // "initialMarginRatio": "10",
3491
+ // "maintenanceMarginRatio": "0.03",
3492
+ // "totalCollateral": "165.6115334",
3493
+ // "freeCollateral": "165.6115334",
3494
+ // "totalAccountValue": "167.52723093",
3495
+ // "totalTradingValue": "167.52723093",
3496
+ // "totalVaultValue": "0",
3497
+ // "totalStakingValue": "0",
3498
+ // "totalLaunchpadValue": "0",
3499
+ // "totalEarnValue": "0",
3500
+ // "referrerID": null,
3501
+ // "accountType": "Main"
3144
3502
  // },
3145
- // "timestamp": 1673323685109
3503
+ // "timestamp": 1752645129054
3146
3504
  // }
3147
3505
  //
3148
3506
  }
@@ -3152,8 +3510,8 @@ export default class woo extends Exchange {
3152
3510
  };
3153
3511
  let marginMode = undefined;
3154
3512
  [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params, 'cross');
3155
- request['margin_mode'] = this.encodeMarginMode(marginMode);
3156
- response = await this.v1PrivateGetClientFuturesLeverage(this.extend(request, params));
3513
+ request['marginMode'] = this.encodeMarginMode(marginMode);
3514
+ response = await this.v3PrivateGetFuturesLeverage(this.extend(request, params));
3157
3515
  //
3158
3516
  // HEDGE_MODE
3159
3517
  // {
@@ -3161,15 +3519,15 @@ export default class woo extends Exchange {
3161
3519
  // "data":
3162
3520
  // {
3163
3521
  // "symbol": "PERP_ETH_USDT",
3164
- // "default_margin_mode": "CROSS",
3165
- // "position_mode": "HEDGE_MODE",
3522
+ // "marginMode": "CROSS",
3523
+ // "positionMode": "HEDGE_MODE",
3166
3524
  // "details": [
3167
3525
  // {
3168
- // "position_side": "LONG",
3526
+ // "positionSide": "LONG",
3169
3527
  // "leverage": 10
3170
3528
  // },
3171
3529
  // {
3172
- // "position_side": "SHORT",
3530
+ // "positionSide": "SHORT",
3173
3531
  // "leverage": 10
3174
3532
  // }
3175
3533
  // ]
@@ -3182,11 +3540,11 @@ export default class woo extends Exchange {
3182
3540
  // "success": true,
3183
3541
  // "data": {
3184
3542
  // "symbol": "PERP_ETH_USDT",
3185
- // "default_margin_mode": "ISOLATED",
3186
- // "position_mode": "ONE_WAY",
3543
+ // "marginMode": "ISOLATED",
3544
+ // "positionMode": "ONE_WAY",
3187
3545
  // "details": [
3188
3546
  // {
3189
- // "position_side": "BOTH",
3547
+ // "positionSide": "BOTH",
3190
3548
  // "leverage": 10
3191
3549
  // }
3192
3550
  // ]
@@ -3204,15 +3562,18 @@ export default class woo extends Exchange {
3204
3562
  parseLeverage(leverage, market = undefined) {
3205
3563
  const marketId = this.safeString(leverage, 'symbol');
3206
3564
  market = this.safeMarket(marketId, market);
3207
- const marginMode = this.safeStringLower(leverage, 'default_margin_mode');
3208
- const spotLeverage = this.safeInteger(leverage, 'leverage');
3565
+ const marginMode = this.safeStringLower(leverage, 'marginMode');
3566
+ let spotLeverage = this.safeInteger(leverage, 'leverage');
3567
+ if (spotLeverage === 0) {
3568
+ spotLeverage = null;
3569
+ }
3209
3570
  let longLeverage = spotLeverage;
3210
3571
  let shortLeverage = spotLeverage;
3211
3572
  const details = this.safeList(leverage, 'details', []);
3212
3573
  for (let i = 0; i < details.length; i++) {
3213
3574
  const position = this.safeDict(details, i, {});
3214
3575
  const positionLeverage = this.safeInteger(position, 'leverage');
3215
- const side = this.safeString(position, 'position_side');
3576
+ const side = this.safeString(position, 'positionSide');
3216
3577
  if (side === 'BOTH') {
3217
3578
  longLeverage = positionLeverage;
3218
3579
  shortLeverage = positionLeverage;
@@ -3236,13 +3597,13 @@ export default class woo extends Exchange {
3236
3597
  * @method
3237
3598
  * @name woo#setLeverage
3238
3599
  * @description set the level of leverage for a market
3239
- * @see https://docs.woox.io/#update-leverage-setting
3240
- * @see https://docs.woox.io/#update-futures-leverage-setting
3600
+ * @see https://developer.woox.io/api-reference/endpoint/spot_margin/set_leverage
3601
+ * @see https://developer.woox.io/api-reference/endpoint/futures/set_leverage
3241
3602
  * @param {float} leverage the rate of leverage (1, 2, 3, 4 or 5 for spot markets, 1, 2, 3, 4, 5, 10, 15, 20 for swap markets)
3242
3603
  * @param {string} [symbol] unified market symbol (is mandatory for swap markets)
3243
3604
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3244
3605
  * @param {string} [params.marginMode] *for swap markets only* 'cross' or 'isolated'
3245
- * @param {string} [params.position_side] *for swap markets only* 'LONG' or 'SHORT' in hedge mode, 'BOTH' in one way mode.
3606
+ * @param {string} [params.positionMode] *for swap markets only* 'ONE_WAY' or 'HEDGE_MODE'
3246
3607
  * @returns {object} response from the exchange
3247
3608
  */
3248
3609
  async setLeverage(leverage, symbol = undefined, params = {}) {
@@ -3255,14 +3616,14 @@ export default class woo extends Exchange {
3255
3616
  market = this.market(symbol);
3256
3617
  }
3257
3618
  if ((symbol === undefined) || market['spot']) {
3258
- return await this.v1PrivatePostClientLeverage(this.extend(request, params));
3619
+ return await this.v3PrivatePostSpotMarginLeverage(this.extend(request, params));
3259
3620
  }
3260
3621
  else if (market['swap']) {
3261
3622
  request['symbol'] = market['id'];
3262
3623
  let marginMode = undefined;
3263
3624
  [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params, 'cross');
3264
- request['margin_mode'] = this.encodeMarginMode(marginMode);
3265
- return await this.v1PrivatePostClientFuturesLeverage(this.extend(request, params));
3625
+ request['marginMode'] = this.encodeMarginMode(marginMode);
3626
+ return await this.v3PrivatePutFuturesLeverage(this.extend(request, params));
3266
3627
  }
3267
3628
  else {
3268
3629
  throw new NotSupported(this.id + ' fetchLeverage() is not supported for ' + market['type'] + ' markets');
@@ -3307,93 +3668,99 @@ export default class woo extends Exchange {
3307
3668
  };
3308
3669
  return await this.v1PrivatePostClientIsolatedMargin(this.extend(request, params));
3309
3670
  }
3671
+ /**
3672
+ * @method
3673
+ * @name woo#fetchPosition
3674
+ * @description fetch data on an open position
3675
+ * @see https://developer.woox.io/api-reference/endpoint/futures/get_positions
3676
+ * @param {string} symbol unified market symbol of the market the position is held in
3677
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3678
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
3679
+ */
3310
3680
  async fetchPosition(symbol, params = {}) {
3311
3681
  await this.loadMarkets();
3312
3682
  const market = this.market(symbol);
3313
3683
  const request = {
3314
3684
  'symbol': market['id'],
3315
3685
  };
3316
- const response = await this.v1PrivateGetPositionSymbol(this.extend(request, params));
3686
+ const response = await this.v3PrivateGetFuturesPositions(this.extend(request, params));
3317
3687
  //
3318
3688
  // {
3319
- // "symbol": "PERP_ETH_USDT",
3320
- // "position_side": "BOTH",
3321
- // "leverage": 10,
3322
- // "margin_mode": "CROSS",
3323
- // "average_open_price": 3139.9,
3324
- // "isolated_margin_amount": 0.0,
3325
- // "isolated_margin_token": "",
3326
- // "opening_time": "1720627963.094",
3327
- // "mark_price": 3155.19169891,
3328
- // "pending_short_qty": 0.0,
3329
- // "pending_long_qty": 0.0,
3330
- // "holding": -0.7,
3331
- // "pnl_24_h": 0.0,
3332
- // "est_liq_price": 9107.40055552,
3333
- // "settle_price": 3151.0319904,
3334
3689
  // "success": true,
3335
- // "fee_24_h": 0.0,
3336
- // "isolated_frozen_long": 0.0,
3337
- // "isolated_frozen_short": 0.0,
3338
- // "timestamp": "1720867502.544"
3690
+ // "data": {
3691
+ // "positions": [
3692
+ // {
3693
+ // "symbol": "PERP_LTC_USDT",
3694
+ // "holding": "0.1",
3695
+ // "pendingLongQty": "0",
3696
+ // "pendingShortQty": "0",
3697
+ // "settlePrice": "96.87",
3698
+ // "averageOpenPrice": "96.87",
3699
+ // "pnl24H": "0",
3700
+ // "fee24H": "0.0048435",
3701
+ // "markPrice": "96.83793449",
3702
+ // "estLiqPrice": "0",
3703
+ // "timestamp": 1752500555823,
3704
+ // "adlQuantile": 2,
3705
+ // "positionSide": "BOTH",
3706
+ // "marginMode": "CROSS",
3707
+ // "isolatedMarginToken": "",
3708
+ // "isolatedMarginAmount": "0",
3709
+ // "isolatedFrozenLong": "0",
3710
+ // "isolatedFrozenShort": "0",
3711
+ // "leverage": 10
3712
+ // }
3713
+ // ]
3714
+ // },
3715
+ // "timestamp": 1752500579848
3339
3716
  // }
3340
3717
  //
3341
- return this.parsePosition(response, market);
3718
+ const result = this.safeDict(response, 'data', {});
3719
+ const positions = this.safeList(result, 'positions', []);
3720
+ const first = this.safeDict(positions, 0, {});
3721
+ return this.parsePosition(first, market);
3342
3722
  }
3723
+ /**
3724
+ * @method
3725
+ * @name woo#fetchPositions
3726
+ * @description fetch all open positions
3727
+ * @see https://developer.woox.io/api-reference/endpoint/futures/get_positions
3728
+ * @param {string[]} [symbols] list of unified market symbols
3729
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3730
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
3731
+ */
3343
3732
  async fetchPositions(symbols = undefined, params = {}) {
3344
3733
  await this.loadMarkets();
3345
- const response = await this.v3PrivateGetPositions(params);
3734
+ const response = await this.v3PrivateGetFuturesPositions(params);
3346
3735
  //
3347
3736
  // {
3348
3737
  // "success": true,
3349
- // "data":
3350
- // {
3738
+ // "data": {
3351
3739
  // "positions": [
3352
3740
  // {
3353
- // "symbol": "PERP_ETH_USDT",
3354
- // "holding": -1.0,
3355
- // "pendingLongQty": 0.0,
3356
- // "pendingShortQty": 0.0,
3357
- // "settlePrice": 3143.2,
3358
- // "averageOpenPrice": 3143.2,
3359
- // "pnl24H": 0.0,
3360
- // "fee24H": 1.5716,
3361
- // "markPrice": 3134.97984158,
3362
- // "estLiqPrice": 3436.176349,
3363
- // "timestamp": 1720628031.463,
3364
- // "adlQuantile": 5,
3365
- // "positionSide": "BOTH",
3366
- // "marginMode": "ISOLATED",
3367
- // "isolatedMarginToken": "USDT",
3368
- // "isolatedMarginAmount": 314.62426,
3369
- // "isolatedFrozenLong": 0.0,
3370
- // "isolatedFrozenShort": 0.0,
3371
- // "leverage": 10
3372
- // },
3373
- // {
3374
- // "symbol": "PERP_SOL_USDT",
3375
- // "holding": -1.0,
3376
- // "pendingLongQty": 0.0,
3377
- // "pendingShortQty": 0.0,
3378
- // "settlePrice": 141.89933923,
3379
- // "averageOpenPrice": 171.38,
3380
- // "pnl24H": 0.0,
3381
- // "fee24H": 0.0,
3382
- // "markPrice": 141.65155427,
3383
- // "estLiqPrice": 4242.73548551,
3384
- // "timestamp": 1720616702.68,
3385
- // "adlQuantile": 5,
3741
+ // "symbol": "PERP_LTC_USDT",
3742
+ // "holding": "0.1",
3743
+ // "pendingLongQty": "0",
3744
+ // "pendingShortQty": "0",
3745
+ // "settlePrice": "96.87",
3746
+ // "averageOpenPrice": "96.87",
3747
+ // "pnl24H": "0",
3748
+ // "fee24H": "0.0048435",
3749
+ // "markPrice": "96.83793449",
3750
+ // "estLiqPrice": "0",
3751
+ // "timestamp": 1752500555823,
3752
+ // "adlQuantile": 2,
3386
3753
  // "positionSide": "BOTH",
3387
3754
  // "marginMode": "CROSS",
3388
3755
  // "isolatedMarginToken": "",
3389
- // "isolatedMarginAmount": 0.0,
3390
- // "isolatedFrozenLong": 0.0,
3391
- // "isolatedFrozenShort": 0.0,
3756
+ // "isolatedMarginAmount": "0",
3757
+ // "isolatedFrozenLong": "0",
3758
+ // "isolatedFrozenShort": "0",
3392
3759
  // "leverage": 10
3393
3760
  // }
3394
3761
  // ]
3395
3762
  // },
3396
- // "timestamp": 1720628675078
3763
+ // "timestamp": 1752500579848
3397
3764
  // }
3398
3765
  //
3399
3766
  const result = this.safeDict(response, 'data', {});
@@ -3428,24 +3795,24 @@ export default class woo extends Exchange {
3428
3795
  //
3429
3796
  // v3PrivateGetPositions
3430
3797
  // {
3431
- // "symbol": "PERP_ETH_USDT",
3432
- // "holding": -1.0,
3433
- // "pendingLongQty": 0.0, // todo: check
3434
- // "pendingShortQty": 0.0, // todo: check
3435
- // "settlePrice": 3143.2,
3436
- // "averageOpenPrice": 3143.2,
3437
- // "pnl24H": 0.0, // todo: check
3438
- // "fee24H": 1.5716, // todo: check
3439
- // "markPrice": 3134.97984158,
3440
- // "estLiqPrice": 3436.176349,
3441
- // "timestamp": 1720628031.463,
3442
- // "adlQuantile": 5,
3798
+ // "symbol": "PERP_LTC_USDT",
3799
+ // "holding": "0.1",
3800
+ // "pendingLongQty": "0",
3801
+ // "pendingShortQty": "0",
3802
+ // "settlePrice": "96.87",
3803
+ // "averageOpenPrice": "96.87",
3804
+ // "pnl24H": "0",
3805
+ // "fee24H": "0.0048435",
3806
+ // "markPrice": "96.83793449",
3807
+ // "estLiqPrice": "0",
3808
+ // "timestamp": 1752500555823,
3809
+ // "adlQuantile": 2,
3443
3810
  // "positionSide": "BOTH",
3444
- // "marginMode": "ISOLATED",
3445
- // "isolatedMarginToken": "USDT", // todo: check
3446
- // "isolatedMarginAmount": 314.62426, // todo: check
3447
- // "isolatedFrozenLong": 0.0, // todo: check
3448
- // "isolatedFrozenShort": 0.0, // todo: check
3811
+ // "marginMode": "CROSS",
3812
+ // "isolatedMarginToken": "",
3813
+ // "isolatedMarginAmount": "0",
3814
+ // "isolatedFrozenLong": "0",
3815
+ // "isolatedFrozenShort": "0",
3449
3816
  // "leverage": 10
3450
3817
  // }
3451
3818
  //
@@ -3461,7 +3828,16 @@ export default class woo extends Exchange {
3461
3828
  }
3462
3829
  const contractSize = this.safeString(market, 'contractSize');
3463
3830
  const markPrice = this.safeString2(position, 'markPrice', 'mark_price');
3464
- const timestamp = this.safeTimestamp(position, 'timestamp');
3831
+ const timestampString = this.safeString(position, 'timestamp');
3832
+ let timestamp = undefined;
3833
+ if (timestampString !== undefined) {
3834
+ if (timestampString.indexOf('.') > -1) {
3835
+ timestamp = this.safeTimestamp(position, 'timestamp');
3836
+ }
3837
+ else {
3838
+ timestamp = this.safeInteger(position, 'timestamp');
3839
+ }
3840
+ }
3465
3841
  const entryPrice = this.safeString2(position, 'averageOpenPrice', 'average_open_price');
3466
3842
  const priceDifference = Precise.stringSub(markPrice, entryPrice);
3467
3843
  const unrealisedPnl = Precise.stringMul(priceDifference, size);