ccxt 4.3.4 → 4.3.6

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 (71) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/ccxt.js +1 -1
  3. package/dist/cjs/src/base/Exchange.js +299 -6
  4. package/dist/cjs/src/binance.js +24 -17
  5. package/dist/cjs/src/bingx.js +45 -0
  6. package/dist/cjs/src/bitmex.js +24 -0
  7. package/dist/cjs/src/bybit.js +86 -0
  8. package/dist/cjs/src/coinbase.js +5 -4
  9. package/dist/cjs/src/coinex.js +30 -32
  10. package/dist/cjs/src/cryptocom.js +32 -0
  11. package/dist/cjs/src/htx.js +28 -0
  12. package/dist/cjs/src/hyperliquid.js +40 -0
  13. package/dist/cjs/src/kraken.js +30 -0
  14. package/dist/cjs/src/krakenfutures.js +28 -0
  15. package/dist/cjs/src/kucoin.js +53 -3
  16. package/dist/cjs/src/kucoinfutures.js +2 -2
  17. package/dist/cjs/src/okx.js +113 -0
  18. package/dist/cjs/src/pro/binance.js +439 -75
  19. package/dist/cjs/src/pro/bitget.js +1 -1
  20. package/dist/cjs/src/pro/woo.js +0 -1
  21. package/dist/cjs/src/whitebit.js +174 -2
  22. package/dist/cjs/src/woo.js +29 -0
  23. package/js/ccxt.d.ts +1 -1
  24. package/js/ccxt.js +1 -1
  25. package/js/src/abstract/binance.d.ts +1 -0
  26. package/js/src/abstract/binancecoinm.d.ts +1 -0
  27. package/js/src/abstract/binanceus.d.ts +1 -0
  28. package/js/src/abstract/binanceusdm.d.ts +1 -0
  29. package/js/src/abstract/bingx.d.ts +1 -0
  30. package/js/src/abstract/whitebit.d.ts +21 -0
  31. package/js/src/abstract/woo.d.ts +1 -0
  32. package/js/src/base/Exchange.d.ts +52 -3
  33. package/js/src/base/Exchange.js +299 -6
  34. package/js/src/binance.d.ts +4 -0
  35. package/js/src/binance.js +24 -17
  36. package/js/src/bingx.d.ts +1 -0
  37. package/js/src/bingx.js +45 -0
  38. package/js/src/bitmex.d.ts +1 -0
  39. package/js/src/bitmex.js +24 -0
  40. package/js/src/bybit.d.ts +2 -1
  41. package/js/src/bybit.js +86 -0
  42. package/js/src/coinbase.js +5 -4
  43. package/js/src/coinex.js +30 -32
  44. package/js/src/cryptocom.d.ts +2 -1
  45. package/js/src/cryptocom.js +32 -0
  46. package/js/src/htx.d.ts +1 -0
  47. package/js/src/htx.js +28 -0
  48. package/js/src/hyperliquid.d.ts +1 -0
  49. package/js/src/hyperliquid.js +40 -0
  50. package/js/src/kraken.d.ts +1 -0
  51. package/js/src/kraken.js +30 -0
  52. package/js/src/krakenfutures.d.ts +1 -0
  53. package/js/src/krakenfutures.js +28 -0
  54. package/js/src/kucoin.d.ts +1 -0
  55. package/js/src/kucoin.js +53 -3
  56. package/js/src/kucoinfutures.js +2 -2
  57. package/js/src/okx.d.ts +3 -1
  58. package/js/src/okx.js +113 -0
  59. package/js/src/pro/binance.d.ts +9 -1
  60. package/js/src/pro/binance.js +439 -75
  61. package/js/src/pro/bitget.d.ts +1 -1
  62. package/js/src/pro/bitget.js +1 -1
  63. package/js/src/pro/cex.d.ts +1 -1
  64. package/js/src/pro/lbank.d.ts +1 -1
  65. package/js/src/pro/woo.js +0 -1
  66. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  67. package/js/src/whitebit.d.ts +3 -0
  68. package/js/src/whitebit.js +174 -2
  69. package/js/src/woo.d.ts +2 -1
  70. package/js/src/woo.js +29 -0
  71. package/package.json +1 -1
@@ -62,6 +62,7 @@ export default class bitmex extends Exchange {
62
62
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
63
63
  cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
64
64
  cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
65
+ cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
65
66
  fetchLeverages(symbols?: string[], params?: {}): Promise<Leverages>;
66
67
  parseLeverage(leverage: any, market?: any): Leverage;
67
68
  fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
package/js/src/bitmex.js CHANGED
@@ -39,6 +39,7 @@ export default class bitmex extends Exchange {
39
39
  'option': false,
40
40
  'addMargin': undefined,
41
41
  'cancelAllOrders': true,
42
+ 'cancelAllOrdersAfter': true,
42
43
  'cancelOrder': true,
43
44
  'cancelOrders': true,
44
45
  'closeAllPositions': false,
@@ -2119,6 +2120,29 @@ export default class bitmex extends Exchange {
2119
2120
  //
2120
2121
  return this.parseOrders(response, market);
2121
2122
  }
2123
+ async cancelAllOrdersAfter(timeout, params = {}) {
2124
+ /**
2125
+ * @method
2126
+ * @name bitmex#cancelAllOrdersAfter
2127
+ * @description dead man's switch, cancel all orders after the given timeout
2128
+ * @see https://www.bitmex.com/api/explorer/#!/Order/Order_cancelAllAfter
2129
+ * @param {number} timeout time in milliseconds, 0 represents cancel the timer
2130
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2131
+ * @returns {object} the api result
2132
+ */
2133
+ await this.loadMarkets();
2134
+ const request = {
2135
+ 'timeout': (timeout > 0) ? this.parseToInt(timeout / 1000) : 0,
2136
+ };
2137
+ const response = await this.privatePostOrderCancelAllAfter(this.extend(request, params));
2138
+ //
2139
+ // {
2140
+ // now: '2024-04-09T09:01:56.560Z',
2141
+ // cancelTime: '2024-04-09T09:01:56.660Z'
2142
+ // }
2143
+ //
2144
+ return response;
2145
+ }
2122
2146
  async fetchLeverages(symbols = undefined, params = {}) {
2123
2147
  /**
2124
2148
  * @method
package/js/src/bybit.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bybit.js';
2
- import type { Int, OrderSide, OrderType, Trade, Order, OHLCV, FundingRateHistory, OpenInterest, OrderRequest, Balances, Str, Transaction, Ticker, OrderBook, Tickers, Greeks, Strings, Market, Currency, MarketInterface, TransferEntry, Liquidation, Leverage, Num, FundingHistory, Option, OptionChain, TradingFeeInterface, Currencies, TradingFees } from './base/types.js';
2
+ import type { Int, OrderSide, OrderType, Trade, Order, OHLCV, FundingRateHistory, OpenInterest, OrderRequest, Balances, Str, Transaction, Ticker, OrderBook, Tickers, Greeks, Strings, Market, Currency, MarketInterface, TransferEntry, Liquidation, Leverage, Num, FundingHistory, Option, OptionChain, TradingFeeInterface, Currencies, TradingFees, CancellationRequest } from './base/types.js';
3
3
  /**
4
4
  * @class bybit
5
5
  * @augments Exchange
@@ -66,6 +66,7 @@ export default class bybit extends Exchange {
66
66
  cancelUsdcOrder(id: any, symbol?: Str, params?: {}): Promise<Order>;
67
67
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
68
68
  cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
69
+ cancelOrdersForSymbols(orders: CancellationRequest[], params?: {}): Promise<Order[]>;
69
70
  cancelAllUsdcOrders(symbol?: Str, params?: {}): Promise<any>;
70
71
  cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
71
72
  fetchUsdcOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
package/js/src/bybit.js CHANGED
@@ -38,6 +38,8 @@ export default class bybit extends Exchange {
38
38
  'borrowCrossMargin': true,
39
39
  'cancelAllOrders': true,
40
40
  'cancelOrder': true,
41
+ 'cancelOrders': true,
42
+ 'cancelOrdersForSymbols': true,
41
43
  'closeAllPositions': false,
42
44
  'closePosition': false,
43
45
  'createMarketBuyOrderWithCost': true,
@@ -4385,6 +4387,90 @@ export default class bybit extends Exchange {
4385
4387
  const row = this.safeList(result, 'list', []);
4386
4388
  return this.parseOrders(row, market);
4387
4389
  }
4390
+ async cancelOrdersForSymbols(orders, params = {}) {
4391
+ /**
4392
+ * @method
4393
+ * @name bybit#cancelOrdersForSymbols
4394
+ * @description cancel multiple orders for multiple symbols
4395
+ * @see https://bybit-exchange.github.io/docs/v5/order/batch-cancel
4396
+ * @param {string[]} ids order ids
4397
+ * @param {string} symbol unified symbol of the market the order was made in
4398
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
4399
+ * @param {string[]} [params.clientOrderIds] client order ids
4400
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
4401
+ */
4402
+ await this.loadMarkets();
4403
+ const ordersRequests = [];
4404
+ let category = undefined;
4405
+ for (let i = 0; i < orders.length; i++) {
4406
+ const order = orders[i];
4407
+ const symbol = this.safeString(order, 'symbol');
4408
+ const market = this.market(symbol);
4409
+ let currentCategory = undefined;
4410
+ [currentCategory, params] = this.getBybitType('cancelOrders', market, params);
4411
+ if (currentCategory === 'inverse') {
4412
+ throw new NotSupported(this.id + ' cancelOrdersForSymbols does not allow inverse orders');
4413
+ }
4414
+ if ((category !== undefined) && (category !== currentCategory)) {
4415
+ throw new ExchangeError(this.id + ' cancelOrdersForSymbols requires all orders to be of the same category (linear, spot or option))');
4416
+ }
4417
+ category = currentCategory;
4418
+ const id = this.safeString(order, 'id');
4419
+ const clientOrderId = this.safeString(order, 'clientOrderId');
4420
+ let idKey = 'orderId';
4421
+ if (clientOrderId !== undefined) {
4422
+ idKey = 'orderLinkId';
4423
+ }
4424
+ const orderItem = {
4425
+ 'symbol': market['id'],
4426
+ };
4427
+ orderItem[idKey] = (idKey === 'orderId') ? id : clientOrderId;
4428
+ ordersRequests.push(orderItem);
4429
+ }
4430
+ const request = {
4431
+ 'category': category,
4432
+ 'request': ordersRequests,
4433
+ };
4434
+ const response = await this.privatePostV5OrderCancelBatch(this.extend(request, params));
4435
+ //
4436
+ // {
4437
+ // "retCode": "0",
4438
+ // "retMsg": "OK",
4439
+ // "result": {
4440
+ // "list": [
4441
+ // {
4442
+ // "category": "spot",
4443
+ // "symbol": "BTCUSDT",
4444
+ // "orderId": "1636282505818800896",
4445
+ // "orderLinkId": "1636282505818800897"
4446
+ // },
4447
+ // {
4448
+ // "category": "spot",
4449
+ // "symbol": "BTCUSDT",
4450
+ // "orderId": "1636282505818800898",
4451
+ // "orderLinkId": "1636282505818800899"
4452
+ // }
4453
+ // ]
4454
+ // },
4455
+ // "retExtInfo": {
4456
+ // "list": [
4457
+ // {
4458
+ // "code": "0",
4459
+ // "msg": "OK"
4460
+ // },
4461
+ // {
4462
+ // "code": "0",
4463
+ // "msg": "OK"
4464
+ // }
4465
+ // ]
4466
+ // },
4467
+ // "time": "1709796158501"
4468
+ // }
4469
+ //
4470
+ const result = this.safeDict(response, 'result', {});
4471
+ const row = this.safeList(result, 'list', []);
4472
+ return this.parseOrders(row, undefined);
4473
+ }
4388
4474
  async cancelAllUsdcOrders(symbol = undefined, params = {}) {
4389
4475
  if (symbol === undefined) {
4390
4476
  throw new ArgumentsRequired(this.id + ' cancelAllUsdcOrders() requires a symbol argument');
@@ -3431,12 +3431,13 @@ export default class coinbase extends Exchange {
3431
3431
  sinceString = Precise.stringSub(now, requestedDuration.toString());
3432
3432
  }
3433
3433
  request['start'] = sinceString;
3434
- let endString = this.numberToString(until);
3435
- if (until === undefined) {
3434
+ if (until !== undefined) {
3435
+ request['end'] = this.numberToString(this.parseToInt(until / 1000));
3436
+ }
3437
+ else {
3436
3438
  // 300 candles max
3437
- endString = Precise.stringAdd(sinceString, requestedDuration.toString());
3439
+ request['end'] = Precise.stringAdd(sinceString, requestedDuration.toString());
3438
3440
  }
3439
- request['end'] = endString;
3440
3441
  const response = await this.v3PrivateGetBrokerageProductsProductIdCandles(this.extend(request, params));
3441
3442
  //
3442
3443
  // {
package/js/src/coinex.js CHANGED
@@ -1132,14 +1132,13 @@ export default class coinex extends Exchange {
1132
1132
  //
1133
1133
  // Spot and Swap fetchTrades (public)
1134
1134
  //
1135
- // {
1136
- // "id": 2611511379,
1137
- // "type": "buy",
1138
- // "price": "192.63",
1139
- // "amount": "0.02266931",
1140
- // "date": 1638990110,
1141
- // "date_ms": 1638990110518
1142
- // },
1135
+ // {
1136
+ // "amount": "0.00049432",
1137
+ // "created_at": 1713849825667,
1138
+ // "deal_id": 4137517302,
1139
+ // "price": "66251",
1140
+ // "side": "buy"
1141
+ // }
1143
1142
  //
1144
1143
  // Spot and Margin fetchMyTrades (private)
1145
1144
  //
@@ -1193,9 +1192,9 @@ export default class coinex extends Exchange {
1193
1192
  //
1194
1193
  let timestamp = this.safeTimestamp2(trade, 'create_time', 'time');
1195
1194
  if (timestamp === undefined) {
1196
- timestamp = this.safeInteger(trade, 'date_ms');
1195
+ timestamp = this.safeInteger(trade, 'created_at');
1197
1196
  }
1198
- const tradeId = this.safeString(trade, 'id');
1197
+ const tradeId = this.safeString2(trade, 'id', 'deal_id');
1199
1198
  const orderId = this.safeString(trade, 'order_id');
1200
1199
  const priceString = this.safeString(trade, 'price');
1201
1200
  const amountString = this.safeString(trade, 'amount');
@@ -1232,11 +1231,11 @@ export default class coinex extends Exchange {
1232
1231
  side = 'buy';
1233
1232
  }
1234
1233
  if (side === undefined) {
1235
- side = this.safeString(trade, 'type');
1234
+ side = this.safeString2(trade, 'type', 'side');
1236
1235
  }
1237
1236
  }
1238
1237
  else {
1239
- side = this.safeString(trade, 'type');
1238
+ side = this.safeString2(trade, 'type', 'side');
1240
1239
  }
1241
1240
  return this.safeTrade({
1242
1241
  'info': trade,
@@ -1258,9 +1257,9 @@ export default class coinex extends Exchange {
1258
1257
  /**
1259
1258
  * @method
1260
1259
  * @name coinex#fetchTrades
1261
- * @description get the list of most recent trades for a particular symbol
1262
- * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot001_market005_market_deals
1263
- * @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http011_market_deals
1260
+ * @description get the list of the most recent trades for a particular symbol
1261
+ * @see https://docs.coinex.com/api/v2/spot/market/http/list-market-deals
1262
+ * @see https://docs.coinex.com/api/v2/futures/market/http/list-market-deals
1264
1263
  * @param {string} symbol unified symbol of the market to fetch trades for
1265
1264
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
1266
1265
  * @param {int} [limit] the maximum amount of trades to fetch
@@ -1278,28 +1277,27 @@ export default class coinex extends Exchange {
1278
1277
  }
1279
1278
  let response = undefined;
1280
1279
  if (market['swap']) {
1281
- response = await this.v1PerpetualPublicGetMarketDeals(this.extend(request, params));
1280
+ response = await this.v2PublicGetFuturesDeals(this.extend(request, params));
1282
1281
  }
1283
1282
  else {
1284
- response = await this.v1PublicGetMarketDeals(this.extend(request, params));
1283
+ response = await this.v2PublicGetSpotDeals(this.extend(request, params));
1285
1284
  }
1286
1285
  //
1287
1286
  // Spot and Swap
1288
1287
  //
1289
- // {
1290
- // "code": 0,
1291
- // "data": [
1292
- // {
1293
- // "id": 2611511379,
1294
- // "type": "buy",
1295
- // "price": "192.63",
1296
- // "amount": "0.02266931",
1297
- // "date": 1638990110,
1298
- // "date_ms": 1638990110518
1299
- // },
1300
- // ],
1301
- // "message": "OK"
1302
- // }
1288
+ // {
1289
+ // "code": 0,
1290
+ // "data": [
1291
+ // {
1292
+ // "amount": "0.00049432",
1293
+ // "created_at": 1713849825667,
1294
+ // "deal_id": 4137517302,
1295
+ // "price": "66251",
1296
+ // "side": "buy"
1297
+ // },
1298
+ // ],
1299
+ // "message": "OK"
1300
+ // }
1303
1301
  //
1304
1302
  return this.parseTrades(response['data'], market, since, limit);
1305
1303
  }
@@ -4487,7 +4485,7 @@ export default class coinex extends Exchange {
4487
4485
  }
4488
4486
  async fetchFundingRates(symbols = undefined, params = {}) {
4489
4487
  /**
4490
- * @method
4488
+ * @method
4491
4489
  * @name coinex#fetchFundingRates
4492
4490
  * @description fetch the current funding rates
4493
4491
  * @see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http009_market_ticker_all
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/cryptocom.js';
2
- import type { Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, Str, Ticker, OrderRequest, Balances, Transaction, OrderBook, Tickers, Strings, Currency, Market, Num, Account } from './base/types.js';
2
+ import type { Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, Str, Ticker, OrderRequest, Balances, Transaction, OrderBook, Tickers, Strings, Currency, Market, Num, Account, CancellationRequest } from './base/types.js';
3
3
  /**
4
4
  * @class cryptocom
5
5
  * @augments Exchange
@@ -23,6 +23,7 @@ export default class cryptocom extends Exchange {
23
23
  cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
24
24
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
25
25
  cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
26
+ cancelOrdersForSymbols(orders: CancellationRequest[], params?: {}): Promise<Order[]>;
26
27
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
27
28
  fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
28
29
  parseAddress(addressString: any): any[];
@@ -35,6 +35,7 @@ export default class cryptocom extends Exchange {
35
35
  'cancelAllOrders': true,
36
36
  'cancelOrder': true,
37
37
  'cancelOrders': true,
38
+ 'cancelOrdersForSymbols': true,
38
39
  'closeAllPositions': false,
39
40
  'closePosition': true,
40
41
  'createMarketBuyOrderWithCost': false,
@@ -1467,6 +1468,37 @@ export default class cryptocom extends Exchange {
1467
1468
  const result = this.safeList(response, 'result', []);
1468
1469
  return this.parseOrders(result, market, undefined, undefined, params);
1469
1470
  }
1471
+ async cancelOrdersForSymbols(orders, params = {}) {
1472
+ /**
1473
+ * @method
1474
+ * @name cryptocom#cancelOrdersForSymbols
1475
+ * @description cancel multiple orders for multiple symbols
1476
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
1477
+ * @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol
1478
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1479
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1480
+ */
1481
+ await this.loadMarkets();
1482
+ const orderRequests = [];
1483
+ for (let i = 0; i < orders.length; i++) {
1484
+ const order = orders[i];
1485
+ const id = this.safeString(order, 'id');
1486
+ const symbol = this.safeString(order, 'symbol');
1487
+ const market = this.market(symbol);
1488
+ const orderItem = {
1489
+ 'instrument_name': market['id'],
1490
+ 'order_id': id.toString(),
1491
+ };
1492
+ orderRequests.push(orderItem);
1493
+ }
1494
+ const request = {
1495
+ 'contingency_type': 'LIST',
1496
+ 'order_list': orderRequests,
1497
+ };
1498
+ const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
1499
+ const result = this.safeList(response, 'result', []);
1500
+ return this.parseOrders(result, undefined, undefined, undefined, params);
1501
+ }
1470
1502
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1471
1503
  /**
1472
1504
  * @method
package/js/src/htx.d.ts CHANGED
@@ -92,6 +92,7 @@ export default class htx extends Exchange {
92
92
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
93
93
  cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<any>;
94
94
  cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
95
+ cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
95
96
  parseDepositAddress(depositAddress: any, currency?: Currency): {
96
97
  currency: string;
97
98
  address: string;
package/js/src/htx.js CHANGED
@@ -38,6 +38,7 @@ export default class htx extends Exchange {
38
38
  'borrowCrossMargin': true,
39
39
  'borrowIsolatedMargin': true,
40
40
  'cancelAllOrders': true,
41
+ 'cancelAllOrdersAfter': true,
41
42
  'cancelOrder': true,
42
43
  'cancelOrders': true,
43
44
  'createDepositAddress': undefined,
@@ -6166,6 +6167,33 @@ export default class htx extends Exchange {
6166
6167
  //
6167
6168
  return response;
6168
6169
  }
6170
+ async cancelAllOrdersAfter(timeout, params = {}) {
6171
+ /**
6172
+ * @method
6173
+ * @name huobi#cancelAllOrdersAfter
6174
+ * @description dead man's switch, cancel all orders after the given timeout
6175
+ * @see https://huobiapi.github.io/docs/spot/v1/en/#dead-man-s-switch
6176
+ * @param {number} timeout time in milliseconds, 0 represents cancel the timer
6177
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
6178
+ * @returns {object} the api result
6179
+ */
6180
+ await this.loadMarkets();
6181
+ const request = {
6182
+ 'timeout': (timeout > 0) ? this.parseToInt(timeout / 1000) : 0,
6183
+ };
6184
+ const response = await this.v2PrivatePostAlgoOrdersCancelAllAfter(this.extend(request, params));
6185
+ //
6186
+ // {
6187
+ // "code": 200,
6188
+ // "message": "success",
6189
+ // "data": {
6190
+ // "currentTime": 1630491627230,
6191
+ // "triggerTime": 1630491637230
6192
+ // }
6193
+ // }
6194
+ //
6195
+ return response;
6196
+ }
6169
6197
  parseDepositAddress(depositAddress, currency = undefined) {
6170
6198
  //
6171
6199
  // {
@@ -56,6 +56,7 @@ export default class hyperliquid extends Exchange {
56
56
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
57
57
  cancelOrders(ids: string[], symbol?: Str, params?: {}): Promise<any>;
58
58
  cancelOrdersForSymbols(orders: CancellationRequest[], params?: {}): Promise<any>;
59
+ cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
59
60
  editOrder(id: string, symbol: string, type: string, side: string, amount?: Num, price?: Num, params?: {}): Promise<Order>;
60
61
  fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingRateHistory[]>;
61
62
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
@@ -38,6 +38,7 @@ export default class hyperliquid extends Exchange {
38
38
  'borrowCrossMargin': false,
39
39
  'borrowIsolatedMargin': false,
40
40
  'cancelAllOrders': false,
41
+ 'cancelAllOrdersAfter': true,
41
42
  'cancelOrder': true,
42
43
  'cancelOrders': true,
43
44
  'cancelOrdersForSymbols': true,
@@ -1364,6 +1365,45 @@ export default class hyperliquid extends Exchange {
1364
1365
  //
1365
1366
  return response;
1366
1367
  }
1368
+ async cancelAllOrdersAfter(timeout, params = {}) {
1369
+ /**
1370
+ * @method
1371
+ * @name hyperliquid#cancelAllOrdersAfter
1372
+ * @description dead man's switch, cancel all orders after the given timeout
1373
+ * @param {number} timeout time in milliseconds, 0 represents cancel the timer
1374
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1375
+ * @param {string} [params.vaultAddress] the vault address
1376
+ * @returns {object} the api result
1377
+ */
1378
+ this.checkRequiredCredentials();
1379
+ await this.loadMarkets();
1380
+ params = this.omit(params, ['clientOrderId', 'client_id']);
1381
+ const nonce = this.milliseconds();
1382
+ const request = {
1383
+ 'nonce': nonce,
1384
+ // 'vaultAddress': vaultAddress,
1385
+ };
1386
+ const cancelAction = {
1387
+ 'type': 'scheduleCancel',
1388
+ 'time': nonce + timeout,
1389
+ };
1390
+ const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
1391
+ const signature = this.signL1Action(cancelAction, nonce, vaultAddress);
1392
+ request['action'] = cancelAction;
1393
+ request['signature'] = signature;
1394
+ if (vaultAddress !== undefined) {
1395
+ params = this.omit(params, 'vaultAddress');
1396
+ request['vaultAddress'] = vaultAddress;
1397
+ }
1398
+ const response = await this.privatePostExchange(this.extend(request, params));
1399
+ //
1400
+ // {
1401
+ // "status":"err",
1402
+ // "response":"Cannot set scheduled cancel time until enough volume traded. Required: $1000000. Traded: $373.47205."
1403
+ // }
1404
+ //
1405
+ return response;
1406
+ }
1367
1407
  async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
1368
1408
  /**
1369
1409
  * @method
@@ -71,6 +71,7 @@ export default class kraken extends Exchange {
71
71
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
72
72
  cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<any>;
73
73
  cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
74
+ cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
74
75
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
75
76
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
76
77
  parseTransactionStatus(status: any): string;
package/js/src/kraken.js CHANGED
@@ -39,6 +39,7 @@ export default class kraken extends Exchange {
39
39
  'option': false,
40
40
  'addMargin': false,
41
41
  'cancelAllOrders': true,
42
+ 'cancelAllOrdersAfter': true,
42
43
  'cancelOrder': true,
43
44
  'cancelOrders': true,
44
45
  'createDepositAddress': true,
@@ -2139,6 +2140,35 @@ export default class kraken extends Exchange {
2139
2140
  await this.loadMarkets();
2140
2141
  return await this.privatePostCancelAll(params);
2141
2142
  }
2143
+ async cancelAllOrdersAfter(timeout, params = {}) {
2144
+ /**
2145
+ * @method
2146
+ * @name kraken#cancelAllOrdersAfter
2147
+ * @description dead man's switch, cancel all orders after the given timeout
2148
+ * @see https://docs.kraken.com/rest/#tag/Spot-Trading/operation/cancelAllOrdersAfter
2149
+ * @param {number} timeout time in milliseconds, 0 represents cancel the timer
2150
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2151
+ * @returns {object} the api result
2152
+ */
2153
+ if (timeout > 86400000) {
2154
+ throw new BadRequest(this.id + 'cancelAllOrdersAfter timeout should be less than 86400000 milliseconds');
2155
+ }
2156
+ await this.loadMarkets();
2157
+ const request = {
2158
+ 'timeout': (timeout > 0) ? (this.parseToInt(timeout / 1000)) : 0,
2159
+ };
2160
+ const response = await this.privatePostCancelAllOrdersAfter(this.extend(request, params));
2161
+ //
2162
+ // {
2163
+ // "error": [ ],
2164
+ // "result": {
2165
+ // "currentTime": "2023-03-24T17:41:56Z",
2166
+ // "triggerTime": "2023-03-24T17:42:56Z"
2167
+ // }
2168
+ // }
2169
+ //
2170
+ return response;
2171
+ }
2142
2172
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2143
2173
  /**
2144
2174
  * @method
@@ -21,6 +21,7 @@ export default class krakenfutures extends Exchange {
21
21
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
22
22
  cancelOrders(ids: string[], symbol?: Str, params?: {}): Promise<Order[]>;
23
23
  cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
24
+ cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
24
25
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
25
26
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
26
27
  fetchCanceledOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
@@ -34,6 +34,7 @@ export default class krakenfutures extends Exchange {
34
34
  'future': true,
35
35
  'option': false,
36
36
  'cancelAllOrders': true,
37
+ 'cancelAllOrdersAfter': true,
37
38
  'cancelOrder': true,
38
39
  'cancelOrders': true,
39
40
  'createMarketOrder': false,
@@ -1272,6 +1273,33 @@ export default class krakenfutures extends Exchange {
1272
1273
  const response = await this.privatePostCancelallorders(this.extend(request, params));
1273
1274
  return response;
1274
1275
  }
1276
+ async cancelAllOrdersAfter(timeout, params = {}) {
1277
+ /**
1278
+ * @method
1279
+ * @name krakenfutures#cancelAllOrdersAfter
1280
+ * @description dead man's switch, cancel all orders after the given timeout
1281
+ * @see https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-dead-man-39-s-switch
1282
+ * @param {number} timeout time in milliseconds, 0 represents cancel the timer
1283
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1284
+ * @returns {object} the api result
1285
+ */
1286
+ await this.loadMarkets();
1287
+ const request = {
1288
+ 'timeout': (timeout > 0) ? (this.parseToInt(timeout / 1000)) : 0,
1289
+ };
1290
+ const response = await this.privatePostCancelallordersafter(this.extend(request, params));
1291
+ //
1292
+ // {
1293
+ // "result": "success",
1294
+ // "serverTime": "2018-06-19T16:51:23.839Z",
1295
+ // "status": {
1296
+ // "currentTime": "2018-06-19T16:51:23.839Z",
1297
+ // "triggerTime": "0"
1298
+ // }
1299
+ // }
1300
+ //
1301
+ return response;
1302
+ }
1275
1303
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1276
1304
  /**
1277
1305
  * @method
@@ -87,6 +87,7 @@ export default class kucoin extends Exchange {
87
87
  parseTrade(trade: any, market?: Market): Trade;
88
88
  fetchTradingFee(symbol: string, params?: {}): Promise<TradingFeeInterface>;
89
89
  withdraw(code: string, amount: number, address: any, tag?: any, params?: {}): Promise<Transaction>;
90
+ loadCurrencyPrecision(currency: any, networkCode?: Str): Promise<void>;
90
91
  parseTransactionStatus(status: any): string;
91
92
  parseTransaction(transaction: any, currency?: Currency): Transaction;
92
93
  fetchDeposits(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;