ccxt-ir 4.17.0 → 4.18.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.
Files changed (65) hide show
  1. package/README.md +4 -4
  2. package/dist/373.ccxt.browser.js +1 -1
  3. package/dist/373.ccxt.browser.min.js +1 -1
  4. package/dist/ccxt.browser.min.js +15 -15
  5. package/dist/cjs/ccxt.js +34 -1
  6. package/dist/cjs/package.json +1 -1
  7. package/dist/cjs/src/baazar.js +160 -0
  8. package/dist/cjs/src/daric.js +181 -0
  9. package/dist/cjs/src/digikalagold.js +178 -0
  10. package/dist/cjs/src/goldcore.js +155 -0
  11. package/dist/cjs/src/goldika.js +163 -0
  12. package/dist/cjs/src/goldis.js +157 -0
  13. package/dist/cjs/src/hamrahgold.js +171 -0
  14. package/dist/cjs/src/talapp.js +156 -0
  15. package/dist/cjs/src/zarafza.js +159 -0
  16. package/dist/cjs/src/zarminex.js +162 -0
  17. package/dist/cjs/src/zarniv.js +178 -0
  18. package/js/ccxt.d.ts +35 -2
  19. package/js/ccxt.js +24 -2
  20. package/js/src/abstract/baazar.d.ts +8 -0
  21. package/js/src/abstract/baazar.js +11 -0
  22. package/js/src/abstract/daric.d.ts +8 -0
  23. package/js/src/abstract/daric.js +11 -0
  24. package/js/src/abstract/digikalagold.d.ts +8 -0
  25. package/js/src/abstract/digikalagold.js +11 -0
  26. package/js/src/abstract/goldcore.d.ts +8 -0
  27. package/js/src/abstract/goldcore.js +11 -0
  28. package/js/src/abstract/goldika.d.ts +8 -0
  29. package/js/src/abstract/goldika.js +11 -0
  30. package/js/src/abstract/goldis.d.ts +8 -0
  31. package/js/src/abstract/goldis.js +11 -0
  32. package/js/src/abstract/hamrahgold.d.ts +8 -0
  33. package/js/src/abstract/hamrahgold.js +11 -0
  34. package/js/src/abstract/talapp.d.ts +8 -0
  35. package/js/src/abstract/talapp.js +11 -0
  36. package/js/src/abstract/zarafza.d.ts +8 -0
  37. package/js/src/abstract/zarafza.js +11 -0
  38. package/js/src/abstract/zarminex.d.ts +8 -0
  39. package/js/src/abstract/zarminex.js +11 -0
  40. package/js/src/abstract/zarniv.d.ts +9 -0
  41. package/js/src/abstract/zarniv.js +11 -0
  42. package/js/src/baazar.d.ts +20 -0
  43. package/js/src/baazar.js +159 -0
  44. package/js/src/daric.d.ts +22 -0
  45. package/js/src/daric.js +180 -0
  46. package/js/src/digikalagold.d.ts +21 -0
  47. package/js/src/digikalagold.js +177 -0
  48. package/js/src/goldcore.d.ts +20 -0
  49. package/js/src/goldcore.js +154 -0
  50. package/js/src/goldika.d.ts +20 -0
  51. package/js/src/goldika.js +162 -0
  52. package/js/src/goldis.d.ts +21 -0
  53. package/js/src/goldis.js +156 -0
  54. package/js/src/hamrahgold.d.ts +21 -0
  55. package/js/src/hamrahgold.js +170 -0
  56. package/js/src/talapp.d.ts +20 -0
  57. package/js/src/talapp.js +155 -0
  58. package/js/src/zarafza.d.ts +20 -0
  59. package/js/src/zarafza.js +158 -0
  60. package/js/src/zarminex.d.ts +20 -0
  61. package/js/src/zarminex.js +161 -0
  62. package/js/src/zarniv.d.ts +21 -0
  63. package/js/src/zarniv.js +177 -0
  64. package/js/test.js +50 -43
  65. package/package.json +1 -1
package/dist/cjs/ccxt.js CHANGED
@@ -21,6 +21,7 @@ var arzplus = require('./src/arzplus.js');
21
21
  var asacoine = require('./src/asacoine.js');
22
22
  var ascendex = require('./src/ascendex.js');
23
23
  var asretether = require('./src/asretether.js');
24
+ var baazar = require('./src/baazar.js');
24
25
  var bequant = require('./src/bequant.js');
25
26
  var bidarz = require('./src/bidarz.js');
26
27
  var bigone = require('./src/bigone.js');
@@ -77,11 +78,13 @@ var coinsph = require('./src/coinsph.js');
77
78
  var coinspot = require('./src/coinspot.js');
78
79
  var cryptocom = require('./src/cryptocom.js');
79
80
  var cryptomus = require('./src/cryptomus.js');
81
+ var daric = require('./src/daric.js');
80
82
  var defx = require('./src/defx.js');
81
83
  var delta = require('./src/delta.js');
82
84
  var deribit = require('./src/deribit.js');
83
85
  var derive = require('./src/derive.js');
84
86
  var digifinex = require('./src/digifinex.js');
87
+ var digikalagold = require('./src/digikalagold.js');
85
88
  var ellipx = require('./src/ellipx.js');
86
89
  var eterex = require('./src/eterex.js');
87
90
  var excoino = require('./src/excoino.js');
@@ -94,6 +97,10 @@ var foxbit = require('./src/foxbit.js');
94
97
  var gate = require('./src/gate.js');
95
98
  var gateio = require('./src/gateio.js');
96
99
  var gemini = require('./src/gemini.js');
100
+ var goldcore = require('./src/goldcore.js');
101
+ var goldika = require('./src/goldika.js');
102
+ var goldis = require('./src/goldis.js');
103
+ var hamrahgold = require('./src/hamrahgold.js');
97
104
  var hamtapay = require('./src/hamtapay.js');
98
105
  var hashkey = require('./src/hashkey.js');
99
106
  var hibachi = require('./src/hibachi.js');
@@ -149,6 +156,7 @@ var saraf = require('./src/saraf.js');
149
156
  var sarmayex = require('./src/sarmayex.js');
150
157
  var sarrafex = require('./src/sarrafex.js');
151
158
  var tabdeal = require('./src/tabdeal.js');
159
+ var talapp = require('./src/talapp.js');
152
160
  var talasea = require('./src/talasea.js');
153
161
  var technogold = require('./src/technogold.js');
154
162
  var tehran_exchange = require('./src/tehran_exchange.js');
@@ -170,6 +178,9 @@ var woofipro = require('./src/woofipro.js');
170
178
  var xt = require('./src/xt.js');
171
179
  var yobit = require('./src/yobit.js');
172
180
  var zaif = require('./src/zaif.js');
181
+ var zarafza = require('./src/zarafza.js');
182
+ var zarminex = require('./src/zarminex.js');
183
+ var zarniv = require('./src/zarniv.js');
173
184
  var zonda = require('./src/zonda.js');
174
185
  var alpaca$1 = require('./src/pro/alpaca.js');
175
186
  var apex$1 = require('./src/pro/apex.js');
@@ -247,7 +258,7 @@ var xt$1 = require('./src/pro/xt.js');
247
258
 
248
259
  //-----------------------------------------------------------------------------
249
260
  // this is updated by vss.js when building
250
- const version = '4.17.0';
261
+ const version = '4.18.0';
251
262
  Exchange["default"].ccxtVersion = version;
252
263
  const exchanges = {
253
264
  'abantether': abantether["default"],
@@ -259,6 +270,7 @@ const exchanges = {
259
270
  'asacoine': asacoine["default"],
260
271
  'ascendex': ascendex["default"],
261
272
  'asretether': asretether["default"],
273
+ 'baazar': baazar["default"],
262
274
  'bequant': bequant["default"],
263
275
  'bidarz': bidarz["default"],
264
276
  'bigone': bigone["default"],
@@ -315,11 +327,13 @@ const exchanges = {
315
327
  'coinspot': coinspot["default"],
316
328
  'cryptocom': cryptocom["default"],
317
329
  'cryptomus': cryptomus["default"],
330
+ 'daric': daric["default"],
318
331
  'defx': defx["default"],
319
332
  'delta': delta["default"],
320
333
  'deribit': deribit["default"],
321
334
  'derive': derive["default"],
322
335
  'digifinex': digifinex["default"],
336
+ 'digikalagold': digikalagold["default"],
323
337
  'ellipx': ellipx["default"],
324
338
  'eterex': eterex["default"],
325
339
  'excoino': excoino["default"],
@@ -332,6 +346,10 @@ const exchanges = {
332
346
  'gate': gate["default"],
333
347
  'gateio': gateio["default"],
334
348
  'gemini': gemini["default"],
349
+ 'goldcore': goldcore["default"],
350
+ 'goldika': goldika["default"],
351
+ 'goldis': goldis["default"],
352
+ 'hamrahgold': hamrahgold["default"],
335
353
  'hamtapay': hamtapay["default"],
336
354
  'hashkey': hashkey["default"],
337
355
  'hibachi': hibachi["default"],
@@ -387,6 +405,7 @@ const exchanges = {
387
405
  'sarmayex': sarmayex["default"],
388
406
  'sarrafex': sarrafex["default"],
389
407
  'tabdeal': tabdeal["default"],
408
+ 'talapp': talapp["default"],
390
409
  'talasea': talasea["default"],
391
410
  'technogold': technogold["default"],
392
411
  'tehran_exchange': tehran_exchange["default"],
@@ -408,6 +427,9 @@ const exchanges = {
408
427
  'xt': xt["default"],
409
428
  'yobit': yobit["default"],
410
429
  'zaif': zaif["default"],
430
+ 'zarafza': zarafza["default"],
431
+ 'zarminex': zarminex["default"],
432
+ 'zarniv': zarniv["default"],
411
433
  'zonda': zonda["default"],
412
434
  };
413
435
  const pro = {
@@ -545,6 +567,7 @@ exports.arzplus = arzplus["default"];
545
567
  exports.asacoine = asacoine["default"];
546
568
  exports.ascendex = ascendex["default"];
547
569
  exports.asretether = asretether["default"];
570
+ exports.baazar = baazar["default"];
548
571
  exports.bequant = bequant["default"];
549
572
  exports.bidarz = bidarz["default"];
550
573
  exports.bigone = bigone["default"];
@@ -601,11 +624,13 @@ exports.coinsph = coinsph["default"];
601
624
  exports.coinspot = coinspot["default"];
602
625
  exports.cryptocom = cryptocom["default"];
603
626
  exports.cryptomus = cryptomus["default"];
627
+ exports.daric = daric["default"];
604
628
  exports.defx = defx["default"];
605
629
  exports.delta = delta["default"];
606
630
  exports.deribit = deribit["default"];
607
631
  exports.derive = derive["default"];
608
632
  exports.digifinex = digifinex["default"];
633
+ exports.digikalagold = digikalagold["default"];
609
634
  exports.ellipx = ellipx["default"];
610
635
  exports.eterex = eterex["default"];
611
636
  exports.excoino = excoino["default"];
@@ -618,6 +643,10 @@ exports.foxbit = foxbit["default"];
618
643
  exports.gate = gate["default"];
619
644
  exports.gateio = gateio["default"];
620
645
  exports.gemini = gemini["default"];
646
+ exports.goldcore = goldcore["default"];
647
+ exports.goldika = goldika["default"];
648
+ exports.goldis = goldis["default"];
649
+ exports.hamrahgold = hamrahgold["default"];
621
650
  exports.hamtapay = hamtapay["default"];
622
651
  exports.hashkey = hashkey["default"];
623
652
  exports.hibachi = hibachi["default"];
@@ -673,6 +702,7 @@ exports.saraf = saraf["default"];
673
702
  exports.sarmayex = sarmayex["default"];
674
703
  exports.sarrafex = sarrafex["default"];
675
704
  exports.tabdeal = tabdeal["default"];
705
+ exports.talapp = talapp["default"];
676
706
  exports.talasea = talasea["default"];
677
707
  exports.technogold = technogold["default"];
678
708
  exports.tehran_exchange = tehran_exchange["default"];
@@ -694,6 +724,9 @@ exports.woofipro = woofipro["default"];
694
724
  exports.xt = xt["default"];
695
725
  exports.yobit = yobit["default"];
696
726
  exports.zaif = zaif["default"];
727
+ exports.zarafza = zarafza["default"];
728
+ exports.zarminex = zarminex["default"];
729
+ exports.zarniv = zarniv["default"];
697
730
  exports.zonda = zonda["default"];
698
731
  exports["default"] = ccxt;
699
732
  exports.exchanges = exchanges;
@@ -1 +1 @@
1
- { "type": "commonjs" }
1
+ { "type": "commonjs" }
@@ -0,0 +1,160 @@
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 baazar
11
+ * @augments Exchange
12
+ */
13
+ class baazar extends Exchange["default"] {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'id': 'baazar',
17
+ 'name': 'Baazar',
18
+ 'countries': ['IR'],
19
+ 'rateLimit': 1000,
20
+ 'version': 'v1',
21
+ 'certified': false,
22
+ 'pro': false,
23
+ 'has': {
24
+ 'CORS': undefined,
25
+ 'spot': false,
26
+ 'margin': false,
27
+ 'swap': false,
28
+ 'future': false,
29
+ 'option': false,
30
+ 'fetchMarkets': true,
31
+ 'fetchTicker': true,
32
+ 'fetchTickers': true,
33
+ 'otc': true,
34
+ },
35
+ 'options': {
36
+ 'defaultType': 'otc',
37
+ },
38
+ 'urls': {
39
+ 'api': {
40
+ 'public': 'https://api.baazar.ir',
41
+ },
42
+ 'www': 'https://baazar.ir',
43
+ 'doc': 'https://api.baazar.ir/landing/v1/price/DAILY/30',
44
+ },
45
+ 'api': {
46
+ 'public': {
47
+ 'get': {
48
+ 'landing/v1/price/DAILY/30': 1,
49
+ },
50
+ },
51
+ },
52
+ });
53
+ }
54
+ async fetchMarkets(params = {}) {
55
+ const response = await this.publicGetLandingV1PriceDAILY30(params);
56
+ return [this.parseMarket(response)];
57
+ }
58
+ parseMarket(response) {
59
+ const data = this.safeDict(response, 'data', {});
60
+ return {
61
+ 'id': 'XAU18IRT',
62
+ 'symbol': 'XAU18/IRT',
63
+ 'base': 'XAU18',
64
+ 'quote': 'IRT',
65
+ 'settle': undefined,
66
+ 'baseId': 'XAU18',
67
+ 'quoteId': 'IRT',
68
+ 'settleId': undefined,
69
+ 'type': 'otc',
70
+ 'spot': false,
71
+ 'margin': false,
72
+ 'swap': false,
73
+ 'future': false,
74
+ 'option': false,
75
+ 'active': this.safeNumber(data, 'currentTime') !== undefined,
76
+ 'contract': false,
77
+ 'linear': undefined,
78
+ 'inverse': undefined,
79
+ 'contractSize': undefined,
80
+ 'expiry': undefined,
81
+ 'expiryDatetime': undefined,
82
+ 'strike': undefined,
83
+ 'optionType': undefined,
84
+ 'precision': {
85
+ 'amount': undefined,
86
+ 'price': undefined,
87
+ },
88
+ 'limits': {
89
+ 'leverage': { 'min': undefined, 'max': undefined },
90
+ 'amount': { 'min': undefined, 'max': undefined },
91
+ 'price': { 'min': undefined, 'max': undefined },
92
+ 'cost': { 'min': undefined, 'max': undefined },
93
+ },
94
+ 'created': undefined,
95
+ 'info': data,
96
+ };
97
+ }
98
+ async fetchTicker(symbol, params = {}) {
99
+ await this.loadMarkets();
100
+ const market = this.market(symbol);
101
+ const response = await this.publicGetLandingV1PriceDAILY30(params);
102
+ return this.parseTicker(response, market);
103
+ }
104
+ async fetchTickers(symbols = undefined, params = {}) {
105
+ await this.loadMarkets();
106
+ if (symbols !== undefined) {
107
+ symbols = this.marketSymbols(symbols);
108
+ }
109
+ const response = await this.publicGetLandingV1PriceDAILY30(params);
110
+ const market = this.market('XAU18/IRT');
111
+ const ticker = this.parseTicker(response, market);
112
+ const result = {};
113
+ result[ticker['symbol']] = ticker;
114
+ return this.filterByArrayTickers(result, 'symbol', symbols);
115
+ }
116
+ parseTicker(response, market = undefined) {
117
+ const data = this.safeDict(response, 'data', {});
118
+ let bid = this.safeNumber(data, 'sellPrice');
119
+ let ask = this.safeNumber(data, 'buyPrice');
120
+ if (bid !== undefined) {
121
+ bid = bid / 10;
122
+ }
123
+ if (ask !== undefined) {
124
+ ask = ask / 10;
125
+ }
126
+ return this.safeTicker({
127
+ 'symbol': market['symbol'],
128
+ 'timestamp': this.safeInteger(data, 'currentTime'),
129
+ 'datetime': undefined,
130
+ 'high': undefined,
131
+ 'low': undefined,
132
+ 'bid': bid,
133
+ 'bidVolume': undefined,
134
+ 'ask': ask,
135
+ 'askVolume': undefined,
136
+ 'vwap': undefined,
137
+ 'open': undefined,
138
+ 'close': ask,
139
+ 'last': ask,
140
+ 'previousClose': undefined,
141
+ 'change': undefined,
142
+ 'percentage': undefined,
143
+ 'average': undefined,
144
+ 'baseVolume': undefined,
145
+ 'quoteVolume': undefined,
146
+ 'info': data,
147
+ }, market);
148
+ }
149
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
150
+ let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
151
+ const query = this.omit(params, this.extractParams(path));
152
+ if (Object.keys(query).length) {
153
+ url += '?' + this.urlencode(query);
154
+ }
155
+ headers = { 'Accept': 'application/json' };
156
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
157
+ }
158
+ }
159
+
160
+ exports["default"] = baazar;
@@ -0,0 +1,181 @@
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 daric
11
+ * @augments Exchange
12
+ */
13
+ class daric extends Exchange["default"] {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'id': 'daric',
17
+ 'name': 'Daric',
18
+ 'countries': ['IR'],
19
+ 'rateLimit': 1000,
20
+ 'version': '1',
21
+ 'certified': false,
22
+ 'pro': false,
23
+ 'has': {
24
+ 'CORS': undefined,
25
+ 'spot': false,
26
+ 'margin': false,
27
+ 'swap': false,
28
+ 'future': false,
29
+ 'option': false,
30
+ 'fetchMarkets': true,
31
+ 'fetchTicker': true,
32
+ 'fetchTickers': true,
33
+ 'otc': true,
34
+ },
35
+ 'options': {
36
+ 'defaultType': 'otc',
37
+ },
38
+ 'urls': {
39
+ 'api': {
40
+ 'public': 'https://apie.daric.gold',
41
+ },
42
+ 'www': 'https://daric.gold',
43
+ 'doc': 'https://apie.daric.gold/public/general/PairList?src=TMN',
44
+ },
45
+ 'api': {
46
+ 'public': {
47
+ 'get': {
48
+ 'public/general/PairList': 1,
49
+ },
50
+ },
51
+ },
52
+ });
53
+ }
54
+ async fetchMarkets(params = {}) {
55
+ const response = await this.fetchPairList(params);
56
+ return this.parseMarkets(response);
57
+ }
58
+ fetchPairList(params = {}) {
59
+ return this.publicGetPublicGeneralPairList(this.extend({ 'src': 'TMN' }, params));
60
+ }
61
+ parseMarkets(response) {
62
+ let markets = [];
63
+ if (Array.isArray(response)) {
64
+ markets = response;
65
+ }
66
+ const result = [];
67
+ for (let i = 0; i < markets.length; i++) {
68
+ const market = markets[i];
69
+ const baseId = this.safeString(market, 'destinationCoinSymbol');
70
+ if (baseId === 'GOLD18' || baseId === 'SILVER') {
71
+ result.push(this.parseMarket(market));
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ parseMarket(market) {
77
+ const baseId = this.safeString(market, 'destinationCoinSymbol');
78
+ let base = 'XAG';
79
+ if (baseId === 'GOLD18') {
80
+ base = 'XAU18';
81
+ }
82
+ const quote = 'IRT';
83
+ return {
84
+ 'id': this.safeString(market, 'id'),
85
+ 'symbol': base + '/' + quote,
86
+ 'base': base,
87
+ 'quote': quote,
88
+ 'settle': undefined,
89
+ 'baseId': baseId,
90
+ 'quoteId': this.safeString(market, 'sourceCoinSymbol'),
91
+ 'settleId': undefined,
92
+ 'type': 'otc',
93
+ 'spot': false,
94
+ 'margin': false,
95
+ 'swap': false,
96
+ 'future': false,
97
+ 'option': false,
98
+ 'active': true,
99
+ 'contract': false,
100
+ 'linear': undefined,
101
+ 'inverse': undefined,
102
+ 'contractSize': undefined,
103
+ 'expiry': undefined,
104
+ 'expiryDatetime': undefined,
105
+ 'strike': undefined,
106
+ 'optionType': undefined,
107
+ 'precision': {
108
+ 'amount': undefined,
109
+ 'price': this.safeInteger(market, 'decimalLength'),
110
+ },
111
+ 'limits': {
112
+ 'leverage': { 'min': undefined, 'max': undefined },
113
+ 'amount': { 'min': undefined, 'max': undefined },
114
+ 'price': { 'min': undefined, 'max': undefined },
115
+ 'cost': { 'min': undefined, 'max': undefined },
116
+ },
117
+ 'created': undefined,
118
+ 'info': market,
119
+ };
120
+ }
121
+ async fetchTicker(symbol, params = {}) {
122
+ await this.loadMarkets();
123
+ const market = this.market(symbol);
124
+ const response = await this.fetchPairList(params);
125
+ return this.parseTicker(response, market);
126
+ }
127
+ async fetchTickers(symbols = undefined, params = {}) {
128
+ await this.loadMarkets();
129
+ if (symbols !== undefined) {
130
+ symbols = this.marketSymbols(symbols);
131
+ }
132
+ const response = await this.fetchPairList(params);
133
+ const result = {};
134
+ const markets = this.parseMarkets(response);
135
+ for (let i = 0; i < markets.length; i++) {
136
+ const ticker = this.parseTicker(response, markets[i]);
137
+ result[ticker['symbol']] = ticker;
138
+ }
139
+ return this.filterByArrayTickers(result, 'symbol', symbols);
140
+ }
141
+ parseTicker(response, market = undefined) {
142
+ let markets = [];
143
+ if (Array.isArray(response)) {
144
+ markets = response;
145
+ }
146
+ const ticker = this.filterBy(markets, 'destinationCoinSymbol', market['baseId'])[0];
147
+ return this.safeTicker({
148
+ 'symbol': market['symbol'],
149
+ 'timestamp': undefined,
150
+ 'datetime': undefined,
151
+ 'high': this.safeNumber(ticker, 'highestRecentOrder'),
152
+ 'low': this.safeNumber(ticker, 'lowestRecentOrder'),
153
+ 'bid': this.safeNumber(ticker, 'bestBuy'),
154
+ 'bidVolume': undefined,
155
+ 'ask': this.safeNumber(ticker, 'bestSell'),
156
+ 'askVolume': undefined,
157
+ 'vwap': undefined,
158
+ 'open': undefined,
159
+ 'close': this.safeNumber(ticker, 'lastOrderPrice'),
160
+ 'last': this.safeNumber(ticker, 'lastOrderPrice'),
161
+ 'previousClose': undefined,
162
+ 'change': undefined,
163
+ 'percentage': this.safeNumber(ticker, 'change'),
164
+ 'average': undefined,
165
+ 'baseVolume': this.safeNumber(ticker, 'todayTradeAmount'),
166
+ 'quoteVolume': this.safeNumber(ticker, 'todayTradeTotal'),
167
+ 'info': ticker,
168
+ }, market);
169
+ }
170
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
171
+ let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
172
+ const query = this.omit(params, this.extractParams(path));
173
+ if (Object.keys(query).length) {
174
+ url += '?' + this.urlencode(query);
175
+ }
176
+ headers = { 'Accept': 'application/json' };
177
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
178
+ }
179
+ }
180
+
181
+ exports["default"] = daric;
@@ -0,0 +1,178 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Exchange = require('./base/Exchange.js');
6
+ var errors = require('./base/errors.js');
7
+
8
+ // ----------------------------------------------------------------------------
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * @class digikalagold
12
+ * @augments Exchange
13
+ */
14
+ class digikalagold extends Exchange["default"] {
15
+ describe() {
16
+ return this.deepExtend(super.describe(), {
17
+ 'id': 'digikalagold',
18
+ 'name': 'Digikala Gold',
19
+ 'countries': ['IR'],
20
+ 'rateLimit': 1000,
21
+ 'version': 'v1',
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
+ 'fetchMarkets': true,
32
+ 'fetchTicker': true,
33
+ 'fetchTickers': true,
34
+ 'otc': true,
35
+ },
36
+ 'options': {
37
+ 'defaultType': 'otc',
38
+ },
39
+ 'urls': {
40
+ 'api': {
41
+ 'public': 'https://api.digikala.com',
42
+ },
43
+ 'www': 'https://www.digikala.com',
44
+ 'doc': 'https://api.digikala.com/non-inventory/v1/prices/',
45
+ },
46
+ 'api': {
47
+ 'public': {
48
+ 'get': {
49
+ 'non-inventory/v1/prices/': 1,
50
+ },
51
+ },
52
+ },
53
+ });
54
+ }
55
+ async fetchMarkets(params = {}) {
56
+ const response = await this.fetchPrice(params);
57
+ return [
58
+ this.parseMarketEntry(response, 'gold18'),
59
+ this.parseMarketEntry(response, 'silver999'),
60
+ ];
61
+ }
62
+ async fetchPrice(params = {}) {
63
+ const response = await this.publicGetNonInventoryV1Prices(params);
64
+ const gold = this.safeDict(response, 'gold18', {});
65
+ if (this.safeNumber(gold, 'price') !== undefined) {
66
+ return response;
67
+ }
68
+ throw new errors.ExchangeError(this.id + ' returned an invalid response');
69
+ }
70
+ parseMarketEntry(response, id) {
71
+ const isGold = id === 'gold18';
72
+ let base = 'XAG';
73
+ if (isGold) {
74
+ base = 'XAU18';
75
+ }
76
+ const quote = 'IRT';
77
+ const info = this.safeDict(response, id, {});
78
+ return {
79
+ 'id': base + quote,
80
+ 'symbol': base + '/' + quote,
81
+ 'base': base,
82
+ 'quote': quote,
83
+ 'settle': undefined,
84
+ 'baseId': id,
85
+ 'quoteId': quote,
86
+ 'settleId': undefined,
87
+ 'type': 'otc',
88
+ 'spot': false,
89
+ 'margin': false,
90
+ 'swap': false,
91
+ 'future': false,
92
+ 'option': false,
93
+ 'active': true,
94
+ 'contract': false,
95
+ 'linear': undefined,
96
+ 'inverse': undefined,
97
+ 'contractSize': undefined,
98
+ 'expiry': undefined,
99
+ 'expiryDatetime': undefined,
100
+ 'strike': undefined,
101
+ 'optionType': undefined,
102
+ 'precision': {
103
+ 'amount': undefined,
104
+ 'price': undefined,
105
+ },
106
+ 'limits': {
107
+ 'leverage': { 'min': undefined, 'max': undefined },
108
+ 'amount': { 'min': undefined, 'max': undefined },
109
+ 'price': { 'min': undefined, 'max': undefined },
110
+ 'cost': { 'min': undefined, 'max': undefined },
111
+ },
112
+ 'created': undefined,
113
+ 'info': info,
114
+ };
115
+ }
116
+ async fetchTicker(symbol, params = {}) {
117
+ await this.loadMarkets();
118
+ const market = this.market(symbol);
119
+ const response = await this.fetchPrice(params);
120
+ return this.parseTicker(response, market);
121
+ }
122
+ async fetchTickers(symbols = undefined, params = {}) {
123
+ await this.loadMarkets();
124
+ if (symbols !== undefined) {
125
+ symbols = this.marketSymbols(symbols);
126
+ }
127
+ const response = await this.fetchPrice(params);
128
+ const result = {};
129
+ const marketSymbols = ['XAU18/IRT', 'XAG/IRT'];
130
+ for (let i = 0; i < marketSymbols.length; i++) {
131
+ const symbol = marketSymbols[i];
132
+ const market = this.market(symbol);
133
+ const ticker = this.parseTicker(response, market);
134
+ result[ticker['symbol']] = ticker;
135
+ }
136
+ return this.filterByArrayTickers(result, 'symbol', symbols);
137
+ }
138
+ parseTicker(response, market = undefined) {
139
+ const data = this.safeDict(response, market['baseId'], {});
140
+ let price = this.safeNumber(data, 'price');
141
+ if (price !== undefined) {
142
+ price = price * 100;
143
+ }
144
+ return this.safeTicker({
145
+ 'symbol': market['symbol'],
146
+ 'timestamp': undefined,
147
+ 'datetime': undefined,
148
+ 'high': undefined,
149
+ 'low': undefined,
150
+ 'bid': price,
151
+ 'bidVolume': undefined,
152
+ 'ask': price,
153
+ 'askVolume': undefined,
154
+ 'vwap': undefined,
155
+ 'open': undefined,
156
+ 'close': price,
157
+ 'last': price,
158
+ 'previousClose': undefined,
159
+ 'change': undefined,
160
+ 'percentage': undefined,
161
+ 'average': undefined,
162
+ 'baseVolume': undefined,
163
+ 'quoteVolume': undefined,
164
+ 'info': data,
165
+ }, market);
166
+ }
167
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
168
+ let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
169
+ const query = this.omit(params, this.extractParams(path));
170
+ if (Object.keys(query).length) {
171
+ url += '?' + this.urlencode(query);
172
+ }
173
+ headers = { 'Accept': 'application/json' };
174
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
175
+ }
176
+ }
177
+
178
+ exports["default"] = digikalagold;