ccxt-ir 4.18.1 → 4.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ccxt.browser.min.js +7 -7
- package/dist/cjs/ccxt.js +7 -1
- package/dist/cjs/src/baazar.js +8 -4
- package/dist/cjs/src/daric.js +11 -5
- package/dist/cjs/src/digikalagold.js +2 -2
- package/dist/cjs/src/gerami.js +180 -0
- package/dist/cjs/src/goldika.js +6 -2
- package/dist/cjs/src/hamrahgold.js +8 -4
- package/dist/cjs/src/melligold.js +11 -4
- package/dist/cjs/src/ramzinex.js +5 -2
- package/dist/cjs/src/talapp.js +10 -4
- package/dist/cjs/src/technogold.js +8 -4
- package/dist/cjs/src/wallgold.js +6 -2
- package/dist/cjs/src/zarafza.js +8 -4
- package/dist/cjs/src/zarminex.js +5 -5
- package/dist/cjs/src/zarniv.js +8 -5
- package/dist/cjs/src/zarpin.js +185 -0
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/gerami.d.ts +8 -0
- package/js/src/abstract/gerami.js +11 -0
- package/js/src/abstract/zarpin.d.ts +8 -0
- package/js/src/abstract/zarpin.js +11 -0
- package/js/src/baazar.js +8 -4
- package/js/src/daric.js +11 -5
- package/js/src/digikalagold.js +2 -2
- package/js/src/gerami.d.ts +20 -0
- package/js/src/gerami.js +179 -0
- package/js/src/goldika.js +6 -2
- package/js/src/hamrahgold.js +8 -4
- package/js/src/melligold.js +11 -4
- package/js/src/ramzinex.js +5 -2
- package/js/src/talapp.js +10 -4
- package/js/src/technogold.js +8 -4
- package/js/src/wallgold.js +6 -2
- package/js/src/zarafza.js +8 -4
- package/js/src/zarminex.js +5 -5
- package/js/src/zarniv.js +8 -5
- package/js/src/zarpin.d.ts +21 -0
- package/js/src/zarpin.js +184 -0
- package/js/test.js +49 -48
- package/package.json +1 -1
package/js/src/goldika.js
CHANGED
|
@@ -127,6 +127,10 @@ export default class goldika extends Exchange {
|
|
|
127
127
|
if (ask !== undefined) {
|
|
128
128
|
ask = ask / 10;
|
|
129
129
|
}
|
|
130
|
+
let last = bid;
|
|
131
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
132
|
+
last = ask;
|
|
133
|
+
}
|
|
130
134
|
return this.safeTicker({
|
|
131
135
|
'symbol': market['symbol'],
|
|
132
136
|
'timestamp': timestamp,
|
|
@@ -139,8 +143,8 @@ export default class goldika extends Exchange {
|
|
|
139
143
|
'askVolume': undefined,
|
|
140
144
|
'vwap': undefined,
|
|
141
145
|
'open': undefined,
|
|
142
|
-
'close':
|
|
143
|
-
'last':
|
|
146
|
+
'close': last,
|
|
147
|
+
'last': last,
|
|
144
148
|
'previousClose': undefined,
|
|
145
149
|
'change': undefined,
|
|
146
150
|
'percentage': this.safeNumber(data, 'daily_change_percent'),
|
package/js/src/hamrahgold.js
CHANGED
|
@@ -123,8 +123,8 @@ export default class hamrahgold extends Exchange {
|
|
|
123
123
|
const sell = this.safeDict(sellResponse, 'data', {});
|
|
124
124
|
const changes = this.safeDict(sell, 'changes', {});
|
|
125
125
|
const dailyChange = this.safeDict(changes, '1d', {});
|
|
126
|
-
let bid = this.safeNumber(
|
|
127
|
-
let ask = this.safeNumber(
|
|
126
|
+
let bid = this.safeNumber(sell, 'current');
|
|
127
|
+
let ask = this.safeNumber(buy, 'current');
|
|
128
128
|
let previousClose = this.safeNumber(dailyChange, 'price');
|
|
129
129
|
if (bid !== undefined) {
|
|
130
130
|
bid = bid / 10;
|
|
@@ -135,6 +135,10 @@ export default class hamrahgold extends Exchange {
|
|
|
135
135
|
if (previousClose !== undefined) {
|
|
136
136
|
previousClose = previousClose / 10;
|
|
137
137
|
}
|
|
138
|
+
let last = bid;
|
|
139
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
140
|
+
last = ask;
|
|
141
|
+
}
|
|
138
142
|
return this.safeTicker({
|
|
139
143
|
'symbol': market['symbol'],
|
|
140
144
|
'timestamp': undefined,
|
|
@@ -147,8 +151,8 @@ export default class hamrahgold extends Exchange {
|
|
|
147
151
|
'askVolume': undefined,
|
|
148
152
|
'vwap': undefined,
|
|
149
153
|
'open': undefined,
|
|
150
|
-
'close':
|
|
151
|
-
'last':
|
|
154
|
+
'close': last,
|
|
155
|
+
'last': last,
|
|
152
156
|
'previousClose': previousClose,
|
|
153
157
|
'change': undefined,
|
|
154
158
|
'percentage': this.safeNumber(dailyChange, 'percent'),
|
package/js/src/melligold.js
CHANGED
|
@@ -104,7 +104,10 @@ export default class melligold extends Exchange {
|
|
|
104
104
|
parseMarket(response, baseId = undefined) {
|
|
105
105
|
const data = this.safeDict(response, 'data', {});
|
|
106
106
|
const lowerAmounts = this.safeDict(data, 'lower_amounts', {});
|
|
107
|
-
|
|
107
|
+
let base = this.safeCurrencyCode(baseId);
|
|
108
|
+
if (base === 'XAG') {
|
|
109
|
+
base = 'XAG-1G';
|
|
110
|
+
}
|
|
108
111
|
const quote = 'IRT';
|
|
109
112
|
return {
|
|
110
113
|
'id': base + quote,
|
|
@@ -162,7 +165,7 @@ export default class melligold extends Exchange {
|
|
|
162
165
|
symbols = this.marketSymbols(symbols);
|
|
163
166
|
}
|
|
164
167
|
const result = {};
|
|
165
|
-
const marketSymbols = ['XAU18/IRT', 'XAG/IRT'];
|
|
168
|
+
const marketSymbols = ['XAU18/IRT', 'XAG-1G/IRT'];
|
|
166
169
|
for (let i = 0; i < marketSymbols.length; i++) {
|
|
167
170
|
const market = this.market(marketSymbols[i]);
|
|
168
171
|
const response = await this.requestWithCookie(this.extend({
|
|
@@ -178,6 +181,10 @@ export default class melligold extends Exchange {
|
|
|
178
181
|
const data = this.safeDict(response, 'data', {});
|
|
179
182
|
const buy = this.safeNumber(data, 'price_buy');
|
|
180
183
|
const sell = this.safeNumber(data, 'price_sell');
|
|
184
|
+
let last = buy;
|
|
185
|
+
if (sell !== undefined && (last === undefined || sell > last)) {
|
|
186
|
+
last = sell;
|
|
187
|
+
}
|
|
181
188
|
return this.safeTicker({
|
|
182
189
|
'symbol': market['symbol'],
|
|
183
190
|
'timestamp': this.safeTimestamp(data, 'timestamp'),
|
|
@@ -190,8 +197,8 @@ export default class melligold extends Exchange {
|
|
|
190
197
|
'askVolume': undefined,
|
|
191
198
|
'vwap': undefined,
|
|
192
199
|
'open': undefined,
|
|
193
|
-
'close':
|
|
194
|
-
'last':
|
|
200
|
+
'close': last,
|
|
201
|
+
'last': last,
|
|
195
202
|
'previousClose': undefined,
|
|
196
203
|
'change': undefined,
|
|
197
204
|
'percentage': undefined,
|
package/js/src/ramzinex.js
CHANGED
|
@@ -361,7 +361,6 @@ export default class ramzinex extends Exchange {
|
|
|
361
361
|
let open = this.safeFloat(tickerinfo, 'open');
|
|
362
362
|
let close = this.safeFloat(tickerinfo, 'close');
|
|
363
363
|
const change = this.safeFloat(tickerinfo, 'change_percent');
|
|
364
|
-
let last = this.safeFloat(ticker, 'buy');
|
|
365
364
|
let quoteVolume = this.safeFloat(tickerinfo, 'quote_volume');
|
|
366
365
|
const baseVolume = this.safeFloat(tickerinfo, 'base_volume');
|
|
367
366
|
if (marketinfo['quote'] === 'IRT') {
|
|
@@ -371,9 +370,13 @@ export default class ramzinex extends Exchange {
|
|
|
371
370
|
ask = ask ? ask / 10 : 0;
|
|
372
371
|
open = open ? open / 10 : 0;
|
|
373
372
|
close = close ? close / 10 : 0;
|
|
374
|
-
last = last ? last / 10 : 0;
|
|
375
373
|
quoteVolume = quoteVolume ? quoteVolume / 10 : 0;
|
|
376
374
|
}
|
|
375
|
+
let last = bid;
|
|
376
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
377
|
+
last = ask;
|
|
378
|
+
}
|
|
379
|
+
close = last;
|
|
377
380
|
return this.safeTicker({
|
|
378
381
|
'symbol': symbol,
|
|
379
382
|
'timestamp': undefined,
|
package/js/src/talapp.js
CHANGED
|
@@ -120,20 +120,26 @@ export default class talapp extends Exchange {
|
|
|
120
120
|
if (fetchedAt !== undefined) {
|
|
121
121
|
timestamp = this.parse8601(fetchedAt.replace(' ', 'T') + '+03:30');
|
|
122
122
|
}
|
|
123
|
+
const bid = this.safeNumber(response, 'buy_gold');
|
|
124
|
+
const ask = this.safeNumber(response, 'sell_gold');
|
|
125
|
+
let last = bid;
|
|
126
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
127
|
+
last = ask;
|
|
128
|
+
}
|
|
123
129
|
return this.safeTicker({
|
|
124
130
|
'symbol': market['symbol'],
|
|
125
131
|
'timestamp': timestamp,
|
|
126
132
|
'datetime': undefined,
|
|
127
133
|
'high': undefined,
|
|
128
134
|
'low': undefined,
|
|
129
|
-
'bid':
|
|
135
|
+
'bid': bid,
|
|
130
136
|
'bidVolume': undefined,
|
|
131
|
-
'ask':
|
|
137
|
+
'ask': ask,
|
|
132
138
|
'askVolume': undefined,
|
|
133
139
|
'vwap': undefined,
|
|
134
140
|
'open': undefined,
|
|
135
|
-
'close':
|
|
136
|
-
'last':
|
|
141
|
+
'close': last,
|
|
142
|
+
'last': last,
|
|
137
143
|
'previousClose': undefined,
|
|
138
144
|
'change': undefined,
|
|
139
145
|
'percentage': this.safeNumber(response, 'sell_diff'),
|
package/js/src/technogold.js
CHANGED
|
@@ -117,20 +117,24 @@ export default class technogold extends Exchange {
|
|
|
117
117
|
const prices = this.safeDict(response, 'results', {});
|
|
118
118
|
const buy = this.safeNumber(prices, 'buy_price');
|
|
119
119
|
const sell = this.safeNumber(prices, 'sell_price');
|
|
120
|
+
let last = buy;
|
|
121
|
+
if (sell !== undefined && (last === undefined || sell > last)) {
|
|
122
|
+
last = sell;
|
|
123
|
+
}
|
|
120
124
|
return this.safeTicker({
|
|
121
125
|
'symbol': market['symbol'],
|
|
122
126
|
'timestamp': undefined,
|
|
123
127
|
'datetime': undefined,
|
|
124
128
|
'high': undefined,
|
|
125
129
|
'low': undefined,
|
|
126
|
-
'bid':
|
|
130
|
+
'bid': buy,
|
|
127
131
|
'bidVolume': undefined,
|
|
128
|
-
'ask':
|
|
132
|
+
'ask': sell,
|
|
129
133
|
'askVolume': undefined,
|
|
130
134
|
'vwap': undefined,
|
|
131
135
|
'open': undefined,
|
|
132
|
-
'close':
|
|
133
|
-
'last':
|
|
136
|
+
'close': last,
|
|
137
|
+
'last': last,
|
|
134
138
|
'previousClose': undefined,
|
|
135
139
|
'change': undefined,
|
|
136
140
|
'percentage': undefined,
|
package/js/src/wallgold.js
CHANGED
|
@@ -126,6 +126,10 @@ export default class wallgold extends Exchange {
|
|
|
126
126
|
const sellResult = this.safeDict(sellResponse, 'result', buyResult);
|
|
127
127
|
const bid = this.safeNumber(buyResult, 'price');
|
|
128
128
|
const ask = this.safeNumber(sellResult, 'price');
|
|
129
|
+
let last = bid;
|
|
130
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
131
|
+
last = ask;
|
|
132
|
+
}
|
|
129
133
|
const currentTime = this.safeString(buyResult, 'currentTime');
|
|
130
134
|
const timestamp = currentTime ? this.parse8601(currentTime) : undefined;
|
|
131
135
|
return this.safeTicker({
|
|
@@ -140,8 +144,8 @@ export default class wallgold extends Exchange {
|
|
|
140
144
|
'askVolume': undefined,
|
|
141
145
|
'vwap': undefined,
|
|
142
146
|
'open': undefined,
|
|
143
|
-
'close':
|
|
144
|
-
'last':
|
|
147
|
+
'close': last,
|
|
148
|
+
'last': last,
|
|
145
149
|
'previousClose': undefined,
|
|
146
150
|
'change': undefined,
|
|
147
151
|
'percentage': undefined,
|
package/js/src/zarafza.js
CHANGED
|
@@ -121,8 +121,12 @@ export default class zarafza extends Exchange {
|
|
|
121
121
|
const gold = this.safeDict(data, 'G18', {});
|
|
122
122
|
const buy = this.safeDict(gold, 'buy', {});
|
|
123
123
|
const sell = this.safeDict(gold, 'sell', {});
|
|
124
|
-
const bid = this.safeNumber(
|
|
125
|
-
const ask = this.safeNumber(
|
|
124
|
+
const bid = this.safeNumber(sell, 'price');
|
|
125
|
+
const ask = this.safeNumber(buy, 'price');
|
|
126
|
+
let last = bid;
|
|
127
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
128
|
+
last = ask;
|
|
129
|
+
}
|
|
126
130
|
return this.safeTicker({
|
|
127
131
|
'symbol': market['symbol'],
|
|
128
132
|
'timestamp': undefined,
|
|
@@ -135,8 +139,8 @@ export default class zarafza extends Exchange {
|
|
|
135
139
|
'askVolume': undefined,
|
|
136
140
|
'vwap': undefined,
|
|
137
141
|
'open': undefined,
|
|
138
|
-
'close':
|
|
139
|
-
'last':
|
|
142
|
+
'close': last,
|
|
143
|
+
'last': last,
|
|
140
144
|
'previousClose': undefined,
|
|
141
145
|
'change': undefined,
|
|
142
146
|
'percentage': this.safeNumber(sell, 'change'),
|
package/js/src/zarminex.js
CHANGED
|
@@ -114,17 +114,17 @@ export default class zarminex extends Exchange {
|
|
|
114
114
|
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
115
115
|
}
|
|
116
116
|
parseTicker(response, market = undefined) {
|
|
117
|
-
let bid = this.safeNumber(response, '
|
|
118
|
-
let ask = this.safeNumber(response, '
|
|
119
|
-
let last = this.safeNumber(response, 'cached_price');
|
|
117
|
+
let bid = this.safeNumber(response, 'buy');
|
|
118
|
+
let ask = this.safeNumber(response, 'sell');
|
|
120
119
|
if (bid !== undefined) {
|
|
121
120
|
bid = bid / 10;
|
|
122
121
|
}
|
|
123
122
|
if (ask !== undefined) {
|
|
124
123
|
ask = ask / 10;
|
|
125
124
|
}
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
let last = bid;
|
|
126
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
127
|
+
last = ask;
|
|
128
128
|
}
|
|
129
129
|
return this.safeTicker({
|
|
130
130
|
'symbol': market['symbol'],
|
package/js/src/zarniv.js
CHANGED
|
@@ -68,7 +68,7 @@ export default class zarniv extends Exchange {
|
|
|
68
68
|
];
|
|
69
69
|
}
|
|
70
70
|
parseMarketEntry(response, metal) {
|
|
71
|
-
let base = 'XAG';
|
|
71
|
+
let base = 'XAG-1G';
|
|
72
72
|
if (metal === 'gold') {
|
|
73
73
|
base = 'XAU18';
|
|
74
74
|
}
|
|
@@ -125,7 +125,7 @@ export default class zarniv extends Exchange {
|
|
|
125
125
|
const goldResponse = await this.fetchPrice('gold', params);
|
|
126
126
|
const silverResponse = await this.fetchPrice('silver', params);
|
|
127
127
|
const goldMarket = this.market('XAU18/IRT');
|
|
128
|
-
const silverMarket = this.market('XAG/IRT');
|
|
128
|
+
const silverMarket = this.market('XAG-1G/IRT');
|
|
129
129
|
const goldTicker = this.parseTicker(goldResponse, goldMarket);
|
|
130
130
|
const silverTicker = this.parseTicker(silverResponse, silverMarket);
|
|
131
131
|
const result = {};
|
|
@@ -139,9 +139,12 @@ export default class zarniv extends Exchange {
|
|
|
139
139
|
if (serverTime !== undefined) {
|
|
140
140
|
timestamp = this.parse8601(serverTime + '+03:30');
|
|
141
141
|
}
|
|
142
|
-
const bid = this.safeNumber(response, '
|
|
143
|
-
const ask = this.safeNumber(response, '
|
|
144
|
-
|
|
142
|
+
const bid = this.safeNumber(response, 'buy_price_per_gram');
|
|
143
|
+
const ask = this.safeNumber(response, 'sell_price_per_gram');
|
|
144
|
+
let last = bid;
|
|
145
|
+
if (ask !== undefined && (last === undefined || ask > last)) {
|
|
146
|
+
last = ask;
|
|
147
|
+
}
|
|
145
148
|
return this.safeTicker({
|
|
146
149
|
'symbol': market['symbol'],
|
|
147
150
|
'timestamp': timestamp,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Exchange from './base/Exchange.js';
|
|
2
|
+
import { Market, Strings, Ticker, Tickers } from './base/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* @class zarpin
|
|
5
|
+
* @augments Exchange
|
|
6
|
+
*/
|
|
7
|
+
export default class zarpin extends Exchange {
|
|
8
|
+
describe(): any;
|
|
9
|
+
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
10
|
+
parseMarkets(response: any): Market[];
|
|
11
|
+
parseMarket(market: any): Market;
|
|
12
|
+
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
13
|
+
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
14
|
+
parseTicker(response: any, market?: Market): Ticker;
|
|
15
|
+
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
16
|
+
url: string;
|
|
17
|
+
method: string;
|
|
18
|
+
body: any;
|
|
19
|
+
headers: any;
|
|
20
|
+
};
|
|
21
|
+
}
|
package/js/src/zarpin.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
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 './base/Exchange.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* @class zarpin
|
|
12
|
+
* @augments Exchange
|
|
13
|
+
*/
|
|
14
|
+
export default class zarpin extends Exchange {
|
|
15
|
+
describe() {
|
|
16
|
+
return this.deepExtend(super.describe(), {
|
|
17
|
+
'id': 'zarpin',
|
|
18
|
+
'name': 'Zarpin',
|
|
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-khazaneh.zarpin.com',
|
|
42
|
+
},
|
|
43
|
+
'www': 'https://zarpin.com',
|
|
44
|
+
'doc': 'https://api-khazaneh.zarpin.com/v1/prc/prices',
|
|
45
|
+
},
|
|
46
|
+
'api': {
|
|
47
|
+
'public': {
|
|
48
|
+
'get': {
|
|
49
|
+
'v1/prc/prices': 1,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async fetchMarkets(params = {}) {
|
|
56
|
+
const response = await this.publicGetV1PrcPrices(params);
|
|
57
|
+
return this.parseMarkets(response);
|
|
58
|
+
}
|
|
59
|
+
parseMarkets(response) {
|
|
60
|
+
let prices = [];
|
|
61
|
+
if (Array.isArray(response)) {
|
|
62
|
+
prices = response;
|
|
63
|
+
}
|
|
64
|
+
const result = [];
|
|
65
|
+
for (let i = 0; i < prices.length; i++) {
|
|
66
|
+
const price = prices[i];
|
|
67
|
+
const code = this.safeString(price, 'code');
|
|
68
|
+
if (code === 'GOLD_IRT' || code === 'SILVER_IRT') {
|
|
69
|
+
result.push(this.parseMarket(price));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
parseMarket(market) {
|
|
75
|
+
const code = this.safeString(market, 'code');
|
|
76
|
+
let base = 'XAG-1G';
|
|
77
|
+
if (code === 'GOLD_IRT') {
|
|
78
|
+
base = 'XAU18';
|
|
79
|
+
}
|
|
80
|
+
const quote = 'IRT';
|
|
81
|
+
return {
|
|
82
|
+
'id': code,
|
|
83
|
+
'symbol': base + '/' + quote,
|
|
84
|
+
'base': base,
|
|
85
|
+
'quote': quote,
|
|
86
|
+
'settle': undefined,
|
|
87
|
+
'baseId': code,
|
|
88
|
+
'quoteId': quote,
|
|
89
|
+
'settleId': undefined,
|
|
90
|
+
'type': 'otc',
|
|
91
|
+
'spot': false,
|
|
92
|
+
'margin': false,
|
|
93
|
+
'swap': false,
|
|
94
|
+
'future': false,
|
|
95
|
+
'option': false,
|
|
96
|
+
'active': this.safeNumber(market, 'price') !== undefined,
|
|
97
|
+
'contract': false,
|
|
98
|
+
'linear': undefined,
|
|
99
|
+
'inverse': undefined,
|
|
100
|
+
'contractSize': undefined,
|
|
101
|
+
'expiry': undefined,
|
|
102
|
+
'expiryDatetime': undefined,
|
|
103
|
+
'strike': undefined,
|
|
104
|
+
'optionType': undefined,
|
|
105
|
+
'precision': {
|
|
106
|
+
'amount': undefined,
|
|
107
|
+
'price': undefined,
|
|
108
|
+
},
|
|
109
|
+
'limits': {
|
|
110
|
+
'leverage': { 'min': undefined, 'max': undefined },
|
|
111
|
+
'amount': { 'min': undefined, 'max': undefined },
|
|
112
|
+
'price': { 'min': undefined, 'max': undefined },
|
|
113
|
+
'cost': { 'min': undefined, 'max': undefined },
|
|
114
|
+
},
|
|
115
|
+
'created': undefined,
|
|
116
|
+
'info': market,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
async fetchTicker(symbol, params = {}) {
|
|
120
|
+
await this.loadMarkets();
|
|
121
|
+
const market = this.market(symbol);
|
|
122
|
+
const response = await this.publicGetV1PrcPrices(params);
|
|
123
|
+
return this.parseTicker(response, market);
|
|
124
|
+
}
|
|
125
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
126
|
+
await this.loadMarkets();
|
|
127
|
+
if (symbols !== undefined) {
|
|
128
|
+
symbols = this.marketSymbols(symbols);
|
|
129
|
+
}
|
|
130
|
+
const response = await this.publicGetV1PrcPrices(params);
|
|
131
|
+
const markets = this.parseMarkets(response);
|
|
132
|
+
const result = {};
|
|
133
|
+
for (let i = 0; i < markets.length; i++) {
|
|
134
|
+
const ticker = this.parseTicker(response, markets[i]);
|
|
135
|
+
result[ticker['symbol']] = ticker;
|
|
136
|
+
}
|
|
137
|
+
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
138
|
+
}
|
|
139
|
+
parseTicker(response, market = undefined) {
|
|
140
|
+
let prices = [];
|
|
141
|
+
if (Array.isArray(response)) {
|
|
142
|
+
prices = response;
|
|
143
|
+
}
|
|
144
|
+
let price = {};
|
|
145
|
+
for (let i = 0; i < prices.length; i++) {
|
|
146
|
+
const entry = prices[i];
|
|
147
|
+
if (this.safeString(entry, 'code') === market['baseId']) {
|
|
148
|
+
price = entry;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return this.safeTicker({
|
|
153
|
+
'symbol': market['symbol'],
|
|
154
|
+
'timestamp': undefined,
|
|
155
|
+
'datetime': undefined,
|
|
156
|
+
'high': this.safeNumber(price, 'max_24h_price'),
|
|
157
|
+
'low': this.safeNumber(price, 'min_24h_price'),
|
|
158
|
+
'bid': this.safeNumber(price, 'price'),
|
|
159
|
+
'bidVolume': undefined,
|
|
160
|
+
'ask': this.safeNumber(price, 'price'),
|
|
161
|
+
'askVolume': undefined,
|
|
162
|
+
'vwap': undefined,
|
|
163
|
+
'open': this.safeNumber(price, 'price_at_in_last_24h'),
|
|
164
|
+
'close': this.safeNumber(price, 'price'),
|
|
165
|
+
'last': this.safeNumber(price, 'price'),
|
|
166
|
+
'previousClose': this.safeNumber(price, 'price_at_in_last_24h'),
|
|
167
|
+
'change': undefined,
|
|
168
|
+
'percentage': this.safeNumber(price, 'price_change_24h'),
|
|
169
|
+
'average': undefined,
|
|
170
|
+
'baseVolume': undefined,
|
|
171
|
+
'quoteVolume': undefined,
|
|
172
|
+
'info': price,
|
|
173
|
+
}, market);
|
|
174
|
+
}
|
|
175
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
176
|
+
let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
|
|
177
|
+
const query = this.omit(params, this.extractParams(path));
|
|
178
|
+
if (Object.keys(query).length) {
|
|
179
|
+
url += '?' + this.urlencode(query);
|
|
180
|
+
}
|
|
181
|
+
headers = { 'Accept': 'application/json' };
|
|
182
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
183
|
+
}
|
|
184
|
+
}
|
package/js/test.js
CHANGED
|
@@ -4,64 +4,65 @@
|
|
|
4
4
|
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
5
|
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
import melligold from './src/melligold.js';
|
|
9
|
-
import technogold from './src/technogold.js';
|
|
10
|
-
import wallgold from './src/wallgold.js';
|
|
11
|
-
import milligold from './src/milligold.js';
|
|
7
|
+
import ramzinex from './src/ramzinex.js';
|
|
12
8
|
const exchanges = [
|
|
13
|
-
{ id: '
|
|
14
|
-
{ id: '
|
|
15
|
-
{ id: '
|
|
16
|
-
{ id: '
|
|
17
|
-
{ id: '
|
|
9
|
+
// { 'id': 'technogold', 'Exchange': technogold },
|
|
10
|
+
// { 'id': 'baazar', 'Exchange': baazar },
|
|
11
|
+
// { 'id': 'hamrahgold', 'Exchange': hamrahgold },
|
|
12
|
+
// { 'id': 'zarniv', 'Exchange': zarniv },
|
|
13
|
+
// { 'id': 'zarminex', 'Exchange': zarminex },
|
|
14
|
+
// { 'id': 'zarafza', 'Exchange': zarafza },
|
|
15
|
+
// { 'id': 'daric', 'Exchange': daric },
|
|
16
|
+
// { 'id': 'digikalagold', 'Exchange': digikalagold },
|
|
17
|
+
// { 'id': 'gerami', 'Exchange': gerami },
|
|
18
|
+
// { 'id': 'goldika', 'Exchange': goldika },
|
|
19
|
+
// { 'id': 'goldis', 'Exchange': goldis },
|
|
20
|
+
// { 'id': 'melligold', 'Exchange': melligold },
|
|
21
|
+
// { 'id': 'milligold', 'Exchange': milligold },
|
|
22
|
+
{ 'id': 'ramzinex', 'Exchange': ramzinex },
|
|
23
|
+
// { 'id': 'wallgold', 'Exchange': wallgold },
|
|
24
|
+
// { 'id': 'talapp', 'Exchange': talapp },
|
|
25
|
+
// { 'id': 'talaavan', 'Exchange': talaavan },
|
|
26
|
+
// { 'id': 'talasea', 'Exchange': talasea },
|
|
27
|
+
// { 'id': 'zarpin', 'Exchange': zarpin },
|
|
18
28
|
];
|
|
19
|
-
async function testExchange(id,
|
|
20
|
-
const exchange =
|
|
29
|
+
async function testExchange(id, ExchangeClass) {
|
|
30
|
+
const exchange = new ExchangeClass({
|
|
31
|
+
'enableRateLimit': true,
|
|
32
|
+
'timeout': 20000,
|
|
33
|
+
});
|
|
21
34
|
try {
|
|
22
|
-
const
|
|
23
|
-
const symbols = Object.keys(
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
const tickers = await exchange.fetchTickers();
|
|
36
|
+
const symbols = Object.keys(tickers);
|
|
37
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
38
|
+
const symbol = symbols[i];
|
|
39
|
+
const ticker = tickers[symbol];
|
|
40
|
+
const bid = ticker['bid'];
|
|
41
|
+
const ask = ticker['ask'];
|
|
42
|
+
const last = ticker['last'];
|
|
43
|
+
if (bid !== undefined || ask !== undefined) {
|
|
44
|
+
let expectedLast = bid;
|
|
45
|
+
if (ask !== undefined && (expectedLast === undefined || ask > expectedLast)) {
|
|
46
|
+
expectedLast = ask;
|
|
47
|
+
}
|
|
48
|
+
if (last !== expectedLast) {
|
|
49
|
+
throw new Error(symbol + ' last=' + last + ', expected=' + expectedLast);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
console.log(id + ' ' + symbol + ' bid=' + bid + ' ask=' + ask + ' last=' + last + ' OK');
|
|
26
53
|
}
|
|
27
|
-
const symbol = symbols[0];
|
|
28
|
-
const ticker = await exchange.fetchTicker(symbol, { 'type': 'otc' });
|
|
29
|
-
const tickers = await exchange.fetchTickers(symbols, { 'type': 'otc' });
|
|
30
|
-
if (ticker['symbol'] !== symbol) {
|
|
31
|
-
throw new Error(`fetchTicker returned ${ticker['symbol']} instead of ${symbol}`);
|
|
32
|
-
}
|
|
33
|
-
if (!(symbol in tickers)) {
|
|
34
|
-
throw new Error(`fetchTickers did not return ${symbol}`);
|
|
35
|
-
}
|
|
36
|
-
console.log(id, {
|
|
37
|
-
markets: symbols,
|
|
38
|
-
ticker: {
|
|
39
|
-
symbol: ticker['symbol'],
|
|
40
|
-
bid: ticker['bid'],
|
|
41
|
-
ask: ticker['ask'],
|
|
42
|
-
last: ticker['last'],
|
|
43
|
-
timestamp: ticker['timestamp'],
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
54
|
}
|
|
47
55
|
finally {
|
|
48
56
|
await exchange.close();
|
|
49
57
|
}
|
|
50
58
|
}
|
|
51
59
|
async function main() {
|
|
52
|
-
let failed = false;
|
|
53
60
|
for (let i = 0; i < exchanges.length; i++) {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
await testExchange(exchange.id, exchange.create);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
failed = true;
|
|
60
|
-
console.error(`${exchange.id} test failed:`, error);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (failed) {
|
|
64
|
-
process.exitCode = 1;
|
|
61
|
+
const entry = exchanges[i];
|
|
62
|
+
await testExchange(entry['id'], entry['Exchange']);
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
|
-
|
|
65
|
+
main().catch((error) => {
|
|
66
|
+
console.error('Gold platform price test failed:', error);
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
});
|
package/package.json
CHANGED