ccxt 4.1.13 → 4.1.16

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 (152) hide show
  1. package/CHANGELOG.md +219 -0
  2. package/CONTRIBUTING.md +1 -0
  3. package/README.md +3 -3
  4. package/dist/ccxt.browser.js +539 -189
  5. package/dist/ccxt.browser.min.js +9 -9
  6. package/dist/cjs/ccxt.js +1 -1
  7. package/dist/cjs/src/ascendex.js +1 -0
  8. package/dist/cjs/src/base/Exchange.js +3 -0
  9. package/dist/cjs/src/binance.js +6 -2
  10. package/dist/cjs/src/bingx.js +5 -3
  11. package/dist/cjs/src/bitget.js +357 -64
  12. package/dist/cjs/src/bitmart.js +2 -0
  13. package/dist/cjs/src/bitmex.js +6 -3
  14. package/dist/cjs/src/bittrex.js +7 -0
  15. package/dist/cjs/src/btcalpha.js +2 -1
  16. package/dist/cjs/src/btcturk.js +3 -0
  17. package/dist/cjs/src/cex.js +1 -0
  18. package/dist/cjs/src/coinbase.js +1 -0
  19. package/dist/cjs/src/coinbasepro.js +1 -0
  20. package/dist/cjs/src/coinex.js +2 -0
  21. package/dist/cjs/src/coinfalcon.js +1 -0
  22. package/dist/cjs/src/coinmate.js +1 -0
  23. package/dist/cjs/src/coinone.js +15 -5
  24. package/dist/cjs/src/cryptocom.js +25 -87
  25. package/dist/cjs/src/currencycom.js +1 -0
  26. package/dist/cjs/src/delta.js +1 -0
  27. package/dist/cjs/src/deribit.js +1 -0
  28. package/dist/cjs/src/digifinex.js +10 -8
  29. package/dist/cjs/src/exmo.js +1 -0
  30. package/dist/cjs/src/gate.js +3 -0
  31. package/dist/cjs/src/gemini.js +1 -0
  32. package/dist/cjs/src/hitbtc.js +1 -0
  33. package/dist/cjs/src/hollaex.js +1 -0
  34. package/dist/cjs/src/huobi.js +8 -0
  35. package/dist/cjs/src/huobijp.js +1 -0
  36. package/dist/cjs/src/idex.js +1 -0
  37. package/dist/cjs/src/independentreserve.js +1 -0
  38. package/dist/cjs/src/indodax.js +1 -0
  39. package/dist/cjs/src/kraken.js +10 -0
  40. package/dist/cjs/src/krakenfutures.js +1 -0
  41. package/dist/cjs/src/kucoin.js +1 -0
  42. package/dist/cjs/src/kucoinfutures.js +1 -0
  43. package/dist/cjs/src/kuna.js +1 -0
  44. package/dist/cjs/src/latoken.js +1 -0
  45. package/dist/cjs/src/lbank.js +1 -0
  46. package/dist/cjs/src/lbank2.js +2 -0
  47. package/dist/cjs/src/luno.js +1 -0
  48. package/dist/cjs/src/lykke.js +2 -1
  49. package/dist/cjs/src/mercado.js +1 -0
  50. package/dist/cjs/src/mexc.js +4 -1
  51. package/dist/cjs/src/ndax.js +1 -0
  52. package/dist/cjs/src/novadax.js +1 -0
  53. package/dist/cjs/src/oceanex.js +1 -0
  54. package/dist/cjs/src/phemex.js +2 -0
  55. package/dist/cjs/src/poloniex.js +1 -0
  56. package/dist/cjs/src/poloniexfutures.js +8 -2
  57. package/dist/cjs/src/pro/krakenfutures.js +14 -10
  58. package/dist/cjs/src/probit.js +1 -0
  59. package/dist/cjs/src/tidex.js +1 -0
  60. package/dist/cjs/src/timex.js +1 -0
  61. package/dist/cjs/src/tokocrypto.js +1 -0
  62. package/dist/cjs/src/upbit.js +1 -0
  63. package/dist/cjs/src/wavesexchange.js +1 -0
  64. package/dist/cjs/src/wazirx.js +2 -1
  65. package/dist/cjs/src/whitebit.js +1 -0
  66. package/dist/cjs/src/woo.js +1 -0
  67. package/dist/cjs/src/yobit.js +1 -0
  68. package/dist/cjs/src/zaif.js +1 -0
  69. package/dist/cjs/src/zonda.js +1 -0
  70. package/js/ccxt.d.ts +1 -1
  71. package/js/ccxt.js +1 -1
  72. package/js/src/abstract/binance.d.ts +4 -0
  73. package/js/src/abstract/binancecoinm.d.ts +4 -0
  74. package/js/src/abstract/binanceus.d.ts +4 -0
  75. package/js/src/abstract/binanceusdm.d.ts +4 -0
  76. package/js/src/abstract/btcturk.d.ts +3 -0
  77. package/js/src/abstract/kraken.d.ts +8 -0
  78. package/js/src/abstract/poloniexfutures.d.ts +6 -1
  79. package/js/src/ascendex.js +1 -0
  80. package/js/src/base/Exchange.d.ts +1 -0
  81. package/js/src/base/Exchange.js +3 -0
  82. package/js/src/binance.js +6 -2
  83. package/js/src/bingx.js +5 -3
  84. package/js/src/bitget.d.ts +28 -0
  85. package/js/src/bitget.js +357 -64
  86. package/js/src/bitmart.js +2 -0
  87. package/js/src/bitmex.js +6 -3
  88. package/js/src/bittrex.d.ts +2 -2
  89. package/js/src/bittrex.js +7 -0
  90. package/js/src/btcalpha.js +2 -1
  91. package/js/src/btcturk.js +3 -0
  92. package/js/src/cex.js +1 -0
  93. package/js/src/coinbase.js +1 -0
  94. package/js/src/coinbasepro.js +1 -0
  95. package/js/src/coinex.js +2 -0
  96. package/js/src/coinfalcon.js +1 -0
  97. package/js/src/coinmate.js +1 -0
  98. package/js/src/coinone.js +15 -5
  99. package/js/src/cryptocom.d.ts +0 -2
  100. package/js/src/cryptocom.js +25 -87
  101. package/js/src/currencycom.js +1 -0
  102. package/js/src/delta.js +1 -0
  103. package/js/src/deribit.js +1 -0
  104. package/js/src/digifinex.d.ts +3 -28
  105. package/js/src/digifinex.js +10 -8
  106. package/js/src/exmo.js +1 -0
  107. package/js/src/gate.d.ts +1 -0
  108. package/js/src/gate.js +3 -0
  109. package/js/src/gemini.d.ts +1 -0
  110. package/js/src/gemini.js +1 -0
  111. package/js/src/hitbtc.js +1 -0
  112. package/js/src/hollaex.js +1 -0
  113. package/js/src/huobi.js +8 -0
  114. package/js/src/huobijp.js +1 -0
  115. package/js/src/idex.js +1 -0
  116. package/js/src/independentreserve.js +1 -0
  117. package/js/src/indodax.js +1 -0
  118. package/js/src/kraken.js +10 -0
  119. package/js/src/krakenfutures.js +1 -0
  120. package/js/src/kucoin.js +1 -0
  121. package/js/src/kucoinfutures.js +1 -0
  122. package/js/src/kuna.js +1 -0
  123. package/js/src/latoken.js +1 -0
  124. package/js/src/lbank.js +1 -0
  125. package/js/src/lbank2.js +2 -0
  126. package/js/src/luno.js +1 -0
  127. package/js/src/lykke.js +2 -1
  128. package/js/src/mercado.js +1 -0
  129. package/js/src/mexc.js +4 -1
  130. package/js/src/ndax.js +1 -0
  131. package/js/src/novadax.js +1 -0
  132. package/js/src/oceanex.js +1 -0
  133. package/js/src/phemex.d.ts +2 -0
  134. package/js/src/phemex.js +2 -0
  135. package/js/src/poloniex.js +1 -0
  136. package/js/src/poloniexfutures.js +8 -2
  137. package/js/src/pro/krakenfutures.js +14 -10
  138. package/js/src/probit.js +1 -0
  139. package/js/src/tidex.js +1 -0
  140. package/js/src/timex.d.ts +1 -0
  141. package/js/src/timex.js +1 -0
  142. package/js/src/tokocrypto.js +1 -0
  143. package/js/src/upbit.js +1 -0
  144. package/js/src/wavesexchange.js +1 -0
  145. package/js/src/wazirx.js +2 -1
  146. package/js/src/whitebit.js +1 -0
  147. package/js/src/woo.js +1 -0
  148. package/js/src/yobit.js +1 -0
  149. package/js/src/zaif.js +1 -0
  150. package/js/src/zonda.js +1 -0
  151. package/package.json +1 -1
  152. package/skip-tests.json +141 -12
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bittrex.js';
2
- import { Int, OrderSide, OrderType } from './base/types.js';
2
+ import { Int, OrderSide, OrderType, OHLCV } from './base/types.js';
3
3
  /**
4
4
  * @class bittrex
5
5
  * @extends Exchange
@@ -38,7 +38,7 @@ export default class bittrex extends Exchange {
38
38
  info: any;
39
39
  };
40
40
  parseOHLCV(ohlcv: any, market?: any): number[];
41
- fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").OHLCV[]>;
41
+ fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
42
42
  fetchOpenOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").Order[]>;
43
43
  fetchOrderTrades(id: string, symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").Trade[]>;
44
44
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<import("./base/types.js").Order>;
package/js/src/bittrex.js CHANGED
@@ -369,6 +369,7 @@ export default class bittrex extends Exchange {
369
369
  'max': undefined,
370
370
  },
371
371
  },
372
+ 'created': this.parse8601(this.safeString(market, 'createdAt')),
372
373
  'info': market,
373
374
  });
374
375
  }
@@ -908,8 +909,14 @@ export default class bittrex extends Exchange {
908
909
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
909
910
  * @param {int} [limit] the maximum amount of candles to fetch
910
911
  * @param {object} [params] extra parameters specific to the bittrex api endpoint
912
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
911
913
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
912
914
  */
915
+ let paginate = false;
916
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
917
+ if (paginate) {
918
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1440);
919
+ }
913
920
  await this.loadMarkets();
914
921
  const market = this.market(symbol);
915
922
  const reverseId = market['baseId'] + '-' + market['quoteId'];
@@ -310,7 +310,8 @@ export default class btcalpha extends Exchange {
310
310
  // sell: '22521.11'
311
311
  // }
312
312
  //
313
- const timestamp = this.safeIntegerProduct(ticker, 'timestamp', 1000000);
313
+ const timestampStr = this.safeString(ticker, 'timestamp');
314
+ const timestamp = parseInt(Precise.stringMul(timestampStr, '1000000'));
314
315
  const marketId = this.safeString(ticker, 'pair');
315
316
  market = this.safeMarket(marketId, market, '_');
316
317
  const last = this.safeString(ticker, 'last');
package/js/src/btcturk.js CHANGED
@@ -95,6 +95,7 @@ export default class btcturk extends Exchange {
95
95
  'orderbook': 1,
96
96
  'ticker': 0.1,
97
97
  'trades': 1,
98
+ 'ohlc': 1,
98
99
  'server/exchangeinfo': 1,
99
100
  },
100
101
  },
@@ -106,6 +107,8 @@ export default class btcturk extends Exchange {
106
107
  'users/transactions/trade': 1,
107
108
  },
108
109
  'post': {
110
+ 'users/transactions/crypto': 1,
111
+ 'users/transactions/fiat': 1,
109
112
  'order': 1,
110
113
  'cancelOrder': 1,
111
114
  },
package/js/src/cex.js CHANGED
@@ -439,6 +439,7 @@ export default class cex extends Exchange {
439
439
  'max': undefined,
440
440
  },
441
441
  },
442
+ 'created': undefined,
442
443
  'info': market,
443
444
  });
444
445
  }
@@ -1076,6 +1076,7 @@ export default class coinbase extends Exchange {
1076
1076
  'max': this.safeNumber(market, 'quote_max_size'),
1077
1077
  },
1078
1078
  },
1079
+ 'created': undefined,
1079
1080
  'info': market,
1080
1081
  });
1081
1082
  }
@@ -413,6 +413,7 @@ export default class coinbasepro extends Exchange {
413
413
  'max': undefined,
414
414
  },
415
415
  },
416
+ 'created': undefined,
416
417
  'info': market,
417
418
  }));
418
419
  }
package/js/src/coinex.js CHANGED
@@ -536,6 +536,7 @@ export default class coinex extends Exchange {
536
536
  'max': undefined,
537
537
  },
538
538
  },
539
+ 'created': undefined,
539
540
  'info': market,
540
541
  });
541
542
  }
@@ -632,6 +633,7 @@ export default class coinex extends Exchange {
632
633
  'max': undefined,
633
634
  },
634
635
  },
636
+ 'created': undefined,
635
637
  'info': entry,
636
638
  });
637
639
  }
@@ -216,6 +216,7 @@ export default class coinfalcon extends Exchange {
216
216
  'max': undefined,
217
217
  },
218
218
  },
219
+ 'created': undefined,
219
220
  'info': market,
220
221
  });
221
222
  }
@@ -291,6 +291,7 @@ export default class coinmate extends Exchange {
291
291
  'max': undefined,
292
292
  },
293
293
  },
294
+ 'created': undefined,
294
295
  'info': market,
295
296
  });
296
297
  }
package/js/src/coinone.js CHANGED
@@ -232,6 +232,7 @@ export default class coinone extends Exchange {
232
232
  'max': undefined,
233
233
  },
234
234
  },
235
+ 'created': undefined,
235
236
  'info': ticker,
236
237
  });
237
238
  }
@@ -626,10 +627,19 @@ export default class coinone extends Exchange {
626
627
  const id = this.safeString(order, 'orderId');
627
628
  const baseId = this.safeString(order, 'baseCurrency');
628
629
  const quoteId = this.safeString(order, 'targetCurrency');
629
- const base = this.safeCurrencyCode(baseId, market['base']);
630
- const quote = this.safeCurrencyCode(quoteId, market['quote']);
631
- const symbol = base + '/' + quote;
632
- market = this.safeMarket(symbol, market, '/');
630
+ let base = undefined;
631
+ let quote = undefined;
632
+ if (baseId !== undefined) {
633
+ base = this.safeCurrencyCode(baseId, this.safeString(market, 'base'));
634
+ }
635
+ if (quoteId !== undefined) {
636
+ quote = this.safeCurrencyCode(quoteId, this.safeString(market, 'quote'));
637
+ }
638
+ let symbol = undefined;
639
+ if ((base !== undefined) && (quote !== undefined)) {
640
+ symbol = base + '/' + quote;
641
+ market = this.safeMarket(symbol, market, '/');
642
+ }
633
643
  const timestamp = this.safeTimestamp2(order, 'timestamp', 'updatedAt');
634
644
  let side = this.safeString2(order, 'type', 'side');
635
645
  if (side === 'ask') {
@@ -889,7 +899,7 @@ export default class coinone extends Exchange {
889
899
  const payload = this.stringToBase64(json);
890
900
  body = payload;
891
901
  const secret = this.secret.toUpperCase();
892
- const signature = this.hmac(payload, this.encode(secret), sha512);
902
+ const signature = this.hmac(this.encode(payload), this.encode(secret), sha512);
893
903
  headers = {
894
904
  'Content-Type': 'application/json',
895
905
  'X-COINONE-PAYLOAD': payload,
@@ -113,7 +113,6 @@ export default class cryptocom extends Exchange {
113
113
  datetime: any;
114
114
  info: any;
115
115
  };
116
- fetchBorrowInterest(code?: string, symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
117
116
  parseBorrowInterest(info: any, market?: any): {
118
117
  symbol: any;
119
118
  marginMode: any;
@@ -125,7 +124,6 @@ export default class cryptocom extends Exchange {
125
124
  datetime: string;
126
125
  info: any;
127
126
  };
128
- fetchBorrowRates(params?: {}): Promise<any[]>;
129
127
  parseBorrowRates(info: any, codeKey: any): any[];
130
128
  customHandleMarginModeAndParams(methodName: any, params?: {}): any[];
131
129
  parseDepositWithdrawFee(fee: any, currency?: any): {
@@ -39,11 +39,11 @@ export default class cryptocom extends Exchange {
39
39
  'fetchAccounts': true,
40
40
  'fetchBalance': true,
41
41
  'fetchBidsAsks': false,
42
- 'fetchBorrowInterest': true,
42
+ 'fetchBorrowInterest': false,
43
43
  'fetchBorrowRate': false,
44
44
  'fetchBorrowRateHistories': false,
45
45
  'fetchBorrowRateHistory': false,
46
- 'fetchBorrowRates': true,
46
+ 'fetchBorrowRates': false,
47
47
  'fetchClosedOrders': 'emulated',
48
48
  'fetchCurrencies': false,
49
49
  'fetchDepositAddress': true,
@@ -337,6 +337,7 @@ export default class cryptocom extends Exchange {
337
337
  'precisionMode': TICK_SIZE,
338
338
  'exceptions': {
339
339
  'exact': {
340
+ '219': InvalidOrder,
340
341
  '10001': ExchangeError,
341
342
  '10002': PermissionDenied,
342
343
  '10003': PermissionDenied,
@@ -566,6 +567,7 @@ export default class cryptocom extends Exchange {
566
567
  'max': undefined,
567
568
  },
568
569
  },
570
+ 'created': undefined,
569
571
  'info': market,
570
572
  });
571
573
  }
@@ -1058,7 +1060,7 @@ export default class cryptocom extends Exchange {
1058
1060
  }
1059
1061
  const postOnly = this.safeValue(params, 'postOnly', false);
1060
1062
  if ((postOnly) || (timeInForce === 'PO')) {
1061
- request['exec_inst'] = 'POST_ONLY';
1063
+ request['exec_inst'] = ['POST_ONLY'];
1062
1064
  request['time_in_force'] = 'GOOD_TILL_CANCEL';
1063
1065
  }
1064
1066
  const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
@@ -1866,8 +1868,8 @@ export default class cryptocom extends Exchange {
1866
1868
  'close': last,
1867
1869
  'last': last,
1868
1870
  'previousClose': undefined,
1869
- 'change': this.safeString(ticker, 'c'),
1870
- 'percentage': undefined,
1871
+ 'change': undefined,
1872
+ 'percentage': this.safeString(ticker, 'c'),
1871
1873
  'average': undefined,
1872
1874
  'baseVolume': this.safeString(ticker, 'v'),
1873
1875
  'quoteVolume': this.safeString(ticker, 'vv'),
@@ -2011,10 +2013,16 @@ export default class cryptocom extends Exchange {
2011
2013
  const created = this.safeInteger(order, 'create_time');
2012
2014
  const marketId = this.safeString(order, 'instrument_name');
2013
2015
  const symbol = this.safeSymbol(marketId, market);
2014
- const execInst = this.safeString(order, 'exec_inst');
2015
- let postOnly = undefined;
2016
+ const execInst = this.safeValue(order, 'exec_inst');
2017
+ let postOnly = false;
2016
2018
  if (execInst !== undefined) {
2017
- postOnly = (execInst === 'POST_ONLY');
2019
+ for (let i = 0; i < execInst.length; i++) {
2020
+ const inst = execInst[i];
2021
+ if (inst === 'POST_ONLY') {
2022
+ postOnly = true;
2023
+ break;
2024
+ }
2025
+ }
2018
2026
  }
2019
2027
  const feeCurrency = this.safeString(order, 'fee_instrument_name');
2020
2028
  return this.safeOrder({
@@ -2247,52 +2255,6 @@ export default class cryptocom extends Exchange {
2247
2255
  'info': info,
2248
2256
  };
2249
2257
  }
2250
- async fetchBorrowInterest(code = undefined, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2251
- await this.loadMarkets();
2252
- const request = {};
2253
- let market = undefined;
2254
- let currency = undefined;
2255
- if (symbol !== undefined) {
2256
- market = this.market(symbol);
2257
- }
2258
- if (code !== undefined) {
2259
- currency = this.currency(code);
2260
- request['currency'] = currency['id'];
2261
- }
2262
- if (since !== undefined) {
2263
- request['start_ts'] = since;
2264
- }
2265
- if (limit !== undefined) {
2266
- request['page_size'] = limit;
2267
- }
2268
- const response = await this.v2PrivatePostPrivateMarginGetInterestHistory(this.extend(request, params));
2269
- //
2270
- // {
2271
- // "id": 1656705829020,
2272
- // "method": "private/margin/get-interest-history",
2273
- // "code": 0,
2274
- // "result": {
2275
- // "list": [
2276
- // {
2277
- // "loan_id": "2643528867803765921",
2278
- // "currency": "USDT",
2279
- // "interest": 0.00000004,
2280
- // "time": 1656702899559,
2281
- // "stake_amount": 6,
2282
- // "interest_rate": 0.000025
2283
- // },
2284
- // ]
2285
- // }
2286
- // }
2287
- //
2288
- const data = this.safeValue(response, 'result', {});
2289
- const rows = this.safeValue(data, 'list', []);
2290
- let interest = undefined;
2291
- for (let i = 0; i < rows.length; i++) {
2292
- interest = this.parseBorrowInterests(rows, market);
2293
- }
2294
- return this.filterByCurrencySinceLimit(interest, code, since, limit);
2295
- }
2296
2258
  parseBorrowInterest(info, market = undefined) {
2297
2259
  //
2298
2260
  // {
@@ -2321,38 +2283,6 @@ export default class cryptocom extends Exchange {
2321
2283
  'info': info,
2322
2284
  };
2323
2285
  }
2324
- async fetchBorrowRates(params = {}) {
2325
- /**
2326
- * @method
2327
- * @name cryptocom#fetchBorrowRates
2328
- * @description fetch the borrow interest rates of all currencies
2329
- * @param {object} [params] extra parameters specific to the cryptocom api endpoint
2330
- * @returns {object} a list of [borrow rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
2331
- */
2332
- await this.loadMarkets();
2333
- const response = await this.v2PrivatePostPrivateMarginGetUserConfig(params);
2334
- //
2335
- // {
2336
- // "id": 1656707947456,
2337
- // "method": "private/margin/get-user-config",
2338
- // "code": 0,
2339
- // "result": {
2340
- // "stake_amount": 6,
2341
- // "currency_configs": [
2342
- // {
2343
- // "currency": "AGLD",
2344
- // "hourly_rate": 0.00003334,
2345
- // "max_borrow_limit": 342.4032393,
2346
- // "min_borrow_limit": 30
2347
- // },
2348
- // ]
2349
- // }
2350
- // }
2351
- //
2352
- const data = this.safeValue(response, 'result', {});
2353
- const rates = this.safeValue(data, 'currency_configs', []);
2354
- return this.parseBorrowRates(rates, 'currency');
2355
- }
2356
2286
  parseBorrowRates(info, codeKey) {
2357
2287
  //
2358
2288
  // {
@@ -3025,7 +2955,15 @@ export default class cryptocom extends Exchange {
3025
2955
  const paramsKeys = Object.keys(keysorted);
3026
2956
  let strSortKey = '';
3027
2957
  for (let i = 0; i < paramsKeys.length; i++) {
3028
- strSortKey = strSortKey + paramsKeys[i].toString() + requestParams[paramsKeys[i]].toString();
2958
+ const key = paramsKeys[i].toString();
2959
+ let value = requestParams[paramsKeys[i]];
2960
+ if (Array.isArray(value)) {
2961
+ value = value.join(',');
2962
+ }
2963
+ else {
2964
+ value = value.toString();
2965
+ }
2966
+ strSortKey = strSortKey + key + value;
3029
2967
  }
3030
2968
  const payload = path + nonce + this.apiKey + strSortKey + nonce;
3031
2969
  const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256);
@@ -570,6 +570,7 @@ export default class currencycom extends Exchange {
570
570
  'max': undefined,
571
571
  },
572
572
  },
573
+ 'created': undefined,
573
574
  'info': market,
574
575
  });
575
576
  }
package/js/src/delta.js CHANGED
@@ -822,6 +822,7 @@ export default class delta extends Exchange {
822
822
  'max': undefined,
823
823
  },
824
824
  },
825
+ 'created': this.parse8601(this.safeString(market, 'launch_time')),
825
826
  'info': market,
826
827
  });
827
828
  }
package/js/src/deribit.js CHANGED
@@ -814,6 +814,7 @@ export default class deribit extends Exchange {
814
814
  'max': undefined,
815
815
  },
816
816
  },
817
+ 'created': this.safeInteger(market, 'creation_timestamp'),
817
818
  'info': market,
818
819
  });
819
820
  }
@@ -134,6 +134,7 @@ export default class digifinex extends Exchange {
134
134
  fetchBorrowInterest(code?: string, symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
135
135
  parseBorrowInterest(info: any, market?: any): {
136
136
  account: any;
137
+ symbol: any;
137
138
  currency: any;
138
139
  interest: any;
139
140
  interestRate: number;
@@ -212,34 +213,8 @@ export default class digifinex extends Exchange {
212
213
  taker: number;
213
214
  };
214
215
  fetchPositions(symbols?: string[], params?: {}): Promise<import("./base/types.js").Position[]>;
215
- fetchPosition(symbol: string, params?: {}): Promise<any>;
216
- parsePosition(position: any, market?: any): {
217
- info: any;
218
- id: any;
219
- symbol: any;
220
- notional: number;
221
- marginMode: string;
222
- liquidationPrice: number;
223
- entryPrice: number;
224
- unrealizedPnl: number;
225
- contracts: number;
226
- contractSize: number;
227
- markPrice: number;
228
- side: string;
229
- hedged: any;
230
- timestamp: number;
231
- datetime: string;
232
- maintenanceMargin: number;
233
- maintenanceMarginPercentage: number;
234
- collateral: any;
235
- initialMargin: any;
236
- initialMarginPercentage: any;
237
- leverage: number;
238
- marginRatio: number;
239
- percentage: any;
240
- stopLossPrice: any;
241
- takeProfitPrice: any;
242
- };
216
+ fetchPosition(symbol: string, params?: {}): Promise<import("./base/types.js").Position>;
217
+ parsePosition(position: any, market?: any): import("./base/types.js").Position;
243
218
  setLeverage(leverage: any, symbol?: string, params?: {}): Promise<any>;
244
219
  fetchTransfers(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
245
220
  fetchLeverageTiers(symbols?: string[], params?: {}): Promise<{}>;
@@ -656,6 +656,7 @@ export default class digifinex extends Exchange {
656
656
  'max': undefined,
657
657
  },
658
658
  },
659
+ 'created': undefined,
659
660
  'info': market,
660
661
  });
661
662
  }
@@ -2810,14 +2811,16 @@ export default class digifinex extends Exchange {
2810
2811
  // "leverage_ratio": 3
2811
2812
  // }
2812
2813
  //
2813
- const symbol = this.safeString(info, 'symbol');
2814
+ const marketId = this.safeString(info, 'symbol');
2814
2815
  const amountString = this.safeString(info, 'amount');
2815
2816
  const leverageString = this.safeString(info, 'leverage_ratio');
2816
2817
  const amountInvested = Precise.stringDiv(amountString, leverageString);
2817
2818
  const amountBorrowed = Precise.stringSub(amountString, amountInvested);
2818
2819
  const currency = (market === undefined) ? undefined : market['base'];
2820
+ const symbol = this.safeSymbol(marketId, market);
2819
2821
  return {
2820
- 'account': this.safeSymbol(symbol, market),
2822
+ 'account': symbol,
2823
+ 'symbol': symbol,
2821
2824
  'currency': currency,
2822
2825
  'interest': undefined,
2823
2826
  'interestRate': 0.001,
@@ -3297,10 +3300,9 @@ export default class digifinex extends Exchange {
3297
3300
  return position;
3298
3301
  }
3299
3302
  else {
3300
- return this.extend(position, {
3301
- 'collateral': this.safeNumber(response, 'margin'),
3302
- 'marginRatio': this.safeNumber(response, 'margin_rate'),
3303
- });
3303
+ position['collateral'] = this.safeNumber(response, 'margin');
3304
+ position['marginRatio'] = this.safeNumber(response, 'margin_rate');
3305
+ return position;
3304
3306
  }
3305
3307
  }
3306
3308
  parsePosition(position, market = undefined) {
@@ -3360,7 +3362,7 @@ export default class digifinex extends Exchange {
3360
3362
  else if (side === 'go_short') {
3361
3363
  side = 'short';
3362
3364
  }
3363
- return {
3365
+ return this.safePosition({
3364
3366
  'info': position,
3365
3367
  'id': undefined,
3366
3368
  'symbol': symbol,
@@ -3386,7 +3388,7 @@ export default class digifinex extends Exchange {
3386
3388
  'percentage': undefined,
3387
3389
  'stopLossPrice': undefined,
3388
3390
  'takeProfitPrice': undefined,
3389
- };
3391
+ });
3390
3392
  }
3391
3393
  async setLeverage(leverage, symbol = undefined, params = {}) {
3392
3394
  /**
package/js/src/exmo.js CHANGED
@@ -829,6 +829,7 @@ export default class exmo extends Exchange {
829
829
  'max': this.safeNumber(market, 'max_amount'),
830
830
  },
831
831
  },
832
+ 'created': undefined,
832
833
  'info': market,
833
834
  });
834
835
  }
package/js/src/gate.d.ts CHANGED
@@ -105,6 +105,7 @@ export default class gate extends Exchange {
105
105
  max: any;
106
106
  };
107
107
  };
108
+ created: any;
108
109
  info: any;
109
110
  };
110
111
  fetchOptionMarkets(params?: {}): Promise<any[]>;
package/js/src/gate.js CHANGED
@@ -1098,6 +1098,7 @@ export default class gate extends Exchange {
1098
1098
  'max': margin ? this.safeNumber(market, 'max_quote_amount') : undefined,
1099
1099
  },
1100
1100
  },
1101
+ 'created': undefined,
1101
1102
  'info': market,
1102
1103
  });
1103
1104
  }
@@ -1295,6 +1296,7 @@ export default class gate extends Exchange {
1295
1296
  'max': undefined,
1296
1297
  },
1297
1298
  },
1299
+ 'created': undefined,
1298
1300
  'info': market,
1299
1301
  };
1300
1302
  }
@@ -1415,6 +1417,7 @@ export default class gate extends Exchange {
1415
1417
  'max': undefined,
1416
1418
  },
1417
1419
  },
1420
+ 'created': this.safeIntegerProduct(market, 'create_time', 1000),
1418
1421
  'info': market,
1419
1422
  });
1420
1423
  }
@@ -59,6 +59,7 @@ export default class gemini extends Exchange {
59
59
  max: any;
60
60
  };
61
61
  };
62
+ created: any;
62
63
  info: any;
63
64
  };
64
65
  fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<import("./base/types.js").OrderBook>;
package/js/src/gemini.js CHANGED
@@ -645,6 +645,7 @@ export default class gemini extends Exchange {
645
645
  'max': undefined,
646
646
  },
647
647
  },
648
+ 'created': undefined,
648
649
  'info': response,
649
650
  };
650
651
  }
package/js/src/hitbtc.js CHANGED
@@ -737,6 +737,7 @@ export default class hitbtc extends Exchange {
737
737
  'max': undefined,
738
738
  },
739
739
  },
740
+ 'created': undefined,
740
741
  'info': market,
741
742
  });
742
743
  }
package/js/src/hollaex.js CHANGED
@@ -315,6 +315,7 @@ export default class hollaex extends Exchange {
315
315
  'max': undefined,
316
316
  },
317
317
  },
318
+ 'created': this.parse8601(this.safeString(market, 'created_at')),
318
319
  'info': market,
319
320
  });
320
321
  }
package/js/src/huobi.js CHANGED
@@ -1707,6 +1707,13 @@ export default class huobi extends Exchange {
1707
1707
  // 7 Settlement Completed
1708
1708
  // 8 Delivered
1709
1709
  // 9 Suspending of Trade
1710
+ let created = undefined;
1711
+ let createdDate = this.safeString(market, 'create_date'); // i.e 20230101
1712
+ if (createdDate !== undefined) {
1713
+ const createdArray = this.stringToCharsArray(createdDate);
1714
+ createdDate = createdArray[0] + createdArray[1] + createdArray[2] + createdArray[3] + '-' + createdArray[4] + createdArray[5] + '-' + createdArray[6] + createdArray[7] + ' 00:00:00';
1715
+ created = this.parse8601(createdDate);
1716
+ }
1710
1717
  result.push({
1711
1718
  'id': id,
1712
1719
  'lowercaseId': lowercaseId,
@@ -1759,6 +1766,7 @@ export default class huobi extends Exchange {
1759
1766
  'max': undefined,
1760
1767
  },
1761
1768
  },
1769
+ 'created': created,
1762
1770
  'info': market,
1763
1771
  });
1764
1772
  }
package/js/src/huobijp.js CHANGED
@@ -517,6 +517,7 @@ export default class huobijp extends Exchange {
517
517
  'max': undefined,
518
518
  },
519
519
  },
520
+ 'created': undefined,
520
521
  'info': market,
521
522
  });
522
523
  }
package/js/src/idex.js CHANGED
@@ -312,6 +312,7 @@ export default class idex extends Exchange {
312
312
  'max': undefined,
313
313
  },
314
314
  },
315
+ 'created': undefined,
315
316
  'info': entry,
316
317
  });
317
318
  }
@@ -214,6 +214,7 @@ export default class independentreserve extends Exchange {
214
214
  'max': undefined,
215
215
  },
216
216
  },
217
+ 'created': undefined,
217
218
  'info': id,
218
219
  });
219
220
  }
package/js/src/indodax.js CHANGED
@@ -282,6 +282,7 @@ export default class indodax extends Exchange {
282
282
  'max': undefined,
283
283
  },
284
284
  },
285
+ 'created': undefined,
285
286
  'info': market,
286
287
  });
287
288
  }