ccxt 4.2.11 → 4.2.13

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 (392) hide show
  1. package/README.md +5 -5
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +1347 -490
  4. package/dist/ccxt.browser.min.js +3 -3
  5. package/dist/cjs/_virtual/agent.js +7 -0
  6. package/dist/cjs/_virtual/parse-proxy-response.js +7 -0
  7. package/dist/cjs/_virtual/promisify.js +7 -0
  8. package/dist/cjs/ccxt.js +1 -1
  9. package/dist/cjs/js/ccxt.js +474 -0
  10. package/dist/cjs/js/src/abstract/ace.js +9 -0
  11. package/dist/cjs/js/src/abstract/alpaca.js +9 -0
  12. package/dist/cjs/js/src/abstract/ascendex.js +9 -0
  13. package/dist/cjs/js/src/abstract/bigone.js +9 -0
  14. package/dist/cjs/js/src/abstract/binance.js +9 -0
  15. package/dist/cjs/js/src/abstract/bingx.js +9 -0
  16. package/dist/cjs/js/src/abstract/bit2c.js +9 -0
  17. package/dist/cjs/js/src/abstract/bitbank.js +9 -0
  18. package/dist/cjs/js/src/abstract/bitbns.js +9 -0
  19. package/dist/cjs/js/src/abstract/bitfinex.js +9 -0
  20. package/dist/cjs/js/src/abstract/bitfinex2.js +9 -0
  21. package/dist/cjs/js/src/abstract/bitflyer.js +9 -0
  22. package/dist/cjs/js/src/abstract/bitforex.js +9 -0
  23. package/dist/cjs/js/src/abstract/bitget.js +9 -0
  24. package/dist/cjs/js/src/abstract/bithumb.js +9 -0
  25. package/dist/cjs/js/src/abstract/bitmart.js +9 -0
  26. package/dist/cjs/js/src/abstract/bitmex.js +9 -0
  27. package/dist/cjs/js/src/abstract/bitopro.js +9 -0
  28. package/dist/cjs/js/src/abstract/bitpanda.js +9 -0
  29. package/dist/cjs/js/src/abstract/bitrue.js +9 -0
  30. package/dist/cjs/js/src/abstract/bitso.js +9 -0
  31. package/dist/cjs/js/src/abstract/bitstamp.js +9 -0
  32. package/dist/cjs/js/src/abstract/bitteam.js +9 -0
  33. package/dist/cjs/js/src/abstract/bitvavo.js +9 -0
  34. package/dist/cjs/js/src/abstract/bl3p.js +9 -0
  35. package/dist/cjs/js/src/abstract/blockchaincom.js +9 -0
  36. package/dist/cjs/js/src/abstract/btcalpha.js +9 -0
  37. package/dist/cjs/js/src/abstract/btcbox.js +9 -0
  38. package/dist/cjs/js/src/abstract/btcmarkets.js +9 -0
  39. package/dist/cjs/js/src/abstract/btcturk.js +9 -0
  40. package/dist/cjs/js/src/abstract/bybit.js +9 -0
  41. package/dist/cjs/js/src/abstract/cex.js +9 -0
  42. package/dist/cjs/js/src/abstract/coinbase.js +9 -0
  43. package/dist/cjs/js/src/abstract/coinbasepro.js +9 -0
  44. package/dist/cjs/js/src/abstract/coincheck.js +9 -0
  45. package/dist/cjs/js/src/abstract/coinex.js +9 -0
  46. package/dist/cjs/js/src/abstract/coinlist.js +9 -0
  47. package/dist/cjs/js/src/abstract/coinmate.js +9 -0
  48. package/dist/cjs/js/src/abstract/coinone.js +9 -0
  49. package/dist/cjs/js/src/abstract/coinsph.js +9 -0
  50. package/dist/cjs/js/src/abstract/coinspot.js +9 -0
  51. package/dist/cjs/js/src/abstract/cryptocom.js +9 -0
  52. package/dist/cjs/js/src/abstract/currencycom.js +9 -0
  53. package/dist/cjs/js/src/abstract/delta.js +9 -0
  54. package/dist/cjs/js/src/abstract/deribit.js +9 -0
  55. package/dist/cjs/js/src/abstract/digifinex.js +9 -0
  56. package/dist/cjs/js/src/abstract/exmo.js +9 -0
  57. package/dist/cjs/js/src/abstract/gate.js +9 -0
  58. package/dist/cjs/js/src/abstract/gemini.js +9 -0
  59. package/dist/cjs/js/src/abstract/hitbtc.js +9 -0
  60. package/dist/cjs/js/src/abstract/hollaex.js +9 -0
  61. package/dist/cjs/js/src/abstract/htx.js +9 -0
  62. package/dist/cjs/js/src/abstract/huobijp.js +9 -0
  63. package/dist/cjs/js/src/abstract/idex.js +9 -0
  64. package/dist/cjs/js/src/abstract/independentreserve.js +9 -0
  65. package/dist/cjs/js/src/abstract/indodax.js +9 -0
  66. package/dist/cjs/js/src/abstract/kraken.js +9 -0
  67. package/dist/cjs/js/src/abstract/krakenfutures.js +9 -0
  68. package/dist/cjs/js/src/abstract/kucoin.js +9 -0
  69. package/dist/cjs/js/src/abstract/kucoinfutures.js +9 -0
  70. package/dist/cjs/js/src/abstract/kuna.js +9 -0
  71. package/dist/cjs/js/src/abstract/latoken.js +9 -0
  72. package/dist/cjs/js/src/abstract/lbank.js +9 -0
  73. package/dist/cjs/js/src/abstract/luno.js +9 -0
  74. package/dist/cjs/js/src/abstract/lykke.js +9 -0
  75. package/dist/cjs/js/src/abstract/mercado.js +9 -0
  76. package/dist/cjs/js/src/abstract/mexc.js +9 -0
  77. package/dist/cjs/js/src/abstract/ndax.js +9 -0
  78. package/dist/cjs/js/src/abstract/novadax.js +9 -0
  79. package/dist/cjs/js/src/abstract/oceanex.js +9 -0
  80. package/dist/cjs/js/src/abstract/okcoin.js +9 -0
  81. package/dist/cjs/js/src/abstract/okx.js +9 -0
  82. package/dist/cjs/js/src/abstract/p2b.js +9 -0
  83. package/dist/cjs/js/src/abstract/paymium.js +9 -0
  84. package/dist/cjs/js/src/abstract/phemex.js +9 -0
  85. package/dist/cjs/js/src/abstract/poloniex.js +9 -0
  86. package/dist/cjs/js/src/abstract/poloniexfutures.js +9 -0
  87. package/dist/cjs/js/src/abstract/probit.js +9 -0
  88. package/dist/cjs/js/src/abstract/timex.js +9 -0
  89. package/dist/cjs/js/src/abstract/tokocrypto.js +9 -0
  90. package/dist/cjs/js/src/abstract/upbit.js +9 -0
  91. package/dist/cjs/js/src/abstract/wavesexchange.js +9 -0
  92. package/dist/cjs/js/src/abstract/wazirx.js +9 -0
  93. package/dist/cjs/js/src/abstract/whitebit.js +9 -0
  94. package/dist/cjs/js/src/abstract/woo.js +9 -0
  95. package/dist/cjs/js/src/abstract/yobit.js +9 -0
  96. package/dist/cjs/js/src/abstract/zaif.js +9 -0
  97. package/dist/cjs/js/src/abstract/zonda.js +9 -0
  98. package/dist/cjs/js/src/ace.js +1058 -0
  99. package/dist/cjs/js/src/alpaca.js +1125 -0
  100. package/dist/cjs/js/src/ascendex.js +3360 -0
  101. package/dist/cjs/js/src/base/Exchange.js +5110 -0
  102. package/dist/cjs/js/src/base/Precise.js +263 -0
  103. package/dist/cjs/js/src/base/errors.js +299 -0
  104. package/dist/cjs/js/src/base/functions/crypto.js +78 -0
  105. package/dist/cjs/js/src/base/functions/encode.js +44 -0
  106. package/dist/cjs/js/src/base/functions/generic.js +193 -0
  107. package/dist/cjs/js/src/base/functions/misc.js +96 -0
  108. package/dist/cjs/js/src/base/functions/number.js +297 -0
  109. package/dist/cjs/js/src/base/functions/platform.js +28 -0
  110. package/dist/cjs/js/src/base/functions/rsa.js +34 -0
  111. package/dist/cjs/js/src/base/functions/string.js +48 -0
  112. package/dist/cjs/js/src/base/functions/throttle.js +66 -0
  113. package/dist/cjs/js/src/base/functions/time.js +187 -0
  114. package/dist/cjs/js/src/base/functions/totp.js +24 -0
  115. package/dist/cjs/js/src/base/functions/type.js +162 -0
  116. package/dist/cjs/js/src/base/functions.js +157 -0
  117. package/dist/cjs/js/src/base/ws/Cache.js +254 -0
  118. package/dist/cjs/js/src/base/ws/Client.js +299 -0
  119. package/dist/cjs/js/src/base/ws/Future.js +34 -0
  120. package/dist/cjs/js/src/base/ws/OrderBook.js +107 -0
  121. package/dist/cjs/js/src/base/ws/OrderBookSide.js +281 -0
  122. package/dist/cjs/js/src/base/ws/WsClient.js +69 -0
  123. package/dist/cjs/js/src/bequant.js +33 -0
  124. package/dist/cjs/js/src/bigone.js +2209 -0
  125. package/dist/cjs/js/src/binance.js +9736 -0
  126. package/dist/cjs/js/src/binancecoinm.js +45 -0
  127. package/dist/cjs/js/src/binanceus.js +84 -0
  128. package/dist/cjs/js/src/binanceusdm.js +58 -0
  129. package/dist/cjs/js/src/bingx.js +3807 -0
  130. package/dist/cjs/js/src/bit2c.js +916 -0
  131. package/dist/cjs/js/src/bitbank.js +1000 -0
  132. package/dist/cjs/js/src/bitbay.js +17 -0
  133. package/dist/cjs/js/src/bitbns.js +1220 -0
  134. package/dist/cjs/js/src/bitcoincom.js +17 -0
  135. package/dist/cjs/js/src/bitfinex.js +1670 -0
  136. package/dist/cjs/js/src/bitfinex2.js +2990 -0
  137. package/dist/cjs/js/src/bitflyer.js +1045 -0
  138. package/dist/cjs/js/src/bitforex.js +852 -0
  139. package/dist/cjs/js/src/bitget.js +8291 -0
  140. package/dist/cjs/js/src/bithumb.js +1090 -0
  141. package/dist/cjs/js/src/bitmart.js +4454 -0
  142. package/dist/cjs/js/src/bitmex.js +2884 -0
  143. package/dist/cjs/js/src/bitopro.js +1724 -0
  144. package/dist/cjs/js/src/bitpanda.js +2002 -0
  145. package/dist/cjs/js/src/bitrue.js +3253 -0
  146. package/dist/cjs/js/src/bitso.js +1753 -0
  147. package/dist/cjs/js/src/bitstamp.js +2188 -0
  148. package/dist/cjs/js/src/bitteam.js +2309 -0
  149. package/dist/cjs/js/src/bitvavo.js +1968 -0
  150. package/dist/cjs/js/src/bl3p.js +447 -0
  151. package/dist/cjs/js/src/blockchaincom.js +1160 -0
  152. package/dist/cjs/js/src/btcalpha.js +929 -0
  153. package/dist/cjs/js/src/btcbox.js +565 -0
  154. package/dist/cjs/js/src/btcmarkets.js +1237 -0
  155. package/dist/cjs/js/src/btcturk.js +929 -0
  156. package/dist/cjs/js/src/bybit.js +7646 -0
  157. package/dist/cjs/js/src/cex.js +1693 -0
  158. package/dist/cjs/js/src/coinbase.js +3424 -0
  159. package/dist/cjs/js/src/coinbasepro.js +1866 -0
  160. package/dist/cjs/js/src/coincheck.js +843 -0
  161. package/dist/cjs/js/src/coinex.js +5414 -0
  162. package/dist/cjs/js/src/coinlist.js +2329 -0
  163. package/dist/cjs/js/src/coinmate.js +989 -0
  164. package/dist/cjs/js/src/coinone.js +1185 -0
  165. package/dist/cjs/js/src/coinsph.js +1933 -0
  166. package/dist/cjs/js/src/coinspot.js +548 -0
  167. package/dist/cjs/js/src/cryptocom.js +3007 -0
  168. package/dist/cjs/js/src/currencycom.js +2015 -0
  169. package/dist/cjs/js/src/delta.js +3256 -0
  170. package/dist/cjs/js/src/deribit.js +3306 -0
  171. package/dist/cjs/js/src/digifinex.js +4307 -0
  172. package/dist/cjs/js/src/exmo.js +2645 -0
  173. package/dist/cjs/js/src/fmfwio.js +34 -0
  174. package/dist/cjs/js/src/gate.js +7072 -0
  175. package/dist/cjs/js/src/gateio.js +16 -0
  176. package/dist/cjs/js/src/gemini.js +1801 -0
  177. package/dist/cjs/js/src/hitbtc.js +3660 -0
  178. package/dist/cjs/js/src/hitbtc3.js +19 -0
  179. package/dist/cjs/js/src/hollaex.js +1882 -0
  180. package/dist/cjs/js/src/htx.js +9049 -0
  181. package/dist/cjs/js/src/huobi.js +16 -0
  182. package/dist/cjs/js/src/huobijp.js +1918 -0
  183. package/dist/cjs/js/src/idex.js +1770 -0
  184. package/dist/cjs/js/src/independentreserve.js +761 -0
  185. package/dist/cjs/js/src/indodax.js +1069 -0
  186. package/dist/cjs/js/src/kraken.js +2857 -0
  187. package/dist/cjs/js/src/krakenfutures.js +2407 -0
  188. package/dist/cjs/js/src/kucoin.js +4489 -0
  189. package/dist/cjs/js/src/kucoinfutures.js +2475 -0
  190. package/dist/cjs/js/src/kuna.js +1949 -0
  191. package/dist/cjs/js/src/latoken.js +1729 -0
  192. package/dist/cjs/js/src/lbank.js +2851 -0
  193. package/dist/cjs/js/src/luno.js +1044 -0
  194. package/dist/cjs/js/src/lykke.js +1303 -0
  195. package/dist/cjs/js/src/mercado.js +897 -0
  196. package/dist/cjs/js/src/mexc.js +5407 -0
  197. package/dist/cjs/js/src/ndax.js +2450 -0
  198. package/dist/cjs/js/src/novadax.js +1556 -0
  199. package/dist/cjs/js/src/oceanex.js +964 -0
  200. package/dist/cjs/js/src/okcoin.js +3115 -0
  201. package/dist/cjs/js/src/okx.js +7330 -0
  202. package/dist/cjs/js/src/p2b.js +1243 -0
  203. package/dist/cjs/js/src/paymium.js +597 -0
  204. package/dist/cjs/js/src/phemex.js +4722 -0
  205. package/dist/cjs/js/src/poloniex.js +2356 -0
  206. package/dist/cjs/js/src/poloniexfutures.js +1794 -0
  207. package/dist/cjs/js/src/pro/alpaca.js +714 -0
  208. package/dist/cjs/js/src/pro/ascendex.js +957 -0
  209. package/dist/cjs/js/src/pro/bequant.js +33 -0
  210. package/dist/cjs/js/src/pro/binance.js +2796 -0
  211. package/dist/cjs/js/src/pro/binancecoinm.js +23 -0
  212. package/dist/cjs/js/src/pro/binanceus.js +51 -0
  213. package/dist/cjs/js/src/pro/binanceusdm.js +32 -0
  214. package/dist/cjs/js/src/pro/bingx.js +944 -0
  215. package/dist/cjs/js/src/pro/bitcoincom.js +29 -0
  216. package/dist/cjs/js/src/pro/bitfinex.js +672 -0
  217. package/dist/cjs/js/src/pro/bitfinex2.js +1159 -0
  218. package/dist/cjs/js/src/pro/bitget.js +1733 -0
  219. package/dist/cjs/js/src/pro/bitmart.js +1486 -0
  220. package/dist/cjs/js/src/pro/bitmex.js +1576 -0
  221. package/dist/cjs/js/src/pro/bitopro.js +327 -0
  222. package/dist/cjs/js/src/pro/bitpanda.js +1341 -0
  223. package/dist/cjs/js/src/pro/bitrue.js +462 -0
  224. package/dist/cjs/js/src/pro/bitstamp.js +547 -0
  225. package/dist/cjs/js/src/pro/bitvavo.js +704 -0
  226. package/dist/cjs/js/src/pro/blockchaincom.js +794 -0
  227. package/dist/cjs/js/src/pro/bybit.js +1843 -0
  228. package/dist/cjs/js/src/pro/cex.js +1510 -0
  229. package/dist/cjs/js/src/pro/coinbase.js +561 -0
  230. package/dist/cjs/js/src/pro/coinbasepro.js +968 -0
  231. package/dist/cjs/js/src/pro/coinex.js +1095 -0
  232. package/dist/cjs/js/src/pro/cryptocom.js +1020 -0
  233. package/dist/cjs/js/src/pro/currencycom.js +563 -0
  234. package/dist/cjs/js/src/pro/deribit.js +825 -0
  235. package/dist/cjs/js/src/pro/exmo.js +658 -0
  236. package/dist/cjs/js/src/pro/gate.js +1316 -0
  237. package/dist/cjs/js/src/pro/gateio.js +16 -0
  238. package/dist/cjs/js/src/pro/gemini.js +649 -0
  239. package/dist/cjs/js/src/pro/hitbtc.js +1293 -0
  240. package/dist/cjs/js/src/pro/hollaex.js +597 -0
  241. package/dist/cjs/js/src/pro/htx.js +2383 -0
  242. package/dist/cjs/js/src/pro/huobi.js +16 -0
  243. package/dist/cjs/js/src/pro/huobijp.js +606 -0
  244. package/dist/cjs/js/src/pro/idex.js +714 -0
  245. package/dist/cjs/js/src/pro/independentreserve.js +280 -0
  246. package/dist/cjs/js/src/pro/kraken.js +1364 -0
  247. package/dist/cjs/js/src/pro/krakenfutures.js +1500 -0
  248. package/dist/cjs/js/src/pro/kucoin.js +1052 -0
  249. package/dist/cjs/js/src/pro/kucoinfutures.js +981 -0
  250. package/dist/cjs/js/src/pro/luno.js +322 -0
  251. package/dist/cjs/js/src/pro/mexc.js +1170 -0
  252. package/dist/cjs/js/src/pro/ndax.js +545 -0
  253. package/dist/cjs/js/src/pro/okcoin.js +760 -0
  254. package/dist/cjs/js/src/pro/okx.js +1608 -0
  255. package/dist/cjs/js/src/pro/phemex.js +1511 -0
  256. package/dist/cjs/js/src/pro/poloniex.js +1253 -0
  257. package/dist/cjs/js/src/pro/poloniexfutures.js +1014 -0
  258. package/dist/cjs/js/src/pro/probit.js +586 -0
  259. package/dist/cjs/js/src/pro/upbit.js +234 -0
  260. package/dist/cjs/js/src/pro/wazirx.js +776 -0
  261. package/dist/cjs/js/src/pro/whitebit.js +927 -0
  262. package/dist/cjs/js/src/pro/woo.js +769 -0
  263. package/dist/cjs/js/src/probit.js +1867 -0
  264. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +401 -0
  265. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +195 -0
  266. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +308 -0
  267. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +554 -0
  268. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  269. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  270. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  271. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +16 -0
  272. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1760 -0
  273. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +52 -0
  274. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +81 -0
  275. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +376 -0
  276. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +70 -0
  277. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1580 -0
  278. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +74 -0
  279. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +24 -0
  280. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +158 -0
  281. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +429 -0
  282. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +176 -0
  283. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +324 -0
  284. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +163 -0
  285. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +245 -0
  286. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1018 -0
  287. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +383 -0
  288. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +258 -0
  289. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +53 -0
  290. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +120 -0
  291. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +69 -0
  292. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +7 -0
  293. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +83 -0
  294. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +240 -0
  295. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +91 -0
  296. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +130 -0
  297. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +214 -0
  298. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +239 -0
  299. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +93 -0
  300. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +354 -0
  301. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +16 -0
  302. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +20 -0
  303. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +30 -0
  304. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +239 -0
  305. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +372 -0
  306. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +273 -0
  307. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +139 -0
  308. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +14 -0
  309. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +16 -0
  310. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +81 -0
  311. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +292 -0
  312. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +103 -0
  313. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +140 -0
  314. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +175 -0
  315. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  316. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +7 -0
  317. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +383 -0
  318. package/dist/cjs/js/src/timex.js +1562 -0
  319. package/dist/cjs/js/src/tokocrypto.js +2542 -0
  320. package/dist/cjs/js/src/upbit.js +1844 -0
  321. package/dist/cjs/js/src/wavesexchange.js +2607 -0
  322. package/dist/cjs/js/src/wazirx.js +953 -0
  323. package/dist/cjs/js/src/whitebit.js +2309 -0
  324. package/dist/cjs/js/src/woo.js +2765 -0
  325. package/dist/cjs/js/src/yobit.js +1314 -0
  326. package/dist/cjs/js/src/zaif.js +736 -0
  327. package/dist/cjs/js/src/zonda.js +1883 -0
  328. package/js/ccxt.d.ts +1 -1
  329. package/js/ccxt.js +1 -1
  330. package/js/src/abstract/bigone.d.ts +18 -0
  331. package/js/src/abstract/binance.d.ts +2 -0
  332. package/js/src/abstract/binancecoinm.d.ts +2 -0
  333. package/js/src/abstract/binanceus.d.ts +2 -0
  334. package/js/src/abstract/binanceusdm.d.ts +2 -0
  335. package/js/src/abstract/bingx.d.ts +2 -0
  336. package/js/src/abstract/bybit.d.ts +1 -0
  337. package/js/src/abstract/gate.d.ts +11 -0
  338. package/js/src/abstract/gateio.d.ts +11 -0
  339. package/js/src/abstract/okx.d.ts +1 -0
  340. package/js/src/alpaca.js +18 -18
  341. package/js/src/base/Exchange.d.ts +5 -1
  342. package/js/src/base/Exchange.js +101 -12
  343. package/js/src/bigone.d.ts +3 -2
  344. package/js/src/bigone.js +429 -167
  345. package/js/src/binance.js +48 -34
  346. package/js/src/bingx.js +115 -38
  347. package/js/src/bitfinex.d.ts +2 -2
  348. package/js/src/bitfinex.js +2 -3
  349. package/js/src/bitget.js +33 -13
  350. package/js/src/bitmart.d.ts +2 -2
  351. package/js/src/bitmart.js +5 -5
  352. package/js/src/bitmex.js +1 -0
  353. package/js/src/bybit.js +2 -0
  354. package/js/src/coinbase.d.ts +26 -3
  355. package/js/src/coinbase.js +176 -26
  356. package/js/src/coinlist.js +3 -4
  357. package/js/src/coinone.js +1 -1
  358. package/js/src/coinsph.js +2 -3
  359. package/js/src/deribit.js +1 -0
  360. package/js/src/gate.d.ts +4 -4
  361. package/js/src/gate.js +96 -59
  362. package/js/src/gemini.js +1 -1
  363. package/js/src/hitbtc.d.ts +4 -4
  364. package/js/src/hitbtc.js +2 -3
  365. package/js/src/htx.d.ts +1 -0
  366. package/js/src/htx.js +29 -7
  367. package/js/src/huobijp.js +2 -3
  368. package/js/src/independentreserve.js +7 -5
  369. package/js/src/kraken.js +3 -6
  370. package/js/src/lbank.js +59 -33
  371. package/js/src/mexc.js +2 -1
  372. package/js/src/oceanex.js +1 -1
  373. package/js/src/okx.js +14 -3
  374. package/js/src/phemex.js +9 -2
  375. package/js/src/pro/binance.d.ts +2 -23
  376. package/js/src/pro/binance.js +58 -22
  377. package/js/src/pro/coinbase.d.ts +2 -2
  378. package/js/src/pro/coinbase.js +4 -1
  379. package/js/src/pro/coinbasepro.d.ts +2 -2
  380. package/js/src/pro/hitbtc.d.ts +2 -2
  381. package/js/src/pro/kraken.js +1 -1
  382. package/js/src/pro/okx.d.ts +1 -0
  383. package/js/src/pro/okx.js +52 -2
  384. package/js/src/pro/poloniex.d.ts +2 -2
  385. package/js/src/probit.js +4 -2
  386. package/js/src/upbit.d.ts +3 -101
  387. package/js/src/upbit.js +12 -12
  388. package/js/src/wavesexchange.js +1 -1
  389. package/js/src/woo.d.ts +2 -0
  390. package/js/src/woo.js +52 -0
  391. package/package.json +1 -1
  392. package/skip-tests.json +5 -0
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var gate = require('./gate.js');
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // ---------------------------------------------------------------------------
7
+ class gateio extends gate {
8
+ describe() {
9
+ return this.deepExtend(super.describe(), {
10
+ 'alias': true,
11
+ 'id': 'gateio',
12
+ });
13
+ }
14
+ }
15
+
16
+ module.exports = gateio;
@@ -0,0 +1,649 @@
1
+ 'use strict';
2
+
3
+ var gemini$1 = require('../gemini.js');
4
+ var Cache = require('../base/ws/Cache.js');
5
+ var errors = require('../base/errors.js');
6
+ var sha512 = require('../static_dependencies/noble-hashes/sha512.js');
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // ---------------------------------------------------------------------------
10
+ class gemini extends gemini$1 {
11
+ describe() {
12
+ return this.deepExtend(super.describe(), {
13
+ 'has': {
14
+ 'ws': true,
15
+ 'watchBalance': false,
16
+ 'watchTicker': false,
17
+ 'watchTickers': false,
18
+ 'watchTrades': true,
19
+ 'watchMyTrades': false,
20
+ 'watchOrders': true,
21
+ 'watchOrderBook': true,
22
+ 'watchOHLCV': true,
23
+ },
24
+ 'hostname': 'api.gemini.com',
25
+ 'urls': {
26
+ 'api': {
27
+ 'ws': 'wss://api.gemini.com',
28
+ },
29
+ 'test': {
30
+ 'ws': 'wss://api.sandbox.gemini.com',
31
+ },
32
+ },
33
+ });
34
+ }
35
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
36
+ /**
37
+ * @method
38
+ * @name gemini#watchTrades
39
+ * @description watch the list of most recent trades for a particular symbol
40
+ * @see https://docs.gemini.com/websocket-api/#market-data-version-2
41
+ * @param {string} symbol unified symbol of the market to fetch trades for
42
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
43
+ * @param {int} [limit] the maximum amount of trades to fetch
44
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
45
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
46
+ */
47
+ await this.loadMarkets();
48
+ const market = this.market(symbol);
49
+ const messageHash = 'trades:' + market['symbol'];
50
+ const marketId = market['id'];
51
+ const request = {
52
+ 'type': 'subscribe',
53
+ 'subscriptions': [
54
+ {
55
+ 'name': 'l2',
56
+ 'symbols': [
57
+ marketId.toUpperCase(),
58
+ ],
59
+ },
60
+ ],
61
+ };
62
+ const subscribeHash = 'l2:' + market['symbol'];
63
+ const url = this.urls['api']['ws'] + '/v2/marketdata';
64
+ const trades = await this.watch(url, messageHash, request, subscribeHash);
65
+ if (this.newUpdates) {
66
+ limit = trades.getLimit(market['symbol'], limit);
67
+ }
68
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
69
+ }
70
+ parseWsTrade(trade, market = undefined) {
71
+ //
72
+ // {
73
+ // "type": "trade",
74
+ // "symbol": "BTCUSD",
75
+ // "event_id": 122258166738,
76
+ // "timestamp": 1655330221424,
77
+ // "price": "22269.14",
78
+ // "quantity": "0.00004473",
79
+ // "side": "buy"
80
+ // }
81
+ //
82
+ const timestamp = this.safeInteger(trade, 'timestamp');
83
+ const id = this.safeString(trade, 'event_id');
84
+ const priceString = this.safeString(trade, 'price');
85
+ const amountString = this.safeString(trade, 'quantity');
86
+ const side = this.safeStringLower(trade, 'side');
87
+ const marketId = this.safeStringLower(trade, 'symbol');
88
+ const symbol = this.safeSymbol(marketId, market);
89
+ return this.safeTrade({
90
+ 'id': id,
91
+ 'order': undefined,
92
+ 'info': trade,
93
+ 'timestamp': timestamp,
94
+ 'datetime': this.iso8601(timestamp),
95
+ 'symbol': symbol,
96
+ 'type': undefined,
97
+ 'side': side,
98
+ 'takerOrMaker': undefined,
99
+ 'price': priceString,
100
+ 'cost': undefined,
101
+ 'amount': amountString,
102
+ 'fee': undefined,
103
+ }, market);
104
+ }
105
+ handleTrade(client, message) {
106
+ //
107
+ // {
108
+ // "type": "trade",
109
+ // "symbol": "BTCUSD",
110
+ // "event_id": 122278173770,
111
+ // "timestamp": 1655335880981,
112
+ // "price": "22530.80",
113
+ // "quantity": "0.04",
114
+ // "side": "buy"
115
+ // }
116
+ //
117
+ const trade = this.parseWsTrade(message);
118
+ const symbol = trade['symbol'];
119
+ const tradesLimit = this.safeInteger(this.options, 'tradesLimit', 1000);
120
+ let stored = this.safeValue(this.trades, symbol);
121
+ if (stored === undefined) {
122
+ stored = new Cache.ArrayCache(tradesLimit);
123
+ this.trades[symbol] = stored;
124
+ }
125
+ stored.append(trade);
126
+ const messageHash = 'trades:' + symbol;
127
+ client.resolve(stored, messageHash);
128
+ }
129
+ handleTrades(client, message) {
130
+ //
131
+ // {
132
+ // "type": "l2_updates",
133
+ // "symbol": "BTCUSD",
134
+ // "changes": [
135
+ // [ "buy", '22252.37', "0.02" ],
136
+ // [ "buy", '22251.61', "0.04" ],
137
+ // [ "buy", '22251.60', "0.04" ],
138
+ // // some asks as well
139
+ // ],
140
+ // "trades": [
141
+ // { type: 'trade', symbol: 'BTCUSD', event_id: 122258166738, timestamp: 1655330221424, price: '22269.14', quantity: "0.00004473", side: "buy" },
142
+ // { type: 'trade', symbol: 'BTCUSD', event_id: 122258141090, timestamp: 1655330213216, price: '22250.00', quantity: "0.00704098", side: "buy" },
143
+ // { type: 'trade', symbol: 'BTCUSD', event_id: 122258118291, timestamp: 1655330206753, price: '22250.00', quantity: "0.03", side: "buy" },
144
+ // ],
145
+ // "auction_events": [
146
+ // {
147
+ // "type": "auction_result",
148
+ // "symbol": "BTCUSD",
149
+ // "time_ms": 1655323200000,
150
+ // "result": "failure",
151
+ // "highest_bid_price": "21590.88",
152
+ // "lowest_ask_price": "21602.30",
153
+ // "collar_price": "21634.73"
154
+ // },
155
+ // {
156
+ // "type": "auction_indicative",
157
+ // "symbol": "BTCUSD",
158
+ // "time_ms": 1655323185000,
159
+ // "result": "failure",
160
+ // "highest_bid_price": "21661.90",
161
+ // "lowest_ask_price": "21663.79",
162
+ // "collar_price": "21662.845"
163
+ // },
164
+ // ]
165
+ // }
166
+ //
167
+ const marketId = this.safeStringLower(message, 'symbol');
168
+ const market = this.safeMarket(marketId);
169
+ const trades = this.safeValue(message, 'trades');
170
+ if (trades !== undefined) {
171
+ const symbol = market['symbol'];
172
+ const tradesLimit = this.safeInteger(this.options, 'tradesLimit', 1000);
173
+ let stored = this.safeValue(this.trades, symbol);
174
+ if (stored === undefined) {
175
+ stored = new Cache.ArrayCache(tradesLimit);
176
+ this.trades[symbol] = stored;
177
+ }
178
+ for (let i = 0; i < trades.length; i++) {
179
+ const trade = this.parseWsTrade(trades[i], market);
180
+ stored.append(trade);
181
+ }
182
+ const messageHash = 'trades:' + symbol;
183
+ client.resolve(stored, messageHash);
184
+ }
185
+ }
186
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
187
+ /**
188
+ * @method
189
+ * @name gemini#fetchOHLCV
190
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
191
+ * @see https://docs.gemini.com/websocket-api/#candles-data-feed
192
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
193
+ * @param {string} timeframe the length of time each candle represents
194
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
195
+ * @param {int} [limit] the maximum amount of candles to fetch
196
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
197
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
198
+ */
199
+ await this.loadMarkets();
200
+ const market = this.market(symbol);
201
+ const timeframeId = this.safeString(this.timeframes, timeframe, timeframe);
202
+ const request = {
203
+ 'type': 'subscribe',
204
+ 'subscriptions': [
205
+ {
206
+ 'name': 'candles_' + timeframeId,
207
+ 'symbols': [
208
+ market['id'].toUpperCase(),
209
+ ],
210
+ },
211
+ ],
212
+ };
213
+ const messageHash = 'ohlcv:' + market['symbol'] + ':' + timeframeId;
214
+ const url = this.urls['api']['ws'] + '/v2/marketdata';
215
+ const ohlcv = await this.watch(url, messageHash, request, messageHash);
216
+ if (this.newUpdates) {
217
+ limit = ohlcv.getLimit(symbol, limit);
218
+ }
219
+ return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
220
+ }
221
+ handleOHLCV(client, message) {
222
+ //
223
+ // {
224
+ // "type": "candles_15m_updates",
225
+ // "symbol": "BTCUSD",
226
+ // "changes": [
227
+ // [
228
+ // 1561054500000,
229
+ // 9350.18,
230
+ // 9358.35,
231
+ // 9350.18,
232
+ // 9355.51,
233
+ // 2.07
234
+ // ],
235
+ // [
236
+ // 1561053600000,
237
+ // 9357.33,
238
+ // 9357.33,
239
+ // 9350.18,
240
+ // 9350.18,
241
+ // 1.5900161
242
+ // ]
243
+ // ...
244
+ // ]
245
+ // }
246
+ //
247
+ const type = this.safeString(message, 'type', '');
248
+ let timeframeId = type.slice(8);
249
+ const timeframeEndIndex = timeframeId.indexOf('_');
250
+ timeframeId = timeframeId.slice(0, timeframeEndIndex);
251
+ const marketId = this.safeString(message, 'symbol', '').toLowerCase();
252
+ const market = this.safeMarket(marketId);
253
+ const symbol = this.safeSymbol(marketId, market);
254
+ const changes = this.safeValue(message, 'changes', []);
255
+ const timeframe = this.findTimeframe(timeframeId);
256
+ const ohlcvsBySymbol = this.safeValue(this.ohlcvs, symbol);
257
+ if (ohlcvsBySymbol === undefined) {
258
+ this.ohlcvs[symbol] = {};
259
+ }
260
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
261
+ if (stored === undefined) {
262
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
263
+ stored = new Cache.ArrayCacheByTimestamp(limit);
264
+ this.ohlcvs[symbol][timeframe] = stored;
265
+ }
266
+ const changesLength = changes.length;
267
+ // reverse order of array to store candles in ascending order
268
+ for (let i = 0; i < changesLength; i++) {
269
+ const index = changesLength - i - 1;
270
+ const parsed = this.parseOHLCV(changes[index], market);
271
+ stored.append(parsed);
272
+ }
273
+ const messageHash = 'ohlcv:' + symbol + ':' + timeframeId;
274
+ client.resolve(stored, messageHash);
275
+ return message;
276
+ }
277
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
278
+ /**
279
+ * @method
280
+ * @name gemini#watchOrderBook
281
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
282
+ * @see https://docs.gemini.com/websocket-api/#market-data-version-2
283
+ * @param {string} symbol unified symbol of the market to fetch the order book for
284
+ * @param {int} [limit] the maximum amount of order book entries to return
285
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
286
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
287
+ */
288
+ await this.loadMarkets();
289
+ const market = this.market(symbol);
290
+ const messageHash = 'orderbook:' + market['symbol'];
291
+ const marketId = market['id'];
292
+ const request = {
293
+ 'type': 'subscribe',
294
+ 'subscriptions': [
295
+ {
296
+ 'name': 'l2',
297
+ 'symbols': [
298
+ marketId.toUpperCase(),
299
+ ],
300
+ },
301
+ ],
302
+ };
303
+ const subscribeHash = 'l2:' + market['symbol'];
304
+ const url = this.urls['api']['ws'] + '/v2/marketdata';
305
+ const orderbook = await this.watch(url, messageHash, request, subscribeHash);
306
+ return orderbook.limit();
307
+ }
308
+ handleOrderBook(client, message) {
309
+ const changes = this.safeValue(message, 'changes', []);
310
+ const marketId = this.safeStringLower(message, 'symbol');
311
+ const market = this.safeMarket(marketId);
312
+ const symbol = market['symbol'];
313
+ const messageHash = 'orderbook:' + symbol;
314
+ let orderbook = this.safeValue(this.orderbooks, symbol);
315
+ if (orderbook === undefined) {
316
+ orderbook = this.orderBook();
317
+ }
318
+ for (let i = 0; i < changes.length; i++) {
319
+ const delta = changes[i];
320
+ const price = this.safeNumber(delta, 1);
321
+ const size = this.safeNumber(delta, 2);
322
+ const side = (delta[0] === 'buy') ? 'bids' : 'asks';
323
+ const bookside = orderbook[side];
324
+ bookside.store(price, size);
325
+ orderbook[side] = bookside;
326
+ }
327
+ orderbook['symbol'] = symbol;
328
+ this.orderbooks[symbol] = orderbook;
329
+ client.resolve(orderbook, messageHash);
330
+ }
331
+ handleL2Updates(client, message) {
332
+ //
333
+ // {
334
+ // "type": "l2_updates",
335
+ // "symbol": "BTCUSD",
336
+ // "changes": [
337
+ // [ "buy", '22252.37', "0.02" ],
338
+ // [ "buy", '22251.61', "0.04" ],
339
+ // [ "buy", '22251.60', "0.04" ],
340
+ // // some asks as well
341
+ // ],
342
+ // "trades": [
343
+ // { type: 'trade', symbol: 'BTCUSD', event_id: 122258166738, timestamp: 1655330221424, price: '22269.14', quantity: "0.00004473", side: "buy" },
344
+ // { type: 'trade', symbol: 'BTCUSD', event_id: 122258141090, timestamp: 1655330213216, price: '22250.00', quantity: "0.00704098", side: "buy" },
345
+ // { type: 'trade', symbol: 'BTCUSD', event_id: 122258118291, timestamp: 1655330206753, price: '22250.00', quantity: "0.03", side: "buy" },
346
+ // ],
347
+ // "auction_events": [
348
+ // {
349
+ // "type": "auction_result",
350
+ // "symbol": "BTCUSD",
351
+ // "time_ms": 1655323200000,
352
+ // "result": "failure",
353
+ // "highest_bid_price": "21590.88",
354
+ // "lowest_ask_price": "21602.30",
355
+ // "collar_price": "21634.73"
356
+ // },
357
+ // {
358
+ // "type": "auction_indicative",
359
+ // "symbol": "BTCUSD",
360
+ // "time_ms": 1655323185000,
361
+ // "result": "failure",
362
+ // "highest_bid_price": "21661.90",
363
+ // "lowest_ask_price": "21663.79",
364
+ // "collar_price": "21662.845"
365
+ // },
366
+ // ]
367
+ // }
368
+ //
369
+ this.handleOrderBook(client, message);
370
+ this.handleTrades(client, message);
371
+ }
372
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
373
+ /**
374
+ * @method
375
+ * @name gemini#fetchOrders
376
+ * @description watches information on multiple orders made by the user
377
+ * @see https://docs.gemini.com/websocket-api/#order-events
378
+ * @param {string} symbol unified market symbol of the market orders were made in
379
+ * @param {int} [since] the earliest time in ms to fetch orders for
380
+ * @param {int} [limit] the maximum number of order structures to retrieve
381
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
382
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
383
+ */
384
+ const url = this.urls['api']['ws'] + '/v1/order/events?eventTypeFilter=initial&eventTypeFilter=accepted&eventTypeFilter=rejected&eventTypeFilter=fill&eventTypeFilter=cancelled&eventTypeFilter=booked';
385
+ await this.loadMarkets();
386
+ const authParams = {
387
+ 'url': url,
388
+ };
389
+ await this.authenticate(authParams);
390
+ if (symbol !== undefined) {
391
+ const market = this.market(symbol);
392
+ symbol = market['symbol'];
393
+ }
394
+ const messageHash = 'orders';
395
+ const orders = await this.watch(url, messageHash, undefined, messageHash);
396
+ if (this.newUpdates) {
397
+ limit = orders.getLimit(symbol, limit);
398
+ }
399
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
400
+ }
401
+ handleHeartbeat(client, message) {
402
+ //
403
+ // {
404
+ // "type": "heartbeat",
405
+ // "timestampms": 1659740268958,
406
+ // "sequence": 7,
407
+ // "trace_id": "25b3d92476dd3a9a5c03c9bd9e0a0dba",
408
+ // "socket_sequence": 7
409
+ // }
410
+ //
411
+ return message;
412
+ }
413
+ handleSubscription(client, message) {
414
+ //
415
+ // {
416
+ // "type": "subscription_ack",
417
+ // "accountId": 19433282,
418
+ // "subscriptionId": "orderevents-websocket-25b3d92476dd3a9a5c03c9bd9e0a0dba",
419
+ // "symbolFilter": [],
420
+ // "apiSessionFilter": [],
421
+ // "eventTypeFilter": []
422
+ // }
423
+ //
424
+ return message;
425
+ }
426
+ handleOrder(client, message) {
427
+ //
428
+ // [
429
+ // {
430
+ // "type": "accepted",
431
+ // "order_id": "134150423884",
432
+ // "event_id": "134150423886",
433
+ // "account_name": "primary",
434
+ // "client_order_id": "1659739406916",
435
+ // "api_session": "account-pnBFSS0XKGvDamX4uEIt",
436
+ // "symbol": "batbtc",
437
+ // "side": "sell",
438
+ // "order_type": "exchange limit",
439
+ // "timestamp": "1659739407",
440
+ // "timestampms": 1659739407576,
441
+ // "is_live": true,
442
+ // "is_cancelled": false,
443
+ // "is_hidden": false,
444
+ // "original_amount": "1",
445
+ // "price": "1",
446
+ // "socket_sequence": 139
447
+ // }
448
+ // ]
449
+ //
450
+ const messageHash = 'orders';
451
+ if (this.orders === undefined) {
452
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
453
+ this.orders = new Cache.ArrayCacheBySymbolById(limit);
454
+ }
455
+ const orders = this.orders;
456
+ for (let i = 0; i < message.length; i++) {
457
+ const order = this.parseWsOrder(message[i]);
458
+ orders.append(order);
459
+ }
460
+ client.resolve(this.orders, messageHash);
461
+ }
462
+ parseWsOrder(order, market = undefined) {
463
+ //
464
+ // {
465
+ // "type": "accepted",
466
+ // "order_id": "134150423884",
467
+ // "event_id": "134150423886",
468
+ // "account_name": "primary",
469
+ // "client_order_id": "1659739406916",
470
+ // "api_session": "account-pnBFSS0XKGvDamX4uEIt",
471
+ // "symbol": "batbtc",
472
+ // "side": "sell",
473
+ // "order_type": "exchange limit",
474
+ // "timestamp": "1659739407",
475
+ // "timestampms": 1659739407576,
476
+ // "is_live": true,
477
+ // "is_cancelled": false,
478
+ // "is_hidden": false,
479
+ // "original_amount": "1",
480
+ // "price": "1",
481
+ // "socket_sequence": 139
482
+ // }
483
+ //
484
+ const timestamp = this.safeNumber(order, 'timestampms');
485
+ const status = this.safeString(order, 'type');
486
+ const marketId = this.safeString(order, 'symbol');
487
+ const typeId = this.safeString(order, 'order_type');
488
+ const behavior = this.safeString(order, 'behavior');
489
+ let timeInForce = 'GTC';
490
+ let postOnly = false;
491
+ if (behavior === 'immediate-or-cancel') {
492
+ timeInForce = 'IOC';
493
+ }
494
+ else if (behavior === 'fill-or-kill') {
495
+ timeInForce = 'FOK';
496
+ }
497
+ else if (behavior === 'maker-or-cancel') {
498
+ timeInForce = 'PO';
499
+ postOnly = true;
500
+ }
501
+ return this.safeOrder({
502
+ 'id': this.safeString(order, 'order_id'),
503
+ 'clientOrderId': this.safeString(order, 'client_order_id'),
504
+ 'info': order,
505
+ 'timestamp': timestamp,
506
+ 'datetime': this.iso8601(timestamp),
507
+ 'lastTradeTimestamp': undefined,
508
+ 'status': this.parseWsOrderStatus(status),
509
+ 'symbol': this.safeSymbol(marketId, market),
510
+ 'type': this.parseWsOrderType(typeId),
511
+ 'timeInForce': timeInForce,
512
+ 'postOnly': postOnly,
513
+ 'side': this.safeString(order, 'side'),
514
+ 'price': this.safeNumber(order, 'price'),
515
+ 'stopPrice': undefined,
516
+ 'average': this.safeNumber(order, 'avg_execution_price'),
517
+ 'cost': undefined,
518
+ 'amount': this.safeNumber(order, 'original_amount'),
519
+ 'filled': this.safeNumber(order, 'executed_amount'),
520
+ 'remaining': this.safeNumber(order, 'remaining_amount'),
521
+ 'fee': undefined,
522
+ 'trades': undefined,
523
+ }, market);
524
+ }
525
+ parseWsOrderStatus(status) {
526
+ const statuses = {
527
+ 'accepted': 'open',
528
+ 'booked': 'open',
529
+ 'fill': 'closed',
530
+ 'cancelled': 'canceled',
531
+ 'cancel_rejected': 'rejected',
532
+ 'rejected': 'rejected',
533
+ };
534
+ return this.safeString(statuses, status, status);
535
+ }
536
+ parseWsOrderType(type) {
537
+ const types = {
538
+ 'exchange limit': 'limit',
539
+ 'market buy': 'market',
540
+ 'market sell': 'market',
541
+ };
542
+ return this.safeString(types, type, type);
543
+ }
544
+ handleError(client, message) {
545
+ //
546
+ // {
547
+ // "reason": "NoValidTradingPairs",
548
+ // "result": "error"
549
+ // }
550
+ //
551
+ throw new errors.ExchangeError(this.json(message));
552
+ }
553
+ handleMessage(client, message) {
554
+ //
555
+ // public
556
+ // {
557
+ // "type": "trade",
558
+ // "symbol": "BTCUSD",
559
+ // "event_id": 122278173770,
560
+ // "timestamp": 1655335880981,
561
+ // "price": "22530.80",
562
+ // "quantity": "0.04",
563
+ // "side": "buy"
564
+ // }
565
+ //
566
+ // private
567
+ // [
568
+ // {
569
+ // "type": "accepted",
570
+ // "order_id": "134150423884",
571
+ // "event_id": "134150423886",
572
+ // "account_name": "primary",
573
+ // "client_order_id": "1659739406916",
574
+ // "api_session": "account-pnBFSS0XKGvDamX4uEIt",
575
+ // "symbol": "batbtc",
576
+ // "side": "sell",
577
+ // "order_type": "exchange limit",
578
+ // "timestamp": "1659739407",
579
+ // "timestampms": 1659739407576,
580
+ // "is_live": true,
581
+ // "is_cancelled": false,
582
+ // "is_hidden": false,
583
+ // "original_amount": "1",
584
+ // "price": "1",
585
+ // "socket_sequence": 139
586
+ // }
587
+ // ]
588
+ //
589
+ const isArray = Array.isArray(message);
590
+ if (isArray) {
591
+ return this.handleOrder(client, message);
592
+ }
593
+ const reason = this.safeString(message, 'reason');
594
+ if (reason === 'error') {
595
+ this.handleError(client, message);
596
+ }
597
+ const methods = {
598
+ 'l2_updates': this.handleL2Updates,
599
+ 'trade': this.handleTrade,
600
+ 'subscription_ack': this.handleSubscription,
601
+ 'heartbeat': this.handleHeartbeat,
602
+ };
603
+ const type = this.safeString(message, 'type', '');
604
+ if (type.indexOf('candles') >= 0) {
605
+ return this.handleOHLCV(client, message);
606
+ }
607
+ const method = this.safeValue(methods, type);
608
+ if (method !== undefined) {
609
+ method.call(this, client, message);
610
+ }
611
+ }
612
+ async authenticate(params = {}) {
613
+ const url = this.safeString(params, 'url');
614
+ if ((this.clients !== undefined) && (url in this.clients)) {
615
+ return;
616
+ }
617
+ this.checkRequiredCredentials();
618
+ const startIndex = this.urls['api']['ws'].length;
619
+ const urlParamsIndex = url.indexOf('?');
620
+ const urlLength = url.length;
621
+ const endIndex = (urlParamsIndex >= 0) ? urlParamsIndex : urlLength;
622
+ const request = url.slice(startIndex, endIndex);
623
+ const payload = {
624
+ 'request': request,
625
+ 'nonce': this.nonce(),
626
+ };
627
+ const b64 = this.stringToBase64(this.json(payload));
628
+ const signature = this.hmac(this.encode(b64), this.encode(this.secret), sha512.sha384, 'hex');
629
+ const defaultOptions = {
630
+ 'ws': {
631
+ 'options': {
632
+ 'headers': {},
633
+ },
634
+ },
635
+ };
636
+ this.options = this.extend(defaultOptions, this.options);
637
+ const originalHeaders = this.options['ws']['options']['headers'];
638
+ const headers = {
639
+ 'X-GEMINI-APIKEY': this.apiKey,
640
+ 'X-GEMINI-PAYLOAD': b64,
641
+ 'X-GEMINI-SIGNATURE': signature,
642
+ };
643
+ this.options['ws']['options']['headers'] = headers;
644
+ this.client(url);
645
+ this.options['ws']['options']['headers'] = originalHeaders;
646
+ }
647
+ }
648
+
649
+ module.exports = gemini;