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