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.
- package/README.md +4 -4
- package/dist/373.ccxt.browser.js +1 -1
- package/dist/373.ccxt.browser.min.js +1 -1
- package/dist/ccxt.browser.min.js +15 -15
- package/dist/cjs/ccxt.js +34 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/baazar.js +160 -0
- package/dist/cjs/src/daric.js +181 -0
- package/dist/cjs/src/digikalagold.js +178 -0
- package/dist/cjs/src/goldcore.js +155 -0
- package/dist/cjs/src/goldika.js +163 -0
- package/dist/cjs/src/goldis.js +157 -0
- package/dist/cjs/src/hamrahgold.js +171 -0
- package/dist/cjs/src/talapp.js +156 -0
- package/dist/cjs/src/zarafza.js +159 -0
- package/dist/cjs/src/zarminex.js +162 -0
- package/dist/cjs/src/zarniv.js +178 -0
- package/js/ccxt.d.ts +35 -2
- package/js/ccxt.js +24 -2
- package/js/src/abstract/baazar.d.ts +8 -0
- package/js/src/abstract/baazar.js +11 -0
- package/js/src/abstract/daric.d.ts +8 -0
- package/js/src/abstract/daric.js +11 -0
- package/js/src/abstract/digikalagold.d.ts +8 -0
- package/js/src/abstract/digikalagold.js +11 -0
- package/js/src/abstract/goldcore.d.ts +8 -0
- package/js/src/abstract/goldcore.js +11 -0
- package/js/src/abstract/goldika.d.ts +8 -0
- package/js/src/abstract/goldika.js +11 -0
- package/js/src/abstract/goldis.d.ts +8 -0
- package/js/src/abstract/goldis.js +11 -0
- package/js/src/abstract/hamrahgold.d.ts +8 -0
- package/js/src/abstract/hamrahgold.js +11 -0
- package/js/src/abstract/talapp.d.ts +8 -0
- package/js/src/abstract/talapp.js +11 -0
- package/js/src/abstract/zarafza.d.ts +8 -0
- package/js/src/abstract/zarafza.js +11 -0
- package/js/src/abstract/zarminex.d.ts +8 -0
- package/js/src/abstract/zarminex.js +11 -0
- package/js/src/abstract/zarniv.d.ts +9 -0
- package/js/src/abstract/zarniv.js +11 -0
- package/js/src/baazar.d.ts +20 -0
- package/js/src/baazar.js +159 -0
- package/js/src/daric.d.ts +22 -0
- package/js/src/daric.js +180 -0
- package/js/src/digikalagold.d.ts +21 -0
- package/js/src/digikalagold.js +177 -0
- package/js/src/goldcore.d.ts +20 -0
- package/js/src/goldcore.js +154 -0
- package/js/src/goldika.d.ts +20 -0
- package/js/src/goldika.js +162 -0
- package/js/src/goldis.d.ts +21 -0
- package/js/src/goldis.js +156 -0
- package/js/src/hamrahgold.d.ts +21 -0
- package/js/src/hamrahgold.js +170 -0
- package/js/src/talapp.d.ts +20 -0
- package/js/src/talapp.js +155 -0
- package/js/src/zarafza.d.ts +20 -0
- package/js/src/zarafza.js +158 -0
- package/js/src/zarminex.d.ts +20 -0
- package/js/src/zarminex.js +161 -0
- package/js/src/zarniv.d.ts +21 -0
- package/js/src/zarniv.js +177 -0
- package/js/test.js +50 -43
- 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.
|
|
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;
|
package/dist/cjs/package.json
CHANGED
|
@@ -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;
|