ccxt 4.2.19 → 4.2.21

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 (64) hide show
  1. package/README.md +98 -98
  2. package/dist/ccxt.browser.js +1119 -364
  3. package/dist/ccxt.browser.min.js +6 -6
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/base/Exchange.js +47 -4
  6. package/dist/cjs/src/base/ws/WsClient.js +3 -1
  7. package/dist/cjs/src/binance.js +2 -1
  8. package/dist/cjs/src/binanceus.js +17 -0
  9. package/dist/cjs/src/bingx.js +2 -1
  10. package/dist/cjs/src/bitget.js +25 -31
  11. package/dist/cjs/src/bitteam.js +1 -1
  12. package/dist/cjs/src/bitvavo.js +271 -172
  13. package/dist/cjs/src/blockchaincom.js +3 -1
  14. package/dist/cjs/src/bybit.js +0 -28
  15. package/dist/cjs/src/delta.js +0 -18
  16. package/dist/cjs/src/gate.js +32 -26
  17. package/dist/cjs/src/kucoinfutures.js +9 -9
  18. package/dist/cjs/src/novadax.js +26 -22
  19. package/dist/cjs/src/okx.js +0 -18
  20. package/dist/cjs/src/phemex.js +2 -1
  21. package/dist/cjs/src/pro/bitopro.js +7 -3
  22. package/dist/cjs/src/pro/bitvavo.js +668 -22
  23. package/dist/cjs/src/pro/lbank.js +1 -1
  24. package/js/ccxt.d.ts +1 -1
  25. package/js/ccxt.js +1 -1
  26. package/js/src/abstract/binance.d.ts +1 -0
  27. package/js/src/abstract/binancecoinm.d.ts +1 -0
  28. package/js/src/abstract/binanceus.d.ts +1 -0
  29. package/js/src/abstract/binanceusdm.d.ts +1 -0
  30. package/js/src/abstract/bitpanda.js +11 -0
  31. package/js/src/abstract/gate.d.ts +1 -0
  32. package/js/src/abstract/gateio.d.ts +1 -0
  33. package/js/src/abstract/novadax.d.ts +5 -1
  34. package/js/src/abstract/phemex.d.ts +1 -0
  35. package/js/src/base/Exchange.d.ts +15 -1
  36. package/js/src/base/Exchange.js +47 -4
  37. package/js/src/base/ws/WsClient.js +3 -2
  38. package/js/src/binance.js +2 -1
  39. package/js/src/binanceus.js +17 -0
  40. package/js/src/bingx.js +2 -1
  41. package/js/src/bitget.d.ts +1 -1
  42. package/js/src/bitget.js +25 -31
  43. package/js/src/bitteam.js +1 -1
  44. package/js/src/bitvavo.d.ts +14 -2
  45. package/js/src/bitvavo.js +271 -172
  46. package/js/src/blockchaincom.js +3 -1
  47. package/js/src/bybit.d.ts +0 -1
  48. package/js/src/bybit.js +1 -29
  49. package/js/src/delta.d.ts +0 -1
  50. package/js/src/delta.js +0 -18
  51. package/js/src/gate.d.ts +1 -1
  52. package/js/src/gate.js +32 -26
  53. package/js/src/kucoinfutures.d.ts +6 -6
  54. package/js/src/kucoinfutures.js +9 -9
  55. package/js/src/novadax.js +26 -22
  56. package/js/src/okx.d.ts +0 -1
  57. package/js/src/okx.js +0 -18
  58. package/js/src/phemex.js +2 -1
  59. package/js/src/pro/bitopro.js +7 -3
  60. package/js/src/pro/bitvavo.d.ts +35 -2
  61. package/js/src/pro/bitvavo.js +669 -23
  62. package/js/src/pro/lbank.js +1 -1
  63. package/package.json +1 -1
  64. package/skip-tests.json +2 -1
package/js/src/bybit.js CHANGED
@@ -7,7 +7,7 @@
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/bybit.js';
9
9
  import { TICK_SIZE } from './base/functions/number.js';
10
- import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, BadSymbol, MarginModeAlreadySet, NoChange } from './base/errors.js';
10
+ import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange } from './base/errors.js';
11
11
  import { Precise } from './base/Precise.js';
12
12
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
13
  import { rsa } from './base/functions/rsa.js';
@@ -1251,34 +1251,6 @@ export default class bybit extends Exchange {
1251
1251
  'info': undefined,
1252
1252
  };
1253
1253
  }
1254
- market(symbol) {
1255
- if (this.markets === undefined) {
1256
- throw new ExchangeError(this.id + ' markets not loaded');
1257
- }
1258
- if (typeof symbol === 'string') {
1259
- if (symbol in this.markets) {
1260
- return this.markets[symbol];
1261
- }
1262
- else if (symbol in this.markets_by_id) {
1263
- const markets = this.markets_by_id[symbol];
1264
- let defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
1265
- if (defaultType === 'future') {
1266
- defaultType = 'contract';
1267
- }
1268
- for (let i = 0; i < markets.length; i++) {
1269
- const market = markets[i];
1270
- if (market[defaultType]) {
1271
- return market;
1272
- }
1273
- }
1274
- return markets[0];
1275
- }
1276
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
1277
- return this.createExpiredOptionMarket(symbol);
1278
- }
1279
- }
1280
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
1281
- }
1282
1254
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
1283
1255
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
1284
1256
  if (isOption && !(marketId in this.markets_by_id)) {
package/js/src/delta.d.ts CHANGED
@@ -8,7 +8,6 @@ export default class delta extends Exchange {
8
8
  describe(): any;
9
9
  convertExpireDate(date: any): string;
10
10
  createExpiredOptionMarket(symbol: any): MarketInterface;
11
- market(symbol: any): any;
12
11
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
13
12
  fetchTime(params?: {}): Promise<number>;
14
13
  fetchStatus(params?: {}): Promise<{
package/js/src/delta.js CHANGED
@@ -318,24 +318,6 @@ export default class delta extends Exchange {
318
318
  'info': undefined,
319
319
  };
320
320
  }
321
- market(symbol) {
322
- if (this.markets === undefined) {
323
- throw new ExchangeError(this.id + ' markets not loaded');
324
- }
325
- if (typeof symbol === 'string') {
326
- if (symbol in this.markets) {
327
- return this.markets[symbol];
328
- }
329
- else if (symbol in this.markets_by_id) {
330
- const markets = this.markets_by_id[symbol];
331
- return markets[0];
332
- }
333
- else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {
334
- return this.createExpiredOptionMarket(symbol);
335
- }
336
- }
337
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
338
- }
339
321
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
340
322
  const isOption = (marketId !== undefined) && ((marketId.endsWith('-C')) || (marketId.endsWith('-P')) || (marketId.startsWith('C-')) || (marketId.startsWith('P-')));
341
323
  if (isOption && !(marketId in this.markets_by_id)) {
package/js/src/gate.d.ts CHANGED
@@ -9,7 +9,6 @@ export default class gate extends Exchange {
9
9
  setSandboxMode(enable: any): void;
10
10
  convertExpireDate(date: any): string;
11
11
  createExpiredOptionMarket(symbol: any): MarketInterface;
12
- market(symbol: any): any;
13
12
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
14
13
  fetchMarkets(params?: {}): Promise<any>;
15
14
  fetchSpotMarkets(params?: {}): Promise<any[]>;
@@ -221,6 +220,7 @@ export default class gate extends Exchange {
221
220
  fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
222
221
  fetchLeverageTiers(symbols?: Strings, params?: {}): Promise<{}>;
223
222
  fetchMarketLeverageTiers(symbol: string, params?: {}): Promise<any[]>;
223
+ parseEmulatedLeverageTiers(info: any, market?: any): any[];
224
224
  parseMarketLeverageTiers(info: any, market?: Market): any[];
225
225
  repayIsolatedMargin(symbol: string, code: string, amount: any, params?: {}): Promise<{
226
226
  id: number;
package/js/src/gate.js CHANGED
@@ -532,6 +532,7 @@ export default class gate extends Exchange {
532
532
  'multi_collateral/currency_quota': 20 / 15,
533
533
  'multi_collateral/currencies': 20 / 15,
534
534
  'multi_collateral/ltv': 20 / 15,
535
+ 'multi_collateral/fixed_rate': 20 / 15,
535
536
  },
536
537
  'post': {
537
538
  'collateral/orders': 20 / 15,
@@ -936,31 +937,6 @@ export default class gate extends Exchange {
936
937
  'info': undefined,
937
938
  };
938
939
  }
939
- market(symbol) {
940
- if (this.markets === undefined) {
941
- throw new ExchangeError(this.id + ' markets not loaded');
942
- }
943
- if (typeof symbol === 'string') {
944
- if (symbol in this.markets) {
945
- return this.markets[symbol];
946
- }
947
- else if (symbol in this.markets_by_id) {
948
- const markets = this.markets_by_id[symbol];
949
- const defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
950
- for (let i = 0; i < markets.length; i++) {
951
- const market = markets[i];
952
- if (market[defaultType]) {
953
- return market;
954
- }
955
- }
956
- return markets[0];
957
- }
958
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
959
- return this.createExpiredOptionMarket(symbol);
960
- }
961
- }
962
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
963
- }
964
940
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
965
941
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
966
942
  if (isOption && !(marketId in this.markets_by_id)) {
@@ -5586,7 +5562,7 @@ export default class gate extends Exchange {
5586
5562
  * @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
5587
5563
  * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts
5588
5564
  * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts-2
5589
- * @param {string[]|undefined} symbols list of unified market symbols
5565
+ * @param {string[]} [symbols] list of unified market symbols
5590
5566
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5591
5567
  * @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
5592
5568
  */
@@ -5731,6 +5707,33 @@ export default class gate extends Exchange {
5731
5707
  //
5732
5708
  return this.parseMarketLeverageTiers(response, market);
5733
5709
  }
5710
+ parseEmulatedLeverageTiers(info, market = undefined) {
5711
+ const maintenanceMarginUnit = this.safeString(info, 'maintenance_rate'); // '0.005',
5712
+ const leverageMax = this.safeString(info, 'leverage_max'); // '100',
5713
+ const riskLimitStep = this.safeString(info, 'risk_limit_step'); // '1000000',
5714
+ const riskLimitMax = this.safeString(info, 'risk_limit_max'); // '16000000',
5715
+ const initialMarginUnit = Precise.stringDiv('1', leverageMax);
5716
+ let maintenanceMarginRate = maintenanceMarginUnit;
5717
+ let initialMarginRatio = initialMarginUnit;
5718
+ let floor = '0';
5719
+ const tiers = [];
5720
+ while (Precise.stringLt(floor, riskLimitMax)) {
5721
+ const cap = Precise.stringAdd(floor, riskLimitStep);
5722
+ tiers.push({
5723
+ 'tier': this.parseNumber(Precise.stringDiv(cap, riskLimitStep)),
5724
+ 'currency': this.safeString(market, 'settle'),
5725
+ 'minNotional': this.parseNumber(floor),
5726
+ 'maxNotional': this.parseNumber(cap),
5727
+ 'maintenanceMarginRate': this.parseNumber(maintenanceMarginRate),
5728
+ 'maxLeverage': this.parseNumber(Precise.stringDiv('1', initialMarginRatio)),
5729
+ 'info': info,
5730
+ });
5731
+ maintenanceMarginRate = Precise.stringAdd(maintenanceMarginRate, maintenanceMarginUnit);
5732
+ initialMarginRatio = Precise.stringAdd(initialMarginRatio, initialMarginUnit);
5733
+ floor = cap;
5734
+ }
5735
+ return tiers;
5736
+ }
5734
5737
  parseMarketLeverageTiers(info, market = undefined) {
5735
5738
  //
5736
5739
  // [
@@ -5743,6 +5746,9 @@ export default class gate extends Exchange {
5743
5746
  // }
5744
5747
  // ]
5745
5748
  //
5749
+ if (!Array.isArray(info)) {
5750
+ return this.parseEmulatedLeverageTiers(info, market);
5751
+ }
5746
5752
  let minNotional = 0;
5747
5753
  const tiers = [];
5748
5754
  for (let i = 0; i < info.length; i++) {
@@ -56,14 +56,14 @@ export default class kucoinfutures extends kucoin {
56
56
  timestamp: any;
57
57
  datetime: any;
58
58
  fundingRate: number;
59
- fundingTimestamp: any;
60
- fundingDatetime: any;
61
- nextFundingRate: any;
59
+ fundingTimestamp: number;
60
+ fundingDatetime: string;
61
+ nextFundingRate: number;
62
62
  nextFundingTimestamp: any;
63
63
  nextFundingDatetime: any;
64
- previousFundingRate: number;
65
- previousFundingTimestamp: number;
66
- previousFundingDatetime: string;
64
+ previousFundingRate: any;
65
+ previousFundingTimestamp: any;
66
+ previousFundingDatetime: any;
67
67
  }>;
68
68
  parseBalance(response: any): Balances;
69
69
  fetchBalance(params?: {}): Promise<Balances>;
@@ -1834,7 +1834,7 @@ export default class kucoinfutures extends kucoin {
1834
1834
  * @method
1835
1835
  * @name kucoinfutures#fetchFundingRate
1836
1836
  * @description fetch the current funding rate
1837
- * @see https://www.kucoin.com/docs/rest/futures-trading/market-data/get-current-funding-rate
1837
+ * @see https://www.kucoin.com/docs/rest/futures-trading/funding-fees/get-current-funding-rate
1838
1838
  * @param {string} symbol unified market symbol
1839
1839
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1840
1840
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
@@ -1858,7 +1858,7 @@ export default class kucoinfutures extends kucoin {
1858
1858
  // }
1859
1859
  //
1860
1860
  const data = this.safeValue(response, 'data');
1861
- const fundingTimestamp = this.safeNumber(data, 'timePoint');
1861
+ const fundingTimestamp = this.safeInteger(data, 'timePoint');
1862
1862
  // the website displayes the previous funding rate as "funding rate"
1863
1863
  return {
1864
1864
  'info': data,
@@ -1869,15 +1869,15 @@ export default class kucoinfutures extends kucoin {
1869
1869
  'estimatedSettlePrice': undefined,
1870
1870
  'timestamp': undefined,
1871
1871
  'datetime': undefined,
1872
- 'fundingRate': this.safeNumber(data, 'predictedValue'),
1873
- 'fundingTimestamp': undefined,
1874
- 'fundingDatetime': undefined,
1875
- 'nextFundingRate': undefined,
1872
+ 'fundingRate': this.safeNumber(data, 'value'),
1873
+ 'fundingTimestamp': fundingTimestamp,
1874
+ 'fundingDatetime': this.iso8601(fundingTimestamp),
1875
+ 'nextFundingRate': this.safeNumber(data, 'predictedValue'),
1876
1876
  'nextFundingTimestamp': undefined,
1877
1877
  'nextFundingDatetime': undefined,
1878
- 'previousFundingRate': this.safeNumber(data, 'value'),
1879
- 'previousFundingTimestamp': fundingTimestamp,
1880
- 'previousFundingDatetime': this.iso8601(fundingTimestamp),
1878
+ 'previousFundingRate': undefined,
1879
+ 'previousFundingTimestamp': undefined,
1880
+ 'previousFundingDatetime': undefined,
1881
1881
  };
1882
1882
  }
1883
1883
  parseBalance(response) {
package/js/src/novadax.js CHANGED
@@ -22,9 +22,9 @@ export default class novadax extends Exchange {
22
22
  'id': 'novadax',
23
23
  'name': 'NovaDAX',
24
24
  'countries': ['BR'],
25
- // 60 requests per second = 1000ms / 60 = 16.6667ms between requests (public endpoints, limited by IP address)
26
- // 20 requests per second => cost = 60 / 20 = 3 (private endpoints, limited by API Key)
27
- 'rateLimit': 16.6667,
25
+ // 6000 weight per min => 100 weight per second => min weight = 1
26
+ // 100 requests per second => ( 1000ms / 100 ) = 10 ms between requests on average
27
+ 'rateLimit': 10,
28
28
  'version': 'v1',
29
29
  // new metainfo interface
30
30
  'has': {
@@ -122,33 +122,37 @@ export default class novadax extends Exchange {
122
122
  'api': {
123
123
  'public': {
124
124
  'get': {
125
- 'common/symbol': 1.2,
126
- 'common/symbols': 1.2,
127
- 'common/timestamp': 1.2,
128
- 'market/tickers': 1.2,
129
- 'market/ticker': 1.2,
130
- 'market/depth': 1.2,
131
- 'market/trades': 1.2,
132
- 'market/kline/history': 1.2,
125
+ 'common/symbol': 1,
126
+ 'common/symbols': 1,
127
+ 'common/timestamp': 1,
128
+ 'market/tickers': 5,
129
+ 'market/ticker': 1,
130
+ 'market/depth': 1,
131
+ 'market/trades': 5,
132
+ 'market/kline/history': 5,
133
133
  },
134
134
  },
135
135
  'private': {
136
136
  'get': {
137
- 'orders/get': 3,
138
- 'orders/list': 3,
137
+ 'orders/get': 1,
138
+ 'orders/list': 10,
139
139
  'orders/fill': 3,
140
- 'orders/fills': 3,
141
- 'account/getBalance': 3,
142
- 'account/subs': 3,
143
- 'account/subs/balance': 3,
144
- 'account/subs/transfer/record': 3,
140
+ 'orders/fills': 10,
141
+ 'account/getBalance': 1,
142
+ 'account/subs': 1,
143
+ 'account/subs/balance': 1,
144
+ 'account/subs/transfer/record': 10,
145
145
  'wallet/query/deposit-withdraw': 3,
146
146
  },
147
147
  'post': {
148
- 'orders/create': 3,
149
- 'orders/cancel': 3,
150
- 'account/withdraw/coin': 3,
151
- 'account/subs/transfer': 3,
148
+ 'orders/create': 5,
149
+ 'orders/batch-create': 50,
150
+ 'orders/cancel': 1,
151
+ 'orders/batch-cancel': 10,
152
+ 'orders/cancel-by-symbol': 10,
153
+ 'account/subs/transfer': 5,
154
+ 'wallet/withdraw/coin': 3,
155
+ 'account/withdraw/coin': 3, // not found in doc
152
156
  },
153
157
  },
154
158
  },
package/js/src/okx.d.ts CHANGED
@@ -10,7 +10,6 @@ export default class okx extends Exchange {
10
10
  convertToInstrumentType(type: any): string;
11
11
  convertExpireDate(date: any): string;
12
12
  createExpiredOptionMarket(symbol: any): MarketInterface;
13
- market(symbol: any): any;
14
13
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
15
14
  fetchStatus(params?: {}): Promise<{
16
15
  updated: any;
package/js/src/okx.js CHANGED
@@ -1155,24 +1155,6 @@ export default class okx extends Exchange {
1155
1155
  'info': undefined,
1156
1156
  };
1157
1157
  }
1158
- market(symbol) {
1159
- if (this.markets === undefined) {
1160
- throw new ExchangeError(this.id + ' markets not loaded');
1161
- }
1162
- if (typeof symbol === 'string') {
1163
- if (symbol in this.markets) {
1164
- return this.markets[symbol];
1165
- }
1166
- else if (symbol in this.markets_by_id) {
1167
- const markets = this.markets_by_id[symbol];
1168
- return markets[0];
1169
- }
1170
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
1171
- return this.createExpiredOptionMarket(symbol);
1172
- }
1173
- }
1174
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
1175
- }
1176
1158
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
1177
1159
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
1178
1160
  if (isOption && !(marketId in this.markets_by_id)) {
package/js/src/phemex.js CHANGED
@@ -193,6 +193,7 @@ export default class phemex extends Exchange {
193
193
  'api-data/g-futures/trades': 5,
194
194
  'api-data/futures/trading-fees': 5,
195
195
  'api-data/g-futures/trading-fees': 5,
196
+ 'api-data/futures/v2/tradeAccountDetail': 5,
196
197
  'g-orders/activeList': 1,
197
198
  'orders/activeList': 1,
198
199
  'exchange/order/list': 5,
@@ -2770,7 +2771,7 @@ export default class phemex extends Exchange {
2770
2771
  }
2771
2772
  else if (amount !== undefined) {
2772
2773
  if (isUSDTSettled) {
2773
- request['baseQtyEV'] = this.amountToPrecision(market['symbol'], amount);
2774
+ request['orderQtyRq'] = this.amountToPrecision(market['symbol'], amount);
2774
2775
  }
2775
2776
  else {
2776
2777
  request['baseQtyEV'] = this.toEv(amount, market);
@@ -26,8 +26,8 @@ export default class bitopro extends bitoproRest {
26
26
  },
27
27
  'urls': {
28
28
  'ws': {
29
- 'public': 'wss://stream.bitopro.com:9443/ws/v1/pub',
30
- 'private': 'wss://stream.bitopro.com:9443/ws/v1/pub/auth',
29
+ 'public': 'wss://stream.bitopro.com:443/ws/v1/pub',
30
+ 'private': 'wss://stream.bitopro.com:443/ws/v1/pub/auth',
31
31
  },
32
32
  },
33
33
  'requiredCredentials': {
@@ -56,6 +56,7 @@ export default class bitopro extends bitoproRest {
56
56
  * @method
57
57
  * @name bitopro#watchOrderBook
58
58
  * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
59
+ * @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/order_book_stream.md
59
60
  * @param {string} symbol unified symbol of the market to fetch the order book for
60
61
  * @param {int} [limit] the maximum amount of order book entries to return
61
62
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -121,6 +122,7 @@ export default class bitopro extends bitoproRest {
121
122
  * @method
122
123
  * @name bitopro#watchTrades
123
124
  * @description get the list of most recent trades for a particular symbol
125
+ * @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/trade_stream.md
124
126
  * @param {string} symbol unified symbol of the market to fetch trades for
125
127
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
126
128
  * @param {int} [limit] the maximum amount of trades to fetch
@@ -180,6 +182,7 @@ export default class bitopro extends bitoproRest {
180
182
  * @method
181
183
  * @name bitopro#watchTicker
182
184
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
185
+ * @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/ticker_stream.md
183
186
  * @param {string} symbol unified symbol of the market to fetch the ticker for
184
187
  * @param {object} [params] extra parameters specific to the exchange API endpoint
185
188
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -233,7 +236,7 @@ export default class bitopro extends bitoproRest {
233
236
  'identity': this.login,
234
237
  });
235
238
  const payload = this.stringToBase64(rawData);
236
- const signature = this.hmac(payload, this.encode(this.secret), sha384);
239
+ const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha384);
237
240
  const defaultOptions = {
238
241
  'ws': {
239
242
  'options': {
@@ -259,6 +262,7 @@ export default class bitopro extends bitoproRest {
259
262
  * @method
260
263
  * @name bitopro#watchBalance
261
264
  * @description watch balance and get the amount of funds available for trading or funds locked in orders
265
+ * @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/user_balance_stream.md
262
266
  * @param {object} [params] extra parameters specific to the exchange API endpoint
263
267
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
264
268
  */
@@ -1,5 +1,5 @@
1
1
  import bitvavoRest from '../bitvavo.js';
2
- import type { Int, Str, OrderBook, Order, Trade, Ticker, OHLCV } from '../base/types.js';
2
+ import { Int, Str, OrderSide, OrderType, OrderBook, Ticker, Trade, Order, OHLCV, Balances } from '../base/types.js';
3
3
  import Client from '../base/ws/Client.js';
4
4
  export default class bitvavo extends bitvavoRest {
5
5
  describe(): any;
@@ -9,6 +9,7 @@ export default class bitvavo extends bitvavoRest {
9
9
  watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
10
10
  handleTrade(client: Client, message: any): void;
11
11
  watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
12
+ handleFetchOHLCV(client: Client, message: any): void;
12
13
  handleOHLCV(client: Client, message: any): void;
13
14
  watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
14
15
  handleDelta(bookside: any, delta: any): void;
@@ -21,10 +22,42 @@ export default class bitvavo extends bitvavoRest {
21
22
  handleOrderBookSubscriptions(client: Client, message: any, marketIds: any): void;
22
23
  watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
23
24
  watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
25
+ createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<Order>;
26
+ editOrderWs(id: string, symbol: any, type: any, side: any, amount?: any, price?: any, params?: {}): Promise<Order>;
27
+ cancelOrderWs(id: string, symbol?: string, params?: {}): Promise<any>;
28
+ cancelAllOrdersWs(symbol?: string, params?: {}): Promise<any>;
29
+ handleMultipleOrders(client: Client, message: any): void;
30
+ fetchOrderWs(id: string, symbol?: string, params?: {}): Promise<Order>;
31
+ fetchOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
32
+ watchRequest(action: any, request: any): Promise<any>;
33
+ fetchOpenOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
34
+ fetchMyTradesWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
35
+ handleMyTrades(client: Client, message: any): void;
36
+ withdrawWs(code: string, amount: any, address: any, tag?: any, params?: {}): Promise<any>;
37
+ handleWithdraw(client: Client, message: any): void;
38
+ fetchWithdrawalsWs(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
39
+ handleWithdraws(client: Client, message: any): void;
40
+ fetchOHLCVWs(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
41
+ fetchDepositsWs(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
42
+ handleDeposits(client: Client, message: any): void;
43
+ fetchTradingFeesWs(params?: {}): Promise<any>;
44
+ fetchMarketsWs(params?: {}): Promise<any>;
45
+ fetchCurrenciesWs(params?: {}): Promise<any>;
46
+ handleFetchCurrencies(client: Client, message: any): void;
47
+ handleTradingFees(client: any, message: any): void;
48
+ fetchBalanceWs(params?: {}): Promise<Balances>;
49
+ handleFetchBalance(client: Client, message: any): void;
50
+ handleSingleOrder(client: Client, message: any): void;
51
+ handleMarkets(client: Client, message: any): void;
52
+ buildMessageHash(action: any, params?: {}): any;
53
+ checkMessageHashDoesNotExist(messageHash: any): void;
54
+ actionAndMarketMessageHash(action: any, params?: {}): string;
55
+ actionAndOrderIdMessageHash(action: any, params?: {}): string;
24
56
  handleOrder(client: Client, message: any): void;
25
57
  handleMyTrade(client: Client, message: any): void;
26
58
  handleSubscriptionStatus(client: Client, message: any): any;
27
59
  authenticate(params?: {}): any;
28
60
  handleAuthenticationMessage(client: Client, message: any): void;
29
- handleMessage(client: Client, message: any): any;
61
+ handleErrorMessage(client: Client, message: any): void;
62
+ handleMessage(client: Client, message: any): void;
30
63
  }