ccxt 4.3.84 → 4.3.86
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 +7 -5
- package/dist/ccxt.browser.min.js +15 -15
- package/dist/cjs/ccxt.js +7 -1
- package/dist/cjs/src/abstract/hashkey.js +9 -0
- package/dist/cjs/src/base/Exchange.js +1 -1
- package/dist/cjs/src/base/errors.js +8 -1
- package/dist/cjs/src/binance.js +4 -2
- package/dist/cjs/src/bitfinex.js +2 -2
- package/dist/cjs/src/bitmex.js +4 -0
- package/dist/cjs/src/bybit.js +15 -14
- package/dist/cjs/src/cryptocom.js +117 -2
- package/dist/cjs/src/hashkey.js +4328 -0
- package/dist/cjs/src/hyperliquid.js +85 -65
- package/dist/cjs/src/indodax.js +37 -9
- package/dist/cjs/src/kraken.js +29 -1
- package/dist/cjs/src/krakenfutures.js +12 -10
- package/dist/cjs/src/kucoinfutures.js +5 -0
- package/dist/cjs/src/mexc.js +2 -2
- package/dist/cjs/src/pro/ascendex.js +45 -5
- package/dist/cjs/src/pro/binance.js +1 -1
- package/dist/cjs/src/pro/bingx.js +13 -12
- package/dist/cjs/src/pro/bitget.js +113 -4
- package/dist/cjs/src/pro/hashkey.js +839 -0
- package/dist/cjs/src/pro/hyperliquid.js +123 -0
- package/dist/cjs/src/pro/mexc.js +13 -7
- package/dist/cjs/src/pro/okx.js +25 -4
- package/dist/cjs/src/pro/woo.js +1 -0
- package/dist/cjs/src/pro/woofipro.js +1 -0
- package/dist/cjs/src/pro/xt.js +1 -0
- package/js/ccxt.d.ts +9 -3
- package/js/ccxt.js +7 -3
- package/js/src/abstract/cryptocom.d.ts +2 -0
- package/js/src/abstract/hashkey.d.ts +70 -0
- package/js/src/abstract/hashkey.js +11 -0
- package/js/src/abstract/kucoinfutures.d.ts +2 -0
- package/js/src/base/Exchange.js +1 -1
- package/js/src/base/errorHierarchy.d.ts +1 -0
- package/js/src/base/errorHierarchy.js +1 -0
- package/js/src/base/errors.d.ts +5 -1
- package/js/src/base/errors.js +8 -2
- package/js/src/binance.js +4 -2
- package/js/src/bitfinex.js +2 -2
- package/js/src/bitmex.js +4 -0
- package/js/src/bybit.js +16 -15
- package/js/src/cryptocom.d.ts +5 -1
- package/js/src/cryptocom.js +117 -2
- package/js/src/hashkey.d.ts +178 -0
- package/js/src/hashkey.js +4329 -0
- package/js/src/hyperliquid.d.ts +3 -0
- package/js/src/hyperliquid.js +85 -65
- package/js/src/indodax.js +37 -9
- package/js/src/kraken.js +29 -1
- package/js/src/krakenfutures.js +12 -10
- package/js/src/kucoinfutures.js +5 -0
- package/js/src/mexc.js +2 -2
- package/js/src/pro/ascendex.d.ts +2 -0
- package/js/src/pro/ascendex.js +45 -5
- package/js/src/pro/binance.js +1 -1
- package/js/src/pro/bingx.js +13 -12
- package/js/src/pro/bitget.d.ts +4 -0
- package/js/src/pro/bitget.js +113 -4
- package/js/src/pro/hashkey.d.ts +34 -0
- package/js/src/pro/hashkey.js +840 -0
- package/js/src/pro/hyperliquid.d.ts +7 -1
- package/js/src/pro/hyperliquid.js +123 -0
- package/js/src/pro/mexc.js +13 -7
- package/js/src/pro/okx.js +25 -4
- package/js/src/pro/woo.js +1 -0
- package/js/src/pro/woofipro.js +1 -0
- package/js/src/pro/xt.js +1 -0
- package/package.json +1 -1
package/js/src/base/errors.js
CHANGED
|
@@ -83,6 +83,12 @@ class MarketClosed extends OperationRejected {
|
|
|
83
83
|
this.name = 'MarketClosed';
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
+
class ManualInteractionNeeded extends OperationRejected {
|
|
87
|
+
constructor(message) {
|
|
88
|
+
super(message);
|
|
89
|
+
this.name = 'ManualInteractionNeeded';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
86
92
|
class InsufficientFunds extends ExchangeError {
|
|
87
93
|
constructor(message) {
|
|
88
94
|
super(message);
|
|
@@ -233,5 +239,5 @@ class CancelPending extends OperationFailed {
|
|
|
233
239
|
this.name = 'CancelPending';
|
|
234
240
|
}
|
|
235
241
|
}
|
|
236
|
-
export { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
237
|
-
export default { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
242
|
+
export { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
243
|
+
export default { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
package/js/src/binance.js
CHANGED
|
@@ -3855,12 +3855,14 @@ export default class binance extends Exchange {
|
|
|
3855
3855
|
const marketId = this.safeString(ticker, 'symbol');
|
|
3856
3856
|
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
|
|
3857
3857
|
const last = this.safeString(ticker, 'lastPrice');
|
|
3858
|
+
const wAvg = this.safeString(ticker, 'weightedAvgPrice');
|
|
3858
3859
|
const isCoinm = ('baseVolume' in ticker);
|
|
3859
3860
|
let baseVolume = undefined;
|
|
3860
3861
|
let quoteVolume = undefined;
|
|
3861
3862
|
if (isCoinm) {
|
|
3862
3863
|
baseVolume = this.safeString(ticker, 'baseVolume');
|
|
3863
|
-
quoteVolume
|
|
3864
|
+
// 'volume' field in inverse markets is not quoteVolume, but traded amount (per contracts)
|
|
3865
|
+
quoteVolume = Precise.stringMul(baseVolume, wAvg);
|
|
3864
3866
|
}
|
|
3865
3867
|
else {
|
|
3866
3868
|
baseVolume = this.safeString(ticker, 'volume');
|
|
@@ -3876,7 +3878,7 @@ export default class binance extends Exchange {
|
|
|
3876
3878
|
'bidVolume': this.safeString(ticker, 'bidQty'),
|
|
3877
3879
|
'ask': this.safeString(ticker, 'askPrice'),
|
|
3878
3880
|
'askVolume': this.safeString(ticker, 'askQty'),
|
|
3879
|
-
'vwap':
|
|
3881
|
+
'vwap': wAvg,
|
|
3880
3882
|
'open': this.safeString2(ticker, 'openPrice', 'open'),
|
|
3881
3883
|
'close': last,
|
|
3882
3884
|
'last': last,
|
package/js/src/bitfinex.js
CHANGED
|
@@ -854,7 +854,7 @@ export default class bitfinex extends Exchange {
|
|
|
854
854
|
* @method
|
|
855
855
|
* @name bitfinex#fetchTickers
|
|
856
856
|
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
857
|
-
* @param {string[]
|
|
857
|
+
* @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
858
858
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
859
859
|
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
860
860
|
*/
|
|
@@ -863,7 +863,7 @@ export default class bitfinex extends Exchange {
|
|
|
863
863
|
const response = await this.publicGetTickers(params);
|
|
864
864
|
const result = {};
|
|
865
865
|
for (let i = 0; i < response.length; i++) {
|
|
866
|
-
const ticker = this.parseTicker(
|
|
866
|
+
const ticker = this.parseTicker(response[i]);
|
|
867
867
|
const symbol = ticker['symbol'];
|
|
868
868
|
result[symbol] = ticker;
|
|
869
869
|
}
|
package/js/src/bitmex.js
CHANGED
|
@@ -10,6 +10,7 @@ import { TICK_SIZE } from './base/functions/number.js';
|
|
|
10
10
|
import { AuthenticationError, BadRequest, DDoSProtection, ExchangeError, ExchangeNotAvailable, InsufficientFunds, InvalidOrder, OrderNotFound, PermissionDenied, ArgumentsRequired, BadSymbol } from './base/errors.js';
|
|
11
11
|
import { Precise } from './base/Precise.js';
|
|
12
12
|
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
13
|
+
import { totp } from './base/functions/totp.js';
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
14
15
|
/**
|
|
15
16
|
* @class bitmex
|
|
@@ -2458,6 +2459,9 @@ export default class bitmex extends Exchange {
|
|
|
2458
2459
|
// 'otpToken': '123456', // requires if two-factor auth (OTP) is enabled
|
|
2459
2460
|
// 'fee': 0.001, // bitcoin network fee
|
|
2460
2461
|
};
|
|
2462
|
+
if (this.twofa !== undefined) {
|
|
2463
|
+
request['otpToken'] = totp(this.twofa);
|
|
2464
|
+
}
|
|
2461
2465
|
const response = await this.privatePostUserRequestWithdrawal(this.extend(request, params));
|
|
2462
2466
|
//
|
|
2463
2467
|
// {
|
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, MarginModeAlreadySet, NoChange } from './base/errors.js';
|
|
10
|
+
import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange, ManualInteractionNeeded } 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';
|
|
@@ -756,8 +756,11 @@ export default class bybit extends Exchange {
|
|
|
756
756
|
'140069': PermissionDenied,
|
|
757
757
|
'140070': InvalidOrder,
|
|
758
758
|
'170001': ExchangeError,
|
|
759
|
-
'170007': RequestTimeout,
|
|
760
759
|
'170005': InvalidOrder,
|
|
760
|
+
'170007': RequestTimeout,
|
|
761
|
+
'170010': InvalidOrder,
|
|
762
|
+
'170011': InvalidOrder,
|
|
763
|
+
'170019': InvalidOrder,
|
|
761
764
|
'170031': ExchangeError,
|
|
762
765
|
'170032': ExchangeError,
|
|
763
766
|
'170033': InsufficientFunds,
|
|
@@ -770,6 +773,7 @@ export default class bybit extends Exchange {
|
|
|
770
773
|
'170116': InvalidOrder,
|
|
771
774
|
'170117': InvalidOrder,
|
|
772
775
|
'170121': InvalidOrder,
|
|
776
|
+
'170124': InvalidOrder,
|
|
773
777
|
'170130': BadRequest,
|
|
774
778
|
'170131': InsufficientFunds,
|
|
775
779
|
'170132': InvalidOrder,
|
|
@@ -780,7 +784,6 @@ export default class bybit extends Exchange {
|
|
|
780
784
|
'170137': InvalidOrder,
|
|
781
785
|
'170139': InvalidOrder,
|
|
782
786
|
'170140': InvalidOrder,
|
|
783
|
-
'170124': InvalidOrder,
|
|
784
787
|
'170141': InvalidOrder,
|
|
785
788
|
'170142': InvalidOrder,
|
|
786
789
|
'170143': InvalidOrder,
|
|
@@ -805,6 +808,15 @@ export default class bybit extends Exchange {
|
|
|
805
808
|
'170198': InvalidOrder,
|
|
806
809
|
'170199': InvalidOrder,
|
|
807
810
|
'170200': InvalidOrder,
|
|
811
|
+
'170201': PermissionDenied,
|
|
812
|
+
'170202': InvalidOrder,
|
|
813
|
+
'170203': InvalidOrder,
|
|
814
|
+
'170204': InvalidOrder,
|
|
815
|
+
'170206': InvalidOrder,
|
|
816
|
+
'170210': InvalidOrder,
|
|
817
|
+
'170213': OrderNotFound,
|
|
818
|
+
'170217': InvalidOrder,
|
|
819
|
+
'170218': InvalidOrder,
|
|
808
820
|
'170221': BadRequest,
|
|
809
821
|
'170222': RateLimitExceeded,
|
|
810
822
|
'170223': InsufficientFunds,
|
|
@@ -814,18 +826,7 @@ export default class bybit extends Exchange {
|
|
|
814
826
|
'170228': InvalidOrder,
|
|
815
827
|
'170229': InvalidOrder,
|
|
816
828
|
'170234': ExchangeError,
|
|
817
|
-
'
|
|
818
|
-
'170213': OrderNotFound,
|
|
819
|
-
'170217': InvalidOrder,
|
|
820
|
-
'170218': InvalidOrder,
|
|
821
|
-
'170010': InvalidOrder,
|
|
822
|
-
'170011': InvalidOrder,
|
|
823
|
-
'170019': InvalidOrder,
|
|
824
|
-
'170201': PermissionDenied,
|
|
825
|
-
'170202': InvalidOrder,
|
|
826
|
-
'170203': InvalidOrder,
|
|
827
|
-
'170204': InvalidOrder,
|
|
828
|
-
'170206': InvalidOrder,
|
|
829
|
+
'170241': ManualInteractionNeeded,
|
|
829
830
|
'175000': InvalidOrder,
|
|
830
831
|
'175001': InvalidOrder,
|
|
831
832
|
'175002': InvalidOrder,
|
package/js/src/cryptocom.d.ts
CHANGED
|
@@ -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, CancellationRequest, Dict, int } 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, Dict, int, TradingFeeInterface, TradingFees } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class cryptocom
|
|
5
5
|
* @augments Exchange
|
|
@@ -90,6 +90,10 @@ export default class cryptocom extends Exchange {
|
|
|
90
90
|
nonce(): number;
|
|
91
91
|
paramsToString(object: any, level: any): any;
|
|
92
92
|
closePosition(symbol: string, side?: OrderSide, params?: {}): Promise<Order>;
|
|
93
|
+
fetchTradingFee(symbol: string, params?: {}): Promise<TradingFeeInterface>;
|
|
94
|
+
fetchTradingFees(params?: {}): Promise<TradingFees>;
|
|
95
|
+
parseTradingFees(response: any): Dict;
|
|
96
|
+
parseTradingFee(fee: Dict, market?: Market): TradingFeeInterface;
|
|
93
97
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
94
98
|
url: string;
|
|
95
99
|
method: string;
|
package/js/src/cryptocom.js
CHANGED
|
@@ -94,8 +94,8 @@ export default class cryptocom extends Exchange {
|
|
|
94
94
|
'fetchTickers': true,
|
|
95
95
|
'fetchTime': false,
|
|
96
96
|
'fetchTrades': true,
|
|
97
|
-
'fetchTradingFee':
|
|
98
|
-
'fetchTradingFees':
|
|
97
|
+
'fetchTradingFee': true,
|
|
98
|
+
'fetchTradingFees': true,
|
|
99
99
|
'fetchTransactionFees': false,
|
|
100
100
|
'fetchTransactions': false,
|
|
101
101
|
'fetchTransfers': false,
|
|
@@ -196,6 +196,8 @@ export default class cryptocom extends Exchange {
|
|
|
196
196
|
'private/get-accounts': 10 / 3,
|
|
197
197
|
'private/get-withdrawal-history': 10 / 3,
|
|
198
198
|
'private/get-deposit-history': 10 / 3,
|
|
199
|
+
'private/get-fee-rate': 2,
|
|
200
|
+
'private/get-instrument-fee-rate': 2,
|
|
199
201
|
'private/staking/stake': 2,
|
|
200
202
|
'private/staking/unstake': 2,
|
|
201
203
|
'private/staking/get-staking-position': 2,
|
|
@@ -3022,6 +3024,119 @@ export default class cryptocom extends Exchange {
|
|
|
3022
3024
|
const result = this.safeDict(response, 'result');
|
|
3023
3025
|
return this.parseOrder(result, market);
|
|
3024
3026
|
}
|
|
3027
|
+
async fetchTradingFee(symbol, params = {}) {
|
|
3028
|
+
/**
|
|
3029
|
+
* @method
|
|
3030
|
+
* @name cryptocom#fetchTradingFee
|
|
3031
|
+
* @description fetch the trading fees for a market
|
|
3032
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-instrument-fee-rate
|
|
3033
|
+
* @param {string} symbol unified market symbol
|
|
3034
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3035
|
+
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
3036
|
+
*/
|
|
3037
|
+
await this.loadMarkets();
|
|
3038
|
+
const market = this.market(symbol);
|
|
3039
|
+
const request = {
|
|
3040
|
+
'instrument_name': market['id'],
|
|
3041
|
+
};
|
|
3042
|
+
const response = await this.v1PrivatePostPrivateGetInstrumentFeeRate(this.extend(request, params));
|
|
3043
|
+
//
|
|
3044
|
+
// {
|
|
3045
|
+
// "id": 1,
|
|
3046
|
+
// "code": 0,
|
|
3047
|
+
// "method": "private/staking/unstake",
|
|
3048
|
+
// "result": {
|
|
3049
|
+
// "staking_id": "1",
|
|
3050
|
+
// "instrument_name": "SOL.staked",
|
|
3051
|
+
// "status": "NEW",
|
|
3052
|
+
// "quantity": "1",
|
|
3053
|
+
// "underlying_inst_name": "SOL",
|
|
3054
|
+
// "reason": "NO_ERROR"
|
|
3055
|
+
// }
|
|
3056
|
+
// }
|
|
3057
|
+
//
|
|
3058
|
+
const data = this.safeDict(response, 'result', {});
|
|
3059
|
+
return this.parseTradingFee(data, market);
|
|
3060
|
+
}
|
|
3061
|
+
async fetchTradingFees(params = {}) {
|
|
3062
|
+
/**
|
|
3063
|
+
* @method
|
|
3064
|
+
* @name cryptocom#fetchTradingFees
|
|
3065
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-fee-rate
|
|
3066
|
+
* @description fetch the trading fees for multiple markets
|
|
3067
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3068
|
+
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
3069
|
+
*/
|
|
3070
|
+
await this.loadMarkets();
|
|
3071
|
+
const response = await this.v1PrivatePostPrivateGetFeeRate(params);
|
|
3072
|
+
//
|
|
3073
|
+
// {
|
|
3074
|
+
// "id": 1,
|
|
3075
|
+
// "method": "/private/get-fee-rate",
|
|
3076
|
+
// "code": 0,
|
|
3077
|
+
// "result": {
|
|
3078
|
+
// "spot_tier": "3",
|
|
3079
|
+
// "deriv_tier": "3",
|
|
3080
|
+
// "effective_spot_maker_rate_bps": "6.5",
|
|
3081
|
+
// "effective_spot_taker_rate_bps": "6.9",
|
|
3082
|
+
// "effective_deriv_maker_rate_bps": "1.1",
|
|
3083
|
+
// "effective_deriv_taker_rate_bps": "3"
|
|
3084
|
+
// }
|
|
3085
|
+
// }
|
|
3086
|
+
//
|
|
3087
|
+
const result = this.safeDict(response, 'result', {});
|
|
3088
|
+
return this.parseTradingFees(result);
|
|
3089
|
+
}
|
|
3090
|
+
parseTradingFees(response) {
|
|
3091
|
+
//
|
|
3092
|
+
// {
|
|
3093
|
+
// "spot_tier": "3",
|
|
3094
|
+
// "deriv_tier": "3",
|
|
3095
|
+
// "effective_spot_maker_rate_bps": "6.5",
|
|
3096
|
+
// "effective_spot_taker_rate_bps": "6.9",
|
|
3097
|
+
// "effective_deriv_maker_rate_bps": "1.1",
|
|
3098
|
+
// "effective_deriv_taker_rate_bps": "3"
|
|
3099
|
+
// }
|
|
3100
|
+
//
|
|
3101
|
+
const result = {};
|
|
3102
|
+
result['info'] = response;
|
|
3103
|
+
for (let i = 0; i < this.symbols.length; i++) {
|
|
3104
|
+
const symbol = this.symbols[i];
|
|
3105
|
+
const market = this.market(symbol);
|
|
3106
|
+
const isSwap = market['swap'];
|
|
3107
|
+
const takerFeeKey = isSwap ? 'effective_deriv_taker_rate_bps' : 'effective_spot_taker_rate_bps';
|
|
3108
|
+
const makerFeeKey = isSwap ? 'effective_deriv_maker_rate_bps' : 'effective_spot_maker_rate_bps';
|
|
3109
|
+
const tradingFee = {
|
|
3110
|
+
'info': response,
|
|
3111
|
+
'symbol': symbol,
|
|
3112
|
+
'maker': this.parseNumber(Precise.stringDiv(this.safeString(response, makerFeeKey), '10000')),
|
|
3113
|
+
'taker': this.parseNumber(Precise.stringDiv(this.safeString(response, takerFeeKey), '10000')),
|
|
3114
|
+
'percentage': undefined,
|
|
3115
|
+
'tierBased': undefined,
|
|
3116
|
+
};
|
|
3117
|
+
result[symbol] = tradingFee;
|
|
3118
|
+
}
|
|
3119
|
+
return result;
|
|
3120
|
+
}
|
|
3121
|
+
parseTradingFee(fee, market = undefined) {
|
|
3122
|
+
//
|
|
3123
|
+
// {
|
|
3124
|
+
// "instrument_name": "BTC_USD",
|
|
3125
|
+
// "effective_maker_rate_bps": "6.5",
|
|
3126
|
+
// "effective_taker_rate_bps": "6.9"
|
|
3127
|
+
// }
|
|
3128
|
+
//
|
|
3129
|
+
const marketId = this.safeString(fee, 'instrument_name');
|
|
3130
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
3131
|
+
return {
|
|
3132
|
+
'info': fee,
|
|
3133
|
+
'symbol': symbol,
|
|
3134
|
+
'maker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'effective_maker_rate_bps'), '10000')),
|
|
3135
|
+
'taker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'effective_taker_rate_bps'), '10000')),
|
|
3136
|
+
'percentage': undefined,
|
|
3137
|
+
'tierBased': undefined,
|
|
3138
|
+
};
|
|
3139
|
+
}
|
|
3025
3140
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
3026
3141
|
const type = this.safeString(api, 0);
|
|
3027
3142
|
const access = this.safeString(api, 1);
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import Exchange from './abstract/hashkey.js';
|
|
2
|
+
import type { Account, Balances, Currencies, Currency, Dict, FundingRateHistory, LastPrice, LastPrices, Leverage, LeverageTier, LeverageTiers, Int, Market, Num, OHLCV, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry } from './base/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* @class hashkey
|
|
5
|
+
* @augments Exchange
|
|
6
|
+
*/
|
|
7
|
+
export default class hashkey extends Exchange {
|
|
8
|
+
describe(): any;
|
|
9
|
+
fetchTime(params?: {}): Promise<Int>;
|
|
10
|
+
fetchStatus(params?: {}): Promise<{
|
|
11
|
+
status: string;
|
|
12
|
+
updated: any;
|
|
13
|
+
eta: any;
|
|
14
|
+
url: any;
|
|
15
|
+
info: any;
|
|
16
|
+
}>;
|
|
17
|
+
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
18
|
+
parseMarket(market: Dict): Market;
|
|
19
|
+
fetchCurrencies(params?: {}): Promise<Currencies>;
|
|
20
|
+
parseCurrencyType(type: any): string;
|
|
21
|
+
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
22
|
+
fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
23
|
+
fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
24
|
+
parseTrade(trade: Dict, market?: Market): Trade;
|
|
25
|
+
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
26
|
+
parseOHLCV(ohlcv: any, market?: Market): OHLCV;
|
|
27
|
+
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
28
|
+
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
29
|
+
parseTicker(ticker: any, market?: Market): Ticker;
|
|
30
|
+
fetchLastPrices(symbols?: Strings, params?: {}): Promise<LastPrices>;
|
|
31
|
+
parseLastPrice(entry: any, market?: Market): LastPrice;
|
|
32
|
+
fetchBalance(params?: {}): Promise<Balances>;
|
|
33
|
+
parseBalance(balance: any): Balances;
|
|
34
|
+
parseSwapBalance(balance: any): Balances;
|
|
35
|
+
fetchDepositAddress(code: string, params?: {}): Promise<{
|
|
36
|
+
currency: string;
|
|
37
|
+
address: string;
|
|
38
|
+
tag: string;
|
|
39
|
+
network: any;
|
|
40
|
+
info: any;
|
|
41
|
+
}>;
|
|
42
|
+
parseDepositAddress(depositAddress: any, currency?: Currency): {
|
|
43
|
+
currency: string;
|
|
44
|
+
address: string;
|
|
45
|
+
tag: string;
|
|
46
|
+
network: any;
|
|
47
|
+
info: any;
|
|
48
|
+
};
|
|
49
|
+
fetchDeposits(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;
|
|
50
|
+
fetchWithdrawals(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<Transaction[]>;
|
|
51
|
+
withdraw(code: string, amount: number, address: string, tag?: any, params?: {}): Promise<Transaction>;
|
|
52
|
+
parseTransaction(transaction: any, currency?: Currency): Transaction;
|
|
53
|
+
parseTransactionStatus(status: any): string;
|
|
54
|
+
transfer(code: string, amount: number, fromAccount: string, toAccount: string, params?: {}): Promise<TransferEntry>;
|
|
55
|
+
parseTransfer(transfer: any, currency?: Currency): {
|
|
56
|
+
id: string;
|
|
57
|
+
timestamp: number;
|
|
58
|
+
datetime: string;
|
|
59
|
+
currency: string;
|
|
60
|
+
amount: any;
|
|
61
|
+
fromAccount: any;
|
|
62
|
+
toAccount: any;
|
|
63
|
+
status: string;
|
|
64
|
+
info: any;
|
|
65
|
+
};
|
|
66
|
+
fetchAccounts(params?: {}): Promise<Account[]>;
|
|
67
|
+
parseAccount(account: any): {
|
|
68
|
+
id: string;
|
|
69
|
+
type: string;
|
|
70
|
+
code: any;
|
|
71
|
+
info: any;
|
|
72
|
+
};
|
|
73
|
+
parseAccountType(type: any): string;
|
|
74
|
+
encodeAccountType(type: any): number;
|
|
75
|
+
encodeFlowType(type: any): number;
|
|
76
|
+
fetchLedger(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
77
|
+
parseLedgerEntryType(type: any): string;
|
|
78
|
+
parseLedgerEntry(item: Dict, currency?: Currency): {
|
|
79
|
+
id: string;
|
|
80
|
+
info: Dict;
|
|
81
|
+
timestamp: number;
|
|
82
|
+
datetime: string;
|
|
83
|
+
account: string;
|
|
84
|
+
direction: string;
|
|
85
|
+
referenceId: any;
|
|
86
|
+
referenceAccount: any;
|
|
87
|
+
type: string;
|
|
88
|
+
currency: string;
|
|
89
|
+
symbol: any;
|
|
90
|
+
amount: number;
|
|
91
|
+
before: any;
|
|
92
|
+
after: number;
|
|
93
|
+
status: string;
|
|
94
|
+
fee: any;
|
|
95
|
+
};
|
|
96
|
+
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
97
|
+
createMarketBuyOrderWithCost(symbol: string, cost: number, params?: {}): Promise<Order>;
|
|
98
|
+
createSpotOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
99
|
+
createOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Dict;
|
|
100
|
+
createSpotOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Dict;
|
|
101
|
+
createSwapOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Dict;
|
|
102
|
+
createSwapOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
103
|
+
createOrders(orders: OrderRequest[], params?: {}): Promise<Order[]>;
|
|
104
|
+
cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
|
|
105
|
+
cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
106
|
+
cancelOrders(ids: string[], symbol?: Str, params?: {}): Promise<Order[]>;
|
|
107
|
+
fetchOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
|
|
108
|
+
fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
109
|
+
fetchOpenSpotOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
110
|
+
fetchOpenSwapOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
111
|
+
fetchCanceledAndClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
112
|
+
checkTypeParam(methodName: any, params: any): void;
|
|
113
|
+
handleTriggerOptionAndParams(params: object, methodName: string, defaultValue?: any): any[];
|
|
114
|
+
parseOrder(order: Dict, market?: Market): Order;
|
|
115
|
+
parseOrderSideAndReduceOnly(unparsed: any): any[];
|
|
116
|
+
parseOrderStatus(status: any): string;
|
|
117
|
+
parseOrderTypeTimeInForceAndPostOnly(type: any, timeInForce: any): any[];
|
|
118
|
+
parseOrderType(type: any): string;
|
|
119
|
+
fetchFundingRate(symbol: string, params?: {}): Promise<{
|
|
120
|
+
info: any;
|
|
121
|
+
symbol: string;
|
|
122
|
+
markPrice: any;
|
|
123
|
+
indexPrice: any;
|
|
124
|
+
interestRate: any;
|
|
125
|
+
estimatedSettlePrice: any;
|
|
126
|
+
timestamp: any;
|
|
127
|
+
datetime: any;
|
|
128
|
+
fundingRate: number;
|
|
129
|
+
fundingTimestamp: any;
|
|
130
|
+
fundingDatetime: any;
|
|
131
|
+
nextFundingRate: any;
|
|
132
|
+
nextFundingTimestamp: number;
|
|
133
|
+
nextFundingDatetime: string;
|
|
134
|
+
previousFundingRate: any;
|
|
135
|
+
previousFundingTimestamp: any;
|
|
136
|
+
previousFundingDatetime: any;
|
|
137
|
+
}>;
|
|
138
|
+
fetchFundingRates(symbols?: Strings, params?: {}): Promise<any>;
|
|
139
|
+
parseFundingRate(contract: any, market?: Market): {
|
|
140
|
+
info: any;
|
|
141
|
+
symbol: string;
|
|
142
|
+
markPrice: any;
|
|
143
|
+
indexPrice: any;
|
|
144
|
+
interestRate: any;
|
|
145
|
+
estimatedSettlePrice: any;
|
|
146
|
+
timestamp: any;
|
|
147
|
+
datetime: any;
|
|
148
|
+
fundingRate: number;
|
|
149
|
+
fundingTimestamp: any;
|
|
150
|
+
fundingDatetime: any;
|
|
151
|
+
nextFundingRate: any;
|
|
152
|
+
nextFundingTimestamp: number;
|
|
153
|
+
nextFundingDatetime: string;
|
|
154
|
+
previousFundingRate: any;
|
|
155
|
+
previousFundingTimestamp: any;
|
|
156
|
+
previousFundingDatetime: any;
|
|
157
|
+
};
|
|
158
|
+
fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingRateHistory[]>;
|
|
159
|
+
fetchPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
|
|
160
|
+
fetchPositionsForSymbol(symbol: string, params?: {}): Promise<Position[]>;
|
|
161
|
+
parsePosition(position: Dict, market?: Market): Position;
|
|
162
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
163
|
+
parseLeverage(leverage: Dict, market?: Market): Leverage;
|
|
164
|
+
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<Leverage>;
|
|
165
|
+
fetchLeverageTiers(symbols?: Strings, params?: {}): Promise<LeverageTiers>;
|
|
166
|
+
parseMarketLeverageTiers(info: any, market?: Market): LeverageTier[];
|
|
167
|
+
fetchTradingFee(symbol: string, params?: {}): Promise<TradingFeeInterface>;
|
|
168
|
+
fetchTradingFees(params?: {}): Promise<TradingFees>;
|
|
169
|
+
parseTradingFee(fee: Dict, market?: Market): TradingFeeInterface;
|
|
170
|
+
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
171
|
+
url: string;
|
|
172
|
+
method: string;
|
|
173
|
+
body: any;
|
|
174
|
+
headers: any;
|
|
175
|
+
};
|
|
176
|
+
customUrlencode(params?: Dict): Str;
|
|
177
|
+
handleErrors(code: any, reason: any, url: any, method: any, headers: any, body: any, response: any, requestHeaders: any, requestBody: any): any;
|
|
178
|
+
}
|