ccxt-ir 4.9.4 → 4.9.12
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 +157 -164
- package/dist/ccxt.browser.min.js +4 -4
- package/dist/cjs/ccxt.js +22 -1
- package/dist/cjs/src/abantether.js +88 -69
- package/dist/cjs/src/abstract/bitbarg.js +11 -0
- package/dist/cjs/src/abstract/bydfi.js +11 -0
- package/dist/cjs/src/abstract/cafearz.js +11 -0
- package/dist/cjs/src/abstract/kifpoolme.js +11 -0
- package/dist/cjs/src/abstract/mazdax.js +11 -0
- package/dist/cjs/src/abstract/pingi.js +11 -0
- package/dist/cjs/src/abstract/pooleno.js +11 -0
- package/dist/cjs/src/afratether.js +84 -36
- package/dist/cjs/src/arzplus.js +32 -15
- package/dist/cjs/src/bitbarg.js +313 -0
- package/dist/cjs/src/bydfi.js +435 -0
- package/dist/cjs/src/cafearz.js +347 -0
- package/dist/cjs/src/hamtapay.js +3 -2
- package/dist/cjs/src/kifpoolme.js +411 -0
- package/dist/cjs/src/mazdax.js +536 -0
- package/dist/cjs/src/pingi.js +448 -0
- package/dist/cjs/src/pooleno.js +348 -0
- package/dist/cjs/src/tetherland.js +5 -5
- package/dist/cjs/src/twox.js +56 -29
- package/js/ccxt.d.ts +23 -2
- package/js/ccxt.js +16 -2
- package/js/src/abantether.js +88 -69
- package/js/src/abstract/abantether.d.ts +1 -1
- package/js/src/abstract/bitbarg.d.ts +8 -0
- package/js/src/abstract/bitbarg.js +11 -0
- package/js/src/abstract/bydfi.d.ts +11 -0
- package/js/src/abstract/bydfi.js +11 -0
- package/js/src/abstract/cafearz.d.ts +8 -0
- package/js/src/abstract/cafearz.js +11 -0
- package/js/src/abstract/kifpoolme.d.ts +9 -0
- package/js/src/abstract/kifpoolme.js +11 -0
- package/js/src/abstract/mazdax.d.ts +11 -0
- package/js/src/abstract/mazdax.js +11 -0
- package/js/src/abstract/pingi.d.ts +9 -0
- package/js/src/abstract/pingi.js +11 -0
- package/js/src/abstract/pooleno.d.ts +8 -0
- package/js/src/abstract/pooleno.js +11 -0
- package/js/src/afratether.js +84 -36
- package/js/src/arzplus.d.ts +3 -2
- package/js/src/arzplus.js +32 -15
- package/js/src/bitbarg.d.ts +21 -0
- package/js/src/bitbarg.js +312 -0
- package/js/src/bydfi.d.ts +23 -0
- package/js/src/bydfi.js +434 -0
- package/js/src/cafearz.d.ts +21 -0
- package/js/src/cafearz.js +346 -0
- package/js/src/hamtapay.js +3 -2
- package/js/src/kifpoolme.d.ts +23 -0
- package/js/src/kifpoolme.js +410 -0
- package/js/src/mazdax.d.ts +23 -0
- package/js/src/mazdax.js +535 -0
- package/js/src/pingi.d.ts +22 -0
- package/js/src/pingi.js +447 -0
- package/js/src/pooleno.d.ts +21 -0
- package/js/src/pooleno.js +347 -0
- package/js/src/tetherland.js +5 -5
- package/js/src/twox.js +56 -29
- package/package.json +1 -1
package/js/src/afratether.js
CHANGED
|
@@ -24,7 +24,7 @@ export default class afratether extends Exchange {
|
|
|
24
24
|
'pro': false,
|
|
25
25
|
'has': {
|
|
26
26
|
'CORS': undefined,
|
|
27
|
-
'spot':
|
|
27
|
+
'spot': false,
|
|
28
28
|
'margin': false,
|
|
29
29
|
'swap': false,
|
|
30
30
|
'future': false,
|
|
@@ -80,6 +80,7 @@ export default class afratether extends Exchange {
|
|
|
80
80
|
'fetchTradingFee': false,
|
|
81
81
|
'fetchTradingFees': false,
|
|
82
82
|
'fetchWithdrawals': false,
|
|
83
|
+
'otc': true,
|
|
83
84
|
'setLeverage': false,
|
|
84
85
|
'setMarginMode': false,
|
|
85
86
|
'transfer': false,
|
|
@@ -139,21 +140,43 @@ export default class afratether extends Exchange {
|
|
|
139
140
|
}
|
|
140
141
|
parseMarket(market) {
|
|
141
142
|
// {
|
|
142
|
-
// "currencyAbb": "
|
|
143
|
-
// "nameEn": "
|
|
144
|
-
// "nameFa": "
|
|
145
|
-
// "icon": "/assets/crypto/
|
|
146
|
-
// "
|
|
147
|
-
// "
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
//
|
|
143
|
+
// "currencyAbb": "USDT",
|
|
144
|
+
// "nameEn": "Tether",
|
|
145
|
+
// "nameFa": "تتر",
|
|
146
|
+
// "icon": "/assets/crypto/usdt.png",
|
|
147
|
+
// "round": 1000000,
|
|
148
|
+
// "currency": "USDT",
|
|
149
|
+
// "changeRate24h": "-0.0065",
|
|
150
|
+
// "Klines": [
|
|
151
|
+
// [
|
|
152
|
+
// "1760227200000",
|
|
153
|
+
// "1147500",
|
|
154
|
+
// "1140000",
|
|
155
|
+
// "1145500",
|
|
156
|
+
// "1125000",
|
|
157
|
+
// "0",
|
|
158
|
+
// "0"
|
|
159
|
+
// ],
|
|
160
|
+
// ],
|
|
161
|
+
// "info": {
|
|
162
|
+
// "birth_date": 1412553600000,
|
|
163
|
+
// "open_24h": 1,
|
|
164
|
+
// "open_1w": 1,
|
|
165
|
+
// "open_3M": 1,
|
|
166
|
+
// "open_1y": 1
|
|
167
|
+
// },
|
|
168
|
+
// "prices": {
|
|
169
|
+
// "USDT": {
|
|
170
|
+
// "price": "1"
|
|
171
|
+
// },
|
|
172
|
+
// "IRR": {
|
|
173
|
+
// "price_sell": 1135000,
|
|
174
|
+
// "price_buy": 1123000
|
|
151
175
|
// }
|
|
152
|
-
//
|
|
153
|
-
// }
|
|
154
|
-
const details = this.safeList(market, 'prices');
|
|
176
|
+
// }
|
|
177
|
+
// }
|
|
155
178
|
let baseId = this.safeString(market, 'currency');
|
|
156
|
-
let quoteId =
|
|
179
|
+
let quoteId = 'IRR';
|
|
157
180
|
const base = this.safeCurrencyCode(baseId);
|
|
158
181
|
const quote = this.safeCurrencyCode(quoteId);
|
|
159
182
|
const id = base + quote;
|
|
@@ -168,8 +191,8 @@ export default class afratether extends Exchange {
|
|
|
168
191
|
'baseId': baseId,
|
|
169
192
|
'quoteId': quoteId,
|
|
170
193
|
'settleId': undefined,
|
|
171
|
-
'type': '
|
|
172
|
-
'spot':
|
|
194
|
+
'type': 'otc',
|
|
195
|
+
'spot': false,
|
|
173
196
|
'margin': false,
|
|
174
197
|
'swap': false,
|
|
175
198
|
'future': false,
|
|
@@ -252,41 +275,66 @@ export default class afratether extends Exchange {
|
|
|
252
275
|
}
|
|
253
276
|
parseTicker(ticker, market = undefined) {
|
|
254
277
|
// {
|
|
255
|
-
// "currencyAbb": "
|
|
256
|
-
// "nameEn": "
|
|
257
|
-
// "nameFa": "
|
|
258
|
-
// "icon": "/assets/crypto/
|
|
259
|
-
// "
|
|
260
|
-
// "
|
|
261
|
-
//
|
|
262
|
-
//
|
|
263
|
-
//
|
|
278
|
+
// "currencyAbb": "USDT",
|
|
279
|
+
// "nameEn": "Tether",
|
|
280
|
+
// "nameFa": "تتر",
|
|
281
|
+
// "icon": "/assets/crypto/usdt.png",
|
|
282
|
+
// "round": 1000000,
|
|
283
|
+
// "currency": "USDT",
|
|
284
|
+
// "changeRate24h": "-0.0065",
|
|
285
|
+
// "Klines": [
|
|
286
|
+
// [
|
|
287
|
+
// "1760227200000",
|
|
288
|
+
// "1147500",
|
|
289
|
+
// "1140000",
|
|
290
|
+
// "1145500",
|
|
291
|
+
// "1125000",
|
|
292
|
+
// "0",
|
|
293
|
+
// "0"
|
|
294
|
+
// ],
|
|
295
|
+
// ],
|
|
296
|
+
// "info": {
|
|
297
|
+
// "birth_date": 1412553600000,
|
|
298
|
+
// "open_24h": 1,
|
|
299
|
+
// "open_1w": 1,
|
|
300
|
+
// "open_3M": 1,
|
|
301
|
+
// "open_1y": 1
|
|
302
|
+
// },
|
|
303
|
+
// "prices": {
|
|
304
|
+
// "USDT": {
|
|
305
|
+
// "price": "1"
|
|
306
|
+
// },
|
|
307
|
+
// "IRR": {
|
|
308
|
+
// "price_sell": 1135000,
|
|
309
|
+
// "price_buy": 1123000
|
|
264
310
|
// }
|
|
265
|
-
//
|
|
266
|
-
// }
|
|
311
|
+
// }
|
|
312
|
+
// }
|
|
267
313
|
const marketType = 'otc';
|
|
268
|
-
const details = this.safeList(ticker, 'prices');
|
|
269
314
|
const base = this.safeString(ticker, 'currency');
|
|
270
|
-
const quote =
|
|
271
|
-
const marketId = base + quote;
|
|
315
|
+
const quote = 'IRR';
|
|
316
|
+
const marketId = base + '/' + quote;
|
|
272
317
|
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
|
|
273
|
-
const
|
|
318
|
+
const prices = this.safeDict(ticker, 'prices', {});
|
|
319
|
+
const irrPrices = this.safeDict(prices, 'IRR', {});
|
|
320
|
+
const sell = this.safeFloat(irrPrices, 'price_sell', 0);
|
|
321
|
+
const buy = this.safeFloat(irrPrices, 'price_buy', 0);
|
|
274
322
|
return this.safeTicker({
|
|
275
323
|
'symbol': symbol,
|
|
276
324
|
'timestamp': undefined,
|
|
277
325
|
'datetime': undefined,
|
|
278
326
|
'high': undefined,
|
|
279
327
|
'low': undefined,
|
|
280
|
-
'bid':
|
|
328
|
+
'bid': sell,
|
|
281
329
|
'bidVolume': undefined,
|
|
282
|
-
'ask':
|
|
330
|
+
'ask': buy,
|
|
283
331
|
'askVolume': undefined,
|
|
284
332
|
'vwap': undefined,
|
|
285
333
|
'open': undefined,
|
|
286
|
-
'close':
|
|
287
|
-
'last':
|
|
334
|
+
'close': buy,
|
|
335
|
+
'last': buy,
|
|
288
336
|
'previousClose': undefined,
|
|
289
|
-
'change': undefined,
|
|
337
|
+
'change': this.safeFloat(ticker, 'changeRate24h', undefined),
|
|
290
338
|
'percentage': undefined,
|
|
291
339
|
'average': undefined,
|
|
292
340
|
'baseVolume': undefined,
|
package/js/src/arzplus.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/arzplus.js';
|
|
2
|
-
import { Int, Market, OHLCV, OrderBook, Strings, Ticker, Tickers } from './base/types.js';
|
|
2
|
+
import { Int, Market, MarketType, OHLCV, OrderBook, Strings, Ticker, Tickers } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class arzplus
|
|
5
5
|
* @augments Exchange
|
|
@@ -8,7 +8,8 @@ import { Int, Market, OHLCV, OrderBook, Strings, Ticker, Tickers } from './base/
|
|
|
8
8
|
export default class arzplus extends Exchange {
|
|
9
9
|
describe(): any;
|
|
10
10
|
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
11
|
-
parseMarket(market: any): Market;
|
|
11
|
+
parseMarket(market: any, type?: MarketType): Market;
|
|
12
|
+
parseSpotMarket(market: any): Market;
|
|
12
13
|
parseOTCMarkets(market: any): Market;
|
|
13
14
|
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
14
15
|
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
package/js/src/arzplus.js
CHANGED
|
@@ -132,8 +132,15 @@ export default class arzplus extends Exchange {
|
|
|
132
132
|
'stats': '1',
|
|
133
133
|
'enable': 'true',
|
|
134
134
|
};
|
|
135
|
-
const
|
|
136
|
-
|
|
135
|
+
const typedRequest = this.safeString(params, 'type', 'spot');
|
|
136
|
+
let response = [];
|
|
137
|
+
let otcMarkets = [];
|
|
138
|
+
if (typedRequest === 'otc') {
|
|
139
|
+
otcMarkets = await this.publicGetApiV1MarketIrtInfo(request);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
response = await this.publicGetApiV1MarketSymbols(request);
|
|
143
|
+
}
|
|
137
144
|
const result = [];
|
|
138
145
|
for (let i = 0; i < response.length; i++) {
|
|
139
146
|
const market = this.parseMarket(response[i]);
|
|
@@ -146,12 +153,15 @@ export default class arzplus extends Exchange {
|
|
|
146
153
|
const parsedMarket = this.parseOTCMarkets(marketdata);
|
|
147
154
|
result.push(parsedMarket);
|
|
148
155
|
}
|
|
149
|
-
if (params['type']) {
|
|
150
|
-
return this.filterByArray(result, 'type', params['type'], false);
|
|
151
|
-
}
|
|
152
156
|
return result;
|
|
153
157
|
}
|
|
154
|
-
parseMarket(market) {
|
|
158
|
+
parseMarket(market, type = 'spot') {
|
|
159
|
+
if (type === 'otc') {
|
|
160
|
+
return this.parseOTCMarkets(market);
|
|
161
|
+
}
|
|
162
|
+
return this.parseSpotMarket(market);
|
|
163
|
+
}
|
|
164
|
+
parseSpotMarket(market) {
|
|
155
165
|
// {
|
|
156
166
|
// 'name': 'USDTIRT',
|
|
157
167
|
// 'asset': {
|
|
@@ -249,10 +259,12 @@ export default class arzplus extends Exchange {
|
|
|
249
259
|
}
|
|
250
260
|
parseOTCMarkets(market) {
|
|
251
261
|
// {
|
|
252
|
-
//
|
|
253
|
-
//
|
|
254
|
-
//
|
|
255
|
-
//
|
|
262
|
+
// symbol: "BTC",
|
|
263
|
+
// ask: "13877900000",
|
|
264
|
+
// bid: "13860999995",
|
|
265
|
+
// name: "bitcoin"
|
|
266
|
+
// qoute: "IRT",
|
|
267
|
+
// id: "OTC_BTCIRT"
|
|
256
268
|
// },
|
|
257
269
|
const baseAsset = this.safeString(market, 'symbol');
|
|
258
270
|
const quoteAsset = this.safeString(market, 'quote');
|
|
@@ -321,12 +333,13 @@ export default class arzplus extends Exchange {
|
|
|
321
333
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
322
334
|
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
323
335
|
*/
|
|
324
|
-
|
|
336
|
+
const marketType = this.safeString(params, 'type', 'spot');
|
|
337
|
+
await this.loadMarkets(false, { 'type': marketType });
|
|
325
338
|
if (symbols !== undefined) {
|
|
326
339
|
symbols = this.marketSymbols(symbols);
|
|
327
340
|
}
|
|
328
341
|
const result = {};
|
|
329
|
-
if (
|
|
342
|
+
if (marketType === 'otc') {
|
|
330
343
|
const otcMarkets = await this.publicGetApiV1MarketIrtInfo(params);
|
|
331
344
|
for (let i = 0; i < otcMarkets.length; i++) {
|
|
332
345
|
const marketdata = otcMarkets[i];
|
|
@@ -360,7 +373,11 @@ export default class arzplus extends Exchange {
|
|
|
360
373
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
361
374
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
362
375
|
*/
|
|
363
|
-
|
|
376
|
+
const marketType = this.safeString(params, 'type', 'spot');
|
|
377
|
+
if (marketType === 'otc') {
|
|
378
|
+
throw new Error('OTC markets are not supported');
|
|
379
|
+
}
|
|
380
|
+
await this.loadMarkets(false, { 'type': marketType });
|
|
364
381
|
const market = this.market(symbol);
|
|
365
382
|
const request = {
|
|
366
383
|
'symbol': market['id'],
|
|
@@ -489,7 +506,7 @@ export default class arzplus extends Exchange {
|
|
|
489
506
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
490
507
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
491
508
|
*/
|
|
492
|
-
await this.loadMarkets();
|
|
509
|
+
await this.loadMarkets(false, { 'type': 'otc' });
|
|
493
510
|
const market = this.market(symbol);
|
|
494
511
|
const endTime = Date.now();
|
|
495
512
|
const request = {
|
|
@@ -535,7 +552,7 @@ export default class arzplus extends Exchange {
|
|
|
535
552
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
536
553
|
* @returns {object} a dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbol
|
|
537
554
|
*/
|
|
538
|
-
await this.loadMarkets();
|
|
555
|
+
await this.loadMarkets(false, { 'type': 'otc' });
|
|
539
556
|
const market = this.market(symbol);
|
|
540
557
|
const request = {
|
|
541
558
|
'symbol': market['id'],
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Exchange from './abstract/bitbarg.js';
|
|
2
|
+
import { Market, Strings, Ticker, Tickers } from './base/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* @class bitbarg
|
|
5
|
+
* @augments Exchange
|
|
6
|
+
* @description Set rateLimit to 1000 if fully verified
|
|
7
|
+
*/
|
|
8
|
+
export default class bitbarg extends Exchange {
|
|
9
|
+
describe(): any;
|
|
10
|
+
parseMarket(market: any): Market;
|
|
11
|
+
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
12
|
+
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
13
|
+
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
14
|
+
parseTicker(ticker: any, market?: Market): Ticker;
|
|
15
|
+
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
16
|
+
url: any;
|
|
17
|
+
method: string;
|
|
18
|
+
body: any;
|
|
19
|
+
headers: any;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
import Exchange from './abstract/bitbarg.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* @class bitbarg
|
|
12
|
+
* @augments Exchange
|
|
13
|
+
* @description Set rateLimit to 1000 if fully verified
|
|
14
|
+
*/
|
|
15
|
+
export default class bitbarg extends Exchange {
|
|
16
|
+
describe() {
|
|
17
|
+
return this.deepExtend(super.describe(), {
|
|
18
|
+
'id': 'bitbarg',
|
|
19
|
+
'name': 'Bitbarg',
|
|
20
|
+
'countries': ['IR'],
|
|
21
|
+
'rateLimit': 1000,
|
|
22
|
+
'version': '1',
|
|
23
|
+
'certified': false,
|
|
24
|
+
'pro': false,
|
|
25
|
+
'has': {
|
|
26
|
+
'CORS': undefined,
|
|
27
|
+
'spot': true,
|
|
28
|
+
'margin': false,
|
|
29
|
+
'swap': false,
|
|
30
|
+
'future': false,
|
|
31
|
+
'option': false,
|
|
32
|
+
'addMargin': false,
|
|
33
|
+
'cancelAllOrders': false,
|
|
34
|
+
'cancelOrder': false,
|
|
35
|
+
'cancelOrders': false,
|
|
36
|
+
'createDepositAddress': false,
|
|
37
|
+
'createOrder': false,
|
|
38
|
+
'createStopLimitOrder': false,
|
|
39
|
+
'createStopMarketOrder': false,
|
|
40
|
+
'createStopOrder': false,
|
|
41
|
+
'editOrder': false,
|
|
42
|
+
'fetchBalance': false,
|
|
43
|
+
'fetchBorrowInterest': false,
|
|
44
|
+
'fetchBorrowRateHistories': false,
|
|
45
|
+
'fetchBorrowRateHistory': false,
|
|
46
|
+
'fetchClosedOrders': false,
|
|
47
|
+
'fetchCrossBorrowRate': false,
|
|
48
|
+
'fetchCrossBorrowRates': false,
|
|
49
|
+
'fetchCurrencies': false,
|
|
50
|
+
'fetchDepositAddress': false,
|
|
51
|
+
'fetchDeposits': false,
|
|
52
|
+
'fetchFundingHistory': false,
|
|
53
|
+
'fetchFundingRate': false,
|
|
54
|
+
'fetchFundingRateHistory': false,
|
|
55
|
+
'fetchFundingRates': false,
|
|
56
|
+
'fetchIndexOHLCV': false,
|
|
57
|
+
'fetchIsolatedBorrowRate': false,
|
|
58
|
+
'fetchIsolatedBorrowRates': false,
|
|
59
|
+
'fetchL2OrderBook': false,
|
|
60
|
+
'fetchL3OrderBook': false,
|
|
61
|
+
'fetchLedger': false,
|
|
62
|
+
'fetchLedgerEntry': false,
|
|
63
|
+
'fetchLeverageTiers': false,
|
|
64
|
+
'fetchMarkets': true,
|
|
65
|
+
'fetchMarkOHLCV': false,
|
|
66
|
+
'fetchMyTrades': false,
|
|
67
|
+
'fetchOHLCV': false,
|
|
68
|
+
'fetchOpenInterestHistory': false,
|
|
69
|
+
'fetchOpenOrders': false,
|
|
70
|
+
'fetchOrder': false,
|
|
71
|
+
'fetchOrderBook': false,
|
|
72
|
+
'fetchOrders': false,
|
|
73
|
+
'fetchOrderTrades': 'emulated',
|
|
74
|
+
'fetchPositions': false,
|
|
75
|
+
'fetchPremiumIndexOHLCV': false,
|
|
76
|
+
'fetchTicker': true,
|
|
77
|
+
'fetchTickers': true,
|
|
78
|
+
'fetchTime': false,
|
|
79
|
+
'fetchTrades': false,
|
|
80
|
+
'fetchTradingFee': false,
|
|
81
|
+
'fetchTradingFees': false,
|
|
82
|
+
'fetchWithdrawals': false,
|
|
83
|
+
'setLeverage': false,
|
|
84
|
+
'setMarginMode': false,
|
|
85
|
+
'transfer': false,
|
|
86
|
+
'withdraw': false,
|
|
87
|
+
},
|
|
88
|
+
'comment': 'This comment is optional',
|
|
89
|
+
'urls': {
|
|
90
|
+
'logo': 'https://cdn.arz.digital/cr-odin/img/exchanges/bitbarg/64x64.png',
|
|
91
|
+
'api': {
|
|
92
|
+
'public': 'https://api.bitbarg.com',
|
|
93
|
+
},
|
|
94
|
+
'www': 'https://bitbarg.com/',
|
|
95
|
+
'doc': [
|
|
96
|
+
'https://bitbarg.com/',
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
'api': {
|
|
100
|
+
'public': {
|
|
101
|
+
'get': {
|
|
102
|
+
'/api/v1/currencies': 1,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
'fees': {
|
|
107
|
+
'trading': {
|
|
108
|
+
'tierBased': false,
|
|
109
|
+
'percentage': true,
|
|
110
|
+
'maker': this.parseNumber('0.001'),
|
|
111
|
+
'taker': this.parseNumber('0.001'),
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
parseMarket(market) {
|
|
117
|
+
// "id": 53,
|
|
118
|
+
// "icon": "https://s3.bitbarg.com/currencies/btc.webp",
|
|
119
|
+
// "tradeActive": true,
|
|
120
|
+
// "faName": "بیت کوین",
|
|
121
|
+
// "enName": "Bitcoin",
|
|
122
|
+
// "coin": "BTC",
|
|
123
|
+
// "path": "bitcoin",
|
|
124
|
+
// "price": 112192,
|
|
125
|
+
// "quote": "813430226.5004",
|
|
126
|
+
// "percent": -5.735,
|
|
127
|
+
// "decimal": 8,
|
|
128
|
+
// "isFavorite": false,
|
|
129
|
+
const baseId = this.safeString(market, 'coin');
|
|
130
|
+
const quoteId = 'USDT';
|
|
131
|
+
const base = this.safeCurrencyCode(baseId);
|
|
132
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
133
|
+
const id = baseId + '/' + quoteId;
|
|
134
|
+
return {
|
|
135
|
+
'id': id,
|
|
136
|
+
'symbol': id,
|
|
137
|
+
'base': base,
|
|
138
|
+
'quote': quote,
|
|
139
|
+
'settle': undefined,
|
|
140
|
+
'baseId': baseId,
|
|
141
|
+
'quoteId': quoteId,
|
|
142
|
+
'settleId': undefined,
|
|
143
|
+
'type': 'spot',
|
|
144
|
+
'spot': true,
|
|
145
|
+
'margin': false,
|
|
146
|
+
'swap': false,
|
|
147
|
+
'future': false,
|
|
148
|
+
'option': false,
|
|
149
|
+
'active': true,
|
|
150
|
+
'contract': false,
|
|
151
|
+
'linear': undefined,
|
|
152
|
+
'inverse': undefined,
|
|
153
|
+
'contractSize': undefined,
|
|
154
|
+
'expiry': undefined,
|
|
155
|
+
'expiryDatetime': undefined,
|
|
156
|
+
'strike': undefined,
|
|
157
|
+
'optionType': undefined,
|
|
158
|
+
'precision': {
|
|
159
|
+
'amount': undefined,
|
|
160
|
+
'price': undefined,
|
|
161
|
+
},
|
|
162
|
+
'limits': {
|
|
163
|
+
'leverage': {
|
|
164
|
+
'min': undefined,
|
|
165
|
+
'max': undefined,
|
|
166
|
+
},
|
|
167
|
+
'amount': {
|
|
168
|
+
'min': undefined,
|
|
169
|
+
'max': undefined,
|
|
170
|
+
},
|
|
171
|
+
'price': {
|
|
172
|
+
'min': undefined,
|
|
173
|
+
'max': undefined,
|
|
174
|
+
},
|
|
175
|
+
'cost': {
|
|
176
|
+
'min': undefined,
|
|
177
|
+
'max': undefined,
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
'created': undefined,
|
|
181
|
+
'info': market,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
async fetchMarkets(params = {}) {
|
|
185
|
+
/**
|
|
186
|
+
* @method
|
|
187
|
+
* @name bitbarg#fetchMarkets
|
|
188
|
+
* @description retrieves data on all markets for bitbarg
|
|
189
|
+
* @see https://api.bitbarg.com/api/v1/currencies?pageSize=-1
|
|
190
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
191
|
+
* @returns {object[]} an array of objects representing market data
|
|
192
|
+
*/
|
|
193
|
+
const request = {
|
|
194
|
+
'pageSize': -1,
|
|
195
|
+
};
|
|
196
|
+
const response = await this.publicGetApiV1Currencies(this.extend(request, params));
|
|
197
|
+
const result = [];
|
|
198
|
+
const data = this.safeDict(response, 'result', {});
|
|
199
|
+
const items = this.safeList(data, 'items', []);
|
|
200
|
+
// Create markets for each currency with IRT quote
|
|
201
|
+
for (let i = 0; i < items.length; i++) {
|
|
202
|
+
const market = this.parseMarket(items[i]);
|
|
203
|
+
result.push(market);
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
208
|
+
/**
|
|
209
|
+
* @method
|
|
210
|
+
* @name bitbarg#fetchTickers
|
|
211
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
212
|
+
* @see https://api.bitbarg.com/api/v1/currencies?pageSize=-1
|
|
213
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
214
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
215
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
216
|
+
*/
|
|
217
|
+
await this.loadMarkets();
|
|
218
|
+
if (symbols !== undefined) {
|
|
219
|
+
symbols = this.marketSymbols(symbols);
|
|
220
|
+
}
|
|
221
|
+
const request = {
|
|
222
|
+
'pageSize': -1,
|
|
223
|
+
};
|
|
224
|
+
const response = await this.publicGetApiV1Currencies(request);
|
|
225
|
+
const data = this.safeDict(response, 'result', {});
|
|
226
|
+
const items = this.safeList(data, 'items', []);
|
|
227
|
+
const result = {};
|
|
228
|
+
for (let i = 0; i < items.length; i++) {
|
|
229
|
+
const coinData = items[i];
|
|
230
|
+
const baseId = this.safeString(coinData, 'coin');
|
|
231
|
+
// Create ticker for USDT quote
|
|
232
|
+
const quoteId = 'USDT';
|
|
233
|
+
const base = this.safeCurrencyCode(baseId);
|
|
234
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
235
|
+
const symbol = base + '/' + quote;
|
|
236
|
+
const ticker = this.extend({
|
|
237
|
+
'symbol': symbol,
|
|
238
|
+
'baseId': baseId,
|
|
239
|
+
'quoteId': quoteId,
|
|
240
|
+
'id': baseId + '/' + quoteId,
|
|
241
|
+
}, coinData);
|
|
242
|
+
result[symbol] = this.parseTicker(ticker);
|
|
243
|
+
}
|
|
244
|
+
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
245
|
+
}
|
|
246
|
+
async fetchTicker(symbol, params = {}) {
|
|
247
|
+
/**
|
|
248
|
+
* @method
|
|
249
|
+
* @name bitbarg#fetchTicker
|
|
250
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
251
|
+
* @see https://api.bitbarg.com/api/v1/currencies?pageSize=-1
|
|
252
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
253
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
254
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
255
|
+
*/
|
|
256
|
+
const ticker = await this.fetchTickers([symbol]);
|
|
257
|
+
return ticker[symbol];
|
|
258
|
+
}
|
|
259
|
+
parseTicker(ticker, market = undefined) {
|
|
260
|
+
// {
|
|
261
|
+
// "id": 1,
|
|
262
|
+
// "icon": "https://...",
|
|
263
|
+
// "tradeActive": true,
|
|
264
|
+
// "faName": "بیت کوین",
|
|
265
|
+
// "enName": "Bitcoin",
|
|
266
|
+
// "coin": "BTC",
|
|
267
|
+
// "path": "bitcoin",
|
|
268
|
+
// "price": 110387.56,
|
|
269
|
+
// "quote": "57479298399.76",
|
|
270
|
+
// "percent": -3.01,
|
|
271
|
+
// "decimal": 5,
|
|
272
|
+
// "isFavorite": false,
|
|
273
|
+
// "chart": [...]
|
|
274
|
+
// }
|
|
275
|
+
const marketType = 'spot';
|
|
276
|
+
const marketId = this.safeString(ticker, 'coin') + '/' + 'USDT';
|
|
277
|
+
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
|
|
278
|
+
const last = this.safeFloat(ticker, 'price', 0);
|
|
279
|
+
const percentage = this.safeFloat(ticker, 'percent', 0);
|
|
280
|
+
const baseVolume = this.safeFloat(ticker, 'quote');
|
|
281
|
+
return this.safeTicker({
|
|
282
|
+
'symbol': symbol,
|
|
283
|
+
'timestamp': undefined,
|
|
284
|
+
'datetime': undefined,
|
|
285
|
+
'high': undefined,
|
|
286
|
+
'low': undefined,
|
|
287
|
+
'bid': last,
|
|
288
|
+
'bidVolume': undefined,
|
|
289
|
+
'ask': last,
|
|
290
|
+
'askVolume': undefined,
|
|
291
|
+
'vwap': undefined,
|
|
292
|
+
'open': undefined,
|
|
293
|
+
'close': last,
|
|
294
|
+
'last': last,
|
|
295
|
+
'previousClose': undefined,
|
|
296
|
+
'change': undefined,
|
|
297
|
+
'percentage': percentage,
|
|
298
|
+
'average': undefined,
|
|
299
|
+
'baseVolume': baseVolume,
|
|
300
|
+
'quoteVolume': undefined,
|
|
301
|
+
'info': ticker,
|
|
302
|
+
}, market);
|
|
303
|
+
}
|
|
304
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
305
|
+
let url = this.urls['api']['public'] + path;
|
|
306
|
+
if (Object.keys(params).length) {
|
|
307
|
+
url += '?' + this.urlencode(params);
|
|
308
|
+
}
|
|
309
|
+
headers = { 'Content-Type': 'application/json' };
|
|
310
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Exchange from './abstract/bydfi.js';
|
|
2
|
+
import { Int, Market, OHLCV, OrderBook, Strings, Ticker, Tickers } from './base/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* @class bydfi
|
|
5
|
+
* @augments Exchange
|
|
6
|
+
* @description Set rateLimit to 1000 if fully verified
|
|
7
|
+
*/
|
|
8
|
+
export default class bydfi extends Exchange {
|
|
9
|
+
describe(): any;
|
|
10
|
+
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
11
|
+
parseMarket(market: any): Market;
|
|
12
|
+
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
13
|
+
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
14
|
+
parseTicker(ticker: any, market?: Market): Ticker;
|
|
15
|
+
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
16
|
+
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
17
|
+
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
18
|
+
url: string;
|
|
19
|
+
method: string;
|
|
20
|
+
body: any;
|
|
21
|
+
headers: any;
|
|
22
|
+
};
|
|
23
|
+
}
|