ccxt 4.1.51 → 4.1.53

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 (319) hide show
  1. package/README.md +108 -113
  2. package/dist/ccxt.browser.js +2295 -5268
  3. package/dist/ccxt.browser.min.js +3 -3
  4. package/dist/cjs/ccxt.js +1 -13
  5. package/dist/cjs/src/ace.js +56 -59
  6. package/dist/cjs/src/alpaca.js +62 -64
  7. package/dist/cjs/src/ascendex.js +1 -0
  8. package/dist/cjs/src/base/Exchange.js +11 -11
  9. package/dist/cjs/src/bigone.js +60 -77
  10. package/dist/cjs/src/binance.js +1 -0
  11. package/dist/cjs/src/bingx.js +52 -19
  12. package/dist/cjs/src/bitbank.js +58 -59
  13. package/dist/cjs/src/bitbns.js +1 -0
  14. package/dist/cjs/src/bitfinex.js +1 -0
  15. package/dist/cjs/src/bitfinex2.js +1 -0
  16. package/dist/cjs/src/bitflyer.js +1 -0
  17. package/dist/cjs/src/bitget.js +3 -8
  18. package/dist/cjs/src/bithumb.js +1 -0
  19. package/dist/cjs/src/bitmart.js +10 -1
  20. package/dist/cjs/src/bitmex.js +114 -119
  21. package/dist/cjs/src/bitopro.js +63 -65
  22. package/dist/cjs/src/bitpanda.js +60 -60
  23. package/dist/cjs/src/bitrue.js +67 -71
  24. package/dist/cjs/src/bitso.js +1 -0
  25. package/dist/cjs/src/bitstamp.js +1 -0
  26. package/dist/cjs/src/bittrex.js +57 -57
  27. package/dist/cjs/src/bitvavo.js +10 -2
  28. package/dist/cjs/src/blockchaincom.js +2 -2
  29. package/dist/cjs/src/btcalpha.js +59 -60
  30. package/dist/cjs/src/btcmarkets.js +68 -69
  31. package/dist/cjs/src/btcturk.js +72 -74
  32. package/dist/cjs/src/bybit.js +5 -12
  33. package/dist/cjs/src/coinbase.js +7 -2
  34. package/dist/cjs/src/coinbasepro.js +1 -0
  35. package/dist/cjs/src/coincheck.js +1 -0
  36. package/dist/cjs/src/coinex.js +4 -0
  37. package/dist/cjs/src/coinlist.js +60 -60
  38. package/dist/cjs/src/coinmate.js +1 -0
  39. package/dist/cjs/src/coinsph.js +2 -4
  40. package/dist/cjs/src/cryptocom.js +2 -0
  41. package/dist/cjs/src/currencycom.js +2 -2
  42. package/dist/cjs/src/deribit.js +2 -0
  43. package/dist/cjs/src/digifinex.js +11 -5
  44. package/dist/cjs/src/exmo.js +1 -0
  45. package/dist/cjs/src/gate.js +2 -0
  46. package/dist/cjs/src/gemini.js +2 -0
  47. package/dist/cjs/src/hitbtc.js +4 -0
  48. package/dist/cjs/src/hollaex.js +2 -0
  49. package/dist/cjs/src/htx.js +4 -0
  50. package/dist/cjs/src/huobijp.js +2 -0
  51. package/dist/cjs/src/idex.js +2 -0
  52. package/dist/cjs/src/indodax.js +1 -0
  53. package/dist/cjs/src/kraken.js +3 -3
  54. package/dist/cjs/src/kucoin.js +6 -5
  55. package/dist/cjs/src/kuna.js +3 -1
  56. package/dist/cjs/src/latoken.js +1 -0
  57. package/dist/cjs/src/lbank.js +2333 -442
  58. package/dist/cjs/src/lykke.js +2 -0
  59. package/dist/cjs/src/mercado.js +1 -0
  60. package/dist/cjs/src/mexc.js +2 -0
  61. package/dist/cjs/src/ndax.js +61 -61
  62. package/dist/cjs/src/novadax.js +58 -59
  63. package/dist/cjs/src/oceanex.js +58 -60
  64. package/dist/cjs/src/okcoin.js +3 -9
  65. package/dist/cjs/src/okx.js +2 -7
  66. package/dist/cjs/src/phemex.js +2 -0
  67. package/dist/cjs/src/poloniex.js +56 -57
  68. package/dist/cjs/src/poloniexfutures.js +67 -70
  69. package/dist/cjs/src/pro/binance.js +5 -3
  70. package/dist/cjs/src/pro/bingx.js +18 -11
  71. package/dist/cjs/src/pro/coinbase.js +12 -3
  72. package/dist/cjs/src/pro/cryptocom.js +17 -17
  73. package/dist/cjs/src/pro/krakenfutures.js +15 -15
  74. package/dist/cjs/src/pro/poloniexfutures.js +9 -0
  75. package/dist/cjs/src/probit.js +64 -65
  76. package/dist/cjs/src/tidex.js +1 -0
  77. package/dist/cjs/src/timex.js +3 -5
  78. package/dist/cjs/src/upbit.js +58 -58
  79. package/dist/cjs/src/wavesexchange.js +2 -1
  80. package/dist/cjs/src/wazirx.js +72 -74
  81. package/dist/cjs/src/whitebit.js +89 -91
  82. package/dist/cjs/src/woo.js +76 -77
  83. package/dist/cjs/src/zaif.js +58 -71
  84. package/dist/cjs/src/zonda.js +68 -70
  85. package/js/ccxt.d.ts +2 -14
  86. package/js/ccxt.js +2 -10
  87. package/js/src/abstract/bybit.d.ts +1 -0
  88. package/js/src/abstract/lbank.d.ts +57 -15
  89. package/js/src/ace.d.ts +8 -7
  90. package/js/src/ace.js +56 -59
  91. package/js/src/alpaca.d.ts +6 -5
  92. package/js/src/alpaca.js +62 -64
  93. package/js/src/ascendex.d.ts +12 -12
  94. package/js/src/ascendex.js +1 -0
  95. package/js/src/base/Exchange.d.ts +2 -0
  96. package/js/src/base/Exchange.js +11 -11
  97. package/js/src/base/types.d.ts +76 -71
  98. package/js/src/bigone.d.ts +12 -12
  99. package/js/src/bigone.js +60 -77
  100. package/js/src/binance.d.ts +27 -27
  101. package/js/src/binance.js +1 -0
  102. package/js/src/bingx.d.ts +17 -17
  103. package/js/src/bingx.js +52 -19
  104. package/js/src/bit2c.d.ts +5 -5
  105. package/js/src/bitbank.d.ts +7 -6
  106. package/js/src/bitbank.js +58 -59
  107. package/js/src/bitbns.d.ts +7 -7
  108. package/js/src/bitbns.js +1 -0
  109. package/js/src/bitfinex.d.ts +8 -8
  110. package/js/src/bitfinex.js +1 -0
  111. package/js/src/bitfinex2.d.ts +12 -12
  112. package/js/src/bitfinex2.js +1 -0
  113. package/js/src/bitflyer.d.ts +9 -9
  114. package/js/src/bitflyer.js +1 -0
  115. package/js/src/bitforex.d.ts +6 -6
  116. package/js/src/bitget.d.ts +25 -26
  117. package/js/src/bitget.js +3 -8
  118. package/js/src/bithumb.d.ts +4 -4
  119. package/js/src/bithumb.js +1 -0
  120. package/js/src/bitmart.d.ts +21 -21
  121. package/js/src/bitmart.js +10 -1
  122. package/js/src/bitmex.d.ts +16 -15
  123. package/js/src/bitmex.js +114 -119
  124. package/js/src/bitopro.d.ts +14 -13
  125. package/js/src/bitopro.js +63 -65
  126. package/js/src/bitpanda.d.ts +13 -12
  127. package/js/src/bitpanda.js +60 -60
  128. package/js/src/bitrue.d.ts +10 -9
  129. package/js/src/bitrue.js +67 -71
  130. package/js/src/bitso.d.ts +11 -11
  131. package/js/src/bitso.js +1 -0
  132. package/js/src/bitstamp.d.ts +10 -10
  133. package/js/src/bitstamp.js +1 -0
  134. package/js/src/bitstamp1.d.ts +4 -4
  135. package/js/src/bittrex.d.ts +16 -15
  136. package/js/src/bittrex.js +57 -57
  137. package/js/src/bitvavo.d.ts +9 -9
  138. package/js/src/bitvavo.js +10 -2
  139. package/js/src/bl3p.d.ts +2 -2
  140. package/js/src/blockchaincom.d.ts +13 -13
  141. package/js/src/blockchaincom.js +2 -2
  142. package/js/src/btcalpha.d.ts +11 -10
  143. package/js/src/btcalpha.js +59 -60
  144. package/js/src/btcbox.d.ts +6 -6
  145. package/js/src/btcmarkets.d.ts +14 -13
  146. package/js/src/btcmarkets.js +68 -69
  147. package/js/src/btcturk.d.ts +7 -6
  148. package/js/src/btcturk.js +72 -74
  149. package/js/src/bybit.d.ts +28 -28
  150. package/js/src/bybit.js +5 -12
  151. package/js/src/cex.d.ts +6 -6
  152. package/js/src/coinbase.d.ts +17 -17
  153. package/js/src/coinbase.js +7 -2
  154. package/js/src/coinbasepro.d.ts +13 -13
  155. package/js/src/coinbasepro.js +1 -0
  156. package/js/src/coincheck.d.ts +6 -6
  157. package/js/src/coincheck.js +1 -0
  158. package/js/src/coinex.d.ts +18 -18
  159. package/js/src/coinex.js +4 -0
  160. package/js/src/coinlist.d.ts +16 -15
  161. package/js/src/coinlist.js +60 -60
  162. package/js/src/coinmate.d.ts +7 -7
  163. package/js/src/coinmate.js +1 -0
  164. package/js/src/coinone.d.ts +5 -5
  165. package/js/src/coinsph.d.ts +10 -10
  166. package/js/src/coinsph.js +2 -4
  167. package/js/src/coinspot.d.ts +3 -3
  168. package/js/src/cryptocom.d.ts +16 -16
  169. package/js/src/cryptocom.js +2 -0
  170. package/js/src/currencycom.d.ts +10 -10
  171. package/js/src/currencycom.js +2 -2
  172. package/js/src/delta.d.ts +10 -10
  173. package/js/src/deribit.d.ts +13 -13
  174. package/js/src/deribit.js +2 -0
  175. package/js/src/digifinex.d.ts +17 -17
  176. package/js/src/digifinex.js +11 -5
  177. package/js/src/exmo.d.ts +12 -12
  178. package/js/src/exmo.js +1 -0
  179. package/js/src/gate.d.ts +20 -20
  180. package/js/src/gate.js +2 -0
  181. package/js/src/gemini.d.ts +6 -6
  182. package/js/src/gemini.js +2 -0
  183. package/js/src/hitbtc.d.ts +15 -15
  184. package/js/src/hitbtc.js +4 -0
  185. package/js/src/hollaex.d.ts +12 -12
  186. package/js/src/hollaex.js +2 -0
  187. package/js/src/htx.d.ts +27 -27
  188. package/js/src/htx.js +4 -0
  189. package/js/src/huobijp.d.ts +16 -16
  190. package/js/src/huobijp.js +2 -0
  191. package/js/src/idex.d.ts +13 -13
  192. package/js/src/idex.js +2 -0
  193. package/js/src/independentreserve.d.ts +6 -6
  194. package/js/src/indodax.d.ts +6 -6
  195. package/js/src/indodax.js +1 -0
  196. package/js/src/kraken.d.ts +16 -16
  197. package/js/src/kraken.js +3 -3
  198. package/js/src/krakenfutures.d.ts +9 -9
  199. package/js/src/kucoin.d.ts +15 -15
  200. package/js/src/kucoin.js +6 -5
  201. package/js/src/kucoinfutures.d.ts +11 -11
  202. package/js/src/kuna.d.ts +12 -12
  203. package/js/src/kuna.js +3 -1
  204. package/js/src/latoken.d.ts +9 -9
  205. package/js/src/latoken.js +1 -0
  206. package/js/src/lbank.d.ts +65 -12
  207. package/js/src/lbank.js +2334 -443
  208. package/js/src/lbank2.d.ts +11 -11
  209. package/js/src/luno.d.ts +10 -10
  210. package/js/src/lykke.d.ts +8 -8
  211. package/js/src/lykke.js +2 -0
  212. package/js/src/mercado.d.ts +6 -6
  213. package/js/src/mercado.js +1 -0
  214. package/js/src/mexc.d.ts +23 -23
  215. package/js/src/mexc.js +2 -0
  216. package/js/src/ndax.d.ts +13 -12
  217. package/js/src/ndax.js +61 -61
  218. package/js/src/novadax.d.ts +13 -12
  219. package/js/src/novadax.js +58 -59
  220. package/js/src/oceanex.d.ts +10 -9
  221. package/js/src/oceanex.js +58 -60
  222. package/js/src/okcoin.d.ts +12 -13
  223. package/js/src/okcoin.js +3 -9
  224. package/js/src/okx.d.ts +26 -27
  225. package/js/src/okx.js +2 -7
  226. package/js/src/paymium.d.ts +2 -2
  227. package/js/src/phemex.d.ts +16 -16
  228. package/js/src/phemex.js +2 -0
  229. package/js/src/poloniex.d.ts +15 -14
  230. package/js/src/poloniex.js +56 -57
  231. package/js/src/poloniexfutures.d.ts +11 -10
  232. package/js/src/poloniexfutures.js +67 -70
  233. package/js/src/pro/alpaca.d.ts +3 -3
  234. package/js/src/pro/ascendex.d.ts +2 -2
  235. package/js/src/pro/binance.d.ts +9 -9
  236. package/js/src/pro/binance.js +5 -3
  237. package/js/src/pro/bingx.d.ts +3 -3
  238. package/js/src/pro/bingx.js +19 -12
  239. package/js/src/pro/bitfinex.d.ts +3 -3
  240. package/js/src/pro/bitfinex2.d.ts +3 -3
  241. package/js/src/pro/bitget.d.ts +3 -3
  242. package/js/src/pro/bitmart.d.ts +2 -2
  243. package/js/src/pro/bitmex.d.ts +3 -3
  244. package/js/src/pro/bitpanda.d.ts +3 -3
  245. package/js/src/pro/bitrue.d.ts +2 -2
  246. package/js/src/pro/bitstamp.d.ts +2 -2
  247. package/js/src/pro/bittrex.d.ts +3 -3
  248. package/js/src/pro/bitvavo.d.ts +3 -3
  249. package/js/src/pro/blockchaincom.d.ts +2 -2
  250. package/js/src/pro/bybit.d.ts +4 -4
  251. package/js/src/pro/cex.d.ts +3 -3
  252. package/js/src/pro/coinbase.js +12 -3
  253. package/js/src/pro/coinbasepro.d.ts +3 -3
  254. package/js/src/pro/coinex.d.ts +2 -2
  255. package/js/src/pro/cryptocom.d.ts +5 -5
  256. package/js/src/pro/cryptocom.js +17 -17
  257. package/js/src/pro/deribit.d.ts +3 -3
  258. package/js/src/pro/exmo.d.ts +2 -2
  259. package/js/src/pro/gate.d.ts +3 -3
  260. package/js/src/pro/gemini.d.ts +2 -2
  261. package/js/src/pro/hitbtc.d.ts +3 -3
  262. package/js/src/pro/hollaex.d.ts +3 -3
  263. package/js/src/pro/htx.d.ts +3 -3
  264. package/js/src/pro/idex.d.ts +3 -3
  265. package/js/src/pro/kraken.d.ts +7 -7
  266. package/js/src/pro/krakenfutures.d.ts +4 -4
  267. package/js/src/pro/krakenfutures.js +15 -15
  268. package/js/src/pro/kucoin.d.ts +3 -3
  269. package/js/src/pro/kucoinfutures.d.ts +3 -3
  270. package/js/src/pro/mexc.d.ts +3 -3
  271. package/js/src/pro/okcoin.d.ts +2 -2
  272. package/js/src/pro/okx.d.ts +6 -6
  273. package/js/src/pro/phemex.d.ts +3 -3
  274. package/js/src/pro/poloniex.d.ts +3 -3
  275. package/js/src/pro/poloniexfutures.d.ts +3 -3
  276. package/js/src/pro/poloniexfutures.js +9 -0
  277. package/js/src/pro/probit.d.ts +3 -3
  278. package/js/src/pro/wazirx.d.ts +3 -3
  279. package/js/src/pro/whitebit.d.ts +3 -3
  280. package/js/src/pro/woo.d.ts +2 -2
  281. package/js/src/probit.d.ts +11 -10
  282. package/js/src/probit.js +64 -65
  283. package/js/src/tidex.d.ts +5 -5
  284. package/js/src/tidex.js +1 -0
  285. package/js/src/timex.d.ts +10 -10
  286. package/js/src/timex.js +3 -5
  287. package/js/src/tokocrypto.d.ts +9 -9
  288. package/js/src/upbit.d.ts +11 -10
  289. package/js/src/upbit.js +58 -58
  290. package/js/src/wavesexchange.d.ts +7 -7
  291. package/js/src/wavesexchange.js +2 -1
  292. package/js/src/wazirx.d.ts +7 -6
  293. package/js/src/wazirx.js +72 -74
  294. package/js/src/whitebit.d.ts +12 -11
  295. package/js/src/whitebit.js +89 -91
  296. package/js/src/woo.d.ts +20 -19
  297. package/js/src/woo.js +76 -77
  298. package/js/src/yobit.d.ts +5 -5
  299. package/js/src/zaif.d.ts +6 -5
  300. package/js/src/zaif.js +58 -71
  301. package/js/src/zonda.d.ts +7 -6
  302. package/js/src/zonda.js +68 -70
  303. package/package.json +1 -1
  304. package/skip-tests.json +2 -18
  305. package/test.ts +0 -0
  306. package/dist/cjs/src/btctradeua.js +0 -571
  307. package/dist/cjs/src/coinfalcon.js +0 -1012
  308. package/js/src/abstract/bitstamp1.d.ts +0 -26
  309. package/js/src/abstract/bitstamp1.js +0 -11
  310. package/js/src/abstract/btctradeua.d.ts +0 -20
  311. package/js/src/abstract/btctradeua.js +0 -11
  312. package/js/src/abstract/coinfalcon.d.ts +0 -26
  313. package/js/src/abstract/coinfalcon.js +0 -11
  314. package/js/src/abstract/lbank2.d.ts +0 -64
  315. package/js/src/abstract/lbank2.js +0 -11
  316. package/js/src/btctradeua.d.ts +0 -30
  317. package/js/src/btctradeua.js +0 -572
  318. package/js/src/coinfalcon.d.ts +0 -53
  319. package/js/src/coinfalcon.js +0 -1013
@@ -496,13 +496,9 @@ class bingx extends bingx$1 {
496
496
  // }
497
497
  // }
498
498
  //
499
- const result = [];
500
499
  const data = this.safeValue(response, 'data');
501
500
  const markets = this.safeValue(data, 'symbols', []);
502
- for (let i = 0; i < markets.length; i++) {
503
- result.push(this.parseMarket(markets[i]));
504
- }
505
- return result;
501
+ return this.parseMarkets(markets);
506
502
  }
507
503
  async fetchSwapMarkets(params) {
508
504
  const response = await this.swapV2PublicGetQuoteContracts(params);
@@ -529,12 +525,8 @@ class bingx extends bingx$1 {
529
525
  // ]
530
526
  // }
531
527
  //
532
- const result = [];
533
- const markets = this.safeValue(response, 'data');
534
- for (let i = 0; i < markets.length; i++) {
535
- result.push(this.parseMarket(markets[i]));
536
- }
537
- return result;
528
+ const markets = this.safeValue(response, 'data', []);
529
+ return this.parseMarkets(markets);
538
530
  }
539
531
  parseMarket(market) {
540
532
  const id = this.safeString(market, 'symbol');
@@ -1235,7 +1227,16 @@ class bingx extends bingx$1 {
1235
1227
  // "quoteVolume": "4151395117.73",
1236
1228
  // "openPrice": "16832.0",
1237
1229
  // "openTime": 1672026667803,
1238
- // "closeTime": 1672026648425
1230
+ // "closeTime": 1672026648425,
1231
+ // added some time ago:
1232
+ // "firstId": 12345,
1233
+ // "lastId": 12349,
1234
+ // "count": 5,
1235
+ // added 2023-11-10:
1236
+ // "bidPrice": 16726.0,
1237
+ // "bidQty": 0.05,
1238
+ // "askPrice": 16726.0,
1239
+ // "askQty": 0.05,
1239
1240
  // }
1240
1241
  // }
1241
1242
  //
@@ -1286,7 +1287,16 @@ class bingx extends bingx$1 {
1286
1287
  // "quoteVolume": "4151395117.73",
1287
1288
  // "openPrice": "16832.0",
1288
1289
  // "openTime": 1672026667803,
1289
- // "closeTime": 1672026648425
1290
+ // "closeTime": 1672026648425,
1291
+ // added some time ago:
1292
+ // "firstId": 12345,
1293
+ // "lastId": 12349,
1294
+ // "count": 5,
1295
+ // added 2023-11-10:
1296
+ // "bidPrice": 16726.0,
1297
+ // "bidQty": 0.05,
1298
+ // "askPrice": 16726.0,
1299
+ // "askQty": 0.05,
1290
1300
  // },
1291
1301
  // ]
1292
1302
  // }
@@ -1306,7 +1316,16 @@ class bingx extends bingx$1 {
1306
1316
  // "volume": "1161.79",
1307
1317
  // "quoteVolume": "30288466.44",
1308
1318
  // "openTime": "1693081020762",
1309
- // "closeTime": "1693167420762"
1319
+ // "closeTime": "1693167420762",
1320
+ // added some time ago:
1321
+ // "firstId": 12345,
1322
+ // "lastId": 12349,
1323
+ // "count": 5,
1324
+ // added 2023-11-10:
1325
+ // "bidPrice": 16726.0,
1326
+ // "bidQty": 0.05,
1327
+ // "askPrice": 16726.0,
1328
+ // "askQty": 0.05,
1310
1329
  // }
1311
1330
  // swap
1312
1331
  //
@@ -1322,7 +1341,16 @@ class bingx extends bingx$1 {
1322
1341
  // "quoteVolume": "4151395117.73",
1323
1342
  // "openPrice": "16832.0",
1324
1343
  // "openTime": 1672026667803,
1325
- // "closeTime": 1672026648425
1344
+ // "closeTime": 1672026648425,
1345
+ // added some time ago:
1346
+ // "firstId": 12345,
1347
+ // "lastId": 12349,
1348
+ // "count": 5,
1349
+ // added 2023-11-10:
1350
+ // "bidPrice": 16726.0,
1351
+ // "bidQty": 0.05,
1352
+ // "askPrice": 16726.0,
1353
+ // "askQty": 0.05,
1326
1354
  // }
1327
1355
  //
1328
1356
  const marketId = this.safeString(ticker, 'symbol');
@@ -1338,16 +1366,20 @@ class bingx extends bingx$1 {
1338
1366
  const percentage = this.safeString(ticker, 'priceChangePercent');
1339
1367
  const ts = this.safeInteger(ticker, 'closeTime');
1340
1368
  const datetime = this.iso8601(ts);
1369
+ const bid = this.safeString(ticker, 'bidPrice');
1370
+ const bidVolume = this.safeString(ticker, 'bidQty');
1371
+ const ask = this.safeString(ticker, 'askPrice');
1372
+ const askVolume = this.safeString(ticker, 'askQty');
1341
1373
  return this.safeTicker({
1342
1374
  'symbol': symbol,
1343
1375
  'timestamp': ts,
1344
1376
  'datetime': datetime,
1345
1377
  'high': high,
1346
1378
  'low': low,
1347
- 'bid': undefined,
1348
- 'bidVolume': undefined,
1349
- 'ask': undefined,
1350
- 'askVolume': undefined,
1379
+ 'bid': bid,
1380
+ 'bidVolume': bidVolume,
1381
+ 'ask': ask,
1382
+ 'askVolume': askVolume,
1351
1383
  'vwap': undefined,
1352
1384
  'open': open,
1353
1385
  'close': close,
@@ -2853,6 +2885,7 @@ class bingx extends bingx$1 {
2853
2885
  'cost': this.safeNumber(transaction, 'transactionFee'),
2854
2886
  'rate': undefined,
2855
2887
  },
2888
+ 'internal': undefined,
2856
2889
  };
2857
2890
  }
2858
2891
  parseTransactionStatus(status) {
@@ -190,67 +190,65 @@ class bitbank extends bitbank$1 {
190
190
  //
191
191
  const data = this.safeValue(response, 'data');
192
192
  const pairs = this.safeValue(data, 'pairs', []);
193
- const result = [];
194
- for (let i = 0; i < pairs.length; i++) {
195
- const entry = pairs[i];
196
- const id = this.safeString(entry, 'name');
197
- const baseId = this.safeString(entry, 'base_asset');
198
- const quoteId = this.safeString(entry, 'quote_asset');
199
- const base = this.safeCurrencyCode(baseId);
200
- const quote = this.safeCurrencyCode(quoteId);
201
- result.push({
202
- 'id': id,
203
- 'symbol': base + '/' + quote,
204
- 'base': base,
205
- 'quote': quote,
206
- 'settle': undefined,
207
- 'baseId': baseId,
208
- 'quoteId': quoteId,
209
- 'settleId': undefined,
210
- 'type': 'spot',
211
- 'spot': true,
212
- 'margin': false,
213
- 'swap': false,
214
- 'future': false,
215
- 'option': false,
216
- 'active': this.safeValue(entry, 'is_enabled'),
217
- 'contract': false,
218
- 'linear': undefined,
219
- 'inverse': undefined,
220
- 'taker': this.safeNumber(entry, 'taker_fee_rate_quote'),
221
- 'maker': this.safeNumber(entry, 'maker_fee_rate_quote'),
222
- 'contractSize': undefined,
223
- 'expiry': undefined,
224
- 'expiryDatetime': undefined,
225
- 'strike': undefined,
226
- 'optionType': undefined,
227
- 'precision': {
228
- 'amount': this.parseNumber(this.parsePrecision(this.safeString(entry, 'amount_digits'))),
229
- 'price': this.parseNumber(this.parsePrecision(this.safeString(entry, 'price_digits'))),
193
+ return this.parseMarkets(pairs);
194
+ }
195
+ parseMarket(entry) {
196
+ const id = this.safeString(entry, 'name');
197
+ const baseId = this.safeString(entry, 'base_asset');
198
+ const quoteId = this.safeString(entry, 'quote_asset');
199
+ const base = this.safeCurrencyCode(baseId);
200
+ const quote = this.safeCurrencyCode(quoteId);
201
+ return {
202
+ 'id': id,
203
+ 'symbol': base + '/' + quote,
204
+ 'base': base,
205
+ 'quote': quote,
206
+ 'settle': undefined,
207
+ 'baseId': baseId,
208
+ 'quoteId': quoteId,
209
+ 'settleId': undefined,
210
+ 'type': 'spot',
211
+ 'spot': true,
212
+ 'margin': false,
213
+ 'swap': false,
214
+ 'future': false,
215
+ 'option': false,
216
+ 'active': this.safeValue(entry, 'is_enabled'),
217
+ 'contract': false,
218
+ 'linear': undefined,
219
+ 'inverse': undefined,
220
+ 'taker': this.safeNumber(entry, 'taker_fee_rate_quote'),
221
+ 'maker': this.safeNumber(entry, 'maker_fee_rate_quote'),
222
+ 'contractSize': undefined,
223
+ 'expiry': undefined,
224
+ 'expiryDatetime': undefined,
225
+ 'strike': undefined,
226
+ 'optionType': undefined,
227
+ 'precision': {
228
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(entry, 'amount_digits'))),
229
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(entry, 'price_digits'))),
230
+ },
231
+ 'limits': {
232
+ 'leverage': {
233
+ 'min': undefined,
234
+ 'max': undefined,
230
235
  },
231
- 'limits': {
232
- 'leverage': {
233
- 'min': undefined,
234
- 'max': undefined,
235
- },
236
- 'amount': {
237
- 'min': this.safeNumber(entry, 'unit_amount'),
238
- 'max': this.safeNumber(entry, 'limit_max_amount'),
239
- },
240
- 'price': {
241
- 'min': undefined,
242
- 'max': undefined,
243
- },
244
- 'cost': {
245
- 'min': undefined,
246
- 'max': undefined,
247
- },
236
+ 'amount': {
237
+ 'min': this.safeNumber(entry, 'unit_amount'),
238
+ 'max': this.safeNumber(entry, 'limit_max_amount'),
248
239
  },
249
- 'created': undefined,
250
- 'info': entry,
251
- });
252
- }
253
- return result;
240
+ 'price': {
241
+ 'min': undefined,
242
+ 'max': undefined,
243
+ },
244
+ 'cost': {
245
+ 'min': undefined,
246
+ 'max': undefined,
247
+ },
248
+ },
249
+ 'created': undefined,
250
+ 'info': entry,
251
+ };
254
252
  }
255
253
  parseTicker(ticker, market = undefined) {
256
254
  const symbol = this.safeSymbol(undefined, market);
@@ -868,6 +866,7 @@ class bitbank extends bitbank$1 {
868
866
  'tag': undefined,
869
867
  'tagTo': undefined,
870
868
  'comment': undefined,
869
+ 'internal': undefined,
871
870
  'fee': undefined,
872
871
  'info': transaction,
873
872
  };
@@ -1101,6 +1101,7 @@ class bitbns extends bitbns$1 {
1101
1101
  'currency': code,
1102
1102
  'status': status,
1103
1103
  'updated': undefined,
1104
+ 'comment': undefined,
1104
1105
  'internal': undefined,
1105
1106
  'fee': fee,
1106
1107
  };
@@ -1501,6 +1501,7 @@ class bitfinex extends bitfinex$1 {
1501
1501
  'tagTo': undefined,
1502
1502
  'updated': this.safeTimestamp(transaction, 'timestamp'),
1503
1503
  'comment': undefined,
1504
+ 'internal': undefined,
1504
1505
  'fee': {
1505
1506
  'currency': code,
1506
1507
  'cost': this.parseNumber(feeCost),
@@ -2169,6 +2169,7 @@ class bitfinex2 extends bitfinex2$1 {
2169
2169
  'tagTo': tag,
2170
2170
  'updated': updated,
2171
2171
  'comment': comment,
2172
+ 'internal': undefined,
2172
2173
  'fee': {
2173
2174
  'currency': code,
2174
2175
  'cost': this.parseNumber(feeCost),
@@ -995,6 +995,7 @@ class bitflyer extends bitflyer$1 {
995
995
  'currency': code,
996
996
  'status': status,
997
997
  'updated': undefined,
998
+ 'comment': undefined,
998
999
  'internal': undefined,
999
1000
  'fee': fee,
1000
1001
  };
@@ -822,6 +822,7 @@ class bitget extends bitget$1 {
822
822
  '40017': errors.ExchangeError,
823
823
  '40018': errors.PermissionDenied,
824
824
  '40019': errors.BadRequest,
825
+ '40031': errors.AccountSuspended,
825
826
  '40037': errors.AuthenticationError,
826
827
  '40102': errors.BadRequest,
827
828
  '40103': errors.BadRequest,
@@ -1130,13 +1131,6 @@ class bitget extends bitget$1 {
1130
1131
  }
1131
1132
  return result;
1132
1133
  }
1133
- parseMarkets(markets) {
1134
- const result = [];
1135
- for (let i = 0; i < markets.length; i++) {
1136
- result.push(this.parseMarket(markets[i]));
1137
- }
1138
- return result;
1139
- }
1140
1134
  parseMarket(market) {
1141
1135
  //
1142
1136
  // spot
@@ -1932,6 +1926,7 @@ class bitget extends bitget$1 {
1932
1926
  'tag': tag,
1933
1927
  'tagTo': tag,
1934
1928
  'comment': undefined,
1929
+ 'internal': undefined,
1935
1930
  'fee': fee,
1936
1931
  };
1937
1932
  }
@@ -3466,7 +3461,7 @@ class bitget extends bitget$1 {
3466
3461
  const amount = this.safeValue(rawOrder, 'amount');
3467
3462
  const price = this.safeValue(rawOrder, 'price');
3468
3463
  const orderParams = this.safeValue(rawOrder, 'params', {});
3469
- const marginResult = this.handleMarginModeAndParams('createOrders', params);
3464
+ const marginResult = this.handleMarginModeAndParams('createOrders', orderParams);
3470
3465
  const currentMarginMode = marginResult[0];
3471
3466
  if (currentMarginMode !== undefined) {
3472
3467
  if (marginMode === undefined) {
@@ -1003,6 +1003,7 @@ class bithumb extends bithumb$1 {
1003
1003
  'tag': undefined,
1004
1004
  'tagTo': undefined,
1005
1005
  'comment': undefined,
1006
+ 'internal': undefined,
1006
1007
  'fee': undefined,
1007
1008
  'info': transaction,
1008
1009
  };
@@ -396,7 +396,14 @@ class bitmart extends bitmart$1 {
396
396
  '40032': errors.InvalidOrder,
397
397
  '40033': errors.InvalidOrder,
398
398
  '40034': errors.BadSymbol,
399
- '53002': errors.PermissionDenied, // 403, Your account has not yet completed the kyc advanced certification, please complete first
399
+ '53002': errors.PermissionDenied,
400
+ '53003': errors.PermissionDenied,
401
+ '53005': errors.PermissionDenied,
402
+ '53006': errors.PermissionDenied,
403
+ '53007': errors.PermissionDenied,
404
+ '53008': errors.PermissionDenied,
405
+ '53009': errors.PermissionDenied,
406
+ '53010': errors.PermissionDenied, // 403 This account is restricted from borrowing
400
407
  },
401
408
  'broad': {},
402
409
  },
@@ -3155,6 +3162,8 @@ class bitmart extends bitmart$1 {
3155
3162
  'type': type,
3156
3163
  'updated': undefined,
3157
3164
  'txid': txid,
3165
+ 'internal': undefined,
3166
+ 'comment': undefined,
3158
3167
  'timestamp': (timestamp !== 0) ? timestamp : undefined,
3159
3168
  'datetime': (timestamp !== 0) ? this.iso8601(timestamp) : undefined,
3160
3169
  'fee': fee,
@@ -541,130 +541,124 @@ class bitmex extends bitmex$1 {
541
541
  // }
542
542
  // ]
543
543
  //
544
- const result = [];
545
- for (let i = 0; i < response.length; i++) {
546
- const market = response[i];
547
- const id = this.safeString(market, 'symbol');
548
- const baseId = this.safeString(market, 'underlying');
549
- const quoteId = this.safeString(market, 'quoteCurrency');
550
- const settleId = this.safeString(market, 'settlCurrency');
551
- const base = this.safeCurrencyCode(baseId);
552
- const quote = this.safeCurrencyCode(quoteId);
553
- const settle = this.safeCurrencyCode(settleId);
554
- // 'positionCurrency' may be empty ("", as Bitmex currently returns for ETHUSD)
555
- // so let's take the settlCurrency first and then adjust if needed
556
- const typ = this.safeString(market, 'typ'); // type definitions at: https://www.bitmex.com/api/explorer/#!/Instrument/Instrument_get
557
- const types = {
558
- 'FFWCSX': 'swap',
559
- 'FFWCSF': 'swap',
560
- 'IFXXXP': 'spot',
561
- 'FFCCSX': 'future',
562
- 'MRBXXX': 'index',
563
- 'MRCXXX': 'index',
564
- 'MRFXXX': 'index',
565
- 'MRRXXX': 'index',
566
- 'MRIXXX': 'index',
567
- };
568
- const type = this.safeString(types, typ, typ);
569
- const swap = type === 'swap';
570
- const future = type === 'future';
571
- const spot = type === 'spot';
572
- const contract = swap || future;
573
- let contractSize = undefined;
574
- const index = type === 'index';
575
- const isInverse = this.safeValue(market, 'isInverse'); // this is true when BASE and SETTLE are same, i.e. BTC/XXX:BTC
576
- const isQuanto = this.safeValue(market, 'isQuanto'); // this is true when BASE and SETTLE are different, i.e. AXS/XXX:BTC
577
- const linear = contract ? (!isInverse && !isQuanto) : undefined;
578
- const status = this.safeString(market, 'state');
579
- const active = status !== 'Unlisted';
580
- let expiry = undefined;
581
- let expiryDatetime = undefined;
582
- let symbol = undefined;
583
- if (spot) {
584
- symbol = base + '/' + quote;
585
- }
586
- else if (contract) {
587
- symbol = base + '/' + quote + ':' + settle;
588
- const multiplierString = Precise["default"].stringAbs(this.safeString(market, 'multiplier'));
589
- if (linear) {
590
- contractSize = this.parseNumber(Precise["default"].stringDiv('1', market['underlyingToPositionMultiplier']));
591
- }
592
- else {
593
- contractSize = this.parseNumber(multiplierString);
594
- }
595
- if (future) {
596
- expiryDatetime = this.safeString(market, 'expiry');
597
- expiry = this.parse8601(expiryDatetime);
598
- symbol = symbol + '-' + this.yymmdd(expiry);
599
- }
544
+ return this.parseMarkets(response);
545
+ }
546
+ parseMarket(market) {
547
+ const id = this.safeString(market, 'symbol');
548
+ const baseId = this.safeString(market, 'underlying');
549
+ const quoteId = this.safeString(market, 'quoteCurrency');
550
+ const settleId = this.safeString(market, 'settlCurrency');
551
+ const base = this.safeCurrencyCode(baseId);
552
+ const quote = this.safeCurrencyCode(quoteId);
553
+ const settle = this.safeCurrencyCode(settleId);
554
+ // 'positionCurrency' may be empty ("", as Bitmex currently returns for ETHUSD)
555
+ // so let's take the settlCurrency first and then adjust if needed
556
+ const typ = this.safeString(market, 'typ'); // type definitions at: https://www.bitmex.com/api/explorer/#!/Instrument/Instrument_get
557
+ const types = {
558
+ 'FFWCSX': 'swap',
559
+ 'FFWCSF': 'swap',
560
+ 'IFXXXP': 'spot',
561
+ 'FFCCSX': 'future',
562
+ 'MRBXXX': 'index',
563
+ 'MRCXXX': 'index',
564
+ 'MRFXXX': 'index',
565
+ 'MRRXXX': 'index',
566
+ 'MRIXXX': 'index',
567
+ };
568
+ const type = this.safeString(types, typ, typ);
569
+ const swap = type === 'swap';
570
+ const future = type === 'future';
571
+ const spot = type === 'spot';
572
+ const contract = swap || future;
573
+ let contractSize = undefined;
574
+ const isInverse = this.safeValue(market, 'isInverse'); // this is true when BASE and SETTLE are same, i.e. BTC/XXX:BTC
575
+ const isQuanto = this.safeValue(market, 'isQuanto'); // this is true when BASE and SETTLE are different, i.e. AXS/XXX:BTC
576
+ const linear = contract ? (!isInverse && !isQuanto) : undefined;
577
+ const status = this.safeString(market, 'state');
578
+ const active = status !== 'Unlisted';
579
+ let expiry = undefined;
580
+ let expiryDatetime = undefined;
581
+ let symbol = undefined;
582
+ if (spot) {
583
+ symbol = base + '/' + quote;
584
+ }
585
+ else if (contract) {
586
+ symbol = base + '/' + quote + ':' + settle;
587
+ const multiplierString = Precise["default"].stringAbs(this.safeString(market, 'multiplier'));
588
+ if (linear) {
589
+ contractSize = this.parseNumber(Precise["default"].stringDiv('1', market['underlyingToPositionMultiplier']));
600
590
  }
601
591
  else {
602
- // for index/exotic markets, default to id
603
- symbol = id;
592
+ contractSize = this.parseNumber(multiplierString);
604
593
  }
605
- const positionId = this.safeString2(market, 'positionCurrency', 'underlying');
606
- const position = this.safeCurrencyCode(positionId);
607
- const positionIsQuote = (position === quote);
608
- const maxOrderQty = this.safeNumber(market, 'maxOrderQty');
609
- const initMargin = this.safeString(market, 'initMargin', '1');
610
- const maxLeverage = this.parseNumber(Precise["default"].stringDiv('1', initMargin));
611
- result.push({
612
- 'id': id,
613
- 'symbol': symbol,
614
- 'base': base,
615
- 'quote': quote,
616
- 'settle': settle,
617
- 'baseId': baseId,
618
- 'quoteId': quoteId,
619
- 'settleId': settleId,
620
- 'type': type,
621
- 'spot': spot,
622
- 'margin': false,
623
- 'swap': swap,
624
- 'future': future,
625
- 'option': false,
626
- 'index': index,
627
- 'active': active,
628
- 'contract': contract,
629
- 'linear': linear,
630
- 'inverse': isInverse,
631
- 'quanto': isQuanto,
632
- 'taker': this.safeNumber(market, 'takerFee'),
633
- 'maker': this.safeNumber(market, 'makerFee'),
634
- 'contractSize': contractSize,
635
- 'expiry': expiry,
636
- 'expiryDatetime': expiryDatetime,
637
- 'strike': this.safeNumber(market, 'optionStrikePrice'),
638
- 'optionType': undefined,
639
- 'precision': {
640
- 'amount': this.safeNumber(market, 'lotSize'),
641
- 'price': this.safeNumber(market, 'tickSize'),
642
- 'quote': this.safeNumber(market, 'tickSize'),
643
- 'base': this.safeNumber(market, 'tickSize'),
594
+ if (future) {
595
+ expiryDatetime = this.safeString(market, 'expiry');
596
+ expiry = this.parse8601(expiryDatetime);
597
+ symbol = symbol + '-' + this.yymmdd(expiry);
598
+ }
599
+ }
600
+ else {
601
+ // for index/exotic markets, default to id
602
+ symbol = id;
603
+ }
604
+ const positionId = this.safeString2(market, 'positionCurrency', 'underlying');
605
+ const position = this.safeCurrencyCode(positionId);
606
+ const positionIsQuote = (position === quote);
607
+ const maxOrderQty = this.safeNumber(market, 'maxOrderQty');
608
+ const initMargin = this.safeString(market, 'initMargin', '1');
609
+ const maxLeverage = this.parseNumber(Precise["default"].stringDiv('1', initMargin));
610
+ return {
611
+ 'id': id,
612
+ 'symbol': symbol,
613
+ 'base': base,
614
+ 'quote': quote,
615
+ 'settle': settle,
616
+ 'baseId': baseId,
617
+ 'quoteId': quoteId,
618
+ 'settleId': settleId,
619
+ 'type': type,
620
+ 'spot': spot,
621
+ 'margin': false,
622
+ 'swap': swap,
623
+ 'future': future,
624
+ 'option': false,
625
+ 'active': active,
626
+ 'contract': contract,
627
+ 'linear': linear,
628
+ 'inverse': isInverse,
629
+ 'quanto': isQuanto,
630
+ 'taker': this.safeNumber(market, 'takerFee'),
631
+ 'maker': this.safeNumber(market, 'makerFee'),
632
+ 'contractSize': contractSize,
633
+ 'expiry': expiry,
634
+ 'expiryDatetime': expiryDatetime,
635
+ 'strike': this.safeNumber(market, 'optionStrikePrice'),
636
+ 'optionType': undefined,
637
+ 'precision': {
638
+ 'amount': this.safeNumber(market, 'lotSize'),
639
+ 'price': this.safeNumber(market, 'tickSize'),
640
+ },
641
+ 'limits': {
642
+ 'leverage': {
643
+ 'min': contract ? this.parseNumber('1') : undefined,
644
+ 'max': contract ? maxLeverage : undefined,
644
645
  },
645
- 'limits': {
646
- 'leverage': {
647
- 'min': contract ? this.parseNumber('1') : undefined,
648
- 'max': contract ? maxLeverage : undefined,
649
- },
650
- 'amount': {
651
- 'min': undefined,
652
- 'max': positionIsQuote ? undefined : maxOrderQty,
653
- },
654
- 'price': {
655
- 'min': undefined,
656
- 'max': this.safeNumber(market, 'maxPrice'),
657
- },
658
- 'cost': {
659
- 'min': undefined,
660
- 'max': positionIsQuote ? maxOrderQty : undefined,
661
- },
646
+ 'amount': {
647
+ 'min': undefined,
648
+ 'max': positionIsQuote ? undefined : maxOrderQty,
662
649
  },
663
- 'created': this.parse8601(this.safeString(market, 'listing')),
664
- 'info': market,
665
- });
666
- }
667
- return result;
650
+ 'price': {
651
+ 'min': undefined,
652
+ 'max': this.safeNumber(market, 'maxPrice'),
653
+ },
654
+ 'cost': {
655
+ 'min': undefined,
656
+ 'max': positionIsQuote ? maxOrderQty : undefined,
657
+ },
658
+ },
659
+ 'created': this.parse8601(this.safeString(market, 'listing')),
660
+ 'info': market,
661
+ };
668
662
  }
669
663
  parseBalance(response) {
670
664
  //
@@ -1303,6 +1297,7 @@ class bitmex extends bitmex$1 {
1303
1297
  'tagFrom': undefined,
1304
1298
  'tagTo': undefined,
1305
1299
  'updated': timestamp,
1300
+ 'internal': undefined,
1306
1301
  'comment': undefined,
1307
1302
  'fee': {
1308
1303
  'currency': currency['code'],