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.
- package/README.md +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +299 -6
- package/dist/cjs/src/binance.js +24 -17
- package/dist/cjs/src/bingx.js +45 -0
- package/dist/cjs/src/bitmex.js +24 -0
- package/dist/cjs/src/bybit.js +86 -0
- package/dist/cjs/src/coinbase.js +5 -4
- package/dist/cjs/src/coinex.js +30 -32
- package/dist/cjs/src/cryptocom.js +32 -0
- package/dist/cjs/src/htx.js +28 -0
- package/dist/cjs/src/hyperliquid.js +40 -0
- package/dist/cjs/src/kraken.js +30 -0
- package/dist/cjs/src/krakenfutures.js +28 -0
- package/dist/cjs/src/kucoin.js +53 -3
- package/dist/cjs/src/kucoinfutures.js +2 -2
- package/dist/cjs/src/okx.js +113 -0
- package/dist/cjs/src/pro/binance.js +439 -75
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/woo.js +0 -1
- package/dist/cjs/src/whitebit.js +174 -2
- package/dist/cjs/src/woo.js +29 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +1 -0
- package/js/src/abstract/binancecoinm.d.ts +1 -0
- package/js/src/abstract/binanceus.d.ts +1 -0
- package/js/src/abstract/binanceusdm.d.ts +1 -0
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/abstract/whitebit.d.ts +21 -0
- package/js/src/abstract/woo.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +52 -3
- package/js/src/base/Exchange.js +299 -6
- package/js/src/binance.d.ts +4 -0
- package/js/src/binance.js +24 -17
- package/js/src/bingx.d.ts +1 -0
- package/js/src/bingx.js +45 -0
- package/js/src/bitmex.d.ts +1 -0
- package/js/src/bitmex.js +24 -0
- package/js/src/bybit.d.ts +2 -1
- package/js/src/bybit.js +86 -0
- package/js/src/coinbase.js +5 -4
- package/js/src/coinex.js +30 -32
- package/js/src/cryptocom.d.ts +2 -1
- package/js/src/cryptocom.js +32 -0
- package/js/src/htx.d.ts +1 -0
- package/js/src/htx.js +28 -0
- package/js/src/hyperliquid.d.ts +1 -0
- package/js/src/hyperliquid.js +40 -0
- package/js/src/kraken.d.ts +1 -0
- package/js/src/kraken.js +30 -0
- package/js/src/krakenfutures.d.ts +1 -0
- package/js/src/krakenfutures.js +28 -0
- package/js/src/kucoin.d.ts +1 -0
- package/js/src/kucoin.js +53 -3
- package/js/src/kucoinfutures.js +2 -2
- package/js/src/okx.d.ts +3 -1
- package/js/src/okx.js +113 -0
- package/js/src/pro/binance.d.ts +9 -1
- package/js/src/pro/binance.js +439 -75
- package/js/src/pro/bitget.d.ts +1 -1
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/cex.d.ts +1 -1
- package/js/src/pro/lbank.d.ts +1 -1
- package/js/src/pro/woo.js +0 -1
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/whitebit.d.ts +3 -0
- package/js/src/whitebit.js +174 -2
- package/js/src/woo.d.ts +2 -1
- package/js/src/woo.js +29 -0
- package/package.json +1 -1
package/js/src/kucoin.js
CHANGED
|
@@ -1152,8 +1152,10 @@ export default class kucoin extends Exchange {
|
|
|
1152
1152
|
// "chains":[
|
|
1153
1153
|
// {
|
|
1154
1154
|
// "chainName":"ERC20",
|
|
1155
|
-
// "
|
|
1155
|
+
// "chainId": "eth"
|
|
1156
1156
|
// "withdrawalMinSize":"2999",
|
|
1157
|
+
// "depositMinSize":null,
|
|
1158
|
+
// "withdrawFeeRate":"0",
|
|
1157
1159
|
// "withdrawalMinFee":"2999",
|
|
1158
1160
|
// "isWithdrawEnabled":false,
|
|
1159
1161
|
// "isDepositEnabled":false,
|
|
@@ -1261,7 +1263,7 @@ export default class kucoin extends Exchange {
|
|
|
1261
1263
|
'max': undefined,
|
|
1262
1264
|
},
|
|
1263
1265
|
'deposit': {
|
|
1264
|
-
'min': this.safeNumber(
|
|
1266
|
+
'min': this.safeNumber(chain, 'depositMinSize'),
|
|
1265
1267
|
'max': undefined,
|
|
1266
1268
|
},
|
|
1267
1269
|
},
|
|
@@ -3204,7 +3206,6 @@ export default class kucoin extends Exchange {
|
|
|
3204
3206
|
const request = {
|
|
3205
3207
|
'currency': currency['id'],
|
|
3206
3208
|
'address': address,
|
|
3207
|
-
'amount': amount,
|
|
3208
3209
|
// 'memo': tag,
|
|
3209
3210
|
// 'isInner': false, // internal transfer or external withdrawal
|
|
3210
3211
|
// 'remark': 'optional',
|
|
@@ -3218,6 +3219,8 @@ export default class kucoin extends Exchange {
|
|
|
3218
3219
|
if (networkCode !== undefined) {
|
|
3219
3220
|
request['chain'] = this.networkCodeToId(networkCode).toLowerCase();
|
|
3220
3221
|
}
|
|
3222
|
+
await this.loadCurrencyPrecision(currency, networkCode);
|
|
3223
|
+
request['amount'] = this.currencyToPrecision(code, amount, networkCode);
|
|
3221
3224
|
let includeFee = undefined;
|
|
3222
3225
|
[includeFee, params] = this.handleOptionAndParams(params, 'withdraw', 'includeFee', false);
|
|
3223
3226
|
if (includeFee) {
|
|
@@ -3237,6 +3240,53 @@ export default class kucoin extends Exchange {
|
|
|
3237
3240
|
const data = this.safeDict(response, 'data', {});
|
|
3238
3241
|
return this.parseTransaction(data, currency);
|
|
3239
3242
|
}
|
|
3243
|
+
async loadCurrencyPrecision(currency, networkCode = undefined) {
|
|
3244
|
+
// as kucoin might not have network specific precisions defined in fetchCurrencies (because of webapi failure)
|
|
3245
|
+
// we should check and refetch precision once-per-instance for that specific currency & network
|
|
3246
|
+
// so avoids thorwing exceptions and burden to users
|
|
3247
|
+
// Note: this needs to be executed only if networkCode was provided
|
|
3248
|
+
if (networkCode !== undefined) {
|
|
3249
|
+
const networks = currency['networks'];
|
|
3250
|
+
const network = this.safeDict(networks, networkCode);
|
|
3251
|
+
if (this.safeNumber(network, 'precision') !== undefined) {
|
|
3252
|
+
// if precision exists, no need to refetch
|
|
3253
|
+
return;
|
|
3254
|
+
}
|
|
3255
|
+
// otherwise try to fetch and store in instance
|
|
3256
|
+
const request = {
|
|
3257
|
+
'currency': currency['id'],
|
|
3258
|
+
'chain': this.networkCodeToId(networkCode).toLowerCase(),
|
|
3259
|
+
};
|
|
3260
|
+
const response = await this.privateGetWithdrawalsQuotas(request);
|
|
3261
|
+
//
|
|
3262
|
+
// {
|
|
3263
|
+
// "code": "200000",
|
|
3264
|
+
// "data": {
|
|
3265
|
+
// "currency": "USDT",
|
|
3266
|
+
// "limitBTCAmount": "14.24094850",
|
|
3267
|
+
// "usedBTCAmount": "0.00000000",
|
|
3268
|
+
// "quotaCurrency": "USDT",
|
|
3269
|
+
// "limitQuotaCurrencyAmount": "999999.00000000",
|
|
3270
|
+
// "usedQuotaCurrencyAmount": "0",
|
|
3271
|
+
// "remainAmount": "999999.0000",
|
|
3272
|
+
// "availableAmount": "10.77545071",
|
|
3273
|
+
// "withdrawMinFee": "1",
|
|
3274
|
+
// "innerWithdrawMinFee": "0",
|
|
3275
|
+
// "withdrawMinSize": "10",
|
|
3276
|
+
// "isWithdrawEnabled": true,
|
|
3277
|
+
// "precision": 4,
|
|
3278
|
+
// "chain": "EOS",
|
|
3279
|
+
// "reason": null,
|
|
3280
|
+
// "lockedAmount": "0"
|
|
3281
|
+
// }
|
|
3282
|
+
// }
|
|
3283
|
+
//
|
|
3284
|
+
const data = this.safeDict(response, 'data', {});
|
|
3285
|
+
const precision = this.parseNumber(this.parsePrecision(this.safeString(data, 'precision')));
|
|
3286
|
+
const code = currency['code'];
|
|
3287
|
+
this.currencies[code]['networks'][networkCode]['precision'] = precision;
|
|
3288
|
+
}
|
|
3289
|
+
}
|
|
3240
3290
|
parseTransactionStatus(status) {
|
|
3241
3291
|
const statuses = {
|
|
3242
3292
|
'SUCCESS': 'ok',
|
package/js/src/kucoinfutures.js
CHANGED
|
@@ -2198,8 +2198,8 @@ export default class kucoinfutures extends kucoin {
|
|
|
2198
2198
|
// symbol (String) [optional] Symbol of the contract
|
|
2199
2199
|
// side (String) [optional] buy or sell
|
|
2200
2200
|
// type (String) [optional] limit, market, limit_stop or market_stop
|
|
2201
|
-
// startAt (long) [optional] Start time (
|
|
2202
|
-
// endAt (long) [optional] End time (
|
|
2201
|
+
// startAt (long) [optional] Start time (millisecond)
|
|
2202
|
+
// endAt (long) [optional] End time (millisecond)
|
|
2203
2203
|
};
|
|
2204
2204
|
let market = undefined;
|
|
2205
2205
|
if (symbol !== undefined) {
|
package/js/src/okx.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/okx.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage, Num, Account, OptionChain, Option, MarginModification, TradingFeeInterface, Currencies, Conversion } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage, Num, Account, OptionChain, Option, MarginModification, TradingFeeInterface, Currencies, Conversion, CancellationRequest } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class okx
|
|
5
5
|
* @augments Exchange
|
|
@@ -49,6 +49,8 @@ export default class okx extends Exchange {
|
|
|
49
49
|
cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
|
|
50
50
|
parseIds(ids: any): any;
|
|
51
51
|
cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
|
|
52
|
+
cancelOrdersForSymbols(orders: CancellationRequest[], params?: {}): Promise<Order[]>;
|
|
53
|
+
cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
|
|
52
54
|
parseOrderStatus(status: any): string;
|
|
53
55
|
parseOrder(order: any, market?: Market): Order;
|
|
54
56
|
fetchOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
|
package/js/src/okx.js
CHANGED
|
@@ -34,8 +34,10 @@ export default class okx extends Exchange {
|
|
|
34
34
|
'option': true,
|
|
35
35
|
'addMargin': true,
|
|
36
36
|
'cancelAllOrders': false,
|
|
37
|
+
'cancelAllOrdersAfter': true,
|
|
37
38
|
'cancelOrder': true,
|
|
38
39
|
'cancelOrders': true,
|
|
40
|
+
'cancelOrdersForSymbols': true,
|
|
39
41
|
'closeAllPositions': false,
|
|
40
42
|
'closePosition': true,
|
|
41
43
|
'createConvertTrade': true,
|
|
@@ -3285,6 +3287,117 @@ export default class okx extends Exchange {
|
|
|
3285
3287
|
const ordersData = this.safeList(response, 'data', []);
|
|
3286
3288
|
return this.parseOrders(ordersData, market, undefined, undefined, params);
|
|
3287
3289
|
}
|
|
3290
|
+
async cancelOrdersForSymbols(orders, params = {}) {
|
|
3291
|
+
/**
|
|
3292
|
+
* @method
|
|
3293
|
+
* @name okx#cancelOrdersForSymbols
|
|
3294
|
+
* @description cancel multiple orders for multiple symbols
|
|
3295
|
+
* @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-cancel-multiple-orders
|
|
3296
|
+
* @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-post-cancel-algo-order
|
|
3297
|
+
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol
|
|
3298
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3299
|
+
* @param {boolean} [params.trigger] whether the order is a stop/trigger order
|
|
3300
|
+
* @param {boolean} [params.trailing] set to true if you want to cancel trailing orders
|
|
3301
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
3302
|
+
*/
|
|
3303
|
+
await this.loadMarkets();
|
|
3304
|
+
const request = [];
|
|
3305
|
+
const options = this.safeDict(this.options, 'cancelOrders', {});
|
|
3306
|
+
const defaultMethod = this.safeString(options, 'method', 'privatePostTradeCancelBatchOrders');
|
|
3307
|
+
let method = this.safeString(params, 'method', defaultMethod);
|
|
3308
|
+
const stop = this.safeBool2(params, 'stop', 'trigger');
|
|
3309
|
+
const trailing = this.safeBool(params, 'trailing', false);
|
|
3310
|
+
const isStopOrTrailing = stop || trailing;
|
|
3311
|
+
if (isStopOrTrailing) {
|
|
3312
|
+
method = 'privatePostTradeCancelAlgos';
|
|
3313
|
+
}
|
|
3314
|
+
for (let i = 0; i < orders.length; i++) {
|
|
3315
|
+
const order = orders[i];
|
|
3316
|
+
const id = this.safeString(order, 'id');
|
|
3317
|
+
const clientOrderId = this.safeString2(order, 'clOrdId', 'clientOrderId');
|
|
3318
|
+
const symbol = this.safeString(order, 'symbol');
|
|
3319
|
+
const market = this.market(symbol);
|
|
3320
|
+
let idKey = 'ordId';
|
|
3321
|
+
if (isStopOrTrailing) {
|
|
3322
|
+
idKey = 'algoId';
|
|
3323
|
+
}
|
|
3324
|
+
else if (clientOrderId !== undefined) {
|
|
3325
|
+
idKey = 'clOrdId';
|
|
3326
|
+
}
|
|
3327
|
+
const requestItem = {
|
|
3328
|
+
'instId': market['id'],
|
|
3329
|
+
};
|
|
3330
|
+
requestItem[idKey] = (clientOrderId !== undefined) ? clientOrderId : id;
|
|
3331
|
+
request.push(requestItem);
|
|
3332
|
+
}
|
|
3333
|
+
let response = undefined;
|
|
3334
|
+
if (method === 'privatePostTradeCancelAlgos') {
|
|
3335
|
+
response = await this.privatePostTradeCancelAlgos(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT
|
|
3336
|
+
}
|
|
3337
|
+
else {
|
|
3338
|
+
response = await this.privatePostTradeCancelBatchOrders(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT
|
|
3339
|
+
}
|
|
3340
|
+
//
|
|
3341
|
+
// {
|
|
3342
|
+
// "code": "0",
|
|
3343
|
+
// "data": [
|
|
3344
|
+
// {
|
|
3345
|
+
// "clOrdId": "e123456789ec4dBC1123456ba123b45e",
|
|
3346
|
+
// "ordId": "405071912345641543",
|
|
3347
|
+
// "sCode": "0",
|
|
3348
|
+
// "sMsg": ""
|
|
3349
|
+
// },
|
|
3350
|
+
// ...
|
|
3351
|
+
// ],
|
|
3352
|
+
// "msg": ""
|
|
3353
|
+
// }
|
|
3354
|
+
//
|
|
3355
|
+
// Algo order
|
|
3356
|
+
//
|
|
3357
|
+
// {
|
|
3358
|
+
// "code": "0",
|
|
3359
|
+
// "data": [
|
|
3360
|
+
// {
|
|
3361
|
+
// "algoId": "431375349042380800",
|
|
3362
|
+
// "sCode": "0",
|
|
3363
|
+
// "sMsg": ""
|
|
3364
|
+
// }
|
|
3365
|
+
// ],
|
|
3366
|
+
// "msg": ""
|
|
3367
|
+
// }
|
|
3368
|
+
//
|
|
3369
|
+
const ordersData = this.safeList(response, 'data', []);
|
|
3370
|
+
return this.parseOrders(ordersData, undefined, undefined, undefined, params);
|
|
3371
|
+
}
|
|
3372
|
+
async cancelAllOrdersAfter(timeout, params = {}) {
|
|
3373
|
+
/**
|
|
3374
|
+
* @method
|
|
3375
|
+
* @name okx#cancelAllOrdersAfter
|
|
3376
|
+
* @description dead man's switch, cancel all orders after the given timeout
|
|
3377
|
+
* @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-cancel-all-after
|
|
3378
|
+
* @param {number} timeout time in milliseconds, 0 represents cancel the timer
|
|
3379
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3380
|
+
* @returns {object} the api result
|
|
3381
|
+
*/
|
|
3382
|
+
await this.loadMarkets();
|
|
3383
|
+
const request = {
|
|
3384
|
+
'timeOut': (timeout > 0) ? this.parseToInt(timeout / 1000) : 0,
|
|
3385
|
+
};
|
|
3386
|
+
const response = await this.privatePostTradeCancelAllAfter(this.extend(request, params));
|
|
3387
|
+
//
|
|
3388
|
+
// {
|
|
3389
|
+
// "code":"0",
|
|
3390
|
+
// "msg":"",
|
|
3391
|
+
// "data":[
|
|
3392
|
+
// {
|
|
3393
|
+
// "triggerTime":"1587971460",
|
|
3394
|
+
// "ts":"1587971400"
|
|
3395
|
+
// }
|
|
3396
|
+
// ]
|
|
3397
|
+
// }
|
|
3398
|
+
//
|
|
3399
|
+
return response;
|
|
3400
|
+
}
|
|
3288
3401
|
parseOrderStatus(status) {
|
|
3289
3402
|
const statuses = {
|
|
3290
3403
|
'canceled': 'canceled',
|
package/js/src/pro/binance.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export default class binance extends binanceRest {
|
|
|
7
7
|
stream(type: any, subscriptionHash: any, numSubscriptions?: number): string;
|
|
8
8
|
watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
9
9
|
watchOrderBookForSymbols(symbols: string[], limit?: Int, params?: {}): Promise<OrderBook>;
|
|
10
|
+
fetchOrderBookWs(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
11
|
+
handleFetchOrderBook(client: Client, message: any): void;
|
|
10
12
|
fetchOrderBookSnapshot(client: any, message: any, subscription: any): Promise<void>;
|
|
11
13
|
handleDelta(bookside: any, delta: any): void;
|
|
12
14
|
handleDeltas(bookside: any, deltas: any): void;
|
|
@@ -20,6 +22,7 @@ export default class binance extends binanceRest {
|
|
|
20
22
|
handleTrade(client: Client, message: any): void;
|
|
21
23
|
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
22
24
|
handleOHLCV(client: Client, message: any): void;
|
|
25
|
+
fetchTickerWs(symbol: string, params?: {}): Promise<Ticker>;
|
|
23
26
|
fetchOHLCVWs(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
24
27
|
handleFetchOHLCV(client: Client, message: any): void;
|
|
25
28
|
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
@@ -27,6 +30,7 @@ export default class binance extends binanceRest {
|
|
|
27
30
|
watchBidsAsks(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
28
31
|
watchMultiTickerHelper(methodName: any, channelName: string, symbols?: Strings, params?: {}): Promise<any>;
|
|
29
32
|
parseWsTicker(message: any, marketType: any): Ticker;
|
|
33
|
+
handleTickerWs(client: Client, message: any): void;
|
|
30
34
|
handleBidsAsks(client: Client, message: any): void;
|
|
31
35
|
handleTickers(client: Client, message: any): void;
|
|
32
36
|
handleTickersAndBidsAsks(client: Client, message: any, methodType: any): void;
|
|
@@ -38,9 +42,13 @@ export default class binance extends binanceRest {
|
|
|
38
42
|
loadBalanceSnapshot(client: any, messageHash: any, type: any, isPortfolioMargin: any): Promise<void>;
|
|
39
43
|
fetchBalanceWs(params?: {}): Promise<Balances>;
|
|
40
44
|
handleBalanceWs(client: Client, message: any): void;
|
|
45
|
+
handleAccountStatusWs(client: Client, message: any): void;
|
|
46
|
+
fetchPositionWs(symbol: string, params?: {}): Promise<Position[]>;
|
|
47
|
+
fetchPositionsWs(symbols?: Strings, params?: {}): Promise<Position[]>;
|
|
48
|
+
handlePositionsWs(client: Client, message: any): void;
|
|
41
49
|
watchBalance(params?: {}): Promise<Balances>;
|
|
42
50
|
handleBalance(client: Client, message: any): void;
|
|
43
|
-
|
|
51
|
+
getMarketType(method: any, market: any, params?: {}): any;
|
|
44
52
|
createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
45
53
|
handleOrderWs(client: Client, message: any): void;
|
|
46
54
|
handleOrdersWs(client: Client, message: any): void;
|