ccxt 4.4.40 → 4.4.41

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 +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/base/Exchange.js +20 -3
  5. package/dist/cjs/src/binance.js +24 -24
  6. package/dist/cjs/src/bingx.js +3 -1
  7. package/dist/cjs/src/bitfinex.js +1 -1
  8. package/dist/cjs/src/bitget.js +1 -0
  9. package/dist/cjs/src/bitmart.js +254 -1
  10. package/dist/cjs/src/bybit.js +8 -8
  11. package/dist/cjs/src/exmo.js +62 -4
  12. package/dist/cjs/src/gate.js +1 -1
  13. package/dist/cjs/src/htx.js +1 -1
  14. package/dist/cjs/src/hyperliquid.js +65 -1
  15. package/dist/cjs/src/kraken.js +129 -26
  16. package/dist/cjs/src/kucoin.js +6 -1
  17. package/dist/cjs/src/mexc.js +3 -3
  18. package/dist/cjs/src/okx.js +6 -1
  19. package/dist/cjs/src/xt.js +5 -2
  20. package/js/ccxt.d.ts +3 -3
  21. package/js/ccxt.js +1 -1
  22. package/js/src/abstract/bitmart.d.ts +2 -0
  23. package/js/src/abstract/okx.d.ts +5 -0
  24. package/js/src/base/Exchange.d.ts +6 -3
  25. package/js/src/base/Exchange.js +20 -3
  26. package/js/src/base/types.d.ts +2 -0
  27. package/js/src/binance.js +24 -24
  28. package/js/src/bingx.js +3 -1
  29. package/js/src/bitfinex.js +1 -1
  30. package/js/src/bitget.js +1 -0
  31. package/js/src/bitmart.d.ts +52 -1
  32. package/js/src/bitmart.js +254 -1
  33. package/js/src/bybit.js +8 -8
  34. package/js/src/exmo.d.ts +35 -0
  35. package/js/src/exmo.js +62 -4
  36. package/js/src/gate.js +1 -1
  37. package/js/src/htx.js +1 -1
  38. package/js/src/hyperliquid.d.ts +20 -1
  39. package/js/src/hyperliquid.js +65 -1
  40. package/js/src/kraken.d.ts +13 -7
  41. package/js/src/kraken.js +129 -26
  42. package/js/src/kucoin.js +6 -1
  43. package/js/src/mexc.js +3 -3
  44. package/js/src/okx.js +6 -1
  45. package/js/src/xt.js +5 -2
  46. package/package.json +2 -2
@@ -280,11 +280,13 @@ export default class kraken extends Exchange {
280
280
  * @method
281
281
  * @name kraken#cancelOrder
282
282
  * @description cancels an open order
283
- * @see https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelOrder
283
+ * @see https://docs.kraken.com/api/docs/rest-api/cancel-order
284
284
  * @param {string} id order id
285
- * @param {string} symbol unified symbol of the market the order was made in
285
+ * @param {string} [symbol] unified symbol of the market the order was made in
286
286
  * @param {object} [params] extra parameters specific to the exchange API endpoint
287
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
287
+ * @param {string} [params.clientOrderId] the orders client order id
288
+ * @param {int} [params.userref] the orders user reference id
289
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
288
290
  */
289
291
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
290
292
  /**
@@ -322,11 +324,13 @@ export default class kraken extends Exchange {
322
324
  * @method
323
325
  * @name kraken#fetchOpenOrders
324
326
  * @description fetch all unfilled currently open orders
325
- * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenOrders
326
- * @param {string} symbol unified market symbol
327
+ * @see https://docs.kraken.com/api/docs/rest-api/get-open-orders
328
+ * @param {string} [symbol] unified market symbol
327
329
  * @param {int} [since] the earliest time in ms to fetch open orders for
328
330
  * @param {int} [limit] the maximum number of open orders structures to retrieve
329
331
  * @param {object} [params] extra parameters specific to the exchange API endpoint
332
+ * @param {string} [params.clientOrderId] the orders client order id
333
+ * @param {int} [params.userref] the orders user reference id
330
334
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
331
335
  */
332
336
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
@@ -334,12 +338,14 @@ export default class kraken extends Exchange {
334
338
  * @method
335
339
  * @name kraken#fetchClosedOrders
336
340
  * @description fetches information on multiple closed orders made by the user
337
- * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getClosedOrders
338
- * @param {string} symbol unified market symbol of the market orders were made in
341
+ * @see https://docs.kraken.com/api/docs/rest-api/get-closed-orders
342
+ * @param {string} [symbol] unified market symbol of the market orders were made in
339
343
  * @param {int} [since] the earliest time in ms to fetch orders for
340
344
  * @param {int} [limit] the maximum number of order structures to retrieve
341
345
  * @param {object} [params] extra parameters specific to the exchange API endpoint
342
346
  * @param {int} [params.until] timestamp in ms of the latest entry
347
+ * @param {string} [params.clientOrderId] the orders client order id
348
+ * @param {int} [params.userref] the orders user reference id
343
349
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
344
350
  */
345
351
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
package/js/src/kraken.js CHANGED
@@ -1655,6 +1655,37 @@ export default class kraken extends Exchange {
1655
1655
  // }
1656
1656
  // }
1657
1657
  //
1658
+ // fetchOpenOrders
1659
+ //
1660
+ // {
1661
+ // "refid": null,
1662
+ // "userref": null,
1663
+ // "cl_ord_id": "1234",
1664
+ // "status": "open",
1665
+ // "opentm": 1733815269.370054,
1666
+ // "starttm": 0,
1667
+ // "expiretm": 0,
1668
+ // "descr": {
1669
+ // "pair": "XBTUSD",
1670
+ // "type": "buy",
1671
+ // "ordertype": "limit",
1672
+ // "price": "70000.0",
1673
+ // "price2": "0",
1674
+ // "leverage": "none",
1675
+ // "order": "buy 0.00010000 XBTUSD @ limit 70000.0",
1676
+ // "close": ""
1677
+ // },
1678
+ // "vol": "0.00010000",
1679
+ // "vol_exec": "0.00000000",
1680
+ // "cost": "0.00000",
1681
+ // "fee": "0.00000",
1682
+ // "price": "0.00000",
1683
+ // "stopprice": "0.00000",
1684
+ // "limitprice": "0.00000",
1685
+ // "misc": "",
1686
+ // "oflags": "fciq"
1687
+ // }
1688
+ //
1658
1689
  const description = this.safeDict(order, 'descr', {});
1659
1690
  const orderDescriptionObj = this.safeDict(order, 'descr'); // can be null
1660
1691
  let orderDescription = undefined;
@@ -1745,7 +1776,8 @@ export default class kraken extends Exchange {
1745
1776
  const txid = this.safeList(order, 'txid');
1746
1777
  id = this.safeString(txid, 0);
1747
1778
  }
1748
- const clientOrderId = this.safeString(order, 'userref');
1779
+ const userref = this.safeString(order, 'userref');
1780
+ const clientOrderId = this.safeString(order, 'cl_ord_id', userref);
1749
1781
  const rawTrades = this.safeValue(order, 'trades', []);
1750
1782
  const trades = [];
1751
1783
  for (let i = 0; i < rawTrades.length; i++) {
@@ -1980,10 +2012,10 @@ export default class kraken extends Exchange {
1980
2012
  let request = {
1981
2013
  'txid': id,
1982
2014
  };
1983
- const clientOrderId = this.safeString(params, 'clientOrderId');
2015
+ const clientOrderId = this.safeString2(params, 'clientOrderId', 'cl_ord_id');
1984
2016
  if (clientOrderId !== undefined) {
1985
2017
  request['cl_ord_id'] = clientOrderId;
1986
- params = this.omit(params, 'clientOrderId');
2018
+ params = this.omit(params, ['clientOrderId', 'cl_ord_id']);
1987
2019
  request = this.omit(request, 'txid');
1988
2020
  }
1989
2021
  const isMarket = (type === 'market');
@@ -2274,20 +2306,28 @@ export default class kraken extends Exchange {
2274
2306
  * @method
2275
2307
  * @name kraken#cancelOrder
2276
2308
  * @description cancels an open order
2277
- * @see https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelOrder
2309
+ * @see https://docs.kraken.com/api/docs/rest-api/cancel-order
2278
2310
  * @param {string} id order id
2279
- * @param {string} symbol unified symbol of the market the order was made in
2311
+ * @param {string} [symbol] unified symbol of the market the order was made in
2280
2312
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2281
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2313
+ * @param {string} [params.clientOrderId] the orders client order id
2314
+ * @param {int} [params.userref] the orders user reference id
2315
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2282
2316
  */
2283
2317
  async cancelOrder(id, symbol = undefined, params = {}) {
2284
2318
  await this.loadMarkets();
2285
2319
  let response = undefined;
2286
- const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId', id);
2287
- const request = {
2288
- 'txid': clientOrderId, // order id or userref
2320
+ const requestId = this.safeValue(params, 'userref', id); // string or integer
2321
+ params = this.omit(params, 'userref');
2322
+ let request = {
2323
+ 'txid': requestId, // order id or userref
2289
2324
  };
2290
- params = this.omit(params, ['userref', 'clientOrderId']);
2325
+ const clientOrderId = this.safeString2(params, 'clientOrderId', 'cl_ord_id');
2326
+ if (clientOrderId !== undefined) {
2327
+ request['cl_ord_id'] = clientOrderId;
2328
+ params = this.omit(params, ['clientOrderId', 'cl_ord_id']);
2329
+ request = this.omit(request, 'txid');
2330
+ }
2291
2331
  try {
2292
2332
  response = await this.privatePostCancelOrder(this.extend(request, params));
2293
2333
  //
@@ -2399,11 +2439,13 @@ export default class kraken extends Exchange {
2399
2439
  * @method
2400
2440
  * @name kraken#fetchOpenOrders
2401
2441
  * @description fetch all unfilled currently open orders
2402
- * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenOrders
2403
- * @param {string} symbol unified market symbol
2442
+ * @see https://docs.kraken.com/api/docs/rest-api/get-open-orders
2443
+ * @param {string} [symbol] unified market symbol
2404
2444
  * @param {int} [since] the earliest time in ms to fetch open orders for
2405
2445
  * @param {int} [limit] the maximum number of open orders structures to retrieve
2406
2446
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2447
+ * @param {string} [params.clientOrderId] the orders client order id
2448
+ * @param {int} [params.userref] the orders user reference id
2407
2449
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2408
2450
  */
2409
2451
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2412,31 +2454,81 @@ export default class kraken extends Exchange {
2412
2454
  if (since !== undefined) {
2413
2455
  request['start'] = this.parseToInt(since / 1000);
2414
2456
  }
2415
- let query = params;
2416
- const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId');
2457
+ const userref = this.safeInteger(params, 'userref');
2458
+ if (userref !== undefined) {
2459
+ request['userref'] = userref;
2460
+ params = this.omit(params, 'userref');
2461
+ }
2462
+ const clientOrderId = this.safeString(params, 'clientOrderId');
2417
2463
  if (clientOrderId !== undefined) {
2418
- request['userref'] = clientOrderId;
2419
- query = this.omit(params, ['userref', 'clientOrderId']);
2464
+ request['cl_ord_id'] = clientOrderId;
2465
+ params = this.omit(params, 'clientOrderId');
2420
2466
  }
2421
- const response = await this.privatePostOpenOrders(this.extend(request, query));
2467
+ const response = await this.privatePostOpenOrders(this.extend(request, params));
2468
+ //
2469
+ // {
2470
+ // "error": [],
2471
+ // "result": {
2472
+ // "open": {
2473
+ // "O45M52-BFD5S-YXKQOU": {
2474
+ // "refid": null,
2475
+ // "userref": null,
2476
+ // "cl_ord_id": "1234",
2477
+ // "status": "open",
2478
+ // "opentm": 1733815269.370054,
2479
+ // "starttm": 0,
2480
+ // "expiretm": 0,
2481
+ // "descr": {
2482
+ // "pair": "XBTUSD",
2483
+ // "type": "buy",
2484
+ // "ordertype": "limit",
2485
+ // "price": "70000.0",
2486
+ // "price2": "0",
2487
+ // "leverage": "none",
2488
+ // "order": "buy 0.00010000 XBTUSD @ limit 70000.0",
2489
+ // "close": ""
2490
+ // },
2491
+ // "vol": "0.00010000",
2492
+ // "vol_exec": "0.00000000",
2493
+ // "cost": "0.00000",
2494
+ // "fee": "0.00000",
2495
+ // "price": "0.00000",
2496
+ // "stopprice": "0.00000",
2497
+ // "limitprice": "0.00000",
2498
+ // "misc": "",
2499
+ // "oflags": "fciq"
2500
+ // }
2501
+ // }
2502
+ // }
2503
+ // }
2504
+ //
2422
2505
  let market = undefined;
2423
2506
  if (symbol !== undefined) {
2424
2507
  market = this.market(symbol);
2425
2508
  }
2426
2509
  const result = this.safeDict(response, 'result', {});
2427
- const orders = this.safeDict(result, 'open', {});
2510
+ const open = this.safeDict(result, 'open', {});
2511
+ const orders = [];
2512
+ const orderIds = Object.keys(open);
2513
+ for (let i = 0; i < orderIds.length; i++) {
2514
+ const id = orderIds[i];
2515
+ const item = open[id];
2516
+ orders.push(this.extend({ 'id': id }, item));
2517
+ }
2428
2518
  return this.parseOrders(orders, market, since, limit);
2429
2519
  }
2430
2520
  /**
2431
2521
  * @method
2432
2522
  * @name kraken#fetchClosedOrders
2433
2523
  * @description fetches information on multiple closed orders made by the user
2434
- * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getClosedOrders
2435
- * @param {string} symbol unified market symbol of the market orders were made in
2524
+ * @see https://docs.kraken.com/api/docs/rest-api/get-closed-orders
2525
+ * @param {string} [symbol] unified market symbol of the market orders were made in
2436
2526
  * @param {int} [since] the earliest time in ms to fetch orders for
2437
2527
  * @param {int} [limit] the maximum number of order structures to retrieve
2438
2528
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2439
2529
  * @param {int} [params.until] timestamp in ms of the latest entry
2530
+ * @param {string} [params.clientOrderId] the orders client order id
2531
+ * @param {int} [params.userref] the orders user reference id
2440
2532
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2441
2533
  */
2442
2534
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2445,14 +2537,18 @@ export default class kraken extends Exchange {
2445
2537
  if (since !== undefined) {
2446
2538
  request['start'] = this.parseToInt(since / 1000);
2447
2539
  }
2448
- let query = params;
2449
- const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId');
2540
+ const userref = this.safeInteger(params, 'userref');
2541
+ if (userref !== undefined) {
2542
+ request['userref'] = userref;
2543
+ params = this.omit(params, 'userref');
2544
+ }
2545
+ const clientOrderId = this.safeString(params, 'clientOrderId');
2450
2546
  if (clientOrderId !== undefined) {
2451
- request['userref'] = clientOrderId;
2452
- query = this.omit(params, ['userref', 'clientOrderId']);
2547
+ request['cl_ord_id'] = clientOrderId;
2548
+ params = this.omit(params, 'clientOrderId');
2453
2549
  }
2454
2550
  [request, params] = this.handleUntilOption('end', request, params);
2455
- const response = await this.privatePostClosedOrders(this.extend(request, query));
2551
+ const response = await this.privatePostClosedOrders(this.extend(request, params));
2456
2552
  //
2457
2553
  // {
2458
2554
  // "error":[],
@@ -2497,7 +2593,14 @@ export default class kraken extends Exchange {
2497
2593
  market = this.market(symbol);
2498
2594
  }
2499
2595
  const result = this.safeDict(response, 'result', {});
2500
- const orders = this.safeDict(result, 'closed', {});
2596
+ const closed = this.safeDict(result, 'closed', {});
2597
+ const orders = [];
2598
+ const orderIds = Object.keys(closed);
2599
+ for (let i = 0; i < orderIds.length; i++) {
2600
+ const id = orderIds[i];
2601
+ const item = closed[id];
2602
+ orders.push(this.extend({ 'id': id }, item));
2603
+ }
2501
2604
  return this.parseOrders(orders, market, since, limit);
2502
2605
  }
2503
2606
  parseTransactionStatus(status) {
package/js/src/kucoin.js CHANGED
@@ -643,6 +643,8 @@ export default class kucoin extends Exchange {
643
643
  'version': 'v1',
644
644
  'symbolSeparator': '-',
645
645
  'fetchMyTradesMethod': 'private_get_fills',
646
+ 'timeDifference': 0,
647
+ 'adjustForTimeDifference': false,
646
648
  'fetchCurrencies': {
647
649
  'webApiEnable': true,
648
650
  'webApiRetries': 1,
@@ -1059,7 +1061,7 @@ export default class kucoin extends Exchange {
1059
1061
  });
1060
1062
  }
1061
1063
  nonce() {
1062
- return this.milliseconds();
1064
+ return this.milliseconds() - this.options['timeDifference'];
1063
1065
  }
1064
1066
  /**
1065
1067
  * @method
@@ -1300,6 +1302,9 @@ export default class kucoin extends Exchange {
1300
1302
  'info': market,
1301
1303
  });
1302
1304
  }
1305
+ if (this.options['adjustForTimeDifference']) {
1306
+ await this.loadTimeDifference();
1307
+ }
1303
1308
  return result;
1304
1309
  }
1305
1310
  /**
package/js/src/mexc.js CHANGED
@@ -678,7 +678,7 @@ export default class mexc extends Exchange {
678
678
  'broker': 'CCXT',
679
679
  },
680
680
  'features': {
681
- 'def': {
681
+ 'default': {
682
682
  'sandbox': false,
683
683
  'createOrder': {
684
684
  'marginMode': true,
@@ -746,10 +746,10 @@ export default class mexc extends Exchange {
746
746
  },
747
747
  },
748
748
  'spot': {
749
- 'extends': 'def',
749
+ 'extends': 'default',
750
750
  },
751
751
  'forDerivs': {
752
- 'extends': 'def',
752
+ 'extends': 'default',
753
753
  'createOrder': {
754
754
  'triggerPrice': true,
755
755
  'triggerPriceType': {
package/js/src/okx.js CHANGED
@@ -262,6 +262,7 @@ export default class okx extends Exchange {
262
262
  'tradingBot/public/rsi-back-testing': 1,
263
263
  'asset/exchange-list': 5 / 3,
264
264
  'finance/staking-defi/eth/apy-history': 5 / 3,
265
+ 'finance/staking-defi/sol/apy-history': 5 / 3,
265
266
  'finance/savings/lending-rate-summary': 5 / 3,
266
267
  'finance/savings/lending-rate-history': 5 / 3,
267
268
  'finance/fixed-loan/lending-offers': 10 / 3,
@@ -400,6 +401,8 @@ export default class okx extends Exchange {
400
401
  'finance/staking-defi/eth/balance': 5 / 3,
401
402
  'finance/staking-defi/eth/purchase-redeem-history': 5 / 3,
402
403
  'finance/staking-defi/eth/product-info': 3,
404
+ 'finance/staking-defi/sol/balance': 5 / 3,
405
+ 'finance/staking-defi/sol/purchase-redeem-history': 5 / 3,
403
406
  // copytrading
404
407
  'copytrading/current-subpositions': 1,
405
408
  'copytrading/subpositions-history': 1,
@@ -534,6 +537,8 @@ export default class okx extends Exchange {
534
537
  // eth staking
535
538
  'finance/staking-defi/eth/purchase': 5,
536
539
  'finance/staking-defi/eth/redeem': 5,
540
+ 'finance/staking-defi/sol/purchase': 5,
541
+ 'finance/staking-defi/sol/redeem': 5,
537
542
  // copytrading
538
543
  'copytrading/algo-order': 1,
539
544
  'copytrading/close-subposition': 1,
@@ -7398,7 +7403,7 @@ export default class okx extends Exchange {
7398
7403
  // }
7399
7404
  //
7400
7405
  const data = this.safeList(response, 'data', []);
7401
- return this.parseOpenInterests(data, undefined, since, limit);
7406
+ return this.parseOpenInterestsHistory(data, undefined, since, limit);
7402
7407
  }
7403
7408
  parseOpenInterest(interest, market = undefined) {
7404
7409
  //
package/js/src/xt.js CHANGED
@@ -4383,7 +4383,10 @@ export default class xt extends Exchange {
4383
4383
  const marketId = this.safeString(contract, 'symbol');
4384
4384
  const symbol = this.safeSymbol(marketId, market, '_', 'swap');
4385
4385
  const timestamp = this.safeInteger(contract, 'nextCollectionTime');
4386
- const interval = this.safeString(contract, 'collectionInternal');
4386
+ let interval = this.safeString(contract, 'collectionInternal');
4387
+ if (interval !== undefined) {
4388
+ interval = interval + 'h';
4389
+ }
4387
4390
  return {
4388
4391
  'info': contract,
4389
4392
  'symbol': symbol,
@@ -4402,7 +4405,7 @@ export default class xt extends Exchange {
4402
4405
  'previousFundingRate': undefined,
4403
4406
  'previousFundingTimestamp': undefined,
4404
4407
  'previousFundingDatetime': undefined,
4405
- 'interval': interval + 'h',
4408
+ 'interval': interval,
4406
4409
  };
4407
4410
  }
4408
4411
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.4.40",
3
+ "version": "4.4.41",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",
@@ -42,7 +42,7 @@
42
42
  "tsBuildFile": "tsc --skipLibCheck --strictNullChecks false --strict --noImplicitAny false --esModuleInterop --isolatedModules false --forceConsistentCasingInFileNames --removeComments false --target ES2020 --declaration --allowJs --checkJs false --moduleResolution Node --module ES2022 --outDir ./js/src --lib ES2020.BigInt --lib dom ",
43
43
  "tsBuild": "tsc || echo \"\"",
44
44
  "tsBuildExamples": "tsc -p ./examples/tsconfig.json",
45
- "emitAPI": "node build/generateImplicitAPI.js",
45
+ "emitAPI": "tsx build/generateImplicitAPI.ts",
46
46
  "build": "npm run pre-transpile && npm run transpile && npm run post-transpile && npm run update-badges && npm run build-docs",
47
47
  "force-build-slow": "npm run pre-transpile && npm run force-transpile && npm run post-transpile && npm run update-badges",
48
48
  "pre-transpile": "npm run export-exchanges && npm run vss && npm run tsBuild && npm run emitAPI && npm run validate-types && npm run tsBuildExamples && npm run copy-python-files && npm run check-js-syntax && npm run bundle",