ccxt-ir 4.10.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1047) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +4 -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/js/ccxt.d.ts +5 -2
  8. package/js/ccxt.js +4 -2
  9. package/js/src/abstract/bidarz.d.ts +9 -0
  10. package/js/src/abstract/bidarz.js +11 -0
  11. package/js/src/bidarz.d.ts +22 -0
  12. package/js/src/bidarz.js +336 -0
  13. package/js/src/bit24.js +4 -3
  14. package/js/src/src/abantether.d.ts +21 -0
  15. package/js/src/src/abantether.js +353 -0
  16. package/js/src/src/abstract/abantether.d.ts +8 -0
  17. package/js/src/src/abstract/abantether.js +11 -0
  18. package/js/src/src/abstract/afratether.d.ts +9 -0
  19. package/js/src/src/abstract/afratether.js +11 -0
  20. package/js/src/src/abstract/alpaca.d.ts +77 -0
  21. package/js/src/src/abstract/alpaca.js +11 -0
  22. package/js/src/src/abstract/apex.d.ts +34 -0
  23. package/js/src/src/abstract/apex.js +11 -0
  24. package/js/src/src/abstract/arzinja.d.ts +8 -0
  25. package/js/src/src/abstract/arzinja.js +11 -0
  26. package/js/src/src/abstract/arzplus.d.ts +11 -0
  27. package/js/src/src/abstract/arzplus.js +11 -0
  28. package/js/src/src/abstract/ascendex.d.ts +80 -0
  29. package/js/src/src/abstract/ascendex.js +11 -0
  30. package/js/src/src/abstract/asretether.d.ts +8 -0
  31. package/js/src/src/abstract/asretether.js +11 -0
  32. package/js/src/src/abstract/bidarz.d.ts +9 -0
  33. package/js/src/src/abstract/bidarz.js +11 -0
  34. package/js/src/src/abstract/bigone.d.ts +48 -0
  35. package/js/src/src/abstract/bigone.js +11 -0
  36. package/js/src/src/abstract/binance.d.ts +773 -0
  37. package/js/src/src/abstract/binance.js +11 -0
  38. package/js/src/src/abstract/bingx.d.ts +165 -0
  39. package/js/src/src/abstract/bingx.js +11 -0
  40. package/js/src/src/abstract/bit24.d.ts +9 -0
  41. package/js/src/src/abstract/bit24.js +11 -0
  42. package/js/src/src/abstract/bit2c.d.ts +30 -0
  43. package/js/src/src/abstract/bit2c.js +11 -0
  44. package/js/src/src/abstract/bitbank.d.ts +35 -0
  45. package/js/src/src/abstract/bitbank.js +11 -0
  46. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  47. package/js/src/src/abstract/bitbarg.js +11 -0
  48. package/js/src/src/abstract/bitbns.d.ts +43 -0
  49. package/js/src/src/abstract/bitbns.js +11 -0
  50. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  51. package/js/src/src/abstract/bitfinex.js +11 -0
  52. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  53. package/js/src/src/abstract/bitflyer.js +11 -0
  54. package/js/src/src/abstract/bitget.d.ts +578 -0
  55. package/js/src/src/abstract/bitget.js +11 -0
  56. package/js/src/src/abstract/bithumb.d.ts +35 -0
  57. package/js/src/src/abstract/bithumb.js +11 -0
  58. package/js/src/src/abstract/bitimen.d.ts +10 -0
  59. package/js/src/src/abstract/bitimen.js +11 -0
  60. package/js/src/src/abstract/bitir.d.ts +10 -0
  61. package/js/src/src/abstract/bitir.js +11 -0
  62. package/js/src/src/abstract/bitmart.d.ts +120 -0
  63. package/js/src/src/abstract/bitmart.js +11 -0
  64. package/js/src/src/abstract/bitmex.d.ts +100 -0
  65. package/js/src/src/abstract/bitmex.js +11 -0
  66. package/js/src/src/abstract/bitopro.d.ts +33 -0
  67. package/js/src/src/abstract/bitopro.js +11 -0
  68. package/js/src/src/abstract/bitpin.d.ts +11 -0
  69. package/js/src/src/abstract/bitpin.js +11 -0
  70. package/js/src/src/abstract/bitrue.d.ts +75 -0
  71. package/js/src/src/abstract/bitrue.js +11 -0
  72. package/js/src/src/abstract/bitso.d.ts +46 -0
  73. package/js/src/src/abstract/bitso.js +11 -0
  74. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  75. package/js/src/src/abstract/bitstamp.js +11 -0
  76. package/js/src/src/abstract/bitteam.d.ts +32 -0
  77. package/js/src/src/abstract/bitteam.js +11 -0
  78. package/js/src/src/abstract/bittrade.d.ts +117 -0
  79. package/js/src/src/abstract/bittrade.js +11 -0
  80. package/js/src/src/abstract/bitunix.d.ts +9 -0
  81. package/js/src/src/abstract/bitunix.js +11 -0
  82. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  83. package/js/src/src/abstract/bitvavo.js +11 -0
  84. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  85. package/js/src/src/abstract/blockchaincom.js +11 -0
  86. package/js/src/src/abstract/blofin.d.ts +70 -0
  87. package/js/src/src/abstract/blofin.js +11 -0
  88. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  89. package/js/src/src/abstract/btcalpha.js +11 -0
  90. package/js/src/src/abstract/btcbox.d.ts +18 -0
  91. package/js/src/src/abstract/btcbox.js +11 -0
  92. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  93. package/js/src/src/abstract/btcmarkets.js +11 -0
  94. package/js/src/src/abstract/btcturk.d.ts +23 -0
  95. package/js/src/src/abstract/btcturk.js +11 -0
  96. package/js/src/src/abstract/bybit.d.ts +316 -0
  97. package/js/src/src/abstract/bybit.js +11 -0
  98. package/js/src/src/abstract/bydfi.d.ts +11 -0
  99. package/js/src/src/abstract/bydfi.js +11 -0
  100. package/js/src/src/abstract/cafearz.d.ts +8 -0
  101. package/js/src/src/abstract/cafearz.js +11 -0
  102. package/js/src/src/abstract/cex.d.ts +35 -0
  103. package/js/src/src/abstract/cex.js +11 -0
  104. package/js/src/src/abstract/coinbase.d.ts +97 -0
  105. package/js/src/src/abstract/coinbase.js +11 -0
  106. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  107. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  108. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  109. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  110. package/js/src/src/abstract/coincatch.d.ts +97 -0
  111. package/js/src/src/abstract/coincatch.js +11 -0
  112. package/js/src/src/abstract/coincheck.d.ts +36 -0
  113. package/js/src/src/abstract/coincheck.js +11 -0
  114. package/js/src/src/abstract/coinex.d.ts +240 -0
  115. package/js/src/src/abstract/coinex.js +11 -0
  116. package/js/src/src/abstract/coinmate.d.ts +65 -0
  117. package/js/src/src/abstract/coinmate.js +11 -0
  118. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  119. package/js/src/src/abstract/coinmetro.js +11 -0
  120. package/js/src/src/abstract/coinone.d.ts +70 -0
  121. package/js/src/src/abstract/coinone.js +11 -0
  122. package/js/src/src/abstract/coinsph.d.ts +57 -0
  123. package/js/src/src/abstract/coinsph.js +11 -0
  124. package/js/src/src/abstract/coinspot.d.ts +31 -0
  125. package/js/src/src/abstract/coinspot.js +11 -0
  126. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  127. package/js/src/src/abstract/cryptocom.js +11 -0
  128. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  129. package/js/src/src/abstract/cryptomus.js +11 -0
  130. package/js/src/src/abstract/defx.d.ts +72 -0
  131. package/js/src/src/abstract/defx.js +11 -0
  132. package/js/src/src/abstract/delta.d.ts +53 -0
  133. package/js/src/src/abstract/delta.js +11 -0
  134. package/js/src/src/abstract/deribit.d.ts +129 -0
  135. package/js/src/src/abstract/deribit.js +11 -0
  136. package/js/src/src/abstract/derive.d.ts +120 -0
  137. package/js/src/src/abstract/derive.js +11 -0
  138. package/js/src/src/abstract/digifinex.d.ts +95 -0
  139. package/js/src/src/abstract/digifinex.js +11 -0
  140. package/js/src/src/abstract/ellipx.d.ts +28 -0
  141. package/js/src/src/abstract/ellipx.js +11 -0
  142. package/js/src/src/abstract/eterex.d.ts +8 -0
  143. package/js/src/src/abstract/eterex.js +11 -0
  144. package/js/src/src/abstract/excoino.d.ts +10 -0
  145. package/js/src/src/abstract/excoino.js +11 -0
  146. package/js/src/src/abstract/exir.d.ts +11 -0
  147. package/js/src/src/abstract/exir.js +11 -0
  148. package/js/src/src/abstract/exmo.d.ts +58 -0
  149. package/js/src/src/abstract/exmo.js +11 -0
  150. package/js/src/src/abstract/exnovin.d.ts +9 -0
  151. package/js/src/src/abstract/exnovin.js +11 -0
  152. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  153. package/js/src/src/abstract/farhadexchange.js +11 -0
  154. package/js/src/src/abstract/foxbit.d.ts +29 -0
  155. package/js/src/src/abstract/foxbit.js +11 -0
  156. package/js/src/src/abstract/gate.d.ts +287 -0
  157. package/js/src/src/abstract/gate.js +11 -0
  158. package/js/src/src/abstract/gemini.d.ts +62 -0
  159. package/js/src/src/abstract/gemini.js +11 -0
  160. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  161. package/js/src/src/abstract/hamtapay.js +11 -0
  162. package/js/src/src/abstract/hashkey.d.ts +70 -0
  163. package/js/src/src/abstract/hashkey.js +11 -0
  164. package/js/src/src/abstract/hibachi.d.ts +29 -0
  165. package/js/src/src/abstract/hibachi.js +11 -0
  166. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  167. package/js/src/src/abstract/hitbtc.js +11 -0
  168. package/js/src/src/abstract/hitobit.d.ts +11 -0
  169. package/js/src/src/abstract/hitobit.js +11 -0
  170. package/js/src/src/abstract/hollaex.d.ts +36 -0
  171. package/js/src/src/abstract/hollaex.js +11 -0
  172. package/js/src/src/abstract/htx.d.ts +551 -0
  173. package/js/src/src/abstract/htx.js +11 -0
  174. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  175. package/js/src/src/abstract/hyperliquid.js +11 -0
  176. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  177. package/js/src/src/abstract/independentreserve.js +11 -0
  178. package/js/src/src/abstract/indodax.d.ts +29 -0
  179. package/js/src/src/abstract/indodax.js +11 -0
  180. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  181. package/js/src/src/abstract/iranexchange.js +11 -0
  182. package/js/src/src/abstract/jibitex.d.ts +10 -0
  183. package/js/src/src/abstract/jibitex.js +11 -0
  184. package/js/src/src/abstract/kcex.d.ts +10 -0
  185. package/js/src/src/abstract/kcex.js +11 -0
  186. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  187. package/js/src/src/abstract/kifpoolme.js +11 -0
  188. package/js/src/src/abstract/kraken.d.ts +61 -0
  189. package/js/src/src/abstract/kraken.js +11 -0
  190. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  191. package/js/src/src/abstract/krakenfutures.js +11 -0
  192. package/js/src/src/abstract/kucoin.d.ts +227 -0
  193. package/js/src/src/abstract/kucoin.js +11 -0
  194. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  195. package/js/src/src/abstract/kucoinfutures.js +11 -0
  196. package/js/src/src/abstract/latoken.d.ts +59 -0
  197. package/js/src/src/abstract/latoken.js +11 -0
  198. package/js/src/src/abstract/lbank.d.ts +65 -0
  199. package/js/src/src/abstract/lbank.js +11 -0
  200. package/js/src/src/abstract/luno.d.ts +41 -0
  201. package/js/src/src/abstract/luno.js +11 -0
  202. package/js/src/src/abstract/mazdax.d.ts +11 -0
  203. package/js/src/src/abstract/mazdax.js +11 -0
  204. package/js/src/src/abstract/mercado.d.ts +28 -0
  205. package/js/src/src/abstract/mercado.js +11 -0
  206. package/js/src/src/abstract/mexc.d.ts +183 -0
  207. package/js/src/src/abstract/mexc.js +11 -0
  208. package/js/src/src/abstract/modetrade.d.ts +122 -0
  209. package/js/src/src/abstract/modetrade.js +11 -0
  210. package/js/src/src/abstract/ndax.d.ts +100 -0
  211. package/js/src/src/abstract/ndax.js +11 -0
  212. package/js/src/src/abstract/nobitex.d.ts +10 -0
  213. package/js/src/src/abstract/nobitex.js +11 -0
  214. package/js/src/src/abstract/novadax.d.ts +32 -0
  215. package/js/src/src/abstract/novadax.js +11 -0
  216. package/js/src/src/abstract/oceanex.d.ts +30 -0
  217. package/js/src/src/abstract/oceanex.js +11 -0
  218. package/js/src/src/abstract/okcoin.d.ts +77 -0
  219. package/js/src/src/abstract/okcoin.js +11 -0
  220. package/js/src/src/abstract/okexchange.d.ts +11 -0
  221. package/js/src/src/abstract/okexchange.js +11 -0
  222. package/js/src/src/abstract/okx.d.ts +352 -0
  223. package/js/src/src/abstract/okx.js +11 -0
  224. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  225. package/js/src/src/abstract/ompfinex.js +11 -0
  226. package/js/src/src/abstract/onetrading.d.ts +26 -0
  227. package/js/src/src/abstract/onetrading.js +11 -0
  228. package/js/src/src/abstract/oxfun.d.ts +37 -0
  229. package/js/src/src/abstract/oxfun.js +11 -0
  230. package/js/src/src/abstract/p2b.d.ts +25 -0
  231. package/js/src/src/abstract/p2b.js +11 -0
  232. package/js/src/src/abstract/paradex.d.ts +66 -0
  233. package/js/src/src/abstract/paradex.js +11 -0
  234. package/js/src/src/abstract/paymium.d.ts +31 -0
  235. package/js/src/src/abstract/paymium.js +11 -0
  236. package/js/src/src/abstract/phemex.d.ts +120 -0
  237. package/js/src/src/abstract/phemex.js +11 -0
  238. package/js/src/src/abstract/pingi.d.ts +9 -0
  239. package/js/src/src/abstract/pingi.js +11 -0
  240. package/js/src/src/abstract/poloniex.d.ts +108 -0
  241. package/js/src/src/abstract/poloniex.js +11 -0
  242. package/js/src/src/abstract/pooleno.d.ts +8 -0
  243. package/js/src/src/abstract/pooleno.js +11 -0
  244. package/js/src/src/abstract/probit.d.ts +26 -0
  245. package/js/src/src/abstract/probit.js +11 -0
  246. package/js/src/src/abstract/raastin.d.ts +11 -0
  247. package/js/src/src/abstract/raastin.js +11 -0
  248. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  249. package/js/src/src/abstract/ramzinex.js +11 -0
  250. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  251. package/js/src/src/abstract/sarmayex.js +11 -0
  252. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  253. package/js/src/src/abstract/sarrafex.js +11 -0
  254. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  255. package/js/src/src/abstract/tabdeal.js +11 -0
  256. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  257. package/js/src/src/abstract/tehran_exchange.js +11 -0
  258. package/js/src/src/abstract/tetherland.d.ts +8 -0
  259. package/js/src/src/abstract/tetherland.js +11 -0
  260. package/js/src/src/abstract/timex.d.ts +65 -0
  261. package/js/src/src/abstract/timex.js +11 -0
  262. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  263. package/js/src/src/abstract/tokocrypto.js +11 -0
  264. package/js/src/src/abstract/toobit.d.ts +10 -0
  265. package/js/src/src/abstract/toobit.js +11 -0
  266. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  267. package/js/src/src/abstract/tradeogre.js +11 -0
  268. package/js/src/src/abstract/twox.d.ts +8 -0
  269. package/js/src/src/abstract/twox.js +11 -0
  270. package/js/src/src/abstract/ubitex.d.ts +10 -0
  271. package/js/src/src/abstract/ubitex.js +11 -0
  272. package/js/src/src/abstract/upbit.d.ts +58 -0
  273. package/js/src/src/abstract/upbit.js +11 -0
  274. package/js/src/src/abstract/vertex.d.ts +22 -0
  275. package/js/src/src/abstract/vertex.js +11 -0
  276. package/js/src/src/abstract/wallex.d.ts +11 -0
  277. package/js/src/src/abstract/wallex.js +11 -0
  278. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  279. package/js/src/src/abstract/wavesexchange.js +11 -0
  280. package/js/src/src/abstract/whitebit.d.ts +117 -0
  281. package/js/src/src/abstract/whitebit.js +11 -0
  282. package/js/src/src/abstract/woo.d.ts +144 -0
  283. package/js/src/src/abstract/woo.js +11 -0
  284. package/js/src/src/abstract/woofipro.d.ts +122 -0
  285. package/js/src/src/abstract/woofipro.js +11 -0
  286. package/js/src/src/abstract/xt.d.ts +160 -0
  287. package/js/src/src/abstract/xt.js +11 -0
  288. package/js/src/src/abstract/yobit.d.ts +19 -0
  289. package/js/src/src/abstract/yobit.js +11 -0
  290. package/js/src/src/abstract/zaif.d.ts +41 -0
  291. package/js/src/src/abstract/zaif.js +11 -0
  292. package/js/src/src/abstract/zonda.d.ts +56 -0
  293. package/js/src/src/abstract/zonda.js +11 -0
  294. package/js/src/src/afratether.d.ts +21 -0
  295. package/js/src/src/afratether.js +356 -0
  296. package/js/src/src/alpaca.d.ts +332 -0
  297. package/js/src/src/alpaca.js +1908 -0
  298. package/js/src/src/apex.d.ts +333 -0
  299. package/js/src/src/apex.js +1942 -0
  300. package/js/src/src/arzinja.d.ts +21 -0
  301. package/js/src/src/arzinja.js +298 -0
  302. package/js/src/src/arzplus.d.ts +26 -0
  303. package/js/src/src/arzplus.js +581 -0
  304. package/js/src/src/ascendex.d.ts +424 -0
  305. package/js/src/src/ascendex.js +3699 -0
  306. package/js/src/src/asretether.d.ts +21 -0
  307. package/js/src/src/asretether.js +324 -0
  308. package/js/src/src/base/Exchange.d.ts +926 -0
  309. package/js/src/src/base/Exchange.js +7399 -0
  310. package/js/src/src/base/Precise.d.ts +42 -0
  311. package/js/src/src/base/Precise.js +275 -0
  312. package/js/src/src/base/errors.d.ts +168 -0
  313. package/js/src/src/base/errors.js +255 -0
  314. package/js/src/src/base/functions/crypto.d.ts +16 -0
  315. package/js/src/src/base/functions/crypto.js +131 -0
  316. package/js/src/src/base/functions/encode.d.ts +4 -0
  317. package/js/src/src/base/functions/encode.js +32 -0
  318. package/js/src/src/base/functions/generic.d.ts +29 -0
  319. package/js/src/src/base/functions/generic.js +203 -0
  320. package/js/src/src/base/functions/misc.d.ts +9 -0
  321. package/js/src/src/base/functions/misc.js +101 -0
  322. package/js/src/src/base/functions/number.d.ts +27 -0
  323. package/js/src/src/base/functions/number.js +313 -0
  324. package/js/src/src/base/functions/platform.d.ts +7 -0
  325. package/js/src/src/base/functions/platform.js +27 -0
  326. package/js/src/src/base/functions/rsa.d.ts +5 -0
  327. package/js/src/src/base/functions/rsa.js +49 -0
  328. package/js/src/src/base/functions/string.d.ts +7 -0
  329. package/js/src/src/base/functions/string.js +44 -0
  330. package/js/src/src/base/functions/throttle.d.ts +6 -0
  331. package/js/src/src/base/functions/throttle.js +67 -0
  332. package/js/src/src/base/functions/time.d.ts +21 -0
  333. package/js/src/src/base/functions/time.js +171 -0
  334. package/js/src/src/base/functions/totp.d.ts +3 -0
  335. package/js/src/src/base/functions/totp.js +25 -0
  336. package/js/src/src/base/functions/type.d.ts +37 -0
  337. package/js/src/src/base/functions/type.js +179 -0
  338. package/js/src/src/base/functions.d.ts +10 -0
  339. package/js/src/src/base/functions.js +18 -0
  340. package/js/src/src/base/types.d.ts +586 -0
  341. package/js/src/src/base/types.js +7 -0
  342. package/js/src/src/base/ws/Cache.d.ts +27 -0
  343. package/js/src/src/base/ws/Cache.js +260 -0
  344. package/js/src/src/base/ws/Client.d.ts +53 -0
  345. package/js/src/src/base/ws/Client.js +307 -0
  346. package/js/src/src/base/ws/Future.d.ts +8 -0
  347. package/js/src/src/base/ws/Future.js +35 -0
  348. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  349. package/js/src/src/base/ws/OrderBook.js +130 -0
  350. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  351. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  352. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  353. package/js/src/src/base/ws/WsClient.js +69 -0
  354. package/js/src/src/bequant.d.ts +4 -0
  355. package/js/src/src/bequant.js +35 -0
  356. package/js/src/src/bidarz.d.ts +16 -0
  357. package/js/src/src/bidarz.js +327 -0
  358. package/js/src/src/bigone.d.ts +296 -0
  359. package/js/src/src/bigone.js +2340 -0
  360. package/js/src/src/binance.d.ts +1667 -0
  361. package/js/src/src/binance.js +14400 -0
  362. package/js/src/src/binancecoinm.d.ts +6 -0
  363. package/js/src/src/binancecoinm.js +51 -0
  364. package/js/src/src/binanceus.d.ts +4 -0
  365. package/js/src/src/binanceus.js +225 -0
  366. package/js/src/src/binanceusdm.d.ts +6 -0
  367. package/js/src/src/binanceusdm.js +63 -0
  368. package/js/src/src/bingx.d.ts +778 -0
  369. package/js/src/src/bingx.js +6705 -0
  370. package/js/src/src/bit24.d.ts +24 -0
  371. package/js/src/src/bit24.js +520 -0
  372. package/js/src/src/bit2c.d.ts +146 -0
  373. package/js/src/src/bit2c.js +1029 -0
  374. package/js/src/src/bitbank.d.ts +181 -0
  375. package/js/src/src/bitbank.js +1146 -0
  376. package/js/src/src/bitbarg.d.ts +21 -0
  377. package/js/src/src/bitbarg.js +312 -0
  378. package/js/src/src/bitbns.d.ts +184 -0
  379. package/js/src/src/bitbns.js +1288 -0
  380. package/js/src/src/bitfinex.d.ts +516 -0
  381. package/js/src/src/bitfinex.js +3951 -0
  382. package/js/src/src/bitflyer.d.ts +229 -0
  383. package/js/src/src/bitflyer.js +1209 -0
  384. package/js/src/src/bitget.d.ts +1109 -0
  385. package/js/src/src/bitget.js +11033 -0
  386. package/js/src/src/bithumb.d.ts +165 -0
  387. package/js/src/src/bithumb.js +1257 -0
  388. package/js/src/src/bitimen.d.ts +23 -0
  389. package/js/src/src/bitimen.js +424 -0
  390. package/js/src/src/bitir.d.ts +23 -0
  391. package/js/src/src/bitir.js +521 -0
  392. package/js/src/src/bitmart.d.ts +736 -0
  393. package/js/src/src/bitmart.js +5639 -0
  394. package/js/src/src/bitmex.d.ts +395 -0
  395. package/js/src/src/bitmex.js +3088 -0
  396. package/js/src/src/bitopro.d.ts +295 -0
  397. package/js/src/src/bitopro.js +1892 -0
  398. package/js/src/src/bitpin.d.ts +23 -0
  399. package/js/src/src/bitpin.js +487 -0
  400. package/js/src/src/bitrue.d.ts +384 -0
  401. package/js/src/src/bitrue.js +3382 -0
  402. package/js/src/src/bitso.d.ts +270 -0
  403. package/js/src/src/bitso.js +1881 -0
  404. package/js/src/src/bitstamp.d.ts +355 -0
  405. package/js/src/src/bitstamp.js +2445 -0
  406. package/js/src/src/bitteam.d.ts +229 -0
  407. package/js/src/src/bitteam.js +2420 -0
  408. package/js/src/src/bittrade.d.ts +298 -0
  409. package/js/src/src/bittrade.js +2050 -0
  410. package/js/src/src/bitunix.d.ts +21 -0
  411. package/js/src/src/bitunix.js +326 -0
  412. package/js/src/src/bitvavo.d.ts +311 -0
  413. package/js/src/src/bitvavo.js +2204 -0
  414. package/js/src/src/blockchaincom.d.ts +256 -0
  415. package/js/src/src/blockchaincom.js +1259 -0
  416. package/js/src/src/blofin.d.ts +439 -0
  417. package/js/src/src/blofin.js +2576 -0
  418. package/js/src/src/btcalpha.d.ts +209 -0
  419. package/js/src/src/btcalpha.js +1056 -0
  420. package/js/src/src/btcbox.d.ts +144 -0
  421. package/js/src/src/btcbox.js +834 -0
  422. package/js/src/src/btcmarkets.d.ts +253 -0
  423. package/js/src/src/btcmarkets.js +1418 -0
  424. package/js/src/src/btcturk.d.ts +161 -0
  425. package/js/src/src/btcturk.js +1058 -0
  426. package/js/src/src/bybit.d.ts +1097 -0
  427. package/js/src/src/bybit.js +9382 -0
  428. package/js/src/src/bydfi.d.ts +23 -0
  429. package/js/src/src/bydfi.js +434 -0
  430. package/js/src/src/cafearz.d.ts +21 -0
  431. package/js/src/src/cafearz.js +346 -0
  432. package/js/src/src/cex.d.ts +286 -0
  433. package/js/src/src/cex.js +1799 -0
  434. package/js/src/src/coinbase.d.ts +623 -0
  435. package/js/src/src/coinbase.js +5220 -0
  436. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  437. package/js/src/src/coinbaseadvanced.js +18 -0
  438. package/js/src/src/coinbaseexchange.d.ts +334 -0
  439. package/js/src/src/coinbaseexchange.js +2127 -0
  440. package/js/src/src/coinbaseinternational.d.ts +443 -0
  441. package/js/src/src/coinbaseinternational.js +2336 -0
  442. package/js/src/src/coincatch.d.ts +786 -0
  443. package/js/src/src/coincatch.js +5492 -0
  444. package/js/src/src/coincheck.d.ts +147 -0
  445. package/js/src/src/coincheck.js +962 -0
  446. package/js/src/src/coinex.d.ts +719 -0
  447. package/js/src/src/coinex.js +6166 -0
  448. package/js/src/src/coinmate.d.ts +202 -0
  449. package/js/src/src/coinmate.js +1215 -0
  450. package/js/src/src/coinmetro.d.ts +244 -0
  451. package/js/src/src/coinmetro.js +2024 -0
  452. package/js/src/src/coinone.d.ts +158 -0
  453. package/js/src/src/coinone.js +1278 -0
  454. package/js/src/src/coinsph.d.ts +310 -0
  455. package/js/src/src/coinsph.js +2203 -0
  456. package/js/src/src/coinspot.d.ts +108 -0
  457. package/js/src/src/coinspot.js +653 -0
  458. package/js/src/src/cryptocom.d.ts +463 -0
  459. package/js/src/src/cryptocom.js +3549 -0
  460. package/js/src/src/cryptomus.d.ts +158 -0
  461. package/js/src/src/cryptomus.js +1169 -0
  462. package/js/src/src/defx.d.ts +348 -0
  463. package/js/src/src/defx.js +2139 -0
  464. package/js/src/src/delta.d.ts +407 -0
  465. package/js/src/src/delta.js +3654 -0
  466. package/js/src/src/deribit.d.ts +516 -0
  467. package/js/src/src/deribit.js +3790 -0
  468. package/js/src/src/derive.d.ts +324 -0
  469. package/js/src/src/derive.js +2655 -0
  470. package/js/src/src/digifinex.d.ts +544 -0
  471. package/js/src/src/digifinex.js +4453 -0
  472. package/js/src/src/ellipx.d.ts +237 -0
  473. package/js/src/src/ellipx.js +2071 -0
  474. package/js/src/src/eterex.d.ts +21 -0
  475. package/js/src/src/eterex.js +299 -0
  476. package/js/src/src/excoino.d.ts +23 -0
  477. package/js/src/src/excoino.js +426 -0
  478. package/js/src/src/exir.d.ts +23 -0
  479. package/js/src/src/exir.js +403 -0
  480. package/js/src/src/exmo.d.ts +426 -0
  481. package/js/src/src/exmo.js +2825 -0
  482. package/js/src/src/exnovin.d.ts +22 -0
  483. package/js/src/src/exnovin.js +378 -0
  484. package/js/src/src/farhadexchange.d.ts +21 -0
  485. package/js/src/src/farhadexchange.js +280 -0
  486. package/js/src/src/fmfwio.d.ts +4 -0
  487. package/js/src/src/fmfwio.js +35 -0
  488. package/js/src/src/foxbit.d.ts +352 -0
  489. package/js/src/src/foxbit.js +2016 -0
  490. package/js/src/src/gate.d.ts +1071 -0
  491. package/js/src/src/gate.js +8282 -0
  492. package/js/src/src/gateio.d.ts +4 -0
  493. package/js/src/src/gateio.js +17 -0
  494. package/js/src/src/gemini.d.ts +257 -0
  495. package/js/src/src/gemini.js +2006 -0
  496. package/js/src/src/hamtapay.d.ts +21 -0
  497. package/js/src/src/hamtapay.js +303 -0
  498. package/js/src/src/hashkey.d.ts +628 -0
  499. package/js/src/src/hashkey.js +4363 -0
  500. package/js/src/src/hibachi.d.ts +346 -0
  501. package/js/src/src/hibachi.js +2137 -0
  502. package/js/src/src/hitbtc.d.ts +558 -0
  503. package/js/src/src/hitbtc.js +3847 -0
  504. package/js/src/src/hitobit.d.ts +23 -0
  505. package/js/src/src/hitobit.js +412 -0
  506. package/js/src/src/hollaex.d.ts +305 -0
  507. package/js/src/src/hollaex.js +2046 -0
  508. package/js/src/src/htx.d.ts +961 -0
  509. package/js/src/src/htx.js +9668 -0
  510. package/js/src/src/huobi.d.ts +4 -0
  511. package/js/src/src/huobi.js +17 -0
  512. package/js/src/src/hyperliquid.d.ts +651 -0
  513. package/js/src/src/hyperliquid.js +3937 -0
  514. package/js/src/src/independentreserve.d.ts +169 -0
  515. package/js/src/src/independentreserve.js +1115 -0
  516. package/js/src/src/indodax.d.ts +217 -0
  517. package/js/src/src/indodax.js +1454 -0
  518. package/js/src/src/iranexchange.d.ts +21 -0
  519. package/js/src/src/iranexchange.js +399 -0
  520. package/js/src/src/jibitex.d.ts +23 -0
  521. package/js/src/src/jibitex.js +416 -0
  522. package/js/src/src/kcex.d.ts +21 -0
  523. package/js/src/src/kcex.js +335 -0
  524. package/js/src/src/kifpoolme.d.ts +23 -0
  525. package/js/src/src/kifpoolme.js +410 -0
  526. package/js/src/src/kraken.d.ts +484 -0
  527. package/js/src/src/kraken.js +3518 -0
  528. package/js/src/src/krakenfutures.d.ts +362 -0
  529. package/js/src/src/krakenfutures.js +2885 -0
  530. package/js/src/src/kucoin.d.ts +759 -0
  531. package/js/src/src/kucoin.js +5153 -0
  532. package/js/src/src/kucoinfutures.d.ts +521 -0
  533. package/js/src/src/kucoinfutures.js +3381 -0
  534. package/js/src/src/latoken.d.ts +274 -0
  535. package/js/src/src/latoken.js +1824 -0
  536. package/js/src/src/lbank.d.ts +350 -0
  537. package/js/src/src/lbank.js +3146 -0
  538. package/js/src/src/luno.d.ts +252 -0
  539. package/js/src/src/luno.js +1479 -0
  540. package/js/src/src/mazdax.d.ts +23 -0
  541. package/js/src/src/mazdax.js +534 -0
  542. package/js/src/src/mercado.d.ts +160 -0
  543. package/js/src/src/mercado.js +1011 -0
  544. package/js/src/src/mexc.d.ts +768 -0
  545. package/js/src/src/mexc.js +6102 -0
  546. package/js/src/src/modetrade.d.ts +496 -0
  547. package/js/src/src/modetrade.js +2936 -0
  548. package/js/src/src/myokx.d.ts +4 -0
  549. package/js/src/src/myokx.js +54 -0
  550. package/js/src/src/ndax.d.ts +285 -0
  551. package/js/src/src/ndax.js +2598 -0
  552. package/js/src/src/nobitex.d.ts +23 -0
  553. package/js/src/src/nobitex.js +454 -0
  554. package/js/src/src/novadax.d.ts +279 -0
  555. package/js/src/src/novadax.js +1676 -0
  556. package/js/src/src/oceanex.d.ts +231 -0
  557. package/js/src/src/oceanex.js +1123 -0
  558. package/js/src/src/okcoin.d.ts +346 -0
  559. package/js/src/src/okcoin.js +3211 -0
  560. package/js/src/src/okexchange.d.ts +23 -0
  561. package/js/src/src/okexchange.js +373 -0
  562. package/js/src/src/okx.d.ts +1125 -0
  563. package/js/src/src/okx.js +9009 -0
  564. package/js/src/src/okxus.d.ts +4 -0
  565. package/js/src/src/okxus.js +54 -0
  566. package/js/src/src/ompfinex.d.ts +23 -0
  567. package/js/src/src/ompfinex.js +510 -0
  568. package/js/src/src/onetrading.d.ts +228 -0
  569. package/js/src/src/onetrading.js +1769 -0
  570. package/js/src/src/oxfun.d.ts +442 -0
  571. package/js/src/src/oxfun.js +2920 -0
  572. package/js/src/src/p2b.d.ts +189 -0
  573. package/js/src/src/p2b.js +1344 -0
  574. package/js/src/src/paradex.d.ts +389 -0
  575. package/js/src/src/paradex.js +2607 -0
  576. package/js/src/src/paymium.d.ts +133 -0
  577. package/js/src/src/paymium.js +644 -0
  578. package/js/src/src/phemex.d.ts +497 -0
  579. package/js/src/src/phemex.js +5333 -0
  580. package/js/src/src/pingi.d.ts +22 -0
  581. package/js/src/src/pingi.js +446 -0
  582. package/js/src/src/poloniex.d.ts +441 -0
  583. package/js/src/src/poloniex.js +3681 -0
  584. package/js/src/src/pooleno.d.ts +21 -0
  585. package/js/src/src/pooleno.js +347 -0
  586. package/js/src/src/pro/alpaca.d.ts +95 -0
  587. package/js/src/src/pro/alpaca.js +724 -0
  588. package/js/src/src/pro/apex.d.ts +160 -0
  589. package/js/src/src/pro/apex.js +1044 -0
  590. package/js/src/src/pro/ascendex.d.ts +99 -0
  591. package/js/src/src/pro/ascendex.js +1012 -0
  592. package/js/src/src/pro/bequant.d.ts +4 -0
  593. package/js/src/src/pro/bequant.js +42 -0
  594. package/js/src/src/pro/binance.d.ts +796 -0
  595. package/js/src/src/pro/binance.js +4373 -0
  596. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  597. package/js/src/src/pro/binancecoinm.js +32 -0
  598. package/js/src/src/pro/binanceus.d.ts +4 -0
  599. package/js/src/src/pro/binanceus.js +52 -0
  600. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  601. package/js/src/src/pro/binanceusdm.js +37 -0
  602. package/js/src/src/pro/bingx.d.ts +151 -0
  603. package/js/src/src/pro/bingx.js +1568 -0
  604. package/js/src/src/pro/bitfinex.d.ts +99 -0
  605. package/js/src/src/pro/bitfinex.js +1165 -0
  606. package/js/src/src/pro/bitget.d.ts +257 -0
  607. package/js/src/src/pro/bitget.js +2327 -0
  608. package/js/src/src/pro/bithumb.d.ts +59 -0
  609. package/js/src/src/pro/bithumb.js +395 -0
  610. package/js/src/src/pro/bitmart.d.ts +168 -0
  611. package/js/src/src/pro/bitmart.js +1686 -0
  612. package/js/src/src/pro/bitmex.d.ts +170 -0
  613. package/js/src/src/pro/bitmex.js +1760 -0
  614. package/js/src/src/pro/bitopro.d.ts +69 -0
  615. package/js/src/src/pro/bitopro.js +477 -0
  616. package/js/src/src/pro/bitrue.d.ts +40 -0
  617. package/js/src/src/pro/bitrue.js +461 -0
  618. package/js/src/src/pro/bitstamp.d.ts +53 -0
  619. package/js/src/src/pro/bitstamp.js +587 -0
  620. package/js/src/src/pro/bittrade.d.ts +66 -0
  621. package/js/src/src/pro/bittrade.js +606 -0
  622. package/js/src/src/pro/bitvavo.d.ts +321 -0
  623. package/js/src/src/pro/bitvavo.js +1451 -0
  624. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  625. package/js/src/src/pro/blockchaincom.js +777 -0
  626. package/js/src/src/pro/blofin.d.ts +174 -0
  627. package/js/src/src/pro/blofin.js +743 -0
  628. package/js/src/src/pro/bybit.d.ts +397 -0
  629. package/js/src/src/pro/bybit.js +2519 -0
  630. package/js/src/src/pro/cex.d.ts +220 -0
  631. package/js/src/src/pro/cex.js +1535 -0
  632. package/js/src/src/pro/coinbase.d.ts +119 -0
  633. package/js/src/src/pro/coinbase.js +736 -0
  634. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  635. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  636. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  637. package/js/src/src/pro/coinbaseexchange.js +969 -0
  638. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  639. package/js/src/src/pro/coinbaseinternational.js +804 -0
  640. package/js/src/src/pro/coincatch.d.ts +207 -0
  641. package/js/src/src/pro/coincatch.js +1562 -0
  642. package/js/src/src/pro/coincheck.d.ts +33 -0
  643. package/js/src/src/pro/coincheck.js +210 -0
  644. package/js/src/src/pro/coinex.d.ts +147 -0
  645. package/js/src/src/pro/coinex.js +1426 -0
  646. package/js/src/src/pro/coinone.d.ts +51 -0
  647. package/js/src/src/pro/coinone.js +413 -0
  648. package/js/src/src/pro/cryptocom.d.ts +300 -0
  649. package/js/src/src/pro/cryptocom.js +1414 -0
  650. package/js/src/src/pro/defx.d.ts +236 -0
  651. package/js/src/src/pro/defx.js +865 -0
  652. package/js/src/src/pro/deribit.d.ts +163 -0
  653. package/js/src/src/pro/deribit.js +1066 -0
  654. package/js/src/src/pro/derive.d.ts +100 -0
  655. package/js/src/src/pro/derive.js +753 -0
  656. package/js/src/src/pro/exmo.d.ts +97 -0
  657. package/js/src/src/pro/exmo.js +903 -0
  658. package/js/src/src/pro/gate.d.ts +360 -0
  659. package/js/src/src/pro/gate.js +2119 -0
  660. package/js/src/src/pro/gateio.d.ts +4 -0
  661. package/js/src/src/pro/gateio.js +17 -0
  662. package/js/src/src/pro/gemini.d.ts +106 -0
  663. package/js/src/src/pro/gemini.js +932 -0
  664. package/js/src/src/pro/hashkey.d.ts +121 -0
  665. package/js/src/src/pro/hashkey.js +843 -0
  666. package/js/src/src/pro/hitbtc.d.ts +235 -0
  667. package/js/src/src/pro/hitbtc.js +1400 -0
  668. package/js/src/src/pro/hollaex.d.ts +77 -0
  669. package/js/src/src/pro/hollaex.js +604 -0
  670. package/js/src/src/pro/htx.d.ts +141 -0
  671. package/js/src/src/pro/htx.js +2415 -0
  672. package/js/src/src/pro/huobi.d.ts +4 -0
  673. package/js/src/src/pro/huobi.js +17 -0
  674. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  675. package/js/src/src/pro/hyperliquid.js +1126 -0
  676. package/js/src/src/pro/independentreserve.d.ts +36 -0
  677. package/js/src/src/pro/independentreserve.js +287 -0
  678. package/js/src/src/pro/kraken.d.ts +233 -0
  679. package/js/src/src/pro/kraken.js +1785 -0
  680. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  681. package/js/src/src/pro/krakenfutures.js +1592 -0
  682. package/js/src/src/pro/kucoin.d.ts +221 -0
  683. package/js/src/src/pro/kucoin.js +1430 -0
  684. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  685. package/js/src/src/pro/kucoinfutures.js +1295 -0
  686. package/js/src/src/pro/lbank.d.ts +134 -0
  687. package/js/src/src/pro/lbank.js +950 -0
  688. package/js/src/src/pro/luno.d.ts +44 -0
  689. package/js/src/src/pro/luno.js +322 -0
  690. package/js/src/src/pro/mexc.d.ts +210 -0
  691. package/js/src/src/pro/mexc.js +2009 -0
  692. package/js/src/src/pro/modetrade.d.ts +155 -0
  693. package/js/src/src/pro/modetrade.js +1335 -0
  694. package/js/src/src/pro/myokx.d.ts +4 -0
  695. package/js/src/src/pro/myokx.js +39 -0
  696. package/js/src/src/pro/ndax.d.ts +60 -0
  697. package/js/src/src/pro/ndax.js +545 -0
  698. package/js/src/src/pro/okcoin.d.ts +91 -0
  699. package/js/src/src/pro/okcoin.js +763 -0
  700. package/js/src/src/pro/okx.d.ts +408 -0
  701. package/js/src/src/pro/okx.js +2479 -0
  702. package/js/src/src/pro/okxus.d.ts +4 -0
  703. package/js/src/src/pro/okxus.js +39 -0
  704. package/js/src/src/pro/onetrading.d.ts +107 -0
  705. package/js/src/src/pro/onetrading.js +1343 -0
  706. package/js/src/src/pro/oxfun.d.ts +234 -0
  707. package/js/src/src/pro/oxfun.js +1112 -0
  708. package/js/src/src/pro/p2b.d.ts +104 -0
  709. package/js/src/src/pro/p2b.js +506 -0
  710. package/js/src/src/pro/paradex.d.ts +54 -0
  711. package/js/src/src/pro/paradex.js +370 -0
  712. package/js/src/src/pro/phemex.d.ts +129 -0
  713. package/js/src/src/pro/phemex.js +1569 -0
  714. package/js/src/src/pro/poloniex.d.ts +214 -0
  715. package/js/src/src/pro/poloniex.js +1318 -0
  716. package/js/src/src/pro/probit.d.ts +91 -0
  717. package/js/src/src/pro/probit.js +593 -0
  718. package/js/src/src/pro/tradeogre.d.ts +49 -0
  719. package/js/src/src/pro/tradeogre.js +284 -0
  720. package/js/src/src/pro/upbit.d.ts +124 -0
  721. package/js/src/src/pro/upbit.js +689 -0
  722. package/js/src/src/pro/vertex.d.ts +104 -0
  723. package/js/src/src/pro/vertex.js +999 -0
  724. package/js/src/src/pro/whitebit.d.ts +123 -0
  725. package/js/src/src/pro/whitebit.js +971 -0
  726. package/js/src/src/pro/woo.d.ts +161 -0
  727. package/js/src/src/pro/woo.js +1351 -0
  728. package/js/src/src/pro/woofipro.d.ts +155 -0
  729. package/js/src/src/pro/woofipro.js +1335 -0
  730. package/js/src/src/pro/xt.d.ts +165 -0
  731. package/js/src/src/pro/xt.js +1230 -0
  732. package/js/src/src/probit.d.ts +283 -0
  733. package/js/src/src/probit.js +1935 -0
  734. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  735. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  736. package/js/src/src/raastin.d.ts +24 -0
  737. package/js/src/src/raastin.js +494 -0
  738. package/js/src/src/ramzinex.d.ts +23 -0
  739. package/js/src/src/ramzinex.js +510 -0
  740. package/js/src/src/sarmayex.d.ts +21 -0
  741. package/js/src/src/sarmayex.js +376 -0
  742. package/js/src/src/sarrafex.d.ts +23 -0
  743. package/js/src/src/sarrafex.js +501 -0
  744. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  745. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  746. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  747. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  748. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  749. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  750. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  751. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  752. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  753. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  754. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  755. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  756. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  757. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  758. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  759. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  760. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  761. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  762. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  763. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  764. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  765. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  766. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  767. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  768. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  769. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  770. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  771. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  772. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  773. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  774. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  775. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  776. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  777. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  778. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  779. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  780. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  781. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  782. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  783. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  784. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  785. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  786. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  787. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  788. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  789. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  790. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  791. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  792. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  793. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  794. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  795. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  796. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  797. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  798. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  799. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  800. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  801. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  802. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  803. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  804. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  805. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  806. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  807. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  808. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  809. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  810. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  811. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  812. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  813. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  814. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  815. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  816. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  817. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  818. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  819. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  820. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  821. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  822. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  823. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  824. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  825. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  826. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  827. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  828. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  829. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  830. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  831. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  832. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  833. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  834. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  835. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  836. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  837. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  838. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  850. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  851. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  852. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  853. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  854. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  855. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  856. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  857. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  858. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  859. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  860. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  861. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  862. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  868. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  869. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  870. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  871. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  872. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  873. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  874. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  875. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  876. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  877. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  878. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  879. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  880. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  881. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  882. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  883. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  884. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  885. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  886. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  887. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  888. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  889. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  890. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  891. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  892. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  893. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  894. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  895. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  896. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  897. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  898. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  899. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  900. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  901. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  902. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  903. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  904. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  905. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  906. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  907. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  908. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  909. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  910. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  911. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  912. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  913. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  914. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  915. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  916. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  917. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  918. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  919. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  920. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  921. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  922. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  923. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  924. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  925. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  926. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  927. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  928. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  929. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  930. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  931. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  932. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  933. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  934. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  935. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  936. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  937. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  938. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  939. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  940. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  941. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  942. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  943. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  944. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  945. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  946. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  947. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  948. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  949. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  950. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  951. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  952. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  953. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  954. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  955. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  956. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  957. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  958. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  959. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  960. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  984. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  985. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  986. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  987. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  988. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  989. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  990. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  991. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  992. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  993. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  994. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  995. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  996. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  997. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  998. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  999. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1000. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1001. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1002. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1003. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1004. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1005. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1006. package/js/src/src/tabdeal.d.ts +23 -0
  1007. package/js/src/src/tabdeal.js +387 -0
  1008. package/js/src/src/tehran_exchange.d.ts +21 -0
  1009. package/js/src/src/tehran_exchange.js +333 -0
  1010. package/js/src/src/tetherland.d.ts +21 -0
  1011. package/js/src/src/tetherland.js +367 -0
  1012. package/js/src/src/timex.d.ts +247 -0
  1013. package/js/src/src/timex.js +1792 -0
  1014. package/js/src/src/tokocrypto.d.ts +261 -0
  1015. package/js/src/src/tokocrypto.js +2641 -0
  1016. package/js/src/src/toobit.d.ts +22 -0
  1017. package/js/src/src/toobit.js +445 -0
  1018. package/js/src/src/tradeogre.d.ts +149 -0
  1019. package/js/src/src/tradeogre.js +878 -0
  1020. package/js/src/src/twox.d.ts +21 -0
  1021. package/js/src/src/twox.js +371 -0
  1022. package/js/src/src/ubitex.d.ts +23 -0
  1023. package/js/src/src/ubitex.js +433 -0
  1024. package/js/src/src/upbit.d.ts +377 -0
  1025. package/js/src/src/upbit.js +2340 -0
  1026. package/js/src/src/vertex.d.ts +346 -0
  1027. package/js/src/src/vertex.js +3146 -0
  1028. package/js/src/src/wallex.d.ts +23 -0
  1029. package/js/src/src/wallex.js +467 -0
  1030. package/js/src/src/wavesexchange.d.ts +244 -0
  1031. package/js/src/src/wavesexchange.js +2747 -0
  1032. package/js/src/src/whitebit.d.ts +571 -0
  1033. package/js/src/src/whitebit.js +3437 -0
  1034. package/js/src/src/woo.d.ts +727 -0
  1035. package/js/src/src/woo.js +4183 -0
  1036. package/js/src/src/woofipro.d.ts +497 -0
  1037. package/js/src/src/woofipro.js +2941 -0
  1038. package/js/src/src/xt.d.ts +568 -0
  1039. package/js/src/src/xt.js +5184 -0
  1040. package/js/src/src/yobit.d.ts +197 -0
  1041. package/js/src/src/yobit.js +1453 -0
  1042. package/js/src/src/zaif.d.ts +136 -0
  1043. package/js/src/src/zaif.js +821 -0
  1044. package/js/src/src/zonda.d.ts +214 -0
  1045. package/js/src/src/zonda.js +1984 -0
  1046. package/js/test.js +3 -3
  1047. package/package.json +1 -1
@@ -0,0 +1,2119 @@
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 gateRest from '../gate.js';
9
+ import { AuthenticationError, BadRequest, ArgumentsRequired, ChecksumError, ExchangeError, NotSupported } from '../base/errors.js';
10
+ import { ArrayCache, ArrayCacheByTimestamp, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide } from '../base/ws/Cache.js';
11
+ import { sha512 } from '../static_dependencies/noble-hashes/sha512.js';
12
+ import Precise from '../base/Precise.js';
13
+ // ---------------------------------------------------------------------------
14
+ export default class gate extends gateRest {
15
+ describe() {
16
+ return this.deepExtend(super.describe(), {
17
+ 'has': {
18
+ 'ws': true,
19
+ 'cancelAllOrdersWs': true,
20
+ 'cancelOrderWs': true,
21
+ 'createMarketBuyOrderWithCostWs': true,
22
+ 'createMarketOrderWs': true,
23
+ 'createMarketOrderWithCostWs': false,
24
+ 'createMarketSellOrderWithCostWs': false,
25
+ 'createOrderWs': true,
26
+ 'createOrdersWs': true,
27
+ 'createPostOnlyOrderWs': true,
28
+ 'createReduceOnlyOrderWs': true,
29
+ 'createStopLimitOrderWs': true,
30
+ 'createStopLossOrderWs': true,
31
+ 'createStopMarketOrderWs': false,
32
+ 'createStopOrderWs': true,
33
+ 'createTakeProfitOrderWs': true,
34
+ 'createTriggerOrderWs': true,
35
+ 'editOrderWs': true,
36
+ 'fetchOrderWs': true,
37
+ 'fetchOrdersWs': false,
38
+ 'fetchOpenOrdersWs': true,
39
+ 'fetchClosedOrdersWs': true,
40
+ 'watchOrderBook': true,
41
+ 'watchBidsAsks': true,
42
+ 'watchTicker': true,
43
+ 'watchTickers': true,
44
+ 'watchTrades': true,
45
+ 'watchTradesForSymbols': true,
46
+ 'watchMyTrades': true,
47
+ 'watchOHLCV': true,
48
+ 'watchBalance': true,
49
+ 'watchOrders': true,
50
+ 'watchLiquidations': false,
51
+ 'watchLiquidationsForSymbols': false,
52
+ 'watchMyLiquidations': true,
53
+ 'watchMyLiquidationsForSymbols': true,
54
+ 'watchPositions': true,
55
+ },
56
+ 'urls': {
57
+ 'api': {
58
+ 'ws': 'wss://ws.gate.io/v4',
59
+ 'spot': 'wss://api.gateio.ws/ws/v4/',
60
+ 'swap': {
61
+ 'usdt': 'wss://fx-ws.gateio.ws/v4/ws/usdt',
62
+ 'btc': 'wss://fx-ws.gateio.ws/v4/ws/btc',
63
+ },
64
+ 'future': {
65
+ 'usdt': 'wss://fx-ws.gateio.ws/v4/ws/delivery/usdt',
66
+ 'btc': 'wss://fx-ws.gateio.ws/v4/ws/delivery/btc',
67
+ },
68
+ 'option': {
69
+ 'usdt': 'wss://op-ws.gateio.live/v4/ws/usdt',
70
+ 'btc': 'wss://op-ws.gateio.live/v4/ws/btc',
71
+ },
72
+ },
73
+ 'test': {
74
+ 'swap': {
75
+ 'usdt': 'wss://fx-ws-testnet.gateio.ws/v4/ws/usdt',
76
+ 'btc': 'wss://fx-ws-testnet.gateio.ws/v4/ws/btc',
77
+ },
78
+ 'future': {
79
+ 'usdt': 'wss://fx-ws-testnet.gateio.ws/v4/ws/usdt',
80
+ 'btc': 'wss://fx-ws-testnet.gateio.ws/v4/ws/btc',
81
+ },
82
+ 'option': {
83
+ 'usdt': 'wss://op-ws-testnet.gateio.live/v4/ws/usdt',
84
+ 'btc': 'wss://op-ws-testnet.gateio.live/v4/ws/btc',
85
+ },
86
+ },
87
+ },
88
+ 'options': {
89
+ 'tradesLimit': 1000,
90
+ 'OHLCVLimit': 1000,
91
+ 'watchTradesSubscriptions': {},
92
+ 'watchTickerSubscriptions': {},
93
+ 'watchOrderBookSubscriptions': {},
94
+ 'watchTicker': {
95
+ 'name': 'tickers', // or book_ticker
96
+ },
97
+ 'watchOrderBook': {
98
+ 'interval': '100ms',
99
+ 'snapshotDelay': 10,
100
+ 'snapshotMaxRetries': 3,
101
+ 'checksum': true,
102
+ },
103
+ 'watchBalance': {
104
+ 'settle': 'usdt',
105
+ 'spot': 'spot.balances', // spot.margin_balances, spot.funding_balances or spot.cross_balances
106
+ },
107
+ 'watchPositions': {
108
+ 'fetchPositionsSnapshot': true,
109
+ 'awaitPositionsSnapshot': true, // whether to wait for the positions snapshot before providing updates
110
+ },
111
+ },
112
+ 'exceptions': {
113
+ 'ws': {
114
+ 'exact': {
115
+ '1': BadRequest,
116
+ '2': BadRequest,
117
+ '4': AuthenticationError,
118
+ '6': AuthenticationError,
119
+ '11': AuthenticationError,
120
+ },
121
+ 'broad': {},
122
+ },
123
+ },
124
+ });
125
+ }
126
+ /**
127
+ * @method
128
+ * @name gate#createOrderWs
129
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#order-place
130
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-place
131
+ * @description Create an order on the exchange
132
+ * @param {string} symbol Unified CCXT market symbol
133
+ * @param {string} type 'limit' or 'market' *"market" is contract only*
134
+ * @param {string} side 'buy' or 'sell'
135
+ * @param {float} amount the amount of currency to trade
136
+ * @param {float} [price] *ignored in "market" orders* the price at which the order is to be fulfilled at in units of the quote currency
137
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
138
+ * @param {float} [params.stopPrice] The price at which a trigger order is triggered at
139
+ * @param {string} [params.timeInForce] "GTC", "IOC", or "PO"
140
+ * @param {float} [params.stopLossPrice] The price at which a stop loss order is triggered at
141
+ * @param {float} [params.takeProfitPrice] The price at which a take profit order is triggered at
142
+ * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used
143
+ * @param {int} [params.iceberg] Amount to display for the iceberg order, Null or 0 for normal orders, Set to -1 to hide the order completely
144
+ * @param {string} [params.text] User defined information
145
+ * @param {string} [params.account] *spot and margin only* "spot", "margin" or "cross_margin"
146
+ * @param {bool} [params.auto_borrow] *margin only* Used in margin or cross margin trading to allow automatic loan of insufficient amount if balance is not enough
147
+ * @param {string} [params.settle] *contract only* Unified Currency Code for settle currency
148
+ * @param {bool} [params.reduceOnly] *contract only* Indicates if this order is to reduce the size of a position
149
+ * @param {bool} [params.close] *contract only* Set as true to close the position, with size set to 0
150
+ * @param {bool} [params.auto_size] *contract only* Set side to close dual-mode position, close_long closes the long side, while close_short the short one, size also needs to be set to 0
151
+ * @param {int} [params.price_type] *contract only* 0 latest deal price, 1 mark price, 2 index price
152
+ * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
153
+ * @returns {object|undefined} [An order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
154
+ */
155
+ async createOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
156
+ await this.loadMarkets();
157
+ const market = this.market(symbol);
158
+ symbol = market['symbol'];
159
+ const messageType = this.getTypeByMarket(market);
160
+ const channel = messageType + '.order_place';
161
+ const url = this.getUrlByMarket(market);
162
+ params['textIsRequired'] = true;
163
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
164
+ await this.authenticate(url, messageType);
165
+ const rawOrder = await this.requestPrivate(url, request, channel);
166
+ const order = this.parseOrder(rawOrder, market);
167
+ return order;
168
+ }
169
+ /**
170
+ * @method
171
+ * @name gate#createOrdersWs
172
+ * @description create a list of trade orders
173
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-batch-place
174
+ * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
175
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
176
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
177
+ */
178
+ async createOrdersWs(orders, params = {}) {
179
+ await this.loadMarkets();
180
+ const request = this.createOrdersRequest(orders, params);
181
+ const firstOrder = orders[0];
182
+ const market = this.market(firstOrder['symbol']);
183
+ if (market['swap'] !== true) {
184
+ throw new NotSupported(this.id + ' createOrdersWs is not supported for swap markets');
185
+ }
186
+ const messageType = this.getTypeByMarket(market);
187
+ const channel = messageType + '.order_batch_place';
188
+ const url = this.getUrlByMarket(market);
189
+ await this.authenticate(url, messageType);
190
+ const rawOrders = await this.requestPrivate(url, request, channel);
191
+ return this.parseOrders(rawOrders, market);
192
+ }
193
+ /**
194
+ * @method
195
+ * @name gate#cancelAllOrdersWs
196
+ * @description cancel all open orders
197
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#cancel-all-open-orders-matched
198
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#order-cancel-all-with-specified-currency-pair
199
+ * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
200
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
201
+ * @param {string} [params.channel] the channel to use, defaults to spot.order_cancel_cp or futures.order_cancel_cp
202
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
203
+ */
204
+ async cancelAllOrdersWs(symbol = undefined, params = {}) {
205
+ await this.loadMarkets();
206
+ const market = (symbol === undefined) ? undefined : this.market(symbol);
207
+ const trigger = this.safeBool2(params, 'stop', 'trigger');
208
+ const messageType = this.getTypeByMarket(market);
209
+ let channel = messageType + '.order_cancel_cp';
210
+ [channel, params] = this.handleOptionAndParams(params, 'cancelAllOrdersWs', 'channel', channel);
211
+ const url = this.getUrlByMarket(market);
212
+ params = this.omit(params, ['stop', 'trigger']);
213
+ const [type, query] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
214
+ const [request, requestParams] = (type === 'spot') ? this.multiOrderSpotPrepareRequest(market, trigger, query) : this.prepareRequest(market, type, query);
215
+ await this.authenticate(url, messageType);
216
+ const rawOrders = await this.requestPrivate(url, this.extend(request, requestParams), channel);
217
+ return this.parseOrders(rawOrders, market);
218
+ }
219
+ /**
220
+ * @method
221
+ * @name gate#cancelOrderWs
222
+ * @description Cancels an open order
223
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#order-cancel
224
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-cancel
225
+ * @param {string} id Order id
226
+ * @param {string} symbol Unified market symbol
227
+ * @param {object} [params] Parameters specified by the exchange api
228
+ * @param {bool} [params.trigger] True if the order to be cancelled is a trigger order
229
+ * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
230
+ */
231
+ async cancelOrderWs(id, symbol = undefined, params = {}) {
232
+ await this.loadMarkets();
233
+ const market = (symbol === undefined) ? undefined : this.market(symbol);
234
+ const trigger = this.safeValueN(params, ['is_stop_order', 'stop', 'trigger'], false);
235
+ params = this.omit(params, ['is_stop_order', 'stop', 'trigger']);
236
+ const [type, query] = this.handleMarketTypeAndParams('cancelOrder', market, params);
237
+ const [request, requestParams] = (type === 'spot' || type === 'margin') ? this.spotOrderPrepareRequest(market, trigger, query) : this.prepareRequest(market, type, query);
238
+ const messageType = this.getTypeByMarket(market);
239
+ const channel = messageType + '.order_cancel';
240
+ const url = this.getUrlByMarket(market);
241
+ await this.authenticate(url, messageType);
242
+ request['order_id'] = id.toString();
243
+ const res = await this.requestPrivate(url, this.extend(request, requestParams), channel);
244
+ return this.parseOrder(res, market);
245
+ }
246
+ /**
247
+ * @method
248
+ * @name gate#editOrderWs
249
+ * @description edit a trade order, gate currently only supports the modification of the price or amount fields
250
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#order-amend
251
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-amend
252
+ * @param {string} id order id
253
+ * @param {string} symbol unified symbol of the market to create an order in
254
+ * @param {string} type 'market' or 'limit'
255
+ * @param {string} side 'buy' or 'sell'
256
+ * @param {float} amount how much of the currency you want to trade in units of the base currency
257
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
258
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
259
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
260
+ */
261
+ async editOrderWs(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
262
+ await this.loadMarkets();
263
+ const market = this.market(symbol);
264
+ const extendedRequest = this.editOrderRequest(id, symbol, type, side, amount, price, params);
265
+ const messageType = this.getTypeByMarket(market);
266
+ const channel = messageType + '.order_amend';
267
+ const url = this.getUrlByMarket(market);
268
+ await this.authenticate(url, messageType);
269
+ const rawOrder = await this.requestPrivate(url, extendedRequest, channel);
270
+ return this.parseOrder(rawOrder, market);
271
+ }
272
+ /**
273
+ * @method
274
+ * @name gate#fetchOrderWs
275
+ * @description Retrieves information on an order
276
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#order-status
277
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-status
278
+ * @param {string} id Order id
279
+ * @param {string} symbol Unified market symbol, *required for spot and margin*
280
+ * @param {object} [params] Parameters specified by the exchange api
281
+ * @param {bool} [params.trigger] True if the order being fetched is a trigger order
282
+ * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used
283
+ * @param {string} [params.type] 'spot', 'swap', or 'future', if not provided this.options['defaultMarginMode'] is used
284
+ * @param {string} [params.settle] 'btc' or 'usdt' - settle currency for perpetual swap and future - market settle currency is used if symbol !== undefined, default="usdt" for swap and "btc" for future
285
+ * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
286
+ */
287
+ async fetchOrderWs(id, symbol = undefined, params = {}) {
288
+ await this.loadMarkets();
289
+ const market = (symbol === undefined) ? undefined : this.market(symbol);
290
+ const [request, requestParams] = this.fetchOrderRequest(id, symbol, params);
291
+ const messageType = this.getTypeByMarket(market);
292
+ const channel = messageType + '.order_status';
293
+ const url = this.getUrlByMarket(market);
294
+ await this.authenticate(url, messageType);
295
+ const rawOrder = await this.requestPrivate(url, this.extend(request, requestParams), channel);
296
+ return this.parseOrder(rawOrder, market);
297
+ }
298
+ /**
299
+ * @method
300
+ * @name gate#fetchOpenOrdersWs
301
+ * @description fetch all unfilled currently open orders
302
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-list
303
+ * @param {string} symbol unified market symbol
304
+ * @param {int} [since] the earliest time in ms to fetch open orders for
305
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
306
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
307
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
308
+ */
309
+ async fetchOpenOrdersWs(symbol = undefined, since = undefined, limit = undefined, params = {}) {
310
+ return await this.fetchOrdersByStatusWs('open', symbol, since, limit, params);
311
+ }
312
+ /**
313
+ * @method
314
+ * @name gate#fetchClosedOrdersWs
315
+ * @description fetches information on multiple closed orders made by the user
316
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-list
317
+ * @param {string} symbol unified market symbol of the market orders were made in
318
+ * @param {int} [since] the earliest time in ms to fetch orders for
319
+ * @param {int} [limit] the maximum number of order structures to retrieve
320
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
321
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
322
+ */
323
+ async fetchClosedOrdersWs(symbol = undefined, since = undefined, limit = undefined, params = {}) {
324
+ return await this.fetchOrdersByStatusWs('finished', symbol, since, limit, params);
325
+ }
326
+ /**
327
+ * @method
328
+ * @name gate#fetchOrdersWs
329
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#order-list
330
+ * @description fetches information on multiple orders made by the user by status
331
+ * @param {string} status requested order status
332
+ * @param {string} symbol unified market symbol of the market orders were made in
333
+ * @param {int|undefined} [since] the earliest time in ms to fetch orders for
334
+ * @param {int|undefined} [limit] the maximum number of order structures to retrieve
335
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
336
+ * @param {int} [params.orderId] order id to begin at
337
+ * @param {int} [params.limit] the maximum number of order structures to retrieve
338
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
339
+ */
340
+ async fetchOrdersByStatusWs(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {
341
+ await this.loadMarkets();
342
+ let market = undefined;
343
+ if (symbol !== undefined) {
344
+ market = this.market(symbol);
345
+ symbol = market['symbol'];
346
+ if (market['swap'] !== true) {
347
+ throw new NotSupported(this.id + ' fetchOrdersByStatusWs is only supported by swap markets. Use rest API for other markets');
348
+ }
349
+ }
350
+ const [request, requestParams] = this.prepareOrdersByStatusRequest(status, symbol, since, limit, params);
351
+ const newRequest = this.omit(request, ['settle']);
352
+ const messageType = this.getTypeByMarket(market);
353
+ const channel = messageType + '.order_list';
354
+ const url = this.getUrlByMarket(market);
355
+ await this.authenticate(url, messageType);
356
+ const rawOrders = await this.requestPrivate(url, this.extend(newRequest, requestParams), channel);
357
+ const orders = this.parseOrders(rawOrders, market);
358
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit);
359
+ }
360
+ /**
361
+ * @method
362
+ * @name gate#watchOrderBook
363
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
364
+ * @see https://www.gate.com/docs/developers/apiv4/ws/en/#order-book-channel
365
+ * @see https://www.gate.com/docs/developers/apiv4/ws/en/#order-book-v2-api
366
+ * @see https://www.gate.com/docs/developers/futures/ws/en/#order-book-api
367
+ * @see https://www.gate.com/docs/developers/futures/ws/en/#order-book-v2-api
368
+ * @see https://www.gate.com/docs/developers/delivery/ws/en/#order-book-api
369
+ * @param {string} symbol unified symbol of the market to fetch the order book for
370
+ * @param {int} [limit] the maximum amount of order book entries to return
371
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
372
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
373
+ */
374
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
375
+ await this.loadMarkets();
376
+ const market = this.market(symbol);
377
+ symbol = market['symbol'];
378
+ const marketId = market['id'];
379
+ const [interval, query] = this.handleOptionAndParams(params, 'watchOrderBook', 'interval', '100ms');
380
+ const messageType = this.getTypeByMarket(market);
381
+ const channel = messageType + '.order_book_update';
382
+ const messageHash = 'orderbook' + ':' + symbol;
383
+ const url = this.getUrlByMarket(market);
384
+ const payload = [marketId, interval];
385
+ if (limit === undefined) {
386
+ limit = 100; // max 100 atm
387
+ }
388
+ if (market['contract']) {
389
+ const stringLimit = limit.toString();
390
+ payload.push(stringLimit);
391
+ }
392
+ const subscription = {
393
+ 'symbol': symbol,
394
+ 'limit': limit,
395
+ };
396
+ const orderbook = await this.subscribePublic(url, messageHash, payload, channel, query, subscription);
397
+ return orderbook.limit();
398
+ }
399
+ /**
400
+ * @method
401
+ * @name gate#unWatchOrderBook
402
+ * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
403
+ * @param {string} symbol unified symbol of the market to fetch the order book for
404
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
405
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
406
+ */
407
+ async unWatchOrderBook(symbol, params = {}) {
408
+ await this.loadMarkets();
409
+ const market = this.market(symbol);
410
+ symbol = market['symbol'];
411
+ const marketId = market['id'];
412
+ let interval = '100ms';
413
+ [interval, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'interval', interval);
414
+ const messageType = this.getTypeByMarket(market);
415
+ const channel = messageType + '.order_book_update';
416
+ const subMessageHash = 'orderbook' + ':' + symbol;
417
+ const messageHash = 'unsubscribe:orderbook' + ':' + symbol;
418
+ const url = this.getUrlByMarket(market);
419
+ const payload = [marketId, interval];
420
+ const limit = this.safeInteger(params, 'limit', 100);
421
+ if (market['contract']) {
422
+ const stringLimit = limit.toString();
423
+ payload.push(stringLimit);
424
+ }
425
+ return await this.unSubscribePublicMultiple(url, 'orderbook', [symbol], [messageHash], [subMessageHash], payload, channel, params);
426
+ }
427
+ handleOrderBookSubscription(client, message, subscription) {
428
+ const symbol = this.safeString(subscription, 'symbol');
429
+ const limit = this.safeInteger(subscription, 'limit');
430
+ this.orderbooks[symbol] = this.orderBook({}, limit);
431
+ }
432
+ handleOrderBook(client, message) {
433
+ //
434
+ // spot
435
+ //
436
+ // {
437
+ // "time": 1650189272,
438
+ // "channel": "spot.order_book_update",
439
+ // "event": "update",
440
+ // "result": {
441
+ // "t": 1650189272515,
442
+ // "e": "depthUpdate",
443
+ // "E": 1650189272,
444
+ // "s": "GMT_USDT",
445
+ // "U": 140595902,
446
+ // "u": 140595902,
447
+ // "b": [
448
+ // [ '2.51518', "228.119" ],
449
+ // [ '2.50587', "1510.11" ],
450
+ // [ '2.49944', "67.6" ],
451
+ // ],
452
+ // "a": [
453
+ // [ '2.5182', "4.199" ],
454
+ // [ "2.51926", "1874" ],
455
+ // [ '2.53528', "96.529" ],
456
+ // ]
457
+ // }
458
+ // }
459
+ //
460
+ // swap
461
+ //
462
+ // {
463
+ // "id": null,
464
+ // "time": 1650188898,
465
+ // "channel": "futures.order_book_update",
466
+ // "event": "update",
467
+ // "error": null,
468
+ // "result": {
469
+ // "t": 1650188898938,
470
+ // "s": "GMT_USDT",
471
+ // "U": 1577718307,
472
+ // "u": 1577719254,
473
+ // "b": [
474
+ // { p: "2.5178", s: 0 },
475
+ // { p: "2.5179", s: 0 },
476
+ // { p: "2.518", s: 0 },
477
+ // ],
478
+ // "a": [
479
+ // { p: "2.52", s: 0 },
480
+ // { p: "2.5201", s: 0 },
481
+ // { p: "2.5203", s: 0 },
482
+ // ]
483
+ // }
484
+ // }
485
+ //
486
+ const channel = this.safeString(message, 'channel');
487
+ const channelParts = channel.split('.');
488
+ const rawMarketType = this.safeString(channelParts, 0);
489
+ const isSpot = rawMarketType === 'spot';
490
+ const marketType = isSpot ? 'spot' : 'contract';
491
+ const delta = this.safeValue(message, 'result');
492
+ const deltaStart = this.safeInteger(delta, 'U');
493
+ const deltaEnd = this.safeInteger(delta, 'u');
494
+ const marketId = this.safeString(delta, 's');
495
+ const symbol = this.safeSymbol(marketId, undefined, '_', marketType);
496
+ const messageHash = 'orderbook:' + symbol;
497
+ const storedOrderBook = this.safeValue(this.orderbooks, symbol, this.orderBook({}));
498
+ const nonce = this.safeInteger(storedOrderBook, 'nonce');
499
+ if (nonce === undefined) {
500
+ let cacheLength = 0;
501
+ if (storedOrderBook !== undefined) {
502
+ cacheLength = storedOrderBook.cache.length;
503
+ }
504
+ const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 10);
505
+ const waitAmount = isSpot ? snapshotDelay : 0;
506
+ if (cacheLength === waitAmount) {
507
+ // max limit is 100
508
+ const subscription = client.subscriptions[messageHash];
509
+ const limit = this.safeInteger(subscription, 'limit');
510
+ this.spawn(this.loadOrderBook, client, messageHash, symbol, limit, {}); // needed for c#, number of args needs to match
511
+ }
512
+ storedOrderBook.cache.push(delta);
513
+ return;
514
+ }
515
+ else if (nonce >= deltaEnd) {
516
+ return;
517
+ }
518
+ else if (nonce >= deltaStart - 1) {
519
+ this.handleDelta(storedOrderBook, delta);
520
+ }
521
+ else {
522
+ delete client.subscriptions[messageHash];
523
+ delete this.orderbooks[symbol];
524
+ const checksum = this.handleOption('watchOrderBook', 'checksum', true);
525
+ if (checksum) {
526
+ const error = new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
527
+ client.reject(error, messageHash);
528
+ }
529
+ }
530
+ client.resolve(storedOrderBook, messageHash);
531
+ }
532
+ getCacheIndex(orderBook, cache) {
533
+ const nonce = this.safeInteger(orderBook, 'nonce');
534
+ const firstDelta = cache[0];
535
+ const firstDeltaStart = this.safeInteger(firstDelta, 'U');
536
+ if (nonce < firstDeltaStart) {
537
+ return -1;
538
+ }
539
+ for (let i = 0; i < cache.length; i++) {
540
+ const delta = cache[i];
541
+ const deltaStart = this.safeInteger(delta, 'U');
542
+ const deltaEnd = this.safeInteger(delta, 'u');
543
+ if ((nonce >= deltaStart - 1) && (nonce < deltaEnd)) {
544
+ return i;
545
+ }
546
+ }
547
+ return cache.length;
548
+ }
549
+ handleBidAsks(bookSide, bidAsks) {
550
+ for (let i = 0; i < bidAsks.length; i++) {
551
+ const bidAsk = bidAsks[i];
552
+ if (Array.isArray(bidAsk)) {
553
+ bookSide.storeArray(this.parseBidAsk(bidAsk));
554
+ }
555
+ else {
556
+ const price = this.safeFloat(bidAsk, 'p');
557
+ const amount = this.safeFloat(bidAsk, 's');
558
+ bookSide.store(price, amount);
559
+ }
560
+ }
561
+ }
562
+ handleDelta(orderbook, delta) {
563
+ const timestamp = this.safeInteger(delta, 't');
564
+ orderbook['timestamp'] = timestamp;
565
+ orderbook['datetime'] = this.iso8601(timestamp);
566
+ orderbook['nonce'] = this.safeInteger(delta, 'u');
567
+ const bids = this.safeValue(delta, 'b', []);
568
+ const asks = this.safeValue(delta, 'a', []);
569
+ const storedBids = orderbook['bids'];
570
+ const storedAsks = orderbook['asks'];
571
+ this.handleBidAsks(storedBids, bids);
572
+ this.handleBidAsks(storedAsks, asks);
573
+ }
574
+ /**
575
+ * @method
576
+ * @name gate#watchTicker
577
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#tickers-channel
578
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
579
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
580
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
581
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
582
+ */
583
+ async watchTicker(symbol, params = {}) {
584
+ await this.loadMarkets();
585
+ const market = this.market(symbol);
586
+ symbol = market['symbol'];
587
+ params['callerMethodName'] = 'watchTicker';
588
+ const result = await this.watchTickers([symbol], params);
589
+ return this.safeValue(result, symbol);
590
+ }
591
+ /**
592
+ * @method
593
+ * @name gate#watchTickers
594
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#tickers-channel
595
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
596
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
597
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
598
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
599
+ */
600
+ async watchTickers(symbols = undefined, params = {}) {
601
+ return await this.subscribeWatchTickersAndBidsAsks(symbols, 'watchTickers', this.extend({ 'method': 'tickers' }, params));
602
+ }
603
+ handleTicker(client, message) {
604
+ //
605
+ // {
606
+ // "time": 1649326221,
607
+ // "channel": "spot.tickers",
608
+ // "event": "update",
609
+ // "result": {
610
+ // "currency_pair": "BTC_USDT",
611
+ // "last": "43444.82",
612
+ // "lowest_ask": "43444.82",
613
+ // "highest_bid": "43444.81",
614
+ // "change_percentage": "-4.0036",
615
+ // "base_volume": "5182.5412425462",
616
+ // "quote_volume": "227267634.93123952",
617
+ // "high_24h": "47698",
618
+ // "low_24h": "42721.03"
619
+ // }
620
+ // }
621
+ //
622
+ this.handleTickerAndBidAsk('ticker', client, message);
623
+ }
624
+ /**
625
+ * @method
626
+ * @name gate#watchBidsAsks
627
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#best-bid-or-ask-price
628
+ * @see https://www.gate.io/docs/developers/apiv4/ws/en/#order-book-channel
629
+ * @description watches best bid & ask for symbols
630
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
631
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
632
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
633
+ */
634
+ async watchBidsAsks(symbols = undefined, params = {}) {
635
+ return await this.subscribeWatchTickersAndBidsAsks(symbols, 'watchBidsAsks', this.extend({ 'method': 'book_ticker' }, params));
636
+ }
637
+ handleBidAsk(client, message) {
638
+ //
639
+ // {
640
+ // "time": 1671363004,
641
+ // "time_ms": 1671363004235,
642
+ // "channel": "spot.book_ticker",
643
+ // "event": "update",
644
+ // "result": {
645
+ // "t": 1671363004228,
646
+ // "u": 9793320464,
647
+ // "s": "BTC_USDT",
648
+ // "b": "16716.8",
649
+ // "B": "0.0134",
650
+ // "a": "16716.9",
651
+ // "A": "0.0353"
652
+ // }
653
+ // }
654
+ //
655
+ this.handleTickerAndBidAsk('bidask', client, message);
656
+ }
657
+ async subscribeWatchTickersAndBidsAsks(symbols = undefined, callerMethodName = undefined, params = {}) {
658
+ await this.loadMarkets();
659
+ [callerMethodName, params] = this.handleParamString(params, 'callerMethodName', callerMethodName);
660
+ symbols = this.marketSymbols(symbols, undefined, false);
661
+ const market = this.market(symbols[0]);
662
+ const messageType = this.getTypeByMarket(market);
663
+ const marketIds = this.marketIds(symbols);
664
+ let channelName = undefined;
665
+ [channelName, params] = this.handleOptionAndParams(params, callerMethodName, 'method');
666
+ const url = this.getUrlByMarket(market);
667
+ const channel = messageType + '.' + channelName;
668
+ const isWatchTickers = callerMethodName.indexOf('watchTicker') >= 0;
669
+ const prefix = isWatchTickers ? 'ticker' : 'bidask';
670
+ const messageHashes = [];
671
+ for (let i = 0; i < symbols.length; i++) {
672
+ const symbol = symbols[i];
673
+ messageHashes.push(prefix + ':' + symbol);
674
+ }
675
+ const tickerOrBidAsk = await this.subscribePublicMultiple(url, messageHashes, marketIds, channel, params);
676
+ if (this.newUpdates) {
677
+ const items = {};
678
+ items[tickerOrBidAsk['symbol']] = tickerOrBidAsk;
679
+ return items;
680
+ }
681
+ const result = isWatchTickers ? this.tickers : this.bidsasks;
682
+ return this.filterByArray(result, 'symbol', symbols, true);
683
+ }
684
+ handleTickerAndBidAsk(objectName, client, message) {
685
+ const channel = this.safeString(message, 'channel');
686
+ const parts = channel.split('.');
687
+ const rawMarketType = this.safeString(parts, 0);
688
+ const marketType = (rawMarketType === 'futures') ? 'contract' : 'spot';
689
+ const result = this.safeValue(message, 'result');
690
+ let results = [];
691
+ if (Array.isArray(result)) {
692
+ results = this.safeList(message, 'result', []);
693
+ }
694
+ else {
695
+ const rawTicker = this.safeDict(message, 'result', {});
696
+ results = [rawTicker];
697
+ }
698
+ const isTicker = (objectName === 'ticker'); // whether ticker or bid-ask
699
+ for (let i = 0; i < results.length; i++) {
700
+ const rawTicker = results[i];
701
+ const marketId = this.safeString(rawTicker, 's');
702
+ const market = this.safeMarket(marketId, undefined, '_', marketType);
703
+ const parsedItem = this.parseTicker(rawTicker, market);
704
+ const symbol = parsedItem['symbol'];
705
+ if (isTicker) {
706
+ this.tickers[symbol] = parsedItem;
707
+ }
708
+ else {
709
+ this.bidsasks[symbol] = parsedItem;
710
+ }
711
+ const messageHash = objectName + ':' + symbol;
712
+ client.resolve(parsedItem, messageHash);
713
+ }
714
+ }
715
+ /**
716
+ * @method
717
+ * @name gate#watchTrades
718
+ * @description get the list of most recent trades for a particular symbol
719
+ * @param {string} symbol unified symbol of the market to fetch trades for
720
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
721
+ * @param {int} [limit] the maximum amount of trades to fetch
722
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
723
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
724
+ */
725
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
726
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
727
+ }
728
+ /**
729
+ * @method
730
+ * @name gate#watchTradesForSymbols
731
+ * @description get the list of most recent trades for a particular symbol
732
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
733
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
734
+ * @param {int} [limit] the maximum amount of trades to fetch
735
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
736
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
737
+ */
738
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
739
+ await this.loadMarkets();
740
+ symbols = this.marketSymbols(symbols);
741
+ const marketIds = this.marketIds(symbols);
742
+ const market = this.market(symbols[0]);
743
+ const messageType = this.getTypeByMarket(market);
744
+ const channel = messageType + '.trades';
745
+ const messageHashes = [];
746
+ for (let i = 0; i < symbols.length; i++) {
747
+ const symbol = symbols[i];
748
+ messageHashes.push('trades:' + symbol);
749
+ }
750
+ const url = this.getUrlByMarket(market);
751
+ const trades = await this.subscribePublicMultiple(url, messageHashes, marketIds, channel, params);
752
+ if (this.newUpdates) {
753
+ const first = this.safeValue(trades, 0);
754
+ const tradeSymbol = this.safeString(first, 'symbol');
755
+ limit = trades.getLimit(tradeSymbol, limit);
756
+ }
757
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
758
+ }
759
+ /**
760
+ * @method
761
+ * @name gate#unWatchTradesForSymbols
762
+ * @description get the list of most recent trades for a particular symbol
763
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
764
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
765
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
766
+ */
767
+ async unWatchTradesForSymbols(symbols, params = {}) {
768
+ await this.loadMarkets();
769
+ symbols = this.marketSymbols(symbols);
770
+ const marketIds = this.marketIds(symbols);
771
+ const market = this.market(symbols[0]);
772
+ const messageType = this.getTypeByMarket(market);
773
+ const channel = messageType + '.trades';
774
+ const subMessageHashes = [];
775
+ const messageHashes = [];
776
+ for (let i = 0; i < symbols.length; i++) {
777
+ const symbol = symbols[i];
778
+ subMessageHashes.push('trades:' + symbol);
779
+ messageHashes.push('unsubscribe:trades:' + symbol);
780
+ }
781
+ const url = this.getUrlByMarket(market);
782
+ return await this.unSubscribePublicMultiple(url, 'trades', symbols, messageHashes, subMessageHashes, marketIds, channel, params);
783
+ }
784
+ /**
785
+ * @method
786
+ * @name gate#unWatchTrades
787
+ * @description get the list of most recent trades for a particular symbol
788
+ * @param {string} symbol unified symbol of the market to fetch trades for
789
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
790
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
791
+ */
792
+ async unWatchTrades(symbol, params = {}) {
793
+ return await this.unWatchTradesForSymbols([symbol], params);
794
+ }
795
+ handleTrades(client, message) {
796
+ //
797
+ // {
798
+ // "time": 1648725035,
799
+ // "channel": "spot.trades",
800
+ // "event": "update",
801
+ // "result": [{
802
+ // "id": 3130257995,
803
+ // "create_time": 1648725035,
804
+ // "create_time_ms": "1648725035923.0",
805
+ // "side": "sell",
806
+ // "currency_pair": "LTC_USDT",
807
+ // "amount": "0.0116",
808
+ // "price": "130.11"
809
+ // }]
810
+ // }
811
+ //
812
+ let result = this.safeValue(message, 'result');
813
+ if (!Array.isArray(result)) {
814
+ result = [result];
815
+ }
816
+ const parsedTrades = this.parseTrades(result);
817
+ for (let i = 0; i < parsedTrades.length; i++) {
818
+ const trade = parsedTrades[i];
819
+ const symbol = trade['symbol'];
820
+ let cachedTrades = this.safeValue(this.trades, symbol);
821
+ if (cachedTrades === undefined) {
822
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
823
+ cachedTrades = new ArrayCache(limit);
824
+ this.trades[symbol] = cachedTrades;
825
+ }
826
+ cachedTrades.append(trade);
827
+ const hash = 'trades:' + symbol;
828
+ client.resolve(cachedTrades, hash);
829
+ }
830
+ }
831
+ /**
832
+ * @method
833
+ * @name gate#watchOHLCV
834
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
835
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
836
+ * @param {string} timeframe the length of time each candle represents
837
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
838
+ * @param {int} [limit] the maximum amount of candles to fetch
839
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
840
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
841
+ */
842
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
843
+ await this.loadMarkets();
844
+ const market = this.market(symbol);
845
+ symbol = market['symbol'];
846
+ const marketId = market['id'];
847
+ const interval = this.safeString(this.timeframes, timeframe, timeframe);
848
+ const messageType = this.getTypeByMarket(market);
849
+ const channel = messageType + '.candlesticks';
850
+ const messageHash = 'candles:' + interval + ':' + market['symbol'];
851
+ const url = this.getUrlByMarket(market);
852
+ const payload = [interval, marketId];
853
+ const ohlcv = await this.subscribePublic(url, messageHash, payload, channel, params);
854
+ if (this.newUpdates) {
855
+ limit = ohlcv.getLimit(symbol, limit);
856
+ }
857
+ return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
858
+ }
859
+ handleOHLCV(client, message) {
860
+ //
861
+ // {
862
+ // "time": 1606292600,
863
+ // "channel": "spot.candlesticks",
864
+ // "event": "update",
865
+ // "result": {
866
+ // "t": "1606292580", // total volume
867
+ // "v": "2362.32035", // volume
868
+ // "c": "19128.1", // close
869
+ // "h": "19128.1", // high
870
+ // "l": "19128.1", // low
871
+ // "o": "19128.1", // open
872
+ // "n": "1m_BTC_USDT" // sub
873
+ // }
874
+ // }
875
+ //
876
+ const channel = this.safeString(message, 'channel');
877
+ const channelParts = channel.split('.');
878
+ const rawMarketType = this.safeString(channelParts, 0);
879
+ const marketType = (rawMarketType === 'spot') ? 'spot' : 'contract';
880
+ let result = this.safeValue(message, 'result');
881
+ if (!Array.isArray(result)) {
882
+ result = [result];
883
+ }
884
+ const marketIds = {};
885
+ for (let i = 0; i < result.length; i++) {
886
+ const ohlcv = result[i];
887
+ const subscription = this.safeString(ohlcv, 'n', '');
888
+ const parts = subscription.split('_');
889
+ const timeframe = this.safeString(parts, 0);
890
+ const timeframeId = this.findTimeframe(timeframe);
891
+ const prefix = timeframe + '_';
892
+ const marketId = subscription.replace(prefix, '');
893
+ const symbol = this.safeSymbol(marketId, undefined, '_', marketType);
894
+ const parsed = this.parseOHLCV(ohlcv);
895
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
896
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
897
+ if (stored === undefined) {
898
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
899
+ stored = new ArrayCacheByTimestamp(limit);
900
+ this.ohlcvs[symbol][timeframeId] = stored;
901
+ }
902
+ stored.append(parsed);
903
+ marketIds[symbol] = timeframe;
904
+ }
905
+ const keys = Object.keys(marketIds);
906
+ for (let i = 0; i < keys.length; i++) {
907
+ const symbol = keys[i];
908
+ const timeframe = marketIds[symbol];
909
+ const interval = this.findTimeframe(timeframe);
910
+ const hash = 'candles' + ':' + interval + ':' + symbol;
911
+ const stored = this.safeValue(this.ohlcvs[symbol], interval);
912
+ client.resolve(stored, hash);
913
+ }
914
+ }
915
+ /**
916
+ * @method
917
+ * @name gate#watchMyTrades
918
+ * @description watches information on multiple trades made by the user
919
+ * @param {string} symbol unified market symbol of the market trades were made in
920
+ * @param {int} [since] the earliest time in ms to fetch trades for
921
+ * @param {int} [limit] the maximum number of trade structures to retrieve
922
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
923
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
924
+ */
925
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
926
+ await this.loadMarkets();
927
+ let subType = undefined;
928
+ let type = undefined;
929
+ let marketId = '!' + 'all';
930
+ let market = undefined;
931
+ if (symbol !== undefined) {
932
+ market = this.market(symbol);
933
+ marketId = market['id'];
934
+ }
935
+ [type, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
936
+ [subType, params] = this.handleSubTypeAndParams('watchMyTrades', market, params);
937
+ const messageType = this.getSupportedMapping(type, {
938
+ 'spot': 'spot',
939
+ 'margin': 'spot',
940
+ 'future': 'futures',
941
+ 'swap': 'futures',
942
+ 'option': 'options',
943
+ });
944
+ const channel = messageType + '.usertrades';
945
+ let messageHash = 'myTrades';
946
+ if (symbol !== undefined) {
947
+ messageHash += ':' + symbol;
948
+ }
949
+ const isInverse = (subType === 'inverse');
950
+ const url = this.getUrlByMarketType(type, isInverse);
951
+ const payload = [marketId];
952
+ // uid required for non spot markets
953
+ const requiresUid = (type !== 'spot');
954
+ const trades = await this.subscribePrivate(url, messageHash, payload, channel, params, requiresUid);
955
+ if (this.newUpdates) {
956
+ limit = trades.getLimit(symbol, limit);
957
+ }
958
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
959
+ }
960
+ handleMyTrades(client, message) {
961
+ //
962
+ // {
963
+ // "time": 1543205083,
964
+ // "channel": "futures.usertrades",
965
+ // "event": "update",
966
+ // "error": null,
967
+ // "result": [
968
+ // {
969
+ // "id": "3335259",
970
+ // "create_time": 1628736848,
971
+ // "create_time_ms": 1628736848321,
972
+ // "contract": "BTC_USD",
973
+ // "order_id": "4872460",
974
+ // "size": 1,
975
+ // "price": "40000.4",
976
+ // "role": "maker"
977
+ // }
978
+ // ]
979
+ // }
980
+ //
981
+ const result = this.safeValue(message, 'result', []);
982
+ const tradesLength = result.length;
983
+ if (tradesLength === 0) {
984
+ return;
985
+ }
986
+ let cachedTrades = this.myTrades;
987
+ if (cachedTrades === undefined) {
988
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
989
+ cachedTrades = new ArrayCacheBySymbolById(limit);
990
+ this.myTrades = cachedTrades;
991
+ }
992
+ const parsed = this.parseTrades(result);
993
+ const marketIds = {};
994
+ for (let i = 0; i < parsed.length; i++) {
995
+ const trade = parsed[i];
996
+ cachedTrades.append(trade);
997
+ const symbol = trade['symbol'];
998
+ marketIds[symbol] = true;
999
+ }
1000
+ const keys = Object.keys(marketIds);
1001
+ for (let i = 0; i < keys.length; i++) {
1002
+ const market = keys[i];
1003
+ const hash = 'myTrades:' + market;
1004
+ client.resolve(cachedTrades, hash);
1005
+ }
1006
+ client.resolve(cachedTrades, 'myTrades');
1007
+ }
1008
+ /**
1009
+ * @method
1010
+ * @name gate#watchBalance
1011
+ * @description watch balance and get the amount of funds available for trading or funds locked in orders
1012
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1013
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1014
+ */
1015
+ async watchBalance(params = {}) {
1016
+ await this.loadMarkets();
1017
+ let type = undefined;
1018
+ let subType = undefined;
1019
+ [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
1020
+ [subType, params] = this.handleSubTypeAndParams('watchBalance', undefined, params);
1021
+ const isInverse = (subType === 'inverse');
1022
+ const url = this.getUrlByMarketType(type, isInverse);
1023
+ const requiresUid = (type !== 'spot');
1024
+ const channelType = this.getSupportedMapping(type, {
1025
+ 'spot': 'spot',
1026
+ 'margin': 'spot',
1027
+ 'future': 'futures',
1028
+ 'swap': 'futures',
1029
+ 'option': 'options',
1030
+ });
1031
+ const channel = channelType + '.balances';
1032
+ const messageHash = type + '.balance';
1033
+ return await this.subscribePrivate(url, messageHash, undefined, channel, params, requiresUid);
1034
+ }
1035
+ handleBalance(client, message) {
1036
+ //
1037
+ // spot order fill
1038
+ // {
1039
+ // "time": 1653664351,
1040
+ // "channel": "spot.balances",
1041
+ // "event": "update",
1042
+ // "result": [
1043
+ // {
1044
+ // "timestamp": "1653664351",
1045
+ // "timestamp_ms": "1653664351017",
1046
+ // "user": "10406147",
1047
+ // "currency": "LTC",
1048
+ // "change": "-0.0002000000000000",
1049
+ // "total": "0.09986000000000000000",
1050
+ // "available": "0.09986000000000000000"
1051
+ // }
1052
+ // ]
1053
+ // }
1054
+ //
1055
+ // account transfer
1056
+ //
1057
+ // {
1058
+ // "id": null,
1059
+ // "time": 1653665088,
1060
+ // "channel": "futures.balances",
1061
+ // "event": "update",
1062
+ // "error": null,
1063
+ // "result": [
1064
+ // {
1065
+ // "balance": 25.035008537,
1066
+ // "change": 25,
1067
+ // "text": "-",
1068
+ // "time": 1653665088,
1069
+ // "time_ms": 1653665088286,
1070
+ // "type": "dnw",
1071
+ // "user": "10406147"
1072
+ // }
1073
+ // ]
1074
+ // }
1075
+ //
1076
+ // swap order fill
1077
+ // {
1078
+ // "id": null,
1079
+ // "time": 1653665311,
1080
+ // "channel": "futures.balances",
1081
+ // "event": "update",
1082
+ // "error": null,
1083
+ // "result": [
1084
+ // {
1085
+ // "balance": 20.031873037,
1086
+ // "change": -0.0031355,
1087
+ // "text": "LTC_USDT:165551103273",
1088
+ // "time": 1653665311,
1089
+ // "time_ms": 1653665311437,
1090
+ // "type": "fee",
1091
+ // "user": "10406147"
1092
+ // }
1093
+ // ]
1094
+ // }
1095
+ //
1096
+ const result = this.safeValue(message, 'result', []);
1097
+ const timestamp = this.safeInteger(message, 'time_ms');
1098
+ this.balance['info'] = result;
1099
+ this.balance['timestamp'] = timestamp;
1100
+ this.balance['datetime'] = this.iso8601(timestamp);
1101
+ for (let i = 0; i < result.length; i++) {
1102
+ const rawBalance = result[i];
1103
+ const account = this.account();
1104
+ const currencyId = this.safeString(rawBalance, 'currency', 'USDT'); // when not present it is USDT
1105
+ const code = this.safeCurrencyCode(currencyId);
1106
+ account['free'] = this.safeString(rawBalance, 'available');
1107
+ account['total'] = this.safeString2(rawBalance, 'total', 'balance');
1108
+ this.balance[code] = account;
1109
+ }
1110
+ const channel = this.safeString(message, 'channel');
1111
+ const parts = channel.split('.');
1112
+ const rawType = this.safeString(parts, 0);
1113
+ const channelType = this.getSupportedMapping(rawType, {
1114
+ 'spot': 'spot',
1115
+ 'futures': 'swap',
1116
+ 'options': 'option',
1117
+ });
1118
+ const messageHash = channelType + '.balance';
1119
+ this.balance = this.safeBalance(this.balance);
1120
+ client.resolve(this.balance, messageHash);
1121
+ }
1122
+ /**
1123
+ * @method
1124
+ * @name gate#watchPositions
1125
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#positions-subscription
1126
+ * @see https://www.gate.io/docs/developers/delivery/ws/en/#positions-subscription
1127
+ * @see https://www.gate.io/docs/developers/options/ws/en/#positions-channel
1128
+ * @description watch all open positions
1129
+ * @param {string[]} [symbols] list of unified market symbols to watch positions for
1130
+ * @param {int} [since] the earliest time in ms to fetch positions for
1131
+ * @param {int} [limit] the maximum number of positions to retrieve
1132
+ * @param {object} params extra parameters specific to the exchange API endpoint
1133
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
1134
+ */
1135
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
1136
+ await this.loadMarkets();
1137
+ let market = undefined;
1138
+ symbols = this.marketSymbols(symbols);
1139
+ const payload = ['!' + 'all'];
1140
+ if (!this.isEmpty(symbols)) {
1141
+ market = this.getMarketFromSymbols(symbols);
1142
+ }
1143
+ let type = undefined;
1144
+ let query = undefined;
1145
+ [type, query] = this.handleMarketTypeAndParams('watchPositions', market, params);
1146
+ if (type === 'spot') {
1147
+ type = 'swap';
1148
+ }
1149
+ const typeId = this.getSupportedMapping(type, {
1150
+ 'future': 'futures',
1151
+ 'swap': 'futures',
1152
+ 'option': 'options',
1153
+ });
1154
+ let messageHash = type + ':positions';
1155
+ if (!this.isEmpty(symbols)) {
1156
+ messageHash += '::' + symbols.join(',');
1157
+ }
1158
+ const channel = typeId + '.positions';
1159
+ let subType = undefined;
1160
+ [subType, query] = this.handleSubTypeAndParams('watchPositions', market, query);
1161
+ const isInverse = (subType === 'inverse');
1162
+ const url = this.getUrlByMarketType(type, isInverse);
1163
+ const client = this.client(url);
1164
+ this.setPositionsCache(client, type, symbols);
1165
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
1166
+ const awaitPositionsSnapshot = this.handleOption('watchPositions', 'awaitPositionsSnapshot', true);
1167
+ const cache = this.safeValue(this.positions, type);
1168
+ if (fetchPositionsSnapshot && awaitPositionsSnapshot && cache === undefined) {
1169
+ return await client.future(type + ':fetchPositionsSnapshot');
1170
+ }
1171
+ const positions = await this.subscribePrivate(url, messageHash, payload, channel, query, true);
1172
+ if (this.newUpdates) {
1173
+ return positions;
1174
+ }
1175
+ return this.filterBySymbolsSinceLimit(this.positions[type], symbols, since, limit, true);
1176
+ }
1177
+ setPositionsCache(client, type, symbols = undefined) {
1178
+ if (this.positions === undefined) {
1179
+ this.positions = {};
1180
+ }
1181
+ if (type in this.positions) {
1182
+ return;
1183
+ }
1184
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', false);
1185
+ if (fetchPositionsSnapshot) {
1186
+ const messageHash = type + ':fetchPositionsSnapshot';
1187
+ if (!(messageHash in client.futures)) {
1188
+ client.future(messageHash);
1189
+ this.spawn(this.loadPositionsSnapshot, client, messageHash, type);
1190
+ }
1191
+ }
1192
+ else {
1193
+ this.positions[type] = new ArrayCacheBySymbolBySide();
1194
+ }
1195
+ }
1196
+ async loadPositionsSnapshot(client, messageHash, type) {
1197
+ const positions = await this.fetchPositions(undefined, { 'type': type });
1198
+ this.positions[type] = new ArrayCacheBySymbolBySide();
1199
+ const cache = this.positions[type];
1200
+ for (let i = 0; i < positions.length; i++) {
1201
+ const position = positions[i];
1202
+ const contracts = this.safeNumber(position, 'contracts', 0);
1203
+ if (contracts > 0) {
1204
+ cache.append(position);
1205
+ }
1206
+ }
1207
+ // don't remove the future from the .futures cache
1208
+ const future = client.futures[messageHash];
1209
+ future.resolve(cache);
1210
+ client.resolve(cache, type + ':position');
1211
+ }
1212
+ handlePositions(client, message) {
1213
+ //
1214
+ // {
1215
+ // time: 1693158497,
1216
+ // time_ms: 1693158497204,
1217
+ // channel: 'futures.positions',
1218
+ // event: 'update',
1219
+ // result: [{
1220
+ // contract: 'XRP_USDT',
1221
+ // cross_leverage_limit: 0,
1222
+ // entry_price: 0.5253,
1223
+ // history_pnl: 0,
1224
+ // history_point: 0,
1225
+ // last_close_pnl: 0,
1226
+ // leverage: 0,
1227
+ // leverage_max: 50,
1228
+ // liq_price: 0.0361,
1229
+ // maintenance_rate: 0.01,
1230
+ // margin: 4.89609962852,
1231
+ // mode: 'single',
1232
+ // realised_pnl: -0.0026265,
1233
+ // realised_point: 0,
1234
+ // risk_limit: 500000,
1235
+ // size: 1,
1236
+ // time: 1693158497,
1237
+ // time_ms: 1693158497195,
1238
+ // update_id: 1,
1239
+ // user: '10444586'
1240
+ // }]
1241
+ // }
1242
+ //
1243
+ const type = this.getMarketTypeByUrl(client.url);
1244
+ const data = this.safeValue(message, 'result', []);
1245
+ const cache = this.positions[type];
1246
+ const newPositions = [];
1247
+ for (let i = 0; i < data.length; i++) {
1248
+ const rawPosition = data[i];
1249
+ const position = this.parsePosition(rawPosition);
1250
+ const symbol = this.safeString(position, 'symbol');
1251
+ const side = this.safeString(position, 'side');
1252
+ // Control when position is closed no side is returned
1253
+ if (side === undefined) {
1254
+ const prevLongPosition = this.safeDict(cache, symbol + 'long');
1255
+ if (prevLongPosition !== undefined) {
1256
+ position['side'] = prevLongPosition['side'];
1257
+ newPositions.push(position);
1258
+ cache.append(position);
1259
+ }
1260
+ const prevShortPosition = this.safeDict(cache, symbol + 'short');
1261
+ if (prevShortPosition !== undefined) {
1262
+ position['side'] = prevShortPosition['side'];
1263
+ newPositions.push(position);
1264
+ cache.append(position);
1265
+ }
1266
+ // if no prev position is found, default to long
1267
+ if (prevLongPosition === undefined && prevShortPosition === undefined) {
1268
+ position['side'] = 'long';
1269
+ newPositions.push(position);
1270
+ cache.append(position);
1271
+ }
1272
+ }
1273
+ else {
1274
+ newPositions.push(position);
1275
+ cache.append(position);
1276
+ }
1277
+ }
1278
+ const messageHashes = this.findMessageHashes(client, type + ':positions::');
1279
+ for (let i = 0; i < messageHashes.length; i++) {
1280
+ const messageHash = messageHashes[i];
1281
+ const parts = messageHash.split('::');
1282
+ const symbolsString = parts[1];
1283
+ const symbols = symbolsString.split(',');
1284
+ const positions = this.filterByArray(newPositions, 'symbol', symbols, false);
1285
+ if (!this.isEmpty(positions)) {
1286
+ client.resolve(positions, messageHash);
1287
+ }
1288
+ }
1289
+ client.resolve(newPositions, type + ':positions');
1290
+ }
1291
+ /**
1292
+ * @method
1293
+ * @name gate#watchOrders
1294
+ * @description watches information on multiple orders made by the user
1295
+ * @param {string} symbol unified market symbol of the market orders were made in
1296
+ * @param {int} [since] the earliest time in ms to fetch orders for
1297
+ * @param {int} [limit] the maximum number of order structures to retrieve
1298
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1299
+ * @param {string} [params.type] spot, margin, swap, future, or option. Required if listening to all symbols.
1300
+ * @param {boolean} [params.isInverse] if future, listen to inverse or linear contracts
1301
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1302
+ */
1303
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1304
+ await this.loadMarkets();
1305
+ let market = undefined;
1306
+ if (symbol !== undefined) {
1307
+ market = this.market(symbol);
1308
+ symbol = market['symbol'];
1309
+ }
1310
+ let type = undefined;
1311
+ let query = undefined;
1312
+ [type, query] = this.handleMarketTypeAndParams('watchOrders', market, params);
1313
+ const typeId = this.getSupportedMapping(type, {
1314
+ 'spot': 'spot',
1315
+ 'margin': 'spot',
1316
+ 'future': 'futures',
1317
+ 'swap': 'futures',
1318
+ 'option': 'options',
1319
+ });
1320
+ const channel = typeId + '.orders';
1321
+ let messageHash = 'orders';
1322
+ let payload = ['!' + 'all'];
1323
+ if (symbol !== undefined) {
1324
+ messageHash += ':' + market['id'];
1325
+ payload = [market['id']];
1326
+ }
1327
+ let subType = undefined;
1328
+ [subType, query] = this.handleSubTypeAndParams('watchOrders', market, query);
1329
+ const isInverse = (subType === 'inverse');
1330
+ const url = this.getUrlByMarketType(type, isInverse);
1331
+ // uid required for non spot markets
1332
+ const requiresUid = (type !== 'spot');
1333
+ const orders = await this.subscribePrivate(url, messageHash, payload, channel, query, requiresUid);
1334
+ if (this.newUpdates) {
1335
+ limit = orders.getLimit(symbol, limit);
1336
+ }
1337
+ return this.filterBySinceLimit(orders, since, limit, 'timestamp', true);
1338
+ }
1339
+ handleOrder(client, message) {
1340
+ //
1341
+ // {
1342
+ // "time": 1605175506,
1343
+ // "channel": "spot.orders",
1344
+ // "event": "update",
1345
+ // "result": [
1346
+ // {
1347
+ // "id": "30784435",
1348
+ // "user": 123456,
1349
+ // "text": "t-abc",
1350
+ // "create_time": "1605175506",
1351
+ // "create_time_ms": "1605175506123",
1352
+ // "update_time": "1605175506",
1353
+ // "update_time_ms": "1605175506123",
1354
+ // "event": "put",
1355
+ // "currency_pair": "BTC_USDT",
1356
+ // "type": "limit",
1357
+ // "account": "spot",
1358
+ // "side": "sell",
1359
+ // "amount": "1",
1360
+ // "price": "10001",
1361
+ // "time_in_force": "gtc",
1362
+ // "left": "1",
1363
+ // "filled_total": "0",
1364
+ // "fee": "0",
1365
+ // "fee_currency": "USDT",
1366
+ // "point_fee": "0",
1367
+ // "gt_fee": "0",
1368
+ // "gt_discount": true,
1369
+ // "rebated_fee": "0",
1370
+ // "rebated_fee_currency": "USDT"
1371
+ // }
1372
+ // ]
1373
+ // }
1374
+ //
1375
+ const orders = this.safeValue(message, 'result', []);
1376
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
1377
+ if (this.orders === undefined) {
1378
+ this.orders = new ArrayCacheBySymbolById(limit);
1379
+ }
1380
+ const stored = this.orders;
1381
+ const marketIds = {};
1382
+ const parsedOrders = this.parseOrders(orders);
1383
+ for (let i = 0; i < parsedOrders.length; i++) {
1384
+ const parsed = parsedOrders[i];
1385
+ // inject order status
1386
+ const info = this.safeValue(parsed, 'info');
1387
+ const event = this.safeString(info, 'event');
1388
+ if (event === 'put' || event === 'update') {
1389
+ parsed['status'] = 'open';
1390
+ }
1391
+ else if (event === 'finish') {
1392
+ const status = this.safeString(parsed, 'status');
1393
+ if (status === undefined) {
1394
+ const left = this.safeInteger(info, 'left');
1395
+ parsed['status'] = (left === 0) ? 'closed' : 'canceled';
1396
+ }
1397
+ }
1398
+ stored.append(parsed);
1399
+ const symbol = parsed['symbol'];
1400
+ const market = this.market(symbol);
1401
+ marketIds[market['id']] = true;
1402
+ }
1403
+ const keys = Object.keys(marketIds);
1404
+ for (let i = 0; i < keys.length; i++) {
1405
+ const messageHash = 'orders:' + keys[i];
1406
+ client.resolve(this.orders, messageHash);
1407
+ }
1408
+ client.resolve(this.orders, 'orders');
1409
+ }
1410
+ /**
1411
+ * @method
1412
+ * @name gate#watchMyLiquidations
1413
+ * @description watch the public liquidations of a trading pair
1414
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#liquidates-api
1415
+ * @see https://www.gate.io/docs/developers/delivery/ws/en/#liquidates-api
1416
+ * @see https://www.gate.io/docs/developers/options/ws/en/#liquidates-channel
1417
+ * @param {string} symbol unified CCXT market symbol
1418
+ * @param {int} [since] the earliest time in ms to fetch liquidations for
1419
+ * @param {int} [limit] the maximum number of liquidation structures to retrieve
1420
+ * @param {object} [params] exchange specific parameters for the bitmex api endpoint
1421
+ * @returns {object} an array of [liquidation structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure}
1422
+ */
1423
+ async watchMyLiquidations(symbol, since = undefined, limit = undefined, params = {}) {
1424
+ return this.watchMyLiquidationsForSymbols([symbol], since, limit, params);
1425
+ }
1426
+ /**
1427
+ * @method
1428
+ * @name gate#watchMyLiquidationsForSymbols
1429
+ * @description watch the private liquidations of a trading pair
1430
+ * @see https://www.gate.io/docs/developers/futures/ws/en/#liquidates-api
1431
+ * @see https://www.gate.io/docs/developers/delivery/ws/en/#liquidates-api
1432
+ * @see https://www.gate.io/docs/developers/options/ws/en/#liquidates-channel
1433
+ * @param {string[]} symbols unified CCXT market symbols
1434
+ * @param {int} [since] the earliest time in ms to fetch liquidations for
1435
+ * @param {int} [limit] the maximum number of liquidation structures to retrieve
1436
+ * @param {object} [params] exchange specific parameters for the gate api endpoint
1437
+ * @returns {object} an array of [liquidation structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure}
1438
+ */
1439
+ async watchMyLiquidationsForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
1440
+ await this.loadMarkets();
1441
+ symbols = this.marketSymbols(symbols, undefined, true, true);
1442
+ const market = this.getMarketFromSymbols(symbols);
1443
+ let type = undefined;
1444
+ let query = undefined;
1445
+ [type, query] = this.handleMarketTypeAndParams('watchMyLiquidationsForSymbols', market, params);
1446
+ const typeId = this.getSupportedMapping(type, {
1447
+ 'future': 'futures',
1448
+ 'swap': 'futures',
1449
+ 'option': 'options',
1450
+ });
1451
+ let subType = undefined;
1452
+ [subType, query] = this.handleSubTypeAndParams('watchMyLiquidationsForSymbols', market, query);
1453
+ const isInverse = (subType === 'inverse');
1454
+ const url = this.getUrlByMarketType(type, isInverse);
1455
+ const payload = [];
1456
+ let messageHash = '';
1457
+ if (this.isEmpty(symbols)) {
1458
+ if (typeId !== 'futures' && !isInverse) {
1459
+ throw new BadRequest(this.id + ' watchMyLiquidationsForSymbols() does not support listening to all symbols, you must call watchMyLiquidations() instead for each symbol you wish to watch.');
1460
+ }
1461
+ messageHash = 'myLiquidations';
1462
+ payload.push('!all');
1463
+ }
1464
+ else {
1465
+ const symbolsLength = symbols.length;
1466
+ if (symbolsLength !== 1) {
1467
+ throw new BadRequest(this.id + ' watchMyLiquidationsForSymbols() only allows one symbol at a time. To listen to several symbols call watchMyLiquidationsForSymbols() several times.');
1468
+ }
1469
+ messageHash = 'myLiquidations::' + symbols[0];
1470
+ payload.push(market['id']);
1471
+ }
1472
+ const channel = typeId + '.liquidates';
1473
+ const newLiquidations = await this.subscribePrivate(url, messageHash, payload, channel, query, true);
1474
+ if (this.newUpdates) {
1475
+ return newLiquidations;
1476
+ }
1477
+ return this.filterBySymbolsSinceLimit(this.liquidations, symbols, since, limit, true);
1478
+ }
1479
+ handleLiquidation(client, message) {
1480
+ //
1481
+ // future / delivery
1482
+ // {
1483
+ // "channel":"futures.liquidates",
1484
+ // "event":"update",
1485
+ // "time":1541505434,
1486
+ // "time_ms":1541505434123,
1487
+ // "result":[
1488
+ // {
1489
+ // "entry_price":209,
1490
+ // "fill_price":215.1,
1491
+ // "left":0,
1492
+ // "leverage":0.0,
1493
+ // "liq_price":213,
1494
+ // "margin":0.007816722941,
1495
+ // "mark_price":213,
1496
+ // "order_id":4093362,
1497
+ // "order_price":215.1,
1498
+ // "size":-124,
1499
+ // "time":1541486601,
1500
+ // "time_ms":1541486601123,
1501
+ // "contract":"BTC_USD",
1502
+ // "user":"1040xxxx"
1503
+ // }
1504
+ // ]
1505
+ // }
1506
+ // option
1507
+ // {
1508
+ // "channel":"options.liquidates",
1509
+ // "event":"update",
1510
+ // "time":1630654851,
1511
+ // "result":[
1512
+ // {
1513
+ // "user":"1xxxx",
1514
+ // "init_margin":1190,
1515
+ // "maint_margin":1042.5,
1516
+ // "order_margin":0,
1517
+ // "time":1639051907,
1518
+ // "time_ms":1639051907000
1519
+ // }
1520
+ // ]
1521
+ // }
1522
+ //
1523
+ const rawLiquidations = this.safeList(message, 'result', []);
1524
+ const newLiquidations = [];
1525
+ for (let i = 0; i < rawLiquidations.length; i++) {
1526
+ const rawLiquidation = rawLiquidations[i];
1527
+ const liquidation = this.parseWsLiquidation(rawLiquidation);
1528
+ const symbol = this.safeString(liquidation, 'symbol');
1529
+ let liquidations = this.safeValue(this.liquidations, symbol);
1530
+ if (liquidations === undefined) {
1531
+ const limit = this.safeInteger(this.options, 'liquidationsLimit', 1000);
1532
+ liquidations = new ArrayCache(limit);
1533
+ }
1534
+ liquidations.append(liquidation);
1535
+ this.liquidations[symbol] = liquidations;
1536
+ client.resolve(liquidations, 'myLiquidations::' + symbol);
1537
+ }
1538
+ client.resolve(newLiquidations, 'myLiquidations');
1539
+ }
1540
+ parseWsLiquidation(liquidation, market = undefined) {
1541
+ //
1542
+ // future / delivery
1543
+ // {
1544
+ // "entry_price": 209,
1545
+ // "fill_price": 215.1,
1546
+ // "left": 0,
1547
+ // "leverage": 0.0,
1548
+ // "liq_price": 213,
1549
+ // "margin": 0.007816722941,
1550
+ // "mark_price": 213,
1551
+ // "order_id": 4093362,
1552
+ // "order_price": 215.1,
1553
+ // "size": -124,
1554
+ // "time": 1541486601,
1555
+ // "time_ms": 1541486601123,
1556
+ // "contract": "BTC_USD",
1557
+ // "user": "1040xxxx"
1558
+ // }
1559
+ // option
1560
+ // {
1561
+ // "user": "1xxxx",
1562
+ // "init_margin": 1190,
1563
+ // "maint_margin": 1042.5,
1564
+ // "order_margin": 0,
1565
+ // "time": 1639051907,
1566
+ // "time_ms": 1639051907000
1567
+ // }
1568
+ //
1569
+ const marketId = this.safeString(liquidation, 'contract');
1570
+ market = this.safeMarket(marketId, market);
1571
+ const timestamp = this.safeInteger(liquidation, 'time_ms');
1572
+ const originalSize = this.safeString(liquidation, 'size');
1573
+ const left = this.safeString(liquidation, 'left');
1574
+ const amount = Precise.stringAbs(Precise.stringSub(originalSize, left));
1575
+ return this.safeLiquidation({
1576
+ 'info': liquidation,
1577
+ 'symbol': this.safeSymbol(marketId, market),
1578
+ 'contracts': this.parseNumber(amount),
1579
+ 'contractSize': this.safeNumber(market, 'contractSize'),
1580
+ 'price': this.safeNumber(liquidation, 'fill_price'),
1581
+ 'baseValue': undefined,
1582
+ 'quoteValue': undefined,
1583
+ 'timestamp': timestamp,
1584
+ 'datetime': this.iso8601(timestamp),
1585
+ });
1586
+ }
1587
+ handleErrorMessage(client, message) {
1588
+ //
1589
+ // {
1590
+ // "time": 1647274664,
1591
+ // "channel": "futures.orders",
1592
+ // "event": "subscribe",
1593
+ // "error": { code: 2, message: "unknown contract BTC_USDT_20220318" },
1594
+ // }
1595
+ // {
1596
+ // "time": 1647276473,
1597
+ // "channel": "futures.orders",
1598
+ // "event": "subscribe",
1599
+ // "error": {
1600
+ // "code": 4,
1601
+ // "message": "{"label":"INVALID_KEY","message":"Invalid key provided"}\n"
1602
+ // },
1603
+ // "result": null
1604
+ // }
1605
+ // {
1606
+ // header: {
1607
+ // response_time: '1718551891329',
1608
+ // status: '400',
1609
+ // channel: 'spot.order_place',
1610
+ // event: 'api',
1611
+ // client_id: '81.34.68.6-0xc16375e2c0',
1612
+ // conn_id: '9539116e0e09678f'
1613
+ // },
1614
+ // data: { errs: { label: 'AUTHENTICATION_FAILED', message: 'Not login' } },
1615
+ // request_id: '10406147'
1616
+ // }
1617
+ // {
1618
+ // "time": 1739853211,
1619
+ // "time_ms": 1739853211201,
1620
+ // "id": 1,
1621
+ // "conn_id": "62f2c1dabbe186d7",
1622
+ // "trace_id": "cdb02a8c0b61086b2fe6f8fad2f98c54",
1623
+ // "channel": "spot.trades",
1624
+ // "event": "subscribe",
1625
+ // "payload": [
1626
+ // "LUNARLENS_USDT",
1627
+ // "ETH_USDT"
1628
+ // ],
1629
+ // "error": {
1630
+ // "code": 2,
1631
+ // "message": "unknown currency pair: LUNARLENS_USDT"
1632
+ // },
1633
+ // "result": {
1634
+ // "status": "fail"
1635
+ // },
1636
+ // "requestId": "cdb02a8c0b61086b2fe6f8fad2f98c54"
1637
+ // }
1638
+ //
1639
+ const data = this.safeDict(message, 'data');
1640
+ const errs = this.safeDict(data, 'errs');
1641
+ const error = this.safeDict(message, 'error', errs);
1642
+ const code = this.safeString2(error, 'code', 'label');
1643
+ const id = this.safeStringN(message, ['id', 'requestId', 'request_id']);
1644
+ if (error !== undefined) {
1645
+ const messageHash = this.safeString(client.subscriptions, id);
1646
+ try {
1647
+ this.throwExactlyMatchedException(this.exceptions['ws']['exact'], code, this.json(message));
1648
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, this.json(errs));
1649
+ const errorMessage = this.safeString(error, 'message', this.safeString(errs, 'message'));
1650
+ this.throwBroadlyMatchedException(this.exceptions['ws']['broad'], errorMessage, this.json(message));
1651
+ throw new ExchangeError(this.json(message));
1652
+ }
1653
+ catch (e) {
1654
+ client.reject(e, messageHash);
1655
+ if ((messageHash !== undefined) && (messageHash in client.subscriptions)) {
1656
+ delete client.subscriptions[messageHash];
1657
+ }
1658
+ // remove subscriptions for watchSymbols
1659
+ const channel = this.safeString(message, 'channel');
1660
+ if ((channel !== undefined) && (channel.indexOf('.') > 0)) {
1661
+ const parsedChannel = channel.split('.');
1662
+ const payload = this.safeList(message, 'payload', []);
1663
+ for (let i = 0; i < payload.length; i++) {
1664
+ const marketType = parsedChannel[0] === 'futures' ? 'swap' : parsedChannel[0];
1665
+ const symbol = this.safeSymbol(payload[i], undefined, '_', marketType);
1666
+ const messageHashSymbol = parsedChannel[1] + ':' + symbol;
1667
+ if ((messageHashSymbol !== undefined) && (messageHashSymbol in client.subscriptions)) {
1668
+ delete client.subscriptions[messageHashSymbol];
1669
+ }
1670
+ }
1671
+ }
1672
+ }
1673
+ if ((id !== undefined) && (id in client.subscriptions)) {
1674
+ delete client.subscriptions[id];
1675
+ }
1676
+ return true;
1677
+ }
1678
+ return false;
1679
+ }
1680
+ handleBalanceSubscription(client, message, subscription = undefined) {
1681
+ this.balance = {};
1682
+ }
1683
+ handleSubscriptionStatus(client, message) {
1684
+ const channel = this.safeString(message, 'channel');
1685
+ const methods = {
1686
+ 'balance': this.handleBalanceSubscription,
1687
+ 'spot.order_book_update': this.handleOrderBookSubscription,
1688
+ 'futures.order_book_update': this.handleOrderBookSubscription,
1689
+ };
1690
+ const id = this.safeString(message, 'id');
1691
+ if (channel in methods) {
1692
+ const subscriptionHash = this.safeString(client.subscriptions, id);
1693
+ const subscription = this.safeValue(client.subscriptions, subscriptionHash);
1694
+ const method = methods[channel];
1695
+ method.call(this, client, message, subscription);
1696
+ }
1697
+ if (id in client.subscriptions) {
1698
+ delete client.subscriptions[id];
1699
+ }
1700
+ }
1701
+ handleUnSubscribe(client, message) {
1702
+ //
1703
+ // {
1704
+ // "time":1725534679,
1705
+ // "time_ms":1725534679786,
1706
+ // "id":2,
1707
+ // "conn_id":"fac539b443fd7002",
1708
+ // "trace_id":"efe1d282b630b4aa266b84bee177791a",
1709
+ // "channel":"spot.trades",
1710
+ // "event":"unsubscribe",
1711
+ // "payload":[
1712
+ // "LTC_USDT"
1713
+ // ],
1714
+ // "result":{
1715
+ // "status":"success"
1716
+ // },
1717
+ // "requestId":"efe1d282b630b4aa266b84bee177791a"
1718
+ // }
1719
+ //
1720
+ const id = this.safeString(message, 'id');
1721
+ const keys = Object.keys(client.subscriptions);
1722
+ for (let i = 0; i < keys.length; i++) {
1723
+ const messageHash = keys[i];
1724
+ if (!(messageHash in client.subscriptions)) {
1725
+ continue;
1726
+ // the previous iteration can have deleted the messageHash from the subscriptions
1727
+ }
1728
+ if (messageHash.startsWith('unsubscribe')) {
1729
+ const subscription = client.subscriptions[messageHash];
1730
+ const subId = this.safeString(subscription, 'id');
1731
+ if (id !== subId) {
1732
+ continue;
1733
+ }
1734
+ const messageHashes = this.safeList(subscription, 'messageHashes', []);
1735
+ const subMessageHashes = this.safeList(subscription, 'subMessageHashes', []);
1736
+ for (let j = 0; j < messageHashes.length; j++) {
1737
+ const unsubHash = messageHashes[j];
1738
+ const subHash = subMessageHashes[j];
1739
+ this.cleanUnsubscription(client, subHash, unsubHash);
1740
+ }
1741
+ this.cleanCache(subscription);
1742
+ }
1743
+ }
1744
+ }
1745
+ cleanCache(subscription) {
1746
+ const topic = this.safeString(subscription, 'topic', '');
1747
+ const symbols = this.safeList(subscription, 'symbols', []);
1748
+ const symbolsLength = symbols.length;
1749
+ if (topic === 'ohlcv') {
1750
+ const symbolsAndTimeFrames = this.safeList(subscription, 'symbolsAndTimeframes', []);
1751
+ for (let i = 0; i < symbolsAndTimeFrames.length; i++) {
1752
+ const symbolAndTimeFrame = symbolsAndTimeFrames[i];
1753
+ const symbol = this.safeString(symbolAndTimeFrame, 0);
1754
+ const timeframe = this.safeString(symbolAndTimeFrame, 1);
1755
+ delete this.ohlcvs[symbol][timeframe];
1756
+ }
1757
+ }
1758
+ else if (symbolsLength > 0) {
1759
+ for (let i = 0; i < symbols.length; i++) {
1760
+ const symbol = symbols[i];
1761
+ if (topic.endsWith('trades')) {
1762
+ delete this.trades[symbol];
1763
+ }
1764
+ else if (topic === 'orderbook') {
1765
+ delete this.orderbooks[symbol];
1766
+ }
1767
+ else if (topic === 'ticker') {
1768
+ delete this.tickers[symbol];
1769
+ }
1770
+ }
1771
+ }
1772
+ else {
1773
+ if (topic.endsWith('trades')) {
1774
+ // don't reset this.myTrades directly here
1775
+ // because in c# we need to use a different object
1776
+ const keys = Object.keys(this.trades);
1777
+ for (let i = 0; i < keys.length; i++) {
1778
+ delete this.trades[keys[i]];
1779
+ }
1780
+ }
1781
+ }
1782
+ }
1783
+ handleMessage(client, message) {
1784
+ //
1785
+ // subscribe
1786
+ // {
1787
+ // "time": 1649062304,
1788
+ // "id": 1649062303,
1789
+ // "channel": "spot.candlesticks",
1790
+ // "event": "subscribe",
1791
+ // "result": { status: "success" }
1792
+ // }
1793
+ //
1794
+ // candlestick
1795
+ // {
1796
+ // "time": 1649063328,
1797
+ // "channel": "spot.candlesticks",
1798
+ // "event": "update",
1799
+ // "result": {
1800
+ // "t": "1649063280",
1801
+ // "v": "58932.23174896",
1802
+ // "c": "45966.47",
1803
+ // "h": "45997.24",
1804
+ // "l": "45966.47",
1805
+ // "o": "45975.18",
1806
+ // "n": "1m_BTC_USDT",
1807
+ // "a": "1.281699"
1808
+ // }
1809
+ // }
1810
+ //
1811
+ // orders
1812
+ // {
1813
+ // "time": 1630654851,
1814
+ // "channel": "options.orders", or futures.orders or spot.orders
1815
+ // "event": "update",
1816
+ // "result": [
1817
+ // {
1818
+ // "contract": "BTC_USDT-20211130-65000-C",
1819
+ // "create_time": 1637897000,
1820
+ // (...)
1821
+ // ]
1822
+ // }
1823
+ // orderbook
1824
+ // {
1825
+ // "time": 1649770525,
1826
+ // "channel": "spot.order_book_update",
1827
+ // "event": "update",
1828
+ // "result": {
1829
+ // "t": 1649770525653,
1830
+ // "e": "depthUpdate",
1831
+ // "E": 1649770525,
1832
+ // "s": "LTC_USDT",
1833
+ // "U": 2622525645,
1834
+ // "u": 2622525665,
1835
+ // "b": [
1836
+ // [Array], [Array],
1837
+ // [Array], [Array],
1838
+ // [Array], [Array],
1839
+ // [Array], [Array],
1840
+ // [Array], [Array],
1841
+ // [Array]
1842
+ // ],
1843
+ // "a": [
1844
+ // [Array], [Array],
1845
+ // [Array], [Array],
1846
+ // [Array], [Array],
1847
+ // [Array], [Array],
1848
+ // [Array], [Array],
1849
+ // [Array]
1850
+ // ]
1851
+ // }
1852
+ // }
1853
+ //
1854
+ // balance update
1855
+ //
1856
+ // {
1857
+ // "time": 1653664351,
1858
+ // "channel": "spot.balances",
1859
+ // "event": "update",
1860
+ // "result": [
1861
+ // {
1862
+ // "timestamp": "1653664351",
1863
+ // "timestamp_ms": "1653664351017",
1864
+ // "user": "10406147",
1865
+ // "currency": "LTC",
1866
+ // "change": "-0.0002000000000000",
1867
+ // "total": "0.09986000000000000000",
1868
+ // "available": "0.09986000000000000000"
1869
+ // }
1870
+ // ]
1871
+ // }
1872
+ //
1873
+ if (this.handleErrorMessage(client, message)) {
1874
+ return;
1875
+ }
1876
+ const event = this.safeString(message, 'event');
1877
+ if (event === 'subscribe') {
1878
+ this.handleSubscriptionStatus(client, message);
1879
+ return;
1880
+ }
1881
+ if (event === 'unsubscribe') {
1882
+ this.handleUnSubscribe(client, message);
1883
+ return;
1884
+ }
1885
+ const channel = this.safeString(message, 'channel', '');
1886
+ const channelParts = channel.split('.');
1887
+ const channelType = this.safeValue(channelParts, 1);
1888
+ const v4Methods = {
1889
+ 'usertrades': this.handleMyTrades,
1890
+ 'candlesticks': this.handleOHLCV,
1891
+ 'orders': this.handleOrder,
1892
+ 'positions': this.handlePositions,
1893
+ 'tickers': this.handleTicker,
1894
+ 'book_ticker': this.handleBidAsk,
1895
+ 'trades': this.handleTrades,
1896
+ 'order_book_update': this.handleOrderBook,
1897
+ 'balances': this.handleBalance,
1898
+ 'liquidates': this.handleLiquidation,
1899
+ };
1900
+ const method = this.safeValue(v4Methods, channelType);
1901
+ if (method !== undefined) {
1902
+ method.call(this, client, message);
1903
+ }
1904
+ const requestId = this.safeString(message, 'request_id');
1905
+ if (requestId === 'authenticated') {
1906
+ this.handleAuthenticationMessage(client, message);
1907
+ return;
1908
+ }
1909
+ if (requestId !== undefined) {
1910
+ const data = this.safeDict(message, 'data');
1911
+ // use safeValue as result may be Array or an Object
1912
+ const result = this.safeValue(data, 'result');
1913
+ const ack = this.safeBool(message, 'ack');
1914
+ if (ack !== true) {
1915
+ client.resolve(result, requestId);
1916
+ }
1917
+ }
1918
+ }
1919
+ getUrlByMarket(market) {
1920
+ const baseUrl = this.urls['api'][market['type']];
1921
+ if (market['contract']) {
1922
+ return market['linear'] ? baseUrl['usdt'] : baseUrl['btc'];
1923
+ }
1924
+ else {
1925
+ return baseUrl;
1926
+ }
1927
+ }
1928
+ getTypeByMarket(market) {
1929
+ if (market['spot']) {
1930
+ return 'spot';
1931
+ }
1932
+ else if (market['option']) {
1933
+ return 'options';
1934
+ }
1935
+ else {
1936
+ return 'futures';
1937
+ }
1938
+ }
1939
+ getUrlByMarketType(type, isInverse = false) {
1940
+ const api = this.urls['api'];
1941
+ const url = api[type];
1942
+ if ((type === 'swap') || (type === 'future')) {
1943
+ return isInverse ? url['btc'] : url['usdt'];
1944
+ }
1945
+ else {
1946
+ return url;
1947
+ }
1948
+ }
1949
+ getMarketTypeByUrl(url) {
1950
+ const findBy = {
1951
+ 'op-': 'option',
1952
+ 'delivery': 'future',
1953
+ 'fx': 'swap',
1954
+ };
1955
+ const keys = Object.keys(findBy);
1956
+ for (let i = 0; i < keys.length; i++) {
1957
+ const key = keys[i];
1958
+ const value = findBy[key];
1959
+ if (url.indexOf(key) >= 0) {
1960
+ return value;
1961
+ }
1962
+ }
1963
+ return 'spot';
1964
+ }
1965
+ requestId() {
1966
+ // their support said that reqid must be an int32, not documented
1967
+ const reqid = this.sum(this.safeInteger(this.options, 'reqid', 0), 1);
1968
+ this.options['reqid'] = reqid;
1969
+ return reqid;
1970
+ }
1971
+ async subscribePublic(url, messageHash, payload, channel, params = {}, subscription = undefined) {
1972
+ const requestId = this.requestId();
1973
+ const time = this.seconds();
1974
+ const request = {
1975
+ 'id': requestId,
1976
+ 'time': time,
1977
+ 'channel': channel,
1978
+ 'event': 'subscribe',
1979
+ 'payload': payload,
1980
+ };
1981
+ if (subscription !== undefined) {
1982
+ const client = this.client(url);
1983
+ if (!(messageHash in client.subscriptions)) {
1984
+ const tempSubscriptionHash = requestId.toString();
1985
+ client.subscriptions[tempSubscriptionHash] = messageHash;
1986
+ }
1987
+ }
1988
+ const message = this.extend(request, params);
1989
+ return await this.watch(url, messageHash, message, messageHash, subscription);
1990
+ }
1991
+ async subscribePublicMultiple(url, messageHashes, payload, channel, params = {}) {
1992
+ const requestId = this.requestId();
1993
+ const time = this.seconds();
1994
+ const request = {
1995
+ 'id': requestId,
1996
+ 'time': time,
1997
+ 'channel': channel,
1998
+ 'event': 'subscribe',
1999
+ 'payload': payload,
2000
+ };
2001
+ const message = this.extend(request, params);
2002
+ return await this.watchMultiple(url, messageHashes, message, messageHashes);
2003
+ }
2004
+ async unSubscribePublicMultiple(url, topic, symbols, messageHashes, subMessageHashes, payload, channel, params = {}) {
2005
+ const requestId = this.requestId();
2006
+ const time = this.seconds();
2007
+ const request = {
2008
+ 'id': requestId,
2009
+ 'time': time,
2010
+ 'channel': channel,
2011
+ 'event': 'unsubscribe',
2012
+ 'payload': payload,
2013
+ };
2014
+ const sub = {
2015
+ 'id': requestId.toString(),
2016
+ 'topic': topic,
2017
+ 'unsubscribe': true,
2018
+ 'messageHashes': messageHashes,
2019
+ 'subMessageHashes': subMessageHashes,
2020
+ 'symbols': symbols,
2021
+ };
2022
+ const message = this.extend(request, params);
2023
+ return await this.watchMultiple(url, messageHashes, message, messageHashes, sub);
2024
+ }
2025
+ async authenticate(url, messageType) {
2026
+ const channel = messageType + '.login';
2027
+ const client = this.client(url);
2028
+ const messageHash = 'authenticated';
2029
+ const future = client.future(messageHash);
2030
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
2031
+ if (authenticated === undefined) {
2032
+ return await this.requestPrivate(url, {}, channel, messageHash);
2033
+ }
2034
+ return future;
2035
+ }
2036
+ handleAuthenticationMessage(client, message) {
2037
+ const messageHash = 'authenticated';
2038
+ const future = this.safeValue(client.futures, messageHash);
2039
+ future.resolve(true);
2040
+ }
2041
+ async requestPrivate(url, reqParams, channel, requestId = undefined) {
2042
+ this.checkRequiredCredentials();
2043
+ // uid is required for some subscriptions only so it's not a part of required credentials
2044
+ const event = 'api';
2045
+ if (requestId === undefined) {
2046
+ const reqId = this.requestId();
2047
+ requestId = reqId.toString();
2048
+ }
2049
+ const messageHash = requestId;
2050
+ const time = this.seconds();
2051
+ // unfortunately, PHP demands double quotes for the escaped newline symbol
2052
+ const signatureString = [event, channel, this.json(reqParams), time.toString()].join("\n"); // eslint-disable-line quotes
2053
+ const signature = this.hmac(this.encode(signatureString), this.encode(this.secret), sha512, 'hex');
2054
+ const payload = {
2055
+ 'req_id': requestId,
2056
+ 'timestamp': time.toString(),
2057
+ 'api_key': this.apiKey,
2058
+ 'signature': signature,
2059
+ 'req_param': reqParams,
2060
+ };
2061
+ if ((channel === 'spot.order_place') || (channel === 'futures.order_place')) {
2062
+ payload['req_header'] = {
2063
+ 'X-Gate-Channel-Id': 'ccxt',
2064
+ };
2065
+ }
2066
+ const request = {
2067
+ 'id': requestId,
2068
+ 'time': time,
2069
+ 'channel': channel,
2070
+ 'event': event,
2071
+ 'payload': payload,
2072
+ };
2073
+ return await this.watch(url, messageHash, request, messageHash, requestId);
2074
+ }
2075
+ async subscribePrivate(url, messageHash, payload, channel, params, requiresUid = false) {
2076
+ this.checkRequiredCredentials();
2077
+ // uid is required for some subscriptions only so it's not a part of required credentials
2078
+ if (requiresUid) {
2079
+ if (this.uid === undefined || this.uid.length === 0) {
2080
+ throw new ArgumentsRequired(this.id + ' requires uid to subscribe');
2081
+ }
2082
+ const idArray = [this.uid];
2083
+ if (payload === undefined) {
2084
+ payload = idArray;
2085
+ }
2086
+ else {
2087
+ payload = this.arrayConcat(idArray, payload);
2088
+ }
2089
+ }
2090
+ const time = this.seconds();
2091
+ const event = 'subscribe';
2092
+ const signaturePayload = 'channel=' + channel + '&' + 'event=' + event + '&' + 'time=' + time.toString();
2093
+ const signature = this.hmac(this.encode(signaturePayload), this.encode(this.secret), sha512, 'hex');
2094
+ const auth = {
2095
+ 'method': 'api_key',
2096
+ 'KEY': this.apiKey,
2097
+ 'SIGN': signature,
2098
+ };
2099
+ const requestId = this.requestId();
2100
+ const request = {
2101
+ 'id': requestId,
2102
+ 'time': time,
2103
+ 'channel': channel,
2104
+ 'event': event,
2105
+ 'auth': auth,
2106
+ };
2107
+ if (payload !== undefined) {
2108
+ request['payload'] = payload;
2109
+ }
2110
+ const client = this.client(url);
2111
+ if (!(messageHash in client.subscriptions)) {
2112
+ const tempSubscriptionHash = requestId.toString();
2113
+ // in case of authenticationError we will throw
2114
+ client.subscriptions[tempSubscriptionHash] = messageHash;
2115
+ }
2116
+ const message = this.extend(request, params);
2117
+ return await this.watch(url, messageHash, message, messageHash, messageHash);
2118
+ }
2119
+ }