ccxt 4.2.11 → 4.2.12

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 (375) hide show
  1. package/README.md +5 -5
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +640 -261
  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 +2142 -0
  125. package/dist/cjs/js/src/binance.js +9729 -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 +3737 -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 +8284 -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 +3274 -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 +7054 -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 +9024 -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 +759 -0
  185. package/dist/cjs/js/src/indodax.js +1069 -0
  186. package/dist/cjs/js/src/kraken.js +2861 -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 +2825 -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 +7329 -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 +4715 -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 +1558 -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 +1865 -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 +2715 -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/bybit.d.ts +1 -0
  336. package/js/src/abstract/gate.d.ts +11 -0
  337. package/js/src/abstract/gateio.d.ts +11 -0
  338. package/js/src/alpaca.js +18 -18
  339. package/js/src/base/Exchange.d.ts +5 -1
  340. package/js/src/base/Exchange.js +101 -12
  341. package/js/src/bigone.d.ts +1 -2
  342. package/js/src/bigone.js +340 -145
  343. package/js/src/binance.js +15 -8
  344. package/js/src/bingx.js +9 -2
  345. package/js/src/bitfinex.d.ts +2 -2
  346. package/js/src/bitfinex.js +2 -3
  347. package/js/src/bitget.js +21 -8
  348. package/js/src/bitmart.d.ts +2 -2
  349. package/js/src/bitmart.js +3 -3
  350. package/js/src/bitmex.js +1 -0
  351. package/js/src/bybit.js +2 -0
  352. package/js/src/coinlist.js +2 -3
  353. package/js/src/coinsph.js +2 -3
  354. package/js/src/deribit.js +1 -0
  355. package/js/src/gate.d.ts +4 -4
  356. package/js/src/gate.js +22 -3
  357. package/js/src/hitbtc.d.ts +4 -4
  358. package/js/src/hitbtc.js +2 -3
  359. package/js/src/htx.js +4 -7
  360. package/js/src/huobijp.js +2 -3
  361. package/js/src/kraken.js +1 -0
  362. package/js/src/mexc.js +2 -1
  363. package/js/src/okx.js +13 -3
  364. package/js/src/pro/binance.d.ts +2 -23
  365. package/js/src/pro/binance.js +58 -22
  366. package/js/src/pro/coinbase.d.ts +2 -2
  367. package/js/src/pro/coinbase.js +4 -1
  368. package/js/src/pro/coinbasepro.d.ts +2 -2
  369. package/js/src/pro/hitbtc.d.ts +2 -2
  370. package/js/src/pro/poloniex.d.ts +2 -2
  371. package/js/src/upbit.d.ts +3 -101
  372. package/js/src/upbit.js +12 -12
  373. package/js/src/woo.js +2 -0
  374. package/package.json +1 -1
  375. package/skip-tests.json +5 -0
@@ -0,0 +1,1243 @@
1
+ 'use strict';
2
+
3
+ var p2b$1 = require('./abstract/p2b.js');
4
+ var errors = require('./base/errors.js');
5
+ var number = require('./base/functions/number.js');
6
+ var sha512 = require('./static_dependencies/noble-hashes/sha512.js');
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * @class p2b
12
+ * @augments Exchange
13
+ */
14
+ class p2b extends p2b$1 {
15
+ describe() {
16
+ return this.deepExtend(super.describe(), {
17
+ 'id': 'p2b',
18
+ 'name': 'p2b',
19
+ 'countries': ['LT'],
20
+ 'rateLimit': 100,
21
+ 'version': 'v2',
22
+ 'has': {
23
+ 'CORS': undefined,
24
+ 'spot': true,
25
+ 'margin': false,
26
+ 'swap': false,
27
+ 'future': false,
28
+ 'option': false,
29
+ 'addMargin': false,
30
+ 'cancelAllOrders': false,
31
+ 'cancelOrder': true,
32
+ 'cancelOrders': false,
33
+ 'closeAllPositions': false,
34
+ 'closePosition': false,
35
+ 'createDepositAddress': false,
36
+ 'createMarketOrder': false,
37
+ 'createOrder': true,
38
+ 'createOrders': false,
39
+ 'createPostOnlyOrder': false,
40
+ 'createReduceOnlyOrder': false,
41
+ 'createStopLimitOrder': false,
42
+ 'createStopMarketOrder': false,
43
+ 'createStopOrder': false,
44
+ 'fetchAccounts': false,
45
+ 'fetchBalance': true,
46
+ 'fetchBorrowInterest': false,
47
+ 'fetchBorrowRateHistory': false,
48
+ 'fetchClosedOrders': true,
49
+ 'fetchCrossBorrowRate': false,
50
+ 'fetchCrossBorrowRates': false,
51
+ 'fetchDeposit': false,
52
+ 'fetchDepositAddress': false,
53
+ 'fetchDepositAddresses': false,
54
+ 'fetchDepositAddressesByNetwork': false,
55
+ 'fetchDeposits': false,
56
+ 'fetchDepositsWithdrawals': false,
57
+ 'fetchFundingHistory': false,
58
+ 'fetchFundingRate': false,
59
+ 'fetchFundingRateHistory': false,
60
+ 'fetchFundingRates': false,
61
+ 'fetchIndexOHLCV': false,
62
+ 'fetchIsolatedBorrowRate': false,
63
+ 'fetchIsolatedBorrowRates': false,
64
+ 'fetchLedger': false,
65
+ 'fetchLedgerEntry': false,
66
+ 'fetchLeverageTiers': false,
67
+ 'fetchMarketLeverageTiers': false,
68
+ 'fetchMarkets': true,
69
+ 'fetchMarkOHLCV': false,
70
+ 'fetchMyTrades': true,
71
+ 'fetchOHLCV': true,
72
+ 'fetchOpenInterest': false,
73
+ 'fetchOpenInterestHistory': false,
74
+ 'fetchOpenOrders': true,
75
+ 'fetchOrderBook': true,
76
+ 'fetchOrderBooks': false,
77
+ 'fetchOrders': true,
78
+ 'fetchOrderTrades': true,
79
+ 'fetchPermissions': false,
80
+ 'fetchPosition': false,
81
+ 'fetchPositions': false,
82
+ 'fetchPositionsForSymbol': false,
83
+ 'fetchPositionsRisk': false,
84
+ 'fetchPremiumIndexOHLCV': false,
85
+ 'fetchTicker': true,
86
+ 'fetchTickers': true,
87
+ 'fetchTrades': true,
88
+ 'fetchTradingLimits': false,
89
+ 'fetchTransactionFee': false,
90
+ 'fetchTransactionFees': false,
91
+ 'fetchTransactions': false,
92
+ 'fetchTransfers': false,
93
+ 'fetchWithdrawAddresses': false,
94
+ 'fetchWithdrawal': false,
95
+ 'fetchWithdrawals': false,
96
+ 'reduceMargin': false,
97
+ 'setLeverage': false,
98
+ 'setMargin': false,
99
+ 'setMarginMode': false,
100
+ 'setPositionMode': false,
101
+ 'signIn': false,
102
+ 'transfer': false,
103
+ 'withdraw': false,
104
+ },
105
+ 'timeframes': {
106
+ '1m': '1m',
107
+ '1h': '1h',
108
+ '1d': '1d',
109
+ },
110
+ 'urls': {
111
+ 'extension': '.json',
112
+ 'referral': 'https://p2pb2b.com?referral=ee784c53',
113
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/8da13a80-1f0a-49be-bb90-ff8b25164755',
114
+ 'api': {
115
+ 'public': 'https://api.p2pb2b.com/api/v2/public',
116
+ 'private': 'https://api.p2pb2b.com/api/v2',
117
+ },
118
+ 'www': 'https://p2pb2b.com/',
119
+ 'doc': 'https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md',
120
+ 'fees': 'https://p2pb2b.com/fee-schedule/',
121
+ },
122
+ 'api': {
123
+ 'public': {
124
+ 'get': {
125
+ 'markets': 1,
126
+ 'market': 1,
127
+ 'tickers': 1,
128
+ 'ticker': 1,
129
+ 'book': 1,
130
+ 'history': 1,
131
+ 'depth/result': 1,
132
+ 'market/kline': 1,
133
+ },
134
+ },
135
+ 'private': {
136
+ 'post': {
137
+ 'account/balances': 1,
138
+ 'account/balance': 1,
139
+ 'order/new': 1,
140
+ 'order/cancel': 1,
141
+ 'orders': 1,
142
+ 'account/market_order_history': 1,
143
+ 'account/market_deal_history': 1,
144
+ 'account/order': 1,
145
+ 'account/order_history': 1,
146
+ 'account/executed_history': 1,
147
+ },
148
+ },
149
+ },
150
+ 'fees': {
151
+ 'trading': {
152
+ 'tierBased': true,
153
+ 'percentage': true,
154
+ 'taker': [
155
+ [this.parseNumber('0'), this.parseNumber('0.2')],
156
+ [this.parseNumber('1'), this.parseNumber('0.19')],
157
+ [this.parseNumber('5'), this.parseNumber('0.18')],
158
+ [this.parseNumber('10'), this.parseNumber('0.17')],
159
+ [this.parseNumber('25'), this.parseNumber('0.16')],
160
+ [this.parseNumber('75'), this.parseNumber('0.15')],
161
+ [this.parseNumber('100'), this.parseNumber('0.14')],
162
+ [this.parseNumber('150'), this.parseNumber('0.13')],
163
+ [this.parseNumber('300'), this.parseNumber('0.12')],
164
+ [this.parseNumber('450'), this.parseNumber('0.11')],
165
+ [this.parseNumber('500'), this.parseNumber('0.1')],
166
+ ],
167
+ 'maker': [
168
+ [this.parseNumber('0'), this.parseNumber('0.2')],
169
+ [this.parseNumber('1'), this.parseNumber('0.18')],
170
+ [this.parseNumber('5'), this.parseNumber('0.16')],
171
+ [this.parseNumber('10'), this.parseNumber('0.14')],
172
+ [this.parseNumber('25'), this.parseNumber('0.12')],
173
+ [this.parseNumber('75'), this.parseNumber('0.1')],
174
+ [this.parseNumber('100'), this.parseNumber('0.08')],
175
+ [this.parseNumber('150'), this.parseNumber('0.06')],
176
+ [this.parseNumber('300'), this.parseNumber('0.04')],
177
+ [this.parseNumber('450'), this.parseNumber('0.02')],
178
+ [this.parseNumber('500'), this.parseNumber('0.01')],
179
+ ],
180
+ },
181
+ },
182
+ 'commonCurrencies': {},
183
+ 'precisionMode': number.TICK_SIZE,
184
+ 'exceptions': {
185
+ '1001': errors.AuthenticationError,
186
+ '1002': errors.AuthenticationError,
187
+ '1003': errors.AuthenticationError,
188
+ '1004': errors.AuthenticationError,
189
+ '1005': errors.AuthenticationError,
190
+ '1006': errors.AuthenticationError,
191
+ '1007': errors.AuthenticationError,
192
+ '1008': errors.AuthenticationError,
193
+ '1009': errors.AuthenticationError,
194
+ '1010': errors.AuthenticationError,
195
+ '1011': errors.AuthenticationError,
196
+ '1012': errors.AuthenticationError,
197
+ '1013': errors.AuthenticationError,
198
+ '1014': errors.AuthenticationError,
199
+ '1015': errors.AuthenticationError,
200
+ '1016': errors.AuthenticationError,
201
+ '2010': errors.BadRequest,
202
+ '2020': errors.BadRequest,
203
+ '2021': errors.BadRequest,
204
+ '2030': errors.BadRequest,
205
+ '2040': errors.InsufficientFunds,
206
+ '2050': errors.BadRequest,
207
+ '2051': errors.BadRequest,
208
+ '2052': errors.BadRequest,
209
+ '2060': errors.BadRequest,
210
+ '2061': errors.BadRequest,
211
+ '2062': errors.BadRequest,
212
+ '2070': errors.BadRequest,
213
+ '3001': errors.BadRequest,
214
+ '3020': errors.BadRequest,
215
+ '3030': errors.BadRequest,
216
+ '3040': errors.BadRequest,
217
+ '3050': errors.BadRequest,
218
+ '3060': errors.BadRequest,
219
+ '3070': errors.BadRequest,
220
+ '3080': errors.BadRequest,
221
+ '3090': errors.BadRequest,
222
+ '3100': errors.BadRequest,
223
+ '3110': errors.BadRequest,
224
+ '4001': errors.ExchangeNotAvailable,
225
+ '6010': errors.InsufficientFunds, // Balance not enough. Insufficient balance.
226
+ },
227
+ 'options': {},
228
+ });
229
+ }
230
+ async fetchMarkets(params = {}) {
231
+ /**
232
+ * @method
233
+ * @name p2b#fetchMarkets
234
+ * @description retrieves data on all markets for bigone
235
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#markets
236
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
237
+ * @returns {object[]} an array of objects representing market data
238
+ */
239
+ const response = await this.publicGetMarkets(params);
240
+ //
241
+ // {
242
+ // "success": true,
243
+ // "errorCode": "",
244
+ // "message": "",
245
+ // "result": [
246
+ // {
247
+ // "name": "ETH_BTC",
248
+ // "stock": "ETH",
249
+ // "money": "BTC",
250
+ // "precision": {
251
+ // "money": "6",
252
+ // "stock": "4",
253
+ // "fee": "4"
254
+ // },
255
+ // "limits": {
256
+ // "min_amount": "0.001",
257
+ // "max_amount": "100000",
258
+ // "step_size": "0.0001",
259
+ // "min_price": "0.00001",
260
+ // "max_price": "922327",
261
+ // "tick_size": "0.00001",
262
+ // "min_total": "0.0001"
263
+ // }
264
+ // },
265
+ // ...
266
+ // ]
267
+ // }
268
+ //
269
+ const markets = this.safeValue(response, 'result', []);
270
+ return this.parseMarkets(markets);
271
+ }
272
+ parseMarket(market) {
273
+ const marketId = this.safeString(market, 'name');
274
+ const baseId = this.safeString(market, 'stock');
275
+ const quoteId = this.safeString(market, 'money');
276
+ const base = this.safeCurrencyCode(baseId);
277
+ const quote = this.safeCurrencyCode(quoteId);
278
+ const limits = this.safeValue(market, 'limits');
279
+ const maxAmount = this.safeString(limits, 'max_amount');
280
+ const maxPrice = this.safeString(limits, 'max_price');
281
+ return {
282
+ 'id': marketId,
283
+ 'symbol': base + '/' + quote,
284
+ 'base': base,
285
+ 'quote': quote,
286
+ 'settle': undefined,
287
+ 'baseId': baseId,
288
+ 'quoteId': quoteId,
289
+ 'settleId': undefined,
290
+ 'type': 'spot',
291
+ 'spot': true,
292
+ 'margin': false,
293
+ 'swap': false,
294
+ 'future': false,
295
+ 'option': false,
296
+ 'active': true,
297
+ 'contract': false,
298
+ 'linear': undefined,
299
+ 'inverse': undefined,
300
+ 'contractSize': undefined,
301
+ 'expiry': undefined,
302
+ 'expiryDatetime': undefined,
303
+ 'strike': undefined,
304
+ 'optionType': undefined,
305
+ 'precision': {
306
+ 'amount': this.safeNumber(limits, 'step_size'),
307
+ 'price': this.safeNumber(limits, 'tick_size'),
308
+ },
309
+ 'limits': {
310
+ 'leverage': {
311
+ 'min': undefined,
312
+ 'max': undefined,
313
+ },
314
+ 'amount': {
315
+ 'min': this.safeNumber(limits, 'min_amount'),
316
+ 'max': this.parseNumber(this.omitZero(maxAmount)),
317
+ },
318
+ 'price': {
319
+ 'min': this.safeNumber(limits, 'min_price'),
320
+ 'max': this.parseNumber(this.omitZero(maxPrice)),
321
+ },
322
+ 'cost': {
323
+ 'min': undefined,
324
+ 'max': undefined,
325
+ },
326
+ },
327
+ 'created': undefined,
328
+ 'info': market,
329
+ };
330
+ }
331
+ async fetchTickers(symbols = undefined, params = {}) {
332
+ /**
333
+ * @method
334
+ * @name p2b#fetchTickers
335
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
336
+ * @see https://futures-docs.poloniex.com/#get-real-time-ticker-of-all-symbols
337
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
338
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
339
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
340
+ */
341
+ await this.loadMarkets();
342
+ const response = await this.publicGetTickers(params);
343
+ //
344
+ // {
345
+ // success: true,
346
+ // errorCode: '',
347
+ // message: '',
348
+ // result: {
349
+ // KNOLIX_BTC: {
350
+ // at: '1699252631',
351
+ // ticker: {
352
+ // bid: '0.0000332',
353
+ // ask: '0.0000333',
354
+ // low: '0.0000301',
355
+ // high: '0.0000338',
356
+ // last: '0.0000333',
357
+ // vol: '15.66',
358
+ // deal: '0.000501828',
359
+ // change: '10.63'
360
+ // }
361
+ // },
362
+ // ...
363
+ // },
364
+ // cache_time: '1699252631.103631',
365
+ // current_time: '1699252644.487566'
366
+ // }
367
+ //
368
+ const result = this.safeValue(response, 'result', {});
369
+ return this.parseTickers(result, symbols);
370
+ }
371
+ async fetchTicker(symbol, params = {}) {
372
+ /**
373
+ * @method
374
+ * @name p2b#fetchTicker
375
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
376
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#ticker
377
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
378
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
379
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
380
+ */
381
+ await this.loadMarkets();
382
+ const market = this.market(symbol);
383
+ const request = {
384
+ 'market': market['id'],
385
+ };
386
+ const response = await this.publicGetTicker(this.extend(request, params));
387
+ //
388
+ // {
389
+ // success: true,
390
+ // errorCode: '',
391
+ // message: '',
392
+ // result: {
393
+ // bid: '0.342',
394
+ // ask: '0.3421',
395
+ // open: '0.3317',
396
+ // high: '0.3499',
397
+ // low: '0.3311',
398
+ // last: '0.3421',
399
+ // volume: '17855383.1',
400
+ // deal: '6107478.3423',
401
+ // change: '3.13'
402
+ // },
403
+ // cache_time: '1699252953.832795',
404
+ // current_time: '1699252958.859391'
405
+ // }
406
+ //
407
+ const result = this.safeValue(response, 'result', {});
408
+ const timestamp = this.safeIntegerProduct(response, 'cache_time', 1000);
409
+ return this.extend({ 'timestamp': timestamp, 'datetime': this.iso8601(timestamp) }, this.parseTicker(result, market));
410
+ }
411
+ parseTicker(ticker, market = undefined) {
412
+ //
413
+ // parseTickers
414
+ //
415
+ // {
416
+ // at: '1699252631',
417
+ // ticker: {
418
+ // bid: '0.0000332',
419
+ // ask: '0.0000333',
420
+ // low: '0.0000301',
421
+ // high: '0.0000338',
422
+ // last: '0.0000333',
423
+ // vol: '15.66',
424
+ // deal: '0.000501828',
425
+ // change: '10.63'
426
+ // }
427
+ // }
428
+ //
429
+ // parseTicker
430
+ //
431
+ // {
432
+ // bid: '0.342',
433
+ // ask: '0.3421',
434
+ // open: '0.3317',
435
+ // high: '0.3499',
436
+ // low: '0.3311',
437
+ // last: '0.3421',
438
+ // volume: '17855383.1',
439
+ // deal: '6107478.3423',
440
+ // change: '3.13'
441
+ // }
442
+ //
443
+ const timestamp = this.safeIntegerProduct(ticker, 'at', 1000);
444
+ if ('ticker' in ticker) {
445
+ ticker = this.safeValue(ticker, 'ticker');
446
+ }
447
+ const last = this.safeString(ticker, 'last');
448
+ return this.safeTicker({
449
+ 'symbol': this.safeString(market, 'symbol'),
450
+ 'timestamp': timestamp,
451
+ 'datetime': this.iso8601(timestamp),
452
+ 'high': this.safeString(ticker, 'high'),
453
+ 'low': this.safeString(ticker, 'low'),
454
+ 'bid': this.safeString(ticker, 'bid'),
455
+ 'bidVolume': undefined,
456
+ 'ask': this.safeString(ticker, 'ask'),
457
+ 'askVolume': undefined,
458
+ 'vwap': undefined,
459
+ 'open': this.safeString(ticker, 'open'),
460
+ 'close': last,
461
+ 'last': last,
462
+ 'previousClose': undefined,
463
+ 'change': undefined,
464
+ 'percentage': this.safeString(ticker, 'change'),
465
+ 'average': undefined,
466
+ 'baseVolume': this.safeString2(ticker, 'vol', 'volume'),
467
+ 'quoteVolume': this.safeString(ticker, 'deal'),
468
+ 'info': ticker,
469
+ }, market);
470
+ }
471
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
472
+ /**
473
+ * @method
474
+ * @name p2bfutures#fetchOrderBook
475
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
476
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#depth-result
477
+ * @param {string} symbol unified symbol of the market to fetch the order book for
478
+ * @param {int} [limit] the maximum amount of order book entries to return
479
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
480
+ *
481
+ * EXCHANGE SPECIFIC PARAMETERS
482
+ * @param {string} [params.interval] 0 (default), 0.00000001, 0.0000001, 0.000001, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1
483
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
484
+ */
485
+ await this.loadMarkets();
486
+ const market = this.market(symbol);
487
+ const request = {
488
+ 'market': market['id'],
489
+ };
490
+ if (limit !== undefined) {
491
+ request['limit'] = limit;
492
+ }
493
+ const response = await this.publicGetDepthResult(this.extend(request, params));
494
+ //
495
+ // {
496
+ // "success": true,
497
+ // "errorCode": "",
498
+ // "message": "",
499
+ // "result": {
500
+ // "asks": [
501
+ // [
502
+ // "4.53", // Price
503
+ // "523.95" // Amount
504
+ // ],
505
+ // ...
506
+ // ],
507
+ // "bids": [
508
+ // [
509
+ // "4.51",
510
+ // "244.75"
511
+ // ],
512
+ // ...
513
+ // ]
514
+ // },
515
+ // "cache_time": 1698733470.469175,
516
+ // "current_time": 1698733470.469274
517
+ // }
518
+ //
519
+ const result = this.safeValue(response, 'result', {});
520
+ const timestamp = this.safeIntegerProduct(response, 'current_time', 1000);
521
+ return this.parseOrderBook(result, market['symbol'], timestamp, 'bids', 'asks', 0, 1);
522
+ }
523
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
524
+ /**
525
+ * @method
526
+ * @name p2b#fetchTrades
527
+ * @description get the list of most recent trades for a particular symbol
528
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#history
529
+ * @param {string} symbol unified symbol of the market to fetch trades for
530
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
531
+ * @param {int} [limit] 1-100, default=50
532
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
533
+ * @param {int} params.lastId order id
534
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
535
+ */
536
+ await this.loadMarkets();
537
+ const lastId = this.safeInteger(params, 'lastId');
538
+ if (lastId === undefined) {
539
+ throw new errors.ArgumentsRequired(this.id + ' fetchTrades () requires an extra parameter params["lastId"]');
540
+ }
541
+ const market = this.market(symbol);
542
+ const request = {
543
+ 'market': market['id'],
544
+ 'lastId': lastId,
545
+ };
546
+ if (limit !== undefined) {
547
+ request['limit'] = limit;
548
+ }
549
+ const response = await this.publicGetHistory(this.extend(request, params));
550
+ //
551
+ // {
552
+ // success: true,
553
+ // errorCode: '',
554
+ // message: '',
555
+ // result: [
556
+ // {
557
+ // id: '7495738622',
558
+ // type: 'sell',
559
+ // time: '1699255565.445418',
560
+ // amount: '252.6',
561
+ // price: '0.3422'
562
+ // },
563
+ // ...
564
+ // ],
565
+ // cache_time: '1699255571.413633',
566
+ // current_time: '1699255571.413828'
567
+ // }
568
+ //
569
+ const result = this.safeValue(response, 'result', []);
570
+ return this.parseTrades(result, market, since, limit);
571
+ }
572
+ parseTrade(trade, market = undefined) {
573
+ //
574
+ // fetchTrades
575
+ //
576
+ // {
577
+ // id: '7495738622',
578
+ // type: 'sell',
579
+ // time: '1699255565.445418',
580
+ // amount: '252.6',
581
+ // price: '0.3422'
582
+ // }
583
+ //
584
+ // fetchMyTrades
585
+ //
586
+ // {
587
+ // "deal_id": 7450617292, // Deal id
588
+ // "deal_time": 1698506956.66224, // Deal execution time
589
+ // "deal_order_id": 171955225751, // Deal order id
590
+ // "opposite_order_id": 171955110512, // Opposite order id
591
+ // "side": "sell", // Deal side
592
+ // "price": "0.05231", // Deal price
593
+ // "amount": "0.002", // Deal amount
594
+ // "deal": "0.00010462", // Total (price * amount)
595
+ // "deal_fee": "0.000000188316", // Deal fee
596
+ // "role": "taker", // Role. Taker or maker
597
+ // "isSelfTrade": false // is self trade
598
+ // }
599
+ //
600
+ // fetchOrderTrades
601
+ //
602
+ // {
603
+ // "id": 7429883128, // Deal id
604
+ // "time": 1698237535.41196, // Deal execution time
605
+ // "fee": "0.01755848704", // Deal fee
606
+ // "price": "34293.92", // Deal price
607
+ // "amount": "0.00032", // Deal amount
608
+ // "dealOrderId": 171366551416, // Deal order id
609
+ // "role": 1, // Deal role (1 - maker, 2 - taker)
610
+ // "deal": "10.9740544" // Total (price * amount)
611
+ // }
612
+ //
613
+ const timestamp = this.safeIntegerProduct2(trade, 'time', 'deal_time', 1000);
614
+ let takerOrMaker = this.safeString(trade, 'role');
615
+ if (takerOrMaker === '1') {
616
+ takerOrMaker = 'maker';
617
+ }
618
+ else if (takerOrMaker === '2') {
619
+ takerOrMaker = 'taker';
620
+ }
621
+ return this.safeTrade({
622
+ 'info': trade,
623
+ 'id': this.safeString2(trade, 'id', 'deal_id'),
624
+ 'timestamp': timestamp,
625
+ 'datetime': this.iso8601(timestamp),
626
+ 'symbol': this.safeString(market, 'symbol'),
627
+ 'order': this.safeString2(trade, 'dealOrderId', 'deal_order_id'),
628
+ 'type': undefined,
629
+ 'side': this.safeString2(trade, 'type', 'side'),
630
+ 'takerOrMaker': takerOrMaker,
631
+ 'price': this.safeString(trade, 'price'),
632
+ 'amount': this.safeString(trade, 'amount'),
633
+ 'cost': this.safeString(trade, 'deal'),
634
+ 'fee': {
635
+ 'currency': market['quote'],
636
+ 'cost': this.safeString2(trade, 'fee', 'deal_fee'),
637
+ },
638
+ }, market);
639
+ }
640
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
641
+ /**
642
+ * @method
643
+ * @name poloniexfutures#fetchOHLCV
644
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
645
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#kline
646
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
647
+ * @param {string} timeframe 1m, 1h, or 1d
648
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
649
+ * @param {int} [limit] 1-500, default=50
650
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
651
+ * @param {int} [params.offset] default=0, with this value the last candles are returned
652
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
653
+ */
654
+ await this.loadMarkets();
655
+ const market = this.market(symbol);
656
+ const request = {
657
+ 'market': market['id'],
658
+ 'interval': timeframe,
659
+ };
660
+ if (limit !== undefined) {
661
+ request['limit'] = limit;
662
+ }
663
+ const response = await this.publicGetMarketKline(this.extend(request, params));
664
+ //
665
+ // {
666
+ // success: true,
667
+ // errorCode: '',
668
+ // message: '',
669
+ // result: [
670
+ // [
671
+ // 1699253400, // Kline open time
672
+ // '0.3429', // Open price
673
+ // '0.3427', // Close price
674
+ // '0.3429', // Highest price
675
+ // '0.3427', // Lowest price
676
+ // '1900.4', // Volume for stock currency
677
+ // '651.46278', // Volume for money currency
678
+ // 'ADA_USDT' // Market name
679
+ // ],
680
+ // ...
681
+ // ],
682
+ // cache_time: '1699256375.030292',
683
+ // current_time: '1699256375.030494'
684
+ // }
685
+ //
686
+ const result = this.safeValue(response, 'result', []);
687
+ return this.parseOHLCVs(result, market, timeframe, since, limit);
688
+ }
689
+ parseOHLCV(ohlcv, market = undefined) {
690
+ //
691
+ // [
692
+ // 1699253400, // Kline open time
693
+ // '0.3429', // Open price
694
+ // '0.3427', // Close price
695
+ // '0.3429', // Highest price
696
+ // '0.3427', // Lowest price
697
+ // '1900.4', // Volume for stock currency
698
+ // '651.46278', // Volume for money currency
699
+ // 'ADA_USDT' // Market name
700
+ // ],
701
+ //
702
+ return [
703
+ this.safeIntegerProduct(ohlcv, 0, 1000),
704
+ this.safeNumber(ohlcv, 1),
705
+ this.safeNumber(ohlcv, 3),
706
+ this.safeNumber(ohlcv, 4),
707
+ this.safeNumber(ohlcv, 2),
708
+ this.safeNumber(ohlcv, 5),
709
+ ];
710
+ }
711
+ async fetchBalance(params = {}) {
712
+ /**
713
+ * @method
714
+ * @name p2b#fetchBalance
715
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
716
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#all-balances
717
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
718
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
719
+ */
720
+ await this.loadMarkets();
721
+ const response = await this.privatePostAccountBalances(params);
722
+ //
723
+ // {
724
+ // "success": true,
725
+ // "errorCode": "",
726
+ // "message": "",
727
+ // "result": {
728
+ // "USDT": {
729
+ // "available": "71.81328046",
730
+ // "freeze": "10.46103091"
731
+ // },
732
+ // "BTC": {
733
+ // "available": "0.00135674",
734
+ // "freeze": "0.00020003"
735
+ // }
736
+ // }
737
+ // }
738
+ //
739
+ const result = this.safeValue(response, 'result', {});
740
+ return this.parseBalance(result);
741
+ }
742
+ parseBalance(response) {
743
+ //
744
+ // {
745
+ // "USDT": {
746
+ // "available": "71.81328046",
747
+ // "freeze": "10.46103091"
748
+ // },
749
+ // "BTC": {
750
+ // "available": "0.00135674",
751
+ // "freeze": "0.00020003"
752
+ // }
753
+ // }
754
+ //
755
+ const result = {
756
+ 'info': response,
757
+ };
758
+ const keys = Object.keys(response);
759
+ for (let i = 0; i < keys.length; i++) {
760
+ const currencyId = keys[i];
761
+ const balance = response[currencyId];
762
+ const code = this.safeCurrencyCode(currencyId);
763
+ const used = this.safeString(balance, 'freeze');
764
+ const available = this.safeString(balance, 'available');
765
+ const account = {
766
+ 'free': available,
767
+ 'used': used,
768
+ };
769
+ result[code] = account;
770
+ }
771
+ return this.safeBalance(result);
772
+ }
773
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
774
+ /**
775
+ * @method
776
+ * @name p2b#createOrder
777
+ * @description create a trade order
778
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#create-order
779
+ * @param {string} symbol unified symbol of the market to create an order in
780
+ * @param {string} type must be 'limit'
781
+ * @param {string} side 'buy' or 'sell'
782
+ * @param {float} amount how much of currency you want to trade in units of base currency
783
+ * @param {float} price the price at which the order is to be fullfilled, in units of the quote currency
784
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
785
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
786
+ */
787
+ await this.loadMarkets();
788
+ if (type === 'market') {
789
+ throw new errors.BadRequest(this.id + ' createOrder () can only accept orders with type "limit"');
790
+ }
791
+ const market = this.market(symbol);
792
+ const request = {
793
+ 'market': market['id'],
794
+ 'side': side,
795
+ 'amount': this.amountToPrecision(symbol, amount),
796
+ 'price': this.priceToPrecision(symbol, price),
797
+ };
798
+ const response = await this.privatePostOrderNew(this.extend(request, params));
799
+ //
800
+ // {
801
+ // "success": true,
802
+ // "errorCode": "",
803
+ // "message": "",
804
+ // "result": {
805
+ // "orderId": 171906478744, // Order id
806
+ // "market": "ETH_BTC", // Market name
807
+ // "price": "0.04348", // Price
808
+ // "side": "buy", // Side
809
+ // "type": "limit", // Order type
810
+ // "timestamp": 1698484861.746517, // Order creation time
811
+ // "dealMoney": "0", // Filled total
812
+ // "dealStock": "0", // Filled amount
813
+ // "amount": "0.0277", // Original amount
814
+ // "takerFee": "0.002", // taker fee
815
+ // "makerFee": "0.002", // maker fee
816
+ // "left": "0.0277", // Unfilled amount
817
+ // "dealFee": "0" // Filled fee
818
+ // }
819
+ // }
820
+ //
821
+ const result = this.safeValue(response, 'result');
822
+ return this.parseOrder(result, market);
823
+ }
824
+ async cancelOrder(id, symbol = undefined, params = {}) {
825
+ /**
826
+ * @method
827
+ * @name p2b#cancelOrder
828
+ * @description cancels an open order
829
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#cancel-order
830
+ * @param {string} id order id
831
+ * @param {string} symbol unified symbol of the market the order was made in
832
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
833
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
834
+ */
835
+ if (symbol === undefined) {
836
+ throw new errors.ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
837
+ }
838
+ await this.loadMarkets();
839
+ const market = this.market(symbol);
840
+ const request = {
841
+ 'market': market['id'],
842
+ 'orderId': id,
843
+ };
844
+ const response = await this.privatePostOrderCancel(this.extend(request, params));
845
+ //
846
+ // {
847
+ // "success": true,
848
+ // "errorCode": "",
849
+ // "message": "",
850
+ // "result": {
851
+ // "orderId": 171906478744,
852
+ // "market": "ETH_BTC",
853
+ // "price": "0.04348",
854
+ // "side": "buy",
855
+ // "type": "limit",
856
+ // "timestamp": 1698484861.746517,
857
+ // "dealMoney": "0",
858
+ // "dealStock": "0",
859
+ // "amount": "0.0277",
860
+ // "takerFee": "0.002",
861
+ // "makerFee": "0.002",
862
+ // "left": "0.0277",
863
+ // "dealFee": "0"
864
+ // }
865
+ // }
866
+ //
867
+ const result = this.safeValue(response, 'result');
868
+ return this.parseOrder(result);
869
+ }
870
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
871
+ /**
872
+ * @method
873
+ * @name p2b#fetchOpenOrders
874
+ * @description fetch all unfilled currently open orders
875
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#open-orders
876
+ * @param {string} symbol unified market symbol of the market orders were made in
877
+ * @param {int} [since] the earliest time in ms to fetch orders for
878
+ * @param {int} [limit] the maximum number of order structures to retrieve
879
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
880
+ *
881
+ * EXCHANGE SPECIFIC PARAMETERS
882
+ * @param {int} [params.offset] 0-10000, default=0
883
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
884
+ */
885
+ if (symbol === undefined) {
886
+ throw new errors.ArgumentsRequired(this.id + ' fetchOpenOrders () requires the symbol argument');
887
+ }
888
+ await this.loadMarkets();
889
+ const market = this.market(symbol);
890
+ const request = {
891
+ 'market': market['id'],
892
+ };
893
+ if (limit !== undefined) {
894
+ request['limit'] = limit;
895
+ }
896
+ const response = await this.privatePostOrders(this.extend(request, params));
897
+ //
898
+ // {
899
+ // "success": true,
900
+ // "errorCode": "",
901
+ // "message": "",
902
+ // "result": [
903
+ // {
904
+ // "orderId": 171913325964,
905
+ // "market": "ETH_BTC",
906
+ // "price": "0.06534",
907
+ // "side": "sell",
908
+ // "type": "limit",
909
+ // "timestamp": 1698487986.836821,
910
+ // "dealMoney": "0",
911
+ // "dealStock": "0",
912
+ // "amount": "0.0018",
913
+ // "takerFee": "0.0018",
914
+ // "makerFee": "0.0016",
915
+ // "left": "0.0018",
916
+ // "dealFee": "0"
917
+ // },
918
+ // ...
919
+ // ]
920
+ // }
921
+ //
922
+ const result = this.safeValue(response, 'result', []);
923
+ return this.parseOrders(result, market, since, limit);
924
+ }
925
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
926
+ /**
927
+ * @method
928
+ * @name p2b#fetchOrderTrades
929
+ * @description fetch all the trades made from a single order
930
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#deals-by-order-id
931
+ * @param {string} id order id
932
+ * @param {string} symbol unified market symbol
933
+ * @param {int} [since] the earliest time in ms to fetch trades for
934
+ * @param {int} [limit] 1-100, default=50
935
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
936
+ *
937
+ * EXCHANGE SPECIFIC PARAMETERS
938
+ * @param {int} [params.offset] 0-10000, default=0
939
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
940
+ */
941
+ await this.loadMarkets();
942
+ const market = this.safeMarket(symbol);
943
+ const request = {
944
+ 'orderId': id,
945
+ };
946
+ if (limit !== undefined) {
947
+ request['limit'] = limit;
948
+ }
949
+ const response = await this.privatePostAccountOrder(this.extend(request, params));
950
+ //
951
+ // {
952
+ // "success": true,
953
+ // "errorCode": "",
954
+ // "message": "",
955
+ // "result": {
956
+ // "offset": 0,
957
+ // "limit": 50,
958
+ // "records": [
959
+ // {
960
+ // "id": 7429883128, // Deal id
961
+ // "time": 1698237535.41196, // Deal execution time
962
+ // "fee": "0.01755848704", // Deal fee
963
+ // "price": "34293.92", // Deal price
964
+ // "amount": "0.00032", // Deal amount
965
+ // "dealOrderId": 171366551416, // Deal order id
966
+ // "role": 1, // Deal role (1 - maker, 2 - taker)
967
+ // "deal": "10.9740544" // Total (price * amount)
968
+ // }
969
+ // ]
970
+ // }
971
+ // }
972
+ //
973
+ const result = this.safeValue(response, 'result', {});
974
+ const records = this.safeValue(result, 'records', []);
975
+ return this.parseTrades(records, market, since, limit);
976
+ }
977
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
978
+ /**
979
+ * @method
980
+ * @name p2b#fetchMyTrades
981
+ * @description fetch all trades made by the user, only the transaction records in the past 3 month can be queried, the time between since and params["until"] cannot be longer than 24 hours
982
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#deals-history-by-market
983
+ * @param {string} symbol unified market symbol of the market orders were made in
984
+ * @param {int} [since] the earliest time in ms to fetch orders for, default = params["until"] - 86400000
985
+ * @param {int} [limit] 1-100, default=50
986
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
987
+ * @param {int} [params.until] the latest time in ms to fetch orders for, default = current timestamp or since + 86400000
988
+ *
989
+ * EXCHANGE SPECIFIC PARAMETERS
990
+ * @param {int} [params.offset] 0-10000, default=0
991
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
992
+ */
993
+ if (symbol === undefined) {
994
+ throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
995
+ }
996
+ await this.loadMarkets();
997
+ let until = this.safeInteger(params, 'until');
998
+ params = this.omit(params, 'until');
999
+ if (until === undefined) {
1000
+ if (since === undefined) {
1001
+ until = this.milliseconds();
1002
+ }
1003
+ else {
1004
+ until = since + 86400000;
1005
+ }
1006
+ }
1007
+ if (since === undefined) {
1008
+ since = until - 86400000;
1009
+ }
1010
+ if ((until - since) > 86400000) {
1011
+ throw new errors.BadRequest(this.id + ' fetchMyTrades () the time between since and params["until"] cannot be greater than 24 hours');
1012
+ }
1013
+ const market = this.market(symbol);
1014
+ const request = {
1015
+ 'market': market['id'],
1016
+ 'startTime': this.parseToInt(since / 1000),
1017
+ 'endTime': this.parseToInt(until / 1000),
1018
+ };
1019
+ if (limit !== undefined) {
1020
+ request['limit'] = limit;
1021
+ }
1022
+ const response = await this.privatePostAccountMarketDealHistory(this.extend(request, params));
1023
+ //
1024
+ // {
1025
+ // "success": true,
1026
+ // "errorCode": "",
1027
+ // "message": "",
1028
+ // "result": {
1029
+ // "total": 2, // Total records in the queried range
1030
+ // "deals": [
1031
+ // {
1032
+ // "deal_id": 7450617292, // Deal id
1033
+ // "deal_time": 1698506956.66224, // Deal execution time
1034
+ // "deal_order_id": 171955225751, // Deal order id
1035
+ // "opposite_order_id": 171955110512, // Opposite order id
1036
+ // "side": "sell", // Deal side
1037
+ // "price": "0.05231", // Deal price
1038
+ // "amount": "0.002", // Deal amount
1039
+ // "deal": "0.00010462", // Total (price * amount)
1040
+ // "deal_fee": "0.000000188316", // Deal fee
1041
+ // "role": "taker", // Role. Taker or maker
1042
+ // "isSelfTrade": false // is self trade
1043
+ // },
1044
+ // ...
1045
+ // ]
1046
+ // }
1047
+ // }
1048
+ //
1049
+ const result = this.safeValue(response, 'result', {});
1050
+ const deals = this.safeValue(result, 'deals', []);
1051
+ return this.parseTrades(deals, market, since, limit);
1052
+ }
1053
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1054
+ /**
1055
+ * @method
1056
+ * @name p2b#fetchClosedOrders
1057
+ * @description fetches information on multiple closed orders made by the user, the time between since and params["untnil"] cannot be longer than 24 hours
1058
+ * @see https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#orders-history-by-market
1059
+ * @param {string} symbol unified market symbol of the market orders were made in
1060
+ * @param {int} [since] the earliest time in ms to fetch orders for, default = params["until"] - 86400000
1061
+ * @param {int} [limit] 1-100, default=50
1062
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1063
+ * @param {int} [params.until] the latest time in ms to fetch orders for, default = current timestamp or since + 86400000
1064
+ *
1065
+ * EXCHANGE SPECIFIC PARAMETERS
1066
+ * @param {int} [params.offset] 0-10000, default=0
1067
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1068
+ */
1069
+ await this.loadMarkets();
1070
+ let until = this.safeInteger(params, 'until');
1071
+ params = this.omit(params, 'until');
1072
+ let market = undefined;
1073
+ if (symbol !== undefined) {
1074
+ market = this.market(symbol);
1075
+ }
1076
+ if (until === undefined) {
1077
+ if (since === undefined) {
1078
+ until = this.milliseconds();
1079
+ }
1080
+ else {
1081
+ until = since + 86400000;
1082
+ }
1083
+ }
1084
+ if (since === undefined) {
1085
+ since = until - 86400000;
1086
+ }
1087
+ if ((until - since) > 86400000) {
1088
+ throw new errors.BadRequest(this.id + ' fetchClosedOrders () the time between since and params["until"] cannot be greater than 24 hours');
1089
+ }
1090
+ const request = {
1091
+ 'startTime': this.parseToInt(since / 1000),
1092
+ 'endTime': this.parseToInt(until / 1000),
1093
+ };
1094
+ if (market !== undefined) {
1095
+ request['market'] = market['id'];
1096
+ }
1097
+ if (limit !== undefined) {
1098
+ request['limit'] = limit;
1099
+ }
1100
+ const response = await this.privatePostAccountOrderHistory(this.extend(request, params));
1101
+ //
1102
+ // {
1103
+ // "success": true,
1104
+ // "errorCode": "",
1105
+ // "message": "",
1106
+ // "result": {
1107
+ // "LTC_USDT": [
1108
+ // {
1109
+ // "id": 173985944395,
1110
+ // "amount": "0.1",
1111
+ // "price": "73",
1112
+ // "type": "limit",
1113
+ // "side": "sell",
1114
+ // "ctime": 1699436194.390845,
1115
+ // "ftime": 1699436194.390847,
1116
+ // "market": "LTC_USDT",
1117
+ // "takerFee": "0.002",
1118
+ // "makerFee": "0.002",
1119
+ // "dealFee": "0.01474",
1120
+ // "dealStock": "0.1",
1121
+ // "dealMoney": "7.37"
1122
+ // }
1123
+ // ]
1124
+ // }
1125
+ // }
1126
+ //
1127
+ const result = this.safeValue(response, 'result');
1128
+ let orders = [];
1129
+ const keys = Object.keys(result);
1130
+ for (let i = 0; i < keys.length; i++) {
1131
+ const marketId = keys[i];
1132
+ const marketOrders = result[marketId];
1133
+ const parsedOrders = this.parseOrders(marketOrders, market, since, limit);
1134
+ orders = this.arrayConcat(orders, parsedOrders);
1135
+ }
1136
+ return orders;
1137
+ }
1138
+ parseOrder(order, market = undefined) {
1139
+ //
1140
+ // cancelOrder, fetchOpenOrders, createOrder
1141
+ //
1142
+ // {
1143
+ // "orderId": 171906478744,
1144
+ // "market": "ETH_BTC",
1145
+ // "price": "0.04348",
1146
+ // "side": "buy",
1147
+ // "type": "limit",
1148
+ // "timestamp": 1698484861.746517,
1149
+ // "dealMoney": "0",
1150
+ // "dealStock": "0",
1151
+ // "amount": "0.0277",
1152
+ // "takerFee": "0.002",
1153
+ // "makerFee": "0.002",
1154
+ // "left": "0.0277",
1155
+ // "dealFee": "0"
1156
+ // }
1157
+ //
1158
+ // fetchClosedOrders
1159
+ //
1160
+ // {
1161
+ // "id": 171366547790, // Order id
1162
+ // "amount": "0.00032", // Original amount
1163
+ // "price": "34293.92", // Order price
1164
+ // "type": "limit", // Order type
1165
+ // "side": "sell", // Order side
1166
+ // "ctime": 1698237533.497241, // Order creation time
1167
+ // "ftime": 1698237535.41196, // Order fill time
1168
+ // "market": "BTC_USDT", // Market name
1169
+ // "takerFee": "0.0018", // Taker fee
1170
+ // "makerFee": "0.0016", // Market fee
1171
+ // "dealFee": "0.01755848704", // Deal fee
1172
+ // "dealStock": "0.00032", // Filled amount
1173
+ // "dealMoney": "10.9740544" // Filled total
1174
+ // }
1175
+ //
1176
+ const timestamp = this.safeIntegerProduct2(order, 'timestamp', 'ctime', 1000);
1177
+ const marketId = this.safeString(order, 'market');
1178
+ market = this.safeMarket(marketId, market);
1179
+ return this.safeOrder({
1180
+ 'info': order,
1181
+ 'id': this.safeString2(order, 'id', 'orderId'),
1182
+ 'clientOrderId': undefined,
1183
+ 'timestamp': timestamp,
1184
+ 'datetime': this.iso8601(timestamp),
1185
+ 'lastTradeTimestamp': undefined,
1186
+ 'symbol': market['symbol'],
1187
+ 'type': this.safeString(order, 'type'),
1188
+ 'timeInForce': undefined,
1189
+ 'postOnly': undefined,
1190
+ 'side': this.safeString(order, 'side'),
1191
+ 'price': this.safeString(order, 'price'),
1192
+ 'stopPrice': undefined,
1193
+ 'amount': this.safeString(order, 'amount'),
1194
+ 'cost': undefined,
1195
+ 'average': undefined,
1196
+ 'filled': this.safeString(order, 'dealStock'),
1197
+ 'remaining': this.safeString(order, 'left'),
1198
+ 'status': undefined,
1199
+ 'fee': {
1200
+ 'currency': market['quote'],
1201
+ 'cost': this.safeString(order, 'dealFee'),
1202
+ },
1203
+ 'trades': undefined,
1204
+ }, market);
1205
+ }
1206
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1207
+ let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
1208
+ params = this.omit(params, this.extractParams(path));
1209
+ if (method === 'GET') {
1210
+ if (Object.keys(params).length) {
1211
+ url += '?' + this.urlencode(params);
1212
+ }
1213
+ }
1214
+ if (api === 'private') {
1215
+ params['request'] = '/api/v2/' + path;
1216
+ params['nonce'] = this.nonce().toString();
1217
+ const payload = this.stringToBase64(this.json(params)); // Body json encoded in base64
1218
+ headers = {
1219
+ 'Content-Type': 'application/json',
1220
+ 'X-TXC-APIKEY': this.apiKey,
1221
+ 'X-TXC-PAYLOAD': payload,
1222
+ 'X-TXC-SIGNATURE': this.hmac(this.encode(payload), this.encode(this.secret), sha512.sha512),
1223
+ };
1224
+ body = this.json(params);
1225
+ }
1226
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
1227
+ }
1228
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
1229
+ if (response === undefined) {
1230
+ return undefined;
1231
+ }
1232
+ if (code === 400) {
1233
+ const error = this.safeValue(response, 'error');
1234
+ const errorCode = this.safeString(error, 'code');
1235
+ const feedback = this.id + ' ' + this.json(response);
1236
+ this.throwExactlyMatchedException(this.exceptions, errorCode, feedback);
1237
+ // fallback to default error handler
1238
+ }
1239
+ return undefined;
1240
+ }
1241
+ }
1242
+
1243
+ module.exports = p2b;