ccxt 4.3.28 → 4.3.30

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 (46) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +30 -0
  3. package/dist/ccxt.browser.min.js.LICENSE.txt +12 -0
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/base/Exchange.js +6 -0
  6. package/dist/cjs/src/base/ws/OrderBookSide.js +4 -4
  7. package/dist/cjs/src/bingx.js +98 -84
  8. package/dist/cjs/src/bitmart.js +72 -0
  9. package/dist/cjs/src/coinex.js +260 -311
  10. package/dist/cjs/src/kucoin.js +1 -0
  11. package/dist/cjs/src/pro/bitfinex.js +4 -4
  12. package/dist/cjs/src/pro/bitfinex2.js +2 -2
  13. package/dist/cjs/src/pro/bitmex.js +3 -3
  14. package/dist/cjs/src/pro/blockchaincom.js +2 -2
  15. package/dist/cjs/src/pro/cryptocom.js +4 -4
  16. package/dist/cjs/src/pro/deribit.js +9 -9
  17. package/dist/cjs/src/pro/idex.js +1 -1
  18. package/dist/cjs/src/pro/luno.js +4 -5
  19. package/dist/cjs/src/pro/mexc.js +2 -2
  20. package/dist/cjs/src/whitebit.js +55 -5
  21. package/js/ccxt.d.ts +1 -1
  22. package/js/ccxt.js +1 -1
  23. package/js/src/abstract/bingx.d.ts +7 -0
  24. package/js/src/abstract/bitmart.d.ts +1 -0
  25. package/js/src/base/Exchange.js +6 -0
  26. package/js/src/base/ws/Cache.d.ts +1 -1
  27. package/js/src/base/ws/OrderBookSide.d.ts +4 -5
  28. package/js/src/base/ws/OrderBookSide.js +4 -4
  29. package/js/src/bingx.js +98 -84
  30. package/js/src/bitmart.d.ts +2 -1
  31. package/js/src/bitmart.js +72 -0
  32. package/js/src/coinex.d.ts +5 -6
  33. package/js/src/coinex.js +260 -311
  34. package/js/src/kucoin.js +1 -0
  35. package/js/src/pro/bitfinex.js +4 -4
  36. package/js/src/pro/bitfinex2.js +2 -2
  37. package/js/src/pro/bitmex.js +3 -3
  38. package/js/src/pro/blockchaincom.js +2 -2
  39. package/js/src/pro/cryptocom.js +4 -4
  40. package/js/src/pro/deribit.js +9 -9
  41. package/js/src/pro/idex.js +1 -1
  42. package/js/src/pro/luno.js +4 -5
  43. package/js/src/pro/mexc.js +2 -2
  44. package/js/src/whitebit.d.ts +2 -0
  45. package/js/src/whitebit.js +55 -5
  46. package/package.json +4 -2
package/js/src/bingx.js CHANGED
@@ -21,8 +21,7 @@ export default class bingx extends Exchange {
21
21
  'id': 'bingx',
22
22
  'name': 'BingX',
23
23
  'countries': ['US'],
24
- // cheapest is 60 requests a minute = 1 requests per second on average => ( 1000ms / 1) = 1000 ms between requests on average
25
- 'rateLimit': 1000,
24
+ 'rateLimit': 100,
26
25
  'version': 'v1',
27
26
  'certified': true,
28
27
  'pro': true,
@@ -135,44 +134,54 @@ export default class bingx extends Exchange {
135
134
  'v1': {
136
135
  'public': {
137
136
  'get': {
138
- 'server/time': 3,
139
- 'common/symbols': 3,
140
- 'market/trades': 3,
141
- 'market/depth': 3,
142
- 'market/kline': 3,
137
+ 'server/time': 1,
138
+ 'common/symbols': 1,
139
+ 'market/trades': 1,
140
+ 'market/depth': 1,
141
+ 'market/kline': 1,
143
142
  'ticker/24hr': 1,
143
+ 'ticker/price': 1,
144
+ 'ticker/bookTicker': 1,
144
145
  },
145
146
  },
146
147
  'private': {
147
148
  'get': {
148
- 'trade/query': 3,
149
- 'trade/openOrders': 3,
150
- 'trade/historyOrders': 3,
151
- 'trade/myTrades': 3,
152
- 'user/commissionRate': 3,
153
- 'account/balance': 3,
149
+ 'trade/query': 1,
150
+ 'trade/openOrders': 1,
151
+ 'trade/historyOrders': 1,
152
+ 'trade/myTrades': 2,
153
+ 'user/commissionRate': 5,
154
+ 'account/balance': 2,
154
155
  },
155
156
  'post': {
156
- 'trade/order': 3,
157
- 'trade/cancel': 3,
158
- 'trade/batchOrders': 3,
159
- 'trade/order/cancelReplace': 3,
160
- 'trade/cancelOrders': 3,
161
- 'trade/cancelOpenOrders': 3,
162
- 'trade/cancelAllAfter': 1,
157
+ 'trade/order': 2,
158
+ 'trade/cancel': 2,
159
+ 'trade/batchOrders': 5,
160
+ 'trade/order/cancelReplace': 5,
161
+ 'trade/cancelOrders': 5,
162
+ 'trade/cancelOpenOrders': 5,
163
+ 'trade/cancelAllAfter': 5,
164
+ },
165
+ },
166
+ },
167
+ 'v2': {
168
+ 'public': {
169
+ 'get': {
170
+ 'market/depth': 1,
171
+ 'market/kline': 1,
163
172
  },
164
173
  },
165
174
  },
166
175
  'v3': {
167
176
  'private': {
168
177
  'get': {
169
- 'get/asset/transfer': 3,
170
- 'asset/transfer': 3,
171
- 'capital/deposit/hisrec': 3,
172
- 'capital/withdraw/history': 3,
178
+ 'get/asset/transfer': 1,
179
+ 'asset/transfer': 1,
180
+ 'capital/deposit/hisrec': 1,
181
+ 'capital/withdraw/history': 1,
173
182
  },
174
183
  'post': {
175
- 'post/asset/transfer': 3,
184
+ 'post/asset/transfer': 5,
176
185
  },
177
186
  },
178
187
  },
@@ -182,26 +191,27 @@ export default class bingx extends Exchange {
182
191
  'public': {
183
192
  'get': {
184
193
  'ticker/price': 1,
194
+ 'market/historicalTrades': 1,
185
195
  },
186
196
  },
187
197
  'private': {
188
198
  'get': {
189
- 'positionSide/dual': 1,
199
+ 'positionSide/dual': 5,
190
200
  'market/markPriceKlines': 1,
191
- 'trade/batchCancelReplace': 1,
192
- 'trade/fullOrder': 1,
201
+ 'trade/batchCancelReplace': 5,
202
+ 'trade/fullOrder': 2,
193
203
  },
194
204
  'post': {
195
- 'trade/cancelReplace': 1,
196
- 'positionSide/dual': 1,
197
- 'trade/closePosition': 1,
205
+ 'trade/cancelReplace': 2,
206
+ 'positionSide/dual': 5,
207
+ 'trade/closePosition': 2,
198
208
  },
199
209
  },
200
210
  },
201
211
  'v2': {
202
212
  'public': {
203
213
  'get': {
204
- 'server/time': 3,
214
+ 'server/time': 1,
205
215
  'quote/contracts': 1,
206
216
  'quote/price': 1,
207
217
  'quote/depth': 1,
@@ -216,35 +226,35 @@ export default class bingx extends Exchange {
216
226
  },
217
227
  'private': {
218
228
  'get': {
219
- 'user/balance': 3,
220
- 'user/positions': 3,
221
- 'user/income': 3,
222
- 'trade/openOrders': 3,
223
- 'trade/openOrder': 3,
224
- 'trade/order': 3,
225
- 'trade/marginType': 3,
226
- 'trade/leverage': 3,
227
- 'trade/forceOrders': 3,
228
- 'trade/allOrders': 3,
229
- 'trade/allFillOrders': 3,
230
- 'user/income/export': 3,
231
- 'user/commissionRate': 3,
232
- 'quote/bookTicker': 3,
229
+ 'user/balance': 2,
230
+ 'user/positions': 2,
231
+ 'user/income': 2,
232
+ 'trade/openOrders': 2,
233
+ 'trade/openOrder': 2,
234
+ 'trade/order': 2,
235
+ 'trade/marginType': 5,
236
+ 'trade/leverage': 2,
237
+ 'trade/forceOrders': 1,
238
+ 'trade/allOrders': 2,
239
+ 'trade/allFillOrders': 2,
240
+ 'user/income/export': 2,
241
+ 'user/commissionRate': 2,
242
+ 'quote/bookTicker': 1,
233
243
  },
234
244
  'post': {
235
- 'trade/order': 3,
236
- 'trade/batchOrders': 3,
237
- 'trade/closeAllPositions': 3,
238
- 'trade/cancelAllAfter': 3,
239
- 'trade/marginType': 3,
240
- 'trade/leverage': 3,
241
- 'trade/positionMargin': 3,
242
- 'trade/order/test': 3,
245
+ 'trade/order': 2,
246
+ 'trade/batchOrders': 2,
247
+ 'trade/closeAllPositions': 2,
248
+ 'trade/cancelAllAfter': 5,
249
+ 'trade/marginType': 5,
250
+ 'trade/leverage': 5,
251
+ 'trade/positionMargin': 5,
252
+ 'trade/order/test': 2,
243
253
  },
244
254
  'delete': {
245
- 'trade/order': 3,
246
- 'trade/batchOrders': 3,
247
- 'trade/allOpenOrders': 3,
255
+ 'trade/order': 2,
256
+ 'trade/batchOrders': 2,
257
+ 'trade/allOpenOrders': 2,
248
258
  },
249
259
  },
250
260
  },
@@ -260,9 +270,9 @@ export default class bingx extends Exchange {
260
270
  'v1': {
261
271
  'private': {
262
272
  'get': {
263
- 'allPosition': 3,
264
- 'allOrders': 3,
265
- 'balance': 3,
273
+ 'allPosition': 2,
274
+ 'allOrders': 2,
275
+ 'balance': 2,
266
276
  },
267
277
  },
268
278
  },
@@ -271,18 +281,19 @@ export default class bingx extends Exchange {
271
281
  'v1': {
272
282
  'private': {
273
283
  'get': {
274
- 'capital/config/getall': 3,
275
- 'capital/deposit/address': 1,
284
+ 'capital/config/getall': 5,
285
+ 'capital/deposit/address': 5,
276
286
  'capital/innerTransfer/records': 1,
277
- 'capital/subAccount/deposit/address': 1,
278
- 'capital/deposit/subHisrec': 1,
287
+ 'capital/subAccount/deposit/address': 5,
288
+ 'capital/deposit/subHisrec': 2,
279
289
  'capital/subAccount/innerTransfer/records': 1,
290
+ 'capital/deposit/riskRecords': 5,
280
291
  },
281
292
  'post': {
282
- 'capital/withdraw/apply': 3,
283
- 'capital/innerTransfer/apply': 3,
284
- 'capital/subAccountInnerTransfer/apply': 3,
285
- 'capital/deposit/createSubAddress': 1,
293
+ 'capital/withdraw/apply': 5,
294
+ 'capital/innerTransfer/apply': 5,
295
+ 'capital/subAccountInnerTransfer/apply': 2,
296
+ 'capital/deposit/createSubAddress': 2,
286
297
  },
287
298
  },
288
299
  },
@@ -291,15 +302,15 @@ export default class bingx extends Exchange {
291
302
  'v1': {
292
303
  'private': {
293
304
  'get': {
294
- 'list': 3,
295
- 'assets': 3,
305
+ 'list': 10,
306
+ 'assets': 2,
296
307
  },
297
308
  'post': {
298
- 'create': 3,
299
- 'apiKey/create': 3,
300
- 'apiKey/edit': 3,
301
- 'apiKey/del': 3,
302
- 'updateStatus': 3,
309
+ 'create': 10,
310
+ 'apiKey/create': 2,
311
+ 'apiKey/edit': 2,
312
+ 'apiKey/del': 2,
313
+ 'updateStatus': 10,
303
314
  },
304
315
  },
305
316
  },
@@ -309,10 +320,10 @@ export default class bingx extends Exchange {
309
320
  'private': {
310
321
  'get': {
311
322
  'uid': 1,
312
- 'apiKey/query': 1,
323
+ 'apiKey/query': 2,
313
324
  },
314
325
  'post': {
315
- 'innerTransfer/authorizeSubAccount': 3,
326
+ 'innerTransfer/authorizeSubAccount': 1,
316
327
  },
317
328
  },
318
329
  },
@@ -321,10 +332,13 @@ export default class bingx extends Exchange {
321
332
  'auth': {
322
333
  'private': {
323
334
  'post': {
324
- 'userDataStream': 1,
335
+ 'userDataStream': 2,
325
336
  },
326
337
  'put': {
327
- 'userDataStream': 1,
338
+ 'userDataStream': 2,
339
+ },
340
+ 'delete': {
341
+ 'userDataStream': 2,
328
342
  },
329
343
  },
330
344
  },
@@ -333,12 +347,12 @@ export default class bingx extends Exchange {
333
347
  'v1': {
334
348
  'private': {
335
349
  'get': {
336
- 'swap/trace/currentTrack': 1,
350
+ 'swap/trace/currentTrack': 2,
337
351
  },
338
352
  'post': {
339
- 'swap/trace/closeTrackOrder': 1,
340
- 'swap/trace/setTPSL': 1,
341
- 'spot/trader/sellOrder': 1,
353
+ 'swap/trace/closeTrackOrder': 2,
354
+ 'swap/trace/setTPSL': 2,
355
+ 'spot/trader/sellOrder': 10,
342
356
  },
343
357
  },
344
358
  },
@@ -2530,7 +2544,7 @@ export default class bingx extends Exchange {
2530
2544
  'stopLossPrice': stopLossPrice,
2531
2545
  'takeProfitPrice': takeProfitPrice,
2532
2546
  'average': this.safeString2(order, 'avgPrice', 'ap'),
2533
- 'cost': undefined,
2547
+ 'cost': this.safeString(order, 'cummulativeQuoteQty'),
2534
2548
  'amount': this.safeStringN(order, ['origQty', 'q', 'quantity']),
2535
2549
  'filled': this.safeString2(order, 'executedQty', 'z'),
2536
2550
  'remaining': undefined,
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bitmart.js';
2
- import type { Int, OrderSide, Balances, OrderType, OHLCV, Order, Str, Trade, Transaction, Ticker, OrderBook, Tickers, Strings, Currency, Market, TransferEntry, Num, TradingFeeInterface, Currencies, IsolatedBorrowRates, IsolatedBorrowRate, Dict, TransferEntries } from './base/types.js';
2
+ import type { Int, OrderSide, Balances, OrderType, OHLCV, Order, Str, Trade, Transaction, Ticker, OrderBook, Tickers, Strings, Currency, Market, TransferEntry, Num, TradingFeeInterface, Currencies, IsolatedBorrowRates, IsolatedBorrowRate, Dict, TransferEntries, OrderRequest } from './base/types.js';
3
3
  /**
4
4
  * @class bitmart
5
5
  * @augments Exchange
@@ -56,6 +56,7 @@ export default class bitmart extends Exchange {
56
56
  parseOrderStatusByType(type: any, status: any): string;
57
57
  createMarketBuyOrderWithCost(symbol: string, cost: number, params?: {}): Promise<Order>;
58
58
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
59
+ createOrders(orders: OrderRequest[], params?: {}): Promise<Order[]>;
59
60
  createSwapOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): any;
60
61
  createSpotOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): any;
61
62
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
package/js/src/bitmart.js CHANGED
@@ -43,6 +43,7 @@ export default class bitmart extends Exchange {
43
43
  'createMarketOrderWithCost': false,
44
44
  'createMarketSellOrderWithCost': false,
45
45
  'createOrder': true,
46
+ 'createOrders': true,
46
47
  'createPostOnlyOrder': true,
47
48
  'createStopLimitOrder': false,
48
49
  'createStopMarketOrder': false,
@@ -227,6 +228,7 @@ export default class bitmart extends Exchange {
227
228
  'spot/v4/query/trades': 5,
228
229
  'spot/v4/query/order-trades': 5,
229
230
  'spot/v4/cancel_orders': 3,
231
+ 'spot/v4/batch_orders': 3,
230
232
  // newer endpoint
231
233
  'spot/v3/cancel_order': 1,
232
234
  'spot/v2/batch_orders': 1,
@@ -2394,6 +2396,76 @@ export default class bitmart extends Exchange {
2394
2396
  order['price'] = price;
2395
2397
  return order;
2396
2398
  }
2399
+ async createOrders(orders, params = {}) {
2400
+ /**
2401
+ * @method
2402
+ * @name bitmart#createOrders
2403
+ * @description create a list of trade orders
2404
+ * @see https://developer-pro.bitmart.com/en/spot/#new-batch-order-v4-signed
2405
+ * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
2406
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2407
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2408
+ */
2409
+ await this.loadMarkets();
2410
+ const ordersRequests = [];
2411
+ let symbol = undefined;
2412
+ let market = undefined;
2413
+ for (let i = 0; i < orders.length; i++) {
2414
+ const rawOrder = orders[i];
2415
+ const marketId = this.safeString(rawOrder, 'symbol');
2416
+ market = this.market(marketId);
2417
+ if (!market['spot']) {
2418
+ throw new NotSupported(this.id + ' createOrders() supports spot orders only');
2419
+ }
2420
+ if (symbol === undefined) {
2421
+ symbol = marketId;
2422
+ }
2423
+ else {
2424
+ if (symbol !== marketId) {
2425
+ throw new BadRequest(this.id + ' createOrders() requires all orders to have the same symbol');
2426
+ }
2427
+ }
2428
+ const type = this.safeString(rawOrder, 'type');
2429
+ const side = this.safeString(rawOrder, 'side');
2430
+ const amount = this.safeValue(rawOrder, 'amount');
2431
+ const price = this.safeValue(rawOrder, 'price');
2432
+ const orderParams = this.safeDict(rawOrder, 'params', {});
2433
+ let orderRequest = this.createSpotOrderRequest(marketId, type, side, amount, price, orderParams);
2434
+ orderRequest = this.omit(orderRequest, ['symbol']); // not needed because it goes in the outter object
2435
+ ordersRequests.push(orderRequest);
2436
+ }
2437
+ const request = {
2438
+ 'symbol': market['id'],
2439
+ 'orderParams': ordersRequests,
2440
+ };
2441
+ const response = await this.privatePostSpotV4BatchOrders(request);
2442
+ //
2443
+ // {
2444
+ // "message": "OK",
2445
+ // "code": 1000,
2446
+ // "trace": "5fc697fb817a4b5396284786a9b2609a.263.17022620476480263",
2447
+ // "data": {
2448
+ // "code": 0,
2449
+ // "msg": "success",
2450
+ // "data": {
2451
+ // "orderIds": [
2452
+ // "212751308355553320"
2453
+ // ]
2454
+ // }
2455
+ // }
2456
+ // }
2457
+ //
2458
+ const data = this.safeDict(response, 'data', {});
2459
+ const innderData = this.safeDict(data, 'data', {});
2460
+ const orderIds = this.safeList(innderData, 'orderIds', []);
2461
+ const parsedOrders = [];
2462
+ for (let i = 0; i < orderIds.length; i++) {
2463
+ const orderId = orderIds[i];
2464
+ const order = this.safeOrder({ 'id': orderId }, market);
2465
+ parsedOrders.push(order);
2466
+ }
2467
+ return parsedOrders;
2468
+ }
2397
2469
  createSwapOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
2398
2470
  /**
2399
2471
  * @method
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/coinex.js';
2
- import type { Balances, Currency, FundingHistory, FundingRateHistory, Int, Market, OHLCV, Order, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, OrderRequest, TransferEntry, Leverage, Leverages, Num, MarginModification, TradingFeeInterface, Currencies, TradingFees, Position, IsolatedBorrowRates, IsolatedBorrowRate, Dict, TransferEntries } from './base/types.js';
2
+ import type { Balances, Currency, FundingHistory, FundingRateHistory, Int, Market, OHLCV, Order, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, OrderRequest, TransferEntry, Leverage, Leverages, Num, MarginModification, TradingFeeInterface, Currencies, TradingFees, Position, IsolatedBorrowRate, Dict, TransferEntries } from './base/types.js';
3
3
  /**
4
4
  * @class coinex
5
5
  * @augments Exchange
@@ -128,7 +128,6 @@ export default class coinex extends Exchange {
128
128
  fetchDeposits(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;
129
129
  parseIsolatedBorrowRate(info: any, market?: Market): IsolatedBorrowRate;
130
130
  fetchIsolatedBorrowRate(symbol: string, params?: {}): Promise<IsolatedBorrowRate>;
131
- fetchIsolatedBorrowRates(params?: {}): Promise<IsolatedBorrowRates>;
132
131
  fetchBorrowInterest(code?: Str, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
133
132
  parseBorrowInterest(info: any, market?: Market): {
134
133
  account: any;
@@ -148,10 +147,10 @@ export default class coinex extends Exchange {
148
147
  parseMarginLoan(info: any, currency?: Currency): {
149
148
  id: number;
150
149
  currency: string;
151
- amount: any;
152
- symbol: any;
153
- timestamp: any;
154
- datetime: any;
150
+ amount: string;
151
+ symbol: string;
152
+ timestamp: number;
153
+ datetime: string;
155
154
  info: any;
156
155
  };
157
156
  fetchDepositWithdrawFees(codes?: Strings, params?: {}): Promise<{}>;