ccxt-ir 4.13.0 → 4.14.0
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 +4 -4
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +4 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/changefa.js +1 -1
- package/dist/cjs/src/hamtapay.js +48 -59
- package/dist/cjs/src/kifpoolme.js +2 -2
- package/dist/cjs/src/saraf.js +310 -0
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -2
- package/js/src/abstract/hamtapay.d.ts +0 -1
- package/js/src/abstract/saraf.d.ts +8 -0
- package/js/src/abstract/saraf.js +11 -0
- package/js/src/changefa.js +1 -1
- package/js/src/hamtapay.js +48 -59
- package/js/src/kifpoolme.js +2 -2
- package/js/src/saraf.d.ts +21 -0
- package/js/src/saraf.js +309 -0
- package/js/test.js +67 -71
- package/package.json +1 -1
package/dist/cjs/ccxt.js
CHANGED
|
@@ -142,6 +142,7 @@ var pooleno = require('./src/pooleno.js');
|
|
|
142
142
|
var probit = require('./src/probit.js');
|
|
143
143
|
var raastin = require('./src/raastin.js');
|
|
144
144
|
var ramzinex = require('./src/ramzinex.js');
|
|
145
|
+
var saraf = require('./src/saraf.js');
|
|
145
146
|
var sarmayex = require('./src/sarmayex.js');
|
|
146
147
|
var sarrafex = require('./src/sarrafex.js');
|
|
147
148
|
var tabdeal = require('./src/tabdeal.js');
|
|
@@ -240,7 +241,7 @@ var xt$1 = require('./src/pro/xt.js');
|
|
|
240
241
|
|
|
241
242
|
//-----------------------------------------------------------------------------
|
|
242
243
|
// this is updated by vss.js when building
|
|
243
|
-
const version = '4.
|
|
244
|
+
const version = '4.14.0';
|
|
244
245
|
Exchange["default"].ccxtVersion = version;
|
|
245
246
|
const exchanges = {
|
|
246
247
|
'abantether': abantether["default"],
|
|
@@ -373,6 +374,7 @@ const exchanges = {
|
|
|
373
374
|
'probit': probit["default"],
|
|
374
375
|
'raastin': raastin["default"],
|
|
375
376
|
'ramzinex': ramzinex["default"],
|
|
377
|
+
'saraf': saraf["default"],
|
|
376
378
|
'sarmayex': sarmayex["default"],
|
|
377
379
|
'sarrafex': sarrafex["default"],
|
|
378
380
|
'tabdeal': tabdeal["default"],
|
|
@@ -652,6 +654,7 @@ exports.pooleno = pooleno["default"];
|
|
|
652
654
|
exports.probit = probit["default"];
|
|
653
655
|
exports.raastin = raastin["default"];
|
|
654
656
|
exports.ramzinex = ramzinex["default"];
|
|
657
|
+
exports.saraf = saraf["default"];
|
|
655
658
|
exports.sarmayex = sarmayex["default"];
|
|
656
659
|
exports.sarrafex = sarrafex["default"];
|
|
657
660
|
exports.tabdeal = tabdeal["default"];
|
package/dist/cjs/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "type": "commonjs" }
|
|
1
|
+
{ "type": "commonjs" }
|
package/dist/cjs/src/changefa.js
CHANGED
|
@@ -226,7 +226,7 @@ class changefa extends Exchange["default"] {
|
|
|
226
226
|
const buyPrice = this.safeNumber(ticker, 'buyPrice');
|
|
227
227
|
const sellPrice = this.safeNumber(ticker, 'sellPrice');
|
|
228
228
|
if ((buyPrice !== undefined) && (sellPrice !== undefined)) {
|
|
229
|
-
last =
|
|
229
|
+
last = sellPrice;
|
|
230
230
|
}
|
|
231
231
|
const weeklyPriceLog = this.safeList(ticker, 'weeklyPriceLog', []);
|
|
232
232
|
let high = undefined;
|
package/dist/cjs/src/hamtapay.js
CHANGED
|
@@ -88,7 +88,7 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
88
88
|
'urls': {
|
|
89
89
|
'logo': 'https://cdn.arz.digital/cr-odin/img/exchanges/hamtapay/64x64.png',
|
|
90
90
|
'api': {
|
|
91
|
-
'public': 'https://
|
|
91
|
+
'public': 'https://oapi.hamtapay.org',
|
|
92
92
|
},
|
|
93
93
|
'www': 'https://hamtapay.net/',
|
|
94
94
|
'doc': [
|
|
@@ -99,7 +99,6 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
99
99
|
'public': {
|
|
100
100
|
'get': {
|
|
101
101
|
'/financial/api/market': 1,
|
|
102
|
-
'/financial/api/vitrin/prices': 1,
|
|
103
102
|
},
|
|
104
103
|
},
|
|
105
104
|
},
|
|
@@ -118,7 +117,7 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
118
117
|
* @method
|
|
119
118
|
* @name hamtapay#fetchMarkets
|
|
120
119
|
* @description retrieves data on all markets for hamtapay
|
|
121
|
-
* @see https://
|
|
120
|
+
* @see https://oapi.hamtapay.org/financial/api/market
|
|
122
121
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
123
122
|
* @returns {object[]} an array of objects representing market data
|
|
124
123
|
*/
|
|
@@ -155,8 +154,8 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
155
154
|
'baseId': baseId,
|
|
156
155
|
'quoteId': quoteId,
|
|
157
156
|
'settleId': undefined,
|
|
158
|
-
'type': '
|
|
159
|
-
'spot':
|
|
157
|
+
'type': 'spot',
|
|
158
|
+
'spot': true,
|
|
160
159
|
'margin': false,
|
|
161
160
|
'swap': false,
|
|
162
161
|
'future': false,
|
|
@@ -171,8 +170,8 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
171
170
|
'strike': undefined,
|
|
172
171
|
'optionType': undefined,
|
|
173
172
|
'precision': {
|
|
174
|
-
'amount':
|
|
175
|
-
'price':
|
|
173
|
+
'amount': this.safeInteger(market, 'amount_decimals'),
|
|
174
|
+
'price': this.safeInteger(market, 'price_decimals'),
|
|
176
175
|
},
|
|
177
176
|
'limits': {
|
|
178
177
|
'leverage': {
|
|
@@ -201,7 +200,7 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
201
200
|
* @method
|
|
202
201
|
* @name hamtapay#fetchTickers
|
|
203
202
|
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
204
|
-
* @see https://
|
|
203
|
+
* @see https://oapi.hamtapay.org/financial/api/market
|
|
205
204
|
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
206
205
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
207
206
|
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
@@ -210,23 +209,12 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
210
209
|
if (symbols !== undefined) {
|
|
211
210
|
symbols = this.marketSymbols(symbols);
|
|
212
211
|
}
|
|
213
|
-
const response = await this.
|
|
214
|
-
const data = this.
|
|
212
|
+
const response = await this.publicGetFinancialApiMarket(params);
|
|
213
|
+
const data = this.safeList(response, 'data', []);
|
|
215
214
|
const result = {};
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
const corresponding_data = this.safeDict(data, current_qoute, {});
|
|
220
|
-
const baseSymbols = Object.keys(corresponding_data);
|
|
221
|
-
for (let j = 0; j < baseSymbols.length; j++) {
|
|
222
|
-
const current_base = baseSymbols[j];
|
|
223
|
-
const current_ticker = corresponding_data[current_base];
|
|
224
|
-
current_ticker['base'] = current_base;
|
|
225
|
-
current_ticker['quote'] = current_qoute;
|
|
226
|
-
current_ticker['symbol'] = current_base + '/' + current_qoute;
|
|
227
|
-
current_ticker['id'] = current_base + '-' + current_qoute;
|
|
228
|
-
result[current_ticker['symbol']] = this.parseTicker(current_ticker);
|
|
229
|
-
}
|
|
215
|
+
for (let i = 0; i < data.length; i++) {
|
|
216
|
+
const ticker = this.parseTicker(data[i]);
|
|
217
|
+
result[ticker['symbol']] = ticker;
|
|
230
218
|
}
|
|
231
219
|
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
232
220
|
}
|
|
@@ -235,48 +223,41 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
235
223
|
* @method
|
|
236
224
|
* @name hamtapay#fetchTicker
|
|
237
225
|
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
238
|
-
* @see https://hamtapay.
|
|
226
|
+
* @see https://oapi.hamtapay.org/financial/api/market
|
|
239
227
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
240
228
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
241
229
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
242
230
|
*/
|
|
243
|
-
const
|
|
244
|
-
return
|
|
231
|
+
const tickers = await this.fetchTickers([symbol], params);
|
|
232
|
+
return tickers[symbol];
|
|
245
233
|
}
|
|
246
234
|
parseTicker(ticker, market = undefined) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
|
|
265
|
-
const last = this.safeFloat(ticker, 'buy_price', 0);
|
|
266
|
-
const change = this.safeFloat(ticker, 'change_rate_24h', 0);
|
|
267
|
-
const ask = this.safeFloat(ticker, 'buy_price', 0);
|
|
268
|
-
const bid = this.safeFloat(ticker, 'sell_price', 0);
|
|
269
|
-
const high = this.safeFloat(ticker, 'max_price_24h', 0);
|
|
270
|
-
const low = this.safeFloat(ticker, 'min_price_24h', 0);
|
|
235
|
+
const marketType = 'spot';
|
|
236
|
+
const marketId = this.safeString2(ticker, 'id', 'symbol');
|
|
237
|
+
const baseId = this.safeString(ticker, 'base');
|
|
238
|
+
const quoteId = this.safeString(ticker, 'quote');
|
|
239
|
+
const base = this.safeCurrencyCode(baseId);
|
|
240
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
241
|
+
let symbol = this.safeSymbol(marketId, market, undefined, marketType);
|
|
242
|
+
if ((baseId !== undefined) && (quoteId !== undefined)) {
|
|
243
|
+
symbol = base + '/' + quote;
|
|
244
|
+
}
|
|
245
|
+
const last = this.safeFloat(ticker, 'last_price');
|
|
246
|
+
const baseVolume = this.safeFloat(ticker, 'volume_24h');
|
|
247
|
+
const percentage = this.safeFloat(ticker, 'percent_change_24h');
|
|
248
|
+
let quoteVolume = undefined;
|
|
249
|
+
if ((baseVolume !== undefined) && (last !== undefined)) {
|
|
250
|
+
quoteVolume = baseVolume * last;
|
|
251
|
+
}
|
|
271
252
|
return this.safeTicker({
|
|
272
253
|
'symbol': symbol,
|
|
273
254
|
'timestamp': undefined,
|
|
274
255
|
'datetime': undefined,
|
|
275
|
-
'high':
|
|
276
|
-
'low':
|
|
277
|
-
'bid':
|
|
256
|
+
'high': undefined,
|
|
257
|
+
'low': undefined,
|
|
258
|
+
'bid': undefined,
|
|
278
259
|
'bidVolume': undefined,
|
|
279
|
-
'ask':
|
|
260
|
+
'ask': undefined,
|
|
280
261
|
'askVolume': undefined,
|
|
281
262
|
'vwap': undefined,
|
|
282
263
|
'open': undefined,
|
|
@@ -284,15 +265,23 @@ class hamtapay extends hamtapay$1["default"] {
|
|
|
284
265
|
'last': last,
|
|
285
266
|
'previousClose': undefined,
|
|
286
267
|
'change': undefined,
|
|
287
|
-
'percentage':
|
|
268
|
+
'percentage': percentage,
|
|
288
269
|
'average': undefined,
|
|
289
|
-
'baseVolume':
|
|
290
|
-
'quoteVolume':
|
|
270
|
+
'baseVolume': baseVolume,
|
|
271
|
+
'quoteVolume': quoteVolume,
|
|
291
272
|
'info': ticker,
|
|
292
273
|
}, market);
|
|
293
274
|
}
|
|
294
275
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
295
|
-
const
|
|
276
|
+
const query = this.omit(params, this.extractParams(path));
|
|
277
|
+
let normalizedPath = path;
|
|
278
|
+
while (normalizedPath.length && normalizedPath[0] === '/') {
|
|
279
|
+
normalizedPath = normalizedPath.slice(1);
|
|
280
|
+
}
|
|
281
|
+
let url = this.urls['api']['public'] + '/' + this.implodeParams(normalizedPath, params);
|
|
282
|
+
if (Object.keys(query).length) {
|
|
283
|
+
url += '?' + this.urlencode(query);
|
|
284
|
+
}
|
|
296
285
|
headers = {
|
|
297
286
|
'Content-Type': 'application/json',
|
|
298
287
|
'Origin': 'https://hamtapay.net',
|
|
@@ -309,8 +309,8 @@ class kifpoolme extends kifpoolme$1["default"] {
|
|
|
309
309
|
let ask = undefined;
|
|
310
310
|
if (quoteId === 'IRT') {
|
|
311
311
|
// For IRT: priceSellIRT is the sell price (bid), priceBuyIRT is the buy price (ask)
|
|
312
|
-
|
|
313
|
-
|
|
312
|
+
ask = this.safeNumber(ticker, 'priceSellIRT');
|
|
313
|
+
bid = this.safeNumber(ticker, 'priceBuyIRT');
|
|
314
314
|
last = ask;
|
|
315
315
|
}
|
|
316
316
|
else {
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Exchange = require('./base/Exchange.js');
|
|
6
|
+
|
|
7
|
+
// ----------------------------------------------------------------------------
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/**
|
|
10
|
+
* @class saraf
|
|
11
|
+
* @augments Exchange
|
|
12
|
+
* @description Set rateLimit to 1000 if fully verified
|
|
13
|
+
*/
|
|
14
|
+
class saraf extends Exchange["default"] {
|
|
15
|
+
describe() {
|
|
16
|
+
return this.deepExtend(super.describe(), {
|
|
17
|
+
'id': 'saraf',
|
|
18
|
+
'name': 'Saraf',
|
|
19
|
+
'countries': ['IR'],
|
|
20
|
+
'rateLimit': 1000,
|
|
21
|
+
'version': '3',
|
|
22
|
+
'certified': false,
|
|
23
|
+
'pro': false,
|
|
24
|
+
'has': {
|
|
25
|
+
'CORS': undefined,
|
|
26
|
+
'spot': false,
|
|
27
|
+
'margin': false,
|
|
28
|
+
'swap': false,
|
|
29
|
+
'future': false,
|
|
30
|
+
'option': false,
|
|
31
|
+
'addMargin': false,
|
|
32
|
+
'cancelAllOrders': false,
|
|
33
|
+
'cancelOrder': false,
|
|
34
|
+
'cancelOrders': false,
|
|
35
|
+
'createDepositAddress': false,
|
|
36
|
+
'createOrder': false,
|
|
37
|
+
'createStopLimitOrder': false,
|
|
38
|
+
'createStopMarketOrder': false,
|
|
39
|
+
'createStopOrder': false,
|
|
40
|
+
'editOrder': false,
|
|
41
|
+
'fetchBalance': false,
|
|
42
|
+
'fetchBorrowInterest': false,
|
|
43
|
+
'fetchBorrowRateHistories': false,
|
|
44
|
+
'fetchBorrowRateHistory': false,
|
|
45
|
+
'fetchClosedOrders': false,
|
|
46
|
+
'fetchCrossBorrowRate': false,
|
|
47
|
+
'fetchCrossBorrowRates': false,
|
|
48
|
+
'fetchCurrencies': false,
|
|
49
|
+
'fetchDepositAddress': false,
|
|
50
|
+
'fetchDeposits': false,
|
|
51
|
+
'fetchFundingHistory': false,
|
|
52
|
+
'fetchFundingRate': false,
|
|
53
|
+
'fetchFundingRateHistory': false,
|
|
54
|
+
'fetchFundingRates': false,
|
|
55
|
+
'fetchIndexOHLCV': false,
|
|
56
|
+
'fetchIsolatedBorrowRate': false,
|
|
57
|
+
'fetchIsolatedBorrowRates': false,
|
|
58
|
+
'fetchL2OrderBook': false,
|
|
59
|
+
'fetchL3OrderBook': false,
|
|
60
|
+
'fetchLedger': false,
|
|
61
|
+
'fetchLedgerEntry': false,
|
|
62
|
+
'fetchLeverageTiers': false,
|
|
63
|
+
'fetchMarkets': true,
|
|
64
|
+
'fetchMarkOHLCV': false,
|
|
65
|
+
'fetchMyTrades': false,
|
|
66
|
+
'fetchOHLCV': false,
|
|
67
|
+
'fetchOpenInterestHistory': false,
|
|
68
|
+
'fetchOpenOrders': false,
|
|
69
|
+
'fetchOrder': false,
|
|
70
|
+
'fetchOrderBook': false,
|
|
71
|
+
'fetchOrders': false,
|
|
72
|
+
'fetchOrderTrades': 'emulated',
|
|
73
|
+
'fetchPositions': false,
|
|
74
|
+
'fetchPremiumIndexOHLCV': false,
|
|
75
|
+
'fetchTicker': true,
|
|
76
|
+
'fetchTickers': true,
|
|
77
|
+
'fetchTime': false,
|
|
78
|
+
'fetchTrades': false,
|
|
79
|
+
'fetchTradingFee': false,
|
|
80
|
+
'fetchTradingFees': false,
|
|
81
|
+
'fetchWithdrawals': false,
|
|
82
|
+
'otc': true,
|
|
83
|
+
'setLeverage': false,
|
|
84
|
+
'setMarginMode': false,
|
|
85
|
+
'transfer': false,
|
|
86
|
+
'withdraw': false,
|
|
87
|
+
},
|
|
88
|
+
'options': {
|
|
89
|
+
'defaultType': 'otc',
|
|
90
|
+
},
|
|
91
|
+
'urls': {
|
|
92
|
+
'logo': 'https://cdn.arz.digital/cr-odin/img/exchanges/saraf/64x64.png',
|
|
93
|
+
'api': {
|
|
94
|
+
'public': 'https://api.saraf.app',
|
|
95
|
+
},
|
|
96
|
+
'www': 'https://saraf.app',
|
|
97
|
+
'doc': [
|
|
98
|
+
'https://saraf.app',
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
'api': {
|
|
102
|
+
'public': {
|
|
103
|
+
'get': {
|
|
104
|
+
'v3/prices/crypto': 1,
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
'fees': {
|
|
109
|
+
'trading': {
|
|
110
|
+
'tierBased': false,
|
|
111
|
+
'percentage': true,
|
|
112
|
+
'maker': this.parseNumber('0'),
|
|
113
|
+
'taker': this.parseNumber('0'),
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
parseMarket(market) {
|
|
119
|
+
const baseId = this.safeString(market, 's');
|
|
120
|
+
const quoteId = 'IRT';
|
|
121
|
+
const base = this.safeCurrencyCode(baseId);
|
|
122
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
123
|
+
return {
|
|
124
|
+
'id': baseId,
|
|
125
|
+
'symbol': base + '/' + quote,
|
|
126
|
+
'base': base,
|
|
127
|
+
'quote': quote,
|
|
128
|
+
'settle': undefined,
|
|
129
|
+
'baseId': baseId,
|
|
130
|
+
'quoteId': quoteId,
|
|
131
|
+
'settleId': undefined,
|
|
132
|
+
'type': 'otc',
|
|
133
|
+
'spot': false,
|
|
134
|
+
'margin': false,
|
|
135
|
+
'swap': false,
|
|
136
|
+
'future': false,
|
|
137
|
+
'option': false,
|
|
138
|
+
'active': this.safeBool(market, 'ct', true),
|
|
139
|
+
'contract': false,
|
|
140
|
+
'linear': undefined,
|
|
141
|
+
'inverse': undefined,
|
|
142
|
+
'contractSize': undefined,
|
|
143
|
+
'expiry': undefined,
|
|
144
|
+
'expiryDatetime': undefined,
|
|
145
|
+
'strike': undefined,
|
|
146
|
+
'optionType': undefined,
|
|
147
|
+
'precision': {
|
|
148
|
+
'amount': undefined,
|
|
149
|
+
'price': this.safeInteger(market, 'r'),
|
|
150
|
+
},
|
|
151
|
+
'limits': {
|
|
152
|
+
'leverage': {
|
|
153
|
+
'min': undefined,
|
|
154
|
+
'max': undefined,
|
|
155
|
+
},
|
|
156
|
+
'amount': {
|
|
157
|
+
'min': undefined,
|
|
158
|
+
'max': undefined,
|
|
159
|
+
},
|
|
160
|
+
'price': {
|
|
161
|
+
'min': undefined,
|
|
162
|
+
'max': undefined,
|
|
163
|
+
},
|
|
164
|
+
'cost': {
|
|
165
|
+
'min': undefined,
|
|
166
|
+
'max': undefined,
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
'created': undefined,
|
|
170
|
+
'info': market,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async fetchMarkets(params = {}) {
|
|
174
|
+
/**
|
|
175
|
+
* @method
|
|
176
|
+
* @name saraf#fetchMarkets
|
|
177
|
+
* @description retrieves data on all markets for saraf
|
|
178
|
+
* @see https://api.saraf.app/v3/prices/crypto
|
|
179
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
180
|
+
* @returns {object[]} an array of objects representing market data
|
|
181
|
+
*/
|
|
182
|
+
const response = await this.publicGetV3PricesCrypto(params);
|
|
183
|
+
const price = this.safeDict(response, 'price', {});
|
|
184
|
+
const items = this.safeDict(price, 'Items', {});
|
|
185
|
+
const lastUpdateTime = this.safeInteger(price, 'lastUpdateTime');
|
|
186
|
+
const itemKeys = Object.keys(items);
|
|
187
|
+
const result = [];
|
|
188
|
+
for (let i = 0; i < itemKeys.length; i++) {
|
|
189
|
+
const item = this.safeDict(items, itemKeys[i], {});
|
|
190
|
+
item['lastUpdateTime'] = lastUpdateTime;
|
|
191
|
+
const baseId = this.safeString(item, 's');
|
|
192
|
+
if ((baseId === undefined) || (baseId === 'IRT')) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
result.push(this.parseMarket(item));
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
200
|
+
/**
|
|
201
|
+
* @method
|
|
202
|
+
* @name saraf#fetchTickers
|
|
203
|
+
* @description fetches price tickers for multiple markets
|
|
204
|
+
* @see https://api.saraf.app/v3/prices/crypto
|
|
205
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
206
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
207
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
208
|
+
*/
|
|
209
|
+
await this.loadMarkets();
|
|
210
|
+
if (symbols !== undefined) {
|
|
211
|
+
symbols = this.marketSymbols(symbols);
|
|
212
|
+
}
|
|
213
|
+
const response = await this.publicGetV3PricesCrypto(params);
|
|
214
|
+
const price = this.safeDict(response, 'price', {});
|
|
215
|
+
const items = this.safeDict(price, 'Items', {});
|
|
216
|
+
const lastUpdateTime = this.safeInteger(price, 'lastUpdateTime');
|
|
217
|
+
const itemKeys = Object.keys(items);
|
|
218
|
+
const result = {};
|
|
219
|
+
for (let i = 0; i < itemKeys.length; i++) {
|
|
220
|
+
const item = this.safeDict(items, itemKeys[i], {});
|
|
221
|
+
item['lastUpdateTime'] = lastUpdateTime;
|
|
222
|
+
const baseId = this.safeString(item, 's');
|
|
223
|
+
if ((baseId === undefined) || (baseId === 'IRT') || (baseId === 'FIXED')) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const ticker = this.parseTicker(item);
|
|
227
|
+
result[ticker['symbol']] = ticker;
|
|
228
|
+
}
|
|
229
|
+
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
230
|
+
}
|
|
231
|
+
async fetchTicker(symbol, params = {}) {
|
|
232
|
+
/**
|
|
233
|
+
* @method
|
|
234
|
+
* @name saraf#fetchTicker
|
|
235
|
+
* @description fetches a price ticker, a statistical calculation for a specific market
|
|
236
|
+
* @see https://api.saraf.app/v3/prices/crypto
|
|
237
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
238
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
239
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
240
|
+
*/
|
|
241
|
+
const tickers = await this.fetchTickers([symbol], params);
|
|
242
|
+
return tickers[symbol];
|
|
243
|
+
}
|
|
244
|
+
parseTicker(ticker, market = undefined) {
|
|
245
|
+
const baseId = this.safeString(ticker, 's');
|
|
246
|
+
const quoteId = 'IRT';
|
|
247
|
+
const base = this.safeCurrencyCode(baseId);
|
|
248
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
249
|
+
const symbol = base + '/' + quote;
|
|
250
|
+
const history = this.safeList(ticker, 'h', []);
|
|
251
|
+
let high = undefined;
|
|
252
|
+
let low = undefined;
|
|
253
|
+
let open = undefined;
|
|
254
|
+
if (history.length > 0) {
|
|
255
|
+
high = this.safeNumber(history, 0);
|
|
256
|
+
low = this.safeNumber(history, 0);
|
|
257
|
+
open = this.safeNumber(history, history.length - 1);
|
|
258
|
+
for (let i = 1; i < history.length; i++) {
|
|
259
|
+
const price = this.safeNumber(history, i);
|
|
260
|
+
high = Math.max(high, price);
|
|
261
|
+
low = Math.min(low, price);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const last = this.safeNumber(ticker, 'p');
|
|
265
|
+
const percentage = this.safeNumber(ticker, 'c');
|
|
266
|
+
const timestamp = this.safeInteger2(ticker, 'ut', 'lastUpdateTime');
|
|
267
|
+
let change = undefined;
|
|
268
|
+
if ((last !== undefined) && (open !== undefined)) {
|
|
269
|
+
change = last - open;
|
|
270
|
+
}
|
|
271
|
+
if (market === undefined) {
|
|
272
|
+
market = this.safeMarketStructure(this.parseMarket(ticker));
|
|
273
|
+
}
|
|
274
|
+
return this.safeTicker({
|
|
275
|
+
'symbol': symbol,
|
|
276
|
+
'timestamp': timestamp,
|
|
277
|
+
'datetime': this.iso8601(timestamp),
|
|
278
|
+
'high': high,
|
|
279
|
+
'low': low,
|
|
280
|
+
'bid': undefined,
|
|
281
|
+
'bidVolume': undefined,
|
|
282
|
+
'ask': undefined,
|
|
283
|
+
'askVolume': undefined,
|
|
284
|
+
'vwap': undefined,
|
|
285
|
+
'open': open,
|
|
286
|
+
'close': last,
|
|
287
|
+
'last': last,
|
|
288
|
+
'previousClose': undefined,
|
|
289
|
+
'change': change,
|
|
290
|
+
'percentage': percentage,
|
|
291
|
+
'average': undefined,
|
|
292
|
+
'baseVolume': undefined,
|
|
293
|
+
'quoteVolume': undefined,
|
|
294
|
+
'info': ticker,
|
|
295
|
+
}, market);
|
|
296
|
+
}
|
|
297
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
298
|
+
const query = this.omit(params, this.extractParams(path));
|
|
299
|
+
let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
|
|
300
|
+
if (Object.keys(query).length) {
|
|
301
|
+
url += '?' + this.urlencode(query);
|
|
302
|
+
}
|
|
303
|
+
headers = {
|
|
304
|
+
'Content-Type': 'application/json',
|
|
305
|
+
};
|
|
306
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
exports["default"] = saraf;
|
package/js/ccxt.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
|
|
|
4
4
|
import * as errors from './src/base/errors.js';
|
|
5
5
|
import type { Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketMarginModes, MarketInterface, Trade, Order, OrderBook, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, LeverageTiers, LongShortRatio, OrderBooks, OpenInterests, ConstructorArgs } from './src/base/types.js';
|
|
6
6
|
import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, RestrictedLocation, 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, UnsubscribeError } from './src/base/errors.js';
|
|
7
|
-
declare const version = "4.
|
|
7
|
+
declare const version = "4.14.0";
|
|
8
8
|
import abantether from './src/abantether.js';
|
|
9
9
|
import afratether from './src/afratether.js';
|
|
10
10
|
import alpaca from './src/alpaca.js';
|
|
@@ -135,6 +135,7 @@ import pooleno from './src/pooleno.js';
|
|
|
135
135
|
import probit from './src/probit.js';
|
|
136
136
|
import raastin from './src/raastin.js';
|
|
137
137
|
import ramzinex from './src/ramzinex.js';
|
|
138
|
+
import saraf from './src/saraf.js';
|
|
138
139
|
import sarmayex from './src/sarmayex.js';
|
|
139
140
|
import sarrafex from './src/sarrafex.js';
|
|
140
141
|
import tabdeal from './src/tabdeal.js';
|
|
@@ -361,6 +362,7 @@ declare const exchanges: {
|
|
|
361
362
|
probit: typeof probit;
|
|
362
363
|
raastin: typeof raastin;
|
|
363
364
|
ramzinex: typeof ramzinex;
|
|
365
|
+
saraf: typeof saraf;
|
|
364
366
|
sarmayex: typeof sarmayex;
|
|
365
367
|
sarrafex: typeof sarrafex;
|
|
366
368
|
tabdeal: typeof tabdeal;
|
|
@@ -670,6 +672,7 @@ declare const ccxt: {
|
|
|
670
672
|
probit: typeof probit;
|
|
671
673
|
raastin: typeof raastin;
|
|
672
674
|
ramzinex: typeof ramzinex;
|
|
675
|
+
saraf: typeof saraf;
|
|
673
676
|
sarmayex: typeof sarmayex;
|
|
674
677
|
sarrafex: typeof sarrafex;
|
|
675
678
|
tabdeal: typeof tabdeal;
|
|
@@ -693,5 +696,5 @@ declare const ccxt: {
|
|
|
693
696
|
zaif: typeof zaif;
|
|
694
697
|
zonda: typeof zonda;
|
|
695
698
|
} & typeof functions & typeof errors;
|
|
696
|
-
export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, RestrictedLocation, 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, UnsubscribeError, Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, ConstructorArgs, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketMarginModes, MarketInterface, Trade, Order, OrderBook, OrderBooks, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, OpenInterests, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, LongShortRatio, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, LeverageTiers, abantether, afratether, alpaca, apex, arzinja, arzplus, ascendex, asretether, bequant, bidarz, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit24, bit2c, bitbank, bitbarg, bitbns, bitfinex, bitflyer, bitget, bithumb, bitimen, bitir, bitmart, bitmex, bitopro, bitpin, bitrue, bitso, bitstamp, bitteam, bittrade, bitunix, bitvavo, bitwana, blockchaincom, blofin, btcalpha, btcbox, btcmarkets, btcturk, bybit, bydfi, cafearz, cex, changefa, coinbase, coinbaseadvanced, coinbaseexchange, coinbaseinternational, coincatch, coincheck, coinex, coinmate, coinmetro, coinone, coinsph, coinspot, cryptocom, cryptomus, defx, delta, deribit, derive, digifinex, ellipx, eterex, excoino, exir, exmo, exnovin, farhadexchange, fmfwio, foxbit, gate, gateio, gemini, hamtapay, hashkey, hibachi, hitbtc, hitobit, hollaex, htx, huobi, hyperliquid, independentreserve, indodax, iranexchange, jibitex, kcex, kifpoolme, kraken, krakenfutures, kucoin, kucoinfutures, latoken, lbank, luno, mazdax, mercado, mexc, modetrade, myokx, ndax, nobitex, novadax, oceanex, okcoin, okexchange, okx, okxus, ompfinex, onetrading, ourbit, oxfun, p2b, paradex, paymium, phemex, pingi, poloniex, pooleno, probit, raastin, ramzinex, sarmayex, sarrafex, tabdeal, tehran_exchange, tetherland, timex, tokocrypto, toobit, tradeogre, twox, ubitex, upbit, vertex, wallex, wavesexchange, whitebit, woo, woofipro, xt, yobit, zaif, zonda, };
|
|
699
|
+
export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, RestrictedLocation, 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, UnsubscribeError, Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, ConstructorArgs, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketMarginModes, MarketInterface, Trade, Order, OrderBook, OrderBooks, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, OpenInterests, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, LongShortRatio, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, LeverageTiers, abantether, afratether, alpaca, apex, arzinja, arzplus, ascendex, asretether, bequant, bidarz, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit24, bit2c, bitbank, bitbarg, bitbns, bitfinex, bitflyer, bitget, bithumb, bitimen, bitir, bitmart, bitmex, bitopro, bitpin, bitrue, bitso, bitstamp, bitteam, bittrade, bitunix, bitvavo, bitwana, blockchaincom, blofin, btcalpha, btcbox, btcmarkets, btcturk, bybit, bydfi, cafearz, cex, changefa, coinbase, coinbaseadvanced, coinbaseexchange, coinbaseinternational, coincatch, coincheck, coinex, coinmate, coinmetro, coinone, coinsph, coinspot, cryptocom, cryptomus, defx, delta, deribit, derive, digifinex, ellipx, eterex, excoino, exir, exmo, exnovin, farhadexchange, fmfwio, foxbit, gate, gateio, gemini, hamtapay, hashkey, hibachi, hitbtc, hitobit, hollaex, htx, huobi, hyperliquid, independentreserve, indodax, iranexchange, jibitex, kcex, kifpoolme, kraken, krakenfutures, kucoin, kucoinfutures, latoken, lbank, luno, mazdax, mercado, mexc, modetrade, myokx, ndax, nobitex, novadax, oceanex, okcoin, okexchange, okx, okxus, ompfinex, onetrading, ourbit, oxfun, p2b, paradex, paymium, phemex, pingi, poloniex, pooleno, probit, raastin, ramzinex, saraf, sarmayex, sarrafex, tabdeal, tehran_exchange, tetherland, timex, tokocrypto, toobit, tradeogre, twox, ubitex, upbit, vertex, wallex, wavesexchange, whitebit, woo, woofipro, xt, yobit, zaif, zonda, };
|
|
697
700
|
export default ccxt;
|
package/js/ccxt.js
CHANGED
|
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
|
|
|
38
38
|
import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, RestrictedLocation, 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, UnsubscribeError } from './src/base/errors.js';
|
|
39
39
|
//-----------------------------------------------------------------------------
|
|
40
40
|
// this is updated by vss.js when building
|
|
41
|
-
const version = '4.
|
|
41
|
+
const version = '4.14.0';
|
|
42
42
|
Exchange.ccxtVersion = version;
|
|
43
43
|
//-----------------------------------------------------------------------------
|
|
44
44
|
import abantether from './src/abantether.js';
|
|
@@ -171,6 +171,7 @@ import pooleno from './src/pooleno.js';
|
|
|
171
171
|
import probit from './src/probit.js';
|
|
172
172
|
import raastin from './src/raastin.js';
|
|
173
173
|
import ramzinex from './src/ramzinex.js';
|
|
174
|
+
import saraf from './src/saraf.js';
|
|
174
175
|
import sarmayex from './src/sarmayex.js';
|
|
175
176
|
import sarrafex from './src/sarrafex.js';
|
|
176
177
|
import tabdeal from './src/tabdeal.js';
|
|
@@ -398,6 +399,7 @@ const exchanges = {
|
|
|
398
399
|
'probit': probit,
|
|
399
400
|
'raastin': raastin,
|
|
400
401
|
'ramzinex': ramzinex,
|
|
402
|
+
'saraf': saraf,
|
|
401
403
|
'sarmayex': sarmayex,
|
|
402
404
|
'sarrafex': sarrafex,
|
|
403
405
|
'tabdeal': tabdeal,
|
|
@@ -508,6 +510,6 @@ pro.exchanges = Object.keys(pro);
|
|
|
508
510
|
pro['Exchange'] = Exchange; // now the same for rest and ts
|
|
509
511
|
//-----------------------------------------------------------------------------
|
|
510
512
|
const ccxt = Object.assign({ version, Exchange, Precise, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, functions, errors);
|
|
511
|
-
export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, RestrictedLocation, 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, UnsubscribeError, abantether, afratether, alpaca, apex, arzinja, arzplus, ascendex, asretether, bequant, bidarz, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit24, bit2c, bitbank, bitbarg, bitbns, bitfinex, bitflyer, bitget, bithumb, bitimen, bitir, bitmart, bitmex, bitopro, bitpin, bitrue, bitso, bitstamp, bitteam, bittrade, bitunix, bitvavo, bitwana, blockchaincom, blofin, btcalpha, btcbox, btcmarkets, btcturk, bybit, bydfi, cafearz, cex, changefa, coinbase, coinbaseadvanced, coinbaseexchange, coinbaseinternational, coincatch, coincheck, coinex, coinmate, coinmetro, coinone, coinsph, coinspot, cryptocom, cryptomus, defx, delta, deribit, derive, digifinex, ellipx, eterex, excoino, exir, exmo, exnovin, farhadexchange, fmfwio, foxbit, gate, gateio, gemini, hamtapay, hashkey, hibachi, hitbtc, hitobit, hollaex, htx, huobi, hyperliquid, independentreserve, indodax, iranexchange, jibitex, kcex, kifpoolme, kraken, krakenfutures, kucoin, kucoinfutures, latoken, lbank, luno, mazdax, mercado, mexc, modetrade, myokx, ndax, nobitex, novadax, oceanex, okcoin, okexchange, okx, okxus, ompfinex, onetrading, ourbit, oxfun, p2b, paradex, paymium, phemex, pingi, poloniex, pooleno, probit, raastin, ramzinex, sarmayex, sarrafex, tabdeal, tehran_exchange, tetherland, timex, tokocrypto, toobit, tradeogre, twox, ubitex, upbit, vertex, wallex, wavesexchange, whitebit, woo, woofipro, xt, yobit, zaif, zonda, };
|
|
513
|
+
export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, RestrictedLocation, 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, UnsubscribeError, abantether, afratether, alpaca, apex, arzinja, arzplus, ascendex, asretether, bequant, bidarz, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit24, bit2c, bitbank, bitbarg, bitbns, bitfinex, bitflyer, bitget, bithumb, bitimen, bitir, bitmart, bitmex, bitopro, bitpin, bitrue, bitso, bitstamp, bitteam, bittrade, bitunix, bitvavo, bitwana, blockchaincom, blofin, btcalpha, btcbox, btcmarkets, btcturk, bybit, bydfi, cafearz, cex, changefa, coinbase, coinbaseadvanced, coinbaseexchange, coinbaseinternational, coincatch, coincheck, coinex, coinmate, coinmetro, coinone, coinsph, coinspot, cryptocom, cryptomus, defx, delta, deribit, derive, digifinex, ellipx, eterex, excoino, exir, exmo, exnovin, farhadexchange, fmfwio, foxbit, gate, gateio, gemini, hamtapay, hashkey, hibachi, hitbtc, hitobit, hollaex, htx, huobi, hyperliquid, independentreserve, indodax, iranexchange, jibitex, kcex, kifpoolme, kraken, krakenfutures, kucoin, kucoinfutures, latoken, lbank, luno, mazdax, mercado, mexc, modetrade, myokx, ndax, nobitex, novadax, oceanex, okcoin, okexchange, okx, okxus, ompfinex, onetrading, ourbit, oxfun, p2b, paradex, paymium, phemex, pingi, poloniex, pooleno, probit, raastin, ramzinex, saraf, sarmayex, sarrafex, tabdeal, tehran_exchange, tetherland, timex, tokocrypto, toobit, tradeogre, twox, ubitex, upbit, vertex, wallex, wavesexchange, whitebit, woo, woofipro, xt, yobit, zaif, zonda, };
|
|
512
514
|
export default ccxt;
|
|
513
515
|
//-----------------------------------------------------------------------------
|