ccxt-ir 4.9.32 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1059) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +7 -1
  4. package/dist/cjs/package.json +1 -1
  5. package/dist/cjs/src/abstract/asretether.js +11 -0
  6. package/dist/cjs/src/abstract/bidarz.js +11 -0
  7. package/dist/cjs/src/asretether.js +325 -0
  8. package/dist/cjs/src/bidarz.js +337 -0
  9. package/dist/cjs/src/bit24.js +4 -3
  10. package/dist/cjs/src/raastin.js +144 -16
  11. package/js/ccxt.d.ts +8 -2
  12. package/js/ccxt.js +6 -2
  13. package/js/src/abstract/asretether.d.ts +8 -0
  14. package/js/src/abstract/asretether.js +11 -0
  15. package/js/src/abstract/bidarz.d.ts +9 -0
  16. package/js/src/abstract/bidarz.js +11 -0
  17. package/js/src/abstract/raastin.d.ts +1 -0
  18. package/js/src/asretether.d.ts +21 -0
  19. package/js/src/asretether.js +324 -0
  20. package/js/src/bidarz.d.ts +22 -0
  21. package/js/src/bidarz.js +336 -0
  22. package/js/src/bit24.js +4 -3
  23. package/js/src/raastin.d.ts +2 -0
  24. package/js/src/raastin.js +144 -16
  25. package/js/src/src/abantether.d.ts +21 -0
  26. package/js/src/src/abantether.js +353 -0
  27. package/js/src/src/abstract/abantether.d.ts +8 -0
  28. package/js/src/src/abstract/abantether.js +11 -0
  29. package/js/src/src/abstract/afratether.d.ts +9 -0
  30. package/js/src/src/abstract/afratether.js +11 -0
  31. package/js/src/src/abstract/alpaca.d.ts +77 -0
  32. package/js/src/src/abstract/alpaca.js +11 -0
  33. package/js/src/src/abstract/apex.d.ts +34 -0
  34. package/js/src/src/abstract/apex.js +11 -0
  35. package/js/src/src/abstract/arzinja.d.ts +8 -0
  36. package/js/src/src/abstract/arzinja.js +11 -0
  37. package/js/src/src/abstract/arzplus.d.ts +11 -0
  38. package/js/src/src/abstract/arzplus.js +11 -0
  39. package/js/src/src/abstract/ascendex.d.ts +80 -0
  40. package/js/src/src/abstract/ascendex.js +11 -0
  41. package/js/src/src/abstract/asretether.d.ts +8 -0
  42. package/js/src/src/abstract/asretether.js +11 -0
  43. package/js/src/src/abstract/bidarz.d.ts +9 -0
  44. package/js/src/src/abstract/bidarz.js +11 -0
  45. package/js/src/src/abstract/bigone.d.ts +48 -0
  46. package/js/src/src/abstract/bigone.js +11 -0
  47. package/js/src/src/abstract/binance.d.ts +773 -0
  48. package/js/src/src/abstract/binance.js +11 -0
  49. package/js/src/src/abstract/bingx.d.ts +165 -0
  50. package/js/src/src/abstract/bingx.js +11 -0
  51. package/js/src/src/abstract/bit24.d.ts +9 -0
  52. package/js/src/src/abstract/bit24.js +11 -0
  53. package/js/src/src/abstract/bit2c.d.ts +30 -0
  54. package/js/src/src/abstract/bit2c.js +11 -0
  55. package/js/src/src/abstract/bitbank.d.ts +35 -0
  56. package/js/src/src/abstract/bitbank.js +11 -0
  57. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  58. package/js/src/src/abstract/bitbarg.js +11 -0
  59. package/js/src/src/abstract/bitbns.d.ts +43 -0
  60. package/js/src/src/abstract/bitbns.js +11 -0
  61. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  62. package/js/src/src/abstract/bitfinex.js +11 -0
  63. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  64. package/js/src/src/abstract/bitflyer.js +11 -0
  65. package/js/src/src/abstract/bitget.d.ts +578 -0
  66. package/js/src/src/abstract/bitget.js +11 -0
  67. package/js/src/src/abstract/bithumb.d.ts +35 -0
  68. package/js/src/src/abstract/bithumb.js +11 -0
  69. package/js/src/src/abstract/bitimen.d.ts +10 -0
  70. package/js/src/src/abstract/bitimen.js +11 -0
  71. package/js/src/src/abstract/bitir.d.ts +10 -0
  72. package/js/src/src/abstract/bitir.js +11 -0
  73. package/js/src/src/abstract/bitmart.d.ts +120 -0
  74. package/js/src/src/abstract/bitmart.js +11 -0
  75. package/js/src/src/abstract/bitmex.d.ts +100 -0
  76. package/js/src/src/abstract/bitmex.js +11 -0
  77. package/js/src/src/abstract/bitopro.d.ts +33 -0
  78. package/js/src/src/abstract/bitopro.js +11 -0
  79. package/js/src/src/abstract/bitpin.d.ts +11 -0
  80. package/js/src/src/abstract/bitpin.js +11 -0
  81. package/js/src/src/abstract/bitrue.d.ts +75 -0
  82. package/js/src/src/abstract/bitrue.js +11 -0
  83. package/js/src/src/abstract/bitso.d.ts +46 -0
  84. package/js/src/src/abstract/bitso.js +11 -0
  85. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  86. package/js/src/src/abstract/bitstamp.js +11 -0
  87. package/js/src/src/abstract/bitteam.d.ts +32 -0
  88. package/js/src/src/abstract/bitteam.js +11 -0
  89. package/js/src/src/abstract/bittrade.d.ts +117 -0
  90. package/js/src/src/abstract/bittrade.js +11 -0
  91. package/js/src/src/abstract/bitunix.d.ts +9 -0
  92. package/js/src/src/abstract/bitunix.js +11 -0
  93. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  94. package/js/src/src/abstract/bitvavo.js +11 -0
  95. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  96. package/js/src/src/abstract/blockchaincom.js +11 -0
  97. package/js/src/src/abstract/blofin.d.ts +70 -0
  98. package/js/src/src/abstract/blofin.js +11 -0
  99. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  100. package/js/src/src/abstract/btcalpha.js +11 -0
  101. package/js/src/src/abstract/btcbox.d.ts +18 -0
  102. package/js/src/src/abstract/btcbox.js +11 -0
  103. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  104. package/js/src/src/abstract/btcmarkets.js +11 -0
  105. package/js/src/src/abstract/btcturk.d.ts +23 -0
  106. package/js/src/src/abstract/btcturk.js +11 -0
  107. package/js/src/src/abstract/bybit.d.ts +316 -0
  108. package/js/src/src/abstract/bybit.js +11 -0
  109. package/js/src/src/abstract/bydfi.d.ts +11 -0
  110. package/js/src/src/abstract/bydfi.js +11 -0
  111. package/js/src/src/abstract/cafearz.d.ts +8 -0
  112. package/js/src/src/abstract/cafearz.js +11 -0
  113. package/js/src/src/abstract/cex.d.ts +35 -0
  114. package/js/src/src/abstract/cex.js +11 -0
  115. package/js/src/src/abstract/coinbase.d.ts +97 -0
  116. package/js/src/src/abstract/coinbase.js +11 -0
  117. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  118. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  119. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  120. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  121. package/js/src/src/abstract/coincatch.d.ts +97 -0
  122. package/js/src/src/abstract/coincatch.js +11 -0
  123. package/js/src/src/abstract/coincheck.d.ts +36 -0
  124. package/js/src/src/abstract/coincheck.js +11 -0
  125. package/js/src/src/abstract/coinex.d.ts +240 -0
  126. package/js/src/src/abstract/coinex.js +11 -0
  127. package/js/src/src/abstract/coinmate.d.ts +65 -0
  128. package/js/src/src/abstract/coinmate.js +11 -0
  129. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  130. package/js/src/src/abstract/coinmetro.js +11 -0
  131. package/js/src/src/abstract/coinone.d.ts +70 -0
  132. package/js/src/src/abstract/coinone.js +11 -0
  133. package/js/src/src/abstract/coinsph.d.ts +57 -0
  134. package/js/src/src/abstract/coinsph.js +11 -0
  135. package/js/src/src/abstract/coinspot.d.ts +31 -0
  136. package/js/src/src/abstract/coinspot.js +11 -0
  137. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  138. package/js/src/src/abstract/cryptocom.js +11 -0
  139. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  140. package/js/src/src/abstract/cryptomus.js +11 -0
  141. package/js/src/src/abstract/defx.d.ts +72 -0
  142. package/js/src/src/abstract/defx.js +11 -0
  143. package/js/src/src/abstract/delta.d.ts +53 -0
  144. package/js/src/src/abstract/delta.js +11 -0
  145. package/js/src/src/abstract/deribit.d.ts +129 -0
  146. package/js/src/src/abstract/deribit.js +11 -0
  147. package/js/src/src/abstract/derive.d.ts +120 -0
  148. package/js/src/src/abstract/derive.js +11 -0
  149. package/js/src/src/abstract/digifinex.d.ts +95 -0
  150. package/js/src/src/abstract/digifinex.js +11 -0
  151. package/js/src/src/abstract/ellipx.d.ts +28 -0
  152. package/js/src/src/abstract/ellipx.js +11 -0
  153. package/js/src/src/abstract/eterex.d.ts +8 -0
  154. package/js/src/src/abstract/eterex.js +11 -0
  155. package/js/src/src/abstract/excoino.d.ts +10 -0
  156. package/js/src/src/abstract/excoino.js +11 -0
  157. package/js/src/src/abstract/exir.d.ts +11 -0
  158. package/js/src/src/abstract/exir.js +11 -0
  159. package/js/src/src/abstract/exmo.d.ts +58 -0
  160. package/js/src/src/abstract/exmo.js +11 -0
  161. package/js/src/src/abstract/exnovin.d.ts +9 -0
  162. package/js/src/src/abstract/exnovin.js +11 -0
  163. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  164. package/js/src/src/abstract/farhadexchange.js +11 -0
  165. package/js/src/src/abstract/foxbit.d.ts +29 -0
  166. package/js/src/src/abstract/foxbit.js +11 -0
  167. package/js/src/src/abstract/gate.d.ts +287 -0
  168. package/js/src/src/abstract/gate.js +11 -0
  169. package/js/src/src/abstract/gemini.d.ts +62 -0
  170. package/js/src/src/abstract/gemini.js +11 -0
  171. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  172. package/js/src/src/abstract/hamtapay.js +11 -0
  173. package/js/src/src/abstract/hashkey.d.ts +70 -0
  174. package/js/src/src/abstract/hashkey.js +11 -0
  175. package/js/src/src/abstract/hibachi.d.ts +29 -0
  176. package/js/src/src/abstract/hibachi.js +11 -0
  177. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  178. package/js/src/src/abstract/hitbtc.js +11 -0
  179. package/js/src/src/abstract/hitobit.d.ts +11 -0
  180. package/js/src/src/abstract/hitobit.js +11 -0
  181. package/js/src/src/abstract/hollaex.d.ts +36 -0
  182. package/js/src/src/abstract/hollaex.js +11 -0
  183. package/js/src/src/abstract/htx.d.ts +551 -0
  184. package/js/src/src/abstract/htx.js +11 -0
  185. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  186. package/js/src/src/abstract/hyperliquid.js +11 -0
  187. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  188. package/js/src/src/abstract/independentreserve.js +11 -0
  189. package/js/src/src/abstract/indodax.d.ts +29 -0
  190. package/js/src/src/abstract/indodax.js +11 -0
  191. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  192. package/js/src/src/abstract/iranexchange.js +11 -0
  193. package/js/src/src/abstract/jibitex.d.ts +10 -0
  194. package/js/src/src/abstract/jibitex.js +11 -0
  195. package/js/src/src/abstract/kcex.d.ts +10 -0
  196. package/js/src/src/abstract/kcex.js +11 -0
  197. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  198. package/js/src/src/abstract/kifpoolme.js +11 -0
  199. package/js/src/src/abstract/kraken.d.ts +61 -0
  200. package/js/src/src/abstract/kraken.js +11 -0
  201. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  202. package/js/src/src/abstract/krakenfutures.js +11 -0
  203. package/js/src/src/abstract/kucoin.d.ts +227 -0
  204. package/js/src/src/abstract/kucoin.js +11 -0
  205. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  206. package/js/src/src/abstract/kucoinfutures.js +11 -0
  207. package/js/src/src/abstract/latoken.d.ts +59 -0
  208. package/js/src/src/abstract/latoken.js +11 -0
  209. package/js/src/src/abstract/lbank.d.ts +65 -0
  210. package/js/src/src/abstract/lbank.js +11 -0
  211. package/js/src/src/abstract/luno.d.ts +41 -0
  212. package/js/src/src/abstract/luno.js +11 -0
  213. package/js/src/src/abstract/mazdax.d.ts +11 -0
  214. package/js/src/src/abstract/mazdax.js +11 -0
  215. package/js/src/src/abstract/mercado.d.ts +28 -0
  216. package/js/src/src/abstract/mercado.js +11 -0
  217. package/js/src/src/abstract/mexc.d.ts +183 -0
  218. package/js/src/src/abstract/mexc.js +11 -0
  219. package/js/src/src/abstract/modetrade.d.ts +122 -0
  220. package/js/src/src/abstract/modetrade.js +11 -0
  221. package/js/src/src/abstract/ndax.d.ts +100 -0
  222. package/js/src/src/abstract/ndax.js +11 -0
  223. package/js/src/src/abstract/nobitex.d.ts +10 -0
  224. package/js/src/src/abstract/nobitex.js +11 -0
  225. package/js/src/src/abstract/novadax.d.ts +32 -0
  226. package/js/src/src/abstract/novadax.js +11 -0
  227. package/js/src/src/abstract/oceanex.d.ts +30 -0
  228. package/js/src/src/abstract/oceanex.js +11 -0
  229. package/js/src/src/abstract/okcoin.d.ts +77 -0
  230. package/js/src/src/abstract/okcoin.js +11 -0
  231. package/js/src/src/abstract/okexchange.d.ts +11 -0
  232. package/js/src/src/abstract/okexchange.js +11 -0
  233. package/js/src/src/abstract/okx.d.ts +352 -0
  234. package/js/src/src/abstract/okx.js +11 -0
  235. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  236. package/js/src/src/abstract/ompfinex.js +11 -0
  237. package/js/src/src/abstract/onetrading.d.ts +26 -0
  238. package/js/src/src/abstract/onetrading.js +11 -0
  239. package/js/src/src/abstract/oxfun.d.ts +37 -0
  240. package/js/src/src/abstract/oxfun.js +11 -0
  241. package/js/src/src/abstract/p2b.d.ts +25 -0
  242. package/js/src/src/abstract/p2b.js +11 -0
  243. package/js/src/src/abstract/paradex.d.ts +66 -0
  244. package/js/src/src/abstract/paradex.js +11 -0
  245. package/js/src/src/abstract/paymium.d.ts +31 -0
  246. package/js/src/src/abstract/paymium.js +11 -0
  247. package/js/src/src/abstract/phemex.d.ts +120 -0
  248. package/js/src/src/abstract/phemex.js +11 -0
  249. package/js/src/src/abstract/pingi.d.ts +9 -0
  250. package/js/src/src/abstract/pingi.js +11 -0
  251. package/js/src/src/abstract/poloniex.d.ts +108 -0
  252. package/js/src/src/abstract/poloniex.js +11 -0
  253. package/js/src/src/abstract/pooleno.d.ts +8 -0
  254. package/js/src/src/abstract/pooleno.js +11 -0
  255. package/js/src/src/abstract/probit.d.ts +26 -0
  256. package/js/src/src/abstract/probit.js +11 -0
  257. package/js/src/src/abstract/raastin.d.ts +11 -0
  258. package/js/src/src/abstract/raastin.js +11 -0
  259. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  260. package/js/src/src/abstract/ramzinex.js +11 -0
  261. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  262. package/js/src/src/abstract/sarmayex.js +11 -0
  263. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  264. package/js/src/src/abstract/sarrafex.js +11 -0
  265. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  266. package/js/src/src/abstract/tabdeal.js +11 -0
  267. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  268. package/js/src/src/abstract/tehran_exchange.js +11 -0
  269. package/js/src/src/abstract/tetherland.d.ts +8 -0
  270. package/js/src/src/abstract/tetherland.js +11 -0
  271. package/js/src/src/abstract/timex.d.ts +65 -0
  272. package/js/src/src/abstract/timex.js +11 -0
  273. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  274. package/js/src/src/abstract/tokocrypto.js +11 -0
  275. package/js/src/src/abstract/toobit.d.ts +10 -0
  276. package/js/src/src/abstract/toobit.js +11 -0
  277. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  278. package/js/src/src/abstract/tradeogre.js +11 -0
  279. package/js/src/src/abstract/twox.d.ts +8 -0
  280. package/js/src/src/abstract/twox.js +11 -0
  281. package/js/src/src/abstract/ubitex.d.ts +10 -0
  282. package/js/src/src/abstract/ubitex.js +11 -0
  283. package/js/src/src/abstract/upbit.d.ts +58 -0
  284. package/js/src/src/abstract/upbit.js +11 -0
  285. package/js/src/src/abstract/vertex.d.ts +22 -0
  286. package/js/src/src/abstract/vertex.js +11 -0
  287. package/js/src/src/abstract/wallex.d.ts +11 -0
  288. package/js/src/src/abstract/wallex.js +11 -0
  289. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  290. package/js/src/src/abstract/wavesexchange.js +11 -0
  291. package/js/src/src/abstract/whitebit.d.ts +117 -0
  292. package/js/src/src/abstract/whitebit.js +11 -0
  293. package/js/src/src/abstract/woo.d.ts +144 -0
  294. package/js/src/src/abstract/woo.js +11 -0
  295. package/js/src/src/abstract/woofipro.d.ts +122 -0
  296. package/js/src/src/abstract/woofipro.js +11 -0
  297. package/js/src/src/abstract/xt.d.ts +160 -0
  298. package/js/src/src/abstract/xt.js +11 -0
  299. package/js/src/src/abstract/yobit.d.ts +19 -0
  300. package/js/src/src/abstract/yobit.js +11 -0
  301. package/js/src/src/abstract/zaif.d.ts +41 -0
  302. package/js/src/src/abstract/zaif.js +11 -0
  303. package/js/src/src/abstract/zonda.d.ts +56 -0
  304. package/js/src/src/abstract/zonda.js +11 -0
  305. package/js/src/src/afratether.d.ts +21 -0
  306. package/js/src/src/afratether.js +356 -0
  307. package/js/src/src/alpaca.d.ts +332 -0
  308. package/js/src/src/alpaca.js +1908 -0
  309. package/js/src/src/apex.d.ts +333 -0
  310. package/js/src/src/apex.js +1942 -0
  311. package/js/src/src/arzinja.d.ts +21 -0
  312. package/js/src/src/arzinja.js +298 -0
  313. package/js/src/src/arzplus.d.ts +26 -0
  314. package/js/src/src/arzplus.js +581 -0
  315. package/js/src/src/ascendex.d.ts +424 -0
  316. package/js/src/src/ascendex.js +3699 -0
  317. package/js/src/src/asretether.d.ts +21 -0
  318. package/js/src/src/asretether.js +324 -0
  319. package/js/src/src/base/Exchange.d.ts +926 -0
  320. package/js/src/src/base/Exchange.js +7399 -0
  321. package/js/src/src/base/Precise.d.ts +42 -0
  322. package/js/src/src/base/Precise.js +275 -0
  323. package/js/src/src/base/errors.d.ts +168 -0
  324. package/js/src/src/base/errors.js +255 -0
  325. package/js/src/src/base/functions/crypto.d.ts +16 -0
  326. package/js/src/src/base/functions/crypto.js +131 -0
  327. package/js/src/src/base/functions/encode.d.ts +4 -0
  328. package/js/src/src/base/functions/encode.js +32 -0
  329. package/js/src/src/base/functions/generic.d.ts +29 -0
  330. package/js/src/src/base/functions/generic.js +203 -0
  331. package/js/src/src/base/functions/misc.d.ts +9 -0
  332. package/js/src/src/base/functions/misc.js +101 -0
  333. package/js/src/src/base/functions/number.d.ts +27 -0
  334. package/js/src/src/base/functions/number.js +313 -0
  335. package/js/src/src/base/functions/platform.d.ts +7 -0
  336. package/js/src/src/base/functions/platform.js +27 -0
  337. package/js/src/src/base/functions/rsa.d.ts +5 -0
  338. package/js/src/src/base/functions/rsa.js +49 -0
  339. package/js/src/src/base/functions/string.d.ts +7 -0
  340. package/js/src/src/base/functions/string.js +44 -0
  341. package/js/src/src/base/functions/throttle.d.ts +6 -0
  342. package/js/src/src/base/functions/throttle.js +67 -0
  343. package/js/src/src/base/functions/time.d.ts +21 -0
  344. package/js/src/src/base/functions/time.js +171 -0
  345. package/js/src/src/base/functions/totp.d.ts +3 -0
  346. package/js/src/src/base/functions/totp.js +25 -0
  347. package/js/src/src/base/functions/type.d.ts +37 -0
  348. package/js/src/src/base/functions/type.js +179 -0
  349. package/js/src/src/base/functions.d.ts +10 -0
  350. package/js/src/src/base/functions.js +18 -0
  351. package/js/src/src/base/types.d.ts +586 -0
  352. package/js/src/src/base/types.js +7 -0
  353. package/js/src/src/base/ws/Cache.d.ts +27 -0
  354. package/js/src/src/base/ws/Cache.js +260 -0
  355. package/js/src/src/base/ws/Client.d.ts +53 -0
  356. package/js/src/src/base/ws/Client.js +307 -0
  357. package/js/src/src/base/ws/Future.d.ts +8 -0
  358. package/js/src/src/base/ws/Future.js +35 -0
  359. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  360. package/js/src/src/base/ws/OrderBook.js +130 -0
  361. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  362. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  363. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  364. package/js/src/src/base/ws/WsClient.js +69 -0
  365. package/js/src/src/bequant.d.ts +4 -0
  366. package/js/src/src/bequant.js +35 -0
  367. package/js/src/src/bidarz.d.ts +16 -0
  368. package/js/src/src/bidarz.js +327 -0
  369. package/js/src/src/bigone.d.ts +296 -0
  370. package/js/src/src/bigone.js +2340 -0
  371. package/js/src/src/binance.d.ts +1667 -0
  372. package/js/src/src/binance.js +14400 -0
  373. package/js/src/src/binancecoinm.d.ts +6 -0
  374. package/js/src/src/binancecoinm.js +51 -0
  375. package/js/src/src/binanceus.d.ts +4 -0
  376. package/js/src/src/binanceus.js +225 -0
  377. package/js/src/src/binanceusdm.d.ts +6 -0
  378. package/js/src/src/binanceusdm.js +63 -0
  379. package/js/src/src/bingx.d.ts +778 -0
  380. package/js/src/src/bingx.js +6705 -0
  381. package/js/src/src/bit24.d.ts +24 -0
  382. package/js/src/src/bit24.js +520 -0
  383. package/js/src/src/bit2c.d.ts +146 -0
  384. package/js/src/src/bit2c.js +1029 -0
  385. package/js/src/src/bitbank.d.ts +181 -0
  386. package/js/src/src/bitbank.js +1146 -0
  387. package/js/src/src/bitbarg.d.ts +21 -0
  388. package/js/src/src/bitbarg.js +312 -0
  389. package/js/src/src/bitbns.d.ts +184 -0
  390. package/js/src/src/bitbns.js +1288 -0
  391. package/js/src/src/bitfinex.d.ts +516 -0
  392. package/js/src/src/bitfinex.js +3951 -0
  393. package/js/src/src/bitflyer.d.ts +229 -0
  394. package/js/src/src/bitflyer.js +1209 -0
  395. package/js/src/src/bitget.d.ts +1109 -0
  396. package/js/src/src/bitget.js +11033 -0
  397. package/js/src/src/bithumb.d.ts +165 -0
  398. package/js/src/src/bithumb.js +1257 -0
  399. package/js/src/src/bitimen.d.ts +23 -0
  400. package/js/src/src/bitimen.js +424 -0
  401. package/js/src/src/bitir.d.ts +23 -0
  402. package/js/src/src/bitir.js +521 -0
  403. package/js/src/src/bitmart.d.ts +736 -0
  404. package/js/src/src/bitmart.js +5639 -0
  405. package/js/src/src/bitmex.d.ts +395 -0
  406. package/js/src/src/bitmex.js +3088 -0
  407. package/js/src/src/bitopro.d.ts +295 -0
  408. package/js/src/src/bitopro.js +1892 -0
  409. package/js/src/src/bitpin.d.ts +23 -0
  410. package/js/src/src/bitpin.js +487 -0
  411. package/js/src/src/bitrue.d.ts +384 -0
  412. package/js/src/src/bitrue.js +3382 -0
  413. package/js/src/src/bitso.d.ts +270 -0
  414. package/js/src/src/bitso.js +1881 -0
  415. package/js/src/src/bitstamp.d.ts +355 -0
  416. package/js/src/src/bitstamp.js +2445 -0
  417. package/js/src/src/bitteam.d.ts +229 -0
  418. package/js/src/src/bitteam.js +2420 -0
  419. package/js/src/src/bittrade.d.ts +298 -0
  420. package/js/src/src/bittrade.js +2050 -0
  421. package/js/src/src/bitunix.d.ts +21 -0
  422. package/js/src/src/bitunix.js +326 -0
  423. package/js/src/src/bitvavo.d.ts +311 -0
  424. package/js/src/src/bitvavo.js +2204 -0
  425. package/js/src/src/blockchaincom.d.ts +256 -0
  426. package/js/src/src/blockchaincom.js +1259 -0
  427. package/js/src/src/blofin.d.ts +439 -0
  428. package/js/src/src/blofin.js +2576 -0
  429. package/js/src/src/btcalpha.d.ts +209 -0
  430. package/js/src/src/btcalpha.js +1056 -0
  431. package/js/src/src/btcbox.d.ts +144 -0
  432. package/js/src/src/btcbox.js +834 -0
  433. package/js/src/src/btcmarkets.d.ts +253 -0
  434. package/js/src/src/btcmarkets.js +1418 -0
  435. package/js/src/src/btcturk.d.ts +161 -0
  436. package/js/src/src/btcturk.js +1058 -0
  437. package/js/src/src/bybit.d.ts +1097 -0
  438. package/js/src/src/bybit.js +9382 -0
  439. package/js/src/src/bydfi.d.ts +23 -0
  440. package/js/src/src/bydfi.js +434 -0
  441. package/js/src/src/cafearz.d.ts +21 -0
  442. package/js/src/src/cafearz.js +346 -0
  443. package/js/src/src/cex.d.ts +286 -0
  444. package/js/src/src/cex.js +1799 -0
  445. package/js/src/src/coinbase.d.ts +623 -0
  446. package/js/src/src/coinbase.js +5220 -0
  447. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  448. package/js/src/src/coinbaseadvanced.js +18 -0
  449. package/js/src/src/coinbaseexchange.d.ts +334 -0
  450. package/js/src/src/coinbaseexchange.js +2127 -0
  451. package/js/src/src/coinbaseinternational.d.ts +443 -0
  452. package/js/src/src/coinbaseinternational.js +2336 -0
  453. package/js/src/src/coincatch.d.ts +786 -0
  454. package/js/src/src/coincatch.js +5492 -0
  455. package/js/src/src/coincheck.d.ts +147 -0
  456. package/js/src/src/coincheck.js +962 -0
  457. package/js/src/src/coinex.d.ts +719 -0
  458. package/js/src/src/coinex.js +6166 -0
  459. package/js/src/src/coinmate.d.ts +202 -0
  460. package/js/src/src/coinmate.js +1215 -0
  461. package/js/src/src/coinmetro.d.ts +244 -0
  462. package/js/src/src/coinmetro.js +2024 -0
  463. package/js/src/src/coinone.d.ts +158 -0
  464. package/js/src/src/coinone.js +1278 -0
  465. package/js/src/src/coinsph.d.ts +310 -0
  466. package/js/src/src/coinsph.js +2203 -0
  467. package/js/src/src/coinspot.d.ts +108 -0
  468. package/js/src/src/coinspot.js +653 -0
  469. package/js/src/src/cryptocom.d.ts +463 -0
  470. package/js/src/src/cryptocom.js +3549 -0
  471. package/js/src/src/cryptomus.d.ts +158 -0
  472. package/js/src/src/cryptomus.js +1169 -0
  473. package/js/src/src/defx.d.ts +348 -0
  474. package/js/src/src/defx.js +2139 -0
  475. package/js/src/src/delta.d.ts +407 -0
  476. package/js/src/src/delta.js +3654 -0
  477. package/js/src/src/deribit.d.ts +516 -0
  478. package/js/src/src/deribit.js +3790 -0
  479. package/js/src/src/derive.d.ts +324 -0
  480. package/js/src/src/derive.js +2655 -0
  481. package/js/src/src/digifinex.d.ts +544 -0
  482. package/js/src/src/digifinex.js +4453 -0
  483. package/js/src/src/ellipx.d.ts +237 -0
  484. package/js/src/src/ellipx.js +2071 -0
  485. package/js/src/src/eterex.d.ts +21 -0
  486. package/js/src/src/eterex.js +299 -0
  487. package/js/src/src/excoino.d.ts +23 -0
  488. package/js/src/src/excoino.js +426 -0
  489. package/js/src/src/exir.d.ts +23 -0
  490. package/js/src/src/exir.js +403 -0
  491. package/js/src/src/exmo.d.ts +426 -0
  492. package/js/src/src/exmo.js +2825 -0
  493. package/js/src/src/exnovin.d.ts +22 -0
  494. package/js/src/src/exnovin.js +378 -0
  495. package/js/src/src/farhadexchange.d.ts +21 -0
  496. package/js/src/src/farhadexchange.js +280 -0
  497. package/js/src/src/fmfwio.d.ts +4 -0
  498. package/js/src/src/fmfwio.js +35 -0
  499. package/js/src/src/foxbit.d.ts +352 -0
  500. package/js/src/src/foxbit.js +2016 -0
  501. package/js/src/src/gate.d.ts +1071 -0
  502. package/js/src/src/gate.js +8282 -0
  503. package/js/src/src/gateio.d.ts +4 -0
  504. package/js/src/src/gateio.js +17 -0
  505. package/js/src/src/gemini.d.ts +257 -0
  506. package/js/src/src/gemini.js +2006 -0
  507. package/js/src/src/hamtapay.d.ts +21 -0
  508. package/js/src/src/hamtapay.js +303 -0
  509. package/js/src/src/hashkey.d.ts +628 -0
  510. package/js/src/src/hashkey.js +4363 -0
  511. package/js/src/src/hibachi.d.ts +346 -0
  512. package/js/src/src/hibachi.js +2137 -0
  513. package/js/src/src/hitbtc.d.ts +558 -0
  514. package/js/src/src/hitbtc.js +3847 -0
  515. package/js/src/src/hitobit.d.ts +23 -0
  516. package/js/src/src/hitobit.js +412 -0
  517. package/js/src/src/hollaex.d.ts +305 -0
  518. package/js/src/src/hollaex.js +2046 -0
  519. package/js/src/src/htx.d.ts +961 -0
  520. package/js/src/src/htx.js +9668 -0
  521. package/js/src/src/huobi.d.ts +4 -0
  522. package/js/src/src/huobi.js +17 -0
  523. package/js/src/src/hyperliquid.d.ts +651 -0
  524. package/js/src/src/hyperliquid.js +3937 -0
  525. package/js/src/src/independentreserve.d.ts +169 -0
  526. package/js/src/src/independentreserve.js +1115 -0
  527. package/js/src/src/indodax.d.ts +217 -0
  528. package/js/src/src/indodax.js +1454 -0
  529. package/js/src/src/iranexchange.d.ts +21 -0
  530. package/js/src/src/iranexchange.js +399 -0
  531. package/js/src/src/jibitex.d.ts +23 -0
  532. package/js/src/src/jibitex.js +416 -0
  533. package/js/src/src/kcex.d.ts +21 -0
  534. package/js/src/src/kcex.js +335 -0
  535. package/js/src/src/kifpoolme.d.ts +23 -0
  536. package/js/src/src/kifpoolme.js +410 -0
  537. package/js/src/src/kraken.d.ts +484 -0
  538. package/js/src/src/kraken.js +3518 -0
  539. package/js/src/src/krakenfutures.d.ts +362 -0
  540. package/js/src/src/krakenfutures.js +2885 -0
  541. package/js/src/src/kucoin.d.ts +759 -0
  542. package/js/src/src/kucoin.js +5153 -0
  543. package/js/src/src/kucoinfutures.d.ts +521 -0
  544. package/js/src/src/kucoinfutures.js +3381 -0
  545. package/js/src/src/latoken.d.ts +274 -0
  546. package/js/src/src/latoken.js +1824 -0
  547. package/js/src/src/lbank.d.ts +350 -0
  548. package/js/src/src/lbank.js +3146 -0
  549. package/js/src/src/luno.d.ts +252 -0
  550. package/js/src/src/luno.js +1479 -0
  551. package/js/src/src/mazdax.d.ts +23 -0
  552. package/js/src/src/mazdax.js +534 -0
  553. package/js/src/src/mercado.d.ts +160 -0
  554. package/js/src/src/mercado.js +1011 -0
  555. package/js/src/src/mexc.d.ts +768 -0
  556. package/js/src/src/mexc.js +6102 -0
  557. package/js/src/src/modetrade.d.ts +496 -0
  558. package/js/src/src/modetrade.js +2936 -0
  559. package/js/src/src/myokx.d.ts +4 -0
  560. package/js/src/src/myokx.js +54 -0
  561. package/js/src/src/ndax.d.ts +285 -0
  562. package/js/src/src/ndax.js +2598 -0
  563. package/js/src/src/nobitex.d.ts +23 -0
  564. package/js/src/src/nobitex.js +454 -0
  565. package/js/src/src/novadax.d.ts +279 -0
  566. package/js/src/src/novadax.js +1676 -0
  567. package/js/src/src/oceanex.d.ts +231 -0
  568. package/js/src/src/oceanex.js +1123 -0
  569. package/js/src/src/okcoin.d.ts +346 -0
  570. package/js/src/src/okcoin.js +3211 -0
  571. package/js/src/src/okexchange.d.ts +23 -0
  572. package/js/src/src/okexchange.js +373 -0
  573. package/js/src/src/okx.d.ts +1125 -0
  574. package/js/src/src/okx.js +9009 -0
  575. package/js/src/src/okxus.d.ts +4 -0
  576. package/js/src/src/okxus.js +54 -0
  577. package/js/src/src/ompfinex.d.ts +23 -0
  578. package/js/src/src/ompfinex.js +510 -0
  579. package/js/src/src/onetrading.d.ts +228 -0
  580. package/js/src/src/onetrading.js +1769 -0
  581. package/js/src/src/oxfun.d.ts +442 -0
  582. package/js/src/src/oxfun.js +2920 -0
  583. package/js/src/src/p2b.d.ts +189 -0
  584. package/js/src/src/p2b.js +1344 -0
  585. package/js/src/src/paradex.d.ts +389 -0
  586. package/js/src/src/paradex.js +2607 -0
  587. package/js/src/src/paymium.d.ts +133 -0
  588. package/js/src/src/paymium.js +644 -0
  589. package/js/src/src/phemex.d.ts +497 -0
  590. package/js/src/src/phemex.js +5333 -0
  591. package/js/src/src/pingi.d.ts +22 -0
  592. package/js/src/src/pingi.js +446 -0
  593. package/js/src/src/poloniex.d.ts +441 -0
  594. package/js/src/src/poloniex.js +3681 -0
  595. package/js/src/src/pooleno.d.ts +21 -0
  596. package/js/src/src/pooleno.js +347 -0
  597. package/js/src/src/pro/alpaca.d.ts +95 -0
  598. package/js/src/src/pro/alpaca.js +724 -0
  599. package/js/src/src/pro/apex.d.ts +160 -0
  600. package/js/src/src/pro/apex.js +1044 -0
  601. package/js/src/src/pro/ascendex.d.ts +99 -0
  602. package/js/src/src/pro/ascendex.js +1012 -0
  603. package/js/src/src/pro/bequant.d.ts +4 -0
  604. package/js/src/src/pro/bequant.js +42 -0
  605. package/js/src/src/pro/binance.d.ts +796 -0
  606. package/js/src/src/pro/binance.js +4373 -0
  607. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  608. package/js/src/src/pro/binancecoinm.js +32 -0
  609. package/js/src/src/pro/binanceus.d.ts +4 -0
  610. package/js/src/src/pro/binanceus.js +52 -0
  611. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  612. package/js/src/src/pro/binanceusdm.js +37 -0
  613. package/js/src/src/pro/bingx.d.ts +151 -0
  614. package/js/src/src/pro/bingx.js +1568 -0
  615. package/js/src/src/pro/bitfinex.d.ts +99 -0
  616. package/js/src/src/pro/bitfinex.js +1165 -0
  617. package/js/src/src/pro/bitget.d.ts +257 -0
  618. package/js/src/src/pro/bitget.js +2327 -0
  619. package/js/src/src/pro/bithumb.d.ts +59 -0
  620. package/js/src/src/pro/bithumb.js +395 -0
  621. package/js/src/src/pro/bitmart.d.ts +168 -0
  622. package/js/src/src/pro/bitmart.js +1686 -0
  623. package/js/src/src/pro/bitmex.d.ts +170 -0
  624. package/js/src/src/pro/bitmex.js +1760 -0
  625. package/js/src/src/pro/bitopro.d.ts +69 -0
  626. package/js/src/src/pro/bitopro.js +477 -0
  627. package/js/src/src/pro/bitrue.d.ts +40 -0
  628. package/js/src/src/pro/bitrue.js +461 -0
  629. package/js/src/src/pro/bitstamp.d.ts +53 -0
  630. package/js/src/src/pro/bitstamp.js +587 -0
  631. package/js/src/src/pro/bittrade.d.ts +66 -0
  632. package/js/src/src/pro/bittrade.js +606 -0
  633. package/js/src/src/pro/bitvavo.d.ts +321 -0
  634. package/js/src/src/pro/bitvavo.js +1451 -0
  635. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  636. package/js/src/src/pro/blockchaincom.js +777 -0
  637. package/js/src/src/pro/blofin.d.ts +174 -0
  638. package/js/src/src/pro/blofin.js +743 -0
  639. package/js/src/src/pro/bybit.d.ts +397 -0
  640. package/js/src/src/pro/bybit.js +2519 -0
  641. package/js/src/src/pro/cex.d.ts +220 -0
  642. package/js/src/src/pro/cex.js +1535 -0
  643. package/js/src/src/pro/coinbase.d.ts +119 -0
  644. package/js/src/src/pro/coinbase.js +736 -0
  645. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  646. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  647. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  648. package/js/src/src/pro/coinbaseexchange.js +969 -0
  649. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  650. package/js/src/src/pro/coinbaseinternational.js +804 -0
  651. package/js/src/src/pro/coincatch.d.ts +207 -0
  652. package/js/src/src/pro/coincatch.js +1562 -0
  653. package/js/src/src/pro/coincheck.d.ts +33 -0
  654. package/js/src/src/pro/coincheck.js +210 -0
  655. package/js/src/src/pro/coinex.d.ts +147 -0
  656. package/js/src/src/pro/coinex.js +1426 -0
  657. package/js/src/src/pro/coinone.d.ts +51 -0
  658. package/js/src/src/pro/coinone.js +413 -0
  659. package/js/src/src/pro/cryptocom.d.ts +300 -0
  660. package/js/src/src/pro/cryptocom.js +1414 -0
  661. package/js/src/src/pro/defx.d.ts +236 -0
  662. package/js/src/src/pro/defx.js +865 -0
  663. package/js/src/src/pro/deribit.d.ts +163 -0
  664. package/js/src/src/pro/deribit.js +1066 -0
  665. package/js/src/src/pro/derive.d.ts +100 -0
  666. package/js/src/src/pro/derive.js +753 -0
  667. package/js/src/src/pro/exmo.d.ts +97 -0
  668. package/js/src/src/pro/exmo.js +903 -0
  669. package/js/src/src/pro/gate.d.ts +360 -0
  670. package/js/src/src/pro/gate.js +2119 -0
  671. package/js/src/src/pro/gateio.d.ts +4 -0
  672. package/js/src/src/pro/gateio.js +17 -0
  673. package/js/src/src/pro/gemini.d.ts +106 -0
  674. package/js/src/src/pro/gemini.js +932 -0
  675. package/js/src/src/pro/hashkey.d.ts +121 -0
  676. package/js/src/src/pro/hashkey.js +843 -0
  677. package/js/src/src/pro/hitbtc.d.ts +235 -0
  678. package/js/src/src/pro/hitbtc.js +1400 -0
  679. package/js/src/src/pro/hollaex.d.ts +77 -0
  680. package/js/src/src/pro/hollaex.js +604 -0
  681. package/js/src/src/pro/htx.d.ts +141 -0
  682. package/js/src/src/pro/htx.js +2415 -0
  683. package/js/src/src/pro/huobi.d.ts +4 -0
  684. package/js/src/src/pro/huobi.js +17 -0
  685. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  686. package/js/src/src/pro/hyperliquid.js +1126 -0
  687. package/js/src/src/pro/independentreserve.d.ts +36 -0
  688. package/js/src/src/pro/independentreserve.js +287 -0
  689. package/js/src/src/pro/kraken.d.ts +233 -0
  690. package/js/src/src/pro/kraken.js +1785 -0
  691. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  692. package/js/src/src/pro/krakenfutures.js +1592 -0
  693. package/js/src/src/pro/kucoin.d.ts +221 -0
  694. package/js/src/src/pro/kucoin.js +1430 -0
  695. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  696. package/js/src/src/pro/kucoinfutures.js +1295 -0
  697. package/js/src/src/pro/lbank.d.ts +134 -0
  698. package/js/src/src/pro/lbank.js +950 -0
  699. package/js/src/src/pro/luno.d.ts +44 -0
  700. package/js/src/src/pro/luno.js +322 -0
  701. package/js/src/src/pro/mexc.d.ts +210 -0
  702. package/js/src/src/pro/mexc.js +2009 -0
  703. package/js/src/src/pro/modetrade.d.ts +155 -0
  704. package/js/src/src/pro/modetrade.js +1335 -0
  705. package/js/src/src/pro/myokx.d.ts +4 -0
  706. package/js/src/src/pro/myokx.js +39 -0
  707. package/js/src/src/pro/ndax.d.ts +60 -0
  708. package/js/src/src/pro/ndax.js +545 -0
  709. package/js/src/src/pro/okcoin.d.ts +91 -0
  710. package/js/src/src/pro/okcoin.js +763 -0
  711. package/js/src/src/pro/okx.d.ts +408 -0
  712. package/js/src/src/pro/okx.js +2479 -0
  713. package/js/src/src/pro/okxus.d.ts +4 -0
  714. package/js/src/src/pro/okxus.js +39 -0
  715. package/js/src/src/pro/onetrading.d.ts +107 -0
  716. package/js/src/src/pro/onetrading.js +1343 -0
  717. package/js/src/src/pro/oxfun.d.ts +234 -0
  718. package/js/src/src/pro/oxfun.js +1112 -0
  719. package/js/src/src/pro/p2b.d.ts +104 -0
  720. package/js/src/src/pro/p2b.js +506 -0
  721. package/js/src/src/pro/paradex.d.ts +54 -0
  722. package/js/src/src/pro/paradex.js +370 -0
  723. package/js/src/src/pro/phemex.d.ts +129 -0
  724. package/js/src/src/pro/phemex.js +1569 -0
  725. package/js/src/src/pro/poloniex.d.ts +214 -0
  726. package/js/src/src/pro/poloniex.js +1318 -0
  727. package/js/src/src/pro/probit.d.ts +91 -0
  728. package/js/src/src/pro/probit.js +593 -0
  729. package/js/src/src/pro/tradeogre.d.ts +49 -0
  730. package/js/src/src/pro/tradeogre.js +284 -0
  731. package/js/src/src/pro/upbit.d.ts +124 -0
  732. package/js/src/src/pro/upbit.js +689 -0
  733. package/js/src/src/pro/vertex.d.ts +104 -0
  734. package/js/src/src/pro/vertex.js +999 -0
  735. package/js/src/src/pro/whitebit.d.ts +123 -0
  736. package/js/src/src/pro/whitebit.js +971 -0
  737. package/js/src/src/pro/woo.d.ts +161 -0
  738. package/js/src/src/pro/woo.js +1351 -0
  739. package/js/src/src/pro/woofipro.d.ts +155 -0
  740. package/js/src/src/pro/woofipro.js +1335 -0
  741. package/js/src/src/pro/xt.d.ts +165 -0
  742. package/js/src/src/pro/xt.js +1230 -0
  743. package/js/src/src/probit.d.ts +283 -0
  744. package/js/src/src/probit.js +1935 -0
  745. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  746. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  747. package/js/src/src/raastin.d.ts +24 -0
  748. package/js/src/src/raastin.js +494 -0
  749. package/js/src/src/ramzinex.d.ts +23 -0
  750. package/js/src/src/ramzinex.js +510 -0
  751. package/js/src/src/sarmayex.d.ts +21 -0
  752. package/js/src/src/sarmayex.js +376 -0
  753. package/js/src/src/sarrafex.d.ts +23 -0
  754. package/js/src/src/sarrafex.js +501 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  756. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  758. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  760. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  762. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  764. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  766. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  768. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  770. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  772. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  774. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  776. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  778. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  780. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  782. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  784. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  786. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  788. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  790. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  792. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  794. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  796. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  797. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  798. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  799. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  800. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  801. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  802. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  806. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  808. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  810. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  812. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  814. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  816. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  818. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  820. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  826. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  828. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  830. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  832. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  833. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  834. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  838. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  860. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  862. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  878. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  880. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  882. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  884. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  890. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  892. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  894. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  896. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  904. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  906. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  910. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  912. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  916. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  917. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  918. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  919. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  920. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  921. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  922. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  923. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  924. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  925. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  926. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  927. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  928. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  930. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  931. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  932. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  933. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  934. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  936. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  938. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  940. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  950. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  952. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  954. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  960. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  994. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  996. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1010. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1012. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1014. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1016. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1017. package/js/src/src/tabdeal.d.ts +23 -0
  1018. package/js/src/src/tabdeal.js +387 -0
  1019. package/js/src/src/tehran_exchange.d.ts +21 -0
  1020. package/js/src/src/tehran_exchange.js +333 -0
  1021. package/js/src/src/tetherland.d.ts +21 -0
  1022. package/js/src/src/tetherland.js +367 -0
  1023. package/js/src/src/timex.d.ts +247 -0
  1024. package/js/src/src/timex.js +1792 -0
  1025. package/js/src/src/tokocrypto.d.ts +261 -0
  1026. package/js/src/src/tokocrypto.js +2641 -0
  1027. package/js/src/src/toobit.d.ts +22 -0
  1028. package/js/src/src/toobit.js +445 -0
  1029. package/js/src/src/tradeogre.d.ts +149 -0
  1030. package/js/src/src/tradeogre.js +878 -0
  1031. package/js/src/src/twox.d.ts +21 -0
  1032. package/js/src/src/twox.js +371 -0
  1033. package/js/src/src/ubitex.d.ts +23 -0
  1034. package/js/src/src/ubitex.js +433 -0
  1035. package/js/src/src/upbit.d.ts +377 -0
  1036. package/js/src/src/upbit.js +2340 -0
  1037. package/js/src/src/vertex.d.ts +346 -0
  1038. package/js/src/src/vertex.js +3146 -0
  1039. package/js/src/src/wallex.d.ts +23 -0
  1040. package/js/src/src/wallex.js +467 -0
  1041. package/js/src/src/wavesexchange.d.ts +244 -0
  1042. package/js/src/src/wavesexchange.js +2747 -0
  1043. package/js/src/src/whitebit.d.ts +571 -0
  1044. package/js/src/src/whitebit.js +3437 -0
  1045. package/js/src/src/woo.d.ts +727 -0
  1046. package/js/src/src/woo.js +4183 -0
  1047. package/js/src/src/woofipro.d.ts +497 -0
  1048. package/js/src/src/woofipro.js +2941 -0
  1049. package/js/src/src/xt.d.ts +568 -0
  1050. package/js/src/src/xt.js +5184 -0
  1051. package/js/src/src/yobit.d.ts +197 -0
  1052. package/js/src/src/yobit.js +1453 -0
  1053. package/js/src/src/zaif.d.ts +136 -0
  1054. package/js/src/src/zaif.js +821 -0
  1055. package/js/src/src/zonda.d.ts +214 -0
  1056. package/js/src/src/zonda.js +1984 -0
  1057. package/js/test.d.ts +1 -1
  1058. package/js/test.js +33 -33
  1059. package/package.json +1 -1
@@ -0,0 +1,2941 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import Exchange from './abstract/woofipro.js';
9
+ import { AuthenticationError, RateLimitExceeded, BadRequest, ExchangeError, InvalidOrder, InsufficientFunds, ArgumentsRequired, NetworkError, NotSupported } from './base/errors.js';
10
+ import { TICK_SIZE } from './base/functions/number.js';
11
+ import { Precise } from './base/Precise.js';
12
+ import { ecdsa, eddsa } from './base/functions/crypto.js';
13
+ import { ed25519 } from './static_dependencies/noble-curves/ed25519.js';
14
+ import { keccak_256 as keccak } from './static_dependencies/noble-hashes/sha3.js';
15
+ import { secp256k1 } from './static_dependencies/noble-curves/secp256k1.js';
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * @class woofipro
19
+ * @augments Exchange
20
+ */
21
+ export default class woofipro extends Exchange {
22
+ describe() {
23
+ return this.deepExtend(super.describe(), {
24
+ 'id': 'woofipro',
25
+ 'name': 'WOOFI PRO',
26
+ 'countries': ['KY'],
27
+ 'rateLimit': 100,
28
+ 'version': 'v1',
29
+ 'certified': true,
30
+ 'pro': true,
31
+ 'dex': true,
32
+ 'hostname': 'dex.woo.org',
33
+ 'has': {
34
+ 'CORS': undefined,
35
+ 'spot': false,
36
+ 'margin': false,
37
+ 'swap': true,
38
+ 'future': false,
39
+ 'option': false,
40
+ 'addMargin': false,
41
+ 'cancelAllOrders': true,
42
+ 'cancelOrder': true,
43
+ 'cancelOrders': true,
44
+ 'cancelWithdraw': false,
45
+ 'closeAllPositions': false,
46
+ 'closePosition': false,
47
+ 'createConvertTrade': false,
48
+ 'createDepositAddress': false,
49
+ 'createMarketBuyOrderWithCost': false,
50
+ 'createMarketOrder': false,
51
+ 'createMarketOrderWithCost': false,
52
+ 'createMarketSellOrderWithCost': false,
53
+ 'createOrder': true,
54
+ 'createOrderWithTakeProfitAndStopLoss': true,
55
+ 'createReduceOnlyOrder': true,
56
+ 'createStopLimitOrder': false,
57
+ 'createStopLossOrder': true,
58
+ 'createStopMarketOrder': false,
59
+ 'createStopOrder': false,
60
+ 'createTakeProfitOrder': true,
61
+ 'createTrailingAmountOrder': false,
62
+ 'createTrailingPercentOrder': false,
63
+ 'createTriggerOrder': true,
64
+ 'fetchAccounts': false,
65
+ 'fetchBalance': true,
66
+ 'fetchCanceledOrders': false,
67
+ 'fetchClosedOrder': false,
68
+ 'fetchClosedOrders': true,
69
+ 'fetchConvertCurrencies': false,
70
+ 'fetchConvertQuote': false,
71
+ 'fetchCurrencies': true,
72
+ 'fetchDepositAddress': false,
73
+ 'fetchDeposits': true,
74
+ 'fetchDepositsWithdrawals': true,
75
+ 'fetchFundingHistory': true,
76
+ 'fetchFundingInterval': true,
77
+ 'fetchFundingIntervals': false,
78
+ 'fetchFundingRate': true,
79
+ 'fetchFundingRateHistory': true,
80
+ 'fetchFundingRates': true,
81
+ 'fetchIndexOHLCV': false,
82
+ 'fetchLedger': true,
83
+ 'fetchLeverage': true,
84
+ 'fetchMarginAdjustmentHistory': false,
85
+ 'fetchMarginMode': false,
86
+ 'fetchMarkets': true,
87
+ 'fetchMarkOHLCV': false,
88
+ 'fetchMyTrades': true,
89
+ 'fetchOHLCV': true,
90
+ 'fetchOpenInterestHistory': false,
91
+ 'fetchOpenOrder': false,
92
+ 'fetchOpenOrders': true,
93
+ 'fetchOrder': true,
94
+ 'fetchOrderBook': true,
95
+ 'fetchOrders': true,
96
+ 'fetchOrderTrades': true,
97
+ 'fetchPosition': true,
98
+ 'fetchPositionMode': false,
99
+ 'fetchPositions': true,
100
+ 'fetchPremiumIndexOHLCV': false,
101
+ 'fetchStatus': true,
102
+ 'fetchTicker': false,
103
+ 'fetchTickers': false,
104
+ 'fetchTime': true,
105
+ 'fetchTrades': true,
106
+ 'fetchTradingFee': false,
107
+ 'fetchTradingFees': true,
108
+ 'fetchTransactions': 'emulated',
109
+ 'fetchTransfers': false,
110
+ 'fetchWithdrawals': true,
111
+ 'reduceMargin': false,
112
+ 'setLeverage': true,
113
+ 'setMargin': false,
114
+ 'setPositionMode': false,
115
+ 'transfer': false,
116
+ 'withdraw': true, // exchange have that endpoint disabled atm, but was once implemented in ccxt per old docs: https://kronosresearch.github.io/wootrade-documents/#token-withdraw
117
+ },
118
+ 'timeframes': {
119
+ '1m': '1m',
120
+ '5m': '5m',
121
+ '15m': '15m',
122
+ '30m': '30m',
123
+ '1h': '1h',
124
+ '4h': '4h',
125
+ '12h': '12h',
126
+ '1d': '1d',
127
+ '1w': '1w',
128
+ '1M': '1mon',
129
+ '1y': '1y',
130
+ },
131
+ 'urls': {
132
+ 'logo': 'https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1',
133
+ 'api': {
134
+ 'public': 'https://api-evm.orderly.org',
135
+ 'private': 'https://api-evm.orderly.org',
136
+ },
137
+ 'test': {
138
+ 'public': 'https://testnet-api-evm.orderly.org',
139
+ 'private': 'https://testnet-api-evm.orderly.org',
140
+ },
141
+ 'www': 'https://dex.woo.org',
142
+ 'doc': [
143
+ 'https://orderly.network/docs/build-on-evm/building-on-evm',
144
+ ],
145
+ 'fees': [
146
+ 'https://dex.woo.org/en/orderly',
147
+ ],
148
+ 'referral': {
149
+ 'url': 'https://dex.woo.org/en/trade?ref=CCXT',
150
+ 'discount': 0.05,
151
+ },
152
+ },
153
+ 'api': {
154
+ 'v1': {
155
+ 'public': {
156
+ 'get': {
157
+ 'public/volume/stats': 1,
158
+ 'public/broker/name': 1,
159
+ 'public/chain_info/{broker_id}': 1,
160
+ 'public/system_info': 1,
161
+ 'public/vault_balance': 1,
162
+ 'public/insurancefund': 1,
163
+ 'public/chain_info': 1,
164
+ 'faucet/usdc': 1,
165
+ 'public/account': 1,
166
+ 'get_account': 1,
167
+ 'registration_nonce': 1,
168
+ 'get_orderly_key': 1,
169
+ 'public/liquidation': 1,
170
+ 'public/liquidated_positions': 1,
171
+ 'public/config': 1,
172
+ 'public/campaign/ranking': 10,
173
+ 'public/campaign/stats': 10,
174
+ 'public/campaign/user': 10,
175
+ 'public/campaign/stats/details': 10,
176
+ 'public/campaigns': 10,
177
+ 'public/points/leaderboard': 1,
178
+ 'client/points': 1,
179
+ 'public/points/epoch': 1,
180
+ 'public/points/epoch_dates': 1,
181
+ 'public/referral/check_ref_code': 1,
182
+ 'public/referral/verify_ref_code': 1,
183
+ 'referral/admin_info': 1,
184
+ 'referral/info': 1,
185
+ 'referral/referee_info': 1,
186
+ 'referral/referee_rebate_summary': 1,
187
+ 'referral/referee_history': 1,
188
+ 'referral/referral_history': 1,
189
+ 'referral/rebate_summary': 1,
190
+ 'client/distribution_history': 1,
191
+ 'tv/config': 1,
192
+ 'tv/history': 1,
193
+ 'tv/symbol_info': 1,
194
+ 'public/funding_rate_history': 1,
195
+ 'public/funding_rate/{symbol}': 0.33,
196
+ 'public/funding_rates': 1,
197
+ 'public/info': 1,
198
+ 'public/info/{symbol}': 1,
199
+ 'public/market_trades': 1,
200
+ 'public/token': 1,
201
+ 'public/futures': 1,
202
+ 'public/futures/{symbol}': 1,
203
+ },
204
+ 'post': {
205
+ 'register_account': 1,
206
+ },
207
+ },
208
+ 'private': {
209
+ 'get': {
210
+ 'client/key_info': 6,
211
+ 'client/orderly_key_ip_restriction': 6,
212
+ 'order/{oid}': 1,
213
+ 'client/order/{client_order_id}': 1,
214
+ 'algo/order/{oid}': 1,
215
+ 'algo/client/order/{client_order_id}': 1,
216
+ 'orders': 1,
217
+ 'algo/orders': 1,
218
+ 'trade/{tid}': 1,
219
+ 'trades': 1,
220
+ 'order/{oid}/trades': 1,
221
+ 'client/liquidator_liquidations': 1,
222
+ 'liquidations': 1,
223
+ 'asset/history': 60,
224
+ 'client/holding': 1,
225
+ 'withdraw_nonce': 1,
226
+ 'settle_nonce': 1,
227
+ 'pnl_settlement/history': 1,
228
+ 'volume/user/daily': 60,
229
+ 'volume/user/stats': 60,
230
+ 'client/statistics': 60,
231
+ 'client/info': 60,
232
+ 'client/statistics/daily': 60,
233
+ 'positions': 3.33,
234
+ 'position/{symbol}': 3.33,
235
+ 'funding_fee/history': 30,
236
+ 'notification/inbox/notifications': 60,
237
+ 'notification/inbox/unread': 60,
238
+ 'volume/broker/daily': 60,
239
+ 'broker/fee_rate/default': 10,
240
+ 'broker/user_info': 10,
241
+ 'orderbook/{symbol}': 1,
242
+ 'kline': 1,
243
+ },
244
+ 'post': {
245
+ 'orderly_key': 1,
246
+ 'client/set_orderly_key_ip_restriction': 6,
247
+ 'client/reset_orderly_key_ip_restriction': 6,
248
+ 'order': 1,
249
+ 'batch-order': 10,
250
+ 'algo/order': 1,
251
+ 'liquidation': 1,
252
+ 'claim_insurance_fund': 1,
253
+ 'withdraw_request': 1,
254
+ 'settle_pnl': 1,
255
+ 'notification/inbox/mark_read': 60,
256
+ 'notification/inbox/mark_read_all': 60,
257
+ 'client/leverage': 120,
258
+ 'client/maintenance_config': 60,
259
+ 'delegate_signer': 10,
260
+ 'delegate_orderly_key': 10,
261
+ 'delegate_settle_pnl': 10,
262
+ 'delegate_withdraw_request': 10,
263
+ 'broker/fee_rate/set': 10,
264
+ 'broker/fee_rate/set_default': 10,
265
+ 'broker/fee_rate/default': 10,
266
+ 'referral/create': 10,
267
+ 'referral/update': 10,
268
+ 'referral/bind': 10,
269
+ 'referral/edit_split': 10,
270
+ },
271
+ 'put': {
272
+ 'order': 1,
273
+ 'algo/order': 1,
274
+ },
275
+ 'delete': {
276
+ 'order': 1,
277
+ 'algo/order': 1,
278
+ 'client/order': 1,
279
+ 'algo/client/order': 1,
280
+ 'algo/orders': 1,
281
+ 'orders': 1,
282
+ 'batch-order': 1,
283
+ 'client/batch-order': 1,
284
+ },
285
+ },
286
+ },
287
+ },
288
+ 'requiredCredentials': {
289
+ 'apiKey': true,
290
+ 'secret': true,
291
+ 'accountId': true,
292
+ 'privateKey': false,
293
+ },
294
+ 'fees': {
295
+ 'trading': {
296
+ 'tierBased': true,
297
+ 'percentage': true,
298
+ 'maker': this.parseNumber('0.0002'),
299
+ 'taker': this.parseNumber('0.0005'),
300
+ },
301
+ },
302
+ 'options': {
303
+ 'sandboxMode': false,
304
+ 'brokerId': 'CCXT',
305
+ 'verifyingContractAddress': '0x6F7a338F2aA472838dEFD3283eB360d4Dff5D203',
306
+ },
307
+ 'features': {
308
+ 'default': {
309
+ 'sandbox': true,
310
+ 'createOrder': {
311
+ 'marginMode': false,
312
+ 'triggerPrice': true,
313
+ 'triggerPriceType': undefined,
314
+ 'triggerDirection': false,
315
+ 'stopLossPrice': false,
316
+ 'takeProfitPrice': false,
317
+ 'attachedStopLossTakeProfit': undefined,
318
+ 'timeInForce': {
319
+ 'IOC': true,
320
+ 'FOK': true,
321
+ 'PO': true,
322
+ 'GTD': false,
323
+ },
324
+ 'hedged': false,
325
+ 'trailing': true,
326
+ 'leverage': true,
327
+ 'marketBuyByCost': false,
328
+ 'marketBuyRequiresPrice': false,
329
+ 'selfTradePrevention': false,
330
+ 'iceberg': true, // todo implement
331
+ },
332
+ 'createOrders': {
333
+ 'max': 10,
334
+ },
335
+ 'fetchMyTrades': {
336
+ 'marginMode': false,
337
+ 'limit': 500,
338
+ 'daysBack': undefined,
339
+ 'untilDays': 100000,
340
+ 'symbolRequired': false,
341
+ },
342
+ 'fetchOrder': {
343
+ 'marginMode': false,
344
+ 'trigger': true,
345
+ 'trailing': false,
346
+ 'symbolRequired': false,
347
+ },
348
+ 'fetchOpenOrders': {
349
+ 'marginMode': false,
350
+ 'limit': 500,
351
+ 'trigger': true,
352
+ 'trailing': false,
353
+ 'symbolRequired': false,
354
+ },
355
+ 'fetchOrders': undefined,
356
+ 'fetchClosedOrders': {
357
+ 'marginMode': false,
358
+ 'limit': 500,
359
+ 'daysBack': undefined,
360
+ 'daysBackCanceled': undefined,
361
+ 'untilDays': 100000,
362
+ 'trigger': true,
363
+ 'trailing': false,
364
+ 'symbolRequired': false,
365
+ },
366
+ 'fetchOHLCV': {
367
+ 'limit': 1000,
368
+ },
369
+ },
370
+ 'spot': {
371
+ 'extends': 'default',
372
+ },
373
+ 'forDerivatives': {
374
+ 'extends': 'default',
375
+ 'createOrder': {
376
+ // todo: implementation needs unification
377
+ 'triggerPriceType': undefined,
378
+ 'attachedStopLossTakeProfit': {
379
+ // todo: implementation needs unification
380
+ 'triggerPriceType': undefined,
381
+ 'price': false,
382
+ },
383
+ },
384
+ },
385
+ 'swap': {
386
+ 'linear': {
387
+ 'extends': 'forDerivatives',
388
+ },
389
+ 'inverse': undefined,
390
+ },
391
+ 'future': {
392
+ 'linear': undefined,
393
+ 'inverse': undefined,
394
+ },
395
+ },
396
+ 'commonCurrencies': {},
397
+ 'exceptions': {
398
+ 'exact': {
399
+ '-1000': ExchangeError,
400
+ '-1001': AuthenticationError,
401
+ '-1002': AuthenticationError,
402
+ '-1003': RateLimitExceeded,
403
+ '-1004': BadRequest,
404
+ '-1005': BadRequest,
405
+ '-1006': InvalidOrder,
406
+ '-1007': BadRequest,
407
+ '-1008': InvalidOrder,
408
+ '-1009': InsufficientFunds,
409
+ '-1011': NetworkError,
410
+ '-1012': BadRequest,
411
+ '-1101': InsufficientFunds,
412
+ '-1102': InvalidOrder,
413
+ '-1103': InvalidOrder,
414
+ '-1104': InvalidOrder,
415
+ '-1105': InvalidOrder,
416
+ '-1201': BadRequest,
417
+ '-1202': BadRequest,
418
+ '29': BadRequest,
419
+ '9': AuthenticationError,
420
+ '3': AuthenticationError,
421
+ '2': BadRequest,
422
+ '15': BadRequest, // {"success":false,"code":15,"message":"BrokerId is not exist"}
423
+ },
424
+ 'broad': {},
425
+ },
426
+ 'precisionMode': TICK_SIZE,
427
+ });
428
+ }
429
+ setSandboxMode(enable) {
430
+ super.setSandboxMode(enable);
431
+ this.options['sandboxMode'] = enable;
432
+ }
433
+ /**
434
+ * @method
435
+ * @name woofipro#fetchStatus
436
+ * @description the latest known information on the availability of the exchange API
437
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-system-maintenance-status
438
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
439
+ * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}
440
+ */
441
+ async fetchStatus(params = {}) {
442
+ const response = await this.v1PublicGetPublicSystemInfo(params);
443
+ //
444
+ // {
445
+ // "success": true,
446
+ // "data": {
447
+ // "status": 0,
448
+ // "msg": "System is functioning properly."
449
+ // },
450
+ // "timestamp": "1709274106602"
451
+ // }
452
+ //
453
+ const data = this.safeDict(response, 'data', {});
454
+ let status = this.safeString(data, 'status');
455
+ if (status === undefined) {
456
+ status = 'error';
457
+ }
458
+ else if (status === '0') {
459
+ status = 'ok';
460
+ }
461
+ else {
462
+ status = 'maintenance';
463
+ }
464
+ return {
465
+ 'status': status,
466
+ 'updated': undefined,
467
+ 'eta': undefined,
468
+ 'url': undefined,
469
+ 'info': response,
470
+ };
471
+ }
472
+ /**
473
+ * @method
474
+ * @name woofipro#fetchTime
475
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
476
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-system-maintenance-status
477
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
478
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
479
+ */
480
+ async fetchTime(params = {}) {
481
+ const response = await this.v1PublicGetPublicSystemInfo(params);
482
+ //
483
+ // {
484
+ // "success": true,
485
+ // "data": {
486
+ // "status": 0,
487
+ // "msg": "System is functioning properly."
488
+ // },
489
+ // "timestamp": "1709274106602"
490
+ // }
491
+ //
492
+ return this.safeInteger(response, 'timestamp');
493
+ }
494
+ parseMarket(market) {
495
+ //
496
+ // {
497
+ // "symbol": "PERP_BTC_USDC",
498
+ // "quote_min": 123,
499
+ // "quote_max": 100000,
500
+ // "quote_tick": 0.1,
501
+ // "base_min": 0.00001,
502
+ // "base_max": 20,
503
+ // "base_tick": 0.00001,
504
+ // "min_notional": 1,
505
+ // "price_range": 0.02,
506
+ // "price_scope": 0.4,
507
+ // "std_liquidation_fee": 0.03,
508
+ // "liquidator_fee": 0.015,
509
+ // "claim_insurance_fund_discount": 0.0075,
510
+ // "funding_period": 8,
511
+ // "cap_funding": 0.000375,
512
+ // "floor_funding": -0.000375,
513
+ // "interest_rate": 0.0001,
514
+ // "created_time": 1684140107326,
515
+ // "updated_time": 1685345968053,
516
+ // "base_mmr": 0.05,
517
+ // "base_imr": 0.1,
518
+ // "imr_factor": 0.0002512,
519
+ // "liquidation_tier": "1"
520
+ // }
521
+ //
522
+ const marketId = this.safeString(market, 'symbol');
523
+ const parts = marketId.split('_');
524
+ const marketType = 'swap';
525
+ const baseId = this.safeString(parts, 1);
526
+ const quoteId = this.safeString(parts, 2);
527
+ const base = this.safeCurrencyCode(baseId);
528
+ const quote = this.safeCurrencyCode(quoteId);
529
+ const settleId = this.safeString(parts, 2);
530
+ const settle = this.safeCurrencyCode(settleId);
531
+ const symbol = base + '/' + quote + ':' + settle;
532
+ return {
533
+ 'id': marketId,
534
+ 'symbol': symbol,
535
+ 'base': base,
536
+ 'quote': quote,
537
+ 'settle': settle,
538
+ 'baseId': baseId,
539
+ 'quoteId': quoteId,
540
+ 'settleId': settleId,
541
+ 'type': marketType,
542
+ 'spot': false,
543
+ 'margin': false,
544
+ 'swap': true,
545
+ 'future': false,
546
+ 'option': false,
547
+ 'active': undefined,
548
+ 'contract': true,
549
+ 'linear': true,
550
+ 'inverse': false,
551
+ 'contractSize': this.parseNumber('1'),
552
+ 'expiry': undefined,
553
+ 'expiryDatetime': undefined,
554
+ 'strike': undefined,
555
+ 'optionType': undefined,
556
+ 'precision': {
557
+ 'amount': this.safeNumber(market, 'base_tick'),
558
+ 'price': this.safeNumber(market, 'quote_tick'),
559
+ },
560
+ 'limits': {
561
+ 'leverage': {
562
+ 'min': undefined,
563
+ 'max': undefined,
564
+ },
565
+ 'amount': {
566
+ 'min': this.safeNumber(market, 'base_min'),
567
+ 'max': this.safeNumber(market, 'base_max'),
568
+ },
569
+ 'price': {
570
+ 'min': this.safeNumber(market, 'quote_min'),
571
+ 'max': this.safeNumber(market, 'quote_max'),
572
+ },
573
+ 'cost': {
574
+ 'min': this.safeNumber(market, 'min_notional'),
575
+ 'max': undefined,
576
+ },
577
+ },
578
+ 'created': this.safeInteger(market, 'created_time'),
579
+ 'info': market,
580
+ };
581
+ }
582
+ /**
583
+ * @method
584
+ * @name woofipro#fetchMarkets
585
+ * @description retrieves data on all markets for woofipro
586
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-available-symbols
587
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
588
+ * @returns {object[]} an array of objects representing market data
589
+ */
590
+ async fetchMarkets(params = {}) {
591
+ const response = await this.v1PublicGetPublicInfo(params);
592
+ //
593
+ // {
594
+ // "success": true,
595
+ // "timestamp": 1702989203989,
596
+ // "data": {
597
+ // "rows": [
598
+ // {
599
+ // "symbol": "PERP_BTC_USDC",
600
+ // "quote_min": 123,
601
+ // "quote_max": 100000,
602
+ // "quote_tick": 0.1,
603
+ // "base_min": 0.00001,
604
+ // "base_max": 20,
605
+ // "base_tick": 0.00001,
606
+ // "min_notional": 1,
607
+ // "price_range": 0.02,
608
+ // "price_scope": 0.4,
609
+ // "std_liquidation_fee": 0.03,
610
+ // "liquidator_fee": 0.015,
611
+ // "claim_insurance_fund_discount": 0.0075,
612
+ // "funding_period": 8,
613
+ // "cap_funding": 0.000375,
614
+ // "floor_funding": -0.000375,
615
+ // "interest_rate": 0.0001,
616
+ // "created_time": 1684140107326,
617
+ // "updated_time": 1685345968053,
618
+ // "base_mmr": 0.05,
619
+ // "base_imr": 0.1,
620
+ // "imr_factor": 0.0002512,
621
+ // "liquidation_tier": "1"
622
+ // }
623
+ // ]
624
+ // }
625
+ // }
626
+ //
627
+ const data = this.safeDict(response, 'data', {});
628
+ const rows = this.safeList(data, 'rows', []);
629
+ return this.parseMarkets(rows);
630
+ }
631
+ /**
632
+ * @method
633
+ * @name woofipro#fetchCurrencies
634
+ * @description fetches all available currencies on an exchange
635
+ * @see https://orderly.network/docs/build-on-omnichain/evm-api/restful-api/public/get-supported-collateral-info#get-supported-collateral-info
636
+ * @see https://orderly.network/docs/build-on-omnichain/evm-api/restful-api/public/get-supported-chains-per-builder#get-supported-chains-per-builder
637
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
638
+ * @returns {object} an associative dictionary of currencies
639
+ */
640
+ async fetchCurrencies(params = {}) {
641
+ const result = {};
642
+ const tokenPromise = this.v1PublicGetPublicToken(params);
643
+ //
644
+ // {
645
+ // "success": true,
646
+ // "timestamp": 1702989203989,
647
+ // "data": {
648
+ // "rows": [{
649
+ // "token": "USDC",
650
+ // "decimals": 6,
651
+ // "minimum_withdraw_amount": 0.000001,
652
+ // "token_hash": "0xd6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa",
653
+ // "chain_details": [{
654
+ // "chain_id": 43113,
655
+ // "contract_address": "0x5d64c9cfb0197775b4b3ad9be4d3c7976e0d8dc3",
656
+ // "cross_chain_withdrawal_fee": 123,
657
+ // "decimals": 6,
658
+ // "withdraw_fee": 2
659
+ // }]
660
+ // }
661
+ // ]
662
+ // }
663
+ // }
664
+ //
665
+ const chainPromise = this.v1PublicGetPublicChainInfo(params);
666
+ const [tokenResponse, chainResponse] = await Promise.all([tokenPromise, chainPromise]);
667
+ const tokenData = this.safeDict(tokenResponse, 'data', {});
668
+ const tokenRows = this.safeList(tokenData, 'rows', []);
669
+ const chainData = this.safeDict(chainResponse, 'data', {});
670
+ const chainRows = this.safeList(chainData, 'rows', []);
671
+ const indexedChains = this.indexBy(chainRows, 'chain_id');
672
+ for (let i = 0; i < tokenRows.length; i++) {
673
+ const token = tokenRows[i];
674
+ const currencyId = this.safeString(token, 'token');
675
+ const networks = this.safeList(token, 'chain_details');
676
+ const code = this.safeCurrencyCode(currencyId);
677
+ const resultingNetworks = {};
678
+ for (let j = 0; j < networks.length; j++) {
679
+ const networkEntry = networks[j];
680
+ const networkId = this.safeString(networkEntry, 'chain_id');
681
+ const networkRow = this.safeDict(indexedChains, networkId);
682
+ const networkName = this.safeString(networkRow, 'name');
683
+ const networkCode = this.networkIdToCode(networkName, code);
684
+ resultingNetworks[networkCode] = {
685
+ 'id': networkId,
686
+ 'network': networkCode,
687
+ 'limits': {
688
+ 'withdraw': {
689
+ 'min': undefined,
690
+ 'max': undefined,
691
+ },
692
+ 'deposit': {
693
+ 'min': undefined,
694
+ 'max': undefined,
695
+ },
696
+ },
697
+ 'active': undefined,
698
+ 'deposit': undefined,
699
+ 'withdraw': undefined,
700
+ 'fee': this.safeNumber(networkEntry, 'withdrawal_fee'),
701
+ 'precision': this.parseNumber(this.parsePrecision(this.safeString(networkEntry, 'decimals'))),
702
+ 'info': [networkEntry, networkRow],
703
+ };
704
+ }
705
+ result[code] = this.safeCurrencyStructure({
706
+ 'id': currencyId,
707
+ 'name': undefined,
708
+ 'code': code,
709
+ 'precision': undefined,
710
+ 'active': undefined,
711
+ 'fee': undefined,
712
+ 'networks': resultingNetworks,
713
+ 'deposit': undefined,
714
+ 'withdraw': undefined,
715
+ 'limits': {
716
+ 'deposit': {
717
+ 'min': undefined,
718
+ 'max': undefined,
719
+ },
720
+ 'withdraw': {
721
+ 'min': this.safeNumber(token, 'minimum_withdraw_amount'),
722
+ 'max': undefined,
723
+ },
724
+ },
725
+ 'info': token,
726
+ });
727
+ }
728
+ return result;
729
+ }
730
+ parseTokenAndFeeTemp(item, feeTokenKey, feeAmountKey) {
731
+ const feeCost = this.safeString(item, feeAmountKey);
732
+ let fee = undefined;
733
+ if (feeCost !== undefined) {
734
+ const feeCurrencyId = this.safeString(item, feeTokenKey);
735
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
736
+ fee = {
737
+ 'cost': feeCost,
738
+ 'currency': feeCurrencyCode,
739
+ };
740
+ }
741
+ return fee;
742
+ }
743
+ parseTrade(trade, market = undefined) {
744
+ //
745
+ // public/market_trades
746
+ //
747
+ // {
748
+ // "symbol": "SPOT_BTC_USDT",
749
+ // "side": "SELL",
750
+ // "executed_price": 46222.35,
751
+ // "executed_quantity": 0.0012,
752
+ // "executed_timestamp": "1683878609166"
753
+ // }
754
+ //
755
+ // fetchOrderTrades, fetchOrder
756
+ //
757
+ // {
758
+ // "id": "99119876",
759
+ // "symbol": "SPOT_WOO_USDT",
760
+ // "fee": "0.0024",
761
+ // "side": "BUY",
762
+ // "executed_timestamp": "1641481113084",
763
+ // "order_id": "87001234",
764
+ // "order_tag": "default", <-- this param only in "fetchOrderTrades"
765
+ // "executed_price": "1",
766
+ // "executed_quantity": "12",
767
+ // "fee_asset": "WOO",
768
+ // "is_maker": "1"
769
+ // }
770
+ //
771
+ const isFromFetchOrder = ('id' in trade);
772
+ const timestamp = this.safeInteger(trade, 'executed_timestamp');
773
+ const marketId = this.safeString(trade, 'symbol');
774
+ market = this.safeMarket(marketId, market);
775
+ const symbol = market['symbol'];
776
+ const price = this.safeString(trade, 'executed_price');
777
+ const amount = this.safeString(trade, 'executed_quantity');
778
+ const order_id = this.safeString(trade, 'order_id');
779
+ const fee = this.parseTokenAndFeeTemp(trade, 'fee_asset', 'fee');
780
+ const feeCost = this.safeString(fee, 'cost');
781
+ if (feeCost !== undefined) {
782
+ fee['cost'] = feeCost;
783
+ }
784
+ const cost = Precise.stringMul(price, amount);
785
+ const side = this.safeStringLower(trade, 'side');
786
+ const id = this.safeString(trade, 'id');
787
+ let takerOrMaker = undefined;
788
+ if (isFromFetchOrder) {
789
+ const isMaker = this.safeString(trade, 'is_maker') === '1';
790
+ takerOrMaker = isMaker ? 'maker' : 'taker';
791
+ }
792
+ return this.safeTrade({
793
+ 'id': id,
794
+ 'timestamp': timestamp,
795
+ 'datetime': this.iso8601(timestamp),
796
+ 'symbol': symbol,
797
+ 'side': side,
798
+ 'price': price,
799
+ 'amount': amount,
800
+ 'cost': cost,
801
+ 'order': order_id,
802
+ 'takerOrMaker': takerOrMaker,
803
+ 'type': undefined,
804
+ 'fee': fee,
805
+ 'info': trade,
806
+ }, market);
807
+ }
808
+ /**
809
+ * @method
810
+ * @name woofipro#fetchTrades
811
+ * @description get the list of most recent trades for a particular symbol
812
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-market-trades
813
+ * @param {string} symbol unified symbol of the market to fetch trades for
814
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
815
+ * @param {int} [limit] the maximum amount of trades to fetch
816
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
817
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
818
+ */
819
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
820
+ await this.loadMarkets();
821
+ const market = this.market(symbol);
822
+ const request = {
823
+ 'symbol': market['id'],
824
+ };
825
+ if (limit !== undefined) {
826
+ request['limit'] = limit;
827
+ }
828
+ const response = await this.v1PublicGetPublicMarketTrades(this.extend(request, params));
829
+ //
830
+ // {
831
+ // "success": true,
832
+ // "timestamp": 1702989203989,
833
+ // "data": {
834
+ // "rows": [{
835
+ // "symbol": "PERP_ETH_USDC",
836
+ // "side": "BUY",
837
+ // "executed_price": 2050,
838
+ // "executed_quantity": 1,
839
+ // "executed_timestamp": 1683878609166
840
+ // }]
841
+ // }
842
+ // }
843
+ //
844
+ const data = this.safeDict(response, 'data', {});
845
+ const rows = this.safeList(data, 'rows', []);
846
+ return this.parseTrades(rows, market, since, limit);
847
+ }
848
+ parseFundingRate(fundingRate, market = undefined) {
849
+ //
850
+ // {
851
+ // "symbol":"PERP_AAVE_USDT",
852
+ // "est_funding_rate":-0.00003447,
853
+ // "est_funding_rate_timestamp":1653633959001,
854
+ // "last_funding_rate":-0.00002094,
855
+ // "last_funding_rate_timestamp":1653631200000,
856
+ // "next_funding_time":1653634800000,
857
+ // "sum_unitary_funding": 521.367
858
+ // }
859
+ //
860
+ const symbol = this.safeString(fundingRate, 'symbol');
861
+ market = this.market(symbol);
862
+ const nextFundingTimestamp = this.safeInteger(fundingRate, 'next_funding_time');
863
+ const estFundingRateTimestamp = this.safeInteger(fundingRate, 'est_funding_rate_timestamp');
864
+ const lastFundingRateTimestamp = this.safeInteger(fundingRate, 'last_funding_rate_timestamp');
865
+ const fundingTimeString = this.safeString(fundingRate, 'last_funding_rate_timestamp');
866
+ const nextFundingTimeString = this.safeString(fundingRate, 'next_funding_time');
867
+ const millisecondsInterval = Precise.stringSub(nextFundingTimeString, fundingTimeString);
868
+ return {
869
+ 'info': fundingRate,
870
+ 'symbol': market['symbol'],
871
+ 'markPrice': undefined,
872
+ 'indexPrice': undefined,
873
+ 'interestRate': this.parseNumber('0'),
874
+ 'estimatedSettlePrice': undefined,
875
+ 'timestamp': estFundingRateTimestamp,
876
+ 'datetime': this.iso8601(estFundingRateTimestamp),
877
+ 'fundingRate': this.safeNumber(fundingRate, 'est_funding_rate'),
878
+ 'fundingTimestamp': nextFundingTimestamp,
879
+ 'fundingDatetime': this.iso8601(nextFundingTimestamp),
880
+ 'nextFundingRate': undefined,
881
+ 'nextFundingTimestamp': undefined,
882
+ 'nextFundingDatetime': undefined,
883
+ 'previousFundingRate': this.safeNumber(fundingRate, 'last_funding_rate'),
884
+ 'previousFundingTimestamp': lastFundingRateTimestamp,
885
+ 'previousFundingDatetime': this.iso8601(lastFundingRateTimestamp),
886
+ 'interval': this.parseFundingInterval(millisecondsInterval),
887
+ };
888
+ }
889
+ parseFundingInterval(interval) {
890
+ const intervals = {
891
+ '3600000': '1h',
892
+ '14400000': '4h',
893
+ '28800000': '8h',
894
+ '57600000': '16h',
895
+ '86400000': '24h',
896
+ };
897
+ return this.safeString(intervals, interval, interval);
898
+ }
899
+ /**
900
+ * @method
901
+ * @name woofipro#fetchFundingInterval
902
+ * @description fetch the current funding rate interval
903
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-predicted-funding-rate-for-one-market
904
+ * @param {string} symbol unified market symbol
905
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
906
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
907
+ */
908
+ async fetchFundingInterval(symbol, params = {}) {
909
+ return await this.fetchFundingRate(symbol, params);
910
+ }
911
+ /**
912
+ * @method
913
+ * @name woofipro#fetchFundingRate
914
+ * @description fetch the current funding rate
915
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-predicted-funding-rate-for-one-market
916
+ * @param {string} symbol unified market symbol
917
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
918
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
919
+ */
920
+ async fetchFundingRate(symbol, params = {}) {
921
+ await this.loadMarkets();
922
+ const market = this.market(symbol);
923
+ const request = {
924
+ 'symbol': market['id'],
925
+ };
926
+ const response = await this.v1PublicGetPublicFundingRateSymbol(this.extend(request, params));
927
+ //
928
+ // {
929
+ // "success": true,
930
+ // "timestamp": 1702989203989,
931
+ // "data": {
932
+ // "symbol": "PERP_ETH_USDC",
933
+ // "est_funding_rate": 123,
934
+ // "est_funding_rate_timestamp": 1683880020000,
935
+ // "last_funding_rate": 0.0001,
936
+ // "last_funding_rate_timestamp": 1683878400000,
937
+ // "next_funding_time": 1683907200000,
938
+ // "sum_unitary_funding": 521.367
939
+ // }
940
+ // }
941
+ //
942
+ const data = this.safeDict(response, 'data', {});
943
+ return this.parseFundingRate(data, market);
944
+ }
945
+ /**
946
+ * @method
947
+ * @name woofipro#fetchFundingRates
948
+ * @description fetch the current funding rate for multiple markets
949
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-predicted-funding-rates-for-all-markets
950
+ * @param {string[]} symbols unified market symbols
951
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
952
+ * @returns {object[]} an array of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
953
+ */
954
+ async fetchFundingRates(symbols = undefined, params = {}) {
955
+ await this.loadMarkets();
956
+ symbols = this.marketSymbols(symbols);
957
+ const response = await this.v1PublicGetPublicFundingRates(params);
958
+ //
959
+ // {
960
+ // "success": true,
961
+ // "timestamp": 1702989203989,
962
+ // "data": {
963
+ // "rows": [{
964
+ // "symbol": "PERP_ETH_USDC",
965
+ // "est_funding_rate": 123,
966
+ // "est_funding_rate_timestamp": 1683880020000,
967
+ // "last_funding_rate": 0.0001,
968
+ // "last_funding_rate_timestamp": 1683878400000,
969
+ // "next_funding_time": 1683907200000,
970
+ // "sum_unitary_funding": 521.367
971
+ // }]
972
+ // }
973
+ // }
974
+ //
975
+ const data = this.safeDict(response, 'data', {});
976
+ const rows = this.safeList(data, 'rows', []);
977
+ return this.parseFundingRates(rows, symbols);
978
+ }
979
+ /**
980
+ * @method
981
+ * @name woofipro#fetchFundingRateHistory
982
+ * @description fetches historical funding rate prices
983
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/public/get-funding-rate-history-for-one-market
984
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
985
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
986
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
987
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
988
+ * @param {int} [params.until] timestamp in ms of the latest funding rate
989
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
990
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
991
+ */
992
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
993
+ await this.loadMarkets();
994
+ let paginate = false;
995
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
996
+ if (paginate) {
997
+ return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, 'page', 25);
998
+ }
999
+ let request = {};
1000
+ if (symbol !== undefined) {
1001
+ const market = this.market(symbol);
1002
+ symbol = market['symbol'];
1003
+ request['symbol'] = market['id'];
1004
+ }
1005
+ if (since !== undefined) {
1006
+ request['start_t'] = since;
1007
+ }
1008
+ [request, params] = this.handleUntilOption('end_t', request, params, 0.001);
1009
+ const response = await this.v1PublicGetPublicFundingRateHistory(this.extend(request, params));
1010
+ //
1011
+ // {
1012
+ // "success": true,
1013
+ // "timestamp": 1702989203989,
1014
+ // "data": {
1015
+ // "rows": [{
1016
+ // "symbol": "PERP_ETH_USDC",
1017
+ // "funding_rate": 0.0001,
1018
+ // "funding_rate_timestamp": 1684224000000,
1019
+ // "next_funding_time": 1684252800000
1020
+ // }],
1021
+ // "meta": {
1022
+ // "total": 9,
1023
+ // "records_per_page": 25,
1024
+ // "current_page": 1
1025
+ // }
1026
+ // }
1027
+ // }
1028
+ //
1029
+ const data = this.safeDict(response, 'data', {});
1030
+ const result = this.safeList(data, 'rows', []);
1031
+ const rates = [];
1032
+ for (let i = 0; i < result.length; i++) {
1033
+ const entry = result[i];
1034
+ const marketId = this.safeString(entry, 'symbol');
1035
+ const timestamp = this.safeInteger(entry, 'funding_rate_timestamp');
1036
+ rates.push({
1037
+ 'info': entry,
1038
+ 'symbol': this.safeSymbol(marketId),
1039
+ 'fundingRate': this.safeNumber(entry, 'funding_rate'),
1040
+ 'timestamp': timestamp,
1041
+ 'datetime': this.iso8601(timestamp),
1042
+ });
1043
+ }
1044
+ const sorted = this.sortBy(rates, 'timestamp');
1045
+ return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
1046
+ }
1047
+ parseIncome(income, market = undefined) {
1048
+ //
1049
+ // {
1050
+ // "symbol": "PERP_ETH_USDC",
1051
+ // "funding_rate": 0.00046875,
1052
+ // "mark_price": 2100,
1053
+ // "funding_fee": 0.000016,
1054
+ // "payment_type": "Pay",
1055
+ // "status": "Accrued",
1056
+ // "created_time": 1682235722003,
1057
+ // "updated_time": 1682235722003
1058
+ // }
1059
+ //
1060
+ const marketId = this.safeString(income, 'symbol');
1061
+ const symbol = this.safeSymbol(marketId, market);
1062
+ let amount = this.safeString(income, 'funding_fee');
1063
+ const code = this.safeCurrencyCode('USDC');
1064
+ const timestamp = this.safeInteger(income, 'updated_time');
1065
+ const rate = this.safeNumber(income, 'funding_rate');
1066
+ const paymentType = this.safeString(income, 'payment_type');
1067
+ amount = (paymentType === 'Pay') ? Precise.stringNeg(amount) : amount;
1068
+ return {
1069
+ 'info': income,
1070
+ 'symbol': symbol,
1071
+ 'code': code,
1072
+ 'timestamp': timestamp,
1073
+ 'datetime': this.iso8601(timestamp),
1074
+ 'id': undefined,
1075
+ 'amount': this.parseNumber(amount),
1076
+ 'rate': rate,
1077
+ };
1078
+ }
1079
+ /**
1080
+ * @method
1081
+ * @name woofipro#fetchFundingHistory
1082
+ * @description fetch the history of funding payments paid and received on this account
1083
+ * @see https://orderly.network/docs/build-on-omnichain/evm-api/restful-api/private/get-funding-fee-history
1084
+ * @param {string} [symbol] unified market symbol
1085
+ * @param {int} [since] the earliest time in ms to fetch funding history for
1086
+ * @param {int} [limit] the maximum number of funding history structures to retrieve
1087
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1088
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1089
+ * @returns {object} a [funding history structure]{@link https://docs.ccxt.com/#/?id=funding-history-structure}
1090
+ */
1091
+ async fetchFundingHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1092
+ await this.loadMarkets();
1093
+ let paginate = false;
1094
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingHistory', 'paginate');
1095
+ if (paginate) {
1096
+ return await this.fetchPaginatedCallIncremental('fetchFundingHistory', symbol, since, limit, params, 'page', 500);
1097
+ }
1098
+ const request = {};
1099
+ let market = undefined;
1100
+ if (symbol !== undefined) {
1101
+ market = this.market(symbol);
1102
+ request['symbol'] = market['id'];
1103
+ }
1104
+ if (since !== undefined) {
1105
+ request['start_t'] = since;
1106
+ }
1107
+ const until = this.safeInteger(params, 'until'); // unified in milliseconds
1108
+ params = this.omit(params, ['until']);
1109
+ if (until !== undefined) {
1110
+ request['end_t'] = until;
1111
+ }
1112
+ if (limit !== undefined) {
1113
+ request['size'] = Math.min(limit, 500);
1114
+ }
1115
+ const response = await this.v1PrivateGetFundingFeeHistory(this.extend(request, params));
1116
+ //
1117
+ // {
1118
+ // "success": true,
1119
+ // "timestamp": 1702989203989,
1120
+ // "data": {
1121
+ // "meta": {
1122
+ // "total": 9,
1123
+ // "records_per_page": 25,
1124
+ // "current_page": 1
1125
+ // },
1126
+ // "rows": [{
1127
+ // "symbol": "PERP_ETH_USDC",
1128
+ // "funding_rate": 0.00046875,
1129
+ // "mark_price": 2100,
1130
+ // "funding_fee": 0.000016,
1131
+ // "payment_type": "Pay",
1132
+ // "status": "Accrued",
1133
+ // "created_time": 1682235722003,
1134
+ // "updated_time": 1682235722003
1135
+ // }]
1136
+ // }
1137
+ // }
1138
+ //
1139
+ const data = this.safeDict(response, 'data', {});
1140
+ const rows = this.safeList(data, 'rows', []);
1141
+ return this.parseIncomes(rows, market, since, limit);
1142
+ }
1143
+ /**
1144
+ * @method
1145
+ * @name woofipro#fetchTradingFees
1146
+ * @description fetch the trading fees for multiple markets
1147
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-account-information
1148
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1149
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
1150
+ */
1151
+ async fetchTradingFees(params = {}) {
1152
+ await this.loadMarkets();
1153
+ const response = await this.v1PrivateGetClientInfo(params);
1154
+ //
1155
+ // {
1156
+ // "success": true,
1157
+ // "timestamp": 1702989203989,
1158
+ // "data": {
1159
+ // "account_id": "<string>",
1160
+ // "email": "test@test.com",
1161
+ // "account_mode": "FUTURES",
1162
+ // "max_leverage": 20,
1163
+ // "taker_fee_rate": 123,
1164
+ // "maker_fee_rate": 123,
1165
+ // "futures_taker_fee_rate": 123,
1166
+ // "futures_maker_fee_rate": 123,
1167
+ // "maintenance_cancel_orders": true,
1168
+ // "imr_factor": {
1169
+ // "PERP_BTC_USDC": 123,
1170
+ // "PERP_ETH_USDC": 123,
1171
+ // "PERP_NEAR_USDC": 123
1172
+ // },
1173
+ // "max_notional": {
1174
+ // "PERP_BTC_USDC": 123,
1175
+ // "PERP_ETH_USDC": 123,
1176
+ // "PERP_NEAR_USDC": 123
1177
+ // }
1178
+ // }
1179
+ // }
1180
+ //
1181
+ const data = this.safeDict(response, 'data', {});
1182
+ const maker = this.safeString(data, 'futures_maker_fee_rate');
1183
+ const taker = this.safeString(data, 'futures_taker_fee_rate');
1184
+ const result = {};
1185
+ for (let i = 0; i < this.symbols.length; i++) {
1186
+ const symbol = this.symbols[i];
1187
+ result[symbol] = {
1188
+ 'info': response,
1189
+ 'symbol': symbol,
1190
+ 'maker': this.parseNumber(Precise.stringDiv(maker, '10000')),
1191
+ 'taker': this.parseNumber(Precise.stringDiv(taker, '10000')),
1192
+ 'percentage': true,
1193
+ 'tierBased': true,
1194
+ };
1195
+ }
1196
+ return result;
1197
+ }
1198
+ /**
1199
+ * @method
1200
+ * @name woofipro#fetchOrderBook
1201
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1202
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/orderbook-snapshot
1203
+ * @param {string} symbol unified symbol of the market to fetch the order book for
1204
+ * @param {int} [limit] the maximum amount of order book entries to return
1205
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1206
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1207
+ */
1208
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1209
+ await this.loadMarkets();
1210
+ const market = this.market(symbol);
1211
+ const request = {
1212
+ 'symbol': market['id'],
1213
+ };
1214
+ if (limit !== undefined) {
1215
+ limit = Math.min(limit, 1000);
1216
+ request['max_level'] = limit;
1217
+ }
1218
+ const response = await this.v1PrivateGetOrderbookSymbol(this.extend(request, params));
1219
+ //
1220
+ // {
1221
+ // "success": true,
1222
+ // "timestamp": 1702989203989,
1223
+ // "data": {
1224
+ // "asks": [{
1225
+ // "price": 10669.4,
1226
+ // "quantity": 1.56263218
1227
+ // }],
1228
+ // "bids": [{
1229
+ // "price": 10669.4,
1230
+ // "quantity": 1.56263218
1231
+ // }],
1232
+ // "timestamp": 123
1233
+ // }
1234
+ // }
1235
+ //
1236
+ const data = this.safeDict(response, 'data', {});
1237
+ const timestamp = this.safeInteger(data, 'timestamp');
1238
+ return this.parseOrderBook(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity');
1239
+ }
1240
+ parseOHLCV(ohlcv, market = undefined) {
1241
+ return [
1242
+ this.safeInteger(ohlcv, 'start_timestamp'),
1243
+ this.safeNumber(ohlcv, 'open'),
1244
+ this.safeNumber(ohlcv, 'high'),
1245
+ this.safeNumber(ohlcv, 'low'),
1246
+ this.safeNumber(ohlcv, 'close'),
1247
+ this.safeNumber(ohlcv, 'volume'),
1248
+ ];
1249
+ }
1250
+ /**
1251
+ * @method
1252
+ * @name woofipro#fetchOHLCV
1253
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-kline
1254
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1255
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1256
+ * @param {string} timeframe the length of time each candle represents
1257
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1258
+ * @param {int} [limit] max=1000, max=100 when since is defined and is less than (now - (999 * (timeframe in ms)))
1259
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1260
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1261
+ */
1262
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1263
+ await this.loadMarkets();
1264
+ const market = this.market(symbol);
1265
+ const request = {
1266
+ 'symbol': market['id'],
1267
+ 'type': this.safeString(this.timeframes, timeframe, timeframe),
1268
+ };
1269
+ if (limit !== undefined) {
1270
+ request['limit'] = Math.min(limit, 1000);
1271
+ }
1272
+ const response = await this.v1PrivateGetKline(this.extend(request, params));
1273
+ const data = this.safeDict(response, 'data', {});
1274
+ //
1275
+ // {
1276
+ // "success": true,
1277
+ // "timestamp": 1702989203989,
1278
+ // "data": {
1279
+ // "rows": [{
1280
+ // "open": 66166.23,
1281
+ // "close": 66124.56,
1282
+ // "low": 66038.06,
1283
+ // "high": 66176.97,
1284
+ // "volume": 23.45528526,
1285
+ // "amount": 1550436.21725288,
1286
+ // "symbol": "PERP_BTC_USDC",
1287
+ // "type": "1m",
1288
+ // "start_timestamp": 1636388220000,
1289
+ // "end_timestamp": 1636388280000
1290
+ // }]
1291
+ // }
1292
+ // }
1293
+ //
1294
+ const rows = this.safeList(data, 'rows', []);
1295
+ return this.parseOHLCVs(rows, market, timeframe, since, limit);
1296
+ }
1297
+ parseOrder(order, market = undefined) {
1298
+ //
1299
+ // Possible input functions:
1300
+ // * createOrder
1301
+ // * createOrders
1302
+ // * cancelOrder
1303
+ // * fetchOrder
1304
+ // * fetchOrders
1305
+ // const isFromFetchOrder = ('order_tag' in order); TO_DO
1306
+ //
1307
+ // stop order after creating it:
1308
+ // {
1309
+ // "orderId": "1578938",
1310
+ // "clientOrderId": "0",
1311
+ // "algoType": "STOP_LOSS",
1312
+ // "quantity": "0.1"
1313
+ // }
1314
+ // stop order after fetching it:
1315
+ // {
1316
+ // "algoOrderId": "1578958",
1317
+ // "clientOrderId": "0",
1318
+ // "rootAlgoOrderId": "1578958",
1319
+ // "parentAlgoOrderId": "0",
1320
+ // "symbol": "SPOT_LTC_USDT",
1321
+ // "orderTag": "default",
1322
+ // "algoType": "STOP_LOSS",
1323
+ // "side": "BUY",
1324
+ // "quantity": "0.1",
1325
+ // "isTriggered": false,
1326
+ // "triggerPrice": "100",
1327
+ // "triggerStatus": "USELESS",
1328
+ // "type": "LIMIT",
1329
+ // "rootAlgoStatus": "CANCELLED",
1330
+ // "algoStatus": "CANCELLED",
1331
+ // "triggerPriceType": "MARKET_PRICE",
1332
+ // "price": "75",
1333
+ // "triggerTime": "0",
1334
+ // "totalExecutedQuantity": "0",
1335
+ // "averageExecutedPrice": "0",
1336
+ // "totalFee": "0",
1337
+ // "feeAsset": '',
1338
+ // "reduceOnly": false,
1339
+ // "createdTime": "1686149609.744",
1340
+ // "updatedTime": "1686149903.362"
1341
+ // }
1342
+ //
1343
+ const timestamp = this.safeIntegerN(order, ['timestamp', 'created_time', 'createdTime']);
1344
+ const orderId = this.safeStringN(order, ['order_id', 'orderId', 'algoOrderId']);
1345
+ const clientOrderId = this.omitZero(this.safeString2(order, 'client_order_id', 'clientOrderId')); // Somehow, this always returns 0 for limit order
1346
+ const marketId = this.safeString(order, 'symbol');
1347
+ market = this.safeMarket(marketId, market);
1348
+ const symbol = market['symbol'];
1349
+ const price = this.safeString2(order, 'order_price', 'price');
1350
+ const amount = this.safeString2(order, 'order_quantity', 'quantity'); // This is base amount
1351
+ const cost = this.safeString2(order, 'order_amount', 'amount'); // This is quote amount
1352
+ const orderType = this.safeStringLower2(order, 'order_type', 'type');
1353
+ let status = this.safeValue2(order, 'status', 'algoStatus');
1354
+ const success = this.safeBool(order, 'success');
1355
+ if (success !== undefined) {
1356
+ status = (success) ? 'NEW' : 'REJECTED';
1357
+ }
1358
+ const side = this.safeStringLower(order, 'side');
1359
+ const filled = this.omitZero(this.safeValue2(order, 'executed', 'totalExecutedQuantity'));
1360
+ const average = this.omitZero(this.safeString2(order, 'average_executed_price', 'averageExecutedPrice'));
1361
+ const remaining = Precise.stringSub(cost, filled);
1362
+ const fee = this.safeValue2(order, 'total_fee', 'totalFee');
1363
+ const feeCurrency = this.safeString2(order, 'fee_asset', 'feeAsset');
1364
+ const transactions = this.safeValue(order, 'Transactions');
1365
+ const triggerPrice = this.safeNumber(order, 'triggerPrice');
1366
+ let takeProfitPrice = undefined;
1367
+ let stopLossPrice = undefined;
1368
+ const childOrders = this.safeValue(order, 'childOrders');
1369
+ if (childOrders !== undefined) {
1370
+ const first = this.safeValue(childOrders, 0);
1371
+ const innerChildOrders = this.safeValue(first, 'childOrders', []);
1372
+ const innerChildOrdersLength = innerChildOrders.length;
1373
+ if (innerChildOrdersLength > 0) {
1374
+ const takeProfitOrder = this.safeValue(innerChildOrders, 0);
1375
+ const stopLossOrder = this.safeValue(innerChildOrders, 1);
1376
+ takeProfitPrice = this.safeNumber(takeProfitOrder, 'triggerPrice');
1377
+ stopLossPrice = this.safeNumber(stopLossOrder, 'triggerPrice');
1378
+ }
1379
+ }
1380
+ const lastUpdateTimestamp = this.safeInteger2(order, 'updatedTime', 'updated_time');
1381
+ return this.safeOrder({
1382
+ 'id': orderId,
1383
+ 'clientOrderId': clientOrderId,
1384
+ 'timestamp': timestamp,
1385
+ 'datetime': this.iso8601(timestamp),
1386
+ 'lastTradeTimestamp': undefined,
1387
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
1388
+ 'status': this.parseOrderStatus(status),
1389
+ 'symbol': symbol,
1390
+ 'type': this.parseOrderType(orderType),
1391
+ 'timeInForce': this.parseTimeInForce(orderType),
1392
+ 'postOnly': undefined,
1393
+ 'reduceOnly': this.safeBool(order, 'reduce_only'),
1394
+ 'side': side,
1395
+ 'price': price,
1396
+ 'triggerPrice': triggerPrice,
1397
+ 'takeProfitPrice': takeProfitPrice,
1398
+ 'stopLossPrice': stopLossPrice,
1399
+ 'average': average,
1400
+ 'amount': amount,
1401
+ 'filled': filled,
1402
+ 'remaining': remaining,
1403
+ 'cost': cost,
1404
+ 'trades': transactions,
1405
+ 'fee': {
1406
+ 'cost': fee,
1407
+ 'currency': feeCurrency,
1408
+ },
1409
+ 'info': order,
1410
+ }, market);
1411
+ }
1412
+ parseTimeInForce(timeInForce) {
1413
+ const timeInForces = {
1414
+ 'ioc': 'IOC',
1415
+ 'fok': 'FOK',
1416
+ 'post_only': 'PO',
1417
+ };
1418
+ return this.safeString(timeInForces, timeInForce, undefined);
1419
+ }
1420
+ parseOrderStatus(status) {
1421
+ if (status !== undefined) {
1422
+ const statuses = {
1423
+ 'NEW': 'open',
1424
+ 'FILLED': 'closed',
1425
+ 'CANCEL_SENT': 'canceled',
1426
+ 'CANCEL_ALL_SENT': 'canceled',
1427
+ 'CANCELLED': 'canceled',
1428
+ 'PARTIAL_FILLED': 'open',
1429
+ 'REJECTED': 'rejected',
1430
+ 'INCOMPLETE': 'open',
1431
+ 'COMPLETED': 'closed',
1432
+ };
1433
+ return this.safeString(statuses, status, status);
1434
+ }
1435
+ return status;
1436
+ }
1437
+ parseOrderType(type) {
1438
+ const types = {
1439
+ 'LIMIT': 'limit',
1440
+ 'MARKET': 'market',
1441
+ 'POST_ONLY': 'limit',
1442
+ };
1443
+ return this.safeStringLower(types, type, type);
1444
+ }
1445
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1446
+ /**
1447
+ * @method
1448
+ * @ignore
1449
+ * @name woofipro#createOrderRequest
1450
+ * @description helper function to build the request
1451
+ * @param {string} symbol unified symbol of the market to create an order in
1452
+ * @param {string} type 'market' or 'limit'
1453
+ * @param {string} side 'buy' or 'sell'
1454
+ * @param {float} amount how much you want to trade in units of the base currency
1455
+ * @param {float} [price] the price that the order is to be fulfilled, in units of the quote currency, ignored in market orders
1456
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1457
+ * @returns {object} request to be sent to the exchange
1458
+ */
1459
+ const reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only');
1460
+ const orderType = type.toUpperCase();
1461
+ const market = this.market(symbol);
1462
+ const orderSide = side.toUpperCase();
1463
+ const request = {
1464
+ 'symbol': market['id'],
1465
+ 'side': orderSide,
1466
+ };
1467
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
1468
+ const stopLoss = this.safeValue(params, 'stopLoss');
1469
+ const takeProfit = this.safeValue(params, 'takeProfit');
1470
+ const algoType = this.safeString(params, 'algoType');
1471
+ const isConditional = triggerPrice !== undefined || stopLoss !== undefined || takeProfit !== undefined || (this.safeValue(params, 'childOrders') !== undefined);
1472
+ const isMarket = orderType === 'MARKET';
1473
+ const timeInForce = this.safeStringLower(params, 'timeInForce');
1474
+ const postOnly = this.isPostOnly(isMarket, undefined, params);
1475
+ const orderQtyKey = isConditional ? 'quantity' : 'order_quantity';
1476
+ const priceKey = isConditional ? 'price' : 'order_price';
1477
+ const typeKey = isConditional ? 'type' : 'order_type';
1478
+ request[typeKey] = orderType; // LIMIT/MARKET/IOC/FOK/POST_ONLY/ASK/BID
1479
+ if (!isConditional) {
1480
+ if (postOnly) {
1481
+ request['order_type'] = 'POST_ONLY';
1482
+ }
1483
+ else if (timeInForce === 'fok') {
1484
+ request['order_type'] = 'FOK';
1485
+ }
1486
+ else if (timeInForce === 'ioc') {
1487
+ request['order_type'] = 'IOC';
1488
+ }
1489
+ }
1490
+ if (reduceOnly) {
1491
+ request['reduce_only'] = reduceOnly;
1492
+ }
1493
+ if (price !== undefined) {
1494
+ request[priceKey] = this.priceToPrecision(symbol, price);
1495
+ }
1496
+ if (isMarket && !isConditional) {
1497
+ request[orderQtyKey] = this.amountToPrecision(symbol, amount);
1498
+ }
1499
+ else if (algoType !== 'POSITIONAL_TP_SL') {
1500
+ request[orderQtyKey] = this.amountToPrecision(symbol, amount);
1501
+ }
1502
+ const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1503
+ if (clientOrderId !== undefined) {
1504
+ request['client_order_id'] = clientOrderId;
1505
+ }
1506
+ if (triggerPrice !== undefined) {
1507
+ request['trigger_price'] = this.priceToPrecision(symbol, triggerPrice);
1508
+ request['algo_type'] = 'STOP';
1509
+ }
1510
+ else if ((stopLoss !== undefined) || (takeProfit !== undefined)) {
1511
+ request['algo_type'] = 'TP_SL';
1512
+ const outterOrder = {
1513
+ 'symbol': market['id'],
1514
+ 'reduce_only': false,
1515
+ 'algo_type': 'POSITIONAL_TP_SL',
1516
+ 'child_orders': [],
1517
+ };
1518
+ const childOrders = outterOrder['child_orders'];
1519
+ const closeSide = (orderSide === 'BUY') ? 'SELL' : 'BUY';
1520
+ if (stopLoss !== undefined) {
1521
+ const stopLossPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'price', stopLoss);
1522
+ const stopLossOrder = {
1523
+ 'side': closeSide,
1524
+ 'algo_type': 'TP_SL',
1525
+ 'trigger_price': this.priceToPrecision(symbol, stopLossPrice),
1526
+ 'type': 'LIMIT',
1527
+ 'reduce_only': true,
1528
+ };
1529
+ childOrders.push(stopLossOrder);
1530
+ }
1531
+ if (takeProfit !== undefined) {
1532
+ const takeProfitPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'price', takeProfit);
1533
+ const takeProfitOrder = {
1534
+ 'side': closeSide,
1535
+ 'algo_type': 'TP_SL',
1536
+ 'trigger_price': this.priceToPrecision(symbol, takeProfitPrice),
1537
+ 'type': 'LIMIT',
1538
+ 'reduce_only': true,
1539
+ };
1540
+ outterOrder.push(takeProfitOrder);
1541
+ }
1542
+ request['child_orders'] = [outterOrder];
1543
+ }
1544
+ params = this.omit(params, ['reduceOnly', 'reduce_only', 'clOrdID', 'clientOrderId', 'client_order_id', 'postOnly', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLoss', 'takeProfit']);
1545
+ return this.extend(request, params);
1546
+ }
1547
+ /**
1548
+ * @method
1549
+ * @name woofipro#createOrder
1550
+ * @description create a trade order
1551
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/create-order
1552
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/create-algo-order
1553
+ * @param {string} symbol unified symbol of the market to create an order in
1554
+ * @param {string} type 'market' or 'limit'
1555
+ * @param {string} side 'buy' or 'sell'
1556
+ * @param {float} amount how much of currency you want to trade in units of base currency
1557
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1558
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1559
+ * @param {float} [params.triggerPrice] The price a trigger order is triggered at
1560
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered (perpetual swap markets only)
1561
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
1562
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered (perpetual swap markets only)
1563
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
1564
+ * @param {float} [params.algoType] 'STOP'or 'TP_SL' or 'POSITIONAL_TP_SL'
1565
+ * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
1566
+ * @param {string} [params.clientOrderId] a unique id for the order
1567
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1568
+ */
1569
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1570
+ await this.loadMarkets();
1571
+ const market = this.market(symbol);
1572
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
1573
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
1574
+ const stopLoss = this.safeValue(params, 'stopLoss');
1575
+ const takeProfit = this.safeValue(params, 'takeProfit');
1576
+ const isConditional = triggerPrice !== undefined || stopLoss !== undefined || takeProfit !== undefined || (this.safeValue(params, 'childOrders') !== undefined);
1577
+ let response = undefined;
1578
+ if (isConditional) {
1579
+ response = await this.v1PrivatePostAlgoOrder(request);
1580
+ //
1581
+ // {
1582
+ // "success": true,
1583
+ // "timestamp": 1702989203989,
1584
+ // "data": {
1585
+ // "order_id": 13,
1586
+ // "client_order_id": "testclientid",
1587
+ // "algo_type": "STOP",
1588
+ // "quantity": 100.12
1589
+ // }
1590
+ // }
1591
+ //
1592
+ }
1593
+ else {
1594
+ response = await this.v1PrivatePostOrder(request);
1595
+ //
1596
+ // {
1597
+ // "success": true,
1598
+ // "timestamp": 1702989203989,
1599
+ // "data": {
1600
+ // "order_id": 13,
1601
+ // "client_order_id": "testclientid",
1602
+ // "order_type": "LIMIT",
1603
+ // "order_price": 100.12,
1604
+ // "order_quantity": 0.987654,
1605
+ // "order_amount": 0.8,
1606
+ // "error_message": "none"
1607
+ // }
1608
+ // }
1609
+ //
1610
+ }
1611
+ const data = this.safeDict(response, 'data');
1612
+ data['timestamp'] = this.safeInteger(response, 'timestamp');
1613
+ const order = this.parseOrder(data, market);
1614
+ order['type'] = type;
1615
+ return order;
1616
+ }
1617
+ /**
1618
+ * @method
1619
+ * @name woofipro#createOrders
1620
+ * @description *contract only* create a list of trade orders
1621
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/batch-create-order
1622
+ * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
1623
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1624
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1625
+ */
1626
+ async createOrders(orders, params = {}) {
1627
+ await this.loadMarkets();
1628
+ const ordersRequests = [];
1629
+ for (let i = 0; i < orders.length; i++) {
1630
+ const rawOrder = orders[i];
1631
+ const marketId = this.safeString(rawOrder, 'symbol');
1632
+ const type = this.safeString(rawOrder, 'type');
1633
+ const side = this.safeString(rawOrder, 'side');
1634
+ const amount = this.safeValue(rawOrder, 'amount');
1635
+ const price = this.safeValue(rawOrder, 'price');
1636
+ const orderParams = this.safeDict(rawOrder, 'params', {});
1637
+ const triggerPrice = this.safeString2(orderParams, 'triggerPrice', 'stopPrice');
1638
+ const stopLoss = this.safeValue(orderParams, 'stopLoss');
1639
+ const takeProfit = this.safeValue(orderParams, 'takeProfit');
1640
+ const isConditional = triggerPrice !== undefined || stopLoss !== undefined || takeProfit !== undefined || (this.safeValue(orderParams, 'childOrders') !== undefined);
1641
+ if (isConditional) {
1642
+ throw new NotSupported(this.id + ' createOrders() only support non-stop order');
1643
+ }
1644
+ const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams);
1645
+ ordersRequests.push(orderRequest);
1646
+ }
1647
+ const request = {
1648
+ 'orders': ordersRequests,
1649
+ };
1650
+ const response = await this.v1PrivatePostBatchOrder(this.extend(request, params));
1651
+ //
1652
+ // {
1653
+ // "success": true,
1654
+ // "timestamp": 1702989203989,
1655
+ // "data": {
1656
+ // "rows": [{
1657
+ // "order_id": 13,
1658
+ // "client_order_id": "testclientid",
1659
+ // "order_type": "LIMIT",
1660
+ // "order_price": 100.12,
1661
+ // "order_quantity": 0.987654,
1662
+ // "order_amount": 0.8,
1663
+ // "error_message": "none"
1664
+ // }]
1665
+ // }
1666
+ // }
1667
+ //
1668
+ const data = this.safeDict(response, 'data', {});
1669
+ const rows = this.safeList(data, 'rows', []);
1670
+ return this.parseOrders(rows);
1671
+ }
1672
+ /**
1673
+ * @method
1674
+ * @name woofipro#editOrder
1675
+ * @description edit a trade order
1676
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/edit-order
1677
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/edit-algo-order
1678
+ * @param {string} id order id
1679
+ * @param {string} symbol unified symbol of the market to create an order in
1680
+ * @param {string} type 'market' or 'limit'
1681
+ * @param {string} side 'buy' or 'sell'
1682
+ * @param {float} amount how much of currency you want to trade in units of base currency
1683
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1684
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1685
+ * @param {float} [params.triggerPrice] The price a trigger order is triggered at
1686
+ * @param {float} [params.stopLossPrice] price to trigger stop-loss orders
1687
+ * @param {float} [params.takeProfitPrice] price to trigger take-profit orders
1688
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1689
+ */
1690
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
1691
+ await this.loadMarkets();
1692
+ const market = this.market(symbol);
1693
+ const request = {
1694
+ 'order_id': id,
1695
+ };
1696
+ const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stopPrice', 'takeProfitPrice', 'stopLossPrice']);
1697
+ if (triggerPrice !== undefined) {
1698
+ request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);
1699
+ }
1700
+ const isConditional = (triggerPrice !== undefined) || (this.safeValue(params, 'childOrders') !== undefined);
1701
+ const orderQtyKey = isConditional ? 'quantity' : 'order_quantity';
1702
+ const priceKey = isConditional ? 'price' : 'order_price';
1703
+ if (price !== undefined) {
1704
+ request[priceKey] = this.priceToPrecision(symbol, price);
1705
+ }
1706
+ if (amount !== undefined) {
1707
+ request[orderQtyKey] = this.amountToPrecision(symbol, amount);
1708
+ }
1709
+ params = this.omit(params, ['stopPrice', 'triggerPrice', 'takeProfitPrice', 'stopLossPrice', 'trailingTriggerPrice', 'trailingAmount', 'trailingPercent']);
1710
+ let response = undefined;
1711
+ if (isConditional) {
1712
+ response = await this.v1PrivatePutAlgoOrder(this.extend(request, params));
1713
+ }
1714
+ else {
1715
+ request['symbol'] = market['id'];
1716
+ request['side'] = side.toUpperCase();
1717
+ const orderType = type.toUpperCase();
1718
+ const timeInForce = this.safeStringLower(params, 'timeInForce');
1719
+ const isMarket = orderType === 'MARKET';
1720
+ const postOnly = this.isPostOnly(isMarket, undefined, params);
1721
+ if (postOnly) {
1722
+ request['order_type'] = 'POST_ONLY';
1723
+ }
1724
+ else if (timeInForce === 'fok') {
1725
+ request['order_type'] = 'FOK';
1726
+ }
1727
+ else if (timeInForce === 'ioc') {
1728
+ request['order_type'] = 'IOC';
1729
+ }
1730
+ else {
1731
+ request['order_type'] = orderType;
1732
+ }
1733
+ const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1734
+ params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id', 'postOnly', 'timeInForce']);
1735
+ if (clientOrderId !== undefined) {
1736
+ request['client_order_id'] = clientOrderId;
1737
+ }
1738
+ // request['side'] = side.toUpperCase ();
1739
+ // request['symbol'] = market['id'];
1740
+ response = await this.v1PrivatePutOrder(this.extend(request, params));
1741
+ }
1742
+ //
1743
+ // {
1744
+ // "success": true,
1745
+ // "timestamp": 1702989203989,
1746
+ // "data": {
1747
+ // "status": "EDIT_SENT"
1748
+ // }
1749
+ // }
1750
+ //
1751
+ const data = this.safeDict(response, 'data', {});
1752
+ data['timestamp'] = this.safeInteger(response, 'timestamp');
1753
+ return this.parseOrder(data, market);
1754
+ }
1755
+ /**
1756
+ * @method
1757
+ * @name woofipro#cancelOrder
1758
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/cancel-order
1759
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/cancel-order-by-client_order_id
1760
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/cancel-algo-order
1761
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/cancel-algo-order-by-client_order_id
1762
+ * @description cancels an open order
1763
+ * @param {string} id order id
1764
+ * @param {string} symbol unified symbol of the market the order was made in
1765
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1766
+ * @param {boolean} [params.trigger] whether the order is a stop/algo order
1767
+ * @param {string} [params.clientOrderId] a unique id for the order
1768
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1769
+ */
1770
+ async cancelOrder(id, symbol = undefined, params = {}) {
1771
+ const trigger = this.safeBool2(params, 'stop', 'trigger', false);
1772
+ params = this.omit(params, ['stop', 'trigger']);
1773
+ if (!trigger && (symbol === undefined)) {
1774
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
1775
+ }
1776
+ await this.loadMarkets();
1777
+ let market = undefined;
1778
+ if (symbol !== undefined) {
1779
+ market = this.market(symbol);
1780
+ }
1781
+ const request = {
1782
+ 'symbol': market['id'],
1783
+ };
1784
+ const clientOrderIdUnified = this.safeString2(params, 'clOrdID', 'clientOrderId');
1785
+ const clientOrderIdExchangeSpecific = this.safeString(params, 'client_order_id', clientOrderIdUnified);
1786
+ const isByClientOrder = clientOrderIdExchangeSpecific !== undefined;
1787
+ let response = undefined;
1788
+ if (trigger) {
1789
+ if (isByClientOrder) {
1790
+ request['client_order_id'] = clientOrderIdExchangeSpecific;
1791
+ params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1792
+ response = await this.v1PrivateDeleteAlgoClientOrder(this.extend(request, params));
1793
+ }
1794
+ else {
1795
+ request['order_id'] = id;
1796
+ response = await this.v1PrivateDeleteAlgoOrder(this.extend(request, params));
1797
+ }
1798
+ }
1799
+ else {
1800
+ if (isByClientOrder) {
1801
+ request['client_order_id'] = clientOrderIdExchangeSpecific;
1802
+ params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1803
+ response = await this.v1PrivateDeleteClientOrder(this.extend(request, params));
1804
+ }
1805
+ else {
1806
+ request['order_id'] = id;
1807
+ response = await this.v1PrivateDeleteOrder(this.extend(request, params));
1808
+ }
1809
+ }
1810
+ //
1811
+ // {
1812
+ // "success": true,
1813
+ // "timestamp": 1702989203989,
1814
+ // "data": {
1815
+ // "status": "CANCEL_SENT"
1816
+ // }
1817
+ // }
1818
+ //
1819
+ // {
1820
+ // "success": true,
1821
+ // "timestamp": 1702989203989,
1822
+ // "status": "CANCEL_SENT"
1823
+ // }
1824
+ //
1825
+ const extendParams = { 'symbol': symbol };
1826
+ if (isByClientOrder) {
1827
+ extendParams['client_order_id'] = clientOrderIdExchangeSpecific;
1828
+ }
1829
+ else {
1830
+ extendParams['id'] = id;
1831
+ }
1832
+ if (trigger) {
1833
+ return this.extend(this.parseOrder(response), extendParams);
1834
+ }
1835
+ const data = this.safeDict(response, 'data', {});
1836
+ return this.extend(this.parseOrder(data), extendParams);
1837
+ }
1838
+ /**
1839
+ * @method
1840
+ * @name woofipro#cancelOrders
1841
+ * @description cancel multiple orders
1842
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/batch-cancel-orders
1843
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/batch-cancel-orders-by-client_order_id
1844
+ * @param {string[]} ids order ids
1845
+ * @param {string} [symbol] unified market symbol
1846
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1847
+ * @param {string[]} [params.client_order_ids] max length 10 e.g. ["my_id_1","my_id_2"], encode the double quotes. No space after comma
1848
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1849
+ */
1850
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1851
+ await this.loadMarkets();
1852
+ const clientOrderIds = this.safeListN(params, ['clOrdIDs', 'clientOrderIds', 'client_order_ids']);
1853
+ params = this.omit(params, ['clOrdIDs', 'clientOrderIds', 'client_order_ids']);
1854
+ const request = {};
1855
+ let response = undefined;
1856
+ if (clientOrderIds) {
1857
+ request['client_order_ids'] = clientOrderIds.join(',');
1858
+ response = await this.v1PrivateDeleteClientBatchOrder(this.extend(request, params));
1859
+ }
1860
+ else {
1861
+ request['order_ids'] = ids.join(',');
1862
+ response = await this.v1PrivateDeleteBatchOrder(this.extend(request, params));
1863
+ }
1864
+ //
1865
+ // {
1866
+ // "success": true,
1867
+ // "timestamp": 1702989203989,
1868
+ // "data": {
1869
+ // "status": "CANCEL_ALL_SENT"
1870
+ // }
1871
+ // }
1872
+ //
1873
+ return [this.safeOrder({
1874
+ 'info': response,
1875
+ })];
1876
+ }
1877
+ /**
1878
+ * @method
1879
+ * @name woofipro#cancelAllOrders
1880
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/cancel-all-pending-algo-orders
1881
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/cancel-orders-in-bulk
1882
+ * @description cancel all open orders in a market
1883
+ * @param {string} symbol unified market symbol
1884
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1885
+ * @param {boolean} [params.trigger] whether the order is a stop/algo order
1886
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1887
+ */
1888
+ async cancelAllOrders(symbol = undefined, params = {}) {
1889
+ await this.loadMarkets();
1890
+ const trigger = this.safeBool2(params, 'stop', 'trigger');
1891
+ params = this.omit(params, ['stop', 'trigger']);
1892
+ const request = {};
1893
+ if (symbol !== undefined) {
1894
+ const market = this.market(symbol);
1895
+ request['symbol'] = market['id'];
1896
+ }
1897
+ let response = undefined;
1898
+ if (trigger) {
1899
+ response = await this.v1PrivateDeleteAlgoOrders(this.extend(request, params));
1900
+ }
1901
+ else {
1902
+ response = await this.v1PrivateDeleteOrders(this.extend(request, params));
1903
+ }
1904
+ // trigger
1905
+ // {
1906
+ // "success": true,
1907
+ // "timestamp": 1702989203989,
1908
+ // "status": "CANCEL_ALL_SENT"
1909
+ // }
1910
+ //
1911
+ // {
1912
+ // "success": true,
1913
+ // "timestamp": 1702989203989,
1914
+ // "data": {
1915
+ // "status": "CANCEL_ALL_SENT"
1916
+ // }
1917
+ // }
1918
+ //
1919
+ return [
1920
+ this.safeOrder({
1921
+ 'info': response,
1922
+ }),
1923
+ ];
1924
+ }
1925
+ /**
1926
+ * @method
1927
+ * @name woofipro#fetchOrder
1928
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-order-by-order_id
1929
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-order-by-client_order_id
1930
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-algo-order-by-order_id
1931
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-algo-order-by-client_order_id
1932
+ * @description fetches information on an order made by the user
1933
+ * @param {string} id the order id
1934
+ * @param {string} symbol unified symbol of the market the order was made in
1935
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1936
+ * @param {boolean} [params.trigger] whether the order is a stop/algo order
1937
+ * @param {string} [params.clientOrderId] a unique id for the order
1938
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1939
+ */
1940
+ async fetchOrder(id, symbol = undefined, params = {}) {
1941
+ await this.loadMarkets();
1942
+ let market = undefined;
1943
+ if (symbol !== undefined) {
1944
+ market = this.market(symbol);
1945
+ }
1946
+ const trigger = this.safeBool2(params, 'stop', 'trigger', false);
1947
+ const request = {};
1948
+ const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1949
+ params = this.omit(params, ['stop', 'trigger', 'clOrdID', 'clientOrderId', 'client_order_id']);
1950
+ let response = undefined;
1951
+ if (trigger) {
1952
+ if (clientOrderId) {
1953
+ request['client_order_id'] = clientOrderId;
1954
+ response = await this.v1PrivateGetAlgoClientOrderClientOrderId(this.extend(request, params));
1955
+ }
1956
+ else {
1957
+ request['oid'] = id;
1958
+ response = await this.v1PrivateGetAlgoOrderOid(this.extend(request, params));
1959
+ }
1960
+ }
1961
+ else {
1962
+ if (clientOrderId) {
1963
+ request['client_order_id'] = clientOrderId;
1964
+ response = await this.v1PrivateGetClientOrderClientOrderId(this.extend(request, params));
1965
+ }
1966
+ else {
1967
+ request['oid'] = id;
1968
+ response = await this.v1PrivateGetOrderOid(this.extend(request, params));
1969
+ }
1970
+ }
1971
+ //
1972
+ // {
1973
+ // "success": true,
1974
+ // "timestamp": 1702989203989,
1975
+ // "data": {
1976
+ // "order_id": 78151,
1977
+ // "user_id": 12345,
1978
+ // "price": 0.67772,
1979
+ // "type": "LIMIT",
1980
+ // "quantity": 20,
1981
+ // "amount": 10,
1982
+ // "executed_quantity": 20,
1983
+ // "total_executed_quantity": 20,
1984
+ // "visible_quantity": 1,
1985
+ // "symbol": "PERP_WOO_USDC",
1986
+ // "side": "BUY",
1987
+ // "status": "FILLED",
1988
+ // "total_fee": 0.5,
1989
+ // "fee_asset": "WOO",
1990
+ // "client_order_id": 1,
1991
+ // "average_executed_price": 0.67772,
1992
+ // "created_time": 1653563963000,
1993
+ // "updated_time": 1653564213000,
1994
+ // "realized_pnl": 123
1995
+ // }
1996
+ // }
1997
+ //
1998
+ const orders = this.safeDict(response, 'data', response);
1999
+ return this.parseOrder(orders, market);
2000
+ }
2001
+ /**
2002
+ * @method
2003
+ * @name woofipro#fetchOrders
2004
+ * @description fetches information on multiple orders made by the user
2005
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-orders
2006
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-algo-orders
2007
+ * @param {string} symbol unified market symbol of the market orders were made in
2008
+ * @param {int} [since] the earliest time in ms to fetch orders for
2009
+ * @param {int} [limit] the maximum number of order structures to retrieve
2010
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2011
+ * @param {boolean} [params.trigger] whether the order is a stop/algo order
2012
+ * @param {boolean} [params.is_triggered] whether the order has been triggered (false by default)
2013
+ * @param {string} [params.side] 'buy' or 'sell'
2014
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
2015
+ * @param {int} params.until timestamp in ms of the latest order to fetch
2016
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2017
+ */
2018
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2019
+ await this.loadMarkets();
2020
+ let paginate = false;
2021
+ const isTrigger = this.safeBool2(params, 'stop', 'trigger', false);
2022
+ const maxLimit = (isTrigger) ? 100 : 500;
2023
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');
2024
+ if (paginate) {
2025
+ return await this.fetchPaginatedCallIncremental('fetchOrders', symbol, since, limit, params, 'page', maxLimit);
2026
+ }
2027
+ let request = {};
2028
+ let market = undefined;
2029
+ params = this.omit(params, ['stop', 'trigger']);
2030
+ if (symbol !== undefined) {
2031
+ market = this.market(symbol);
2032
+ request['symbol'] = market['id'];
2033
+ }
2034
+ if (since !== undefined) {
2035
+ request['start_t'] = since;
2036
+ }
2037
+ if (limit !== undefined) {
2038
+ request['size'] = limit;
2039
+ }
2040
+ else {
2041
+ request['size'] = maxLimit;
2042
+ }
2043
+ if (isTrigger) {
2044
+ request['algo_type'] = 'STOP';
2045
+ }
2046
+ [request, params] = this.handleUntilOption('end_t', request, params);
2047
+ let response = undefined;
2048
+ if (isTrigger) {
2049
+ response = await this.v1PrivateGetAlgoOrders(this.extend(request, params));
2050
+ }
2051
+ else {
2052
+ response = await this.v1PrivateGetOrders(this.extend(request, params));
2053
+ }
2054
+ //
2055
+ // {
2056
+ // "success": true,
2057
+ // "timestamp": 1702989203989,
2058
+ // "data": {
2059
+ // "meta": {
2060
+ // "total": 9,
2061
+ // "records_per_page": 25,
2062
+ // "current_page": 1
2063
+ // },
2064
+ // "rows": [{
2065
+ // "order_id": 78151,
2066
+ // "user_id": 12345,
2067
+ // "price": 0.67772,
2068
+ // "type": "LIMIT",
2069
+ // "quantity": 20,
2070
+ // "amount": 10,
2071
+ // "executed_quantity": 20,
2072
+ // "total_executed_quantity": 20,
2073
+ // "visible_quantity": 1,
2074
+ // "symbol": "PERP_WOO_USDC",
2075
+ // "side": "BUY",
2076
+ // "status": "FILLED",
2077
+ // "total_fee": 0.5,
2078
+ // "fee_asset": "WOO",
2079
+ // "client_order_id": 1,
2080
+ // "average_executed_price": 0.67772,
2081
+ // "created_time": 1653563963000,
2082
+ // "updated_time": 1653564213000,
2083
+ // "realized_pnl": 123
2084
+ // }]
2085
+ // }
2086
+ // }
2087
+ //
2088
+ const data = this.safeValue(response, 'data', response);
2089
+ const orders = this.safeList(data, 'rows');
2090
+ return this.parseOrders(orders, market, since, limit);
2091
+ }
2092
+ /**
2093
+ * @method
2094
+ * @name woofipro#fetchOpenOrders
2095
+ * @description fetches information on multiple orders made by the user
2096
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-orders
2097
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-algo-orders
2098
+ * @param {string} symbol unified market symbol of the market orders were made in
2099
+ * @param {int} [since] the earliest time in ms to fetch orders for
2100
+ * @param {int} [limit] the maximum number of order structures to retrieve
2101
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2102
+ * @param {boolean} [params.trigger] whether the order is a stop/algo order
2103
+ * @param {boolean} [params.is_triggered] whether the order has been triggered (false by default)
2104
+ * @param {string} [params.side] 'buy' or 'sell'
2105
+ * @param {int} params.until timestamp in ms of the latest order to fetch
2106
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
2107
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2108
+ */
2109
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2110
+ await this.loadMarkets();
2111
+ const extendedParams = this.extend(params, { 'status': 'INCOMPLETE' });
2112
+ return await this.fetchOrders(symbol, since, limit, extendedParams);
2113
+ }
2114
+ /**
2115
+ * @method
2116
+ * @name woofipro#fetchClosedOrders
2117
+ * @description fetches information on multiple orders made by the user
2118
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-orders
2119
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-algo-orders
2120
+ * @param {string} symbol unified market symbol of the market orders were made in
2121
+ * @param {int} [since] the earliest time in ms to fetch orders for
2122
+ * @param {int} [limit] the maximum number of order structures to retrieve
2123
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2124
+ * @param {boolean} [params.trigger] whether the order is a stop/algo order
2125
+ * @param {boolean} [params.is_triggered] whether the order has been triggered (false by default)
2126
+ * @param {string} [params.side] 'buy' or 'sell'
2127
+ * @param {int} params.until timestamp in ms of the latest order to fetch
2128
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
2129
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2130
+ */
2131
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2132
+ await this.loadMarkets();
2133
+ const extendedParams = this.extend(params, { 'status': 'COMPLETED' });
2134
+ return await this.fetchOrders(symbol, since, limit, extendedParams);
2135
+ }
2136
+ /**
2137
+ * @method
2138
+ * @name woofipro#fetchOrderTrades
2139
+ * @description fetch all the trades made from a single order
2140
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-all-trades-of-specific-order
2141
+ * @param {string} id order id
2142
+ * @param {string} symbol unified market symbol
2143
+ * @param {int} [since] the earliest time in ms to fetch trades for
2144
+ * @param {int} [limit] the maximum number of trades to retrieve
2145
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2146
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2147
+ */
2148
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2149
+ await this.loadMarkets();
2150
+ let market = undefined;
2151
+ if (symbol !== undefined) {
2152
+ market = this.market(symbol);
2153
+ }
2154
+ const request = {
2155
+ 'oid': id,
2156
+ };
2157
+ const response = await this.v1PrivateGetOrderOidTrades(this.extend(request, params));
2158
+ //
2159
+ // {
2160
+ // "success": true,
2161
+ // "timestamp": 1702989203989,
2162
+ // "data": {
2163
+ // "rows": [{
2164
+ // "id": 2,
2165
+ // "symbol": "PERP_BTC_USDC",
2166
+ // "fee": 0.0001,
2167
+ // "fee_asset": "USDC",
2168
+ // "side": "BUY",
2169
+ // "order_id": 1,
2170
+ // "executed_price": 123,
2171
+ // "executed_quantity": 0.05,
2172
+ // "executed_timestamp": 1567382401000,
2173
+ // "is_maker": 1,
2174
+ // "realized_pnl": 123
2175
+ // }]
2176
+ // }
2177
+ // }
2178
+ //
2179
+ const data = this.safeDict(response, 'data', {});
2180
+ const trades = this.safeList(data, 'rows', []);
2181
+ return this.parseTrades(trades, market, since, limit, params);
2182
+ }
2183
+ /**
2184
+ * @method
2185
+ * @name woofipro#fetchMyTrades
2186
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-trades
2187
+ * @description fetch all trades made by the user
2188
+ * @param {string} symbol unified market symbol
2189
+ * @param {int} [since] the earliest time in ms to fetch trades for
2190
+ * @param {int} [limit] the maximum number of trades structures to retrieve
2191
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2192
+ * @param {boolean} [params.paginate] set to true if you want to fetch trades with pagination
2193
+ * @param {int} params.until timestamp in ms of the latest trade to fetch
2194
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2195
+ */
2196
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2197
+ await this.loadMarkets();
2198
+ let paginate = false;
2199
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
2200
+ if (paginate) {
2201
+ return await this.fetchPaginatedCallIncremental('fetchMyTrades', symbol, since, limit, params, 'page', 500);
2202
+ }
2203
+ let request = {};
2204
+ let market = undefined;
2205
+ if (symbol !== undefined) {
2206
+ market = this.market(symbol);
2207
+ request['symbol'] = market['id'];
2208
+ }
2209
+ if (since !== undefined) {
2210
+ request['start_t'] = since;
2211
+ }
2212
+ if (limit !== undefined) {
2213
+ request['size'] = limit;
2214
+ }
2215
+ else {
2216
+ request['size'] = 500;
2217
+ }
2218
+ [request, params] = this.handleUntilOption('end_t', request, params);
2219
+ const response = await this.v1PrivateGetTrades(this.extend(request, params));
2220
+ //
2221
+ // {
2222
+ // "success": true,
2223
+ // "timestamp": 1702989203989,
2224
+ // "data": {
2225
+ // "meta": {
2226
+ // "total": 9,
2227
+ // "records_per_page": 25,
2228
+ // "current_page": 1
2229
+ // },
2230
+ // "rows": [{
2231
+ // "id": 2,
2232
+ // "symbol": "PERP_BTC_USDC",
2233
+ // "fee": 0.0001,
2234
+ // "fee_asset": "USDC",
2235
+ // "side": "BUY",
2236
+ // "order_id": 1,
2237
+ // "executed_price": 123,
2238
+ // "executed_quantity": 0.05,
2239
+ // "executed_timestamp": 1567382401000,
2240
+ // "is_maker": 1,
2241
+ // "realized_pnl": 123
2242
+ // }]
2243
+ // }
2244
+ // }
2245
+ //
2246
+ const data = this.safeDict(response, 'data', {});
2247
+ const trades = this.safeList(data, 'rows', []);
2248
+ return this.parseTrades(trades, market, since, limit, params);
2249
+ }
2250
+ parseBalance(response) {
2251
+ const result = {
2252
+ 'info': response,
2253
+ };
2254
+ const balances = this.safeList(response, 'holding', []);
2255
+ for (let i = 0; i < balances.length; i++) {
2256
+ const balance = balances[i];
2257
+ const code = this.safeCurrencyCode(this.safeString(balance, 'token'));
2258
+ const account = this.account();
2259
+ account['total'] = this.safeString(balance, 'holding');
2260
+ account['frozen'] = this.safeString(balance, 'frozen');
2261
+ result[code] = account;
2262
+ }
2263
+ return this.safeBalance(result);
2264
+ }
2265
+ /**
2266
+ * @method
2267
+ * @name woofipro#fetchBalance
2268
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
2269
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-current-holding
2270
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2271
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
2272
+ */
2273
+ async fetchBalance(params = {}) {
2274
+ await this.loadMarkets();
2275
+ const response = await this.v1PrivateGetClientHolding(params);
2276
+ //
2277
+ // {
2278
+ // "success": true,
2279
+ // "timestamp": 1702989203989,
2280
+ // "data": {
2281
+ // "holding": [{
2282
+ // "updated_time": 1580794149000,
2283
+ // "token": "BTC",
2284
+ // "holding": -28.000752,
2285
+ // "frozen": 123,
2286
+ // "pending_short": -2000
2287
+ // }]
2288
+ // }
2289
+ // }
2290
+ //
2291
+ const data = this.safeDict(response, 'data');
2292
+ return this.parseBalance(data);
2293
+ }
2294
+ async getAssetHistoryRows(code = undefined, since = undefined, limit = undefined, params = {}) {
2295
+ await this.loadMarkets();
2296
+ const request = {};
2297
+ let currency = undefined;
2298
+ if (code !== undefined) {
2299
+ currency = this.currency(code);
2300
+ request['balance_token'] = currency['id'];
2301
+ }
2302
+ if (since !== undefined) {
2303
+ request['start_t'] = since;
2304
+ }
2305
+ if (limit !== undefined) {
2306
+ request['pageSize'] = limit;
2307
+ }
2308
+ const transactionType = this.safeString(params, 'type');
2309
+ params = this.omit(params, 'type');
2310
+ if (transactionType !== undefined) {
2311
+ request['type'] = transactionType;
2312
+ }
2313
+ const response = await this.v1PrivateGetAssetHistory(this.extend(request, params));
2314
+ //
2315
+ // {
2316
+ // "success": true,
2317
+ // "timestamp": 1702989203989,
2318
+ // "data": {
2319
+ // "meta": {
2320
+ // "total": 9,
2321
+ // "records_per_page": 25,
2322
+ // "current_page": 1
2323
+ // },
2324
+ // "rows": [{
2325
+ // "id": "230707030600002",
2326
+ // "tx_id": "0x4b0714c63cc7abae72bf68e84e25860b88ca651b7d27dad1e32bf4c027fa5326",
2327
+ // "side": "WITHDRAW",
2328
+ // "token": "USDC",
2329
+ // "amount": 555,
2330
+ // "fee": 123,
2331
+ // "trans_status": "FAILED",
2332
+ // "created_time": 1688699193034,
2333
+ // "updated_time": 1688699193096,
2334
+ // "chain_id": "986532"
2335
+ // }]
2336
+ // }
2337
+ // }
2338
+ //
2339
+ const data = this.safeDict(response, 'data', {});
2340
+ return [currency, this.safeList(data, 'rows', [])];
2341
+ }
2342
+ parseLedgerEntry(item, currency = undefined) {
2343
+ const currencyId = this.safeString(item, 'token');
2344
+ const code = this.safeCurrencyCode(currencyId, currency);
2345
+ currency = this.safeCurrency(currencyId, currency);
2346
+ const amount = this.safeNumber(item, 'amount');
2347
+ const side = this.safeString(item, 'token_side');
2348
+ const direction = (side === 'DEPOSIT') ? 'in' : 'out';
2349
+ const timestamp = this.safeInteger(item, 'created_time');
2350
+ const fee = this.parseTokenAndFeeTemp(item, 'fee_token', 'fee_amount');
2351
+ return this.safeLedgerEntry({
2352
+ 'id': this.safeString(item, 'id'),
2353
+ 'currency': code,
2354
+ 'account': this.safeString(item, 'account'),
2355
+ 'referenceAccount': undefined,
2356
+ 'referenceId': this.safeString(item, 'tx_id'),
2357
+ 'status': this.parseTransactionStatus(this.safeString(item, 'status')),
2358
+ 'amount': amount,
2359
+ 'before': undefined,
2360
+ 'after': undefined,
2361
+ 'fee': fee,
2362
+ 'direction': direction,
2363
+ 'timestamp': timestamp,
2364
+ 'datetime': this.iso8601(timestamp),
2365
+ 'type': this.parseLedgerEntryType(this.safeString(item, 'type')),
2366
+ 'info': item,
2367
+ }, currency);
2368
+ }
2369
+ parseLedgerEntryType(type) {
2370
+ const types = {
2371
+ 'BALANCE': 'transaction',
2372
+ 'COLLATERAL': 'transfer', // Funds moved between portfolios
2373
+ };
2374
+ return this.safeString(types, type, type);
2375
+ }
2376
+ /**
2377
+ * @method
2378
+ * @name woofipro#fetchLedger
2379
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
2380
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-asset-history
2381
+ * @param {string} [code] unified currency code, default is undefined
2382
+ * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
2383
+ * @param {int} [limit] max number of ledger entries to return, default is undefined
2384
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2385
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
2386
+ */
2387
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
2388
+ const currencyRows = await this.getAssetHistoryRows(code, since, limit, params);
2389
+ const currency = this.safeValue(currencyRows, 0);
2390
+ const rows = this.safeList(currencyRows, 1);
2391
+ return this.parseLedger(rows, currency, since, limit, params);
2392
+ }
2393
+ parseTransaction(transaction, currency = undefined) {
2394
+ // example in fetchLedger
2395
+ const code = this.safeString(transaction, 'token');
2396
+ let movementDirection = this.safeStringLower(transaction, 'token_side');
2397
+ if (movementDirection === 'withdraw') {
2398
+ movementDirection = 'withdrawal';
2399
+ }
2400
+ const fee = this.parseTokenAndFeeTemp(transaction, 'fee_token', 'fee_amount');
2401
+ const addressTo = this.safeString(transaction, 'target_address');
2402
+ const addressFrom = this.safeString(transaction, 'source_address');
2403
+ const timestamp = this.safeInteger(transaction, 'created_time');
2404
+ return {
2405
+ 'info': transaction,
2406
+ 'id': this.safeString2(transaction, 'id', 'withdraw_id'),
2407
+ 'txid': this.safeString(transaction, 'tx_id'),
2408
+ 'timestamp': timestamp,
2409
+ 'datetime': this.iso8601(timestamp),
2410
+ 'address': undefined,
2411
+ 'addressFrom': addressFrom,
2412
+ 'addressTo': addressTo,
2413
+ 'tag': this.safeString(transaction, 'extra'),
2414
+ 'tagFrom': undefined,
2415
+ 'tagTo': undefined,
2416
+ 'type': movementDirection,
2417
+ 'amount': this.safeNumber(transaction, 'amount'),
2418
+ 'currency': code,
2419
+ 'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
2420
+ 'updated': this.safeInteger(transaction, 'updated_time'),
2421
+ 'comment': undefined,
2422
+ 'internal': undefined,
2423
+ 'fee': fee,
2424
+ 'network': undefined,
2425
+ };
2426
+ }
2427
+ parseTransactionStatus(status) {
2428
+ const statuses = {
2429
+ 'NEW': 'pending',
2430
+ 'CONFIRMING': 'pending',
2431
+ 'PROCESSING': 'pending',
2432
+ 'COMPLETED': 'ok',
2433
+ 'CANCELED': 'canceled',
2434
+ };
2435
+ return this.safeString(statuses, status, status);
2436
+ }
2437
+ /**
2438
+ * @method
2439
+ * @name woofipro#fetchDeposits
2440
+ * @description fetch all deposits made to an account
2441
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-asset-history
2442
+ * @param {string} code unified currency code
2443
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2444
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2445
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2446
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2447
+ */
2448
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2449
+ const request = {
2450
+ 'side': 'DEPOSIT',
2451
+ };
2452
+ return await this.fetchDepositsWithdrawals(code, since, limit, this.extend(request, params));
2453
+ }
2454
+ /**
2455
+ * @method
2456
+ * @name woofipro#fetchWithdrawals
2457
+ * @description fetch all withdrawals made from an account
2458
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-asset-history
2459
+ * @param {string} code unified currency code
2460
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2461
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2462
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2463
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2464
+ */
2465
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2466
+ const request = {
2467
+ 'side': 'WITHDRAW',
2468
+ };
2469
+ return await this.fetchDepositsWithdrawals(code, since, limit, this.extend(request, params));
2470
+ }
2471
+ /**
2472
+ * @method
2473
+ * @name woofipro#fetchDepositsWithdrawals
2474
+ * @description fetch history of deposits and withdrawals
2475
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-asset-history
2476
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
2477
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
2478
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
2479
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2480
+ * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2481
+ */
2482
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2483
+ const request = {};
2484
+ const currencyRows = await this.getAssetHistoryRows(code, since, limit, this.extend(request, params));
2485
+ const currency = this.safeValue(currencyRows, 0);
2486
+ const rows = this.safeList(currencyRows, 1);
2487
+ //
2488
+ // {
2489
+ // "rows":[],
2490
+ // "meta":{
2491
+ // "total":0,
2492
+ // "records_per_page":25,
2493
+ // "current_page":1
2494
+ // },
2495
+ // "success":true
2496
+ // }
2497
+ //
2498
+ return this.parseTransactions(rows, currency, since, limit, params);
2499
+ }
2500
+ async getWithdrawNonce(params = {}) {
2501
+ const response = await this.v1PrivateGetWithdrawNonce(params);
2502
+ //
2503
+ // {
2504
+ // "success": true,
2505
+ // "timestamp": 1702989203989,
2506
+ // "data": {
2507
+ // "withdraw_nonce": 1
2508
+ // }
2509
+ // }
2510
+ //
2511
+ const data = this.safeDict(response, 'data', {});
2512
+ return this.safeNumber(data, 'withdraw_nonce');
2513
+ }
2514
+ hashMessage(message) {
2515
+ return '0x' + this.hash(message, keccak, 'hex');
2516
+ }
2517
+ signHash(hash, privateKey) {
2518
+ const signature = ecdsa(hash.slice(-64), privateKey.slice(-64), secp256k1, undefined);
2519
+ const r = signature['r'];
2520
+ const s = signature['s'];
2521
+ const v = this.intToBase16(this.sum(27, signature['v']));
2522
+ return '0x' + r.padStart(64, '0') + s.padStart(64, '0') + v;
2523
+ }
2524
+ signMessage(message, privateKey) {
2525
+ return this.signHash(this.hashMessage(message), privateKey.slice(-64));
2526
+ }
2527
+ /**
2528
+ * @method
2529
+ * @name woofipro#withdraw
2530
+ * @description make a withdrawal
2531
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/create-withdraw-request
2532
+ * @param {string} code unified currency code
2533
+ * @param {float} amount the amount to withdraw
2534
+ * @param {string} address the address to withdraw to
2535
+ * @param {string} tag
2536
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2537
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2538
+ */
2539
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2540
+ await this.loadMarkets();
2541
+ this.checkAddress(address);
2542
+ if (code !== undefined) {
2543
+ code = code.toUpperCase();
2544
+ if (code !== 'USDC') {
2545
+ throw new NotSupported(this.id + ' withdraw() only support USDC');
2546
+ }
2547
+ }
2548
+ const currency = this.currency(code);
2549
+ const verifyingContractAddress = this.safeString(this.options, 'verifyingContractAddress');
2550
+ const chainId = this.safeString(params, 'chainId');
2551
+ const currencyNetworks = this.safeDict(currency, 'networks', {});
2552
+ const coinNetwork = this.safeDict(currencyNetworks, chainId, {});
2553
+ const coinNetworkId = this.safeNumber(coinNetwork, 'id');
2554
+ if (coinNetworkId === undefined) {
2555
+ throw new BadRequest(this.id + ' withdraw() require chainId parameter');
2556
+ }
2557
+ const withdrawNonce = await this.getWithdrawNonce(params);
2558
+ const nonce = this.nonce();
2559
+ const domain = {
2560
+ 'chainId': chainId,
2561
+ 'name': 'Orderly',
2562
+ 'verifyingContract': verifyingContractAddress,
2563
+ 'version': '1',
2564
+ };
2565
+ const messageTypes = {
2566
+ 'Withdraw': [
2567
+ { 'name': 'brokerId', 'type': 'string' },
2568
+ { 'name': 'chainId', 'type': 'uint256' },
2569
+ { 'name': 'receiver', 'type': 'address' },
2570
+ { 'name': 'token', 'type': 'string' },
2571
+ { 'name': 'amount', 'type': 'uint256' },
2572
+ { 'name': 'withdrawNonce', 'type': 'uint64' },
2573
+ { 'name': 'timestamp', 'type': 'uint64' },
2574
+ ],
2575
+ };
2576
+ const withdrawRequest = {
2577
+ 'brokerId': this.safeString(this.options, 'keyBrokerId', 'woofi_pro'),
2578
+ 'chainId': this.parseToInt(chainId),
2579
+ 'receiver': address,
2580
+ 'token': code,
2581
+ 'amount': amount.toString(),
2582
+ 'withdrawNonce': withdrawNonce,
2583
+ 'timestamp': nonce,
2584
+ };
2585
+ const msg = this.ethEncodeStructuredData(domain, messageTypes, withdrawRequest);
2586
+ const signature = this.signMessage(msg, this.privateKey);
2587
+ const request = {
2588
+ 'signature': signature,
2589
+ 'userAddress': address,
2590
+ 'verifyingContract': verifyingContractAddress,
2591
+ 'message': withdrawRequest,
2592
+ };
2593
+ params = this.omit(params, 'chainId');
2594
+ const response = await this.v1PrivatePostWithdrawRequest(this.extend(request, params));
2595
+ //
2596
+ // {
2597
+ // "success": true,
2598
+ // "timestamp": 1702989203989,
2599
+ // "data": {
2600
+ // "withdraw_id": 123
2601
+ // }
2602
+ // }
2603
+ //
2604
+ const data = this.safeDict(response, 'data', {});
2605
+ return this.parseTransaction(data, currency);
2606
+ }
2607
+ parseLeverage(leverage, market = undefined) {
2608
+ const leverageValue = this.safeInteger(leverage, 'max_leverage');
2609
+ return {
2610
+ 'info': leverage,
2611
+ 'symbol': market['symbol'],
2612
+ 'marginMode': undefined,
2613
+ 'longLeverage': leverageValue,
2614
+ 'shortLeverage': leverageValue,
2615
+ };
2616
+ }
2617
+ /**
2618
+ * @method
2619
+ * @name woofipro#fetchLeverage
2620
+ * @description fetch the set leverage for a market
2621
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-account-information
2622
+ * @param {string} symbol unified market symbol
2623
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2624
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2625
+ */
2626
+ async fetchLeverage(symbol, params = {}) {
2627
+ await this.loadMarkets();
2628
+ const market = this.market(symbol);
2629
+ const response = await this.v1PrivateGetClientInfo(params);
2630
+ //
2631
+ // {
2632
+ // "success": true,
2633
+ // "timestamp": 1702989203989,
2634
+ // "data": {
2635
+ // "account_id": "<string>",
2636
+ // "email": "test@test.com",
2637
+ // "account_mode": "FUTURES",
2638
+ // "max_leverage": 20,
2639
+ // "taker_fee_rate": 123,
2640
+ // "maker_fee_rate": 123,
2641
+ // "futures_taker_fee_rate": 123,
2642
+ // "futures_maker_fee_rate": 123,
2643
+ // "maintenance_cancel_orders": true,
2644
+ // "imr_factor": {
2645
+ // "PERP_BTC_USDC": 123,
2646
+ // "PERP_ETH_USDC": 123,
2647
+ // "PERP_NEAR_USDC": 123
2648
+ // },
2649
+ // "max_notional": {
2650
+ // "PERP_BTC_USDC": 123,
2651
+ // "PERP_ETH_USDC": 123,
2652
+ // "PERP_NEAR_USDC": 123
2653
+ // }
2654
+ // }
2655
+ // }
2656
+ //
2657
+ const data = this.safeDict(response, 'data', {});
2658
+ return this.parseLeverage(data, market);
2659
+ }
2660
+ /**
2661
+ * @method
2662
+ * @name woofipro#setLeverage
2663
+ * @description set the level of leverage for a market
2664
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/update-leverage-setting
2665
+ * @param {int} [leverage] the rate of leverage
2666
+ * @param {string} [symbol] unified market symbol
2667
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2668
+ * @returns {object} response from the exchange
2669
+ */
2670
+ async setLeverage(leverage, symbol = undefined, params = {}) {
2671
+ await this.loadMarkets();
2672
+ if ((leverage < 1) || (leverage > 50)) {
2673
+ throw new BadRequest(this.id + ' leverage should be between 1 and 50');
2674
+ }
2675
+ const request = {
2676
+ 'leverage': leverage,
2677
+ };
2678
+ return await this.v1PrivatePostClientLeverage(this.extend(request, params));
2679
+ }
2680
+ parsePosition(position, market = undefined) {
2681
+ //
2682
+ // {
2683
+ // "IMR_withdraw_orders": 0.1,
2684
+ // "MMR_with_orders": 0.05,
2685
+ // "average_open_price": 27908.14386047,
2686
+ // "cost_position": -139329.358492,
2687
+ // "est_liq_price": 117335.92899428,
2688
+ // "fee_24_h": 123,
2689
+ // "imr": 0.1,
2690
+ // "last_sum_unitary_funding": 70.38,
2691
+ // "mark_price": 27794.9,
2692
+ // "mmr": 0.05,
2693
+ // "pending_long_qty": 123,
2694
+ // "pending_short_qty": 123,
2695
+ // "pnl_24_h": 123,
2696
+ // "position_qty": -5,
2697
+ // "settle_price": 27865.8716984,
2698
+ // "symbol": "PERP_BTC_USDC",
2699
+ // "timestamp": 1685429350571,
2700
+ // "unsettled_pnl": 354.858492
2701
+ // }
2702
+ //
2703
+ const contract = this.safeString(position, 'symbol');
2704
+ market = this.safeMarket(contract, market);
2705
+ let size = this.safeString(position, 'position_qty');
2706
+ let side = undefined;
2707
+ if (Precise.stringGt(size, '0')) {
2708
+ side = 'long';
2709
+ }
2710
+ else {
2711
+ side = 'short';
2712
+ }
2713
+ const contractSize = this.safeString(market, 'contractSize');
2714
+ const markPrice = this.safeString(position, 'mark_price');
2715
+ const timestamp = this.safeInteger(position, 'timestamp');
2716
+ const entryPrice = this.safeString(position, 'average_open_price');
2717
+ const unrealisedPnl = this.safeString(position, 'unsettled_pnl');
2718
+ size = Precise.stringAbs(size);
2719
+ const notional = Precise.stringMul(size, markPrice);
2720
+ return this.safePosition({
2721
+ 'info': position,
2722
+ 'id': undefined,
2723
+ 'symbol': this.safeString(market, 'symbol'),
2724
+ 'timestamp': timestamp,
2725
+ 'datetime': this.iso8601(timestamp),
2726
+ 'lastUpdateTimestamp': undefined,
2727
+ 'initialMargin': undefined,
2728
+ 'initialMarginPercentage': undefined,
2729
+ 'maintenanceMargin': undefined,
2730
+ 'maintenanceMarginPercentage': undefined,
2731
+ 'entryPrice': this.parseNumber(entryPrice),
2732
+ 'notional': this.parseNumber(notional),
2733
+ 'leverage': undefined,
2734
+ 'unrealizedPnl': this.parseNumber(unrealisedPnl),
2735
+ 'contracts': this.parseNumber(size),
2736
+ 'contractSize': this.parseNumber(contractSize),
2737
+ 'marginRatio': undefined,
2738
+ 'liquidationPrice': this.safeNumber(position, 'est_liq_price'),
2739
+ 'markPrice': this.parseNumber(markPrice),
2740
+ 'lastPrice': undefined,
2741
+ 'collateral': undefined,
2742
+ 'marginMode': 'cross',
2743
+ 'marginType': undefined,
2744
+ 'side': side,
2745
+ 'percentage': undefined,
2746
+ 'hedged': undefined,
2747
+ 'stopLossPrice': undefined,
2748
+ 'takeProfitPrice': undefined,
2749
+ });
2750
+ }
2751
+ /**
2752
+ * @method
2753
+ * @name woofipro#fetchPosition
2754
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-one-position-info
2755
+ * @description fetch data on an open position
2756
+ * @param {string} symbol unified market symbol of the market the position is held in
2757
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2758
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2759
+ */
2760
+ async fetchPosition(symbol, params = {}) {
2761
+ await this.loadMarkets();
2762
+ const market = this.market(symbol);
2763
+ const request = {
2764
+ 'symbol': market['id'],
2765
+ };
2766
+ const response = await this.v1PrivateGetPositionSymbol(this.extend(request, params));
2767
+ //
2768
+ // {
2769
+ // "success": true,
2770
+ // "timestamp": 1702989203989,
2771
+ // "data": {
2772
+ // "IMR_withdraw_orders": 0.1,
2773
+ // "MMR_with_orders": 0.05,
2774
+ // "average_open_price": 27908.14386047,
2775
+ // "cost_position": -139329.358492,
2776
+ // "est_liq_price": 117335.92899428,
2777
+ // "fee_24_h": 123,
2778
+ // "imr": 0.1,
2779
+ // "last_sum_unitary_funding": 70.38,
2780
+ // "mark_price": 27794.9,
2781
+ // "mmr": 0.05,
2782
+ // "pending_long_qty": 123,
2783
+ // "pending_short_qty": 123,
2784
+ // "pnl_24_h": 123,
2785
+ // "position_qty": -5,
2786
+ // "settle_price": 27865.8716984,
2787
+ // "symbol": "PERP_BTC_USDC",
2788
+ // "timestamp": 1685429350571,
2789
+ // "unsettled_pnl": 354.858492
2790
+ // }
2791
+ // }
2792
+ //
2793
+ const data = this.safeDict(response, 'data');
2794
+ return this.parsePosition(data, market);
2795
+ }
2796
+ /**
2797
+ * @method
2798
+ * @name woofipro#fetchPositions
2799
+ * @description fetch all open positions
2800
+ * @see https://orderly.network/docs/build-on-evm/evm-api/restful-api/private/get-all-positions-info
2801
+ * @param {string[]} [symbols] list of unified market symbols
2802
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2803
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2804
+ */
2805
+ async fetchPositions(symbols = undefined, params = {}) {
2806
+ await this.loadMarkets();
2807
+ const response = await this.v1PrivateGetPositions(params);
2808
+ //
2809
+ // {
2810
+ // "success": true,
2811
+ // "timestamp": 1702989203989,
2812
+ // "data": {
2813
+ // "current_margin_ratio_with_orders": 1.2385,
2814
+ // "free_collateral": 450315.09115,
2815
+ // "initial_margin_ratio": 0.1,
2816
+ // "initial_margin_ratio_with_orders": 0.1,
2817
+ // "maintenance_margin_ratio": 0.05,
2818
+ // "maintenance_margin_ratio_with_orders": 0.05,
2819
+ // "margin_ratio": 1.2385,
2820
+ // "open_margin_ratio": 1.2102,
2821
+ // "total_collateral_value": 489865.71329,
2822
+ // "total_pnl_24_h": 123,
2823
+ // "rows": [{
2824
+ // "IMR_withdraw_orders": 0.1,
2825
+ // "MMR_with_orders": 0.05,
2826
+ // "average_open_price": 27908.14386047,
2827
+ // "cost_position": -139329.358492,
2828
+ // "est_liq_price": 117335.92899428,
2829
+ // "fee_24_h": 123,
2830
+ // "imr": 0.1,
2831
+ // "last_sum_unitary_funding": 70.38,
2832
+ // "mark_price": 27794.9,
2833
+ // "mmr": 0.05,
2834
+ // "pending_long_qty": 123,
2835
+ // "pending_short_qty": 123,
2836
+ // "pnl_24_h": 123,
2837
+ // "position_qty": -5,
2838
+ // "settle_price": 27865.8716984,
2839
+ // "symbol": "PERP_BTC_USDC",
2840
+ // "timestamp": 1685429350571,
2841
+ // "unsettled_pnl": 354.858492
2842
+ // }]
2843
+ // }
2844
+ // }
2845
+ //
2846
+ const result = this.safeDict(response, 'data', {});
2847
+ const positions = this.safeList(result, 'rows', []);
2848
+ return this.parsePositions(positions, symbols);
2849
+ }
2850
+ nonce() {
2851
+ return this.milliseconds();
2852
+ }
2853
+ sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2854
+ const version = section[0];
2855
+ const access = section[1];
2856
+ const pathWithParams = this.implodeParams(path, params);
2857
+ let url = this.implodeHostname(this.urls['api'][access]);
2858
+ url += '/' + version + '/';
2859
+ params = this.omit(params, this.extractParams(path));
2860
+ params = this.keysort(params);
2861
+ if (access === 'public') {
2862
+ url += pathWithParams;
2863
+ if (Object.keys(params).length) {
2864
+ url += '?' + this.urlencode(params);
2865
+ }
2866
+ }
2867
+ else {
2868
+ this.checkRequiredCredentials();
2869
+ if ((method === 'POST' || method === 'PUT') && (path === 'algo/order' || path === 'order' || path === 'batch-order')) {
2870
+ const isSandboxMode = this.safeBool(this.options, 'sandboxMode', false);
2871
+ if (!isSandboxMode) {
2872
+ const brokerId = this.safeString(this.options, 'brokerId', 'CCXT');
2873
+ if (path === 'batch-order') {
2874
+ const ordersList = this.safeList(params, 'orders', []);
2875
+ for (let i = 0; i < ordersList.length; i++) {
2876
+ params['orders'][i]['order_tag'] = brokerId;
2877
+ }
2878
+ }
2879
+ else {
2880
+ params['order_tag'] = brokerId;
2881
+ }
2882
+ }
2883
+ params = this.keysort(params);
2884
+ }
2885
+ let auth = '';
2886
+ const ts = this.nonce().toString();
2887
+ url += pathWithParams;
2888
+ let apiKey = this.apiKey;
2889
+ if (apiKey.indexOf('ed25519:') < 0) {
2890
+ apiKey = 'ed25519:' + apiKey;
2891
+ }
2892
+ headers = {
2893
+ 'orderly-account-id': this.accountId,
2894
+ 'orderly-key': apiKey,
2895
+ 'orderly-timestamp': ts,
2896
+ };
2897
+ auth = ts + method + '/' + version + '/' + pathWithParams;
2898
+ if (method === 'POST' || method === 'PUT') {
2899
+ body = this.json(params);
2900
+ auth += body;
2901
+ headers['content-type'] = 'application/json';
2902
+ }
2903
+ else {
2904
+ if (Object.keys(params).length) {
2905
+ url += '?' + this.urlencode(params);
2906
+ auth += '?' + this.rawencode(params);
2907
+ }
2908
+ headers['content-type'] = 'application/x-www-form-urlencoded';
2909
+ if (method === 'DELETE') {
2910
+ body = '';
2911
+ }
2912
+ }
2913
+ let secret = this.secret;
2914
+ if (secret.indexOf('ed25519:') >= 0) {
2915
+ const parts = secret.split('ed25519:');
2916
+ secret = parts[1];
2917
+ }
2918
+ const signature = eddsa(this.encode(auth), this.base58ToBinary(secret), ed25519);
2919
+ headers['orderly-signature'] = this.urlencodeBase64(this.base64ToBinary(signature));
2920
+ }
2921
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2922
+ }
2923
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2924
+ if (!response) {
2925
+ return undefined; // fallback to default error handler
2926
+ }
2927
+ //
2928
+ // 400 Bad Request {"success":false,"code":-1012,"message":"Amount is required for buy market orders when margin disabled."}
2929
+ // {"code":"-1011","message":"The system is under maintenance.","success":false}
2930
+ //
2931
+ const success = this.safeBool(response, 'success');
2932
+ const errorCode = this.safeString(response, 'code');
2933
+ if (!success) {
2934
+ const feedback = this.id + ' ' + this.json(response);
2935
+ this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
2936
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
2937
+ throw new ExchangeError(feedback);
2938
+ }
2939
+ return undefined;
2940
+ }
2941
+ }