ccxt-ir 4.9.32 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1059) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +7 -1
  4. package/dist/cjs/package.json +1 -1
  5. package/dist/cjs/src/abstract/asretether.js +11 -0
  6. package/dist/cjs/src/abstract/bidarz.js +11 -0
  7. package/dist/cjs/src/asretether.js +325 -0
  8. package/dist/cjs/src/bidarz.js +337 -0
  9. package/dist/cjs/src/bit24.js +4 -3
  10. package/dist/cjs/src/raastin.js +144 -16
  11. package/js/ccxt.d.ts +8 -2
  12. package/js/ccxt.js +6 -2
  13. package/js/src/abstract/asretether.d.ts +8 -0
  14. package/js/src/abstract/asretether.js +11 -0
  15. package/js/src/abstract/bidarz.d.ts +9 -0
  16. package/js/src/abstract/bidarz.js +11 -0
  17. package/js/src/abstract/raastin.d.ts +1 -0
  18. package/js/src/asretether.d.ts +21 -0
  19. package/js/src/asretether.js +324 -0
  20. package/js/src/bidarz.d.ts +22 -0
  21. package/js/src/bidarz.js +336 -0
  22. package/js/src/bit24.js +4 -3
  23. package/js/src/raastin.d.ts +2 -0
  24. package/js/src/raastin.js +144 -16
  25. package/js/src/src/abantether.d.ts +21 -0
  26. package/js/src/src/abantether.js +353 -0
  27. package/js/src/src/abstract/abantether.d.ts +8 -0
  28. package/js/src/src/abstract/abantether.js +11 -0
  29. package/js/src/src/abstract/afratether.d.ts +9 -0
  30. package/js/src/src/abstract/afratether.js +11 -0
  31. package/js/src/src/abstract/alpaca.d.ts +77 -0
  32. package/js/src/src/abstract/alpaca.js +11 -0
  33. package/js/src/src/abstract/apex.d.ts +34 -0
  34. package/js/src/src/abstract/apex.js +11 -0
  35. package/js/src/src/abstract/arzinja.d.ts +8 -0
  36. package/js/src/src/abstract/arzinja.js +11 -0
  37. package/js/src/src/abstract/arzplus.d.ts +11 -0
  38. package/js/src/src/abstract/arzplus.js +11 -0
  39. package/js/src/src/abstract/ascendex.d.ts +80 -0
  40. package/js/src/src/abstract/ascendex.js +11 -0
  41. package/js/src/src/abstract/asretether.d.ts +8 -0
  42. package/js/src/src/abstract/asretether.js +11 -0
  43. package/js/src/src/abstract/bidarz.d.ts +9 -0
  44. package/js/src/src/abstract/bidarz.js +11 -0
  45. package/js/src/src/abstract/bigone.d.ts +48 -0
  46. package/js/src/src/abstract/bigone.js +11 -0
  47. package/js/src/src/abstract/binance.d.ts +773 -0
  48. package/js/src/src/abstract/binance.js +11 -0
  49. package/js/src/src/abstract/bingx.d.ts +165 -0
  50. package/js/src/src/abstract/bingx.js +11 -0
  51. package/js/src/src/abstract/bit24.d.ts +9 -0
  52. package/js/src/src/abstract/bit24.js +11 -0
  53. package/js/src/src/abstract/bit2c.d.ts +30 -0
  54. package/js/src/src/abstract/bit2c.js +11 -0
  55. package/js/src/src/abstract/bitbank.d.ts +35 -0
  56. package/js/src/src/abstract/bitbank.js +11 -0
  57. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  58. package/js/src/src/abstract/bitbarg.js +11 -0
  59. package/js/src/src/abstract/bitbns.d.ts +43 -0
  60. package/js/src/src/abstract/bitbns.js +11 -0
  61. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  62. package/js/src/src/abstract/bitfinex.js +11 -0
  63. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  64. package/js/src/src/abstract/bitflyer.js +11 -0
  65. package/js/src/src/abstract/bitget.d.ts +578 -0
  66. package/js/src/src/abstract/bitget.js +11 -0
  67. package/js/src/src/abstract/bithumb.d.ts +35 -0
  68. package/js/src/src/abstract/bithumb.js +11 -0
  69. package/js/src/src/abstract/bitimen.d.ts +10 -0
  70. package/js/src/src/abstract/bitimen.js +11 -0
  71. package/js/src/src/abstract/bitir.d.ts +10 -0
  72. package/js/src/src/abstract/bitir.js +11 -0
  73. package/js/src/src/abstract/bitmart.d.ts +120 -0
  74. package/js/src/src/abstract/bitmart.js +11 -0
  75. package/js/src/src/abstract/bitmex.d.ts +100 -0
  76. package/js/src/src/abstract/bitmex.js +11 -0
  77. package/js/src/src/abstract/bitopro.d.ts +33 -0
  78. package/js/src/src/abstract/bitopro.js +11 -0
  79. package/js/src/src/abstract/bitpin.d.ts +11 -0
  80. package/js/src/src/abstract/bitpin.js +11 -0
  81. package/js/src/src/abstract/bitrue.d.ts +75 -0
  82. package/js/src/src/abstract/bitrue.js +11 -0
  83. package/js/src/src/abstract/bitso.d.ts +46 -0
  84. package/js/src/src/abstract/bitso.js +11 -0
  85. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  86. package/js/src/src/abstract/bitstamp.js +11 -0
  87. package/js/src/src/abstract/bitteam.d.ts +32 -0
  88. package/js/src/src/abstract/bitteam.js +11 -0
  89. package/js/src/src/abstract/bittrade.d.ts +117 -0
  90. package/js/src/src/abstract/bittrade.js +11 -0
  91. package/js/src/src/abstract/bitunix.d.ts +9 -0
  92. package/js/src/src/abstract/bitunix.js +11 -0
  93. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  94. package/js/src/src/abstract/bitvavo.js +11 -0
  95. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  96. package/js/src/src/abstract/blockchaincom.js +11 -0
  97. package/js/src/src/abstract/blofin.d.ts +70 -0
  98. package/js/src/src/abstract/blofin.js +11 -0
  99. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  100. package/js/src/src/abstract/btcalpha.js +11 -0
  101. package/js/src/src/abstract/btcbox.d.ts +18 -0
  102. package/js/src/src/abstract/btcbox.js +11 -0
  103. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  104. package/js/src/src/abstract/btcmarkets.js +11 -0
  105. package/js/src/src/abstract/btcturk.d.ts +23 -0
  106. package/js/src/src/abstract/btcturk.js +11 -0
  107. package/js/src/src/abstract/bybit.d.ts +316 -0
  108. package/js/src/src/abstract/bybit.js +11 -0
  109. package/js/src/src/abstract/bydfi.d.ts +11 -0
  110. package/js/src/src/abstract/bydfi.js +11 -0
  111. package/js/src/src/abstract/cafearz.d.ts +8 -0
  112. package/js/src/src/abstract/cafearz.js +11 -0
  113. package/js/src/src/abstract/cex.d.ts +35 -0
  114. package/js/src/src/abstract/cex.js +11 -0
  115. package/js/src/src/abstract/coinbase.d.ts +97 -0
  116. package/js/src/src/abstract/coinbase.js +11 -0
  117. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  118. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  119. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  120. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  121. package/js/src/src/abstract/coincatch.d.ts +97 -0
  122. package/js/src/src/abstract/coincatch.js +11 -0
  123. package/js/src/src/abstract/coincheck.d.ts +36 -0
  124. package/js/src/src/abstract/coincheck.js +11 -0
  125. package/js/src/src/abstract/coinex.d.ts +240 -0
  126. package/js/src/src/abstract/coinex.js +11 -0
  127. package/js/src/src/abstract/coinmate.d.ts +65 -0
  128. package/js/src/src/abstract/coinmate.js +11 -0
  129. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  130. package/js/src/src/abstract/coinmetro.js +11 -0
  131. package/js/src/src/abstract/coinone.d.ts +70 -0
  132. package/js/src/src/abstract/coinone.js +11 -0
  133. package/js/src/src/abstract/coinsph.d.ts +57 -0
  134. package/js/src/src/abstract/coinsph.js +11 -0
  135. package/js/src/src/abstract/coinspot.d.ts +31 -0
  136. package/js/src/src/abstract/coinspot.js +11 -0
  137. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  138. package/js/src/src/abstract/cryptocom.js +11 -0
  139. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  140. package/js/src/src/abstract/cryptomus.js +11 -0
  141. package/js/src/src/abstract/defx.d.ts +72 -0
  142. package/js/src/src/abstract/defx.js +11 -0
  143. package/js/src/src/abstract/delta.d.ts +53 -0
  144. package/js/src/src/abstract/delta.js +11 -0
  145. package/js/src/src/abstract/deribit.d.ts +129 -0
  146. package/js/src/src/abstract/deribit.js +11 -0
  147. package/js/src/src/abstract/derive.d.ts +120 -0
  148. package/js/src/src/abstract/derive.js +11 -0
  149. package/js/src/src/abstract/digifinex.d.ts +95 -0
  150. package/js/src/src/abstract/digifinex.js +11 -0
  151. package/js/src/src/abstract/ellipx.d.ts +28 -0
  152. package/js/src/src/abstract/ellipx.js +11 -0
  153. package/js/src/src/abstract/eterex.d.ts +8 -0
  154. package/js/src/src/abstract/eterex.js +11 -0
  155. package/js/src/src/abstract/excoino.d.ts +10 -0
  156. package/js/src/src/abstract/excoino.js +11 -0
  157. package/js/src/src/abstract/exir.d.ts +11 -0
  158. package/js/src/src/abstract/exir.js +11 -0
  159. package/js/src/src/abstract/exmo.d.ts +58 -0
  160. package/js/src/src/abstract/exmo.js +11 -0
  161. package/js/src/src/abstract/exnovin.d.ts +9 -0
  162. package/js/src/src/abstract/exnovin.js +11 -0
  163. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  164. package/js/src/src/abstract/farhadexchange.js +11 -0
  165. package/js/src/src/abstract/foxbit.d.ts +29 -0
  166. package/js/src/src/abstract/foxbit.js +11 -0
  167. package/js/src/src/abstract/gate.d.ts +287 -0
  168. package/js/src/src/abstract/gate.js +11 -0
  169. package/js/src/src/abstract/gemini.d.ts +62 -0
  170. package/js/src/src/abstract/gemini.js +11 -0
  171. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  172. package/js/src/src/abstract/hamtapay.js +11 -0
  173. package/js/src/src/abstract/hashkey.d.ts +70 -0
  174. package/js/src/src/abstract/hashkey.js +11 -0
  175. package/js/src/src/abstract/hibachi.d.ts +29 -0
  176. package/js/src/src/abstract/hibachi.js +11 -0
  177. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  178. package/js/src/src/abstract/hitbtc.js +11 -0
  179. package/js/src/src/abstract/hitobit.d.ts +11 -0
  180. package/js/src/src/abstract/hitobit.js +11 -0
  181. package/js/src/src/abstract/hollaex.d.ts +36 -0
  182. package/js/src/src/abstract/hollaex.js +11 -0
  183. package/js/src/src/abstract/htx.d.ts +551 -0
  184. package/js/src/src/abstract/htx.js +11 -0
  185. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  186. package/js/src/src/abstract/hyperliquid.js +11 -0
  187. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  188. package/js/src/src/abstract/independentreserve.js +11 -0
  189. package/js/src/src/abstract/indodax.d.ts +29 -0
  190. package/js/src/src/abstract/indodax.js +11 -0
  191. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  192. package/js/src/src/abstract/iranexchange.js +11 -0
  193. package/js/src/src/abstract/jibitex.d.ts +10 -0
  194. package/js/src/src/abstract/jibitex.js +11 -0
  195. package/js/src/src/abstract/kcex.d.ts +10 -0
  196. package/js/src/src/abstract/kcex.js +11 -0
  197. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  198. package/js/src/src/abstract/kifpoolme.js +11 -0
  199. package/js/src/src/abstract/kraken.d.ts +61 -0
  200. package/js/src/src/abstract/kraken.js +11 -0
  201. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  202. package/js/src/src/abstract/krakenfutures.js +11 -0
  203. package/js/src/src/abstract/kucoin.d.ts +227 -0
  204. package/js/src/src/abstract/kucoin.js +11 -0
  205. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  206. package/js/src/src/abstract/kucoinfutures.js +11 -0
  207. package/js/src/src/abstract/latoken.d.ts +59 -0
  208. package/js/src/src/abstract/latoken.js +11 -0
  209. package/js/src/src/abstract/lbank.d.ts +65 -0
  210. package/js/src/src/abstract/lbank.js +11 -0
  211. package/js/src/src/abstract/luno.d.ts +41 -0
  212. package/js/src/src/abstract/luno.js +11 -0
  213. package/js/src/src/abstract/mazdax.d.ts +11 -0
  214. package/js/src/src/abstract/mazdax.js +11 -0
  215. package/js/src/src/abstract/mercado.d.ts +28 -0
  216. package/js/src/src/abstract/mercado.js +11 -0
  217. package/js/src/src/abstract/mexc.d.ts +183 -0
  218. package/js/src/src/abstract/mexc.js +11 -0
  219. package/js/src/src/abstract/modetrade.d.ts +122 -0
  220. package/js/src/src/abstract/modetrade.js +11 -0
  221. package/js/src/src/abstract/ndax.d.ts +100 -0
  222. package/js/src/src/abstract/ndax.js +11 -0
  223. package/js/src/src/abstract/nobitex.d.ts +10 -0
  224. package/js/src/src/abstract/nobitex.js +11 -0
  225. package/js/src/src/abstract/novadax.d.ts +32 -0
  226. package/js/src/src/abstract/novadax.js +11 -0
  227. package/js/src/src/abstract/oceanex.d.ts +30 -0
  228. package/js/src/src/abstract/oceanex.js +11 -0
  229. package/js/src/src/abstract/okcoin.d.ts +77 -0
  230. package/js/src/src/abstract/okcoin.js +11 -0
  231. package/js/src/src/abstract/okexchange.d.ts +11 -0
  232. package/js/src/src/abstract/okexchange.js +11 -0
  233. package/js/src/src/abstract/okx.d.ts +352 -0
  234. package/js/src/src/abstract/okx.js +11 -0
  235. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  236. package/js/src/src/abstract/ompfinex.js +11 -0
  237. package/js/src/src/abstract/onetrading.d.ts +26 -0
  238. package/js/src/src/abstract/onetrading.js +11 -0
  239. package/js/src/src/abstract/oxfun.d.ts +37 -0
  240. package/js/src/src/abstract/oxfun.js +11 -0
  241. package/js/src/src/abstract/p2b.d.ts +25 -0
  242. package/js/src/src/abstract/p2b.js +11 -0
  243. package/js/src/src/abstract/paradex.d.ts +66 -0
  244. package/js/src/src/abstract/paradex.js +11 -0
  245. package/js/src/src/abstract/paymium.d.ts +31 -0
  246. package/js/src/src/abstract/paymium.js +11 -0
  247. package/js/src/src/abstract/phemex.d.ts +120 -0
  248. package/js/src/src/abstract/phemex.js +11 -0
  249. package/js/src/src/abstract/pingi.d.ts +9 -0
  250. package/js/src/src/abstract/pingi.js +11 -0
  251. package/js/src/src/abstract/poloniex.d.ts +108 -0
  252. package/js/src/src/abstract/poloniex.js +11 -0
  253. package/js/src/src/abstract/pooleno.d.ts +8 -0
  254. package/js/src/src/abstract/pooleno.js +11 -0
  255. package/js/src/src/abstract/probit.d.ts +26 -0
  256. package/js/src/src/abstract/probit.js +11 -0
  257. package/js/src/src/abstract/raastin.d.ts +11 -0
  258. package/js/src/src/abstract/raastin.js +11 -0
  259. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  260. package/js/src/src/abstract/ramzinex.js +11 -0
  261. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  262. package/js/src/src/abstract/sarmayex.js +11 -0
  263. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  264. package/js/src/src/abstract/sarrafex.js +11 -0
  265. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  266. package/js/src/src/abstract/tabdeal.js +11 -0
  267. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  268. package/js/src/src/abstract/tehran_exchange.js +11 -0
  269. package/js/src/src/abstract/tetherland.d.ts +8 -0
  270. package/js/src/src/abstract/tetherland.js +11 -0
  271. package/js/src/src/abstract/timex.d.ts +65 -0
  272. package/js/src/src/abstract/timex.js +11 -0
  273. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  274. package/js/src/src/abstract/tokocrypto.js +11 -0
  275. package/js/src/src/abstract/toobit.d.ts +10 -0
  276. package/js/src/src/abstract/toobit.js +11 -0
  277. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  278. package/js/src/src/abstract/tradeogre.js +11 -0
  279. package/js/src/src/abstract/twox.d.ts +8 -0
  280. package/js/src/src/abstract/twox.js +11 -0
  281. package/js/src/src/abstract/ubitex.d.ts +10 -0
  282. package/js/src/src/abstract/ubitex.js +11 -0
  283. package/js/src/src/abstract/upbit.d.ts +58 -0
  284. package/js/src/src/abstract/upbit.js +11 -0
  285. package/js/src/src/abstract/vertex.d.ts +22 -0
  286. package/js/src/src/abstract/vertex.js +11 -0
  287. package/js/src/src/abstract/wallex.d.ts +11 -0
  288. package/js/src/src/abstract/wallex.js +11 -0
  289. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  290. package/js/src/src/abstract/wavesexchange.js +11 -0
  291. package/js/src/src/abstract/whitebit.d.ts +117 -0
  292. package/js/src/src/abstract/whitebit.js +11 -0
  293. package/js/src/src/abstract/woo.d.ts +144 -0
  294. package/js/src/src/abstract/woo.js +11 -0
  295. package/js/src/src/abstract/woofipro.d.ts +122 -0
  296. package/js/src/src/abstract/woofipro.js +11 -0
  297. package/js/src/src/abstract/xt.d.ts +160 -0
  298. package/js/src/src/abstract/xt.js +11 -0
  299. package/js/src/src/abstract/yobit.d.ts +19 -0
  300. package/js/src/src/abstract/yobit.js +11 -0
  301. package/js/src/src/abstract/zaif.d.ts +41 -0
  302. package/js/src/src/abstract/zaif.js +11 -0
  303. package/js/src/src/abstract/zonda.d.ts +56 -0
  304. package/js/src/src/abstract/zonda.js +11 -0
  305. package/js/src/src/afratether.d.ts +21 -0
  306. package/js/src/src/afratether.js +356 -0
  307. package/js/src/src/alpaca.d.ts +332 -0
  308. package/js/src/src/alpaca.js +1908 -0
  309. package/js/src/src/apex.d.ts +333 -0
  310. package/js/src/src/apex.js +1942 -0
  311. package/js/src/src/arzinja.d.ts +21 -0
  312. package/js/src/src/arzinja.js +298 -0
  313. package/js/src/src/arzplus.d.ts +26 -0
  314. package/js/src/src/arzplus.js +581 -0
  315. package/js/src/src/ascendex.d.ts +424 -0
  316. package/js/src/src/ascendex.js +3699 -0
  317. package/js/src/src/asretether.d.ts +21 -0
  318. package/js/src/src/asretether.js +324 -0
  319. package/js/src/src/base/Exchange.d.ts +926 -0
  320. package/js/src/src/base/Exchange.js +7399 -0
  321. package/js/src/src/base/Precise.d.ts +42 -0
  322. package/js/src/src/base/Precise.js +275 -0
  323. package/js/src/src/base/errors.d.ts +168 -0
  324. package/js/src/src/base/errors.js +255 -0
  325. package/js/src/src/base/functions/crypto.d.ts +16 -0
  326. package/js/src/src/base/functions/crypto.js +131 -0
  327. package/js/src/src/base/functions/encode.d.ts +4 -0
  328. package/js/src/src/base/functions/encode.js +32 -0
  329. package/js/src/src/base/functions/generic.d.ts +29 -0
  330. package/js/src/src/base/functions/generic.js +203 -0
  331. package/js/src/src/base/functions/misc.d.ts +9 -0
  332. package/js/src/src/base/functions/misc.js +101 -0
  333. package/js/src/src/base/functions/number.d.ts +27 -0
  334. package/js/src/src/base/functions/number.js +313 -0
  335. package/js/src/src/base/functions/platform.d.ts +7 -0
  336. package/js/src/src/base/functions/platform.js +27 -0
  337. package/js/src/src/base/functions/rsa.d.ts +5 -0
  338. package/js/src/src/base/functions/rsa.js +49 -0
  339. package/js/src/src/base/functions/string.d.ts +7 -0
  340. package/js/src/src/base/functions/string.js +44 -0
  341. package/js/src/src/base/functions/throttle.d.ts +6 -0
  342. package/js/src/src/base/functions/throttle.js +67 -0
  343. package/js/src/src/base/functions/time.d.ts +21 -0
  344. package/js/src/src/base/functions/time.js +171 -0
  345. package/js/src/src/base/functions/totp.d.ts +3 -0
  346. package/js/src/src/base/functions/totp.js +25 -0
  347. package/js/src/src/base/functions/type.d.ts +37 -0
  348. package/js/src/src/base/functions/type.js +179 -0
  349. package/js/src/src/base/functions.d.ts +10 -0
  350. package/js/src/src/base/functions.js +18 -0
  351. package/js/src/src/base/types.d.ts +586 -0
  352. package/js/src/src/base/types.js +7 -0
  353. package/js/src/src/base/ws/Cache.d.ts +27 -0
  354. package/js/src/src/base/ws/Cache.js +260 -0
  355. package/js/src/src/base/ws/Client.d.ts +53 -0
  356. package/js/src/src/base/ws/Client.js +307 -0
  357. package/js/src/src/base/ws/Future.d.ts +8 -0
  358. package/js/src/src/base/ws/Future.js +35 -0
  359. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  360. package/js/src/src/base/ws/OrderBook.js +130 -0
  361. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  362. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  363. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  364. package/js/src/src/base/ws/WsClient.js +69 -0
  365. package/js/src/src/bequant.d.ts +4 -0
  366. package/js/src/src/bequant.js +35 -0
  367. package/js/src/src/bidarz.d.ts +16 -0
  368. package/js/src/src/bidarz.js +327 -0
  369. package/js/src/src/bigone.d.ts +296 -0
  370. package/js/src/src/bigone.js +2340 -0
  371. package/js/src/src/binance.d.ts +1667 -0
  372. package/js/src/src/binance.js +14400 -0
  373. package/js/src/src/binancecoinm.d.ts +6 -0
  374. package/js/src/src/binancecoinm.js +51 -0
  375. package/js/src/src/binanceus.d.ts +4 -0
  376. package/js/src/src/binanceus.js +225 -0
  377. package/js/src/src/binanceusdm.d.ts +6 -0
  378. package/js/src/src/binanceusdm.js +63 -0
  379. package/js/src/src/bingx.d.ts +778 -0
  380. package/js/src/src/bingx.js +6705 -0
  381. package/js/src/src/bit24.d.ts +24 -0
  382. package/js/src/src/bit24.js +520 -0
  383. package/js/src/src/bit2c.d.ts +146 -0
  384. package/js/src/src/bit2c.js +1029 -0
  385. package/js/src/src/bitbank.d.ts +181 -0
  386. package/js/src/src/bitbank.js +1146 -0
  387. package/js/src/src/bitbarg.d.ts +21 -0
  388. package/js/src/src/bitbarg.js +312 -0
  389. package/js/src/src/bitbns.d.ts +184 -0
  390. package/js/src/src/bitbns.js +1288 -0
  391. package/js/src/src/bitfinex.d.ts +516 -0
  392. package/js/src/src/bitfinex.js +3951 -0
  393. package/js/src/src/bitflyer.d.ts +229 -0
  394. package/js/src/src/bitflyer.js +1209 -0
  395. package/js/src/src/bitget.d.ts +1109 -0
  396. package/js/src/src/bitget.js +11033 -0
  397. package/js/src/src/bithumb.d.ts +165 -0
  398. package/js/src/src/bithumb.js +1257 -0
  399. package/js/src/src/bitimen.d.ts +23 -0
  400. package/js/src/src/bitimen.js +424 -0
  401. package/js/src/src/bitir.d.ts +23 -0
  402. package/js/src/src/bitir.js +521 -0
  403. package/js/src/src/bitmart.d.ts +736 -0
  404. package/js/src/src/bitmart.js +5639 -0
  405. package/js/src/src/bitmex.d.ts +395 -0
  406. package/js/src/src/bitmex.js +3088 -0
  407. package/js/src/src/bitopro.d.ts +295 -0
  408. package/js/src/src/bitopro.js +1892 -0
  409. package/js/src/src/bitpin.d.ts +23 -0
  410. package/js/src/src/bitpin.js +487 -0
  411. package/js/src/src/bitrue.d.ts +384 -0
  412. package/js/src/src/bitrue.js +3382 -0
  413. package/js/src/src/bitso.d.ts +270 -0
  414. package/js/src/src/bitso.js +1881 -0
  415. package/js/src/src/bitstamp.d.ts +355 -0
  416. package/js/src/src/bitstamp.js +2445 -0
  417. package/js/src/src/bitteam.d.ts +229 -0
  418. package/js/src/src/bitteam.js +2420 -0
  419. package/js/src/src/bittrade.d.ts +298 -0
  420. package/js/src/src/bittrade.js +2050 -0
  421. package/js/src/src/bitunix.d.ts +21 -0
  422. package/js/src/src/bitunix.js +326 -0
  423. package/js/src/src/bitvavo.d.ts +311 -0
  424. package/js/src/src/bitvavo.js +2204 -0
  425. package/js/src/src/blockchaincom.d.ts +256 -0
  426. package/js/src/src/blockchaincom.js +1259 -0
  427. package/js/src/src/blofin.d.ts +439 -0
  428. package/js/src/src/blofin.js +2576 -0
  429. package/js/src/src/btcalpha.d.ts +209 -0
  430. package/js/src/src/btcalpha.js +1056 -0
  431. package/js/src/src/btcbox.d.ts +144 -0
  432. package/js/src/src/btcbox.js +834 -0
  433. package/js/src/src/btcmarkets.d.ts +253 -0
  434. package/js/src/src/btcmarkets.js +1418 -0
  435. package/js/src/src/btcturk.d.ts +161 -0
  436. package/js/src/src/btcturk.js +1058 -0
  437. package/js/src/src/bybit.d.ts +1097 -0
  438. package/js/src/src/bybit.js +9382 -0
  439. package/js/src/src/bydfi.d.ts +23 -0
  440. package/js/src/src/bydfi.js +434 -0
  441. package/js/src/src/cafearz.d.ts +21 -0
  442. package/js/src/src/cafearz.js +346 -0
  443. package/js/src/src/cex.d.ts +286 -0
  444. package/js/src/src/cex.js +1799 -0
  445. package/js/src/src/coinbase.d.ts +623 -0
  446. package/js/src/src/coinbase.js +5220 -0
  447. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  448. package/js/src/src/coinbaseadvanced.js +18 -0
  449. package/js/src/src/coinbaseexchange.d.ts +334 -0
  450. package/js/src/src/coinbaseexchange.js +2127 -0
  451. package/js/src/src/coinbaseinternational.d.ts +443 -0
  452. package/js/src/src/coinbaseinternational.js +2336 -0
  453. package/js/src/src/coincatch.d.ts +786 -0
  454. package/js/src/src/coincatch.js +5492 -0
  455. package/js/src/src/coincheck.d.ts +147 -0
  456. package/js/src/src/coincheck.js +962 -0
  457. package/js/src/src/coinex.d.ts +719 -0
  458. package/js/src/src/coinex.js +6166 -0
  459. package/js/src/src/coinmate.d.ts +202 -0
  460. package/js/src/src/coinmate.js +1215 -0
  461. package/js/src/src/coinmetro.d.ts +244 -0
  462. package/js/src/src/coinmetro.js +2024 -0
  463. package/js/src/src/coinone.d.ts +158 -0
  464. package/js/src/src/coinone.js +1278 -0
  465. package/js/src/src/coinsph.d.ts +310 -0
  466. package/js/src/src/coinsph.js +2203 -0
  467. package/js/src/src/coinspot.d.ts +108 -0
  468. package/js/src/src/coinspot.js +653 -0
  469. package/js/src/src/cryptocom.d.ts +463 -0
  470. package/js/src/src/cryptocom.js +3549 -0
  471. package/js/src/src/cryptomus.d.ts +158 -0
  472. package/js/src/src/cryptomus.js +1169 -0
  473. package/js/src/src/defx.d.ts +348 -0
  474. package/js/src/src/defx.js +2139 -0
  475. package/js/src/src/delta.d.ts +407 -0
  476. package/js/src/src/delta.js +3654 -0
  477. package/js/src/src/deribit.d.ts +516 -0
  478. package/js/src/src/deribit.js +3790 -0
  479. package/js/src/src/derive.d.ts +324 -0
  480. package/js/src/src/derive.js +2655 -0
  481. package/js/src/src/digifinex.d.ts +544 -0
  482. package/js/src/src/digifinex.js +4453 -0
  483. package/js/src/src/ellipx.d.ts +237 -0
  484. package/js/src/src/ellipx.js +2071 -0
  485. package/js/src/src/eterex.d.ts +21 -0
  486. package/js/src/src/eterex.js +299 -0
  487. package/js/src/src/excoino.d.ts +23 -0
  488. package/js/src/src/excoino.js +426 -0
  489. package/js/src/src/exir.d.ts +23 -0
  490. package/js/src/src/exir.js +403 -0
  491. package/js/src/src/exmo.d.ts +426 -0
  492. package/js/src/src/exmo.js +2825 -0
  493. package/js/src/src/exnovin.d.ts +22 -0
  494. package/js/src/src/exnovin.js +378 -0
  495. package/js/src/src/farhadexchange.d.ts +21 -0
  496. package/js/src/src/farhadexchange.js +280 -0
  497. package/js/src/src/fmfwio.d.ts +4 -0
  498. package/js/src/src/fmfwio.js +35 -0
  499. package/js/src/src/foxbit.d.ts +352 -0
  500. package/js/src/src/foxbit.js +2016 -0
  501. package/js/src/src/gate.d.ts +1071 -0
  502. package/js/src/src/gate.js +8282 -0
  503. package/js/src/src/gateio.d.ts +4 -0
  504. package/js/src/src/gateio.js +17 -0
  505. package/js/src/src/gemini.d.ts +257 -0
  506. package/js/src/src/gemini.js +2006 -0
  507. package/js/src/src/hamtapay.d.ts +21 -0
  508. package/js/src/src/hamtapay.js +303 -0
  509. package/js/src/src/hashkey.d.ts +628 -0
  510. package/js/src/src/hashkey.js +4363 -0
  511. package/js/src/src/hibachi.d.ts +346 -0
  512. package/js/src/src/hibachi.js +2137 -0
  513. package/js/src/src/hitbtc.d.ts +558 -0
  514. package/js/src/src/hitbtc.js +3847 -0
  515. package/js/src/src/hitobit.d.ts +23 -0
  516. package/js/src/src/hitobit.js +412 -0
  517. package/js/src/src/hollaex.d.ts +305 -0
  518. package/js/src/src/hollaex.js +2046 -0
  519. package/js/src/src/htx.d.ts +961 -0
  520. package/js/src/src/htx.js +9668 -0
  521. package/js/src/src/huobi.d.ts +4 -0
  522. package/js/src/src/huobi.js +17 -0
  523. package/js/src/src/hyperliquid.d.ts +651 -0
  524. package/js/src/src/hyperliquid.js +3937 -0
  525. package/js/src/src/independentreserve.d.ts +169 -0
  526. package/js/src/src/independentreserve.js +1115 -0
  527. package/js/src/src/indodax.d.ts +217 -0
  528. package/js/src/src/indodax.js +1454 -0
  529. package/js/src/src/iranexchange.d.ts +21 -0
  530. package/js/src/src/iranexchange.js +399 -0
  531. package/js/src/src/jibitex.d.ts +23 -0
  532. package/js/src/src/jibitex.js +416 -0
  533. package/js/src/src/kcex.d.ts +21 -0
  534. package/js/src/src/kcex.js +335 -0
  535. package/js/src/src/kifpoolme.d.ts +23 -0
  536. package/js/src/src/kifpoolme.js +410 -0
  537. package/js/src/src/kraken.d.ts +484 -0
  538. package/js/src/src/kraken.js +3518 -0
  539. package/js/src/src/krakenfutures.d.ts +362 -0
  540. package/js/src/src/krakenfutures.js +2885 -0
  541. package/js/src/src/kucoin.d.ts +759 -0
  542. package/js/src/src/kucoin.js +5153 -0
  543. package/js/src/src/kucoinfutures.d.ts +521 -0
  544. package/js/src/src/kucoinfutures.js +3381 -0
  545. package/js/src/src/latoken.d.ts +274 -0
  546. package/js/src/src/latoken.js +1824 -0
  547. package/js/src/src/lbank.d.ts +350 -0
  548. package/js/src/src/lbank.js +3146 -0
  549. package/js/src/src/luno.d.ts +252 -0
  550. package/js/src/src/luno.js +1479 -0
  551. package/js/src/src/mazdax.d.ts +23 -0
  552. package/js/src/src/mazdax.js +534 -0
  553. package/js/src/src/mercado.d.ts +160 -0
  554. package/js/src/src/mercado.js +1011 -0
  555. package/js/src/src/mexc.d.ts +768 -0
  556. package/js/src/src/mexc.js +6102 -0
  557. package/js/src/src/modetrade.d.ts +496 -0
  558. package/js/src/src/modetrade.js +2936 -0
  559. package/js/src/src/myokx.d.ts +4 -0
  560. package/js/src/src/myokx.js +54 -0
  561. package/js/src/src/ndax.d.ts +285 -0
  562. package/js/src/src/ndax.js +2598 -0
  563. package/js/src/src/nobitex.d.ts +23 -0
  564. package/js/src/src/nobitex.js +454 -0
  565. package/js/src/src/novadax.d.ts +279 -0
  566. package/js/src/src/novadax.js +1676 -0
  567. package/js/src/src/oceanex.d.ts +231 -0
  568. package/js/src/src/oceanex.js +1123 -0
  569. package/js/src/src/okcoin.d.ts +346 -0
  570. package/js/src/src/okcoin.js +3211 -0
  571. package/js/src/src/okexchange.d.ts +23 -0
  572. package/js/src/src/okexchange.js +373 -0
  573. package/js/src/src/okx.d.ts +1125 -0
  574. package/js/src/src/okx.js +9009 -0
  575. package/js/src/src/okxus.d.ts +4 -0
  576. package/js/src/src/okxus.js +54 -0
  577. package/js/src/src/ompfinex.d.ts +23 -0
  578. package/js/src/src/ompfinex.js +510 -0
  579. package/js/src/src/onetrading.d.ts +228 -0
  580. package/js/src/src/onetrading.js +1769 -0
  581. package/js/src/src/oxfun.d.ts +442 -0
  582. package/js/src/src/oxfun.js +2920 -0
  583. package/js/src/src/p2b.d.ts +189 -0
  584. package/js/src/src/p2b.js +1344 -0
  585. package/js/src/src/paradex.d.ts +389 -0
  586. package/js/src/src/paradex.js +2607 -0
  587. package/js/src/src/paymium.d.ts +133 -0
  588. package/js/src/src/paymium.js +644 -0
  589. package/js/src/src/phemex.d.ts +497 -0
  590. package/js/src/src/phemex.js +5333 -0
  591. package/js/src/src/pingi.d.ts +22 -0
  592. package/js/src/src/pingi.js +446 -0
  593. package/js/src/src/poloniex.d.ts +441 -0
  594. package/js/src/src/poloniex.js +3681 -0
  595. package/js/src/src/pooleno.d.ts +21 -0
  596. package/js/src/src/pooleno.js +347 -0
  597. package/js/src/src/pro/alpaca.d.ts +95 -0
  598. package/js/src/src/pro/alpaca.js +724 -0
  599. package/js/src/src/pro/apex.d.ts +160 -0
  600. package/js/src/src/pro/apex.js +1044 -0
  601. package/js/src/src/pro/ascendex.d.ts +99 -0
  602. package/js/src/src/pro/ascendex.js +1012 -0
  603. package/js/src/src/pro/bequant.d.ts +4 -0
  604. package/js/src/src/pro/bequant.js +42 -0
  605. package/js/src/src/pro/binance.d.ts +796 -0
  606. package/js/src/src/pro/binance.js +4373 -0
  607. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  608. package/js/src/src/pro/binancecoinm.js +32 -0
  609. package/js/src/src/pro/binanceus.d.ts +4 -0
  610. package/js/src/src/pro/binanceus.js +52 -0
  611. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  612. package/js/src/src/pro/binanceusdm.js +37 -0
  613. package/js/src/src/pro/bingx.d.ts +151 -0
  614. package/js/src/src/pro/bingx.js +1568 -0
  615. package/js/src/src/pro/bitfinex.d.ts +99 -0
  616. package/js/src/src/pro/bitfinex.js +1165 -0
  617. package/js/src/src/pro/bitget.d.ts +257 -0
  618. package/js/src/src/pro/bitget.js +2327 -0
  619. package/js/src/src/pro/bithumb.d.ts +59 -0
  620. package/js/src/src/pro/bithumb.js +395 -0
  621. package/js/src/src/pro/bitmart.d.ts +168 -0
  622. package/js/src/src/pro/bitmart.js +1686 -0
  623. package/js/src/src/pro/bitmex.d.ts +170 -0
  624. package/js/src/src/pro/bitmex.js +1760 -0
  625. package/js/src/src/pro/bitopro.d.ts +69 -0
  626. package/js/src/src/pro/bitopro.js +477 -0
  627. package/js/src/src/pro/bitrue.d.ts +40 -0
  628. package/js/src/src/pro/bitrue.js +461 -0
  629. package/js/src/src/pro/bitstamp.d.ts +53 -0
  630. package/js/src/src/pro/bitstamp.js +587 -0
  631. package/js/src/src/pro/bittrade.d.ts +66 -0
  632. package/js/src/src/pro/bittrade.js +606 -0
  633. package/js/src/src/pro/bitvavo.d.ts +321 -0
  634. package/js/src/src/pro/bitvavo.js +1451 -0
  635. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  636. package/js/src/src/pro/blockchaincom.js +777 -0
  637. package/js/src/src/pro/blofin.d.ts +174 -0
  638. package/js/src/src/pro/blofin.js +743 -0
  639. package/js/src/src/pro/bybit.d.ts +397 -0
  640. package/js/src/src/pro/bybit.js +2519 -0
  641. package/js/src/src/pro/cex.d.ts +220 -0
  642. package/js/src/src/pro/cex.js +1535 -0
  643. package/js/src/src/pro/coinbase.d.ts +119 -0
  644. package/js/src/src/pro/coinbase.js +736 -0
  645. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  646. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  647. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  648. package/js/src/src/pro/coinbaseexchange.js +969 -0
  649. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  650. package/js/src/src/pro/coinbaseinternational.js +804 -0
  651. package/js/src/src/pro/coincatch.d.ts +207 -0
  652. package/js/src/src/pro/coincatch.js +1562 -0
  653. package/js/src/src/pro/coincheck.d.ts +33 -0
  654. package/js/src/src/pro/coincheck.js +210 -0
  655. package/js/src/src/pro/coinex.d.ts +147 -0
  656. package/js/src/src/pro/coinex.js +1426 -0
  657. package/js/src/src/pro/coinone.d.ts +51 -0
  658. package/js/src/src/pro/coinone.js +413 -0
  659. package/js/src/src/pro/cryptocom.d.ts +300 -0
  660. package/js/src/src/pro/cryptocom.js +1414 -0
  661. package/js/src/src/pro/defx.d.ts +236 -0
  662. package/js/src/src/pro/defx.js +865 -0
  663. package/js/src/src/pro/deribit.d.ts +163 -0
  664. package/js/src/src/pro/deribit.js +1066 -0
  665. package/js/src/src/pro/derive.d.ts +100 -0
  666. package/js/src/src/pro/derive.js +753 -0
  667. package/js/src/src/pro/exmo.d.ts +97 -0
  668. package/js/src/src/pro/exmo.js +903 -0
  669. package/js/src/src/pro/gate.d.ts +360 -0
  670. package/js/src/src/pro/gate.js +2119 -0
  671. package/js/src/src/pro/gateio.d.ts +4 -0
  672. package/js/src/src/pro/gateio.js +17 -0
  673. package/js/src/src/pro/gemini.d.ts +106 -0
  674. package/js/src/src/pro/gemini.js +932 -0
  675. package/js/src/src/pro/hashkey.d.ts +121 -0
  676. package/js/src/src/pro/hashkey.js +843 -0
  677. package/js/src/src/pro/hitbtc.d.ts +235 -0
  678. package/js/src/src/pro/hitbtc.js +1400 -0
  679. package/js/src/src/pro/hollaex.d.ts +77 -0
  680. package/js/src/src/pro/hollaex.js +604 -0
  681. package/js/src/src/pro/htx.d.ts +141 -0
  682. package/js/src/src/pro/htx.js +2415 -0
  683. package/js/src/src/pro/huobi.d.ts +4 -0
  684. package/js/src/src/pro/huobi.js +17 -0
  685. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  686. package/js/src/src/pro/hyperliquid.js +1126 -0
  687. package/js/src/src/pro/independentreserve.d.ts +36 -0
  688. package/js/src/src/pro/independentreserve.js +287 -0
  689. package/js/src/src/pro/kraken.d.ts +233 -0
  690. package/js/src/src/pro/kraken.js +1785 -0
  691. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  692. package/js/src/src/pro/krakenfutures.js +1592 -0
  693. package/js/src/src/pro/kucoin.d.ts +221 -0
  694. package/js/src/src/pro/kucoin.js +1430 -0
  695. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  696. package/js/src/src/pro/kucoinfutures.js +1295 -0
  697. package/js/src/src/pro/lbank.d.ts +134 -0
  698. package/js/src/src/pro/lbank.js +950 -0
  699. package/js/src/src/pro/luno.d.ts +44 -0
  700. package/js/src/src/pro/luno.js +322 -0
  701. package/js/src/src/pro/mexc.d.ts +210 -0
  702. package/js/src/src/pro/mexc.js +2009 -0
  703. package/js/src/src/pro/modetrade.d.ts +155 -0
  704. package/js/src/src/pro/modetrade.js +1335 -0
  705. package/js/src/src/pro/myokx.d.ts +4 -0
  706. package/js/src/src/pro/myokx.js +39 -0
  707. package/js/src/src/pro/ndax.d.ts +60 -0
  708. package/js/src/src/pro/ndax.js +545 -0
  709. package/js/src/src/pro/okcoin.d.ts +91 -0
  710. package/js/src/src/pro/okcoin.js +763 -0
  711. package/js/src/src/pro/okx.d.ts +408 -0
  712. package/js/src/src/pro/okx.js +2479 -0
  713. package/js/src/src/pro/okxus.d.ts +4 -0
  714. package/js/src/src/pro/okxus.js +39 -0
  715. package/js/src/src/pro/onetrading.d.ts +107 -0
  716. package/js/src/src/pro/onetrading.js +1343 -0
  717. package/js/src/src/pro/oxfun.d.ts +234 -0
  718. package/js/src/src/pro/oxfun.js +1112 -0
  719. package/js/src/src/pro/p2b.d.ts +104 -0
  720. package/js/src/src/pro/p2b.js +506 -0
  721. package/js/src/src/pro/paradex.d.ts +54 -0
  722. package/js/src/src/pro/paradex.js +370 -0
  723. package/js/src/src/pro/phemex.d.ts +129 -0
  724. package/js/src/src/pro/phemex.js +1569 -0
  725. package/js/src/src/pro/poloniex.d.ts +214 -0
  726. package/js/src/src/pro/poloniex.js +1318 -0
  727. package/js/src/src/pro/probit.d.ts +91 -0
  728. package/js/src/src/pro/probit.js +593 -0
  729. package/js/src/src/pro/tradeogre.d.ts +49 -0
  730. package/js/src/src/pro/tradeogre.js +284 -0
  731. package/js/src/src/pro/upbit.d.ts +124 -0
  732. package/js/src/src/pro/upbit.js +689 -0
  733. package/js/src/src/pro/vertex.d.ts +104 -0
  734. package/js/src/src/pro/vertex.js +999 -0
  735. package/js/src/src/pro/whitebit.d.ts +123 -0
  736. package/js/src/src/pro/whitebit.js +971 -0
  737. package/js/src/src/pro/woo.d.ts +161 -0
  738. package/js/src/src/pro/woo.js +1351 -0
  739. package/js/src/src/pro/woofipro.d.ts +155 -0
  740. package/js/src/src/pro/woofipro.js +1335 -0
  741. package/js/src/src/pro/xt.d.ts +165 -0
  742. package/js/src/src/pro/xt.js +1230 -0
  743. package/js/src/src/probit.d.ts +283 -0
  744. package/js/src/src/probit.js +1935 -0
  745. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  746. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  747. package/js/src/src/raastin.d.ts +24 -0
  748. package/js/src/src/raastin.js +494 -0
  749. package/js/src/src/ramzinex.d.ts +23 -0
  750. package/js/src/src/ramzinex.js +510 -0
  751. package/js/src/src/sarmayex.d.ts +21 -0
  752. package/js/src/src/sarmayex.js +376 -0
  753. package/js/src/src/sarrafex.d.ts +23 -0
  754. package/js/src/src/sarrafex.js +501 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  756. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  758. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  760. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  762. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  764. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  766. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  768. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  770. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  772. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  774. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  776. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  778. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  780. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  782. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  784. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  786. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  788. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  790. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  792. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  794. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  796. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  797. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  798. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  799. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  800. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  801. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  802. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  806. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  808. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  810. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  812. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  814. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  816. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  818. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  820. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  826. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  828. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  830. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  832. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  833. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  834. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  838. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  860. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  862. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  878. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  880. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  882. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  884. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  890. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  892. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  894. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  896. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  904. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  906. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  910. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  912. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  916. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  917. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  918. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  919. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  920. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  921. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  922. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  923. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  924. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  925. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  926. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  927. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  928. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  930. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  931. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  932. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  933. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  934. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  936. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  938. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  940. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  950. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  952. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  954. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  960. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  994. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  996. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1010. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1012. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1014. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1016. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1017. package/js/src/src/tabdeal.d.ts +23 -0
  1018. package/js/src/src/tabdeal.js +387 -0
  1019. package/js/src/src/tehran_exchange.d.ts +21 -0
  1020. package/js/src/src/tehran_exchange.js +333 -0
  1021. package/js/src/src/tetherland.d.ts +21 -0
  1022. package/js/src/src/tetherland.js +367 -0
  1023. package/js/src/src/timex.d.ts +247 -0
  1024. package/js/src/src/timex.js +1792 -0
  1025. package/js/src/src/tokocrypto.d.ts +261 -0
  1026. package/js/src/src/tokocrypto.js +2641 -0
  1027. package/js/src/src/toobit.d.ts +22 -0
  1028. package/js/src/src/toobit.js +445 -0
  1029. package/js/src/src/tradeogre.d.ts +149 -0
  1030. package/js/src/src/tradeogre.js +878 -0
  1031. package/js/src/src/twox.d.ts +21 -0
  1032. package/js/src/src/twox.js +371 -0
  1033. package/js/src/src/ubitex.d.ts +23 -0
  1034. package/js/src/src/ubitex.js +433 -0
  1035. package/js/src/src/upbit.d.ts +377 -0
  1036. package/js/src/src/upbit.js +2340 -0
  1037. package/js/src/src/vertex.d.ts +346 -0
  1038. package/js/src/src/vertex.js +3146 -0
  1039. package/js/src/src/wallex.d.ts +23 -0
  1040. package/js/src/src/wallex.js +467 -0
  1041. package/js/src/src/wavesexchange.d.ts +244 -0
  1042. package/js/src/src/wavesexchange.js +2747 -0
  1043. package/js/src/src/whitebit.d.ts +571 -0
  1044. package/js/src/src/whitebit.js +3437 -0
  1045. package/js/src/src/woo.d.ts +727 -0
  1046. package/js/src/src/woo.js +4183 -0
  1047. package/js/src/src/woofipro.d.ts +497 -0
  1048. package/js/src/src/woofipro.js +2941 -0
  1049. package/js/src/src/xt.d.ts +568 -0
  1050. package/js/src/src/xt.js +5184 -0
  1051. package/js/src/src/yobit.d.ts +197 -0
  1052. package/js/src/src/yobit.js +1453 -0
  1053. package/js/src/src/zaif.d.ts +136 -0
  1054. package/js/src/src/zaif.js +821 -0
  1055. package/js/src/src/zonda.d.ts +214 -0
  1056. package/js/src/src/zonda.js +1984 -0
  1057. package/js/test.d.ts +1 -1
  1058. package/js/test.js +33 -33
  1059. package/package.json +1 -1
@@ -0,0 +1,2607 @@
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 { Precise } from './base/Precise.js';
9
+ import Exchange from './abstract/paradex.js';
10
+ import { ExchangeError, PermissionDenied, AuthenticationError, BadRequest, ArgumentsRequired, OperationRejected, InvalidOrder } from './base/errors.js';
11
+ import { TICK_SIZE } from './base/functions/number.js';
12
+ import { ecdsa } from './base/functions/crypto.js';
13
+ import { keccak_256 as keccak } from './static_dependencies/noble-hashes/sha3.js';
14
+ import { secp256k1 } from './static_dependencies/noble-curves/secp256k1.js';
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * @class paradex
18
+ * @description Paradex is a decentralized exchange built on the StarkWare layer 2 scaling solution. To access private methods you can either use the ETH public key and private key by setting (exchange.privateKey and exchange.walletAddress)
19
+ * or alternatively you can provide the startknet private key and public key by setting exchange.options['paradexAccount'] with add {"privateKey": A, "publicKey": B, "address": C}
20
+ * @augments Exchange
21
+ */
22
+ export default class paradex extends Exchange {
23
+ describe() {
24
+ return this.deepExtend(super.describe(), {
25
+ 'id': 'paradex',
26
+ 'name': 'Paradex',
27
+ 'countries': [],
28
+ 'version': 'v1',
29
+ 'rateLimit': 50,
30
+ 'certified': false,
31
+ 'pro': true,
32
+ 'dex': true,
33
+ 'has': {
34
+ 'CORS': undefined,
35
+ 'spot': false,
36
+ 'margin': false,
37
+ 'swap': true,
38
+ 'future': false,
39
+ 'option': false,
40
+ 'addMargin': false,
41
+ 'borrowCrossMargin': false,
42
+ 'borrowIsolatedMargin': false,
43
+ 'cancelAllOrders': true,
44
+ 'cancelAllOrdersAfter': false,
45
+ 'cancelOrder': false,
46
+ 'cancelOrders': false,
47
+ 'cancelOrdersForSymbols': false,
48
+ 'closeAllPositions': false,
49
+ 'closePosition': false,
50
+ 'createMarketBuyOrderWithCost': false,
51
+ 'createMarketOrderWithCost': false,
52
+ 'createMarketSellOrderWithCost': false,
53
+ 'createOrder': true,
54
+ 'createOrders': false,
55
+ 'createReduceOnlyOrder': false,
56
+ 'createStopOrder': true,
57
+ 'createTriggerOrder': true,
58
+ 'editOrder': false,
59
+ 'fetchAccounts': false,
60
+ 'fetchAllGreeks': true,
61
+ 'fetchBalance': true,
62
+ 'fetchBorrowInterest': false,
63
+ 'fetchBorrowRateHistories': false,
64
+ 'fetchBorrowRateHistory': false,
65
+ 'fetchCanceledOrders': false,
66
+ 'fetchClosedOrders': false,
67
+ 'fetchCrossBorrowRate': false,
68
+ 'fetchCrossBorrowRates': false,
69
+ 'fetchCurrencies': false,
70
+ 'fetchDepositAddress': false,
71
+ 'fetchDepositAddresses': false,
72
+ 'fetchDeposits': true,
73
+ 'fetchDepositWithdrawFee': false,
74
+ 'fetchDepositWithdrawFees': false,
75
+ 'fetchFundingHistory': false,
76
+ 'fetchFundingRate': false,
77
+ 'fetchFundingRateHistory': false,
78
+ 'fetchFundingRates': false,
79
+ 'fetchGreeks': true,
80
+ 'fetchIndexOHLCV': false,
81
+ 'fetchIsolatedBorrowRate': false,
82
+ 'fetchIsolatedBorrowRates': false,
83
+ 'fetchLedger': false,
84
+ 'fetchLeverage': true,
85
+ 'fetchLeverageTiers': false,
86
+ 'fetchLiquidations': true,
87
+ 'fetchMarginMode': true,
88
+ 'fetchMarketLeverageTiers': false,
89
+ 'fetchMarkets': true,
90
+ 'fetchMarkOHLCV': false,
91
+ 'fetchMyLiquidations': false,
92
+ 'fetchMyTrades': true,
93
+ 'fetchOHLCV': true,
94
+ 'fetchOpenInterest': true,
95
+ 'fetchOpenInterestHistory': false,
96
+ 'fetchOpenOrders': true,
97
+ 'fetchOrder': true,
98
+ 'fetchOrderBook': true,
99
+ 'fetchOrders': true,
100
+ 'fetchOrderTrades': false,
101
+ 'fetchPosition': true,
102
+ 'fetchPositionMode': false,
103
+ 'fetchPositions': true,
104
+ 'fetchPositionsRisk': false,
105
+ 'fetchPremiumIndexOHLCV': false,
106
+ 'fetchStatus': true,
107
+ 'fetchTicker': true,
108
+ 'fetchTickers': true,
109
+ 'fetchTime': true,
110
+ 'fetchTrades': true,
111
+ 'fetchTradingFee': false,
112
+ 'fetchTradingFees': false,
113
+ 'fetchTransfer': false,
114
+ 'fetchTransfers': false,
115
+ 'fetchWithdrawal': false,
116
+ 'fetchWithdrawals': true,
117
+ 'reduceMargin': false,
118
+ 'repayCrossMargin': false,
119
+ 'repayIsolatedMargin': false,
120
+ 'sandbox': true,
121
+ 'setLeverage': true,
122
+ 'setMarginMode': true,
123
+ 'setPositionMode': false,
124
+ 'transfer': false,
125
+ 'withdraw': false,
126
+ },
127
+ 'timeframes': {
128
+ '1m': 1,
129
+ '3m': 3,
130
+ '5m': 5,
131
+ '15m': 15,
132
+ '30m': 30,
133
+ '1h': 60,
134
+ },
135
+ 'hostname': 'paradex.trade',
136
+ 'urls': {
137
+ 'logo': 'https://github.com/user-attachments/assets/84628770-784e-4ec4-a759-ec2fbb2244ea',
138
+ 'api': {
139
+ 'v1': 'https://api.prod.{hostname}/v1',
140
+ },
141
+ 'test': {
142
+ 'v1': 'https://api.testnet.{hostname}/v1',
143
+ },
144
+ 'www': 'https://www.paradex.trade/',
145
+ 'doc': 'https://docs.api.testnet.paradex.trade/',
146
+ 'fees': 'https://docs.paradex.trade/getting-started/trading-fees',
147
+ 'referral': 'https://app.paradex.trade/r/ccxt24',
148
+ },
149
+ 'api': {
150
+ 'public': {
151
+ 'get': {
152
+ 'bbo/{market}': 1,
153
+ 'funding/data': 1,
154
+ 'markets': 1,
155
+ 'markets/klines': 1,
156
+ 'markets/summary': 1,
157
+ 'orderbook/{market}': 1,
158
+ 'insurance': 1,
159
+ 'referrals/config': 1,
160
+ 'system/config': 1,
161
+ 'system/state': 1,
162
+ 'system/time': 1,
163
+ 'trades': 1,
164
+ 'vaults': 1,
165
+ 'vaults/balance': 1,
166
+ 'vaults/config': 1,
167
+ 'vaults/history': 1,
168
+ 'vaults/positions': 1,
169
+ 'vaults/summary': 1,
170
+ 'vaults/transfers': 1,
171
+ },
172
+ },
173
+ 'private': {
174
+ 'get': {
175
+ 'account': 1,
176
+ 'account/info': 1,
177
+ 'account/history': 1,
178
+ 'account/margin': 1,
179
+ 'account/profile': 1,
180
+ 'account/subaccounts': 1,
181
+ 'balance': 1,
182
+ 'fills': 1,
183
+ 'funding/payments': 1,
184
+ 'positions': 1,
185
+ 'tradebusts': 1,
186
+ 'transactions': 1,
187
+ 'liquidations': 1,
188
+ 'orders': 1,
189
+ 'orders-history': 1,
190
+ 'orders/by_client_id/{client_id}': 1,
191
+ 'orders/{order_id}': 1,
192
+ 'points_data/{market}/{program}': 1,
193
+ 'referrals/qr-code': 1,
194
+ 'referrals/summary': 1,
195
+ 'transfers': 1,
196
+ 'algo/orders': 1,
197
+ 'algo/orders-history': 1,
198
+ 'algo/orders/{algo_id}': 1,
199
+ 'vaults/account-summary': 1,
200
+ },
201
+ 'post': {
202
+ 'account/margin/{market}': 1,
203
+ 'account/profile/max_slippage': 1,
204
+ 'account/profile/referral_code': 1,
205
+ 'account/profile/username': 1,
206
+ 'auth': 1,
207
+ 'onboarding': 1,
208
+ 'orders': 1,
209
+ 'orders/batch': 1,
210
+ 'algo/orders': 1,
211
+ 'vaults': 1,
212
+ },
213
+ 'put': {
214
+ 'orders/{order_id}': 1,
215
+ },
216
+ 'delete': {
217
+ 'orders': 1,
218
+ 'orders/by_client_id/{client_id}': 1,
219
+ 'orders/{order_id}': 1,
220
+ 'algo/orders/{algo_id}': 1,
221
+ },
222
+ },
223
+ },
224
+ 'fees': {
225
+ 'swap': {
226
+ 'taker': this.parseNumber('0.0002'),
227
+ 'maker': this.parseNumber('0.0002'),
228
+ },
229
+ 'spot': {
230
+ 'taker': this.parseNumber('0.0002'),
231
+ 'maker': this.parseNumber('0.0002'),
232
+ },
233
+ },
234
+ 'requiredCredentials': {
235
+ 'apiKey': false,
236
+ 'secret': false,
237
+ 'walletAddress': true,
238
+ 'privateKey': true,
239
+ },
240
+ 'exceptions': {
241
+ 'exact': {
242
+ 'VALIDATION_ERROR': AuthenticationError,
243
+ 'BINDING_ERROR': OperationRejected,
244
+ 'INTERNAL_ERROR': ExchangeError,
245
+ 'NOT_FOUND': BadRequest,
246
+ 'SERVICE_UNAVAILABLE': ExchangeError,
247
+ 'INVALID_REQUEST_PARAMETER': BadRequest,
248
+ 'ORDER_ID_NOT_FOUND': InvalidOrder,
249
+ 'ORDER_IS_CLOSED': InvalidOrder,
250
+ 'ORDER_IS_NOT_OPEN_YET': InvalidOrder,
251
+ 'CLIENT_ORDER_ID_NOT_FOUND': InvalidOrder,
252
+ 'DUPLICATED_CLIENT_ID': InvalidOrder,
253
+ 'INVALID_PRICE_PRECISION': OperationRejected,
254
+ 'INVALID_SYMBOL': OperationRejected,
255
+ 'INVALID_TOKEN': OperationRejected,
256
+ 'INVALID_ETHEREUM_ADDRESS': OperationRejected,
257
+ 'INVALID_ETHEREUM_SIGNATURE': OperationRejected,
258
+ 'INVALID_STARKNET_ADDRESS': OperationRejected,
259
+ 'INVALID_STARKNET_SIGNATURE': OperationRejected,
260
+ 'STARKNET_SIGNATURE_VERIFICATION_FAILED': AuthenticationError,
261
+ 'BAD_STARKNET_REQUEST': BadRequest,
262
+ 'ETHEREUM_SIGNER_MISMATCH': BadRequest,
263
+ 'ETHEREUM_HASH_MISMATCH': BadRequest,
264
+ 'NOT_ONBOARDED': BadRequest,
265
+ 'INVALID_TIMESTAMP': BadRequest,
266
+ 'INVALID_SIGNATURE_EXPIRATION': AuthenticationError,
267
+ 'ACCOUNT_NOT_FOUND': AuthenticationError,
268
+ 'INVALID_ORDER_SIGNATURE': AuthenticationError,
269
+ 'PUBLIC_KEY_INVALID': BadRequest,
270
+ 'UNAUTHORIZED_ETHEREUM_ADDRESS': BadRequest,
271
+ 'ETHEREUM_ADDRESS_ALREADY_ONBOARDED': BadRequest,
272
+ 'MARKET_NOT_FOUND': BadRequest,
273
+ 'ALLOWLIST_ENTRY_NOT_FOUND': BadRequest,
274
+ 'USERNAME_IN_USE': AuthenticationError,
275
+ 'GEO_IP_BLOCK': PermissionDenied,
276
+ 'ETHEREUM_ADDRESS_BLOCKED': PermissionDenied,
277
+ 'PROGRAM_NOT_FOUND': BadRequest,
278
+ 'INVALID_DASHBOARD': OperationRejected,
279
+ 'MARKET_NOT_OPEN': BadRequest,
280
+ 'INVALID_REFERRAL_CODE': OperationRejected,
281
+ 'PARENT_ADDRESS_ALREADY_ONBOARDED': BadRequest,
282
+ 'INVALID_PARENT_ACCOUNT': OperationRejected,
283
+ 'INVALID_VAULT_OPERATOR_CHAIN': OperationRejected,
284
+ 'VAULT_OPERATOR_ALREADY_ONBOARDED': OperationRejected,
285
+ 'VAULT_NAME_IN_USE': OperationRejected,
286
+ 'BATCH_SIZE_OUT_OF_RANGE': OperationRejected,
287
+ 'ISOLATED_MARKET_ACCOUNT_MISMATCH': OperationRejected,
288
+ 'POINTS_SUMMARY_NOT_FOUND': OperationRejected,
289
+ '-32700': BadRequest,
290
+ '-32600': BadRequest,
291
+ '-32601': BadRequest,
292
+ '-32602': BadRequest,
293
+ '-32603': ExchangeError,
294
+ '100': BadRequest,
295
+ '40110': AuthenticationError,
296
+ '40111': AuthenticationError,
297
+ '40112': PermissionDenied, // Geo IP blocked
298
+ },
299
+ 'broad': {
300
+ 'missing or malformed jwt': AuthenticationError,
301
+ },
302
+ },
303
+ 'precisionMode': TICK_SIZE,
304
+ 'commonCurrencies': {},
305
+ 'options': {
306
+ 'paradexAccount': undefined,
307
+ 'broker': 'CCXT',
308
+ },
309
+ 'features': {
310
+ 'spot': undefined,
311
+ 'forSwap': {
312
+ 'sandbox': true,
313
+ 'createOrder': {
314
+ 'marginMode': false,
315
+ 'triggerPrice': true,
316
+ 'triggerDirection': true,
317
+ 'triggerPriceType': undefined,
318
+ 'stopLossPrice': false,
319
+ 'takeProfitPrice': false,
320
+ 'attachedStopLossTakeProfit': undefined,
321
+ 'timeInForce': {
322
+ 'IOC': true,
323
+ 'FOK': false,
324
+ 'PO': true,
325
+ 'GTD': false,
326
+ },
327
+ 'hedged': false,
328
+ 'trailing': false,
329
+ 'leverage': false,
330
+ 'marketBuyByCost': false,
331
+ 'marketBuyRequiresPrice': false,
332
+ 'selfTradePrevention': true,
333
+ 'iceberg': false,
334
+ },
335
+ 'createOrders': undefined,
336
+ 'fetchMyTrades': {
337
+ 'marginMode': false,
338
+ 'limit': 100,
339
+ 'daysBack': 100000,
340
+ 'untilDays': 100000,
341
+ 'symbolRequired': false,
342
+ },
343
+ 'fetchOrder': {
344
+ 'marginMode': false,
345
+ 'trigger': false,
346
+ 'trailing': false,
347
+ 'symbolRequired': false,
348
+ },
349
+ 'fetchOpenOrders': {
350
+ 'marginMode': false,
351
+ 'limit': 100,
352
+ 'trigger': false,
353
+ 'trailing': false,
354
+ 'symbolRequired': false,
355
+ },
356
+ 'fetchOrders': {
357
+ 'marginMode': false,
358
+ 'limit': 100,
359
+ 'daysBack': 100000,
360
+ 'untilDays': 100000,
361
+ 'trigger': false,
362
+ 'trailing': false,
363
+ 'symbolRequired': false,
364
+ },
365
+ 'fetchClosedOrders': undefined,
366
+ 'fetchOHLCV': {
367
+ 'limit': undefined, // todo by from/to
368
+ },
369
+ },
370
+ 'swap': {
371
+ 'linear': {
372
+ 'extends': 'forSwap',
373
+ },
374
+ 'inverse': undefined,
375
+ },
376
+ 'future': {
377
+ 'linear': undefined,
378
+ 'inverse': undefined,
379
+ },
380
+ },
381
+ });
382
+ }
383
+ /**
384
+ * @method
385
+ * @name paradex#fetchTime
386
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
387
+ * @see https://docs.api.testnet.paradex.trade/#get-system-time-unix-milliseconds
388
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
389
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
390
+ */
391
+ async fetchTime(params = {}) {
392
+ const response = await this.publicGetSystemTime(params);
393
+ //
394
+ // {
395
+ // "server_time": "1681493415023"
396
+ // }
397
+ //
398
+ return this.safeInteger(response, 'server_time');
399
+ }
400
+ /**
401
+ * @method
402
+ * @name paradex#fetchStatus
403
+ * @description the latest known information on the availability of the exchange API
404
+ * @see https://docs.api.testnet.paradex.trade/#get-system-state
405
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
406
+ * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}
407
+ */
408
+ async fetchStatus(params = {}) {
409
+ const response = await this.publicGetSystemState(params);
410
+ //
411
+ // {
412
+ // "status": "ok"
413
+ // }
414
+ //
415
+ const status = this.safeString(response, 'status');
416
+ return {
417
+ 'status': (status === 'ok') ? 'ok' : 'maintenance',
418
+ 'updated': undefined,
419
+ 'eta': undefined,
420
+ 'url': undefined,
421
+ 'info': response,
422
+ };
423
+ }
424
+ /**
425
+ * @method
426
+ * @name paradex#fetchMarkets
427
+ * @description retrieves data on all markets for bitget
428
+ * @see https://docs.api.testnet.paradex.trade/#list-available-markets
429
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
430
+ * @returns {object[]} an array of objects representing market data
431
+ */
432
+ async fetchMarkets(params = {}) {
433
+ const response = await this.publicGetMarkets(params);
434
+ //
435
+ // {
436
+ // "results": [
437
+ // {
438
+ // "symbol": "BODEN-USD-PERP",
439
+ // "base_currency": "BODEN",
440
+ // "quote_currency": "USD",
441
+ // "settlement_currency": "USDC",
442
+ // "order_size_increment": "1",
443
+ // "price_tick_size": "0.00001",
444
+ // "min_notional": "200",
445
+ // "open_at": 1717065600000,
446
+ // "expiry_at": 0,
447
+ // "asset_kind": "PERP",
448
+ // "position_limit": "2000000",
449
+ // "price_bands_width": "0.2",
450
+ // "max_open_orders": 50,
451
+ // "max_funding_rate": "0.05",
452
+ // "delta1_cross_margin_params": {
453
+ // "imf_base": "0.2",
454
+ // "imf_shift": "180000",
455
+ // "imf_factor": "0.00071",
456
+ // "mmf_factor": "0.5"
457
+ // },
458
+ // "price_feed_id": "9LScEHse1ioZt2rUuhwiN6bmYnqpMqvZkQJDNUpxVHN5",
459
+ // "oracle_ewma_factor": "0.14999987905913592",
460
+ // "max_order_size": "520000",
461
+ // "max_funding_rate_change": "0.0005",
462
+ // "max_tob_spread": "0.2"
463
+ // }
464
+ // ]
465
+ // }
466
+ //
467
+ const data = this.safeList(response, 'results');
468
+ return this.parseMarkets(data);
469
+ }
470
+ parseMarket(market) {
471
+ //
472
+ // {
473
+ // "symbol": "BODEN-USD-PERP",
474
+ // "base_currency": "BODEN",
475
+ // "quote_currency": "USD",
476
+ // "settlement_currency": "USDC",
477
+ // "order_size_increment": "1",
478
+ // "price_tick_size": "0.00001",
479
+ // "min_notional": "200",
480
+ // "open_at": 1717065600000,
481
+ // "expiry_at": 0,
482
+ // "asset_kind": "PERP",
483
+ // "position_limit": "2000000",
484
+ // "price_bands_width": "0.2",
485
+ // "max_open_orders": 50,
486
+ // "max_funding_rate": "0.05",
487
+ // "delta1_cross_margin_params": {
488
+ // "imf_base": "0.2",
489
+ // "imf_shift": "180000",
490
+ // "imf_factor": "0.00071",
491
+ // "mmf_factor": "0.5"
492
+ // },
493
+ // "price_feed_id": "9LScEHse1ioZt2rUuhwiN6bmYnqpMqvZkQJDNUpxVHN5",
494
+ // "oracle_ewma_factor": "0.14999987905913592",
495
+ // "max_order_size": "520000",
496
+ // "max_funding_rate_change": "0.0005",
497
+ // "max_tob_spread": "0.2"
498
+ // }
499
+ //
500
+ // {
501
+ // "symbol":"BTC-USD-96000-C",
502
+ // "base_currency":"BTC",
503
+ // "quote_currency":"USD",
504
+ // "settlement_currency":"USDC",
505
+ // "order_size_increment":"0.001",
506
+ // "price_tick_size":"0.01",
507
+ // "min_notional":"100",
508
+ // "open_at":"1736764200000",
509
+ // "expiry_at":"0",
510
+ // "asset_kind":"PERP_OPTION",
511
+ // "market_kind":"cross",
512
+ // "position_limit":"10",
513
+ // "price_bands_width":"0.05",
514
+ // "iv_bands_width":"0.05",
515
+ // "max_open_orders":"100",
516
+ // "max_funding_rate":"0.02",
517
+ // "option_cross_margin_params":{
518
+ // "imf":{
519
+ // "long_itm":"0.2",
520
+ // "short_itm":"0.15",
521
+ // "short_otm":"0.1",
522
+ // "short_put_cap":"0.5",
523
+ // "premium_multiplier":"1"
524
+ // },
525
+ // "mmf":{
526
+ // "long_itm":"0.1",
527
+ // "short_itm":"0.075",
528
+ // "short_otm":"0.05",
529
+ // "short_put_cap":"0.5",
530
+ // "premium_multiplier":"0.5"
531
+ // }
532
+ // },
533
+ // "price_feed_id":"GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU",
534
+ // "oracle_ewma_factor":"0.20000046249626113",
535
+ // "max_order_size":"2",
536
+ // "max_funding_rate_change":"0.02",
537
+ // "max_tob_spread":"0.2",
538
+ // "interest_rate":"0.0001",
539
+ // "clamp_rate":"0.02",
540
+ // "option_type":"CALL",
541
+ // "strike_price":"96000",
542
+ // "funding_period_hours":"24",
543
+ // "tags":[
544
+ // ]
545
+ // }
546
+ //
547
+ const assetKind = this.safeString(market, 'asset_kind');
548
+ const isOption = (assetKind === 'PERP_OPTION');
549
+ const type = (isOption) ? 'option' : 'swap';
550
+ const isSwap = (type === 'swap');
551
+ const marketId = this.safeString(market, 'symbol');
552
+ const quoteId = this.safeString(market, 'quote_currency');
553
+ const baseId = this.safeString(market, 'base_currency');
554
+ const quote = this.safeCurrencyCode(quoteId);
555
+ const base = this.safeCurrencyCode(baseId);
556
+ const settleId = this.safeString(market, 'settlement_currency');
557
+ const settle = this.safeCurrencyCode(settleId);
558
+ let symbol = base + '/' + quote + ':' + settle;
559
+ let expiry = this.safeInteger(market, 'expiry_at');
560
+ const optionType = this.safeString(market, 'option_type');
561
+ const strikePrice = this.safeString(market, 'strike_price');
562
+ const takerFee = this.parseNumber('0.0003');
563
+ let makerFee = this.parseNumber('-0.00005');
564
+ if (isOption) {
565
+ const optionTypeSuffix = (optionType === 'CALL') ? 'C' : 'P';
566
+ symbol = symbol + '-' + strikePrice + '-' + optionTypeSuffix;
567
+ makerFee = this.parseNumber('0.0003');
568
+ }
569
+ else {
570
+ expiry = undefined;
571
+ }
572
+ return this.safeMarketStructure({
573
+ 'id': marketId,
574
+ 'symbol': symbol,
575
+ 'base': base,
576
+ 'quote': quote,
577
+ 'settle': settle,
578
+ 'baseId': baseId,
579
+ 'quoteId': quoteId,
580
+ 'settleId': settleId,
581
+ 'type': type,
582
+ 'spot': false,
583
+ 'margin': undefined,
584
+ 'swap': isSwap,
585
+ 'future': false,
586
+ 'option': isOption,
587
+ 'active': this.safeBool(market, 'enableTrading'),
588
+ 'contract': true,
589
+ 'linear': true,
590
+ 'inverse': false,
591
+ 'taker': takerFee,
592
+ 'maker': makerFee,
593
+ 'contractSize': this.parseNumber('1'),
594
+ 'expiry': expiry,
595
+ 'expiryDatetime': (expiry === 0) ? undefined : this.iso8601(expiry),
596
+ 'strike': this.parseNumber(strikePrice),
597
+ 'optionType': this.safeStringLower(market, 'option_type'),
598
+ 'precision': {
599
+ 'amount': this.safeNumber(market, 'order_size_increment'),
600
+ 'price': this.safeNumber(market, 'price_tick_size'),
601
+ },
602
+ 'limits': {
603
+ 'leverage': {
604
+ 'min': undefined,
605
+ 'max': undefined,
606
+ },
607
+ 'amount': {
608
+ 'min': undefined,
609
+ 'max': this.safeNumber(market, 'max_order_size'),
610
+ },
611
+ 'price': {
612
+ 'min': undefined,
613
+ 'max': undefined,
614
+ },
615
+ 'cost': {
616
+ 'min': this.safeNumber(market, 'min_notional'),
617
+ 'max': undefined,
618
+ },
619
+ },
620
+ 'created': undefined,
621
+ 'info': market,
622
+ });
623
+ }
624
+ /**
625
+ * @method
626
+ * @name paradex#fetchOHLCV
627
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
628
+ * @see https://docs.api.testnet.paradex.trade/#ohlcv-for-a-symbol
629
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
630
+ * @param {string} timeframe the length of time each candle represents
631
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
632
+ * @param {int} [limit] the maximum amount of candles to fetch
633
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
634
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
635
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
636
+ */
637
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
638
+ await this.loadMarkets();
639
+ const market = this.market(symbol);
640
+ const request = {
641
+ 'resolution': this.safeString(this.timeframes, timeframe, timeframe),
642
+ 'symbol': market['id'],
643
+ };
644
+ const now = this.milliseconds();
645
+ const duration = this.parseTimeframe(timeframe);
646
+ const until = this.safeInteger2(params, 'until', 'till', now);
647
+ params = this.omit(params, ['until', 'till']);
648
+ if (since !== undefined) {
649
+ request['start_at'] = since;
650
+ if (limit !== undefined) {
651
+ request['end_at'] = this.sum(since, duration * (limit + 1) * 1000) - 1;
652
+ }
653
+ else {
654
+ request['end_at'] = until;
655
+ }
656
+ }
657
+ else {
658
+ request['end_at'] = until;
659
+ if (limit !== undefined) {
660
+ request['start_at'] = until - duration * (limit + 1) * 1000 + 1;
661
+ }
662
+ else {
663
+ request['start_at'] = until - duration * 101 * 1000 + 1;
664
+ }
665
+ }
666
+ const response = await this.publicGetMarketsKlines(this.extend(request, params));
667
+ //
668
+ // {
669
+ // "results": [
670
+ // [
671
+ // 1720071900000,
672
+ // 58961.3,
673
+ // 58961.3,
674
+ // 58961.3,
675
+ // 58961.3,
676
+ // 1591
677
+ // ]
678
+ // ]
679
+ // }
680
+ //
681
+ const data = this.safeList(response, 'results', []);
682
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
683
+ }
684
+ parseOHLCV(ohlcv, market = undefined) {
685
+ //
686
+ // [
687
+ // 1720071900000,
688
+ // 58961.3,
689
+ // 58961.3,
690
+ // 58961.3,
691
+ // 58961.3,
692
+ // 1591
693
+ // ]
694
+ //
695
+ return [
696
+ this.safeInteger(ohlcv, 0),
697
+ this.safeNumber(ohlcv, 1),
698
+ this.safeNumber(ohlcv, 2),
699
+ this.safeNumber(ohlcv, 3),
700
+ this.safeNumber(ohlcv, 4),
701
+ this.safeNumber(ohlcv, 5),
702
+ ];
703
+ }
704
+ /**
705
+ * @method
706
+ * @name paradex#fetchTickers
707
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
708
+ * @see https://docs.api.testnet.paradex.trade/#list-available-markets-summary
709
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
710
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
711
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
712
+ */
713
+ async fetchTickers(symbols = undefined, params = {}) {
714
+ await this.loadMarkets();
715
+ symbols = this.marketSymbols(symbols);
716
+ const request = {
717
+ 'market': 'ALL',
718
+ };
719
+ const response = await this.publicGetMarketsSummary(this.extend(request, params));
720
+ //
721
+ // {
722
+ // "results": [
723
+ // {
724
+ // "symbol": "BTC-USD-PERP",
725
+ // "oracle_price": "68465.17449906",
726
+ // "mark_price": "68465.17449906",
727
+ // "last_traded_price": "68495.1",
728
+ // "bid": "68477.6",
729
+ // "ask": "69578.2",
730
+ // "volume_24h": "5815541.397939004",
731
+ // "total_volume": "584031465.525259686",
732
+ // "created_at": 1718170156580,
733
+ // "underlying_price": "67367.37268422",
734
+ // "open_interest": "162.272",
735
+ // "funding_rate": "0.01629574927887",
736
+ // "price_change_rate_24h": "0.009032"
737
+ // }
738
+ // ]
739
+ // }
740
+ //
741
+ const data = this.safeList(response, 'results', []);
742
+ return this.parseTickers(data, symbols);
743
+ }
744
+ /**
745
+ * @method
746
+ * @name paradex#fetchTicker
747
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
748
+ * @see https://docs.api.testnet.paradex.trade/#list-available-markets-summary
749
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
750
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
751
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
752
+ */
753
+ async fetchTicker(symbol, params = {}) {
754
+ await this.loadMarkets();
755
+ const market = this.market(symbol);
756
+ const request = {
757
+ 'market': market['id'],
758
+ };
759
+ const response = await this.publicGetMarketsSummary(this.extend(request, params));
760
+ //
761
+ // {
762
+ // "results": [
763
+ // {
764
+ // "symbol": "BTC-USD-PERP",
765
+ // "oracle_price": "68465.17449906",
766
+ // "mark_price": "68465.17449906",
767
+ // "last_traded_price": "68495.1",
768
+ // "bid": "68477.6",
769
+ // "ask": "69578.2",
770
+ // "volume_24h": "5815541.397939004",
771
+ // "total_volume": "584031465.525259686",
772
+ // "created_at": 1718170156580,
773
+ // "underlying_price": "67367.37268422",
774
+ // "open_interest": "162.272",
775
+ // "funding_rate": "0.01629574927887",
776
+ // "price_change_rate_24h": "0.009032"
777
+ // }
778
+ // ]
779
+ // }
780
+ //
781
+ const data = this.safeList(response, 'results', []);
782
+ const ticker = this.safeDict(data, 0, {});
783
+ return this.parseTicker(ticker, market);
784
+ }
785
+ parseTicker(ticker, market = undefined) {
786
+ //
787
+ // {
788
+ // "symbol": "BTC-USD-PERP",
789
+ // "oracle_price": "68465.17449906",
790
+ // "mark_price": "68465.17449906",
791
+ // "last_traded_price": "68495.1",
792
+ // "bid": "68477.6",
793
+ // "ask": "69578.2",
794
+ // "volume_24h": "5815541.397939004",
795
+ // "total_volume": "584031465.525259686",
796
+ // "created_at": 1718170156581,
797
+ // "underlying_price": "67367.37268422",
798
+ // "open_interest": "162.272",
799
+ // "funding_rate": "0.01629574927887",
800
+ // "price_change_rate_24h": "0.009032"
801
+ // }
802
+ //
803
+ let percentage = this.safeString(ticker, 'price_change_rate_24h');
804
+ if (percentage !== undefined) {
805
+ percentage = Precise.stringMul(percentage, '100');
806
+ }
807
+ const last = this.safeString(ticker, 'last_traded_price');
808
+ const marketId = this.safeString(ticker, 'symbol');
809
+ market = this.safeMarket(marketId, market);
810
+ const symbol = market['symbol'];
811
+ const timestamp = this.safeInteger(ticker, 'created_at');
812
+ return this.safeTicker({
813
+ 'symbol': symbol,
814
+ 'timestamp': timestamp,
815
+ 'datetime': this.iso8601(timestamp),
816
+ 'high': undefined,
817
+ 'low': undefined,
818
+ 'bid': this.safeString(ticker, 'bid'),
819
+ 'bidVolume': undefined,
820
+ 'ask': this.safeString(ticker, 'ask'),
821
+ 'askVolume': undefined,
822
+ 'vwap': undefined,
823
+ 'open': undefined,
824
+ 'close': last,
825
+ 'last': last,
826
+ 'previousClose': undefined,
827
+ 'change': undefined,
828
+ 'percentage': percentage,
829
+ 'average': undefined,
830
+ 'baseVolume': undefined,
831
+ 'quoteVolume': this.safeString(ticker, 'volume_24h'),
832
+ 'markPrice': this.safeString(ticker, 'mark_price'),
833
+ 'info': ticker,
834
+ }, market);
835
+ }
836
+ /**
837
+ * @method
838
+ * @name paradex#fetchOrderBook
839
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
840
+ * @see https://docs.api.testnet.paradex.trade/#get-market-orderbook
841
+ * @param {string} symbol unified symbol of the market to fetch the order book for
842
+ * @param {int} [limit] the maximum amount of order book entries to return
843
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
844
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
845
+ */
846
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
847
+ await this.loadMarkets();
848
+ const market = this.market(symbol);
849
+ const request = { 'market': market['id'] };
850
+ const response = await this.publicGetOrderbookMarket(this.extend(request, params));
851
+ //
852
+ // {
853
+ // "market": "BTC-USD-PERP",
854
+ // "seq_no": 14115975,
855
+ // "last_updated_at": 1718172538340,
856
+ // "asks": [
857
+ // [
858
+ // "69578.2",
859
+ // "3.019"
860
+ // ]
861
+ // ],
862
+ // "bids": [
863
+ // [
864
+ // "68477.6",
865
+ // "0.1"
866
+ // ]
867
+ // ]
868
+ // }
869
+ //
870
+ if (limit !== undefined) {
871
+ request['depth'] = limit;
872
+ }
873
+ const timestamp = this.safeInteger(response, 'last_updated_at');
874
+ const orderbook = this.parseOrderBook(response, market['symbol'], timestamp);
875
+ orderbook['nonce'] = this.safeInteger(response, 'seq_no');
876
+ return orderbook;
877
+ }
878
+ /**
879
+ * @method
880
+ * @name paradex#fetchTrades
881
+ * @description get the list of most recent trades for a particular symbol
882
+ * @see https://docs.api.testnet.paradex.trade/#trade-tape
883
+ * @param {string} symbol unified symbol of the market to fetch trades for
884
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
885
+ * @param {int} [limit] the maximum amount of trades to fetch
886
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
887
+ * @param {int} [params.until] the latest time in ms to fetch trades for
888
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times
889
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
890
+ */
891
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
892
+ await this.loadMarkets();
893
+ let paginate = false;
894
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');
895
+ if (paginate) {
896
+ return await this.fetchPaginatedCallCursor('fetchTrades', symbol, since, limit, params, 'next', 'cursor', undefined, 100);
897
+ }
898
+ const market = this.market(symbol);
899
+ let request = {
900
+ 'market': market['id'],
901
+ };
902
+ if (limit !== undefined) {
903
+ request['page_size'] = limit;
904
+ }
905
+ if (since !== undefined) {
906
+ request['start_at'] = since;
907
+ }
908
+ [request, params] = this.handleUntilOption('end_at', request, params);
909
+ const response = await this.publicGetTrades(this.extend(request, params));
910
+ //
911
+ // {
912
+ // "next": "...",
913
+ // "prev": "...",
914
+ // "results": [
915
+ // {
916
+ // "id": "1718154353750201703989430001",
917
+ // "market": "BTC-USD-PERP",
918
+ // "side": "BUY",
919
+ // "size": "0.026",
920
+ // "price": "69578.2",
921
+ // "created_at": 1718154353750,
922
+ // "trade_type": "FILL"
923
+ // }
924
+ // ]
925
+ // }
926
+ //
927
+ const trades = this.safeList(response, 'results', []);
928
+ for (let i = 0; i < trades.length; i++) {
929
+ trades[i]['next'] = this.safeString(response, 'next');
930
+ }
931
+ return this.parseTrades(trades, market, since, limit);
932
+ }
933
+ parseTrade(trade, market = undefined) {
934
+ //
935
+ // fetchTrades (public)
936
+ //
937
+ // {
938
+ // "id": "1718154353750201703989430001",
939
+ // "market": "BTC-USD-PERP",
940
+ // "side": "BUY",
941
+ // "size": "0.026",
942
+ // "price": "69578.2",
943
+ // "created_at": 1718154353750,
944
+ // "trade_type": "FILL"
945
+ // }
946
+ //
947
+ // fetchMyTrades (private)
948
+ //
949
+ // {
950
+ // "id": "1718947571560201703986670001",
951
+ // "side": "BUY",
952
+ // "liquidity": "TAKER",
953
+ // "market": "BTC-USD-PERP",
954
+ // "order_id": "1718947571540201703992340000",
955
+ // "price": "64852.9",
956
+ // "size": "0.01",
957
+ // "fee": "0.1945587",
958
+ // "fee_currency": "USDC",
959
+ // "created_at": 1718947571569,
960
+ // "remaining_size": "0",
961
+ // "client_id": "",
962
+ // "fill_type": "FILL"
963
+ // }
964
+ //
965
+ const marketId = this.safeString(trade, 'market');
966
+ market = this.safeMarket(marketId, market);
967
+ const id = this.safeString(trade, 'id');
968
+ const timestamp = this.safeInteger(trade, 'created_at');
969
+ const priceString = this.safeString(trade, 'price');
970
+ const amountString = this.safeString(trade, 'size');
971
+ const side = this.safeStringLower(trade, 'side');
972
+ const liability = this.safeStringLower(trade, 'liquidity', 'taker');
973
+ const isTaker = liability === 'taker';
974
+ const takerOrMaker = (isTaker) ? 'taker' : 'maker';
975
+ const currencyId = this.safeString(trade, 'fee_currency');
976
+ const code = this.safeCurrencyCode(currencyId);
977
+ return this.safeTrade({
978
+ 'info': trade,
979
+ 'id': id,
980
+ 'order': this.safeString(trade, 'order_id'),
981
+ 'timestamp': timestamp,
982
+ 'datetime': this.iso8601(timestamp),
983
+ 'symbol': market['symbol'],
984
+ 'type': undefined,
985
+ 'takerOrMaker': takerOrMaker,
986
+ 'side': side,
987
+ 'price': priceString,
988
+ 'amount': amountString,
989
+ 'cost': undefined,
990
+ 'fee': {
991
+ 'cost': this.safeString(trade, 'fee'),
992
+ 'currency': code,
993
+ 'rate': undefined,
994
+ },
995
+ }, market);
996
+ }
997
+ /**
998
+ * @method
999
+ * @name paradex#fetchOpenInterest
1000
+ * @description retrieves the open interest of a contract trading pair
1001
+ * @see https://docs.api.testnet.paradex.trade/#list-available-markets-summary
1002
+ * @param {string} symbol unified CCXT market symbol
1003
+ * @param {object} [params] exchange specific parameters
1004
+ * @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
1005
+ */
1006
+ async fetchOpenInterest(symbol, params = {}) {
1007
+ await this.loadMarkets();
1008
+ const market = this.market(symbol);
1009
+ if (!market['contract']) {
1010
+ throw new BadRequest(this.id + ' fetchOpenInterest() supports contract markets only');
1011
+ }
1012
+ const request = {
1013
+ 'market': market['id'],
1014
+ };
1015
+ const response = await this.publicGetMarketsSummary(this.extend(request, params));
1016
+ //
1017
+ // {
1018
+ // "results": [
1019
+ // {
1020
+ // "symbol": "BTC-USD-PERP",
1021
+ // "oracle_price": "68465.17449906",
1022
+ // "mark_price": "68465.17449906",
1023
+ // "last_traded_price": "68495.1",
1024
+ // "bid": "68477.6",
1025
+ // "ask": "69578.2",
1026
+ // "volume_24h": "5815541.397939004",
1027
+ // "total_volume": "584031465.525259686",
1028
+ // "created_at": 1718170156580,
1029
+ // "underlying_price": "67367.37268422",
1030
+ // "open_interest": "162.272",
1031
+ // "funding_rate": "0.01629574927887",
1032
+ // "price_change_rate_24h": "0.009032"
1033
+ // }
1034
+ // ]
1035
+ // }
1036
+ //
1037
+ const data = this.safeList(response, 'results', []);
1038
+ const interest = this.safeDict(data, 0, {});
1039
+ return this.parseOpenInterest(interest, market);
1040
+ }
1041
+ parseOpenInterest(interest, market = undefined) {
1042
+ //
1043
+ // {
1044
+ // "symbol": "BTC-USD-PERP",
1045
+ // "oracle_price": "68465.17449904",
1046
+ // "mark_price": "68465.17449906",
1047
+ // "last_traded_price": "68495.1",
1048
+ // "bid": "68477.6",
1049
+ // "ask": "69578.2",
1050
+ // "volume_24h": "5815541.397939004",
1051
+ // "total_volume": "584031465.525259686",
1052
+ // "created_at": 1718170156580,
1053
+ // "underlying_price": "67367.37268422",
1054
+ // "open_interest": "162.272",
1055
+ // "funding_rate": "0.01629574927887",
1056
+ // "price_change_rate_24h": "0.009032"
1057
+ // }
1058
+ //
1059
+ const timestamp = this.safeInteger(interest, 'created_at');
1060
+ const marketId = this.safeString(interest, 'symbol');
1061
+ market = this.safeMarket(marketId, market);
1062
+ const symbol = market['symbol'];
1063
+ return this.safeOpenInterest({
1064
+ 'symbol': symbol,
1065
+ 'openInterestAmount': this.safeString(interest, 'open_interest'),
1066
+ 'openInterestValue': undefined,
1067
+ 'timestamp': timestamp,
1068
+ 'datetime': this.iso8601(timestamp),
1069
+ 'info': interest,
1070
+ }, market);
1071
+ }
1072
+ hashMessage(message) {
1073
+ return '0x' + this.hash(message, keccak, 'hex');
1074
+ }
1075
+ signHash(hash, privateKey) {
1076
+ const signature = ecdsa(hash.slice(-64), privateKey.slice(-64), secp256k1, undefined);
1077
+ const r = signature['r'];
1078
+ const s = signature['s'];
1079
+ const v = this.intToBase16(this.sum(27, signature['v']));
1080
+ return '0x' + r.padStart(64, '0') + s.padStart(64, '0') + v;
1081
+ }
1082
+ signMessage(message, privateKey) {
1083
+ return this.signHash(this.hashMessage(message), privateKey.slice(-64));
1084
+ }
1085
+ async getSystemConfig() {
1086
+ const cachedConfig = this.safeDict(this.options, 'systemConfig');
1087
+ if (cachedConfig !== undefined) {
1088
+ return cachedConfig;
1089
+ }
1090
+ const response = await this.publicGetSystemConfig();
1091
+ //
1092
+ // {
1093
+ // "starknet_gateway_url": "https://potc-testnet-sepolia.starknet.io",
1094
+ // "starknet_fullnode_rpc_url": "https://pathfinder.api.testnet.paradex.trade/rpc/v0_7",
1095
+ // "starknet_chain_id": "PRIVATE_SN_POTC_SEPOLIA",
1096
+ // "block_explorer_url": "https://voyager.testnet.paradex.trade/",
1097
+ // "paraclear_address": "0x286003f7c7bfc3f94e8f0af48b48302e7aee2fb13c23b141479ba00832ef2c6",
1098
+ // "paraclear_decimals": 8,
1099
+ // "paraclear_account_proxy_hash": "0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9",
1100
+ // "paraclear_account_hash": "0x41cb0280ebadaa75f996d8d92c6f265f6d040bb3ba442e5f86a554f1765244e",
1101
+ // "oracle_address": "0x2c6a867917ef858d6b193a0ff9e62b46d0dc760366920d631715d58baeaca1f",
1102
+ // "bridged_tokens": [
1103
+ // {
1104
+ // "name": "TEST USDC",
1105
+ // "symbol": "USDC",
1106
+ // "decimals": 6,
1107
+ // "l1_token_address": "0x29A873159D5e14AcBd63913D4A7E2df04570c666",
1108
+ // "l1_bridge_address": "0x8586e05adc0C35aa11609023d4Ae6075Cb813b4C",
1109
+ // "l2_token_address": "0x6f373b346561036d98ea10fb3e60d2f459c872b1933b50b21fe6ef4fda3b75e",
1110
+ // "l2_bridge_address": "0x46e9237f5408b5f899e72125dd69bd55485a287aaf24663d3ebe00d237fc7ef"
1111
+ // }
1112
+ // ],
1113
+ // "l1_core_contract_address": "0x582CC5d9b509391232cd544cDF9da036e55833Af",
1114
+ // "l1_operator_address": "0x11bACdFbBcd3Febe5e8CEAa75E0Ef6444d9B45FB",
1115
+ // "l1_chain_id": "11155111",
1116
+ // "liquidation_fee": "0.2"
1117
+ // }
1118
+ //
1119
+ this.options['systemConfig'] = response;
1120
+ return response;
1121
+ }
1122
+ async prepareParadexDomain(l1 = false) {
1123
+ const systemConfig = await this.getSystemConfig();
1124
+ if (l1 === true) {
1125
+ const l1D = {
1126
+ 'name': 'Paradex',
1127
+ 'chainId': systemConfig['l1_chain_id'],
1128
+ 'version': '1',
1129
+ };
1130
+ return l1D;
1131
+ }
1132
+ const domain = {
1133
+ 'name': 'Paradex',
1134
+ 'chainId': systemConfig['starknet_chain_id'],
1135
+ 'version': 1,
1136
+ };
1137
+ return domain;
1138
+ }
1139
+ async retrieveAccount() {
1140
+ const cachedAccount = this.safeDict(this.options, 'paradexAccount');
1141
+ if (cachedAccount !== undefined) {
1142
+ return cachedAccount;
1143
+ }
1144
+ this.checkRequiredCredentials();
1145
+ const systemConfig = await this.getSystemConfig();
1146
+ const domain = await this.prepareParadexDomain(true);
1147
+ const messageTypes = {
1148
+ 'Constant': [
1149
+ { 'name': 'action', 'type': 'string' },
1150
+ ],
1151
+ };
1152
+ const message = {
1153
+ 'action': 'STARK Key',
1154
+ };
1155
+ const msg = this.ethEncodeStructuredData(domain, messageTypes, message);
1156
+ const signature = this.signMessage(msg, this.privateKey);
1157
+ const account = this.retrieveStarkAccount(signature, systemConfig['paraclear_account_hash'], systemConfig['paraclear_account_proxy_hash']);
1158
+ this.options['paradexAccount'] = account;
1159
+ return account;
1160
+ }
1161
+ async onboarding(params = {}) {
1162
+ const account = await this.retrieveAccount();
1163
+ const req = {
1164
+ 'action': 'Onboarding',
1165
+ };
1166
+ const domain = await this.prepareParadexDomain();
1167
+ const messageTypes = {
1168
+ 'Constant': [
1169
+ { 'name': 'action', 'type': 'felt' },
1170
+ ],
1171
+ };
1172
+ const msg = this.starknetEncodeStructuredData(domain, messageTypes, req, account['address']);
1173
+ const signature = this.starknetSign(msg, account['privateKey']);
1174
+ params['signature'] = signature;
1175
+ params['account'] = account['address'];
1176
+ params['public_key'] = account['publicKey'];
1177
+ const response = await this.privatePostOnboarding(params);
1178
+ return response;
1179
+ }
1180
+ async authenticateRest(params = {}) {
1181
+ const cachedToken = this.safeString(this.options, 'authToken');
1182
+ const now = this.nonce();
1183
+ if (cachedToken !== undefined) {
1184
+ const cachedExpires = this.safeInteger(this.options, 'expires');
1185
+ if (now < cachedExpires) {
1186
+ return cachedToken;
1187
+ }
1188
+ }
1189
+ const account = await this.retrieveAccount();
1190
+ // https://docs.paradex.trade/api-reference/general-information/authentication
1191
+ const expires = now + 180;
1192
+ const req = {
1193
+ 'method': 'POST',
1194
+ 'path': '/v1/auth',
1195
+ 'body': '',
1196
+ 'timestamp': now,
1197
+ 'expiration': expires,
1198
+ };
1199
+ const domain = await this.prepareParadexDomain();
1200
+ const messageTypes = {
1201
+ 'Request': [
1202
+ { 'name': 'method', 'type': 'felt' },
1203
+ { 'name': 'path', 'type': 'felt' },
1204
+ { 'name': 'body', 'type': 'felt' },
1205
+ { 'name': 'timestamp', 'type': 'felt' },
1206
+ { 'name': 'expiration', 'type': 'felt' },
1207
+ ],
1208
+ };
1209
+ const msg = this.starknetEncodeStructuredData(domain, messageTypes, req, account['address']);
1210
+ const signature = this.starknetSign(msg, account['privateKey']);
1211
+ params['signature'] = signature;
1212
+ params['account'] = account['address'];
1213
+ params['timestamp'] = req['timestamp'];
1214
+ params['expiration'] = req['expiration'];
1215
+ const response = await this.privatePostAuth(params);
1216
+ //
1217
+ // {
1218
+ // jwt_token: "ooooccxtooootoooootheoooomoonooooo"
1219
+ // }
1220
+ //
1221
+ const token = this.safeString(response, 'jwt_token');
1222
+ this.options['authToken'] = token;
1223
+ this.options['expires'] = expires;
1224
+ return token;
1225
+ }
1226
+ parseOrder(order, market = undefined) {
1227
+ //
1228
+ // {
1229
+ // "account": "0x4638e3041366aa71720be63e32e53e1223316c7f0d56f7aa617542ed1e7512x",
1230
+ // "avg_fill_price": "26000",
1231
+ // "client_id": "x1234",
1232
+ // "cancel_reason": "NOT_ENOUGH_MARGIN",
1233
+ // "created_at": 1681493746016,
1234
+ // "flags": [
1235
+ // "REDUCE_ONLY"
1236
+ // ],
1237
+ // "id": "123456",
1238
+ // "instruction": "GTC",
1239
+ // "last_updated_at": 1681493746016,
1240
+ // "market": "BTC-USD-PERP",
1241
+ // "price": "26000",
1242
+ // "published_at": 1681493746016,
1243
+ // "received_at": 1681493746016,
1244
+ // "remaining_size": "0",
1245
+ // "seq_no": 1681471234972000000,
1246
+ // "side": "BUY",
1247
+ // "size": "0.05",
1248
+ // "status": "NEW",
1249
+ // "stp": "EXPIRE_MAKER",
1250
+ // "timestamp": 1681493746016,
1251
+ // "trigger_price": "26000",
1252
+ // "type": "MARKET"
1253
+ // }
1254
+ //
1255
+ const timestamp = this.safeInteger(order, 'created_at');
1256
+ const orderId = this.safeString(order, 'id');
1257
+ const clientOrderId = this.omitZero(this.safeString(order, 'client_id'));
1258
+ const marketId = this.safeString(order, 'market');
1259
+ market = this.safeMarket(marketId, market);
1260
+ const symbol = market['symbol'];
1261
+ const price = this.safeString(order, 'price');
1262
+ const amount = this.safeString(order, 'size');
1263
+ const orderType = this.safeString(order, 'type');
1264
+ const cancelReason = this.safeString(order, 'cancel_reason');
1265
+ let status = this.safeString(order, 'status');
1266
+ if (cancelReason !== undefined) {
1267
+ if (cancelReason === 'NOT_ENOUGH_MARGIN' || cancelReason === 'ORDER_EXCEEDS_POSITION_LIMIT') {
1268
+ status = 'rejected';
1269
+ }
1270
+ else {
1271
+ status = 'canceled';
1272
+ }
1273
+ }
1274
+ const side = this.safeStringLower(order, 'side');
1275
+ const average = this.omitZero(this.safeString(order, 'avg_fill_price'));
1276
+ const remaining = this.omitZero(this.safeString(order, 'remaining_size'));
1277
+ const lastUpdateTimestamp = this.safeInteger(order, 'last_updated_at');
1278
+ const flags = this.safeList(order, 'flags', []);
1279
+ let reduceOnly = undefined;
1280
+ if ('REDUCE_ONLY' in flags) {
1281
+ reduceOnly = true;
1282
+ }
1283
+ return this.safeOrder({
1284
+ 'id': orderId,
1285
+ 'clientOrderId': clientOrderId,
1286
+ 'timestamp': timestamp,
1287
+ 'datetime': this.iso8601(timestamp),
1288
+ 'lastTradeTimestamp': undefined,
1289
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
1290
+ 'status': this.parseOrderStatus(status),
1291
+ 'symbol': symbol,
1292
+ 'type': this.parseOrderType(orderType),
1293
+ 'timeInForce': this.parseTimeInForce(this.safeString(order, 'instruction')),
1294
+ 'postOnly': undefined,
1295
+ 'reduceOnly': reduceOnly,
1296
+ 'side': side,
1297
+ 'price': price,
1298
+ 'triggerPrice': this.safeString(order, 'trigger_price'),
1299
+ 'takeProfitPrice': undefined,
1300
+ 'stopLossPrice': undefined,
1301
+ 'average': average,
1302
+ 'amount': amount,
1303
+ 'filled': undefined,
1304
+ 'remaining': remaining,
1305
+ 'cost': undefined,
1306
+ 'trades': undefined,
1307
+ 'fee': {
1308
+ 'cost': undefined,
1309
+ 'currency': undefined,
1310
+ },
1311
+ 'info': order,
1312
+ }, market);
1313
+ }
1314
+ parseTimeInForce(timeInForce) {
1315
+ const timeInForces = {
1316
+ 'IOC': 'IOC',
1317
+ 'GTC': 'GTC',
1318
+ 'POST_ONLY': 'PO',
1319
+ };
1320
+ return this.safeString(timeInForces, timeInForce, undefined);
1321
+ }
1322
+ parseOrderStatus(status) {
1323
+ if (status !== undefined) {
1324
+ const statuses = {
1325
+ 'NEW': 'open',
1326
+ 'UNTRIGGERED': 'open',
1327
+ 'OPEN': 'open',
1328
+ 'CLOSED': 'closed',
1329
+ };
1330
+ return this.safeString(statuses, status, status);
1331
+ }
1332
+ return status;
1333
+ }
1334
+ parseOrderType(type) {
1335
+ const types = {
1336
+ 'LIMIT': 'limit',
1337
+ 'MARKET': 'market',
1338
+ 'STOP_LIMIT': 'limit',
1339
+ 'STOP_MARKET': 'market',
1340
+ };
1341
+ return this.safeStringLower(types, type, type);
1342
+ }
1343
+ convertShortString(str) {
1344
+ // TODO: add stringToBase16 in exchange
1345
+ return '0x' + this.binaryToBase16(this.base64ToBinary(this.stringToBase64(str)));
1346
+ }
1347
+ scaleNumber(num) {
1348
+ return Precise.stringMul(num, '100000000');
1349
+ }
1350
+ /**
1351
+ * @method
1352
+ * @name paradex#createOrder
1353
+ * @description create a trade order
1354
+ * @see https://docs.api.prod.paradex.trade/#create-order
1355
+ * @param {string} symbol unified symbol of the market to create an order in
1356
+ * @param {string} type 'market' or 'limit'
1357
+ * @param {string} side 'buy' or 'sell'
1358
+ * @param {float} amount how much of currency you want to trade in units of base currency
1359
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1360
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1361
+ * @param {float} [params.stopPrice] alias for triggerPrice
1362
+ * @param {float} [params.triggerPrice] The price a trigger order is triggered at
1363
+ * @param {float} [params.stopLossPrice] the price that a stop loss order is triggered at
1364
+ * @param {float} [params.takeProfitPrice] the price that a take profit order is triggered at
1365
+ * @param {string} [params.timeInForce] "GTC", "IOC", or "POST_ONLY"
1366
+ * @param {bool} [params.postOnly] true or false
1367
+ * @param {bool} [params.reduceOnly] Ensures that the executed order does not flip the opened position.
1368
+ * @param {string} [params.clientOrderId] a unique id for the order
1369
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1370
+ */
1371
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1372
+ await this.authenticateRest();
1373
+ await this.loadMarkets();
1374
+ const market = this.market(symbol);
1375
+ let reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only');
1376
+ const orderType = type.toUpperCase();
1377
+ const orderSide = side.toUpperCase();
1378
+ const request = {
1379
+ 'market': market['id'],
1380
+ 'side': orderSide,
1381
+ 'type': orderType, // LIMIT/MARKET/STOP_LIMIT/STOP_MARKET,STOP_LOSS_MARKET,STOP_LOSS_LIMIT,TAKE_PROFIT_MARKET,TAKE_PROFIT_LIMIT
1382
+ };
1383
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
1384
+ const stopLossPrice = this.safeString(params, 'stopLossPrice');
1385
+ const takeProfitPrice = this.safeString(params, 'takeProfitPrice');
1386
+ const isMarket = orderType === 'MARKET';
1387
+ const isTakeProfitOrder = (takeProfitPrice !== undefined);
1388
+ const isStopLossOrder = (stopLossPrice !== undefined);
1389
+ const isStopOrder = (triggerPrice !== undefined) || isTakeProfitOrder || isStopLossOrder;
1390
+ const timeInForce = this.safeStringUpper(params, 'timeInForce');
1391
+ const postOnly = this.isPostOnly(isMarket, undefined, params);
1392
+ if (!isMarket) {
1393
+ if (postOnly) {
1394
+ request['instruction'] = 'POST_ONLY';
1395
+ }
1396
+ else if (timeInForce === 'ioc') {
1397
+ request['instruction'] = 'IOC';
1398
+ }
1399
+ }
1400
+ if (price !== undefined) {
1401
+ request['price'] = this.priceToPrecision(symbol, price);
1402
+ }
1403
+ const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1404
+ if (clientOrderId !== undefined) {
1405
+ request['client_id'] = clientOrderId;
1406
+ }
1407
+ let sizeString = '0';
1408
+ let stopPrice = undefined;
1409
+ if (isStopOrder) {
1410
+ // flags: Reduce_Only must be provided for TPSL orders.
1411
+ if (isMarket) {
1412
+ if (isStopLossOrder) {
1413
+ stopPrice = this.priceToPrecision(symbol, stopLossPrice);
1414
+ reduceOnly = true;
1415
+ request['type'] = 'STOP_LOSS_MARKET';
1416
+ }
1417
+ else if (isTakeProfitOrder) {
1418
+ stopPrice = this.priceToPrecision(symbol, takeProfitPrice);
1419
+ reduceOnly = true;
1420
+ request['type'] = 'TAKE_PROFIT_MARKET';
1421
+ }
1422
+ else {
1423
+ stopPrice = this.priceToPrecision(symbol, triggerPrice);
1424
+ sizeString = this.amountToPrecision(symbol, amount);
1425
+ request['type'] = 'STOP_MARKET';
1426
+ }
1427
+ }
1428
+ else {
1429
+ if (isStopLossOrder) {
1430
+ stopPrice = this.priceToPrecision(symbol, stopLossPrice);
1431
+ reduceOnly = true;
1432
+ request['type'] = 'STOP_LOSS_LIMIT';
1433
+ }
1434
+ else if (isTakeProfitOrder) {
1435
+ stopPrice = this.priceToPrecision(symbol, takeProfitPrice);
1436
+ reduceOnly = true;
1437
+ request['type'] = 'TAKE_PROFIT_LIMIT';
1438
+ }
1439
+ else {
1440
+ stopPrice = this.priceToPrecision(symbol, triggerPrice);
1441
+ sizeString = this.amountToPrecision(symbol, amount);
1442
+ request['type'] = 'STOP_LIMIT';
1443
+ }
1444
+ }
1445
+ }
1446
+ else {
1447
+ sizeString = this.amountToPrecision(symbol, amount);
1448
+ }
1449
+ if (stopPrice !== undefined) {
1450
+ request['trigger_price'] = stopPrice;
1451
+ }
1452
+ request['size'] = sizeString;
1453
+ if (reduceOnly) {
1454
+ request['flags'] = [
1455
+ 'REDUCE_ONLY',
1456
+ ];
1457
+ }
1458
+ params = this.omit(params, ['reduceOnly', 'reduce_only', 'clOrdID', 'clientOrderId', 'client_order_id', 'postOnly', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
1459
+ const account = await this.retrieveAccount();
1460
+ const now = this.nonce();
1461
+ const orderReq = {
1462
+ 'timestamp': now * 1000,
1463
+ 'market': this.convertShortString(request['market']),
1464
+ 'side': (orderSide === 'BUY') ? '1' : '2',
1465
+ 'orderType': this.convertShortString(request['type']),
1466
+ 'size': this.scaleNumber(request['size']),
1467
+ 'price': (isMarket) ? '0' : this.scaleNumber(request['price']),
1468
+ };
1469
+ const domain = await this.prepareParadexDomain();
1470
+ const messageTypes = {
1471
+ 'Order': [
1472
+ { 'name': 'timestamp', 'type': 'felt' },
1473
+ { 'name': 'market', 'type': 'felt' },
1474
+ { 'name': 'side', 'type': 'felt' },
1475
+ { 'name': 'orderType', 'type': 'felt' },
1476
+ { 'name': 'size', 'type': 'felt' },
1477
+ { 'name': 'price', 'type': 'felt' },
1478
+ ],
1479
+ };
1480
+ const msg = this.starknetEncodeStructuredData(domain, messageTypes, orderReq, account['address']);
1481
+ const signature = this.starknetSign(msg, account['privateKey']);
1482
+ request['signature'] = signature;
1483
+ request['signature_timestamp'] = orderReq['timestamp'];
1484
+ const response = await this.privatePostOrders(this.extend(request, params));
1485
+ //
1486
+ // {
1487
+ // "account": "0x4638e3041366aa71720be63e32e53e1223316c7f0d56f7aa617542ed1e7512x",
1488
+ // "avg_fill_price": "26000",
1489
+ // "cancel_reason": "NOT_ENOUGH_MARGIN",
1490
+ // "client_id": "x1234",
1491
+ // "created_at": 1681493746016,
1492
+ // "flags": [
1493
+ // "REDUCE_ONLY"
1494
+ // ],
1495
+ // "id": "123456",
1496
+ // "instruction": "GTC",
1497
+ // "last_updated_at": 1681493746016,
1498
+ // "market": "BTC-USD-PERP",
1499
+ // "price": "26000",
1500
+ // "published_at": 1681493746016,
1501
+ // "received_at": 1681493746016,
1502
+ // "remaining_size": "0",
1503
+ // "seq_no": 1681471234972000000,
1504
+ // "side": "BUY",
1505
+ // "size": "0.05",
1506
+ // "status": "NEW",
1507
+ // "stp": "EXPIRE_MAKER",
1508
+ // "timestamp": 1681493746016,
1509
+ // "trigger_price": "26000",
1510
+ // "type": "MARKET"
1511
+ // }
1512
+ //
1513
+ const order = this.parseOrder(response, market);
1514
+ return order;
1515
+ }
1516
+ /**
1517
+ * @method
1518
+ * @name paradex#cancelOrder
1519
+ * @description cancels an open order
1520
+ * @see https://docs.api.prod.paradex.trade/#cancel-order
1521
+ * @see https://docs.api.prod.paradex.trade/#cancel-open-order-by-client-order-id
1522
+ * @param {string} id order id
1523
+ * @param {string} symbol unified symbol of the market the order was made in
1524
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1525
+ * @param {string} [params.clientOrderId] a unique id for the order
1526
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1527
+ */
1528
+ async cancelOrder(id, symbol = undefined, params = {}) {
1529
+ await this.authenticateRest();
1530
+ await this.loadMarkets();
1531
+ const request = {};
1532
+ const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1533
+ let response = undefined;
1534
+ if (clientOrderId !== undefined) {
1535
+ request['client_id'] = clientOrderId;
1536
+ response = await this.privateDeleteOrdersByClientIdClientId(this.extend(request, params));
1537
+ }
1538
+ else {
1539
+ request['order_id'] = id;
1540
+ response = await this.privateDeleteOrdersOrderId(this.extend(request, params));
1541
+ }
1542
+ //
1543
+ // if success, no response...
1544
+ //
1545
+ return this.parseOrder(response);
1546
+ }
1547
+ /**
1548
+ * @method
1549
+ * @name paradex#cancelAllOrders
1550
+ * @description cancel all open orders in a market
1551
+ * @see https://docs.api.prod.paradex.trade/#cancel-all-open-orders
1552
+ * @param {string} symbol unified market symbol of the market to cancel orders in
1553
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1554
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1555
+ */
1556
+ async cancelAllOrders(symbol = undefined, params = {}) {
1557
+ if (symbol === undefined) {
1558
+ throw new ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol argument');
1559
+ }
1560
+ await this.authenticateRest();
1561
+ await this.loadMarkets();
1562
+ const market = this.market(symbol);
1563
+ const request = {
1564
+ 'market': market['id'],
1565
+ };
1566
+ const response = await this.privateDeleteOrders(this.extend(request, params));
1567
+ //
1568
+ // if success, no response...
1569
+ //
1570
+ return [this.safeOrder({ 'info': response })];
1571
+ }
1572
+ /**
1573
+ * @method
1574
+ * @name paradex#fetchOrder
1575
+ * @description fetches information on an order made by the user
1576
+ * @see https://docs.api.prod.paradex.trade/#get-order
1577
+ * @see https://docs.api.prod.paradex.trade/#get-order-by-client-id
1578
+ * @param {string} id the order id
1579
+ * @param {string} symbol unified symbol of the market the order was made in
1580
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1581
+ * @param {string} [params.clientOrderId] a unique id for the order
1582
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1583
+ */
1584
+ async fetchOrder(id, symbol = undefined, params = {}) {
1585
+ await this.authenticateRest();
1586
+ await this.loadMarkets();
1587
+ const request = {};
1588
+ const clientOrderId = this.safeStringN(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1589
+ params = this.omit(params, ['clOrdID', 'clientOrderId', 'client_order_id']);
1590
+ let response = undefined;
1591
+ if (clientOrderId !== undefined) {
1592
+ request['client_id'] = clientOrderId;
1593
+ response = await this.privateGetOrdersByClientIdClientId(this.extend(request, params));
1594
+ }
1595
+ else {
1596
+ request['order_id'] = id;
1597
+ response = await this.privateGetOrdersOrderId(this.extend(request, params));
1598
+ }
1599
+ //
1600
+ // {
1601
+ // "id": "1718941725080201704028870000",
1602
+ // "account": "0x49ddd7a564c978f6e4089ff8355b56a42b7e2d48ba282cb5aad60f04bea0ec3",
1603
+ // "market": "BTC-USD-PERP",
1604
+ // "side": "SELL",
1605
+ // "type": "LIMIT",
1606
+ // "size": "10.153",
1607
+ // "remaining_size": "10.153",
1608
+ // "price": "70784.5",
1609
+ // "status": "CLOSED",
1610
+ // "created_at": 1718941725082,
1611
+ // "last_updated_at": 1718958002991,
1612
+ // "timestamp": 1718941724678,
1613
+ // "cancel_reason": "USER_CANCELED",
1614
+ // "client_id": "",
1615
+ // "seq_no": 1718958002991595738,
1616
+ // "instruction": "GTC",
1617
+ // "avg_fill_price": "",
1618
+ // "stp": "EXPIRE_TAKER",
1619
+ // "received_at": 1718958510959,
1620
+ // "published_at": 1718958510960,
1621
+ // "flags": [],
1622
+ // "trigger_price": "0"
1623
+ // }
1624
+ //
1625
+ return this.parseOrder(response);
1626
+ }
1627
+ /**
1628
+ * @method
1629
+ * @name paradex#fetchOrders
1630
+ * @description fetches information on multiple orders made by the user
1631
+ * @see https://docs.api.prod.paradex.trade/#get-orders
1632
+ * @param {string} symbol unified market symbol of the market orders were made in
1633
+ * @param {int} [since] the earliest time in ms to fetch orders for
1634
+ * @param {int} [limit] the maximum number of order structures to retrieve
1635
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1636
+ * @param {string} [params.side] 'buy' or 'sell'
1637
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
1638
+ * @param {int} params.until timestamp in ms of the latest order to fetch
1639
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1640
+ */
1641
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1642
+ await this.authenticateRest();
1643
+ await this.loadMarkets();
1644
+ let paginate = false;
1645
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');
1646
+ if (paginate) {
1647
+ return await this.fetchPaginatedCallCursor('fetchOrders', symbol, since, limit, params, 'next', 'cursor', undefined, 50);
1648
+ }
1649
+ let request = {};
1650
+ let market = undefined;
1651
+ if (symbol !== undefined) {
1652
+ market = this.market(symbol);
1653
+ request['market'] = market['id'];
1654
+ }
1655
+ if (since !== undefined) {
1656
+ request['start_at'] = since;
1657
+ }
1658
+ if (limit !== undefined) {
1659
+ request['page_size'] = limit;
1660
+ }
1661
+ [request, params] = this.handleUntilOption('end_at', request, params);
1662
+ const response = await this.privateGetOrdersHistory(this.extend(request, params));
1663
+ //
1664
+ // {
1665
+ // "next": "eyJmaWx0ZXIiMsIm1hcmtlciI6eyJtYXJrZXIiOiIxNjc1NjUwMDE3NDMxMTAxNjk5N=",
1666
+ // "prev": "eyJmaWx0ZXIiOnsiTGltaXQiOjkwfSwidGltZSI6MTY4MTY3OTgzNzk3MTMwOTk1MywibWFya2VyIjp7Im1zMjExMD==",
1667
+ // "results": [
1668
+ // {
1669
+ // "account": "0x4638e3041366aa71720be63e32e53e1223316c7f0d56f7aa617542ed1e7512x",
1670
+ // "avg_fill_price": "26000",
1671
+ // "cancel_reason": "NOT_ENOUGH_MARGIN",
1672
+ // "client_id": "x1234",
1673
+ // "created_at": 1681493746016,
1674
+ // "flags": [
1675
+ // "REDUCE_ONLY"
1676
+ // ],
1677
+ // "id": "123456",
1678
+ // "instruction": "GTC",
1679
+ // "last_updated_at": 1681493746016,
1680
+ // "market": "BTC-USD-PERP",
1681
+ // "price": "26000",
1682
+ // "published_at": 1681493746016,
1683
+ // "received_at": 1681493746016,
1684
+ // "remaining_size": "0",
1685
+ // "seq_no": 1681471234972000000,
1686
+ // "side": "BUY",
1687
+ // "size": "0.05",
1688
+ // "status": "NEW",
1689
+ // "stp": "EXPIRE_MAKER",
1690
+ // "timestamp": 1681493746016,
1691
+ // "trigger_price": "26000",
1692
+ // "type": "MARKET"
1693
+ // }
1694
+ // ]
1695
+ // }
1696
+ //
1697
+ const orders = this.safeList(response, 'results', []);
1698
+ const paginationCursor = this.safeString(response, 'next');
1699
+ const ordersLength = orders.length;
1700
+ if ((paginationCursor !== undefined) && (ordersLength > 0)) {
1701
+ const first = orders[0];
1702
+ first['next'] = paginationCursor;
1703
+ orders[0] = first;
1704
+ }
1705
+ return this.parseOrders(orders, market, since, limit);
1706
+ }
1707
+ /**
1708
+ * @method
1709
+ * @name paradex#fetchOpenOrders
1710
+ * @description fetches information on multiple orders made by the user
1711
+ * @see https://docs.api.prod.paradex.trade/#paradex-rest-api-orders
1712
+ * @param {string} symbol unified market symbol of the market orders were made in
1713
+ * @param {int} [since] the earliest time in ms to fetch orders for
1714
+ * @param {int} [limit] the maximum number of order structures to retrieve
1715
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1716
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1717
+ */
1718
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1719
+ await this.authenticateRest();
1720
+ await this.loadMarkets();
1721
+ const request = {};
1722
+ let market = undefined;
1723
+ if (symbol !== undefined) {
1724
+ market = this.market(symbol);
1725
+ request['market'] = market['id'];
1726
+ }
1727
+ const response = await this.privateGetOrders(this.extend(request, params));
1728
+ //
1729
+ // {
1730
+ // "results": [
1731
+ // {
1732
+ // "account": "0x4638e3041366aa71720be63e32e53e1223316c7f0d56f7aa617542ed1e7512x",
1733
+ // "avg_fill_price": "26000",
1734
+ // "client_id": "x1234",
1735
+ // "cancel_reason": "NOT_ENOUGH_MARGIN",
1736
+ // "created_at": 1681493746016,
1737
+ // "flags": [
1738
+ // "REDUCE_ONLY"
1739
+ // ],
1740
+ // "id": "123456",
1741
+ // "instruction": "GTC",
1742
+ // "last_updated_at": 1681493746016,
1743
+ // "market": "BTC-USD-PERP",
1744
+ // "price": "26000",
1745
+ // "published_at": 1681493746016,
1746
+ // "received_at": 1681493746016,
1747
+ // "remaining_size": "0",
1748
+ // "seq_no": 1681471234972000000,
1749
+ // "side": "BUY",
1750
+ // "size": "0.05",
1751
+ // "status": "NEW",
1752
+ // "stp": "EXPIRE_MAKER",
1753
+ // "timestamp": 1681493746016,
1754
+ // "trigger_price": "26000",
1755
+ // "type": "MARKET"
1756
+ // }
1757
+ // ]
1758
+ // }
1759
+ //
1760
+ const orders = this.safeList(response, 'results', []);
1761
+ return this.parseOrders(orders, market, since, limit);
1762
+ }
1763
+ /**
1764
+ * @method
1765
+ * @name paradex#fetchBalance
1766
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1767
+ * @see https://docs.api.prod.paradex.trade/#list-balances
1768
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1769
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1770
+ */
1771
+ async fetchBalance(params = {}) {
1772
+ await this.authenticateRest();
1773
+ await this.loadMarkets();
1774
+ const response = await this.privateGetBalance();
1775
+ //
1776
+ // {
1777
+ // "results": [
1778
+ // {
1779
+ // "token": "USDC",
1780
+ // "size": "99980.2382266290601",
1781
+ // "last_updated_at": 1718529757240
1782
+ // }
1783
+ // ]
1784
+ // }
1785
+ //
1786
+ const data = this.safeList(response, 'results', []);
1787
+ return this.parseBalance(data);
1788
+ }
1789
+ parseBalance(response) {
1790
+ const result = { 'info': response };
1791
+ for (let i = 0; i < response.length; i++) {
1792
+ const balance = this.safeDict(response, i, {});
1793
+ const currencyId = this.safeString(balance, 'token');
1794
+ const code = this.safeCurrencyCode(currencyId);
1795
+ const account = this.account();
1796
+ account['total'] = this.safeString(balance, 'size');
1797
+ result[code] = account;
1798
+ }
1799
+ return this.safeBalance(result);
1800
+ }
1801
+ /**
1802
+ * @method
1803
+ * @name paradex#fetchMyTrades
1804
+ * @description fetch all trades made by the user
1805
+ * @see https://docs.api.prod.paradex.trade/#list-fills
1806
+ * @param {string} symbol unified market symbol
1807
+ * @param {int} [since] the earliest time in ms to fetch trades for
1808
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1809
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1810
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1811
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1812
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1813
+ */
1814
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1815
+ await this.authenticateRest();
1816
+ await this.loadMarkets();
1817
+ let paginate = false;
1818
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
1819
+ if (paginate) {
1820
+ return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, 'next', 'cursor', undefined, 100);
1821
+ }
1822
+ let request = {};
1823
+ let market = undefined;
1824
+ if (symbol !== undefined) {
1825
+ market = this.market(symbol);
1826
+ request['market'] = market['id'];
1827
+ }
1828
+ if (limit !== undefined) {
1829
+ request['page_size'] = limit;
1830
+ }
1831
+ if (since !== undefined) {
1832
+ request['start_at'] = since;
1833
+ }
1834
+ [request, params] = this.handleUntilOption('end_at', request, params);
1835
+ const response = await this.privateGetFills(this.extend(request, params));
1836
+ //
1837
+ // {
1838
+ // "next": null,
1839
+ // "prev": null,
1840
+ // "results": [
1841
+ // {
1842
+ // "id": "1718947571560201703986670001",
1843
+ // "side": "BUY",
1844
+ // "liquidity": "TAKER",
1845
+ // "market": "BTC-USD-PERP",
1846
+ // "order_id": "1718947571540201703992340000",
1847
+ // "price": "64852.9",
1848
+ // "size": "0.01",
1849
+ // "fee": "0.1945587",
1850
+ // "fee_currency": "USDC",
1851
+ // "created_at": 1718947571569,
1852
+ // "remaining_size": "0",
1853
+ // "client_id": "",
1854
+ // "fill_type": "FILL"
1855
+ // }
1856
+ // ]
1857
+ // }
1858
+ //
1859
+ const trades = this.safeList(response, 'results', []);
1860
+ for (let i = 0; i < trades.length; i++) {
1861
+ trades[i]['next'] = this.safeString(response, 'next');
1862
+ }
1863
+ return this.parseTrades(trades, market, since, limit);
1864
+ }
1865
+ /**
1866
+ * @method
1867
+ * @name paradex#fetchPosition
1868
+ * @description fetch data on an open position
1869
+ * @see https://docs.api.prod.paradex.trade/#list-open-positions
1870
+ * @param {string} symbol unified market symbol of the market the position is held in
1871
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1872
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
1873
+ */
1874
+ async fetchPosition(symbol, params = {}) {
1875
+ await this.authenticateRest();
1876
+ await this.loadMarkets();
1877
+ const market = this.market(symbol);
1878
+ const positions = await this.fetchPositions([market['symbol']], params);
1879
+ return this.safeDict(positions, 0, {});
1880
+ }
1881
+ /**
1882
+ * @method
1883
+ * @name paradex#fetchPositions
1884
+ * @description fetch all open positions
1885
+ * @see https://docs.api.prod.paradex.trade/#list-open-positions
1886
+ * @param {string[]} [symbols] list of unified market symbols
1887
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1888
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
1889
+ */
1890
+ async fetchPositions(symbols = undefined, params = {}) {
1891
+ await this.authenticateRest();
1892
+ await this.loadMarkets();
1893
+ symbols = this.marketSymbols(symbols);
1894
+ const response = await this.privateGetPositions();
1895
+ //
1896
+ // {
1897
+ // "results": [
1898
+ // {
1899
+ // "id": "0x49ddd7a564c978f6e4089ff8355b56a42b7e2d48ba282cb5aad60f04bea0ec3-BTC-USD-PERP",
1900
+ // "market": "BTC-USD-PERP",
1901
+ // "status": "OPEN",
1902
+ // "side": "LONG",
1903
+ // "size": "0.01",
1904
+ // "average_entry_price": "64839.96053748",
1905
+ // "average_entry_price_usd": "64852.9",
1906
+ // "realized_pnl": "0",
1907
+ // "unrealized_pnl": "-2.39677214",
1908
+ // "unrealized_funding_pnl": "-0.11214013",
1909
+ // "cost": "648.39960537",
1910
+ // "cost_usd": "648.529",
1911
+ // "cached_funding_index": "35202.1002351",
1912
+ // "last_updated_at": 1718950074249,
1913
+ // "last_fill_id": "1718947571560201703986670001",
1914
+ // "seq_no": 1718950074249176253,
1915
+ // "liquidation_price": ""
1916
+ // }
1917
+ // ]
1918
+ // }
1919
+ //
1920
+ const data = this.safeList(response, 'results', []);
1921
+ return this.parsePositions(data, symbols);
1922
+ }
1923
+ parsePosition(position, market = undefined) {
1924
+ //
1925
+ // {
1926
+ // "id": "0x49ddd7a564c978f6e4089ff8355b56a42b7e2d48ba282cb5aad60f04bea0ec3-BTC-USD-PERP",
1927
+ // "market": "BTC-USD-PERP",
1928
+ // "status": "OPEN",
1929
+ // "side": "LONG",
1930
+ // "size": "0.01",
1931
+ // "average_entry_price": "64839.96053748",
1932
+ // "average_entry_price_usd": "64852.9",
1933
+ // "realized_pnl": "0",
1934
+ // "unrealized_pnl": "-2.39677214",
1935
+ // "unrealized_funding_pnl": "-0.11214013",
1936
+ // "cost": "648.39960537",
1937
+ // "cost_usd": "648.529",
1938
+ // "cached_funding_index": "35202.1002351",
1939
+ // "last_updated_at": 1718950074249,
1940
+ // "last_fill_id": "1718947571560201703986670001",
1941
+ // "seq_no": 1718950074249176253,
1942
+ // "liquidation_price": ""
1943
+ // }
1944
+ //
1945
+ const marketId = this.safeString(position, 'market');
1946
+ market = this.safeMarket(marketId, market);
1947
+ const symbol = market['symbol'];
1948
+ const side = this.safeStringLower(position, 'side');
1949
+ let quantity = this.safeString(position, 'size');
1950
+ if (side !== 'long') {
1951
+ quantity = Precise.stringMul('-1', quantity);
1952
+ }
1953
+ const timestamp = this.safeInteger(position, 'time');
1954
+ return this.safePosition({
1955
+ 'info': position,
1956
+ 'id': this.safeString(position, 'id'),
1957
+ 'symbol': symbol,
1958
+ 'entryPrice': this.safeString(position, 'average_entry_price'),
1959
+ 'markPrice': undefined,
1960
+ 'notional': undefined,
1961
+ 'collateral': this.safeString(position, 'cost'),
1962
+ 'unrealizedPnl': this.safeString(position, 'unrealized_pnl'),
1963
+ 'side': side,
1964
+ 'contracts': this.parseNumber(quantity),
1965
+ 'contractSize': undefined,
1966
+ 'timestamp': timestamp,
1967
+ 'datetime': this.iso8601(timestamp),
1968
+ 'hedged': undefined,
1969
+ 'maintenanceMargin': undefined,
1970
+ 'maintenanceMarginPercentage': undefined,
1971
+ 'initialMargin': undefined,
1972
+ 'initialMarginPercentage': undefined,
1973
+ 'leverage': undefined,
1974
+ 'liquidationPrice': undefined,
1975
+ 'marginRatio': undefined,
1976
+ 'marginMode': undefined,
1977
+ 'percentage': undefined,
1978
+ });
1979
+ }
1980
+ /**
1981
+ * @method
1982
+ * @name paradex#fetchLiquidations
1983
+ * @description retrieves the public liquidations of a trading pair
1984
+ * @see https://docs.api.prod.paradex.trade/#list-liquidations
1985
+ * @param {string} symbol unified CCXT market symbol
1986
+ * @param {int} [since] the earliest time in ms to fetch liquidations for
1987
+ * @param {int} [limit] the maximum number of liquidation structures to retrieve
1988
+ * @param {object} [params] exchange specific parameters for the huobi api endpoint
1989
+ * @param {int} [params.until] timestamp in ms of the latest liquidation
1990
+ * @returns {object} an array of [liquidation structures]{@link https://docs.ccxt.com/#/?id=liquidation-structure}
1991
+ */
1992
+ async fetchLiquidations(symbol, since = undefined, limit = undefined, params = {}) {
1993
+ await this.authenticateRest();
1994
+ let request = {};
1995
+ if (since !== undefined) {
1996
+ request['from'] = since;
1997
+ }
1998
+ else {
1999
+ request['from'] = 1;
2000
+ }
2001
+ const market = this.market(symbol);
2002
+ [request, params] = this.handleUntilOption('to', request, params);
2003
+ const response = await this.privateGetLiquidations(this.extend(request, params));
2004
+ //
2005
+ // {
2006
+ // "results": [
2007
+ // {
2008
+ // "created_at": 1697213130097,
2009
+ // "id": "0x123456789"
2010
+ // }
2011
+ // ]
2012
+ // }
2013
+ //
2014
+ const data = this.safeList(response, 'results', []);
2015
+ return this.parseLiquidations(data, market, since, limit);
2016
+ }
2017
+ parseLiquidation(liquidation, market = undefined) {
2018
+ //
2019
+ // {
2020
+ // "created_at": 1697213130097,
2021
+ // "id": "0x123456789"
2022
+ // }
2023
+ //
2024
+ const timestamp = this.safeInteger(liquidation, 'created_at');
2025
+ return this.safeLiquidation({
2026
+ 'info': liquidation,
2027
+ 'symbol': undefined,
2028
+ 'contracts': undefined,
2029
+ 'contractSize': undefined,
2030
+ 'price': undefined,
2031
+ 'side': undefined,
2032
+ 'baseValue': undefined,
2033
+ 'quoteValue': undefined,
2034
+ 'timestamp': timestamp,
2035
+ 'datetime': this.iso8601(timestamp),
2036
+ });
2037
+ }
2038
+ /**
2039
+ * @method
2040
+ * @name paradex#fetchTransfers
2041
+ * @description fetch all deposits made to an account
2042
+ * @see https://docs.api.prod.paradex.trade/#paradex-rest-api-transfers
2043
+ * @param {string} code unified currency code
2044
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2045
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2046
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2047
+ * @param {int} [params.until] the latest time in ms to fetch entries for
2048
+ * @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)
2049
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2050
+ */
2051
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2052
+ await this.authenticateRest();
2053
+ await this.loadMarkets();
2054
+ let paginate = false;
2055
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');
2056
+ if (paginate) {
2057
+ return await this.fetchPaginatedCallCursor('fetchDeposits', code, since, limit, params, 'next', 'cursor', undefined, 100);
2058
+ }
2059
+ let request = {};
2060
+ if (limit !== undefined) {
2061
+ request['page_size'] = limit;
2062
+ }
2063
+ if (since !== undefined) {
2064
+ request['start_at'] = since;
2065
+ }
2066
+ [request, params] = this.handleUntilOption('end_at', request, params);
2067
+ const response = await this.privateGetTransfers(this.extend(request, params));
2068
+ //
2069
+ // {
2070
+ // "next": null,
2071
+ // "prev": null,
2072
+ // "results": [
2073
+ // {
2074
+ // "id": "1718940471200201703989430000",
2075
+ // "account": "0x49ddd7a564c978f6e4089ff8355b56a42b7e2d48ba282cb5aad60f04bea0ec3",
2076
+ // "kind": "DEPOSIT",
2077
+ // "status": "COMPLETED",
2078
+ // "amount": "100000",
2079
+ // "token": "USDC",
2080
+ // "created_at": 1718940471208,
2081
+ // "last_updated_at": 1718941455546,
2082
+ // "txn_hash": "0x73a415ca558a97bbdcd1c43e52b45f1e0486a0a84b3bb4958035ad6c59cb866",
2083
+ // "external_txn_hash": "",
2084
+ // "socialized_loss_factor": ""
2085
+ // }
2086
+ // ]
2087
+ // }
2088
+ //
2089
+ const rows = this.safeList(response, 'results', []);
2090
+ const deposits = [];
2091
+ for (let i = 0; i < rows.length; i++) {
2092
+ const row = rows[i];
2093
+ if (row['kind'] === 'DEPOSIT') {
2094
+ deposits.push(row);
2095
+ }
2096
+ }
2097
+ return this.parseTransactions(deposits, undefined, since, limit);
2098
+ }
2099
+ /**
2100
+ * @method
2101
+ * @name paradex#fetchWithdrawals
2102
+ * @description fetch all withdrawals made from an account
2103
+ * @see https://docs.api.prod.paradex.trade/#paradex-rest-api-transfers
2104
+ * @param {string} code unified currency code
2105
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2106
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2107
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2108
+ * @param {int} [params.until] the latest time in ms to fetch withdrawals for
2109
+ * @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)
2110
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2111
+ */
2112
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2113
+ await this.authenticateRest();
2114
+ await this.loadMarkets();
2115
+ let paginate = false;
2116
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');
2117
+ if (paginate) {
2118
+ return await this.fetchPaginatedCallCursor('fetchWithdrawals', code, since, limit, params, 'next', 'cursor', undefined, 100);
2119
+ }
2120
+ let request = {};
2121
+ if (limit !== undefined) {
2122
+ request['page_size'] = limit;
2123
+ }
2124
+ if (since !== undefined) {
2125
+ request['start_at'] = since;
2126
+ }
2127
+ [request, params] = this.handleUntilOption('end_at', request, params);
2128
+ const response = await this.privateGetTransfers(this.extend(request, params));
2129
+ //
2130
+ // {
2131
+ // "next": null,
2132
+ // "prev": null,
2133
+ // "results": [
2134
+ // {
2135
+ // "id": "1718940471200201703989430000",
2136
+ // "account": "0x49ddd7a564c978f6e4089ff8355b56a42b7e2d48ba282cb5aad60f04bea0ec3",
2137
+ // "kind": "DEPOSIT",
2138
+ // "status": "COMPLETED",
2139
+ // "amount": "100000",
2140
+ // "token": "USDC",
2141
+ // "created_at": 1718940471208,
2142
+ // "last_updated_at": 1718941455546,
2143
+ // "txn_hash": "0x73a415ca558a97bbdcd1c43e52b45f1e0486a0a84b3bb4958035ad6c59cb866",
2144
+ // "external_txn_hash": "",
2145
+ // "socialized_loss_factor": ""
2146
+ // }
2147
+ // ]
2148
+ // }
2149
+ //
2150
+ const rows = this.safeList(response, 'results', []);
2151
+ const deposits = [];
2152
+ for (let i = 0; i < rows.length; i++) {
2153
+ const row = rows[i];
2154
+ if (row['kind'] === 'WITHDRAWAL') {
2155
+ deposits.push(row);
2156
+ }
2157
+ }
2158
+ return this.parseTransactions(deposits, undefined, since, limit);
2159
+ }
2160
+ parseTransaction(transaction, currency = undefined) {
2161
+ //
2162
+ // fetchDeposits & fetchWithdrawals
2163
+ //
2164
+ // {
2165
+ // "id": "1718940471200201703989430000",
2166
+ // "account": "0x49ddd7a564c978f6e4089ff8355b56a42b7e2d48ba282cb5aad60f04bea0ec3",
2167
+ // "kind": "DEPOSIT",
2168
+ // "status": "COMPLETED",
2169
+ // "amount": "100000",
2170
+ // "token": "USDC",
2171
+ // "created_at": 1718940471208,
2172
+ // "last_updated_at": 1718941455546,
2173
+ // "txn_hash": "0x73a415ca558a97bbdcd1c43e52b45f1e0486a0a84b3bb4958035ad6c59cb866",
2174
+ // "external_txn_hash": "",
2175
+ // "socialized_loss_factor": ""
2176
+ // }
2177
+ //
2178
+ const id = this.safeString(transaction, 'id');
2179
+ const address = this.safeString(transaction, 'account');
2180
+ const txid = this.safeString(transaction, 'txn_hash');
2181
+ const currencyId = this.safeString(transaction, 'token');
2182
+ const code = this.safeCurrencyCode(currencyId, currency);
2183
+ const timestamp = this.safeInteger(transaction, 'created_at');
2184
+ const updated = this.safeInteger(transaction, 'last_updated_at');
2185
+ let type = this.safeString(transaction, 'kind');
2186
+ type = (type === 'DEPOSIT') ? 'deposit' : 'withdrawal';
2187
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'status'));
2188
+ const amount = this.safeNumber(transaction, 'amount');
2189
+ return {
2190
+ 'info': transaction,
2191
+ 'id': id,
2192
+ 'txid': txid,
2193
+ 'timestamp': timestamp,
2194
+ 'datetime': this.iso8601(timestamp),
2195
+ 'network': undefined,
2196
+ 'address': address,
2197
+ 'addressTo': address,
2198
+ 'addressFrom': undefined,
2199
+ 'tag': undefined,
2200
+ 'tagTo': undefined,
2201
+ 'tagFrom': undefined,
2202
+ 'type': type,
2203
+ 'amount': amount,
2204
+ 'currency': code,
2205
+ 'status': status,
2206
+ 'updated': updated,
2207
+ 'internal': undefined,
2208
+ 'comment': undefined,
2209
+ 'fee': undefined,
2210
+ };
2211
+ }
2212
+ parseTransactionStatus(status) {
2213
+ const statuses = {
2214
+ 'PENDING': 'pending',
2215
+ 'AVAILABLE': 'pending',
2216
+ 'COMPLETED': 'ok',
2217
+ 'FAILED': 'failed',
2218
+ };
2219
+ return this.safeString(statuses, status, status);
2220
+ }
2221
+ /**
2222
+ * @method
2223
+ * @name paradex#fetchMarginMode
2224
+ * @description fetches the margin mode of a specific symbol
2225
+ * @see https://docs.api.testnet.paradex.trade/#get-account-margin-configuration
2226
+ * @param {string} symbol unified symbol of the market the order was made in
2227
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2228
+ * @returns {object} a [margin mode structure]{@link https://docs.ccxt.com/#/?id=margin-mode-structure}
2229
+ */
2230
+ async fetchMarginMode(symbol, params = {}) {
2231
+ await this.authenticateRest();
2232
+ await this.loadMarkets();
2233
+ const market = this.market(symbol);
2234
+ const request = {
2235
+ 'market': market['id'],
2236
+ };
2237
+ const response = await this.privateGetAccountMargin(this.extend(request, params));
2238
+ //
2239
+ // {
2240
+ // "account": "0x6343248026a845b39a8a73fbe9c7ef0a841db31ed5c61ec1446aa9d25e54dbc",
2241
+ // "configs": [
2242
+ // {
2243
+ // "market": "SOL-USD-PERP",
2244
+ // "leverage": 50,
2245
+ // "margin_type": "CROSS"
2246
+ // }
2247
+ // ]
2248
+ // }
2249
+ //
2250
+ const configs = this.safeList(response, 'configs');
2251
+ return this.parseMarginMode(this.safeDict(configs, 0), market);
2252
+ }
2253
+ parseMarginMode(rawMarginMode, market = undefined) {
2254
+ const marketId = this.safeString(rawMarginMode, 'market');
2255
+ market = this.safeMarket(marketId, market);
2256
+ const marginMode = this.safeStringLower(rawMarginMode, 'margin_type');
2257
+ return {
2258
+ 'info': rawMarginMode,
2259
+ 'symbol': market['symbol'],
2260
+ 'marginMode': marginMode,
2261
+ };
2262
+ }
2263
+ /**
2264
+ * @method
2265
+ * @name paradex#setMarginMode
2266
+ * @description set margin mode to 'cross' or 'isolated'
2267
+ * @see https://docs.api.testnet.paradex.trade/#set-margin-configuration
2268
+ * @param {string} marginMode 'cross' or 'isolated'
2269
+ * @param {string} symbol unified market symbol
2270
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2271
+ * @param {float} [params.leverage] the rate of leverage
2272
+ * @returns {object} response from the exchange
2273
+ */
2274
+ async setMarginMode(marginMode, symbol = undefined, params = {}) {
2275
+ this.checkRequiredArgument('setMarginMode', symbol, 'symbol');
2276
+ await this.authenticateRest();
2277
+ await this.loadMarkets();
2278
+ const market = this.market(symbol);
2279
+ let leverage = undefined;
2280
+ [leverage, params] = this.handleOptionAndParams(params, 'setMarginMode', 'leverage', 1);
2281
+ const request = {
2282
+ 'market': market['id'],
2283
+ 'leverage': leverage,
2284
+ 'margin_type': this.encodeMarginMode(marginMode),
2285
+ };
2286
+ return await this.privatePostAccountMarginMarket(this.extend(request, params));
2287
+ }
2288
+ /**
2289
+ * @method
2290
+ * @name paradex#fetchLeverage
2291
+ * @description fetch the set leverage for a market
2292
+ * @see https://docs.api.testnet.paradex.trade/#get-account-margin-configuration
2293
+ * @param {string} symbol unified market symbol
2294
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2295
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2296
+ */
2297
+ async fetchLeverage(symbol, params = {}) {
2298
+ await this.authenticateRest();
2299
+ await this.loadMarkets();
2300
+ const market = this.market(symbol);
2301
+ const request = {
2302
+ 'market': market['id'],
2303
+ };
2304
+ const response = await this.privateGetAccountMargin(this.extend(request, params));
2305
+ //
2306
+ // {
2307
+ // "account": "0x6343248026a845b39a8a73fbe9c7ef0a841db31ed5c61ec1446aa9d25e54dbc",
2308
+ // "configs": [
2309
+ // {
2310
+ // "market": "SOL-USD-PERP",
2311
+ // "leverage": 50,
2312
+ // "margin_type": "CROSS"
2313
+ // }
2314
+ // ]
2315
+ // }
2316
+ //
2317
+ const configs = this.safeList(response, 'configs');
2318
+ return this.parseLeverage(this.safeDict(configs, 0), market);
2319
+ }
2320
+ parseLeverage(leverage, market = undefined) {
2321
+ const marketId = this.safeString(leverage, 'market');
2322
+ market = this.safeMarket(marketId, market);
2323
+ const marginMode = this.safeStringLower(leverage, 'margin_type');
2324
+ return {
2325
+ 'info': leverage,
2326
+ 'symbol': this.safeSymbol(marketId, market),
2327
+ 'marginMode': marginMode,
2328
+ 'longLeverage': this.safeInteger(leverage, 'leverage'),
2329
+ 'shortLeverage': this.safeInteger(leverage, 'leverage'),
2330
+ };
2331
+ }
2332
+ encodeMarginMode(mode) {
2333
+ const modes = {
2334
+ 'cross': 'CROSS',
2335
+ 'isolated': 'ISOLATED',
2336
+ };
2337
+ return this.safeString(modes, mode, mode);
2338
+ }
2339
+ /**
2340
+ * @method
2341
+ * @name paradex#setLeverage
2342
+ * @description set the level of leverage for a market
2343
+ * @see https://docs.api.testnet.paradex.trade/#set-margin-configuration
2344
+ * @param {float} leverage the rate of leverage
2345
+ * @param {string} [symbol] unified market symbol (is mandatory for swap markets)
2346
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2347
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
2348
+ * @returns {object} response from the exchange
2349
+ */
2350
+ async setLeverage(leverage, symbol = undefined, params = {}) {
2351
+ this.checkRequiredArgument('setLeverage', symbol, 'symbol');
2352
+ await this.authenticateRest();
2353
+ await this.loadMarkets();
2354
+ const market = this.market(symbol);
2355
+ let marginMode = undefined;
2356
+ [marginMode, params] = this.handleMarginModeAndParams('setLeverage', params, 'cross');
2357
+ const request = {
2358
+ 'market': market['id'],
2359
+ 'leverage': leverage,
2360
+ 'margin_type': this.encodeMarginMode(marginMode),
2361
+ };
2362
+ return await this.privatePostAccountMarginMarket(this.extend(request, params));
2363
+ }
2364
+ /**
2365
+ * @method
2366
+ * @name paradex#fetchGreeks
2367
+ * @description fetches an option contracts greeks, financial metrics used to measure the factors that affect the price of an options contract
2368
+ * @see https://docs.api.testnet.paradex.trade/#list-available-markets-summary
2369
+ * @param {string} symbol unified symbol of the market to fetch greeks for
2370
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2371
+ * @returns {object} a [greeks structure]{@link https://docs.ccxt.com/#/?id=greeks-structure}
2372
+ */
2373
+ async fetchGreeks(symbol, params = {}) {
2374
+ await this.loadMarkets();
2375
+ const market = this.market(symbol);
2376
+ const request = {
2377
+ 'market': market['id'],
2378
+ };
2379
+ const response = await this.publicGetMarketsSummary(this.extend(request, params));
2380
+ //
2381
+ // {
2382
+ // "results": [
2383
+ // {
2384
+ // "symbol": "BTC-USD-114000-P",
2385
+ // "mark_price": "10835.66892602",
2386
+ // "mark_iv": "0.71781855",
2387
+ // "delta": "-0.98726024",
2388
+ // "greeks": {
2389
+ // "delta": "-0.9872602390817709",
2390
+ // "gamma": "0.000004560958862297231",
2391
+ // "vega": "227.11344863639806",
2392
+ // "rho": "-302.0617972461581",
2393
+ // "vanna": "0.06609830491614832",
2394
+ // "volga": "925.9501532805552"
2395
+ // },
2396
+ // "last_traded_price": "10551.5",
2397
+ // "bid": "10794.9",
2398
+ // "bid_iv": "0.05",
2399
+ // "ask": "10887.3",
2400
+ // "ask_iv": "0.8783283",
2401
+ // "last_iv": "0.05",
2402
+ // "volume_24h": "0",
2403
+ // "total_volume": "195240.72672261014",
2404
+ // "created_at": 1747644009995,
2405
+ // "underlying_price": "103164.79162649",
2406
+ // "open_interest": "0",
2407
+ // "funding_rate": "0.000004464241170536191",
2408
+ // "price_change_rate_24h": "0.074915",
2409
+ // "future_funding_rate": "0.0001"
2410
+ // }
2411
+ // ]
2412
+ // }
2413
+ //
2414
+ const data = this.safeList(response, 'results', []);
2415
+ const greeks = this.safeDict(data, 0, {});
2416
+ return this.parseGreeks(greeks, market);
2417
+ }
2418
+ /**
2419
+ * @method
2420
+ * @name paradex#fetchAllGreeks
2421
+ * @description fetches all option contracts greeks, financial metrics used to measure the factors that affect the price of an options contract
2422
+ * @see https://docs.api.testnet.paradex.trade/#list-available-markets-summary
2423
+ * @param {string[]} [symbols] unified symbols of the markets to fetch greeks for, all markets are returned if not assigned
2424
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2425
+ * @returns {object} a [greeks structure]{@link https://docs.ccxt.com/#/?id=greeks-structure}
2426
+ */
2427
+ async fetchAllGreeks(symbols = undefined, params = {}) {
2428
+ await this.loadMarkets();
2429
+ symbols = this.marketSymbols(symbols, undefined, true, true, true);
2430
+ const request = {
2431
+ 'market': 'ALL',
2432
+ };
2433
+ const response = await this.publicGetMarketsSummary(this.extend(request, params));
2434
+ //
2435
+ // {
2436
+ // "results": [
2437
+ // {
2438
+ // "symbol": "BTC-USD-114000-P",
2439
+ // "mark_price": "10835.66892602",
2440
+ // "mark_iv": "0.71781855",
2441
+ // "delta": "-0.98726024",
2442
+ // "greeks": {
2443
+ // "delta": "-0.9872602390817709",
2444
+ // "gamma": "0.000004560958862297231",
2445
+ // "vega": "227.11344863639806",
2446
+ // "rho": "-302.0617972461581",
2447
+ // "vanna": "0.06609830491614832",
2448
+ // "volga": "925.9501532805552"
2449
+ // },
2450
+ // "last_traded_price": "10551.5",
2451
+ // "bid": "10794.9",
2452
+ // "bid_iv": "0.05",
2453
+ // "ask": "10887.3",
2454
+ // "ask_iv": "0.8783283",
2455
+ // "last_iv": "0.05",
2456
+ // "volume_24h": "0",
2457
+ // "total_volume": "195240.72672261014",
2458
+ // "created_at": 1747644009995,
2459
+ // "underlying_price": "103164.79162649",
2460
+ // "open_interest": "0",
2461
+ // "funding_rate": "0.000004464241170536191",
2462
+ // "price_change_rate_24h": "0.074915",
2463
+ // "future_funding_rate": "0.0001"
2464
+ // }
2465
+ // ]
2466
+ // }
2467
+ //
2468
+ const results = this.safeList(response, 'results', []);
2469
+ return this.parseAllGreeks(results, symbols);
2470
+ }
2471
+ parseGreeks(greeks, market = undefined) {
2472
+ //
2473
+ // {
2474
+ // "symbol": "BTC-USD-114000-P",
2475
+ // "mark_price": "10835.66892602",
2476
+ // "mark_iv": "0.71781855",
2477
+ // "delta": "-0.98726024",
2478
+ // "greeks": {
2479
+ // "delta": "-0.9872602390817709",
2480
+ // "gamma": "0.000004560958862297231",
2481
+ // "vega": "227.11344863639806",
2482
+ // "rho": "-302.0617972461581",
2483
+ // "vanna": "0.06609830491614832",
2484
+ // "volga": "925.9501532805552"
2485
+ // },
2486
+ // "last_traded_price": "10551.5",
2487
+ // "bid": "10794.9",
2488
+ // "bid_iv": "0.05",
2489
+ // "ask": "10887.3",
2490
+ // "ask_iv": "0.8783283",
2491
+ // "last_iv": "0.05",
2492
+ // "volume_24h": "0",
2493
+ // "total_volume": "195240.72672261014",
2494
+ // "created_at": 1747644009995,
2495
+ // "underlying_price": "103164.79162649",
2496
+ // "open_interest": "0",
2497
+ // "funding_rate": "0.000004464241170536191",
2498
+ // "price_change_rate_24h": "0.074915",
2499
+ // "future_funding_rate": "0.0001"
2500
+ // }
2501
+ //
2502
+ const marketId = this.safeString(greeks, 'symbol');
2503
+ market = this.safeMarket(marketId, market, undefined, 'option');
2504
+ const symbol = market['symbol'];
2505
+ const timestamp = this.safeInteger(greeks, 'created_at');
2506
+ const greeksData = this.safeDict(greeks, 'greeks', {});
2507
+ return {
2508
+ 'symbol': symbol,
2509
+ 'timestamp': timestamp,
2510
+ 'datetime': this.iso8601(timestamp),
2511
+ 'delta': this.safeNumber(greeksData, 'delta'),
2512
+ 'gamma': this.safeNumber(greeksData, 'gamma'),
2513
+ 'theta': undefined,
2514
+ 'vega': this.safeNumber(greeksData, 'vega'),
2515
+ 'rho': this.safeNumber(greeksData, 'rho'),
2516
+ 'vanna': this.safeNumber(greeksData, 'vanna'),
2517
+ 'volga': this.safeNumber(greeksData, 'volga'),
2518
+ 'bidSize': undefined,
2519
+ 'askSize': undefined,
2520
+ 'bidImpliedVolatility': this.safeNumber(greeks, 'bid_iv'),
2521
+ 'askImpliedVolatility': this.safeNumber(greeks, 'ask_iv'),
2522
+ 'markImpliedVolatility': this.safeNumber(greeks, 'mark_iv'),
2523
+ 'bidPrice': this.safeNumber(greeks, 'bid'),
2524
+ 'askPrice': this.safeNumber(greeks, 'ask'),
2525
+ 'markPrice': this.safeNumber(greeks, 'mark_price'),
2526
+ 'lastPrice': this.safeNumber(greeks, 'last_traded_price'),
2527
+ 'underlyingPrice': this.safeNumber(greeks, 'underlying_price'),
2528
+ 'info': greeks,
2529
+ };
2530
+ }
2531
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2532
+ let url = this.implodeHostname(this.urls['api'][this.version]) + '/' + this.implodeParams(path, params);
2533
+ const query = this.omit(params, this.extractParams(path));
2534
+ if (api === 'public') {
2535
+ if (Object.keys(query).length) {
2536
+ url += '?' + this.urlencode(query);
2537
+ }
2538
+ }
2539
+ else if (api === 'private') {
2540
+ headers = {
2541
+ 'Accept': 'application/json',
2542
+ 'PARADEX-PARTNER': this.safeString(this.options, 'broker', 'CCXT'),
2543
+ };
2544
+ // TODO: optimize
2545
+ if (path === 'auth') {
2546
+ headers['PARADEX-STARKNET-ACCOUNT'] = query['account'];
2547
+ headers['PARADEX-STARKNET-SIGNATURE'] = query['signature'];
2548
+ headers['PARADEX-TIMESTAMP'] = query['timestamp'].toString();
2549
+ headers['PARADEX-SIGNATURE-EXPIRATION'] = query['expiration'].toString();
2550
+ }
2551
+ else if (path === 'onboarding') {
2552
+ headers['PARADEX-ETHEREUM-ACCOUNT'] = this.walletAddress;
2553
+ headers['PARADEX-STARKNET-ACCOUNT'] = query['account'];
2554
+ headers['PARADEX-STARKNET-SIGNATURE'] = query['signature'];
2555
+ headers['PARADEX-TIMESTAMP'] = this.nonce().toString();
2556
+ headers['Content-Type'] = 'application/json';
2557
+ body = this.json({
2558
+ 'public_key': query['public_key'],
2559
+ });
2560
+ }
2561
+ else {
2562
+ const token = this.options['authToken'];
2563
+ headers['Authorization'] = 'Bearer ' + token;
2564
+ if (method === 'POST') {
2565
+ headers['Content-Type'] = 'application/json';
2566
+ body = this.json(query);
2567
+ }
2568
+ else {
2569
+ url = url + '?' + this.urlencode(query);
2570
+ }
2571
+ }
2572
+ // headers = {
2573
+ // 'Accept': 'application/json',
2574
+ // 'Authorization': 'Bearer ' + this.apiKey,
2575
+ // };
2576
+ // if (method === 'POST') {
2577
+ // body = this.json (query);
2578
+ // headers['Content-Type'] = 'application/json';
2579
+ // } else {
2580
+ // if (Object.keys (query).length) {
2581
+ // url += '?' + this.urlencode (query);
2582
+ // }
2583
+ // }
2584
+ }
2585
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2586
+ }
2587
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2588
+ if (!response) {
2589
+ return undefined; // fallback to default error handler
2590
+ }
2591
+ //
2592
+ // {
2593
+ // "data": null,
2594
+ // "error": "NOT_ONBOARDED",
2595
+ // "message": "User has never called /onboarding endpoint"
2596
+ // }
2597
+ //
2598
+ const errorCode = this.safeString(response, 'error');
2599
+ if (errorCode !== undefined) {
2600
+ const feedback = this.id + ' ' + body;
2601
+ this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
2602
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
2603
+ throw new ExchangeError(feedback); // unknown message
2604
+ }
2605
+ return undefined;
2606
+ }
2607
+ }