ccxt 4.4.53 → 4.4.57

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 (263) hide show
  1. package/README.md +224 -142
  2. package/dist/ccxt.browser.min.js +8 -8
  3. package/dist/cjs/ccxt.js +1 -4
  4. package/dist/cjs/src/ace.js +3 -0
  5. package/dist/cjs/src/alpaca.js +5 -0
  6. package/dist/cjs/src/ascendex.js +2 -1
  7. package/dist/cjs/src/base/Exchange.js +114 -56
  8. package/dist/cjs/src/bigone.js +5 -0
  9. package/dist/cjs/src/binance.js +53 -53
  10. package/dist/cjs/src/bingx.js +27 -30
  11. package/dist/cjs/src/bit2c.js +3 -0
  12. package/dist/cjs/src/bitbank.js +3 -0
  13. package/dist/cjs/src/bitbns.js +3 -0
  14. package/dist/cjs/src/bitfinex.js +7 -2
  15. package/dist/cjs/src/bitflyer.js +5 -0
  16. package/dist/cjs/src/bitget.js +9 -5
  17. package/dist/cjs/src/bithumb.js +2 -0
  18. package/dist/cjs/src/bitmart.js +20 -8
  19. package/dist/cjs/src/bitmex.js +99 -93
  20. package/dist/cjs/src/bitopro.js +5 -0
  21. package/dist/cjs/src/bitrue.js +4 -0
  22. package/dist/cjs/src/bitso.js +3 -0
  23. package/dist/cjs/src/bitstamp.js +3 -0
  24. package/dist/cjs/src/bitteam.js +5 -0
  25. package/dist/cjs/src/bitvavo.js +4 -0
  26. package/dist/cjs/src/blockchaincom.js +5 -1
  27. package/dist/cjs/src/blofin.js +3 -0
  28. package/dist/cjs/src/btcalpha.js +5 -0
  29. package/dist/cjs/src/btcbox.js +3 -3
  30. package/dist/cjs/src/btcmarkets.js +5 -0
  31. package/dist/cjs/src/btcturk.js +3 -0
  32. package/dist/cjs/src/bybit.js +12 -2
  33. package/dist/cjs/src/cex.js +2 -0
  34. package/dist/cjs/src/coinbase.js +16 -8
  35. package/dist/cjs/src/coinbaseexchange.js +5 -0
  36. package/dist/cjs/src/coinbaseinternational.js +7 -3
  37. package/dist/cjs/src/coincatch.js +4 -1
  38. package/dist/cjs/src/coincheck.js +2 -0
  39. package/dist/cjs/src/coinex.js +5 -1
  40. package/dist/cjs/src/coinlist.js +5 -0
  41. package/dist/cjs/src/coinmate.js +5 -1
  42. package/dist/cjs/src/coinmetro.js +9 -5
  43. package/dist/cjs/src/coinone.js +4 -1
  44. package/dist/cjs/src/coinsph.js +5 -1
  45. package/dist/cjs/src/coinspot.js +2 -1
  46. package/dist/cjs/src/cryptocom.js +5 -0
  47. package/dist/cjs/src/currencycom.js +4 -1
  48. package/dist/cjs/src/defx.js +5 -0
  49. package/dist/cjs/src/delta.js +3 -0
  50. package/dist/cjs/src/deribit.js +14 -32
  51. package/dist/cjs/src/digifinex.js +10 -5
  52. package/dist/cjs/src/ellipx.js +9 -5
  53. package/dist/cjs/src/exmo.js +5 -2
  54. package/dist/cjs/src/gate.js +4 -0
  55. package/dist/cjs/src/gemini.js +3 -0
  56. package/dist/cjs/src/hashkey.js +5 -4
  57. package/dist/cjs/src/hitbtc.js +4 -0
  58. package/dist/cjs/src/hollaex.js +6 -1
  59. package/dist/cjs/src/htx.js +9 -1
  60. package/dist/cjs/src/huobijp.js +5 -0
  61. package/dist/cjs/src/hyperliquid.js +9 -4
  62. package/dist/cjs/src/idex.js +6 -2
  63. package/dist/cjs/src/independentreserve.js +4 -0
  64. package/dist/cjs/src/indodax.js +3 -0
  65. package/dist/cjs/src/kraken.js +7 -5
  66. package/dist/cjs/src/krakenfutures.js +5 -2
  67. package/dist/cjs/src/kucoin.js +15 -7
  68. package/dist/cjs/src/kucoinfutures.js +5 -1
  69. package/dist/cjs/src/kuna.js +3 -0
  70. package/dist/cjs/src/latoken.js +4 -0
  71. package/dist/cjs/src/lbank.js +6 -1
  72. package/dist/cjs/src/luno.js +7 -2
  73. package/dist/cjs/src/mercado.js +5 -1
  74. package/dist/cjs/src/mexc.js +10 -9
  75. package/dist/cjs/src/ndax.js +7 -2
  76. package/dist/cjs/src/novadax.js +6 -1
  77. package/dist/cjs/src/oceanex.js +4 -0
  78. package/dist/cjs/src/okcoin.js +6 -2
  79. package/dist/cjs/src/okx.js +18 -4
  80. package/dist/cjs/src/onetrading.js +5 -1
  81. package/dist/cjs/src/oxfun.js +3 -0
  82. package/dist/cjs/src/p2b.js +3 -0
  83. package/dist/cjs/src/paradex.js +9 -3
  84. package/dist/cjs/src/phemex.js +12 -5
  85. package/dist/cjs/src/poloniex.js +6 -3
  86. package/dist/cjs/src/poloniexfutures.js +5 -1
  87. package/dist/cjs/src/pro/binance.js +2 -2
  88. package/dist/cjs/src/pro/bitcoincom.js +1 -4
  89. package/dist/cjs/src/pro/bitget.js +3 -3
  90. package/dist/cjs/src/pro/bitopro.js +1 -1
  91. package/dist/cjs/src/pro/bybit.js +10 -2
  92. package/dist/cjs/src/pro/cex.js +1 -1
  93. package/dist/cjs/src/pro/coincatch.js +3 -3
  94. package/dist/cjs/src/pro/mexc.js +3 -3
  95. package/dist/cjs/src/pro/okx.js +1 -1
  96. package/dist/cjs/src/probit.js +5 -1
  97. package/dist/cjs/src/timex.js +5 -1
  98. package/dist/cjs/src/tokocrypto.js +6 -1
  99. package/dist/cjs/src/tradeogre.js +2 -0
  100. package/dist/cjs/src/upbit.js +3 -0
  101. package/dist/cjs/src/vertex.js +6 -2
  102. package/dist/cjs/src/wavesexchange.js +24 -4
  103. package/dist/cjs/src/wazirx.js +2 -0
  104. package/dist/cjs/src/whitebit.js +5 -4
  105. package/dist/cjs/src/woo.js +15 -5
  106. package/dist/cjs/src/woofipro.js +25 -9
  107. package/dist/cjs/src/xt.js +5 -0
  108. package/dist/cjs/src/yobit.js +4 -1
  109. package/dist/cjs/src/zaif.js +2 -0
  110. package/dist/cjs/src/zonda.js +3 -1
  111. package/js/ccxt.d.ts +3 -6
  112. package/js/ccxt.js +2 -4
  113. package/js/src/abstract/binance.d.ts +0 -1
  114. package/js/src/abstract/binancecoinm.d.ts +0 -1
  115. package/js/src/abstract/binanceus.d.ts +0 -1
  116. package/js/src/abstract/binanceusdm.d.ts +0 -1
  117. package/js/src/ace.js +3 -0
  118. package/js/src/alpaca.js +5 -0
  119. package/js/src/ascendex.js +2 -1
  120. package/js/src/base/Exchange.d.ts +7 -3
  121. package/js/src/base/Exchange.js +114 -56
  122. package/js/src/base/types.d.ts +2 -0
  123. package/js/src/bigone.d.ts +1 -1
  124. package/js/src/bigone.js +5 -0
  125. package/js/src/binance.d.ts +30 -32
  126. package/js/src/binance.js +53 -53
  127. package/js/src/bingx.d.ts +1 -1
  128. package/js/src/bingx.js +27 -30
  129. package/js/src/bit2c.js +3 -0
  130. package/js/src/bitbank.js +3 -0
  131. package/js/src/bitbns.js +3 -0
  132. package/js/src/bitfinex.js +7 -2
  133. package/js/src/bitflyer.js +5 -0
  134. package/js/src/bitget.js +9 -5
  135. package/js/src/bithumb.js +2 -0
  136. package/js/src/bitmart.d.ts +5 -5
  137. package/js/src/bitmart.js +20 -8
  138. package/js/src/bitmex.js +99 -93
  139. package/js/src/bitopro.d.ts +2 -2
  140. package/js/src/bitopro.js +5 -0
  141. package/js/src/bitrue.js +4 -0
  142. package/js/src/bitso.d.ts +2 -2
  143. package/js/src/bitso.js +3 -0
  144. package/js/src/bitstamp.js +3 -0
  145. package/js/src/bitteam.js +5 -0
  146. package/js/src/bitvavo.js +4 -0
  147. package/js/src/blockchaincom.js +5 -1
  148. package/js/src/blofin.js +3 -0
  149. package/js/src/btcalpha.js +5 -0
  150. package/js/src/btcbox.js +3 -3
  151. package/js/src/btcmarkets.js +5 -0
  152. package/js/src/btcturk.js +3 -0
  153. package/js/src/bybit.d.ts +3 -3
  154. package/js/src/bybit.js +12 -2
  155. package/js/src/cex.js +2 -0
  156. package/js/src/coinbase.d.ts +4 -4
  157. package/js/src/coinbase.js +16 -8
  158. package/js/src/coinbaseexchange.js +5 -0
  159. package/js/src/coinbaseinternational.d.ts +1 -1
  160. package/js/src/coinbaseinternational.js +7 -3
  161. package/js/src/coincatch.js +4 -1
  162. package/js/src/coincheck.js +2 -0
  163. package/js/src/coinex.d.ts +1 -1
  164. package/js/src/coinex.js +5 -1
  165. package/js/src/coinlist.js +5 -0
  166. package/js/src/coinmate.js +5 -1
  167. package/js/src/coinmetro.js +9 -5
  168. package/js/src/coinone.js +4 -1
  169. package/js/src/coinsph.js +5 -1
  170. package/js/src/coinspot.js +2 -1
  171. package/js/src/cryptocom.js +5 -0
  172. package/js/src/currencycom.js +4 -1
  173. package/js/src/defx.js +5 -0
  174. package/js/src/delta.js +3 -0
  175. package/js/src/deribit.d.ts +4 -2
  176. package/js/src/deribit.js +14 -32
  177. package/js/src/digifinex.js +10 -5
  178. package/js/src/ellipx.d.ts +1 -1
  179. package/js/src/ellipx.js +9 -5
  180. package/js/src/exmo.d.ts +3 -3
  181. package/js/src/exmo.js +5 -2
  182. package/js/src/gate.js +4 -0
  183. package/js/src/gemini.js +3 -0
  184. package/js/src/hashkey.js +5 -4
  185. package/js/src/hitbtc.d.ts +2 -2
  186. package/js/src/hitbtc.js +4 -0
  187. package/js/src/hollaex.d.ts +2 -2
  188. package/js/src/hollaex.js +6 -1
  189. package/js/src/htx.js +9 -1
  190. package/js/src/huobijp.js +5 -0
  191. package/js/src/hyperliquid.d.ts +1 -1
  192. package/js/src/hyperliquid.js +9 -4
  193. package/js/src/idex.d.ts +1 -1
  194. package/js/src/idex.js +6 -2
  195. package/js/src/independentreserve.js +4 -0
  196. package/js/src/indodax.js +3 -0
  197. package/js/src/kraken.js +7 -5
  198. package/js/src/krakenfutures.js +5 -2
  199. package/js/src/kucoin.d.ts +2 -1
  200. package/js/src/kucoin.js +15 -7
  201. package/js/src/kucoinfutures.d.ts +1 -1
  202. package/js/src/kucoinfutures.js +5 -1
  203. package/js/src/kuna.js +3 -0
  204. package/js/src/latoken.js +4 -0
  205. package/js/src/lbank.js +6 -1
  206. package/js/src/luno.d.ts +1 -1
  207. package/js/src/luno.js +7 -2
  208. package/js/src/mercado.js +5 -1
  209. package/js/src/mexc.js +10 -9
  210. package/js/src/ndax.js +7 -2
  211. package/js/src/novadax.js +6 -1
  212. package/js/src/oceanex.d.ts +2 -2
  213. package/js/src/oceanex.js +4 -0
  214. package/js/src/okcoin.js +6 -2
  215. package/js/src/okx.js +18 -4
  216. package/js/src/onetrading.js +5 -1
  217. package/js/src/oxfun.js +3 -0
  218. package/js/src/p2b.js +3 -0
  219. package/js/src/paradex.js +9 -3
  220. package/js/src/phemex.d.ts +1 -1
  221. package/js/src/phemex.js +12 -5
  222. package/js/src/poloniex.js +6 -3
  223. package/js/src/poloniexfutures.d.ts +1 -1
  224. package/js/src/poloniexfutures.js +5 -1
  225. package/js/src/pro/binance.js +2 -2
  226. package/js/src/pro/bitcoincom.js +1 -4
  227. package/js/src/pro/bitget.js +3 -3
  228. package/js/src/pro/bitopro.js +1 -1
  229. package/js/src/pro/bybit.js +10 -2
  230. package/js/src/pro/cex.js +1 -1
  231. package/js/src/pro/coincatch.js +3 -3
  232. package/js/src/pro/mexc.js +3 -3
  233. package/js/src/pro/okx.js +1 -1
  234. package/js/src/probit.js +5 -1
  235. package/js/src/static_dependencies/node-fetch/headers.d.ts +5 -0
  236. package/js/src/static_dependencies/proxies/agent-base/helpers.d.ts +1 -0
  237. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +1 -0
  238. package/js/src/timex.js +5 -1
  239. package/js/src/tokocrypto.js +6 -1
  240. package/js/src/tradeogre.js +2 -0
  241. package/js/src/upbit.d.ts +2 -2
  242. package/js/src/upbit.js +3 -0
  243. package/js/src/vertex.js +6 -2
  244. package/js/src/wavesexchange.d.ts +2 -1
  245. package/js/src/wavesexchange.js +24 -4
  246. package/js/src/wazirx.js +2 -0
  247. package/js/src/whitebit.js +5 -4
  248. package/js/src/woo.d.ts +1 -1
  249. package/js/src/woo.js +15 -5
  250. package/js/src/woofipro.d.ts +1 -1
  251. package/js/src/woofipro.js +25 -9
  252. package/js/src/xt.js +5 -0
  253. package/js/src/yobit.d.ts +2 -2
  254. package/js/src/yobit.js +4 -1
  255. package/js/src/zaif.js +2 -0
  256. package/js/src/zonda.js +3 -1
  257. package/package.json +25 -7
  258. package/dist/cjs/src/abstract/lykke.js +0 -9
  259. package/dist/cjs/src/lykke.js +0 -1401
  260. package/js/src/abstract/lykke.d.ts +0 -32
  261. package/js/src/abstract/lykke.js +0 -11
  262. package/js/src/lykke.d.ts +0 -212
  263. package/js/src/lykke.js +0 -1402
@@ -802,7 +802,8 @@ export default class Exchange {
802
802
  if (numberNormalized.indexOf('e-') > -1) {
803
803
  return this.number(numberToString(parseFloat(numberNormalized)));
804
804
  }
805
- return this.number(numberNormalized);
805
+ const result = this.number(numberNormalized);
806
+ return isNaN(result) ? d : result;
806
807
  }
807
808
  catch (e) {
808
809
  return d;
@@ -1193,7 +1194,7 @@ export default class Exchange {
1193
1194
  starknetEncodeStructuredData(domain, messageTypes, messageData, address) {
1194
1195
  const types = Object.keys(messageTypes);
1195
1196
  if (types.length > 1) {
1196
- throw new NotSupported(this.id + 'starknetEncodeStructuredData only support single type');
1197
+ throw new NotSupported(this.id + ' starknetEncodeStructuredData only support single type');
1197
1198
  }
1198
1199
  const request = {
1199
1200
  'domain': domain,
@@ -1895,10 +1896,22 @@ export default class Exchange {
1895
1896
  if (limit > arrayLength) {
1896
1897
  limit = arrayLength;
1897
1898
  }
1898
- array = ascending ? this.arraySlice(array, 0, limit) : this.arraySlice(array, -limit);
1899
+ // array = ascending ? this.arraySlice (array, 0, limit) : this.arraySlice (array, -limit);
1900
+ if (ascending) {
1901
+ array = this.arraySlice(array, 0, limit);
1902
+ }
1903
+ else {
1904
+ array = this.arraySlice(array, -limit);
1905
+ }
1899
1906
  }
1900
1907
  else {
1901
- array = ascending ? this.arraySlice(array, -limit) : this.arraySlice(array, 0, limit);
1908
+ // array = ascending ? this.arraySlice (array, -limit) : this.arraySlice (array, 0, limit);
1909
+ if (ascending) {
1910
+ array = this.arraySlice(array, -limit);
1911
+ }
1912
+ else {
1913
+ array = this.arraySlice(array, 0, limit);
1914
+ }
1902
1915
  }
1903
1916
  }
1904
1917
  }
@@ -2313,36 +2326,17 @@ export default class Exchange {
2313
2326
  }
2314
2327
  featuresGenerator() {
2315
2328
  //
2316
- // the exchange-specific features can be something like this, where we support 'string' aliases too:
2329
+ // in the exchange-specific features can be something like this, where we support 'string' aliases too:
2317
2330
  //
2318
2331
  // {
2319
- // 'myItem' : {
2332
+ // 'my' : {
2320
2333
  // 'createOrder' : {...},
2321
- // 'fetchOrders' : {...},
2322
2334
  // },
2323
2335
  // 'swap': {
2324
- // 'linear': 'myItem',
2325
- // 'inverse': 'myItem',
2326
- // },
2327
- // 'future': {
2328
- // 'linear': 'myItem',
2329
- // 'inverse': 'myItem',
2330
- // }
2331
- // }
2332
- //
2333
- //
2334
- //
2335
- // this method would regenerate the blank features tree, eg:
2336
- //
2337
- // {
2338
- // "spot": {
2339
- // "createOrder": undefined,
2340
- // "fetchBalance": undefined,
2341
- // ...
2336
+ // 'linear': {
2337
+ // 'extends': my',
2338
+ // },
2342
2339
  // },
2343
- // "swap": {
2344
- // ...
2345
- // }
2346
2340
  // }
2347
2341
  //
2348
2342
  if (this.features === undefined) {
@@ -2387,14 +2381,13 @@ export default class Exchange {
2387
2381
  featuresObj = this.deepExtend(extendObj, featuresObj);
2388
2382
  }
2389
2383
  //
2390
- // corrections
2384
+ // ### corrections ###
2391
2385
  //
2386
+ // createOrder
2392
2387
  if ('createOrder' in featuresObj) {
2393
2388
  const value = this.safeDict(featuresObj['createOrder'], 'attachedStopLossTakeProfit');
2394
- if (value !== undefined) {
2395
- featuresObj['createOrder']['stopLoss'] = value;
2396
- featuresObj['createOrder']['takeProfit'] = value;
2397
- }
2389
+ featuresObj['createOrder']['stopLoss'] = value;
2390
+ featuresObj['createOrder']['takeProfit'] = value;
2398
2391
  if (marketType === 'spot') {
2399
2392
  // default 'hedged': false
2400
2393
  featuresObj['createOrder']['hedged'] = false;
@@ -2408,6 +2401,18 @@ export default class Exchange {
2408
2401
  featuresObj['createOrder']['timeInForce']['GTC'] = true;
2409
2402
  }
2410
2403
  }
2404
+ // other methods
2405
+ const keys = Object.keys(featuresObj);
2406
+ for (let i = 0; i < keys.length; i++) {
2407
+ const key = keys[i];
2408
+ const featureBlock = featuresObj[key];
2409
+ if (!this.inArray(key, ['sandbox']) && featureBlock !== undefined) {
2410
+ // default "symbolRequired" to false to all methods (except `createOrder`)
2411
+ if (!('symbolRequired' in featureBlock)) {
2412
+ featureBlock['symbolRequired'] = this.inArray(key, ['createOrder', 'createOrders', 'fetchOHLCV']);
2413
+ }
2414
+ }
2415
+ }
2411
2416
  return featuresObj;
2412
2417
  }
2413
2418
  orderbookChecksumMessage(symbol) {
@@ -2673,7 +2678,9 @@ export default class Exchange {
2673
2678
  for (let i = 0; i < marketValues.length; i++) {
2674
2679
  const value = marketValues[i];
2675
2680
  if (value['id'] in this.markets_by_id) {
2676
- this.markets_by_id[value['id']].push(value);
2681
+ const marketsByIdArray = this.markets_by_id[value['id']];
2682
+ marketsByIdArray.push(value);
2683
+ this.markets_by_id[value['id']] = marketsByIdArray;
2677
2684
  }
2678
2685
  else {
2679
2686
  this.markets_by_id[value['id']] = [value];
@@ -3106,7 +3113,8 @@ export default class Exchange {
3106
3113
  let results = [];
3107
3114
  if (Array.isArray(orders)) {
3108
3115
  for (let i = 0; i < orders.length; i++) {
3109
- const order = this.extend(this.parseOrder(orders[i], market), params);
3116
+ const parsed = this.parseOrder(orders[i], market); // don't inline this call
3117
+ const order = this.extend(parsed, params);
3110
3118
  results.push(order);
3111
3119
  }
3112
3120
  }
@@ -3114,7 +3122,9 @@ export default class Exchange {
3114
3122
  const ids = Object.keys(orders);
3115
3123
  for (let i = 0; i < ids.length; i++) {
3116
3124
  const id = ids[i];
3117
- const order = this.extend(this.parseOrder(this.extend({ 'id': id }, orders[id]), market), params);
3125
+ const idExtended = this.extend({ 'id': id }, orders[id]);
3126
+ const parsedOrder = this.parseOrder(idExtended, market); // don't inline these calls
3127
+ const order = this.extend(parsedOrder, params);
3118
3128
  results.push(order);
3119
3129
  }
3120
3130
  }
@@ -3514,12 +3524,18 @@ export default class Exchange {
3514
3524
  result[volume] = [];
3515
3525
  for (let i = 0; i < ohlcvs.length; i++) {
3516
3526
  const ts = ms ? ohlcvs[i][0] : this.parseToInt(ohlcvs[i][0] / 1000);
3517
- result[timestamp].push(ts);
3518
- result[open].push(ohlcvs[i][1]);
3519
- result[high].push(ohlcvs[i][2]);
3520
- result[low].push(ohlcvs[i][3]);
3521
- result[close].push(ohlcvs[i][4]);
3522
- result[volume].push(ohlcvs[i][5]);
3527
+ const resultTimestamp = result[timestamp];
3528
+ resultTimestamp.push(ts);
3529
+ const resultOpen = result[open];
3530
+ resultOpen.push(ohlcvs[i][1]);
3531
+ const resultHigh = result[high];
3532
+ resultHigh.push(ohlcvs[i][2]);
3533
+ const resultLow = result[low];
3534
+ resultLow.push(ohlcvs[i][3]);
3535
+ const resultClose = result[close];
3536
+ resultClose.push(ohlcvs[i][4]);
3537
+ const resultVolume = result[volume];
3538
+ resultVolume.push(ohlcvs[i][5]);
3523
3539
  }
3524
3540
  return result;
3525
3541
  }
@@ -3535,9 +3551,11 @@ export default class Exchange {
3535
3551
  const maxRetries = this.safeValue(options, 'webApiRetries', 10);
3536
3552
  let response = undefined;
3537
3553
  let retry = 0;
3554
+ let shouldBreak = false;
3538
3555
  while (retry < maxRetries) {
3539
3556
  try {
3540
3557
  response = await this[endpointMethod]({});
3558
+ shouldBreak = true;
3541
3559
  break;
3542
3560
  }
3543
3561
  catch (e) {
@@ -3546,6 +3564,9 @@ export default class Exchange {
3546
3564
  throw e;
3547
3565
  }
3548
3566
  }
3567
+ if (shouldBreak) {
3568
+ break; // this is needed because of GO
3569
+ }
3549
3570
  }
3550
3571
  let content = response;
3551
3572
  if (startRegex !== undefined) {
@@ -4128,7 +4149,13 @@ export default class Exchange {
4128
4149
  objects = this.toArray(objects);
4129
4150
  // return all of them if no values were passed
4130
4151
  if (values === undefined || !values) {
4131
- return indexed ? this.indexBy(objects, key) : objects;
4152
+ // return indexed ? this.indexBy (objects, key) : objects;
4153
+ if (indexed) {
4154
+ return this.indexBy(objects, key);
4155
+ }
4156
+ else {
4157
+ return objects;
4158
+ }
4132
4159
  }
4133
4160
  const results = [];
4134
4161
  for (let i = 0; i < objects.length; i++) {
@@ -4136,7 +4163,11 @@ export default class Exchange {
4136
4163
  results.push(objects[i]);
4137
4164
  }
4138
4165
  }
4139
- return indexed ? this.indexBy(results, key) : results;
4166
+ // return indexed ? this.indexBy (results, key) : results;
4167
+ if (indexed) {
4168
+ return this.indexBy(results, key);
4169
+ }
4170
+ return results;
4140
4171
  }
4141
4172
  async fetch2(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {
4142
4173
  if (this.enableRateLimit) {
@@ -4165,10 +4196,12 @@ export default class Exchange {
4165
4196
  if ((retryDelay !== undefined) && (retryDelay !== 0)) {
4166
4197
  await this.sleep(retryDelay);
4167
4198
  }
4168
- continue;
4199
+ // continue; //check this
4169
4200
  }
4170
4201
  }
4171
- throw e;
4202
+ if (i >= retries) {
4203
+ throw e;
4204
+ }
4172
4205
  }
4173
4206
  }
4174
4207
  return undefined; // this line is never reached, but exists for c# value return requirement
@@ -4346,7 +4379,7 @@ export default class Exchange {
4346
4379
  'precision': undefined,
4347
4380
  });
4348
4381
  }
4349
- safeMarket(marketId, market = undefined, delimiter = undefined, marketType = undefined) {
4382
+ safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
4350
4383
  const result = this.safeMarketStructure({
4351
4384
  'symbol': marketId,
4352
4385
  'marketId': marketId,
@@ -4544,9 +4577,8 @@ export default class Exchange {
4544
4577
  return [value2, params];
4545
4578
  }
4546
4579
  handleOption(methodName, optionName, defaultValue = undefined) {
4547
- // eslint-disable-next-line no-unused-vars
4548
- const [result, empty] = this.handleOptionAndParams({}, methodName, optionName, defaultValue);
4549
- return result;
4580
+ const res = this.handleOptionAndParams({}, methodName, optionName, defaultValue);
4581
+ return this.safeValue(res, 0);
4550
4582
  }
4551
4583
  handleMarketTypeAndParams(methodName, market = undefined, params = {}, defaultValue = undefined) {
4552
4584
  /**
@@ -4747,6 +4779,18 @@ export default class Exchange {
4747
4779
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
4748
4780
  throw new NotSupported(this.id + ' createOrder() is not supported yet');
4749
4781
  }
4782
+ async createConvertTrade(id, fromCode, toCode, amount = undefined, params = {}) {
4783
+ throw new NotSupported(this.id + ' createConvertTrade() is not supported yet');
4784
+ }
4785
+ async fetchConvertTrade(id, code = undefined, params = {}) {
4786
+ throw new NotSupported(this.id + ' fetchConvertTrade() is not supported yet');
4787
+ }
4788
+ async fetchConvertTradeHistory(code = undefined, since = undefined, limit = undefined, params = {}) {
4789
+ throw new NotSupported(this.id + ' fetchConvertTradeHistory() is not supported yet');
4790
+ }
4791
+ async fetchPositionMode(symbol = undefined, params = {}) {
4792
+ throw new NotSupported(this.id + ' fetchPositionMode() is not supported yet');
4793
+ }
4750
4794
  async createTrailingAmountOrder(symbol, type, side, amount, price = undefined, trailingAmount = undefined, trailingTriggerPrice = undefined, params = {}) {
4751
4795
  /**
4752
4796
  * @method
@@ -5439,10 +5483,16 @@ export default class Exchange {
5439
5483
  return await this.createOrderWs(symbol, 'market', 'sell', amount, undefined, params);
5440
5484
  }
5441
5485
  costToPrecision(symbol, cost) {
5486
+ if (cost === undefined) {
5487
+ return undefined;
5488
+ }
5442
5489
  const market = this.market(symbol);
5443
5490
  return this.decimalToPrecision(cost, TRUNCATE, market['precision']['price'], this.precisionMode, this.paddingMode);
5444
5491
  }
5445
5492
  priceToPrecision(symbol, price) {
5493
+ if (price === undefined) {
5494
+ return undefined;
5495
+ }
5446
5496
  const market = this.market(symbol);
5447
5497
  const result = this.decimalToPrecision(price, ROUND, market['precision']['price'], this.precisionMode, this.paddingMode);
5448
5498
  if (result === '0') {
@@ -5451,6 +5501,9 @@ export default class Exchange {
5451
5501
  return result;
5452
5502
  }
5453
5503
  amountToPrecision(symbol, amount) {
5504
+ if (amount === undefined) {
5505
+ return undefined;
5506
+ }
5454
5507
  const market = this.market(symbol);
5455
5508
  const result = this.decimalToPrecision(amount, TRUNCATE, market['precision']['amount'], this.precisionMode, this.paddingMode);
5456
5509
  if (result === '0') {
@@ -5459,6 +5512,9 @@ export default class Exchange {
5459
5512
  return result;
5460
5513
  }
5461
5514
  feeToPrecision(symbol, fee) {
5515
+ if (fee === undefined) {
5516
+ return undefined;
5517
+ }
5462
5518
  const market = this.market(symbol);
5463
5519
  return this.decimalToPrecision(fee, ROUND, market['precision']['price'], this.precisionMode, this.paddingMode);
5464
5520
  }
@@ -5569,28 +5625,28 @@ export default class Exchange {
5569
5625
  }
5570
5626
  async createPostOnlyOrder(symbol, type, side, amount, price = undefined, params = {}) {
5571
5627
  if (!this.has['createPostOnlyOrder']) {
5572
- throw new NotSupported(this.id + 'createPostOnlyOrder() is not supported yet');
5628
+ throw new NotSupported(this.id + ' createPostOnlyOrder() is not supported yet');
5573
5629
  }
5574
5630
  const query = this.extend(params, { 'postOnly': true });
5575
5631
  return await this.createOrder(symbol, type, side, amount, price, query);
5576
5632
  }
5577
5633
  async createPostOnlyOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
5578
5634
  if (!this.has['createPostOnlyOrderWs']) {
5579
- throw new NotSupported(this.id + 'createPostOnlyOrderWs() is not supported yet');
5635
+ throw new NotSupported(this.id + ' createPostOnlyOrderWs() is not supported yet');
5580
5636
  }
5581
5637
  const query = this.extend(params, { 'postOnly': true });
5582
5638
  return await this.createOrderWs(symbol, type, side, amount, price, query);
5583
5639
  }
5584
5640
  async createReduceOnlyOrder(symbol, type, side, amount, price = undefined, params = {}) {
5585
5641
  if (!this.has['createReduceOnlyOrder']) {
5586
- throw new NotSupported(this.id + 'createReduceOnlyOrder() is not supported yet');
5642
+ throw new NotSupported(this.id + ' createReduceOnlyOrder() is not supported yet');
5587
5643
  }
5588
5644
  const query = this.extend(params, { 'reduceOnly': true });
5589
5645
  return await this.createOrder(symbol, type, side, amount, price, query);
5590
5646
  }
5591
5647
  async createReduceOnlyOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
5592
5648
  if (!this.has['createReduceOnlyOrderWs']) {
5593
- throw new NotSupported(this.id + 'createReduceOnlyOrderWs() is not supported yet');
5649
+ throw new NotSupported(this.id + ' createReduceOnlyOrderWs() is not supported yet');
5594
5650
  }
5595
5651
  const query = this.extend(params, { 'reduceOnly': true });
5596
5652
  return await this.createOrderWs(symbol, type, side, amount, price, query);
@@ -5722,7 +5778,8 @@ export default class Exchange {
5722
5778
  const results = [];
5723
5779
  if (Array.isArray(tickers)) {
5724
5780
  for (let i = 0; i < tickers.length; i++) {
5725
- const ticker = this.extend(this.parseTicker(tickers[i]), params);
5781
+ const parsedTicker = this.parseTicker(tickers[i]);
5782
+ const ticker = this.extend(parsedTicker, params);
5726
5783
  results.push(ticker);
5727
5784
  }
5728
5785
  }
@@ -5731,7 +5788,8 @@ export default class Exchange {
5731
5788
  for (let i = 0; i < marketIds.length; i++) {
5732
5789
  const marketId = marketIds[i];
5733
5790
  const market = this.safeMarket(marketId);
5734
- const ticker = this.extend(this.parseTicker(tickers[marketId], market), params);
5791
+ const parsed = this.parseTicker(tickers[marketId], market);
5792
+ const ticker = this.extend(parsed, params);
5735
5793
  results.push(ticker);
5736
5794
  }
5737
5795
  }
@@ -140,6 +140,8 @@ export interface OrderBook {
140
140
  nonce: Int;
141
141
  symbol: Str;
142
142
  }
143
+ export interface OrderBooks extends Dictionary<OrderBook> {
144
+ }
143
145
  export interface Ticker {
144
146
  symbol: string;
145
147
  info: any;
@@ -160,7 +160,7 @@ export default class bigone extends Exchange {
160
160
  * @param {object} [params] extra parameters specific to the exchange API endpoint
161
161
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
162
162
  */
163
- cancelAllOrders(symbol?: Str, params?: {}): Promise<any[]>;
163
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
164
164
  /**
165
165
  * @method
166
166
  * @name bigone#fetchOrder
package/js/src/bigone.js CHANGED
@@ -330,17 +330,20 @@ export default class bigone extends Exchange {
330
330
  'limit': 200,
331
331
  'daysBack': undefined,
332
332
  'untilDays': undefined,
333
+ 'symbolRequired': true,
333
334
  },
334
335
  'fetchOrder': {
335
336
  'marginMode': false,
336
337
  'trigger': false,
337
338
  'trailing': false,
339
+ 'symbolRequired': false,
338
340
  },
339
341
  'fetchOpenOrders': {
340
342
  'marginMode': false,
341
343
  'limit': 200,
342
344
  'trigger': false,
343
345
  'trailing': false,
346
+ 'symbolRequired': true,
344
347
  },
345
348
  'fetchOrders': {
346
349
  'marginMode': false,
@@ -349,6 +352,7 @@ export default class bigone extends Exchange {
349
352
  'untilDays': undefined,
350
353
  'trigger': false,
351
354
  'trailing': false,
355
+ 'symbolRequired': true,
352
356
  },
353
357
  'fetchClosedOrders': {
354
358
  'marginMode': false,
@@ -358,6 +362,7 @@ export default class bigone extends Exchange {
358
362
  'untilDays': undefined,
359
363
  'trigger': false,
360
364
  'trailing': false,
365
+ 'symbolRequired': true,
361
366
  },
362
367
  'fetchOHLCV': {
363
368
  'limit': 500,