ccxt-ir 4.9.4 → 4.9.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +7 -7
  2. package/dist/ccxt.browser.min.js +4 -4
  3. package/dist/cjs/ccxt.js +22 -1
  4. package/dist/cjs/src/abantether.js +88 -69
  5. package/dist/cjs/src/abstract/bitbarg.js +11 -0
  6. package/dist/cjs/src/abstract/bydfi.js +11 -0
  7. package/dist/cjs/src/abstract/cafearz.js +11 -0
  8. package/dist/cjs/src/abstract/kifpoolme.js +11 -0
  9. package/dist/cjs/src/abstract/mazdax.js +11 -0
  10. package/dist/cjs/src/abstract/pingi.js +11 -0
  11. package/dist/cjs/src/abstract/pooleno.js +11 -0
  12. package/dist/cjs/src/afratether.js +84 -36
  13. package/dist/cjs/src/arzplus.js +32 -15
  14. package/dist/cjs/src/bitbarg.js +313 -0
  15. package/dist/cjs/src/bydfi.js +435 -0
  16. package/dist/cjs/src/cafearz.js +347 -0
  17. package/dist/cjs/src/kifpoolme.js +411 -0
  18. package/dist/cjs/src/mazdax.js +536 -0
  19. package/dist/cjs/src/pingi.js +448 -0
  20. package/dist/cjs/src/pooleno.js +348 -0
  21. package/dist/cjs/src/tetherland.js +8 -4
  22. package/dist/cjs/src/twox.js +55 -28
  23. package/js/ccxt.d.ts +23 -2
  24. package/js/ccxt.js +16 -2
  25. package/js/src/abantether.js +88 -69
  26. package/js/src/abstract/abantether.d.ts +1 -1
  27. package/js/src/abstract/bitbarg.d.ts +8 -0
  28. package/js/src/abstract/bitbarg.js +11 -0
  29. package/js/src/abstract/bydfi.d.ts +11 -0
  30. package/js/src/abstract/bydfi.js +11 -0
  31. package/js/src/abstract/cafearz.d.ts +8 -0
  32. package/js/src/abstract/cafearz.js +11 -0
  33. package/js/src/abstract/kifpoolme.d.ts +9 -0
  34. package/js/src/abstract/kifpoolme.js +11 -0
  35. package/js/src/abstract/mazdax.d.ts +11 -0
  36. package/js/src/abstract/mazdax.js +11 -0
  37. package/js/src/abstract/pingi.d.ts +9 -0
  38. package/js/src/abstract/pingi.js +11 -0
  39. package/js/src/abstract/pooleno.d.ts +8 -0
  40. package/js/src/abstract/pooleno.js +11 -0
  41. package/js/src/afratether.js +84 -36
  42. package/js/src/arzplus.d.ts +3 -2
  43. package/js/src/arzplus.js +32 -15
  44. package/js/src/base/Exchange.d.ts +2 -2
  45. package/js/src/bitbarg.d.ts +21 -0
  46. package/js/src/bitbarg.js +312 -0
  47. package/js/src/bydfi.d.ts +23 -0
  48. package/js/src/bydfi.js +434 -0
  49. package/js/src/cafearz.d.ts +21 -0
  50. package/js/src/cafearz.js +346 -0
  51. package/js/src/coinbaseexchange.d.ts +1 -1
  52. package/js/src/kifpoolme.d.ts +23 -0
  53. package/js/src/kifpoolme.js +410 -0
  54. package/js/src/mazdax.d.ts +23 -0
  55. package/js/src/mazdax.js +535 -0
  56. package/js/src/pingi.d.ts +22 -0
  57. package/js/src/pingi.js +447 -0
  58. package/js/src/pooleno.d.ts +21 -0
  59. package/js/src/pooleno.js +347 -0
  60. package/js/src/protobuf/mexc/compiled.d.cts +0 -6
  61. package/js/src/static_dependencies/fflake/browser.d.ts +5 -5
  62. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +2 -2
  63. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  64. package/js/src/static_dependencies/qs/formats.d.cts +0 -6
  65. package/js/src/static_dependencies/qs/index.d.cts +0 -6
  66. package/js/src/static_dependencies/qs/parse.d.cts +0 -6
  67. package/js/src/static_dependencies/qs/stringify.d.cts +0 -6
  68. package/js/src/static_dependencies/qs/utils.d.cts +0 -6
  69. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +1 -1
  70. package/js/src/tetherland.js +5 -4
  71. package/js/src/twox.js +55 -28
  72. package/package.json +1 -1
@@ -24,7 +24,7 @@ export default class afratether extends Exchange {
24
24
  'pro': false,
25
25
  'has': {
26
26
  'CORS': undefined,
27
- 'spot': true,
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": "BTC",
143
- // "nameEn": "Bitcoin",
144
- // "nameFa": "بیت کوین",
145
- // "icon": "/assets/crypto/BTC.png",
146
- // "currency": "BTC",
147
- // "prices": [
148
- // {
149
- // "currency": "USDT",
150
- // "price": "67797.1"
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 = this.safeString(details[0], 'currency');
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': 'spot',
172
- 'spot': true,
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": "BTC",
256
- // "nameEn": "Bitcoin",
257
- // "nameFa": "بیت کوین",
258
- // "icon": "/assets/crypto/BTC.png",
259
- // "currency": "BTC",
260
- // "prices": [
261
- // {
262
- // "currency": "USDT",
263
- // "price": "67797.1"
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 = this.safeString(details[0], 'currency');
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 last = this.safeFloat(details[0], 'price', 0);
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': undefined,
328
+ 'bid': sell,
281
329
  'bidVolume': undefined,
282
- 'ask': undefined,
330
+ 'ask': buy,
283
331
  'askVolume': undefined,
284
332
  'vwap': undefined,
285
333
  'open': undefined,
286
- 'close': last,
287
- 'last': 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,
@@ -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 response = await this.publicGetApiV1MarketSymbols(request);
136
- const otcMarkets = await this.publicGetApiV1MarketIrtInfo(request);
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
- // symbol: "BTC",
253
- // ask: "13877900000",
254
- // bid: "13860999995",
255
- // name: "bitcoin"
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
- await this.loadMarkets();
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 (params['type'] === 'otc') {
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
- await this.loadMarkets();
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'],
@@ -252,7 +252,7 @@ export default class Exchange {
252
252
  outputLen: number;
253
253
  blockLen: number;
254
254
  create(): import("../static_dependencies/noble-hashes/utils.js").Hash<import("../static_dependencies/noble-hashes/utils.js").Hash<any>>;
255
- }, digest?: "hex" | "base64" | "binary") => any;
255
+ }, digest?: "binary" | "hex" | "base64") => any;
256
256
  arrayConcat: (a: any[], b: any[]) => any[];
257
257
  encode: (str: string) => Uint8Array;
258
258
  urlencode: (object: object, sort?: boolean) => string;
@@ -261,7 +261,7 @@ export default class Exchange {
261
261
  outputLen: number;
262
262
  blockLen: number;
263
263
  create(): import("../static_dependencies/noble-hashes/utils.js").Hash<import("../static_dependencies/noble-hashes/utils.js").Hash<any>>;
264
- }, digest?: "hex" | "base64" | "binary") => any;
264
+ }, digest?: "binary" | "hex" | "base64") => any;
265
265
  numberToString: typeof functions.numberToString;
266
266
  parseTimeframe: (timeframe: string) => number;
267
267
  safeInteger2: (o: any, k1: IndexType, k2: IndexType, $default?: number) => number;
@@ -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': 'otc',
144
+ 'spot': false,
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(this.extend(request, params));
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 = 'otc';
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
+ }