ccxt-ir 4.10.0 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1059) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +10 -1
  4. package/dist/cjs/src/abstract/bidarz.js +11 -0
  5. package/dist/cjs/src/bidarz.js +337 -0
  6. package/dist/cjs/src/bit24.js +4 -3
  7. package/dist/cjs/src/changefa.js +342 -0
  8. package/dist/cjs/src/ourbit.js +445 -0
  9. package/js/ccxt.d.ts +11 -2
  10. package/js/ccxt.js +8 -2
  11. package/js/src/abstract/bidarz.d.ts +9 -0
  12. package/js/src/abstract/bidarz.js +11 -0
  13. package/js/src/abstract/changefa.d.ts +8 -0
  14. package/js/src/abstract/changefa.js +11 -0
  15. package/js/src/abstract/ourbit.d.ts +10 -0
  16. package/js/src/abstract/ourbit.js +11 -0
  17. package/js/src/bidarz.d.ts +22 -0
  18. package/js/src/bidarz.js +336 -0
  19. package/js/src/bit24.js +4 -3
  20. package/js/src/changefa.d.ts +20 -0
  21. package/js/src/changefa.js +341 -0
  22. package/js/src/ourbit.d.ts +21 -0
  23. package/js/src/ourbit.js +444 -0
  24. package/js/src/src/abantether.d.ts +21 -0
  25. package/js/src/src/abantether.js +353 -0
  26. package/js/src/src/abstract/abantether.d.ts +8 -0
  27. package/js/src/src/abstract/abantether.js +11 -0
  28. package/js/src/src/abstract/afratether.d.ts +9 -0
  29. package/js/src/src/abstract/afratether.js +11 -0
  30. package/js/src/src/abstract/alpaca.d.ts +77 -0
  31. package/js/src/src/abstract/alpaca.js +11 -0
  32. package/js/src/src/abstract/apex.d.ts +34 -0
  33. package/js/src/src/abstract/apex.js +11 -0
  34. package/js/src/src/abstract/arzinja.d.ts +8 -0
  35. package/js/src/src/abstract/arzinja.js +11 -0
  36. package/js/src/src/abstract/arzplus.d.ts +11 -0
  37. package/js/src/src/abstract/arzplus.js +11 -0
  38. package/js/src/src/abstract/ascendex.d.ts +80 -0
  39. package/js/src/src/abstract/ascendex.js +11 -0
  40. package/js/src/src/abstract/asretether.d.ts +8 -0
  41. package/js/src/src/abstract/asretether.js +11 -0
  42. package/js/src/src/abstract/bidarz.d.ts +9 -0
  43. package/js/src/src/abstract/bidarz.js +11 -0
  44. package/js/src/src/abstract/bigone.d.ts +48 -0
  45. package/js/src/src/abstract/bigone.js +11 -0
  46. package/js/src/src/abstract/binance.d.ts +773 -0
  47. package/js/src/src/abstract/binance.js +11 -0
  48. package/js/src/src/abstract/bingx.d.ts +165 -0
  49. package/js/src/src/abstract/bingx.js +11 -0
  50. package/js/src/src/abstract/bit24.d.ts +9 -0
  51. package/js/src/src/abstract/bit24.js +11 -0
  52. package/js/src/src/abstract/bit2c.d.ts +30 -0
  53. package/js/src/src/abstract/bit2c.js +11 -0
  54. package/js/src/src/abstract/bitbank.d.ts +35 -0
  55. package/js/src/src/abstract/bitbank.js +11 -0
  56. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  57. package/js/src/src/abstract/bitbarg.js +11 -0
  58. package/js/src/src/abstract/bitbns.d.ts +43 -0
  59. package/js/src/src/abstract/bitbns.js +11 -0
  60. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  61. package/js/src/src/abstract/bitfinex.js +11 -0
  62. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  63. package/js/src/src/abstract/bitflyer.js +11 -0
  64. package/js/src/src/abstract/bitget.d.ts +578 -0
  65. package/js/src/src/abstract/bitget.js +11 -0
  66. package/js/src/src/abstract/bithumb.d.ts +35 -0
  67. package/js/src/src/abstract/bithumb.js +11 -0
  68. package/js/src/src/abstract/bitimen.d.ts +10 -0
  69. package/js/src/src/abstract/bitimen.js +11 -0
  70. package/js/src/src/abstract/bitir.d.ts +10 -0
  71. package/js/src/src/abstract/bitir.js +11 -0
  72. package/js/src/src/abstract/bitmart.d.ts +120 -0
  73. package/js/src/src/abstract/bitmart.js +11 -0
  74. package/js/src/src/abstract/bitmex.d.ts +100 -0
  75. package/js/src/src/abstract/bitmex.js +11 -0
  76. package/js/src/src/abstract/bitopro.d.ts +33 -0
  77. package/js/src/src/abstract/bitopro.js +11 -0
  78. package/js/src/src/abstract/bitpin.d.ts +11 -0
  79. package/js/src/src/abstract/bitpin.js +11 -0
  80. package/js/src/src/abstract/bitrue.d.ts +75 -0
  81. package/js/src/src/abstract/bitrue.js +11 -0
  82. package/js/src/src/abstract/bitso.d.ts +46 -0
  83. package/js/src/src/abstract/bitso.js +11 -0
  84. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  85. package/js/src/src/abstract/bitstamp.js +11 -0
  86. package/js/src/src/abstract/bitteam.d.ts +32 -0
  87. package/js/src/src/abstract/bitteam.js +11 -0
  88. package/js/src/src/abstract/bittrade.d.ts +117 -0
  89. package/js/src/src/abstract/bittrade.js +11 -0
  90. package/js/src/src/abstract/bitunix.d.ts +9 -0
  91. package/js/src/src/abstract/bitunix.js +11 -0
  92. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  93. package/js/src/src/abstract/bitvavo.js +11 -0
  94. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  95. package/js/src/src/abstract/blockchaincom.js +11 -0
  96. package/js/src/src/abstract/blofin.d.ts +70 -0
  97. package/js/src/src/abstract/blofin.js +11 -0
  98. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  99. package/js/src/src/abstract/btcalpha.js +11 -0
  100. package/js/src/src/abstract/btcbox.d.ts +18 -0
  101. package/js/src/src/abstract/btcbox.js +11 -0
  102. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  103. package/js/src/src/abstract/btcmarkets.js +11 -0
  104. package/js/src/src/abstract/btcturk.d.ts +23 -0
  105. package/js/src/src/abstract/btcturk.js +11 -0
  106. package/js/src/src/abstract/bybit.d.ts +316 -0
  107. package/js/src/src/abstract/bybit.js +11 -0
  108. package/js/src/src/abstract/bydfi.d.ts +11 -0
  109. package/js/src/src/abstract/bydfi.js +11 -0
  110. package/js/src/src/abstract/cafearz.d.ts +8 -0
  111. package/js/src/src/abstract/cafearz.js +11 -0
  112. package/js/src/src/abstract/cex.d.ts +35 -0
  113. package/js/src/src/abstract/cex.js +11 -0
  114. package/js/src/src/abstract/coinbase.d.ts +97 -0
  115. package/js/src/src/abstract/coinbase.js +11 -0
  116. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  117. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  118. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  119. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  120. package/js/src/src/abstract/coincatch.d.ts +97 -0
  121. package/js/src/src/abstract/coincatch.js +11 -0
  122. package/js/src/src/abstract/coincheck.d.ts +36 -0
  123. package/js/src/src/abstract/coincheck.js +11 -0
  124. package/js/src/src/abstract/coinex.d.ts +240 -0
  125. package/js/src/src/abstract/coinex.js +11 -0
  126. package/js/src/src/abstract/coinmate.d.ts +65 -0
  127. package/js/src/src/abstract/coinmate.js +11 -0
  128. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  129. package/js/src/src/abstract/coinmetro.js +11 -0
  130. package/js/src/src/abstract/coinone.d.ts +70 -0
  131. package/js/src/src/abstract/coinone.js +11 -0
  132. package/js/src/src/abstract/coinsph.d.ts +57 -0
  133. package/js/src/src/abstract/coinsph.js +11 -0
  134. package/js/src/src/abstract/coinspot.d.ts +31 -0
  135. package/js/src/src/abstract/coinspot.js +11 -0
  136. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  137. package/js/src/src/abstract/cryptocom.js +11 -0
  138. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  139. package/js/src/src/abstract/cryptomus.js +11 -0
  140. package/js/src/src/abstract/defx.d.ts +72 -0
  141. package/js/src/src/abstract/defx.js +11 -0
  142. package/js/src/src/abstract/delta.d.ts +53 -0
  143. package/js/src/src/abstract/delta.js +11 -0
  144. package/js/src/src/abstract/deribit.d.ts +129 -0
  145. package/js/src/src/abstract/deribit.js +11 -0
  146. package/js/src/src/abstract/derive.d.ts +120 -0
  147. package/js/src/src/abstract/derive.js +11 -0
  148. package/js/src/src/abstract/digifinex.d.ts +95 -0
  149. package/js/src/src/abstract/digifinex.js +11 -0
  150. package/js/src/src/abstract/ellipx.d.ts +28 -0
  151. package/js/src/src/abstract/ellipx.js +11 -0
  152. package/js/src/src/abstract/eterex.d.ts +8 -0
  153. package/js/src/src/abstract/eterex.js +11 -0
  154. package/js/src/src/abstract/excoino.d.ts +10 -0
  155. package/js/src/src/abstract/excoino.js +11 -0
  156. package/js/src/src/abstract/exir.d.ts +11 -0
  157. package/js/src/src/abstract/exir.js +11 -0
  158. package/js/src/src/abstract/exmo.d.ts +58 -0
  159. package/js/src/src/abstract/exmo.js +11 -0
  160. package/js/src/src/abstract/exnovin.d.ts +9 -0
  161. package/js/src/src/abstract/exnovin.js +11 -0
  162. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  163. package/js/src/src/abstract/farhadexchange.js +11 -0
  164. package/js/src/src/abstract/foxbit.d.ts +29 -0
  165. package/js/src/src/abstract/foxbit.js +11 -0
  166. package/js/src/src/abstract/gate.d.ts +287 -0
  167. package/js/src/src/abstract/gate.js +11 -0
  168. package/js/src/src/abstract/gemini.d.ts +62 -0
  169. package/js/src/src/abstract/gemini.js +11 -0
  170. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  171. package/js/src/src/abstract/hamtapay.js +11 -0
  172. package/js/src/src/abstract/hashkey.d.ts +70 -0
  173. package/js/src/src/abstract/hashkey.js +11 -0
  174. package/js/src/src/abstract/hibachi.d.ts +29 -0
  175. package/js/src/src/abstract/hibachi.js +11 -0
  176. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  177. package/js/src/src/abstract/hitbtc.js +11 -0
  178. package/js/src/src/abstract/hitobit.d.ts +11 -0
  179. package/js/src/src/abstract/hitobit.js +11 -0
  180. package/js/src/src/abstract/hollaex.d.ts +36 -0
  181. package/js/src/src/abstract/hollaex.js +11 -0
  182. package/js/src/src/abstract/htx.d.ts +551 -0
  183. package/js/src/src/abstract/htx.js +11 -0
  184. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  185. package/js/src/src/abstract/hyperliquid.js +11 -0
  186. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  187. package/js/src/src/abstract/independentreserve.js +11 -0
  188. package/js/src/src/abstract/indodax.d.ts +29 -0
  189. package/js/src/src/abstract/indodax.js +11 -0
  190. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  191. package/js/src/src/abstract/iranexchange.js +11 -0
  192. package/js/src/src/abstract/jibitex.d.ts +10 -0
  193. package/js/src/src/abstract/jibitex.js +11 -0
  194. package/js/src/src/abstract/kcex.d.ts +10 -0
  195. package/js/src/src/abstract/kcex.js +11 -0
  196. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  197. package/js/src/src/abstract/kifpoolme.js +11 -0
  198. package/js/src/src/abstract/kraken.d.ts +61 -0
  199. package/js/src/src/abstract/kraken.js +11 -0
  200. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  201. package/js/src/src/abstract/krakenfutures.js +11 -0
  202. package/js/src/src/abstract/kucoin.d.ts +227 -0
  203. package/js/src/src/abstract/kucoin.js +11 -0
  204. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  205. package/js/src/src/abstract/kucoinfutures.js +11 -0
  206. package/js/src/src/abstract/latoken.d.ts +59 -0
  207. package/js/src/src/abstract/latoken.js +11 -0
  208. package/js/src/src/abstract/lbank.d.ts +65 -0
  209. package/js/src/src/abstract/lbank.js +11 -0
  210. package/js/src/src/abstract/luno.d.ts +41 -0
  211. package/js/src/src/abstract/luno.js +11 -0
  212. package/js/src/src/abstract/mazdax.d.ts +11 -0
  213. package/js/src/src/abstract/mazdax.js +11 -0
  214. package/js/src/src/abstract/mercado.d.ts +28 -0
  215. package/js/src/src/abstract/mercado.js +11 -0
  216. package/js/src/src/abstract/mexc.d.ts +183 -0
  217. package/js/src/src/abstract/mexc.js +11 -0
  218. package/js/src/src/abstract/modetrade.d.ts +122 -0
  219. package/js/src/src/abstract/modetrade.js +11 -0
  220. package/js/src/src/abstract/ndax.d.ts +100 -0
  221. package/js/src/src/abstract/ndax.js +11 -0
  222. package/js/src/src/abstract/nobitex.d.ts +10 -0
  223. package/js/src/src/abstract/nobitex.js +11 -0
  224. package/js/src/src/abstract/novadax.d.ts +32 -0
  225. package/js/src/src/abstract/novadax.js +11 -0
  226. package/js/src/src/abstract/oceanex.d.ts +30 -0
  227. package/js/src/src/abstract/oceanex.js +11 -0
  228. package/js/src/src/abstract/okcoin.d.ts +77 -0
  229. package/js/src/src/abstract/okcoin.js +11 -0
  230. package/js/src/src/abstract/okexchange.d.ts +11 -0
  231. package/js/src/src/abstract/okexchange.js +11 -0
  232. package/js/src/src/abstract/okx.d.ts +352 -0
  233. package/js/src/src/abstract/okx.js +11 -0
  234. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  235. package/js/src/src/abstract/ompfinex.js +11 -0
  236. package/js/src/src/abstract/onetrading.d.ts +26 -0
  237. package/js/src/src/abstract/onetrading.js +11 -0
  238. package/js/src/src/abstract/oxfun.d.ts +37 -0
  239. package/js/src/src/abstract/oxfun.js +11 -0
  240. package/js/src/src/abstract/p2b.d.ts +25 -0
  241. package/js/src/src/abstract/p2b.js +11 -0
  242. package/js/src/src/abstract/paradex.d.ts +66 -0
  243. package/js/src/src/abstract/paradex.js +11 -0
  244. package/js/src/src/abstract/paymium.d.ts +31 -0
  245. package/js/src/src/abstract/paymium.js +11 -0
  246. package/js/src/src/abstract/phemex.d.ts +120 -0
  247. package/js/src/src/abstract/phemex.js +11 -0
  248. package/js/src/src/abstract/pingi.d.ts +9 -0
  249. package/js/src/src/abstract/pingi.js +11 -0
  250. package/js/src/src/abstract/poloniex.d.ts +108 -0
  251. package/js/src/src/abstract/poloniex.js +11 -0
  252. package/js/src/src/abstract/pooleno.d.ts +8 -0
  253. package/js/src/src/abstract/pooleno.js +11 -0
  254. package/js/src/src/abstract/probit.d.ts +26 -0
  255. package/js/src/src/abstract/probit.js +11 -0
  256. package/js/src/src/abstract/raastin.d.ts +11 -0
  257. package/js/src/src/abstract/raastin.js +11 -0
  258. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  259. package/js/src/src/abstract/ramzinex.js +11 -0
  260. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  261. package/js/src/src/abstract/sarmayex.js +11 -0
  262. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  263. package/js/src/src/abstract/sarrafex.js +11 -0
  264. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  265. package/js/src/src/abstract/tabdeal.js +11 -0
  266. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  267. package/js/src/src/abstract/tehran_exchange.js +11 -0
  268. package/js/src/src/abstract/tetherland.d.ts +8 -0
  269. package/js/src/src/abstract/tetherland.js +11 -0
  270. package/js/src/src/abstract/timex.d.ts +65 -0
  271. package/js/src/src/abstract/timex.js +11 -0
  272. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  273. package/js/src/src/abstract/tokocrypto.js +11 -0
  274. package/js/src/src/abstract/toobit.d.ts +10 -0
  275. package/js/src/src/abstract/toobit.js +11 -0
  276. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  277. package/js/src/src/abstract/tradeogre.js +11 -0
  278. package/js/src/src/abstract/twox.d.ts +8 -0
  279. package/js/src/src/abstract/twox.js +11 -0
  280. package/js/src/src/abstract/ubitex.d.ts +10 -0
  281. package/js/src/src/abstract/ubitex.js +11 -0
  282. package/js/src/src/abstract/upbit.d.ts +58 -0
  283. package/js/src/src/abstract/upbit.js +11 -0
  284. package/js/src/src/abstract/vertex.d.ts +22 -0
  285. package/js/src/src/abstract/vertex.js +11 -0
  286. package/js/src/src/abstract/wallex.d.ts +11 -0
  287. package/js/src/src/abstract/wallex.js +11 -0
  288. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  289. package/js/src/src/abstract/wavesexchange.js +11 -0
  290. package/js/src/src/abstract/whitebit.d.ts +117 -0
  291. package/js/src/src/abstract/whitebit.js +11 -0
  292. package/js/src/src/abstract/woo.d.ts +144 -0
  293. package/js/src/src/abstract/woo.js +11 -0
  294. package/js/src/src/abstract/woofipro.d.ts +122 -0
  295. package/js/src/src/abstract/woofipro.js +11 -0
  296. package/js/src/src/abstract/xt.d.ts +160 -0
  297. package/js/src/src/abstract/xt.js +11 -0
  298. package/js/src/src/abstract/yobit.d.ts +19 -0
  299. package/js/src/src/abstract/yobit.js +11 -0
  300. package/js/src/src/abstract/zaif.d.ts +41 -0
  301. package/js/src/src/abstract/zaif.js +11 -0
  302. package/js/src/src/abstract/zonda.d.ts +56 -0
  303. package/js/src/src/abstract/zonda.js +11 -0
  304. package/js/src/src/afratether.d.ts +21 -0
  305. package/js/src/src/afratether.js +356 -0
  306. package/js/src/src/alpaca.d.ts +332 -0
  307. package/js/src/src/alpaca.js +1908 -0
  308. package/js/src/src/apex.d.ts +333 -0
  309. package/js/src/src/apex.js +1942 -0
  310. package/js/src/src/arzinja.d.ts +21 -0
  311. package/js/src/src/arzinja.js +298 -0
  312. package/js/src/src/arzplus.d.ts +26 -0
  313. package/js/src/src/arzplus.js +581 -0
  314. package/js/src/src/ascendex.d.ts +424 -0
  315. package/js/src/src/ascendex.js +3699 -0
  316. package/js/src/src/asretether.d.ts +21 -0
  317. package/js/src/src/asretether.js +324 -0
  318. package/js/src/src/base/Exchange.d.ts +926 -0
  319. package/js/src/src/base/Exchange.js +7399 -0
  320. package/js/src/src/base/Precise.d.ts +42 -0
  321. package/js/src/src/base/Precise.js +275 -0
  322. package/js/src/src/base/errors.d.ts +168 -0
  323. package/js/src/src/base/errors.js +255 -0
  324. package/js/src/src/base/functions/crypto.d.ts +16 -0
  325. package/js/src/src/base/functions/crypto.js +131 -0
  326. package/js/src/src/base/functions/encode.d.ts +4 -0
  327. package/js/src/src/base/functions/encode.js +32 -0
  328. package/js/src/src/base/functions/generic.d.ts +29 -0
  329. package/js/src/src/base/functions/generic.js +203 -0
  330. package/js/src/src/base/functions/misc.d.ts +9 -0
  331. package/js/src/src/base/functions/misc.js +101 -0
  332. package/js/src/src/base/functions/number.d.ts +27 -0
  333. package/js/src/src/base/functions/number.js +313 -0
  334. package/js/src/src/base/functions/platform.d.ts +7 -0
  335. package/js/src/src/base/functions/platform.js +27 -0
  336. package/js/src/src/base/functions/rsa.d.ts +5 -0
  337. package/js/src/src/base/functions/rsa.js +49 -0
  338. package/js/src/src/base/functions/string.d.ts +7 -0
  339. package/js/src/src/base/functions/string.js +44 -0
  340. package/js/src/src/base/functions/throttle.d.ts +6 -0
  341. package/js/src/src/base/functions/throttle.js +67 -0
  342. package/js/src/src/base/functions/time.d.ts +21 -0
  343. package/js/src/src/base/functions/time.js +171 -0
  344. package/js/src/src/base/functions/totp.d.ts +3 -0
  345. package/js/src/src/base/functions/totp.js +25 -0
  346. package/js/src/src/base/functions/type.d.ts +37 -0
  347. package/js/src/src/base/functions/type.js +179 -0
  348. package/js/src/src/base/functions.d.ts +10 -0
  349. package/js/src/src/base/functions.js +18 -0
  350. package/js/src/src/base/types.d.ts +586 -0
  351. package/js/src/src/base/types.js +7 -0
  352. package/js/src/src/base/ws/Cache.d.ts +27 -0
  353. package/js/src/src/base/ws/Cache.js +260 -0
  354. package/js/src/src/base/ws/Client.d.ts +53 -0
  355. package/js/src/src/base/ws/Client.js +307 -0
  356. package/js/src/src/base/ws/Future.d.ts +8 -0
  357. package/js/src/src/base/ws/Future.js +35 -0
  358. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  359. package/js/src/src/base/ws/OrderBook.js +130 -0
  360. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  361. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  362. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  363. package/js/src/src/base/ws/WsClient.js +69 -0
  364. package/js/src/src/bequant.d.ts +4 -0
  365. package/js/src/src/bequant.js +35 -0
  366. package/js/src/src/bidarz.d.ts +16 -0
  367. package/js/src/src/bidarz.js +327 -0
  368. package/js/src/src/bigone.d.ts +296 -0
  369. package/js/src/src/bigone.js +2340 -0
  370. package/js/src/src/binance.d.ts +1667 -0
  371. package/js/src/src/binance.js +14400 -0
  372. package/js/src/src/binancecoinm.d.ts +6 -0
  373. package/js/src/src/binancecoinm.js +51 -0
  374. package/js/src/src/binanceus.d.ts +4 -0
  375. package/js/src/src/binanceus.js +225 -0
  376. package/js/src/src/binanceusdm.d.ts +6 -0
  377. package/js/src/src/binanceusdm.js +63 -0
  378. package/js/src/src/bingx.d.ts +778 -0
  379. package/js/src/src/bingx.js +6705 -0
  380. package/js/src/src/bit24.d.ts +24 -0
  381. package/js/src/src/bit24.js +520 -0
  382. package/js/src/src/bit2c.d.ts +146 -0
  383. package/js/src/src/bit2c.js +1029 -0
  384. package/js/src/src/bitbank.d.ts +181 -0
  385. package/js/src/src/bitbank.js +1146 -0
  386. package/js/src/src/bitbarg.d.ts +21 -0
  387. package/js/src/src/bitbarg.js +312 -0
  388. package/js/src/src/bitbns.d.ts +184 -0
  389. package/js/src/src/bitbns.js +1288 -0
  390. package/js/src/src/bitfinex.d.ts +516 -0
  391. package/js/src/src/bitfinex.js +3951 -0
  392. package/js/src/src/bitflyer.d.ts +229 -0
  393. package/js/src/src/bitflyer.js +1209 -0
  394. package/js/src/src/bitget.d.ts +1109 -0
  395. package/js/src/src/bitget.js +11033 -0
  396. package/js/src/src/bithumb.d.ts +165 -0
  397. package/js/src/src/bithumb.js +1257 -0
  398. package/js/src/src/bitimen.d.ts +23 -0
  399. package/js/src/src/bitimen.js +424 -0
  400. package/js/src/src/bitir.d.ts +23 -0
  401. package/js/src/src/bitir.js +521 -0
  402. package/js/src/src/bitmart.d.ts +736 -0
  403. package/js/src/src/bitmart.js +5639 -0
  404. package/js/src/src/bitmex.d.ts +395 -0
  405. package/js/src/src/bitmex.js +3088 -0
  406. package/js/src/src/bitopro.d.ts +295 -0
  407. package/js/src/src/bitopro.js +1892 -0
  408. package/js/src/src/bitpin.d.ts +23 -0
  409. package/js/src/src/bitpin.js +487 -0
  410. package/js/src/src/bitrue.d.ts +384 -0
  411. package/js/src/src/bitrue.js +3382 -0
  412. package/js/src/src/bitso.d.ts +270 -0
  413. package/js/src/src/bitso.js +1881 -0
  414. package/js/src/src/bitstamp.d.ts +355 -0
  415. package/js/src/src/bitstamp.js +2445 -0
  416. package/js/src/src/bitteam.d.ts +229 -0
  417. package/js/src/src/bitteam.js +2420 -0
  418. package/js/src/src/bittrade.d.ts +298 -0
  419. package/js/src/src/bittrade.js +2050 -0
  420. package/js/src/src/bitunix.d.ts +21 -0
  421. package/js/src/src/bitunix.js +326 -0
  422. package/js/src/src/bitvavo.d.ts +311 -0
  423. package/js/src/src/bitvavo.js +2204 -0
  424. package/js/src/src/blockchaincom.d.ts +256 -0
  425. package/js/src/src/blockchaincom.js +1259 -0
  426. package/js/src/src/blofin.d.ts +439 -0
  427. package/js/src/src/blofin.js +2576 -0
  428. package/js/src/src/btcalpha.d.ts +209 -0
  429. package/js/src/src/btcalpha.js +1056 -0
  430. package/js/src/src/btcbox.d.ts +144 -0
  431. package/js/src/src/btcbox.js +834 -0
  432. package/js/src/src/btcmarkets.d.ts +253 -0
  433. package/js/src/src/btcmarkets.js +1418 -0
  434. package/js/src/src/btcturk.d.ts +161 -0
  435. package/js/src/src/btcturk.js +1058 -0
  436. package/js/src/src/bybit.d.ts +1097 -0
  437. package/js/src/src/bybit.js +9382 -0
  438. package/js/src/src/bydfi.d.ts +23 -0
  439. package/js/src/src/bydfi.js +434 -0
  440. package/js/src/src/cafearz.d.ts +21 -0
  441. package/js/src/src/cafearz.js +346 -0
  442. package/js/src/src/cex.d.ts +286 -0
  443. package/js/src/src/cex.js +1799 -0
  444. package/js/src/src/coinbase.d.ts +623 -0
  445. package/js/src/src/coinbase.js +5220 -0
  446. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  447. package/js/src/src/coinbaseadvanced.js +18 -0
  448. package/js/src/src/coinbaseexchange.d.ts +334 -0
  449. package/js/src/src/coinbaseexchange.js +2127 -0
  450. package/js/src/src/coinbaseinternational.d.ts +443 -0
  451. package/js/src/src/coinbaseinternational.js +2336 -0
  452. package/js/src/src/coincatch.d.ts +786 -0
  453. package/js/src/src/coincatch.js +5492 -0
  454. package/js/src/src/coincheck.d.ts +147 -0
  455. package/js/src/src/coincheck.js +962 -0
  456. package/js/src/src/coinex.d.ts +719 -0
  457. package/js/src/src/coinex.js +6166 -0
  458. package/js/src/src/coinmate.d.ts +202 -0
  459. package/js/src/src/coinmate.js +1215 -0
  460. package/js/src/src/coinmetro.d.ts +244 -0
  461. package/js/src/src/coinmetro.js +2024 -0
  462. package/js/src/src/coinone.d.ts +158 -0
  463. package/js/src/src/coinone.js +1278 -0
  464. package/js/src/src/coinsph.d.ts +310 -0
  465. package/js/src/src/coinsph.js +2203 -0
  466. package/js/src/src/coinspot.d.ts +108 -0
  467. package/js/src/src/coinspot.js +653 -0
  468. package/js/src/src/cryptocom.d.ts +463 -0
  469. package/js/src/src/cryptocom.js +3549 -0
  470. package/js/src/src/cryptomus.d.ts +158 -0
  471. package/js/src/src/cryptomus.js +1169 -0
  472. package/js/src/src/defx.d.ts +348 -0
  473. package/js/src/src/defx.js +2139 -0
  474. package/js/src/src/delta.d.ts +407 -0
  475. package/js/src/src/delta.js +3654 -0
  476. package/js/src/src/deribit.d.ts +516 -0
  477. package/js/src/src/deribit.js +3790 -0
  478. package/js/src/src/derive.d.ts +324 -0
  479. package/js/src/src/derive.js +2655 -0
  480. package/js/src/src/digifinex.d.ts +544 -0
  481. package/js/src/src/digifinex.js +4453 -0
  482. package/js/src/src/ellipx.d.ts +237 -0
  483. package/js/src/src/ellipx.js +2071 -0
  484. package/js/src/src/eterex.d.ts +21 -0
  485. package/js/src/src/eterex.js +299 -0
  486. package/js/src/src/excoino.d.ts +23 -0
  487. package/js/src/src/excoino.js +426 -0
  488. package/js/src/src/exir.d.ts +23 -0
  489. package/js/src/src/exir.js +403 -0
  490. package/js/src/src/exmo.d.ts +426 -0
  491. package/js/src/src/exmo.js +2825 -0
  492. package/js/src/src/exnovin.d.ts +22 -0
  493. package/js/src/src/exnovin.js +378 -0
  494. package/js/src/src/farhadexchange.d.ts +21 -0
  495. package/js/src/src/farhadexchange.js +280 -0
  496. package/js/src/src/fmfwio.d.ts +4 -0
  497. package/js/src/src/fmfwio.js +35 -0
  498. package/js/src/src/foxbit.d.ts +352 -0
  499. package/js/src/src/foxbit.js +2016 -0
  500. package/js/src/src/gate.d.ts +1071 -0
  501. package/js/src/src/gate.js +8282 -0
  502. package/js/src/src/gateio.d.ts +4 -0
  503. package/js/src/src/gateio.js +17 -0
  504. package/js/src/src/gemini.d.ts +257 -0
  505. package/js/src/src/gemini.js +2006 -0
  506. package/js/src/src/hamtapay.d.ts +21 -0
  507. package/js/src/src/hamtapay.js +303 -0
  508. package/js/src/src/hashkey.d.ts +628 -0
  509. package/js/src/src/hashkey.js +4363 -0
  510. package/js/src/src/hibachi.d.ts +346 -0
  511. package/js/src/src/hibachi.js +2137 -0
  512. package/js/src/src/hitbtc.d.ts +558 -0
  513. package/js/src/src/hitbtc.js +3847 -0
  514. package/js/src/src/hitobit.d.ts +23 -0
  515. package/js/src/src/hitobit.js +412 -0
  516. package/js/src/src/hollaex.d.ts +305 -0
  517. package/js/src/src/hollaex.js +2046 -0
  518. package/js/src/src/htx.d.ts +961 -0
  519. package/js/src/src/htx.js +9668 -0
  520. package/js/src/src/huobi.d.ts +4 -0
  521. package/js/src/src/huobi.js +17 -0
  522. package/js/src/src/hyperliquid.d.ts +651 -0
  523. package/js/src/src/hyperliquid.js +3937 -0
  524. package/js/src/src/independentreserve.d.ts +169 -0
  525. package/js/src/src/independentreserve.js +1115 -0
  526. package/js/src/src/indodax.d.ts +217 -0
  527. package/js/src/src/indodax.js +1454 -0
  528. package/js/src/src/iranexchange.d.ts +21 -0
  529. package/js/src/src/iranexchange.js +399 -0
  530. package/js/src/src/jibitex.d.ts +23 -0
  531. package/js/src/src/jibitex.js +416 -0
  532. package/js/src/src/kcex.d.ts +21 -0
  533. package/js/src/src/kcex.js +335 -0
  534. package/js/src/src/kifpoolme.d.ts +23 -0
  535. package/js/src/src/kifpoolme.js +410 -0
  536. package/js/src/src/kraken.d.ts +484 -0
  537. package/js/src/src/kraken.js +3518 -0
  538. package/js/src/src/krakenfutures.d.ts +362 -0
  539. package/js/src/src/krakenfutures.js +2885 -0
  540. package/js/src/src/kucoin.d.ts +759 -0
  541. package/js/src/src/kucoin.js +5153 -0
  542. package/js/src/src/kucoinfutures.d.ts +521 -0
  543. package/js/src/src/kucoinfutures.js +3381 -0
  544. package/js/src/src/latoken.d.ts +274 -0
  545. package/js/src/src/latoken.js +1824 -0
  546. package/js/src/src/lbank.d.ts +350 -0
  547. package/js/src/src/lbank.js +3146 -0
  548. package/js/src/src/luno.d.ts +252 -0
  549. package/js/src/src/luno.js +1479 -0
  550. package/js/src/src/mazdax.d.ts +23 -0
  551. package/js/src/src/mazdax.js +534 -0
  552. package/js/src/src/mercado.d.ts +160 -0
  553. package/js/src/src/mercado.js +1011 -0
  554. package/js/src/src/mexc.d.ts +768 -0
  555. package/js/src/src/mexc.js +6102 -0
  556. package/js/src/src/modetrade.d.ts +496 -0
  557. package/js/src/src/modetrade.js +2936 -0
  558. package/js/src/src/myokx.d.ts +4 -0
  559. package/js/src/src/myokx.js +54 -0
  560. package/js/src/src/ndax.d.ts +285 -0
  561. package/js/src/src/ndax.js +2598 -0
  562. package/js/src/src/nobitex.d.ts +23 -0
  563. package/js/src/src/nobitex.js +454 -0
  564. package/js/src/src/novadax.d.ts +279 -0
  565. package/js/src/src/novadax.js +1676 -0
  566. package/js/src/src/oceanex.d.ts +231 -0
  567. package/js/src/src/oceanex.js +1123 -0
  568. package/js/src/src/okcoin.d.ts +346 -0
  569. package/js/src/src/okcoin.js +3211 -0
  570. package/js/src/src/okexchange.d.ts +23 -0
  571. package/js/src/src/okexchange.js +373 -0
  572. package/js/src/src/okx.d.ts +1125 -0
  573. package/js/src/src/okx.js +9009 -0
  574. package/js/src/src/okxus.d.ts +4 -0
  575. package/js/src/src/okxus.js +54 -0
  576. package/js/src/src/ompfinex.d.ts +23 -0
  577. package/js/src/src/ompfinex.js +510 -0
  578. package/js/src/src/onetrading.d.ts +228 -0
  579. package/js/src/src/onetrading.js +1769 -0
  580. package/js/src/src/oxfun.d.ts +442 -0
  581. package/js/src/src/oxfun.js +2920 -0
  582. package/js/src/src/p2b.d.ts +189 -0
  583. package/js/src/src/p2b.js +1344 -0
  584. package/js/src/src/paradex.d.ts +389 -0
  585. package/js/src/src/paradex.js +2607 -0
  586. package/js/src/src/paymium.d.ts +133 -0
  587. package/js/src/src/paymium.js +644 -0
  588. package/js/src/src/phemex.d.ts +497 -0
  589. package/js/src/src/phemex.js +5333 -0
  590. package/js/src/src/pingi.d.ts +22 -0
  591. package/js/src/src/pingi.js +446 -0
  592. package/js/src/src/poloniex.d.ts +441 -0
  593. package/js/src/src/poloniex.js +3681 -0
  594. package/js/src/src/pooleno.d.ts +21 -0
  595. package/js/src/src/pooleno.js +347 -0
  596. package/js/src/src/pro/alpaca.d.ts +95 -0
  597. package/js/src/src/pro/alpaca.js +724 -0
  598. package/js/src/src/pro/apex.d.ts +160 -0
  599. package/js/src/src/pro/apex.js +1044 -0
  600. package/js/src/src/pro/ascendex.d.ts +99 -0
  601. package/js/src/src/pro/ascendex.js +1012 -0
  602. package/js/src/src/pro/bequant.d.ts +4 -0
  603. package/js/src/src/pro/bequant.js +42 -0
  604. package/js/src/src/pro/binance.d.ts +796 -0
  605. package/js/src/src/pro/binance.js +4373 -0
  606. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  607. package/js/src/src/pro/binancecoinm.js +32 -0
  608. package/js/src/src/pro/binanceus.d.ts +4 -0
  609. package/js/src/src/pro/binanceus.js +52 -0
  610. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  611. package/js/src/src/pro/binanceusdm.js +37 -0
  612. package/js/src/src/pro/bingx.d.ts +151 -0
  613. package/js/src/src/pro/bingx.js +1568 -0
  614. package/js/src/src/pro/bitfinex.d.ts +99 -0
  615. package/js/src/src/pro/bitfinex.js +1165 -0
  616. package/js/src/src/pro/bitget.d.ts +257 -0
  617. package/js/src/src/pro/bitget.js +2327 -0
  618. package/js/src/src/pro/bithumb.d.ts +59 -0
  619. package/js/src/src/pro/bithumb.js +395 -0
  620. package/js/src/src/pro/bitmart.d.ts +168 -0
  621. package/js/src/src/pro/bitmart.js +1686 -0
  622. package/js/src/src/pro/bitmex.d.ts +170 -0
  623. package/js/src/src/pro/bitmex.js +1760 -0
  624. package/js/src/src/pro/bitopro.d.ts +69 -0
  625. package/js/src/src/pro/bitopro.js +477 -0
  626. package/js/src/src/pro/bitrue.d.ts +40 -0
  627. package/js/src/src/pro/bitrue.js +461 -0
  628. package/js/src/src/pro/bitstamp.d.ts +53 -0
  629. package/js/src/src/pro/bitstamp.js +587 -0
  630. package/js/src/src/pro/bittrade.d.ts +66 -0
  631. package/js/src/src/pro/bittrade.js +606 -0
  632. package/js/src/src/pro/bitvavo.d.ts +321 -0
  633. package/js/src/src/pro/bitvavo.js +1451 -0
  634. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  635. package/js/src/src/pro/blockchaincom.js +777 -0
  636. package/js/src/src/pro/blofin.d.ts +174 -0
  637. package/js/src/src/pro/blofin.js +743 -0
  638. package/js/src/src/pro/bybit.d.ts +397 -0
  639. package/js/src/src/pro/bybit.js +2519 -0
  640. package/js/src/src/pro/cex.d.ts +220 -0
  641. package/js/src/src/pro/cex.js +1535 -0
  642. package/js/src/src/pro/coinbase.d.ts +119 -0
  643. package/js/src/src/pro/coinbase.js +736 -0
  644. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  645. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  646. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  647. package/js/src/src/pro/coinbaseexchange.js +969 -0
  648. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  649. package/js/src/src/pro/coinbaseinternational.js +804 -0
  650. package/js/src/src/pro/coincatch.d.ts +207 -0
  651. package/js/src/src/pro/coincatch.js +1562 -0
  652. package/js/src/src/pro/coincheck.d.ts +33 -0
  653. package/js/src/src/pro/coincheck.js +210 -0
  654. package/js/src/src/pro/coinex.d.ts +147 -0
  655. package/js/src/src/pro/coinex.js +1426 -0
  656. package/js/src/src/pro/coinone.d.ts +51 -0
  657. package/js/src/src/pro/coinone.js +413 -0
  658. package/js/src/src/pro/cryptocom.d.ts +300 -0
  659. package/js/src/src/pro/cryptocom.js +1414 -0
  660. package/js/src/src/pro/defx.d.ts +236 -0
  661. package/js/src/src/pro/defx.js +865 -0
  662. package/js/src/src/pro/deribit.d.ts +163 -0
  663. package/js/src/src/pro/deribit.js +1066 -0
  664. package/js/src/src/pro/derive.d.ts +100 -0
  665. package/js/src/src/pro/derive.js +753 -0
  666. package/js/src/src/pro/exmo.d.ts +97 -0
  667. package/js/src/src/pro/exmo.js +903 -0
  668. package/js/src/src/pro/gate.d.ts +360 -0
  669. package/js/src/src/pro/gate.js +2119 -0
  670. package/js/src/src/pro/gateio.d.ts +4 -0
  671. package/js/src/src/pro/gateio.js +17 -0
  672. package/js/src/src/pro/gemini.d.ts +106 -0
  673. package/js/src/src/pro/gemini.js +932 -0
  674. package/js/src/src/pro/hashkey.d.ts +121 -0
  675. package/js/src/src/pro/hashkey.js +843 -0
  676. package/js/src/src/pro/hitbtc.d.ts +235 -0
  677. package/js/src/src/pro/hitbtc.js +1400 -0
  678. package/js/src/src/pro/hollaex.d.ts +77 -0
  679. package/js/src/src/pro/hollaex.js +604 -0
  680. package/js/src/src/pro/htx.d.ts +141 -0
  681. package/js/src/src/pro/htx.js +2415 -0
  682. package/js/src/src/pro/huobi.d.ts +4 -0
  683. package/js/src/src/pro/huobi.js +17 -0
  684. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  685. package/js/src/src/pro/hyperliquid.js +1126 -0
  686. package/js/src/src/pro/independentreserve.d.ts +36 -0
  687. package/js/src/src/pro/independentreserve.js +287 -0
  688. package/js/src/src/pro/kraken.d.ts +233 -0
  689. package/js/src/src/pro/kraken.js +1785 -0
  690. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  691. package/js/src/src/pro/krakenfutures.js +1592 -0
  692. package/js/src/src/pro/kucoin.d.ts +221 -0
  693. package/js/src/src/pro/kucoin.js +1430 -0
  694. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  695. package/js/src/src/pro/kucoinfutures.js +1295 -0
  696. package/js/src/src/pro/lbank.d.ts +134 -0
  697. package/js/src/src/pro/lbank.js +950 -0
  698. package/js/src/src/pro/luno.d.ts +44 -0
  699. package/js/src/src/pro/luno.js +322 -0
  700. package/js/src/src/pro/mexc.d.ts +210 -0
  701. package/js/src/src/pro/mexc.js +2009 -0
  702. package/js/src/src/pro/modetrade.d.ts +155 -0
  703. package/js/src/src/pro/modetrade.js +1335 -0
  704. package/js/src/src/pro/myokx.d.ts +4 -0
  705. package/js/src/src/pro/myokx.js +39 -0
  706. package/js/src/src/pro/ndax.d.ts +60 -0
  707. package/js/src/src/pro/ndax.js +545 -0
  708. package/js/src/src/pro/okcoin.d.ts +91 -0
  709. package/js/src/src/pro/okcoin.js +763 -0
  710. package/js/src/src/pro/okx.d.ts +408 -0
  711. package/js/src/src/pro/okx.js +2479 -0
  712. package/js/src/src/pro/okxus.d.ts +4 -0
  713. package/js/src/src/pro/okxus.js +39 -0
  714. package/js/src/src/pro/onetrading.d.ts +107 -0
  715. package/js/src/src/pro/onetrading.js +1343 -0
  716. package/js/src/src/pro/oxfun.d.ts +234 -0
  717. package/js/src/src/pro/oxfun.js +1112 -0
  718. package/js/src/src/pro/p2b.d.ts +104 -0
  719. package/js/src/src/pro/p2b.js +506 -0
  720. package/js/src/src/pro/paradex.d.ts +54 -0
  721. package/js/src/src/pro/paradex.js +370 -0
  722. package/js/src/src/pro/phemex.d.ts +129 -0
  723. package/js/src/src/pro/phemex.js +1569 -0
  724. package/js/src/src/pro/poloniex.d.ts +214 -0
  725. package/js/src/src/pro/poloniex.js +1318 -0
  726. package/js/src/src/pro/probit.d.ts +91 -0
  727. package/js/src/src/pro/probit.js +593 -0
  728. package/js/src/src/pro/tradeogre.d.ts +49 -0
  729. package/js/src/src/pro/tradeogre.js +284 -0
  730. package/js/src/src/pro/upbit.d.ts +124 -0
  731. package/js/src/src/pro/upbit.js +689 -0
  732. package/js/src/src/pro/vertex.d.ts +104 -0
  733. package/js/src/src/pro/vertex.js +999 -0
  734. package/js/src/src/pro/whitebit.d.ts +123 -0
  735. package/js/src/src/pro/whitebit.js +971 -0
  736. package/js/src/src/pro/woo.d.ts +161 -0
  737. package/js/src/src/pro/woo.js +1351 -0
  738. package/js/src/src/pro/woofipro.d.ts +155 -0
  739. package/js/src/src/pro/woofipro.js +1335 -0
  740. package/js/src/src/pro/xt.d.ts +165 -0
  741. package/js/src/src/pro/xt.js +1230 -0
  742. package/js/src/src/probit.d.ts +283 -0
  743. package/js/src/src/probit.js +1935 -0
  744. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  745. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  746. package/js/src/src/raastin.d.ts +24 -0
  747. package/js/src/src/raastin.js +494 -0
  748. package/js/src/src/ramzinex.d.ts +23 -0
  749. package/js/src/src/ramzinex.js +510 -0
  750. package/js/src/src/sarmayex.d.ts +21 -0
  751. package/js/src/src/sarmayex.js +376 -0
  752. package/js/src/src/sarrafex.d.ts +23 -0
  753. package/js/src/src/sarrafex.js +501 -0
  754. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  756. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  758. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  760. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  762. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  764. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  766. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  768. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  770. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  772. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  774. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  776. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  778. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  780. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  782. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  784. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  786. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  788. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  790. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  792. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  794. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  796. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  797. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  798. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  799. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  800. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  801. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  802. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  806. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  808. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  810. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  812. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  814. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  816. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  818. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  820. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  826. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  828. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  830. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  832. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  833. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  834. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  838. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  860. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  862. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  878. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  880. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  882. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  884. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  890. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  892. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  894. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  896. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  904. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  906. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  910. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  912. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  916. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  917. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  918. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  919. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  920. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  921. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  922. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  923. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  924. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  925. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  926. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  927. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  928. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  930. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  931. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  932. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  933. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  934. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  936. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  938. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  940. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  950. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  952. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  954. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  960. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  994. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  996. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1010. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1012. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1014. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1016. package/js/src/src/tabdeal.d.ts +23 -0
  1017. package/js/src/src/tabdeal.js +387 -0
  1018. package/js/src/src/tehran_exchange.d.ts +21 -0
  1019. package/js/src/src/tehran_exchange.js +333 -0
  1020. package/js/src/src/tetherland.d.ts +21 -0
  1021. package/js/src/src/tetherland.js +367 -0
  1022. package/js/src/src/timex.d.ts +247 -0
  1023. package/js/src/src/timex.js +1792 -0
  1024. package/js/src/src/tokocrypto.d.ts +261 -0
  1025. package/js/src/src/tokocrypto.js +2641 -0
  1026. package/js/src/src/toobit.d.ts +22 -0
  1027. package/js/src/src/toobit.js +445 -0
  1028. package/js/src/src/tradeogre.d.ts +149 -0
  1029. package/js/src/src/tradeogre.js +878 -0
  1030. package/js/src/src/twox.d.ts +21 -0
  1031. package/js/src/src/twox.js +371 -0
  1032. package/js/src/src/ubitex.d.ts +23 -0
  1033. package/js/src/src/ubitex.js +433 -0
  1034. package/js/src/src/upbit.d.ts +377 -0
  1035. package/js/src/src/upbit.js +2340 -0
  1036. package/js/src/src/vertex.d.ts +346 -0
  1037. package/js/src/src/vertex.js +3146 -0
  1038. package/js/src/src/wallex.d.ts +23 -0
  1039. package/js/src/src/wallex.js +467 -0
  1040. package/js/src/src/wavesexchange.d.ts +244 -0
  1041. package/js/src/src/wavesexchange.js +2747 -0
  1042. package/js/src/src/whitebit.d.ts +571 -0
  1043. package/js/src/src/whitebit.js +3437 -0
  1044. package/js/src/src/woo.d.ts +727 -0
  1045. package/js/src/src/woo.js +4183 -0
  1046. package/js/src/src/woofipro.d.ts +497 -0
  1047. package/js/src/src/woofipro.js +2941 -0
  1048. package/js/src/src/xt.d.ts +568 -0
  1049. package/js/src/src/xt.js +5184 -0
  1050. package/js/src/src/yobit.d.ts +197 -0
  1051. package/js/src/src/yobit.js +1453 -0
  1052. package/js/src/src/zaif.d.ts +136 -0
  1053. package/js/src/src/zaif.js +821 -0
  1054. package/js/src/src/zonda.d.ts +214 -0
  1055. package/js/src/src/zonda.js +1984 -0
  1056. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  1057. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +1 -1
  1058. package/js/test.js +9 -17
  1059. package/package.json +1 -1
@@ -0,0 +1,2006 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import Exchange from './abstract/gemini.js';
9
+ import { ExchangeError, ArgumentsRequired, BadRequest, OrderNotFound, InvalidOrder, InvalidNonce, InsufficientFunds, AuthenticationError, PermissionDenied, NotSupported, OnMaintenance, RateLimitExceeded, ExchangeNotAvailable } from './base/errors.js';
10
+ import { Precise } from './base/Precise.js';
11
+ import { TICK_SIZE } from './base/functions/number.js';
12
+ import { sha384 } from './static_dependencies/noble-hashes/sha512.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class gemini
16
+ * @augments Exchange
17
+ */
18
+ export default class gemini extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'gemini',
22
+ 'name': 'Gemini',
23
+ 'countries': ['US'],
24
+ // 600 requests a minute = 10 requests per second => 1000ms / 10 = 100ms between requests (private endpoints)
25
+ // 120 requests a minute = 2 requests per second => ( 1000ms / rateLimit ) / 2 = 5 (public endpoints)
26
+ 'rateLimit': 100,
27
+ 'version': 'v1',
28
+ 'pro': true,
29
+ 'has': {
30
+ 'CORS': undefined,
31
+ 'spot': true,
32
+ 'margin': false,
33
+ 'swap': true,
34
+ 'future': false,
35
+ 'option': false,
36
+ 'addMargin': false,
37
+ 'cancelOrder': true,
38
+ 'closeAllPositions': false,
39
+ 'closePosition': false,
40
+ 'createDepositAddress': true,
41
+ 'createMarketOrder': false,
42
+ 'createOrder': true,
43
+ 'createReduceOnlyOrder': false,
44
+ 'fetchBalance': true,
45
+ 'fetchBidsAsks': false,
46
+ 'fetchBorrowRateHistories': false,
47
+ 'fetchBorrowRateHistory': false,
48
+ 'fetchClosedOrders': false,
49
+ 'fetchCrossBorrowRate': false,
50
+ 'fetchCrossBorrowRates': false,
51
+ 'fetchCurrencies': true,
52
+ 'fetchDepositAddress': true,
53
+ 'fetchDepositAddresses': false,
54
+ 'fetchDepositAddressesByNetwork': true,
55
+ 'fetchDepositsWithdrawals': true,
56
+ 'fetchFundingHistory': false,
57
+ 'fetchFundingRate': false,
58
+ 'fetchFundingRateHistory': false,
59
+ 'fetchFundingRates': false,
60
+ 'fetchIndexOHLCV': false,
61
+ 'fetchIsolatedBorrowRate': false,
62
+ 'fetchIsolatedBorrowRates': false,
63
+ 'fetchLeverage': false,
64
+ 'fetchLeverageTiers': false,
65
+ 'fetchMarginMode': false,
66
+ 'fetchMarkets': true,
67
+ 'fetchMarkOHLCV': false,
68
+ 'fetchMyTrades': true,
69
+ 'fetchOHLCV': true,
70
+ 'fetchOpenInterestHistory': false,
71
+ 'fetchOpenOrders': true,
72
+ 'fetchOrder': true,
73
+ 'fetchOrderBook': true,
74
+ 'fetchOrders': false,
75
+ 'fetchPosition': false,
76
+ 'fetchPositionMode': false,
77
+ 'fetchPositions': false,
78
+ 'fetchPositionsRisk': false,
79
+ 'fetchPremiumIndexOHLCV': false,
80
+ 'fetchTicker': true,
81
+ 'fetchTickers': true,
82
+ 'fetchTrades': true,
83
+ 'fetchTradingFee': false,
84
+ 'fetchTradingFees': true,
85
+ 'fetchTransactions': 'emulated',
86
+ 'postOnly': true,
87
+ 'reduceMargin': false,
88
+ 'sandbox': true,
89
+ 'setLeverage': false,
90
+ 'setMarginMode': false,
91
+ 'setPositionMode': false,
92
+ 'withdraw': true,
93
+ },
94
+ 'urls': {
95
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27816857-ce7be644-6096-11e7-82d6-3c257263229c.jpg',
96
+ 'api': {
97
+ 'public': 'https://api.gemini.com',
98
+ 'private': 'https://api.gemini.com',
99
+ 'web': 'https://docs.gemini.com',
100
+ 'webExchange': 'https://exchange.gemini.com',
101
+ },
102
+ 'www': 'https://gemini.com/',
103
+ 'doc': [
104
+ 'https://docs.gemini.com/rest-api',
105
+ 'https://docs.sandbox.gemini.com',
106
+ ],
107
+ 'test': {
108
+ 'public': 'https://api.sandbox.gemini.com',
109
+ 'private': 'https://api.sandbox.gemini.com',
110
+ // use the true doc instead of the sandbox doc
111
+ // since they differ in parsing
112
+ // https://github.com/ccxt/ccxt/issues/7874
113
+ // https://github.com/ccxt/ccxt/issues/7894
114
+ 'web': 'https://docs.gemini.com',
115
+ 'webExchange': 'https://exchange.gemini.com',
116
+ },
117
+ 'fees': [
118
+ 'https://gemini.com/api-fee-schedule',
119
+ 'https://gemini.com/trading-fees',
120
+ 'https://gemini.com/transfer-fees',
121
+ ],
122
+ },
123
+ 'api': {
124
+ 'webExchange': {
125
+ 'get': [
126
+ '',
127
+ ],
128
+ },
129
+ 'web': {
130
+ 'get': [
131
+ 'rest-api',
132
+ ],
133
+ },
134
+ 'public': {
135
+ 'get': {
136
+ 'v1/symbols': 5,
137
+ 'v1/symbols/details/{symbol}': 5,
138
+ 'v1/staking/rates': 5,
139
+ 'v1/pubticker/{symbol}': 5,
140
+ 'v2/ticker/{symbol}': 5,
141
+ 'v2/candles/{symbol}/{timeframe}': 5,
142
+ 'v1/trades/{symbol}': 5,
143
+ 'v1/auction/{symbol}': 5,
144
+ 'v1/auction/{symbol}/history': 5,
145
+ 'v1/pricefeed': 5,
146
+ 'v1/book/{symbol}': 5,
147
+ 'v1/earn/rates': 5,
148
+ },
149
+ },
150
+ 'private': {
151
+ 'post': {
152
+ 'v1/staking/unstake': 1,
153
+ 'v1/staking/stake': 1,
154
+ 'v1/staking/rewards': 1,
155
+ 'v1/staking/history': 1,
156
+ 'v1/order/new': 1,
157
+ 'v1/order/cancel': 1,
158
+ 'v1/wrap/{symbol}': 1,
159
+ 'v1/order/cancel/session': 1,
160
+ 'v1/order/cancel/all': 1,
161
+ 'v1/order/status': 1,
162
+ 'v1/orders': 1,
163
+ 'v1/mytrades': 1,
164
+ 'v1/notionalvolume': 1,
165
+ 'v1/tradevolume': 1,
166
+ 'v1/clearing/new': 1,
167
+ 'v1/clearing/status': 1,
168
+ 'v1/clearing/cancel': 1,
169
+ 'v1/clearing/confirm': 1,
170
+ 'v1/balances': 1,
171
+ 'v1/balances/staking': 1,
172
+ 'v1/notionalbalances/{currency}': 1,
173
+ 'v1/transfers': 1,
174
+ 'v1/addresses/{network}': 1,
175
+ 'v1/deposit/{network}/newAddress': 1,
176
+ 'v1/deposit/{currency}/newAddress': 1,
177
+ 'v1/withdraw/{currency}': 1,
178
+ 'v1/account/transfer/{currency}': 1,
179
+ 'v1/payments/addbank': 1,
180
+ 'v1/payments/methods': 1,
181
+ 'v1/payments/sen/withdraw': 1,
182
+ 'v1/balances/earn': 1,
183
+ 'v1/earn/interest': 1,
184
+ 'v1/earn/history': 1,
185
+ 'v1/approvedAddresses/{network}/request': 1,
186
+ 'v1/approvedAddresses/account/{network}': 1,
187
+ 'v1/approvedAddresses/{network}/remove': 1,
188
+ 'v1/account': 1,
189
+ 'v1/account/create': 1,
190
+ 'v1/account/list': 1,
191
+ 'v1/heartbeat': 1,
192
+ 'v1/roles': 1,
193
+ },
194
+ },
195
+ },
196
+ 'precisionMode': TICK_SIZE,
197
+ 'fees': {
198
+ 'trading': {
199
+ 'taker': 0.004,
200
+ 'maker': 0.002,
201
+ },
202
+ },
203
+ 'httpExceptions': {
204
+ '400': BadRequest,
205
+ '403': PermissionDenied,
206
+ '404': OrderNotFound,
207
+ '406': InsufficientFunds,
208
+ '429': RateLimitExceeded,
209
+ '500': ExchangeError,
210
+ '502': ExchangeNotAvailable,
211
+ '503': OnMaintenance, // The exchange is down for maintenance
212
+ },
213
+ 'timeframes': {
214
+ '1m': '1m',
215
+ '5m': '5m',
216
+ '15m': '15m',
217
+ '30m': '30m',
218
+ '1h': '1hr',
219
+ '6h': '6hr',
220
+ '1d': '1day',
221
+ },
222
+ 'exceptions': {
223
+ 'exact': {
224
+ 'AuctionNotOpen': BadRequest,
225
+ 'ClientOrderIdTooLong': BadRequest,
226
+ 'ClientOrderIdMustBeString': BadRequest,
227
+ 'ConflictingOptions': BadRequest,
228
+ 'EndpointMismatch': BadRequest,
229
+ 'EndpointNotFound': BadRequest,
230
+ 'IneligibleTiming': BadRequest,
231
+ 'InsufficientFunds': InsufficientFunds,
232
+ 'InvalidJson': BadRequest,
233
+ 'InvalidNonce': InvalidNonce,
234
+ 'InvalidApiKey': AuthenticationError,
235
+ 'InvalidOrderType': InvalidOrder,
236
+ 'InvalidPrice': InvalidOrder,
237
+ 'InvalidQuantity': InvalidOrder,
238
+ 'InvalidSide': InvalidOrder,
239
+ 'InvalidSignature': AuthenticationError,
240
+ 'InvalidSymbol': BadRequest,
241
+ 'InvalidTimestampInPayload': BadRequest,
242
+ 'Maintenance': OnMaintenance,
243
+ 'MarketNotOpen': InvalidOrder,
244
+ 'MissingApikeyHeader': AuthenticationError,
245
+ 'MissingOrderField': InvalidOrder,
246
+ 'MissingRole': AuthenticationError,
247
+ 'MissingPayloadHeader': AuthenticationError,
248
+ 'MissingSignatureHeader': AuthenticationError,
249
+ 'NoSSL': AuthenticationError,
250
+ 'OptionsMustBeArray': BadRequest,
251
+ 'OrderNotFound': OrderNotFound,
252
+ 'RateLimit': RateLimitExceeded,
253
+ 'System': ExchangeError,
254
+ 'UnsupportedOption': BadRequest, // This order execution option is not supported.
255
+ },
256
+ 'broad': {
257
+ 'The Gemini Exchange is currently undergoing maintenance.': OnMaintenance,
258
+ 'We are investigating technical issues with the Gemini Exchange.': ExchangeNotAvailable,
259
+ 'Internal Server Error': ExchangeNotAvailable,
260
+ },
261
+ },
262
+ 'options': {
263
+ 'fetchMarketsMethod': 'fetch_markets_from_api',
264
+ 'fetchMarketFromWebRetries': 10,
265
+ 'fetchMarketsFromAPI': {
266
+ 'fetchDetailsForAllSymbols': false,
267
+ 'quoteCurrencies': ['USDT', 'GUSD', 'USD', 'DAI', 'EUR', 'GBP', 'SGD', 'BTC', 'ETH', 'LTC', 'BCH', 'SOL'],
268
+ },
269
+ 'fetchMarkets': {
270
+ 'webApiEnable': true,
271
+ 'webApiRetries': 10,
272
+ },
273
+ 'fetchUsdtMarkets': ['btcusdt', 'ethusdt'],
274
+ 'fetchCurrencies': {
275
+ 'webApiEnable': true,
276
+ 'webApiRetries': 5,
277
+ 'webApiMuteFailure': true,
278
+ },
279
+ 'fetchTickerMethod': 'fetchTickerV1',
280
+ 'networks': {
281
+ 'BTC': 'bitcoin',
282
+ 'ERC20': 'ethereum',
283
+ 'BCH': 'bitcoincash',
284
+ 'LTC': 'litecoin',
285
+ 'ZEC': 'zcash',
286
+ 'FIL': 'filecoin',
287
+ 'DOGE': 'dogecoin',
288
+ 'XTZ': 'tezos',
289
+ 'AVAXX': 'avalanche',
290
+ 'SOL': 'solana',
291
+ 'ATOM': 'cosmos',
292
+ 'DOT': 'polkadot',
293
+ },
294
+ 'nonce': 'milliseconds',
295
+ 'conflictingMarkets': {
296
+ 'paxgusd': {
297
+ 'base': 'PAXG',
298
+ 'quote': 'USD',
299
+ },
300
+ },
301
+ },
302
+ 'features': {
303
+ 'default': {
304
+ 'sandbox': true,
305
+ 'createOrder': {
306
+ 'marginMode': false,
307
+ 'triggerPrice': true,
308
+ 'triggerPriceType': undefined,
309
+ 'triggerDirection': false,
310
+ 'stopLossPrice': false,
311
+ 'takeProfitPrice': false,
312
+ 'attachedStopLossTakeProfit': undefined,
313
+ 'timeInForce': {
314
+ 'IOC': true,
315
+ 'FOK': true,
316
+ 'PO': true,
317
+ 'GTD': false,
318
+ },
319
+ 'hedged': false,
320
+ 'trailing': false,
321
+ 'leverage': false,
322
+ 'marketBuyByCost': true,
323
+ 'marketBuyRequiresPrice': false,
324
+ 'selfTradePrevention': false,
325
+ 'iceberg': false,
326
+ },
327
+ 'createOrders': undefined,
328
+ 'fetchMyTrades': {
329
+ 'marginMode': false,
330
+ 'limit': 500,
331
+ 'daysBack': undefined,
332
+ 'untilDays': undefined,
333
+ 'symbolRequired': true,
334
+ },
335
+ 'fetchOrder': {
336
+ 'marginMode': false,
337
+ 'trigger': false,
338
+ 'trailing': false,
339
+ 'symbolRequired': false,
340
+ },
341
+ 'fetchOpenOrders': {
342
+ 'marginMode': false,
343
+ 'limit': undefined,
344
+ 'trigger': false,
345
+ 'trailing': false,
346
+ 'symbolRequired': false,
347
+ },
348
+ 'fetchOrders': undefined,
349
+ 'fetchClosedOrders': undefined,
350
+ 'fetchOHLCV': {
351
+ 'limit': undefined,
352
+ },
353
+ },
354
+ 'spot': {
355
+ 'extends': 'default',
356
+ },
357
+ 'swap': {
358
+ 'linear': {
359
+ 'extends': 'default',
360
+ },
361
+ 'inverse': undefined,
362
+ },
363
+ 'future': {
364
+ 'linear': undefined,
365
+ 'inverse': undefined,
366
+ },
367
+ },
368
+ });
369
+ }
370
+ /**
371
+ * @method
372
+ * @name gemini#fetchCurrencies
373
+ * @description fetches all available currencies on an exchange
374
+ * @param {object} [params] extra parameters specific to the endpoint
375
+ * @returns {object} an associative dictionary of currencies
376
+ */
377
+ async fetchCurrencies(params = {}) {
378
+ return await this.fetchCurrenciesFromWeb(params);
379
+ }
380
+ /**
381
+ * @method
382
+ * @name gemini#fetchCurrenciesFromWeb
383
+ * @ignore
384
+ * @description fetches all available currencies on an exchange
385
+ * @param {object} [params] extra parameters specific to the endpoint
386
+ * @returns {object} an associative dictionary of currencies
387
+ */
388
+ async fetchCurrenciesFromWeb(params = {}) {
389
+ const data = await this.fetchWebEndpoint('fetchCurrencies', 'webExchangeGet', true, '="currencyData">', '</script>');
390
+ if (data === undefined) {
391
+ return undefined;
392
+ }
393
+ //
394
+ // {
395
+ // "tradingPairs": [ [ 'BTCUSD', 2, 8, '0.00001', 10, true ], ... ],
396
+ // "currencies": [
397
+ // [ "ORCA", "Orca", 204, 6, 0, 6, 8, false, null, "solana" ], // as confirmed, precisions seem to be the 5th index
398
+ // [ "ATOM", "Cosmos", 44, 6, 0, 6, 8, false, null, "cosmos" ],
399
+ // [ "ETH", "Ether", 2, 6, 0, 18, 8, false, null, "ethereum" ],
400
+ // [ "GBP", "Pound Sterling", 22, 2, 2, 2, 2, true, "£", null ],
401
+ // ...
402
+ // ],
403
+ // "networks": [
404
+ // [ "solana", "SOL", "Solana" ],
405
+ // [ "zcash", "ZEC", "Zcash" ],
406
+ // [ "tezos", "XTZ", "Tezos" ],
407
+ // [ "cosmos", "ATOM", "Cosmos" ],
408
+ // [ "ethereum", "ETH", "Ethereum" ],
409
+ // ...
410
+ // ]
411
+ // }
412
+ //
413
+ const result = {};
414
+ this.options['tradingPairs'] = this.safeList(data, 'tradingPairs');
415
+ const currenciesArray = this.safeValue(data, 'currencies', []);
416
+ for (let i = 0; i < currenciesArray.length; i++) {
417
+ const currency = currenciesArray[i];
418
+ const id = this.safeString(currency, 0);
419
+ const code = this.safeCurrencyCode(id);
420
+ const type = this.safeString(currency, 7) ? 'fiat' : 'crypto';
421
+ const precision = this.parseNumber(this.parsePrecision(this.safeString(currency, 5)));
422
+ const networks = {};
423
+ const networkId = this.safeString(currency, 9);
424
+ let networkCode = undefined;
425
+ if (networkId !== undefined) {
426
+ networkCode = this.networkIdToCode(networkId);
427
+ networks[networkCode] = {
428
+ 'info': currency,
429
+ 'id': networkId,
430
+ 'network': networkCode,
431
+ 'active': undefined,
432
+ 'deposit': undefined,
433
+ 'withdraw': undefined,
434
+ 'fee': undefined,
435
+ 'precision': precision,
436
+ 'limits': {
437
+ 'deposit': {
438
+ 'min': undefined,
439
+ 'max': undefined,
440
+ },
441
+ 'withdraw': {
442
+ 'min': undefined,
443
+ 'max': undefined,
444
+ },
445
+ },
446
+ };
447
+ }
448
+ result[code] = this.safeCurrencyStructure({
449
+ 'info': currency,
450
+ 'id': id,
451
+ 'code': code,
452
+ 'name': this.safeString(currency, 1),
453
+ 'active': undefined,
454
+ 'deposit': undefined,
455
+ 'withdraw': undefined,
456
+ 'fee': undefined,
457
+ 'type': type,
458
+ 'precision': precision,
459
+ 'limits': {
460
+ 'deposit': {
461
+ 'min': undefined,
462
+ 'max': undefined,
463
+ },
464
+ 'withdraw': {
465
+ 'min': undefined,
466
+ 'max': undefined,
467
+ },
468
+ },
469
+ 'networks': networks,
470
+ });
471
+ }
472
+ return result;
473
+ }
474
+ /**
475
+ * @method
476
+ * @name gemini#fetchMarkets
477
+ * @description retrieves data on all markets for gemini
478
+ * @see https://docs.gemini.com/rest-api/#symbols
479
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
480
+ * @returns {object[]} an array of objects representing market data
481
+ */
482
+ async fetchMarkets(params = {}) {
483
+ const method = this.safeValue(this.options, 'fetchMarketsMethod', 'fetch_markets_from_api');
484
+ if (method === 'fetch_markets_from_web') {
485
+ const promises = [];
486
+ promises.push(this.fetchMarketsFromWeb(params)); // get usd markets
487
+ promises.push(this.fetchUSDTMarkets(params)); // get usdt markets
488
+ const promisesResult = await Promise.all(promises);
489
+ return this.arrayConcat(promisesResult[0], promisesResult[1]);
490
+ }
491
+ return await this.fetchMarketsFromAPI(params);
492
+ }
493
+ async fetchMarketsFromWeb(params = {}) {
494
+ const data = await this.fetchWebEndpoint('fetchMarkets', 'webGetRestApi', false, '<h1 id="symbols-and-minimums">Symbols and minimums</h1>');
495
+ const error = this.id + ' fetchMarketsFromWeb() the API doc HTML markup has changed, breaking the parser of order limits and precision info for markets.';
496
+ const tables = data.split('tbody>');
497
+ const numTables = tables.length;
498
+ if (numTables < 2) {
499
+ throw new NotSupported(error);
500
+ }
501
+ const rows = tables[1].split("\n<tr>\n"); // eslint-disable-line quotes
502
+ const numRows = rows.length;
503
+ if (numRows < 2) {
504
+ throw new NotSupported(error);
505
+ }
506
+ const result = [];
507
+ // skip the first element (empty string)
508
+ for (let i = 1; i < numRows; i++) {
509
+ const row = rows[i];
510
+ const cells = row.split("</td>\n"); // eslint-disable-line quotes
511
+ const numCells = cells.length;
512
+ if (numCells < 5) {
513
+ throw new NotSupported(error);
514
+ }
515
+ // [
516
+ // '<td>btcusd', // currency
517
+ // '<td>0.00001 BTC (1e-5)', // min order size
518
+ // '<td>0.00000001 BTC (1e-8)', // tick size
519
+ // '<td>0.01 USD', // quote currency price increment
520
+ // '</tr>'
521
+ // ]
522
+ let marketId = cells[0].replace('<td>', '');
523
+ marketId = marketId.replace('*', '');
524
+ // const base = this.safeCurrencyCode (baseId);
525
+ const minAmountString = cells[1].replace('<td>', '');
526
+ const minAmountParts = minAmountString.split(' ');
527
+ const minAmount = this.safeNumber(minAmountParts, 0);
528
+ const amountPrecisionString = cells[2].replace('<td>', '');
529
+ const amountPrecisionParts = amountPrecisionString.split(' ');
530
+ const idLength = marketId.length - 0;
531
+ const startingIndex = idLength - 3;
532
+ const pricePrecisionString = cells[3].replace('<td>', '');
533
+ const pricePrecisionParts = pricePrecisionString.split(' ');
534
+ const quoteId = this.safeStringLower(pricePrecisionParts, 1, marketId.slice(startingIndex, idLength));
535
+ const baseId = this.safeStringLower(amountPrecisionParts, 1, marketId.replace(quoteId, ''));
536
+ const base = this.safeCurrencyCode(baseId);
537
+ const quote = this.safeCurrencyCode(quoteId);
538
+ result.push({
539
+ 'id': marketId,
540
+ 'symbol': base + '/' + quote,
541
+ 'base': base,
542
+ 'quote': quote,
543
+ 'settle': undefined,
544
+ 'baseId': baseId,
545
+ 'quoteId': quoteId,
546
+ 'settleId': undefined,
547
+ 'type': 'spot',
548
+ 'spot': true,
549
+ 'margin': false,
550
+ 'swap': false,
551
+ 'future': false,
552
+ 'option': false,
553
+ 'active': undefined,
554
+ 'contract': false,
555
+ 'linear': undefined,
556
+ 'inverse': undefined,
557
+ 'contractSize': undefined,
558
+ 'expiry': undefined,
559
+ 'expiryDatetime': undefined,
560
+ 'strike': undefined,
561
+ 'optionType': undefined,
562
+ 'precision': {
563
+ 'amount': this.safeNumber(amountPrecisionParts, 0),
564
+ 'price': this.safeNumber(pricePrecisionParts, 0),
565
+ },
566
+ 'limits': {
567
+ 'leverage': {
568
+ 'min': undefined,
569
+ 'max': undefined,
570
+ },
571
+ 'amount': {
572
+ 'min': minAmount,
573
+ 'max': undefined,
574
+ },
575
+ 'price': {
576
+ 'min': undefined,
577
+ 'max': undefined,
578
+ },
579
+ 'cost': {
580
+ 'min': undefined,
581
+ 'max': undefined,
582
+ },
583
+ },
584
+ 'created': undefined,
585
+ 'info': row,
586
+ });
587
+ }
588
+ return result;
589
+ }
590
+ parseMarketActive(status) {
591
+ const statuses = {
592
+ 'open': true,
593
+ 'closed': false,
594
+ 'cancel_only': true,
595
+ 'post_only': true,
596
+ 'limit_only': true,
597
+ };
598
+ if (status === undefined) {
599
+ return true; // as defaulted below
600
+ }
601
+ return this.safeBool(statuses, status, true);
602
+ }
603
+ async fetchUSDTMarkets(params = {}) {
604
+ // these markets can't be scrapped and fetchMarketsFrom api does an extra call
605
+ // to load market ids which we don't need here
606
+ if ('test' in this.urls) {
607
+ return []; // sandbox does not have usdt markets
608
+ }
609
+ const fetchUsdtMarkets = this.safeValue(this.options, 'fetchUsdtMarkets', []);
610
+ const result = [];
611
+ for (let i = 0; i < fetchUsdtMarkets.length; i++) {
612
+ const marketId = fetchUsdtMarkets[i];
613
+ const request = {
614
+ 'symbol': marketId,
615
+ };
616
+ // don't use Promise.all here, for some reason the exchange can't handle it and crashes
617
+ const rawResponse = await this.publicGetV1SymbolsDetailsSymbol(this.extend(request, params));
618
+ result.push(this.parseMarket(rawResponse));
619
+ }
620
+ return result;
621
+ }
622
+ async fetchMarketsFromAPI(params = {}) {
623
+ const marketIdsRaw = await this.publicGetV1Symbols(params);
624
+ //
625
+ // [
626
+ // "btcusd",
627
+ // "linkusd",
628
+ // ...
629
+ // ]
630
+ //
631
+ const result = [];
632
+ const options = this.safeDict(this.options, 'fetchMarketsFromAPI', {});
633
+ const bugSymbol = 'efilfil'; // we skip this inexistent test symbol, which bugs other functions
634
+ const marketIds = [];
635
+ for (let i = 0; i < marketIdsRaw.length; i++) {
636
+ if (marketIdsRaw[i] !== bugSymbol) {
637
+ marketIds.push(marketIdsRaw[i]);
638
+ }
639
+ }
640
+ if (this.safeBool(options, 'fetchDetailsForAllSymbols', false)) {
641
+ const promises = [];
642
+ for (let i = 0; i < marketIds.length; i++) {
643
+ const marketId = marketIds[i];
644
+ const request = {
645
+ 'symbol': marketId,
646
+ };
647
+ promises.push(this.publicGetV1SymbolsDetailsSymbol(this.extend(request, params)));
648
+ //
649
+ // {
650
+ // "symbol": "BTCUSD",
651
+ // "base_currency": "BTC",
652
+ // "quote_currency": "USD",
653
+ // "tick_size": 1E-8,
654
+ // "quote_increment": 0.01,
655
+ // "min_order_size": "0.00001",
656
+ // "status": "open",
657
+ // "wrap_enabled": false
658
+ // }
659
+ //
660
+ }
661
+ const responses = await Promise.all(promises);
662
+ for (let i = 0; i < responses.length; i++) {
663
+ result.push(this.parseMarket(responses[i]));
664
+ }
665
+ }
666
+ else {
667
+ // use trading-pairs info, if it was fetched
668
+ const tradingPairs = this.safeList(this.options, 'tradingPairs');
669
+ if (tradingPairs !== undefined) {
670
+ const indexedTradingPairs = this.indexBy(tradingPairs, 0);
671
+ for (let i = 0; i < marketIds.length; i++) {
672
+ const marketId = marketIds[i];
673
+ const tradingPair = this.safeList(indexedTradingPairs, marketId.toUpperCase());
674
+ if (tradingPair !== undefined) {
675
+ result.push(this.parseMarket(tradingPair));
676
+ }
677
+ }
678
+ }
679
+ else {
680
+ for (let i = 0; i < marketIds.length; i++) {
681
+ result.push(this.parseMarket(marketIds[i]));
682
+ }
683
+ }
684
+ }
685
+ return result;
686
+ }
687
+ parseMarket(response) {
688
+ //
689
+ // response might be:
690
+ //
691
+ // btcusd
692
+ //
693
+ // or
694
+ //
695
+ // [
696
+ // 'BTCUSD', // symbol
697
+ // 2, // priceTickDecimalPlaces
698
+ // 8, // quantityTickDecimalPlaces
699
+ // '0.00001', // quantityMinimum
700
+ // 10, // quantityRoundDecimalPlaces
701
+ // true // minimumsAreInclusive
702
+ // ],
703
+ //
704
+ // or
705
+ //
706
+ // {
707
+ // "symbol": "BTCUSD", // perpetuals have 'PERP' suffix, i.e. DOGEUSDPERP
708
+ // "base_currency": "BTC",
709
+ // "quote_currency": "USD",
710
+ // "tick_size": 1E-8,
711
+ // "quote_increment": 0.01,
712
+ // "min_order_size": "0.00001",
713
+ // "status": "open",
714
+ // "wrap_enabled": false
715
+ // "product_type": "swap", // only in perps
716
+ // "contract_type": "linear", // only in perps
717
+ // "contract_price_currency": "GUSD" // only in perps
718
+ // }
719
+ //
720
+ let marketId = undefined;
721
+ let baseId = undefined;
722
+ let quoteId = undefined;
723
+ let settleId = undefined;
724
+ let tickSize = undefined;
725
+ let amountPrecision = undefined;
726
+ let minSize = undefined;
727
+ let status = undefined;
728
+ let swap = false;
729
+ let contractSize = undefined;
730
+ let linear = undefined;
731
+ let inverse = undefined;
732
+ const isString = (typeof response === 'string');
733
+ const isArray = (Array.isArray(response));
734
+ if (!isString && !isArray) {
735
+ marketId = this.safeStringLower(response, 'symbol');
736
+ amountPrecision = this.safeNumber(response, 'tick_size'); // right, exchange has an imperfect naming and this turns out to be an amount-precision
737
+ tickSize = this.safeNumber(response, 'quote_increment'); // this is tick-size actually
738
+ minSize = this.safeNumber(response, 'min_order_size');
739
+ status = this.parseMarketActive(this.safeString(response, 'status'));
740
+ baseId = this.safeString(response, 'base_currency');
741
+ quoteId = this.safeString(response, 'quote_currency');
742
+ settleId = this.safeString(response, 'contract_price_currency');
743
+ }
744
+ else {
745
+ // if no detailed API was called, then parse either string or array
746
+ if (isString) {
747
+ marketId = response;
748
+ }
749
+ else {
750
+ marketId = this.safeStringLower(response, 0);
751
+ tickSize = this.parseNumber(this.parsePrecision(this.safeString(response, 1))); // priceTickDecimalPlaces
752
+ amountPrecision = this.parseNumber(this.parsePrecision(this.safeString(response, 2))); // quantityTickDecimalPlaces
753
+ minSize = this.safeNumber(response, 3); // quantityMinimum
754
+ }
755
+ const marketIdUpper = marketId.toUpperCase();
756
+ const isPerp = (marketIdUpper.indexOf('PERP') >= 0);
757
+ const marketIdWithoutPerp = marketIdUpper.replace('PERP', '');
758
+ const conflictingMarkets = this.safeDict(this.options, 'conflictingMarkets', {});
759
+ const lowerCaseId = marketIdWithoutPerp.toLowerCase();
760
+ if (lowerCaseId in conflictingMarkets) {
761
+ const conflictingMarket = conflictingMarkets[lowerCaseId];
762
+ baseId = conflictingMarket['base'];
763
+ quoteId = conflictingMarket['quote'];
764
+ if (isPerp) {
765
+ settleId = conflictingMarket['quote'];
766
+ }
767
+ }
768
+ else {
769
+ const quoteCurrencies = this.handleOption('fetchMarketsFromAPI', 'quoteCurrencies', []);
770
+ for (let i = 0; i < quoteCurrencies.length; i++) {
771
+ const quoteCurrency = quoteCurrencies[i];
772
+ if (marketIdWithoutPerp.endsWith(quoteCurrency)) {
773
+ const quoteLength = this.parseToInt(-1 * quoteCurrency.length);
774
+ baseId = marketIdWithoutPerp.slice(0, quoteLength);
775
+ quoteId = quoteCurrency;
776
+ if (isPerp) {
777
+ settleId = quoteCurrency; // always same
778
+ }
779
+ break;
780
+ }
781
+ }
782
+ }
783
+ }
784
+ const base = this.safeCurrencyCode(baseId);
785
+ const quote = this.safeCurrencyCode(quoteId);
786
+ const settle = this.safeCurrencyCode(settleId);
787
+ let symbol = base + '/' + quote;
788
+ if (settleId !== undefined) {
789
+ symbol = symbol + ':' + settle;
790
+ swap = true;
791
+ contractSize = tickSize; // always same
792
+ linear = true; // always linear
793
+ inverse = false;
794
+ }
795
+ const type = swap ? 'swap' : 'spot';
796
+ return {
797
+ 'id': marketId,
798
+ 'symbol': symbol,
799
+ 'base': base,
800
+ 'quote': quote,
801
+ 'settle': settle,
802
+ 'baseId': baseId,
803
+ 'quoteId': quoteId,
804
+ 'settleId': settleId,
805
+ 'type': type,
806
+ 'spot': !swap,
807
+ 'margin': false,
808
+ 'swap': swap,
809
+ 'future': false,
810
+ 'option': false,
811
+ 'active': status,
812
+ 'contract': swap,
813
+ 'linear': linear,
814
+ 'inverse': inverse,
815
+ 'contractSize': contractSize,
816
+ 'expiry': undefined,
817
+ 'expiryDatetime': undefined,
818
+ 'strike': undefined,
819
+ 'optionType': undefined,
820
+ 'precision': {
821
+ 'price': tickSize,
822
+ 'amount': amountPrecision,
823
+ },
824
+ 'limits': {
825
+ 'leverage': {
826
+ 'min': undefined,
827
+ 'max': undefined,
828
+ },
829
+ 'amount': {
830
+ 'min': minSize,
831
+ 'max': undefined,
832
+ },
833
+ 'price': {
834
+ 'min': undefined,
835
+ 'max': undefined,
836
+ },
837
+ 'cost': {
838
+ 'min': undefined,
839
+ 'max': undefined,
840
+ },
841
+ },
842
+ 'created': undefined,
843
+ 'info': response,
844
+ };
845
+ }
846
+ /**
847
+ * @method
848
+ * @name gemini#fetchOrderBook
849
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
850
+ * @see https://docs.gemini.com/rest-api/#current-order-book
851
+ * @param {string} symbol unified symbol of the market to fetch the order book for
852
+ * @param {int} [limit] the maximum amount of order book entries to return
853
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
854
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
855
+ */
856
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
857
+ await this.loadMarkets();
858
+ const market = this.market(symbol);
859
+ const request = {
860
+ 'symbol': market['id'],
861
+ };
862
+ if (limit !== undefined) {
863
+ request['limit_bids'] = limit;
864
+ request['limit_asks'] = limit;
865
+ }
866
+ const response = await this.publicGetV1BookSymbol(this.extend(request, params));
867
+ return this.parseOrderBook(response, market['symbol'], undefined, 'bids', 'asks', 'price', 'amount');
868
+ }
869
+ async fetchTickerV1(symbol, params = {}) {
870
+ await this.loadMarkets();
871
+ const market = this.market(symbol);
872
+ const request = {
873
+ 'symbol': market['id'],
874
+ };
875
+ const response = await this.publicGetV1PubtickerSymbol(this.extend(request, params));
876
+ //
877
+ // {
878
+ // "bid":"9117.95",
879
+ // "ask":"9117.96",
880
+ // "volume":{
881
+ // "BTC":"1615.46861748",
882
+ // "USD":"14727307.57545006088",
883
+ // "timestamp":1594982700000
884
+ // },
885
+ // "last":"9115.23"
886
+ // }
887
+ //
888
+ return this.parseTicker(response, market);
889
+ }
890
+ async fetchTickerV2(symbol, params = {}) {
891
+ await this.loadMarkets();
892
+ const market = this.market(symbol);
893
+ const request = {
894
+ 'symbol': market['id'],
895
+ };
896
+ const response = await this.publicGetV2TickerSymbol(this.extend(request, params));
897
+ //
898
+ // {
899
+ // "symbol":"BTCUSD",
900
+ // "open":"9080.58",
901
+ // "high":"9184.53",
902
+ // "low":"9063.56",
903
+ // "close":"9116.08",
904
+ // // Hourly prices descending for past 24 hours
905
+ // "changes":["9117.33","9105.69","9106.23","9120.35","9098.57","9114.53","9113.55","9128.01","9113.63","9133.49","9133.49","9137.75","9126.73","9103.91","9119.33","9123.04","9124.44","9117.57","9114.22","9102.33","9076.67","9074.72","9074.97","9092.05"],
906
+ // "bid":"9115.86",
907
+ // "ask":"9115.87"
908
+ // }
909
+ //
910
+ return this.parseTicker(response, market);
911
+ }
912
+ async fetchTickerV1AndV2(symbol, params = {}) {
913
+ const tickerPromiseA = this.fetchTickerV1(symbol, params);
914
+ const tickerPromiseB = this.fetchTickerV2(symbol, params);
915
+ const [tickerA, tickerB] = await Promise.all([tickerPromiseA, tickerPromiseB]);
916
+ return this.deepExtend(tickerA, {
917
+ 'open': tickerB['open'],
918
+ 'high': tickerB['high'],
919
+ 'low': tickerB['low'],
920
+ 'change': tickerB['change'],
921
+ 'percentage': tickerB['percentage'],
922
+ 'average': tickerB['average'],
923
+ 'info': tickerB['info'],
924
+ });
925
+ }
926
+ /**
927
+ * @method
928
+ * @name gemini#fetchTicker
929
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
930
+ * @see https://docs.gemini.com/rest-api/#ticker
931
+ * @see https://docs.gemini.com/rest-api/#ticker-v2
932
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
933
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
934
+ * @param {object} [params.fetchTickerMethod] 'fetchTickerV2', 'fetchTickerV1' or 'fetchTickerV1AndV2' - 'fetchTickerV1' for original ccxt.gemini.fetchTicker - 'fetchTickerV1AndV2' for 2 api calls to get the result of both fetchTicker methods - default = 'fetchTickerV1'
935
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
936
+ */
937
+ async fetchTicker(symbol, params = {}) {
938
+ const method = this.safeValue(this.options, 'fetchTickerMethod', 'fetchTickerV1');
939
+ if (method === 'fetchTickerV1') {
940
+ return await this.fetchTickerV1(symbol, params);
941
+ }
942
+ if (method === 'fetchTickerV2') {
943
+ return await this.fetchTickerV2(symbol, params);
944
+ }
945
+ return await this.fetchTickerV1AndV2(symbol, params);
946
+ }
947
+ parseTicker(ticker, market = undefined) {
948
+ //
949
+ // fetchTickers
950
+ //
951
+ // {
952
+ // "pair": "BATUSD",
953
+ // "price": "0.20687",
954
+ // "percentChange24h": "0.0146"
955
+ // }
956
+ //
957
+ // fetchTickerV1
958
+ //
959
+ // {
960
+ // "bid":"9117.95",
961
+ // "ask":"9117.96",
962
+ // "volume":{
963
+ // "BTC":"1615.46861748",
964
+ // "USD":"14727307.57545006088",
965
+ // "timestamp":1594982700000
966
+ // },
967
+ // "last":"9115.23"
968
+ // }
969
+ //
970
+ // fetchTickerV2
971
+ //
972
+ // {
973
+ // "symbol":"BTCUSD",
974
+ // "open":"9080.58",
975
+ // "high":"9184.53",
976
+ // "low":"9063.56",
977
+ // "close":"9116.08",
978
+ // // Hourly prices descending for past 24 hours
979
+ // "changes":["9117.33","9105.69","9106.23","9120.35","9098.57","9114.53","9113.55","9128.01","9113.63","9133.49","9133.49","9137.75","9126.73","9103.91","9119.33","9123.04","9124.44","9117.57","9114.22","9102.33","9076.67","9074.72","9074.97","9092.05"],
980
+ // "bid":"9115.86",
981
+ // "ask":"9115.87"
982
+ // }
983
+ //
984
+ const volume = this.safeValue(ticker, 'volume', {});
985
+ const timestamp = this.safeInteger(volume, 'timestamp');
986
+ let symbol = undefined;
987
+ const marketId = this.safeStringLower(ticker, 'pair');
988
+ market = this.safeMarket(marketId, market);
989
+ let baseId = undefined;
990
+ let quoteId = undefined;
991
+ let base = undefined;
992
+ let quote = undefined;
993
+ if ((marketId !== undefined) && (market === undefined)) {
994
+ const idLength = marketId.length - 0;
995
+ if (idLength === 7) {
996
+ baseId = marketId.slice(0, 4);
997
+ quoteId = marketId.slice(4, 7);
998
+ }
999
+ else {
1000
+ baseId = marketId.slice(0, 3);
1001
+ quoteId = marketId.slice(3, 6);
1002
+ }
1003
+ base = this.safeCurrencyCode(baseId);
1004
+ quote = this.safeCurrencyCode(quoteId);
1005
+ symbol = base + '/' + quote;
1006
+ }
1007
+ if ((symbol === undefined) && (market !== undefined)) {
1008
+ symbol = market['symbol'];
1009
+ baseId = this.safeStringUpper(market, 'baseId');
1010
+ quoteId = this.safeStringUpper(market, 'quoteId');
1011
+ }
1012
+ const price = this.safeString(ticker, 'price');
1013
+ const last = this.safeString2(ticker, 'last', 'close', price);
1014
+ const percentage = this.safeString(ticker, 'percentChange24h');
1015
+ const open = this.safeString(ticker, 'open');
1016
+ const baseVolume = this.safeString(volume, baseId);
1017
+ const quoteVolume = this.safeString(volume, quoteId);
1018
+ return this.safeTicker({
1019
+ 'symbol': symbol,
1020
+ 'timestamp': timestamp,
1021
+ 'datetime': this.iso8601(timestamp),
1022
+ 'high': this.safeString(ticker, 'high'),
1023
+ 'low': this.safeString(ticker, 'low'),
1024
+ 'bid': this.safeString(ticker, 'bid'),
1025
+ 'bidVolume': undefined,
1026
+ 'ask': this.safeString(ticker, 'ask'),
1027
+ 'askVolume': undefined,
1028
+ 'vwap': undefined,
1029
+ 'open': open,
1030
+ 'close': last,
1031
+ 'last': last,
1032
+ 'previousClose': undefined,
1033
+ 'change': undefined,
1034
+ 'percentage': percentage,
1035
+ 'average': undefined,
1036
+ 'baseVolume': baseVolume,
1037
+ 'quoteVolume': quoteVolume,
1038
+ 'info': ticker,
1039
+ }, market);
1040
+ }
1041
+ /**
1042
+ * @method
1043
+ * @name gemini#fetchTickers
1044
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1045
+ * @see https://docs.gemini.com/rest-api/#price-feed
1046
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1047
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1048
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1049
+ */
1050
+ async fetchTickers(symbols = undefined, params = {}) {
1051
+ await this.loadMarkets();
1052
+ const response = await this.publicGetV1Pricefeed(params);
1053
+ //
1054
+ // [
1055
+ // {
1056
+ // "pair": "BATUSD",
1057
+ // "price": "0.20687",
1058
+ // "percentChange24h": "0.0146"
1059
+ // },
1060
+ // {
1061
+ // "pair": "LINKETH",
1062
+ // "price": "0.018",
1063
+ // "percentChange24h": "0.0000"
1064
+ // },
1065
+ // ]
1066
+ //
1067
+ return this.parseTickers(response, symbols);
1068
+ }
1069
+ parseTrade(trade, market = undefined) {
1070
+ //
1071
+ // public fetchTrades
1072
+ //
1073
+ // {
1074
+ // "timestamp":1601617445,
1075
+ // "timestampms":1601617445144,
1076
+ // "tid":14122489752,
1077
+ // "price":"0.46476",
1078
+ // "amount":"28.407209",
1079
+ // "exchange":"gemini",
1080
+ // "type":"buy"
1081
+ // }
1082
+ //
1083
+ // private fetchTrades
1084
+ //
1085
+ // {
1086
+ // "price":"3900.00",
1087
+ // "amount":"0.00996",
1088
+ // "timestamp":1638891173,
1089
+ // "timestampms":1638891173518,
1090
+ // "type":"Sell",
1091
+ // "aggressor":false,
1092
+ // "fee_currency":"EUR",
1093
+ // "fee_amount":"0.00",
1094
+ // "tid":73621746145,
1095
+ // "order_id":"73621746059",
1096
+ // "exchange":"gemini",
1097
+ // "is_auction_fill":false,
1098
+ // "is_clearing_fill":false,
1099
+ // "symbol":"ETHEUR",
1100
+ // "client_order_id":"1638891171610"
1101
+ // }
1102
+ //
1103
+ const timestamp = this.safeInteger(trade, 'timestampms');
1104
+ const id = this.safeString(trade, 'tid');
1105
+ const orderId = this.safeString(trade, 'order_id');
1106
+ const feeCurrencyId = this.safeString(trade, 'fee_currency');
1107
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1108
+ const fee = {
1109
+ 'cost': this.safeString(trade, 'fee_amount'),
1110
+ 'currency': feeCurrencyCode,
1111
+ };
1112
+ const priceString = this.safeString(trade, 'price');
1113
+ const amountString = this.safeString(trade, 'amount');
1114
+ const side = this.safeStringLower(trade, 'type');
1115
+ const symbol = this.safeSymbol(undefined, market);
1116
+ return this.safeTrade({
1117
+ 'id': id,
1118
+ 'order': orderId,
1119
+ 'info': trade,
1120
+ 'timestamp': timestamp,
1121
+ 'datetime': this.iso8601(timestamp),
1122
+ 'symbol': symbol,
1123
+ 'type': undefined,
1124
+ 'side': side,
1125
+ 'takerOrMaker': undefined,
1126
+ 'price': priceString,
1127
+ 'cost': undefined,
1128
+ 'amount': amountString,
1129
+ 'fee': fee,
1130
+ }, market);
1131
+ }
1132
+ /**
1133
+ * @method
1134
+ * @name gemini#fetchTrades
1135
+ * @description get the list of most recent trades for a particular symbol
1136
+ * @see https://docs.gemini.com/rest-api/#trade-history
1137
+ * @param {string} symbol unified symbol of the market to fetch trades for
1138
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1139
+ * @param {int} [limit] the maximum amount of trades to fetch
1140
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1141
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1142
+ */
1143
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1144
+ await this.loadMarkets();
1145
+ const market = this.market(symbol);
1146
+ const request = {
1147
+ 'symbol': market['id'],
1148
+ };
1149
+ if (limit !== undefined) {
1150
+ request['limit_trades'] = Math.min(limit, 500);
1151
+ }
1152
+ if (since !== undefined) {
1153
+ request['timestamp'] = since;
1154
+ }
1155
+ const response = await this.publicGetV1TradesSymbol(this.extend(request, params));
1156
+ //
1157
+ // [
1158
+ // {
1159
+ // "timestamp":1601617445,
1160
+ // "timestampms":1601617445144,
1161
+ // "tid":14122489752,
1162
+ // "price":"0.46476",
1163
+ // "amount":"28.407209",
1164
+ // "exchange":"gemini",
1165
+ // "type":"buy"
1166
+ // },
1167
+ // ]
1168
+ //
1169
+ return this.parseTrades(response, market, since, limit);
1170
+ }
1171
+ parseBalance(response) {
1172
+ const result = { 'info': response };
1173
+ for (let i = 0; i < response.length; i++) {
1174
+ const balance = response[i];
1175
+ const currencyId = this.safeString(balance, 'currency');
1176
+ const code = this.safeCurrencyCode(currencyId);
1177
+ const account = this.account();
1178
+ account['free'] = this.safeString(balance, 'available');
1179
+ account['total'] = this.safeString(balance, 'amount');
1180
+ result[code] = account;
1181
+ }
1182
+ return this.safeBalance(result);
1183
+ }
1184
+ /**
1185
+ * @method
1186
+ * @name gemini#fetchTradingFees
1187
+ * @description fetch the trading fees for multiple markets
1188
+ * @see https://docs.gemini.com/rest-api/#get-notional-volume
1189
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1190
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
1191
+ */
1192
+ async fetchTradingFees(params = {}) {
1193
+ await this.loadMarkets();
1194
+ const response = await this.privatePostV1Notionalvolume(params);
1195
+ //
1196
+ // {
1197
+ // "web_maker_fee_bps": 25,
1198
+ // "web_taker_fee_bps": 35,
1199
+ // "web_auction_fee_bps": 25,
1200
+ // "api_maker_fee_bps": 10,
1201
+ // "api_taker_fee_bps": 35,
1202
+ // "api_auction_fee_bps": 20,
1203
+ // "fix_maker_fee_bps": 10,
1204
+ // "fix_taker_fee_bps": 35,
1205
+ // "fix_auction_fee_bps": 20,
1206
+ // "block_maker_fee_bps": 0,
1207
+ // "block_taker_fee_bps": 50,
1208
+ // "notional_30d_volume": 150.00,
1209
+ // "last_updated_ms": 1551371446000,
1210
+ // "date": "2019-02-28",
1211
+ // "notional_1d_volume": [
1212
+ // {
1213
+ // "date": "2019-02-22",
1214
+ // "notional_volume": 75.00
1215
+ // },
1216
+ // {
1217
+ // "date": "2019-02-14",
1218
+ // "notional_volume": 75.00
1219
+ // }
1220
+ // ]
1221
+ // }
1222
+ //
1223
+ const makerBps = this.safeString(response, 'api_maker_fee_bps');
1224
+ const takerBps = this.safeString(response, 'api_taker_fee_bps');
1225
+ const makerString = Precise.stringDiv(makerBps, '10000');
1226
+ const takerString = Precise.stringDiv(takerBps, '10000');
1227
+ const maker = this.parseNumber(makerString);
1228
+ const taker = this.parseNumber(takerString);
1229
+ const result = {};
1230
+ for (let i = 0; i < this.symbols.length; i++) {
1231
+ const symbol = this.symbols[i];
1232
+ result[symbol] = {
1233
+ 'info': response,
1234
+ 'symbol': symbol,
1235
+ 'maker': maker,
1236
+ 'taker': taker,
1237
+ 'percentage': true,
1238
+ 'tierBased': true,
1239
+ };
1240
+ }
1241
+ return result;
1242
+ }
1243
+ /**
1244
+ * @method
1245
+ * @name gemini#fetchBalance
1246
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1247
+ * @see https://docs.gemini.com/rest-api/#get-available-balances
1248
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1249
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1250
+ */
1251
+ async fetchBalance(params = {}) {
1252
+ await this.loadMarkets();
1253
+ const response = await this.privatePostV1Balances(params);
1254
+ return this.parseBalance(response);
1255
+ }
1256
+ parseOrder(order, market = undefined) {
1257
+ //
1258
+ // createOrder (private)
1259
+ //
1260
+ // {
1261
+ // "order_id":"106027397702",
1262
+ // "id":"106027397702",
1263
+ // "symbol":"etheur",
1264
+ // "exchange":"gemini",
1265
+ // "avg_execution_price":"2877.48",
1266
+ // "side":"sell",
1267
+ // "type":"exchange limit",
1268
+ // "timestamp":"1650398122",
1269
+ // "timestampms":1650398122308,
1270
+ // "is_live":false,
1271
+ // "is_cancelled":false,
1272
+ // "is_hidden":false,
1273
+ // "was_forced":false,
1274
+ // "executed_amount":"0.014434",
1275
+ // "client_order_id":"1650398121695",
1276
+ // "options":[],
1277
+ // "price":"2800.00",
1278
+ // "original_amount":"0.014434",
1279
+ // "remaining_amount":"0"
1280
+ // }
1281
+ //
1282
+ // fetchOrder (private)
1283
+ //
1284
+ // {
1285
+ // "order_id":"106028543717",
1286
+ // "id":"106028543717",
1287
+ // "symbol":"etheur",
1288
+ // "exchange":"gemini",
1289
+ // "avg_execution_price":"0.00",
1290
+ // "side":"buy",
1291
+ // "type":"exchange limit",
1292
+ // "timestamp":"1650398446",
1293
+ // "timestampms":1650398446375,
1294
+ // "is_live":true,
1295
+ // "is_cancelled":false,
1296
+ // "is_hidden":false,
1297
+ // "was_forced":false,
1298
+ // "executed_amount":"0",
1299
+ // "client_order_id":"1650398445709",
1300
+ // "options":[],
1301
+ // "price":"2000.00",
1302
+ // "original_amount":"0.01",
1303
+ // "remaining_amount":"0.01"
1304
+ // }
1305
+ //
1306
+ // fetchOpenOrders (private)
1307
+ //
1308
+ // {
1309
+ // "order_id":"106028543717",
1310
+ // "id":"106028543717",
1311
+ // "symbol":"etheur",
1312
+ // "exchange":"gemini",
1313
+ // "avg_execution_price":"0.00",
1314
+ // "side":"buy",
1315
+ // "type":"exchange limit",
1316
+ // "timestamp":"1650398446",
1317
+ // "timestampms":1650398446375,
1318
+ // "is_live":true,
1319
+ // "is_cancelled":false,
1320
+ // "is_hidden":false,
1321
+ // "was_forced":false,
1322
+ // "executed_amount":"0",
1323
+ // "client_order_id":"1650398445709",
1324
+ // "options":[],
1325
+ // "price":"2000.00",
1326
+ // "original_amount":"0.01",
1327
+ // "remaining_amount":"0.01"
1328
+ // }
1329
+ //
1330
+ // cancelOrder (private)
1331
+ //
1332
+ // {
1333
+ // "order_id":"106028543717",
1334
+ // "id":"106028543717",
1335
+ // "symbol":"etheur",
1336
+ // "exchange":"gemini",
1337
+ // "avg_execution_price":"0.00",
1338
+ // "side":"buy",
1339
+ // "type":"exchange limit",
1340
+ // "timestamp":"1650398446",
1341
+ // "timestampms":1650398446375,
1342
+ // "is_live":false,
1343
+ // "is_cancelled":true,
1344
+ // "is_hidden":false,
1345
+ // "was_forced":false,
1346
+ // "executed_amount":"0",
1347
+ // "client_order_id":"1650398445709",
1348
+ // "reason":"Requested",
1349
+ // "options":[],
1350
+ // "price":"2000.00",
1351
+ // "original_amount":"0.01",
1352
+ // "remaining_amount":"0.01"
1353
+ // }
1354
+ //
1355
+ const timestamp = this.safeInteger(order, 'timestampms');
1356
+ const amount = this.safeString(order, 'original_amount');
1357
+ const remaining = this.safeString(order, 'remaining_amount');
1358
+ const filled = this.safeString(order, 'executed_amount');
1359
+ let status = 'closed';
1360
+ if (order['is_live']) {
1361
+ status = 'open';
1362
+ }
1363
+ if (order['is_cancelled']) {
1364
+ status = 'canceled';
1365
+ }
1366
+ const price = this.safeString(order, 'price');
1367
+ const average = this.safeString(order, 'avg_execution_price');
1368
+ let type = this.safeString(order, 'type');
1369
+ if (type === 'exchange limit') {
1370
+ type = 'limit';
1371
+ }
1372
+ else if (type === 'market buy' || type === 'market sell') {
1373
+ type = 'market';
1374
+ }
1375
+ else {
1376
+ type = order['type'];
1377
+ }
1378
+ const fee = undefined;
1379
+ const marketId = this.safeString(order, 'symbol');
1380
+ const symbol = this.safeSymbol(marketId, market);
1381
+ const id = this.safeString(order, 'order_id');
1382
+ const side = this.safeStringLower(order, 'side');
1383
+ const clientOrderId = this.safeString(order, 'client_order_id');
1384
+ const optionsArray = this.safeValue(order, 'options', []);
1385
+ const option = this.safeString(optionsArray, 0);
1386
+ let timeInForce = 'GTC';
1387
+ let postOnly = false;
1388
+ if (option !== undefined) {
1389
+ if (option === 'immediate-or-cancel') {
1390
+ timeInForce = 'IOC';
1391
+ }
1392
+ else if (option === 'fill-or-kill') {
1393
+ timeInForce = 'FOK';
1394
+ }
1395
+ else if (option === 'maker-or-cancel') {
1396
+ timeInForce = 'PO';
1397
+ postOnly = true;
1398
+ }
1399
+ }
1400
+ return this.safeOrder({
1401
+ 'id': id,
1402
+ 'clientOrderId': clientOrderId,
1403
+ 'info': order,
1404
+ 'timestamp': timestamp,
1405
+ 'datetime': this.iso8601(timestamp),
1406
+ 'lastTradeTimestamp': undefined,
1407
+ 'status': status,
1408
+ 'symbol': symbol,
1409
+ 'type': type,
1410
+ 'timeInForce': timeInForce,
1411
+ 'postOnly': postOnly,
1412
+ 'side': side,
1413
+ 'price': price,
1414
+ 'triggerPrice': undefined,
1415
+ 'average': average,
1416
+ 'cost': undefined,
1417
+ 'amount': amount,
1418
+ 'filled': filled,
1419
+ 'remaining': remaining,
1420
+ 'fee': fee,
1421
+ 'trades': undefined,
1422
+ }, market);
1423
+ }
1424
+ /**
1425
+ * @method
1426
+ * @name gemini#fetchOrder
1427
+ * @description fetches information on an order made by the user
1428
+ * @see https://docs.gemini.com/rest-api/#order-status
1429
+ * @param {string} id order id
1430
+ * @param {string} symbol unified symbol of the market the order was made in
1431
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1432
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1433
+ */
1434
+ async fetchOrder(id, symbol = undefined, params = {}) {
1435
+ await this.loadMarkets();
1436
+ const request = {
1437
+ 'order_id': id,
1438
+ };
1439
+ const response = await this.privatePostV1OrderStatus(this.extend(request, params));
1440
+ //
1441
+ // {
1442
+ // "order_id":"106028543717",
1443
+ // "id":"106028543717",
1444
+ // "symbol":"etheur",
1445
+ // "exchange":"gemini",
1446
+ // "avg_execution_price":"0.00",
1447
+ // "side":"buy",
1448
+ // "type":"exchange limit",
1449
+ // "timestamp":"1650398446",
1450
+ // "timestampms":1650398446375,
1451
+ // "is_live":true,
1452
+ // "is_cancelled":false,
1453
+ // "is_hidden":false,
1454
+ // "was_forced":false,
1455
+ // "executed_amount":"0",
1456
+ // "client_order_id":"1650398445709",
1457
+ // "options":[],
1458
+ // "price":"2000.00",
1459
+ // "original_amount":"0.01",
1460
+ // "remaining_amount":"0.01"
1461
+ // }
1462
+ //
1463
+ return this.parseOrder(response);
1464
+ }
1465
+ /**
1466
+ * @method
1467
+ * @name gemini#fetchOpenOrders
1468
+ * @description fetch all unfilled currently open orders
1469
+ * @see https://docs.gemini.com/rest-api/#get-active-orders
1470
+ * @param {string} symbol unified market symbol
1471
+ * @param {int} [since] the earliest time in ms to fetch open orders for
1472
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
1473
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1474
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1475
+ */
1476
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1477
+ await this.loadMarkets();
1478
+ const response = await this.privatePostV1Orders(params);
1479
+ //
1480
+ // [
1481
+ // {
1482
+ // "order_id":"106028543717",
1483
+ // "id":"106028543717",
1484
+ // "symbol":"etheur",
1485
+ // "exchange":"gemini",
1486
+ // "avg_execution_price":"0.00",
1487
+ // "side":"buy",
1488
+ // "type":"exchange limit",
1489
+ // "timestamp":"1650398446",
1490
+ // "timestampms":1650398446375,
1491
+ // "is_live":true,
1492
+ // "is_cancelled":false,
1493
+ // "is_hidden":false,
1494
+ // "was_forced":false,
1495
+ // "executed_amount":"0",
1496
+ // "client_order_id":"1650398445709",
1497
+ // "options":[],
1498
+ // "price":"2000.00",
1499
+ // "original_amount":"0.01",
1500
+ // "remaining_amount":"0.01"
1501
+ // }
1502
+ // ]
1503
+ //
1504
+ let market = undefined;
1505
+ if (symbol !== undefined) {
1506
+ market = this.market(symbol); // throws on non-existent symbol
1507
+ }
1508
+ return this.parseOrders(response, market, since, limit);
1509
+ }
1510
+ /**
1511
+ * @method
1512
+ * @name gemini#createOrder
1513
+ * @description create a trade order
1514
+ * @see https://docs.gemini.com/rest-api/#new-order
1515
+ * @param {string} symbol unified symbol of the market to create an order in
1516
+ * @param {string} type must be 'limit'
1517
+ * @param {string} side 'buy' or 'sell'
1518
+ * @param {float} amount how much of currency you want to trade in units of base currency
1519
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1520
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1521
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1522
+ */
1523
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1524
+ await this.loadMarkets();
1525
+ if (type !== 'limit') {
1526
+ throw new ExchangeError(this.id + ' createOrder() allows limit orders only');
1527
+ }
1528
+ let clientOrderId = this.safeString2(params, 'clientOrderId', 'client_order_id');
1529
+ params = this.omit(params, ['clientOrderId', 'client_order_id']);
1530
+ if (clientOrderId === undefined) {
1531
+ clientOrderId = this.milliseconds().toString();
1532
+ }
1533
+ const market = this.market(symbol);
1534
+ const amountString = this.amountToPrecision(symbol, amount);
1535
+ const priceString = this.priceToPrecision(symbol, price);
1536
+ const request = {
1537
+ 'client_order_id': clientOrderId,
1538
+ 'symbol': market['id'],
1539
+ 'amount': amountString,
1540
+ 'price': priceString,
1541
+ 'side': side,
1542
+ 'type': 'exchange limit', // gemini allows limit orders only
1543
+ // 'options': [], one of: maker-or-cancel, immediate-or-cancel, fill-or-kill, auction-only, indication-of-interest
1544
+ };
1545
+ type = this.safeString(params, 'type', type);
1546
+ params = this.omit(params, 'type');
1547
+ const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stop_price', 'stopPrice']);
1548
+ params = this.omit(params, ['triggerPrice', 'stop_price', 'stopPrice', 'type']);
1549
+ if (type === 'stopLimit') {
1550
+ throw new ArgumentsRequired(this.id + ' createOrder() requires a triggerPrice parameter or a stop_price parameter for ' + type + ' orders');
1551
+ }
1552
+ if (triggerPrice !== undefined) {
1553
+ request['stop_price'] = this.priceToPrecision(symbol, triggerPrice);
1554
+ request['type'] = 'exchange stop limit';
1555
+ }
1556
+ else {
1557
+ // No options can be applied to stop-limit orders at this time.
1558
+ const timeInForce = this.safeString(params, 'timeInForce');
1559
+ params = this.omit(params, 'timeInForce');
1560
+ if (timeInForce !== undefined) {
1561
+ if ((timeInForce === 'IOC') || (timeInForce === 'immediate-or-cancel')) {
1562
+ request['options'] = ['immediate-or-cancel'];
1563
+ }
1564
+ else if ((timeInForce === 'FOK') || (timeInForce === 'fill-or-kill')) {
1565
+ request['options'] = ['fill-or-kill'];
1566
+ }
1567
+ else if (timeInForce === 'PO') {
1568
+ request['options'] = ['maker-or-cancel'];
1569
+ }
1570
+ }
1571
+ const postOnly = this.safeBool(params, 'postOnly', false);
1572
+ params = this.omit(params, 'postOnly');
1573
+ if (postOnly) {
1574
+ request['options'] = ['maker-or-cancel'];
1575
+ }
1576
+ // allowing override for auction-only and indication-of-interest order options
1577
+ const options = this.safeString(params, 'options');
1578
+ if (options !== undefined) {
1579
+ request['options'] = [options];
1580
+ }
1581
+ }
1582
+ const response = await this.privatePostV1OrderNew(this.extend(request, params));
1583
+ //
1584
+ // {
1585
+ // "order_id":"106027397702",
1586
+ // "id":"106027397702",
1587
+ // "symbol":"etheur",
1588
+ // "exchange":"gemini",
1589
+ // "avg_execution_price":"2877.48",
1590
+ // "side":"sell",
1591
+ // "type":"exchange limit",
1592
+ // "timestamp":"1650398122",
1593
+ // "timestampms":1650398122308,
1594
+ // "is_live":false,
1595
+ // "is_cancelled":false,
1596
+ // "is_hidden":false,
1597
+ // "was_forced":false,
1598
+ // "executed_amount":"0.014434",
1599
+ // "client_order_id":"1650398121695",
1600
+ // "options":[],
1601
+ // "price":"2800.00",
1602
+ // "original_amount":"0.014434",
1603
+ // "remaining_amount":"0"
1604
+ // }
1605
+ //
1606
+ return this.parseOrder(response);
1607
+ }
1608
+ /**
1609
+ * @method
1610
+ * @name gemini#cancelOrder
1611
+ * @description cancels an open order
1612
+ * @see https://docs.gemini.com/rest-api/#cancel-order
1613
+ * @param {string} id order id
1614
+ * @param {string} symbol unified symbol of the market the order was made in
1615
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1616
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1617
+ */
1618
+ async cancelOrder(id, symbol = undefined, params = {}) {
1619
+ await this.loadMarkets();
1620
+ const request = {
1621
+ 'order_id': id,
1622
+ };
1623
+ const response = await this.privatePostV1OrderCancel(this.extend(request, params));
1624
+ //
1625
+ // {
1626
+ // "order_id":"106028543717",
1627
+ // "id":"106028543717",
1628
+ // "symbol":"etheur",
1629
+ // "exchange":"gemini",
1630
+ // "avg_execution_price":"0.00",
1631
+ // "side":"buy",
1632
+ // "type":"exchange limit",
1633
+ // "timestamp":"1650398446",
1634
+ // "timestampms":1650398446375,
1635
+ // "is_live":false,
1636
+ // "is_cancelled":true,
1637
+ // "is_hidden":false,
1638
+ // "was_forced":false,
1639
+ // "executed_amount":"0",
1640
+ // "client_order_id":"1650398445709",
1641
+ // "reason":"Requested",
1642
+ // "options":[],
1643
+ // "price":"2000.00",
1644
+ // "original_amount":"0.01",
1645
+ // "remaining_amount":"0.01"
1646
+ // }
1647
+ //
1648
+ return this.parseOrder(response);
1649
+ }
1650
+ /**
1651
+ * @method
1652
+ * @name gemini#fetchMyTrades
1653
+ * @description fetch all trades made by the user
1654
+ * @see https://docs.gemini.com/rest-api/#get-past-trades
1655
+ * @param {string} symbol unified market symbol
1656
+ * @param {int} [since] the earliest time in ms to fetch trades for
1657
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1658
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1659
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1660
+ */
1661
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1662
+ if (symbol === undefined) {
1663
+ throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
1664
+ }
1665
+ await this.loadMarkets();
1666
+ const market = this.market(symbol);
1667
+ const request = {
1668
+ 'symbol': market['id'],
1669
+ };
1670
+ if (limit !== undefined) {
1671
+ request['limit_trades'] = limit;
1672
+ }
1673
+ if (since !== undefined) {
1674
+ request['timestamp'] = this.parseToInt(since / 1000);
1675
+ }
1676
+ const response = await this.privatePostV1Mytrades(this.extend(request, params));
1677
+ return this.parseTrades(response, market, since, limit);
1678
+ }
1679
+ /**
1680
+ * @method
1681
+ * @name gemini#withdraw
1682
+ * @description make a withdrawal
1683
+ * @see https://docs.gemini.com/rest-api/#withdraw-crypto-funds
1684
+ * @param {string} code unified currency code
1685
+ * @param {float} amount the amount to withdraw
1686
+ * @param {string} address the address to withdraw to
1687
+ * @param {string} tag
1688
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1689
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1690
+ */
1691
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
1692
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
1693
+ this.checkAddress(address);
1694
+ await this.loadMarkets();
1695
+ const currency = this.currency(code);
1696
+ const request = {
1697
+ 'currency': currency['id'],
1698
+ 'amount': amount,
1699
+ 'address': address,
1700
+ };
1701
+ const response = await this.privatePostV1WithdrawCurrency(this.extend(request, params));
1702
+ //
1703
+ // for BTC
1704
+ // {
1705
+ // "address":"mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR",
1706
+ // "amount":"1",
1707
+ // "withdrawalId":"02176a83-a6b1-4202-9b85-1c1c92dd25c4",
1708
+ // "message":"You have requested a transfer of 1 BTC to mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR. This withdrawal will be sent to the blockchain within the next 60 seconds."
1709
+ // }
1710
+ //
1711
+ // for ETH
1712
+ // {
1713
+ // "address":"0xA63123350Acc8F5ee1b1fBd1A6717135e82dBd28",
1714
+ // "amount":"2.34567",
1715
+ // "txHash":"0x28267179f92926d85c5516bqc063b2631935573d8915258e95d9572eedcc8cc"
1716
+ // }
1717
+ //
1718
+ // for error (other variations of error messages are also expected)
1719
+ // {
1720
+ // "result":"error",
1721
+ // "reason":"CryptoAddressWhitelistsNotEnabled",
1722
+ // "message":"Cryptocurrency withdrawal address whitelists are not enabled for account 24. Please contact support@gemini.com for information on setting up a withdrawal address whitelist."
1723
+ // }
1724
+ //
1725
+ const result = this.safeString(response, 'result');
1726
+ if (result === 'error') {
1727
+ throw new ExchangeError(this.id + ' withdraw() failed: ' + this.json(response));
1728
+ }
1729
+ return this.parseTransaction(response, currency);
1730
+ }
1731
+ nonce() {
1732
+ const nonceMethod = this.safeString(this.options, 'nonce', 'milliseconds');
1733
+ if (nonceMethod === 'milliseconds') {
1734
+ return this.milliseconds();
1735
+ }
1736
+ return this.seconds();
1737
+ }
1738
+ /**
1739
+ * @method
1740
+ * @name gemini#fetchDepositsWithdrawals
1741
+ * @description fetch history of deposits and withdrawals
1742
+ * @see https://docs.gemini.com/rest-api/#transfers
1743
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
1744
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
1745
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
1746
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1747
+ * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1748
+ */
1749
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1750
+ await this.loadMarkets();
1751
+ const request = {};
1752
+ if (limit !== undefined) {
1753
+ request['limit_transfers'] = limit;
1754
+ }
1755
+ if (since !== undefined) {
1756
+ request['timestamp'] = since;
1757
+ }
1758
+ const response = await this.privatePostV1Transfers(this.extend(request, params));
1759
+ return this.parseTransactions(response);
1760
+ }
1761
+ parseTransaction(transaction, currency = undefined) {
1762
+ //
1763
+ // withdraw
1764
+ //
1765
+ // for BTC
1766
+ // {
1767
+ // "address":"mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR",
1768
+ // "amount":"1",
1769
+ // "withdrawalId":"02176a83-a6b1-4202-9b85-1c1c92dd25c4",
1770
+ // "message":"You have requested a transfer of 1 BTC to mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR. This withdrawal will be sent to the blockchain within the next 60 seconds."
1771
+ // }
1772
+ //
1773
+ // for ETH
1774
+ // {
1775
+ // "address":"0xA63123350Acc8F5ee1b1fBd1A6717135e82dBd28",
1776
+ // "amount":"2.34567",
1777
+ // "txHash":"0x28267179f92926d85c5516bqc063b2631935573d8915258e95d9572eedcc8cc"
1778
+ // }
1779
+ //
1780
+ const timestamp = this.safeInteger(transaction, 'timestampms');
1781
+ const currencyId = this.safeString(transaction, 'currency');
1782
+ const code = this.safeCurrencyCode(currencyId, currency);
1783
+ const address = this.safeString(transaction, 'destination');
1784
+ const type = this.safeStringLower(transaction, 'type');
1785
+ // if status field is available, then it's complete
1786
+ const statusRaw = this.safeString(transaction, 'status');
1787
+ let fee = undefined;
1788
+ const feeAmount = this.safeNumber(transaction, 'feeAmount');
1789
+ if (feeAmount !== undefined) {
1790
+ fee = {
1791
+ 'cost': feeAmount,
1792
+ 'currency': code,
1793
+ };
1794
+ }
1795
+ return {
1796
+ 'info': transaction,
1797
+ 'id': this.safeString2(transaction, 'eid', 'withdrawalId'),
1798
+ 'txid': this.safeString(transaction, 'txHash'),
1799
+ 'timestamp': timestamp,
1800
+ 'datetime': this.iso8601(timestamp),
1801
+ 'network': undefined,
1802
+ 'address': address,
1803
+ 'addressTo': undefined,
1804
+ 'addressFrom': undefined,
1805
+ 'tag': undefined,
1806
+ 'tagTo': undefined,
1807
+ 'tagFrom': undefined,
1808
+ 'type': type,
1809
+ 'amount': this.safeNumber(transaction, 'amount'),
1810
+ 'currency': code,
1811
+ 'status': this.parseTransactionStatus(statusRaw),
1812
+ 'updated': undefined,
1813
+ 'internal': undefined,
1814
+ 'comment': this.safeString(transaction, 'message'),
1815
+ 'fee': fee,
1816
+ };
1817
+ }
1818
+ parseTransactionStatus(status) {
1819
+ const statuses = {
1820
+ 'Advanced': 'ok',
1821
+ 'Complete': 'ok',
1822
+ };
1823
+ return this.safeString(statuses, status, status);
1824
+ }
1825
+ parseDepositAddress(depositAddress, currency = undefined) {
1826
+ //
1827
+ // {
1828
+ // "address": "0xed6494Fe7c1E56d1bd6136e89268C51E32d9708B",
1829
+ // "timestamp": "1636813923098",
1830
+ // "addressVersion": "eV1" }
1831
+ // }
1832
+ //
1833
+ const address = this.safeString(depositAddress, 'address');
1834
+ const code = this.safeCurrencyCode(undefined, currency);
1835
+ return {
1836
+ 'currency': code,
1837
+ 'network': undefined,
1838
+ 'address': address,
1839
+ 'tag': undefined,
1840
+ 'info': depositAddress,
1841
+ };
1842
+ }
1843
+ /**
1844
+ * @method
1845
+ * @name gemini#fetchDepositAddress
1846
+ * @see https://docs.gemini.com/rest-api/#get-deposit-addresses
1847
+ * @description fetch the deposit address for a currency associated with this account
1848
+ * @param {string} code unified currency code
1849
+ * @param {object} [params] extra parameters specific to the endpoint
1850
+ * @param {string} [params.network] *required* The chain of currency
1851
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1852
+ */
1853
+ async fetchDepositAddress(code, params = {}) {
1854
+ await this.loadMarkets();
1855
+ const groupedByNetwork = await this.fetchDepositAddressesByNetwork(code, params);
1856
+ let networkCode = undefined;
1857
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
1858
+ const networkGroup = this.indexBy(this.safeValue(groupedByNetwork, networkCode), 'currency');
1859
+ return this.safeValue(networkGroup, code);
1860
+ }
1861
+ /**
1862
+ * @method
1863
+ * @name gemini#fetchDepositAddressesByNetwork
1864
+ * @description fetch a dictionary of addresses for a currency, indexed by network
1865
+ * @see https://docs.gemini.com/rest-api/#get-deposit-addresses
1866
+ * @param {string} code unified currency code of the currency for the deposit address
1867
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1868
+ * @param {string} [params.network] *required* The chain of currency
1869
+ * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network
1870
+ */
1871
+ async fetchDepositAddressesByNetwork(code, params = {}) {
1872
+ await this.loadMarkets();
1873
+ const currency = this.currency(code);
1874
+ code = currency['code'];
1875
+ let networkCode = undefined;
1876
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
1877
+ if (networkCode === undefined) {
1878
+ throw new ArgumentsRequired(this.id + ' fetchDepositAddresses() requires a network parameter');
1879
+ }
1880
+ const networkId = this.networkCodeToId(networkCode);
1881
+ const request = {
1882
+ 'network': networkId,
1883
+ };
1884
+ const response = await this.privatePostV1AddressesNetwork(this.extend(request, params));
1885
+ const results = this.parseDepositAddresses(response, [code], false, { 'network': networkCode, 'currency': code });
1886
+ return this.groupBy(results, 'network');
1887
+ }
1888
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1889
+ let url = '/' + this.implodeParams(path, params);
1890
+ const query = this.omit(params, this.extractParams(path));
1891
+ if (api === 'private') {
1892
+ this.checkRequiredCredentials();
1893
+ const apiKey = this.apiKey;
1894
+ if (apiKey.indexOf('account') < 0) {
1895
+ throw new AuthenticationError(this.id + ' sign() requires an account-key, master-keys are not-supported');
1896
+ }
1897
+ const nonce = this.nonce().toString();
1898
+ const request = this.extend({
1899
+ 'request': url,
1900
+ 'nonce': nonce,
1901
+ }, query);
1902
+ let payload = this.json(request);
1903
+ payload = this.stringToBase64(payload);
1904
+ const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha384);
1905
+ headers = {
1906
+ 'Content-Type': 'text/plain',
1907
+ 'X-GEMINI-APIKEY': this.apiKey,
1908
+ 'X-GEMINI-PAYLOAD': payload,
1909
+ 'X-GEMINI-SIGNATURE': signature,
1910
+ };
1911
+ }
1912
+ else {
1913
+ if (Object.keys(query).length) {
1914
+ url += '?' + this.urlencode(query);
1915
+ }
1916
+ }
1917
+ url = this.urls['api'][api] + url;
1918
+ if ((method === 'POST') || (method === 'DELETE')) {
1919
+ body = this.json(query);
1920
+ }
1921
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
1922
+ }
1923
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
1924
+ if (response === undefined) {
1925
+ if (typeof body === 'string') {
1926
+ const feedback = this.id + ' ' + body;
1927
+ this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
1928
+ }
1929
+ return undefined; // fallback to default error handler
1930
+ }
1931
+ //
1932
+ // {
1933
+ // "result": "error",
1934
+ // "reason": "BadNonce",
1935
+ // "message": "Out-of-sequence nonce <1234> precedes previously used nonce <2345>"
1936
+ // }
1937
+ //
1938
+ const result = this.safeString(response, 'result');
1939
+ if (result === 'error') {
1940
+ const reasonInner = this.safeString(response, 'reason');
1941
+ const message = this.safeString(response, 'message');
1942
+ const feedback = this.id + ' ' + message;
1943
+ this.throwExactlyMatchedException(this.exceptions['exact'], reasonInner, feedback);
1944
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
1945
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
1946
+ throw new ExchangeError(feedback); // unknown message
1947
+ }
1948
+ return undefined;
1949
+ }
1950
+ /**
1951
+ * @method
1952
+ * @name gemini#createDepositAddress
1953
+ * @description create a currency deposit address
1954
+ * @see https://docs.gemini.com/rest-api/#new-deposit-address
1955
+ * @param {string} code unified currency code of the currency for the deposit address
1956
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1957
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1958
+ */
1959
+ async createDepositAddress(code, params = {}) {
1960
+ await this.loadMarkets();
1961
+ const currency = this.currency(code);
1962
+ const request = {
1963
+ 'currency': currency['id'],
1964
+ };
1965
+ const response = await this.privatePostV1DepositCurrencyNewAddress(this.extend(request, params));
1966
+ const address = this.safeString(response, 'address');
1967
+ this.checkAddress(address);
1968
+ return {
1969
+ 'currency': code,
1970
+ 'address': address,
1971
+ 'tag': undefined,
1972
+ 'network': undefined,
1973
+ 'info': response,
1974
+ };
1975
+ }
1976
+ /**
1977
+ * @method
1978
+ * @name gemini#fetchOHLCV
1979
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1980
+ * @see https://docs.gemini.com/rest-api/#candles
1981
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1982
+ * @param {string} timeframe the length of time each candle represents
1983
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1984
+ * @param {int} [limit] the maximum amount of candles to fetch
1985
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1986
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1987
+ */
1988
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1989
+ await this.loadMarkets();
1990
+ const market = this.market(symbol);
1991
+ const timeframeId = this.safeString(this.timeframes, timeframe, timeframe);
1992
+ const request = {
1993
+ 'timeframe': timeframeId,
1994
+ 'symbol': market['id'],
1995
+ };
1996
+ const response = await this.publicGetV2CandlesSymbolTimeframe(this.extend(request, params));
1997
+ //
1998
+ // [
1999
+ // [1591515000000,0.02509,0.02509,0.02509,0.02509,0],
2000
+ // [1591514700000,0.02503,0.02509,0.02503,0.02509,44.6405],
2001
+ // [1591514400000,0.02503,0.02503,0.02503,0.02503,0],
2002
+ // ]
2003
+ //
2004
+ return this.parseOHLCVs(response, market, timeframe, since, limit);
2005
+ }
2006
+ }