@icgio/clients-config 1.0.169 → 1.0.171
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/.gitsecret/paths/mapping.cfg +1 -1
- package/config.js +107 -107
- package/config.json +44 -0
- package/data-source.js.secret +0 -0
- package/package.json +27 -27
- package/secretread.js.secret +0 -0
- package/update-config-json.js +278 -278
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
secretread.js:
|
|
1
|
+
secretread.js:b1008ac77c18a30976430384fbdf5f95e7121e9671f2d34c730687d6b00ba86c
|
|
2
2
|
data-source.js:7914c8a583a6dc1ed54909da44dbaf3b76c39adb98a63706ad277cc23de7b81b
|
package/config.js
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
const _ = require('lodash')
|
|
2
|
-
const config_data = require('./config.json')
|
|
3
|
-
|
|
4
|
-
const client_exchange_pairs = config_data.client_exchange_pairs
|
|
5
|
-
module.exports.client_exchange_pairs = client_exchange_pairs
|
|
6
|
-
|
|
7
|
-
const client_not_include_exchanges = config_data.client_not_include_exchanges
|
|
8
|
-
module.exports.client_not_include_exchanges = client_not_include_exchanges
|
|
9
|
-
|
|
10
|
-
const client_pair_main_exchanges = config_data.client_pair_main_exchanges
|
|
11
|
-
module.exports.client_pair_main_exchanges = client_pair_main_exchanges
|
|
12
|
-
|
|
13
|
-
let client_exchange_currencies = {}
|
|
14
|
-
for (let client in client_exchange_pairs) {
|
|
15
|
-
for (let exchange in client_exchange_pairs[client]) {
|
|
16
|
-
_.set(
|
|
17
|
-
client_exchange_currencies,
|
|
18
|
-
[client, exchange],
|
|
19
|
-
client_exchange_pairs[client][exchange].map((pair) => pair.replace(client, ''))
|
|
20
|
-
)
|
|
21
|
-
client_exchange_currencies[client][exchange].push(client)
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
module.exports.client_exchange_currencies = client_exchange_currencies
|
|
25
|
-
|
|
26
|
-
/*
|
|
27
|
-
{
|
|
28
|
-
AAAXXX: [Huobi, Okx],
|
|
29
|
-
CCCXXX: [Binance, Bitz]
|
|
30
|
-
}
|
|
31
|
-
*/
|
|
32
|
-
let client_pair_exchanges = {}
|
|
33
|
-
_.keys(client_exchange_pairs).map((cur) =>
|
|
34
|
-
_.keys(client_exchange_pairs[cur]).map((exchange) => {
|
|
35
|
-
client_exchange_pairs[cur][exchange].map((pair) => {
|
|
36
|
-
if (!client_pair_exchanges[cur] || !client_pair_exchanges[cur][pair]) {
|
|
37
|
-
_.set(client_pair_exchanges, [cur, pair], [])
|
|
38
|
-
}
|
|
39
|
-
client_pair_exchanges[cur][pair].push(exchange)
|
|
40
|
-
})
|
|
41
|
-
})
|
|
42
|
-
)
|
|
43
|
-
module.exports.client_pair_exchanges = client_pair_exchanges
|
|
44
|
-
|
|
45
|
-
/*
|
|
46
|
-
{
|
|
47
|
-
Binance: [AAAXXX, AAAYYY, BBBYYY, BBBZZZ],
|
|
48
|
-
Huobi: [CCCXXX, CCCYYY, DDDZZZ]
|
|
49
|
-
}
|
|
50
|
-
*/
|
|
51
|
-
let exchange_pairs = {}
|
|
52
|
-
_.values(client_exchange_pairs).map((exchange_pair_dict) => _.forEach(exchange_pair_dict, (v, k) => (exchange_pairs[k] = _.concat(exchange_pairs[k] ? exchange_pairs[k] : [], v))))
|
|
53
|
-
module.exports.exchange_pairs = exchange_pairs
|
|
54
|
-
|
|
55
|
-
/*
|
|
56
|
-
{
|
|
57
|
-
CVT: [CVTBTC, CVTETH],
|
|
58
|
-
HSC: [HSCETH, HSCUSDT]
|
|
59
|
-
}
|
|
60
|
-
*/
|
|
61
|
-
module.exports.client_pairs = _.fromPairs(Object.keys(client_exchange_pairs).map((cur) => [cur, _.union(..._.values(client_exchange_pairs[cur]))]))
|
|
62
|
-
|
|
63
|
-
/*
|
|
64
|
-
{
|
|
65
|
-
CVT: [Binance, Bitz],
|
|
66
|
-
HSC: [Gatev4, Kkcoin]
|
|
67
|
-
}
|
|
68
|
-
*/
|
|
69
|
-
module.exports.client_exchanges = _.fromPairs(Object.keys(client_exchange_pairs).map((cur) => [cur, _.keys(client_exchange_pairs[cur])]))
|
|
70
|
-
|
|
71
|
-
/*
|
|
72
|
-
{
|
|
73
|
-
CVT: [CVT, BTC, ETH, USDT],
|
|
74
|
-
HSC: [HSC, ETH, USDT]
|
|
75
|
-
}
|
|
76
|
-
*/
|
|
77
|
-
module.exports.client_currencies_with_stables = _.fromPairs(
|
|
78
|
-
Object.keys(client_exchange_pairs).map((cur) => [cur, [cur, 'BTC', 'ETH', 'USD', 'USDT', 'USDC', 'CNYT', 'KRW', 'THB', 'TUSD', 'BNB', 'PAX']])
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
const clients_reporter_interval = config_data.clients_reporter_interval
|
|
82
|
-
module.exports.clients_reporter_interval = clients_reporter_interval
|
|
83
|
-
|
|
84
|
-
const balance_premium = config_data.balance_premium
|
|
85
|
-
module.exports.balance_premium = balance_premium
|
|
86
|
-
|
|
87
|
-
const client_enabled = config_data.client_enabled
|
|
88
|
-
module.exports.client_enabled = client_enabled
|
|
89
|
-
|
|
90
|
-
const client_levels = config_data.client_levels
|
|
91
|
-
module.exports.client_levels = client_levels
|
|
92
|
-
|
|
93
|
-
const client_price_index_curs = config_data.client_price_index_curs
|
|
94
|
-
module.exports.client_price_index_curs = client_price_index_curs
|
|
95
|
-
|
|
96
|
-
const client_telegram_ids = config_data.client_telegram_ids
|
|
97
|
-
module.exports.client_telegram_ids = client_telegram_ids
|
|
98
|
-
module.exports.telegram_id_clients = _.invertBy(client_telegram_ids)
|
|
99
|
-
|
|
100
|
-
const client_additional_telegram_ids = config_data.client_additional_telegram_ids
|
|
101
|
-
module.exports.client_additional_telegram_ids = client_additional_telegram_ids
|
|
102
|
-
|
|
103
|
-
const client_telegram_sender = config_data.client_telegram_sender
|
|
104
|
-
module.exports.client_telegram_sender = client_telegram_sender
|
|
105
|
-
|
|
106
|
-
const client_dashboard_credentials = config_data.client_dashboard_credentials
|
|
107
|
-
module.exports.client_dashboard_credentials = client_dashboard_credentials
|
|
1
|
+
const _ = require('lodash')
|
|
2
|
+
const config_data = require('./config.json')
|
|
3
|
+
|
|
4
|
+
const client_exchange_pairs = config_data.client_exchange_pairs
|
|
5
|
+
module.exports.client_exchange_pairs = client_exchange_pairs
|
|
6
|
+
|
|
7
|
+
const client_not_include_exchanges = config_data.client_not_include_exchanges
|
|
8
|
+
module.exports.client_not_include_exchanges = client_not_include_exchanges
|
|
9
|
+
|
|
10
|
+
const client_pair_main_exchanges = config_data.client_pair_main_exchanges
|
|
11
|
+
module.exports.client_pair_main_exchanges = client_pair_main_exchanges
|
|
12
|
+
|
|
13
|
+
let client_exchange_currencies = {}
|
|
14
|
+
for (let client in client_exchange_pairs) {
|
|
15
|
+
for (let exchange in client_exchange_pairs[client]) {
|
|
16
|
+
_.set(
|
|
17
|
+
client_exchange_currencies,
|
|
18
|
+
[client, exchange],
|
|
19
|
+
client_exchange_pairs[client][exchange].map((pair) => pair.replace(client, ''))
|
|
20
|
+
)
|
|
21
|
+
client_exchange_currencies[client][exchange].push(client)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
module.exports.client_exchange_currencies = client_exchange_currencies
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
{
|
|
28
|
+
AAAXXX: [Huobi, Okx],
|
|
29
|
+
CCCXXX: [Binance, Bitz]
|
|
30
|
+
}
|
|
31
|
+
*/
|
|
32
|
+
let client_pair_exchanges = {}
|
|
33
|
+
_.keys(client_exchange_pairs).map((cur) =>
|
|
34
|
+
_.keys(client_exchange_pairs[cur]).map((exchange) => {
|
|
35
|
+
client_exchange_pairs[cur][exchange].map((pair) => {
|
|
36
|
+
if (!client_pair_exchanges[cur] || !client_pair_exchanges[cur][pair]) {
|
|
37
|
+
_.set(client_pair_exchanges, [cur, pair], [])
|
|
38
|
+
}
|
|
39
|
+
client_pair_exchanges[cur][pair].push(exchange)
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
)
|
|
43
|
+
module.exports.client_pair_exchanges = client_pair_exchanges
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
{
|
|
47
|
+
Binance: [AAAXXX, AAAYYY, BBBYYY, BBBZZZ],
|
|
48
|
+
Huobi: [CCCXXX, CCCYYY, DDDZZZ]
|
|
49
|
+
}
|
|
50
|
+
*/
|
|
51
|
+
let exchange_pairs = {}
|
|
52
|
+
_.values(client_exchange_pairs).map((exchange_pair_dict) => _.forEach(exchange_pair_dict, (v, k) => (exchange_pairs[k] = _.concat(exchange_pairs[k] ? exchange_pairs[k] : [], v))))
|
|
53
|
+
module.exports.exchange_pairs = exchange_pairs
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
{
|
|
57
|
+
CVT: [CVTBTC, CVTETH],
|
|
58
|
+
HSC: [HSCETH, HSCUSDT]
|
|
59
|
+
}
|
|
60
|
+
*/
|
|
61
|
+
module.exports.client_pairs = _.fromPairs(Object.keys(client_exchange_pairs).map((cur) => [cur, _.union(..._.values(client_exchange_pairs[cur]))]))
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
{
|
|
65
|
+
CVT: [Binance, Bitz],
|
|
66
|
+
HSC: [Gatev4, Kkcoin]
|
|
67
|
+
}
|
|
68
|
+
*/
|
|
69
|
+
module.exports.client_exchanges = _.fromPairs(Object.keys(client_exchange_pairs).map((cur) => [cur, _.keys(client_exchange_pairs[cur])]))
|
|
70
|
+
|
|
71
|
+
/*
|
|
72
|
+
{
|
|
73
|
+
CVT: [CVT, BTC, ETH, USDT],
|
|
74
|
+
HSC: [HSC, ETH, USDT]
|
|
75
|
+
}
|
|
76
|
+
*/
|
|
77
|
+
module.exports.client_currencies_with_stables = _.fromPairs(
|
|
78
|
+
Object.keys(client_exchange_pairs).map((cur) => [cur, [cur, 'BTC', 'ETH', 'USD', 'USDT', 'USDC', 'CNYT', 'KRW', 'THB', 'TUSD', 'BNB', 'PAX']])
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
const clients_reporter_interval = config_data.clients_reporter_interval
|
|
82
|
+
module.exports.clients_reporter_interval = clients_reporter_interval
|
|
83
|
+
|
|
84
|
+
const balance_premium = config_data.balance_premium
|
|
85
|
+
module.exports.balance_premium = balance_premium
|
|
86
|
+
|
|
87
|
+
const client_enabled = config_data.client_enabled
|
|
88
|
+
module.exports.client_enabled = client_enabled
|
|
89
|
+
|
|
90
|
+
const client_levels = config_data.client_levels
|
|
91
|
+
module.exports.client_levels = client_levels
|
|
92
|
+
|
|
93
|
+
const client_price_index_curs = config_data.client_price_index_curs
|
|
94
|
+
module.exports.client_price_index_curs = client_price_index_curs
|
|
95
|
+
|
|
96
|
+
const client_telegram_ids = config_data.client_telegram_ids
|
|
97
|
+
module.exports.client_telegram_ids = client_telegram_ids
|
|
98
|
+
module.exports.telegram_id_clients = _.invertBy(client_telegram_ids)
|
|
99
|
+
|
|
100
|
+
const client_additional_telegram_ids = config_data.client_additional_telegram_ids
|
|
101
|
+
module.exports.client_additional_telegram_ids = client_additional_telegram_ids
|
|
102
|
+
|
|
103
|
+
const client_telegram_sender = config_data.client_telegram_sender
|
|
104
|
+
module.exports.client_telegram_sender = client_telegram_sender
|
|
105
|
+
|
|
106
|
+
const client_dashboard_credentials = config_data.client_dashboard_credentials
|
|
107
|
+
module.exports.client_dashboard_credentials = client_dashboard_credentials
|
package/config.json
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
"Mexc": ["AVALOXUSDT"],
|
|
13
13
|
"Bitmart": ["AVALOXUSDT"]
|
|
14
14
|
},
|
|
15
|
+
"BCHEM": {
|
|
16
|
+
"Mexc": ["BCHEMUSDT"]
|
|
17
|
+
},
|
|
15
18
|
"BVT": {
|
|
16
19
|
"Mexc": ["BVTUSDT"]
|
|
17
20
|
},
|
|
@@ -65,6 +68,9 @@
|
|
|
65
68
|
"Kucoin": ["SWFTCUSDT"],
|
|
66
69
|
"Okx": ["SWFTCUSDT"]
|
|
67
70
|
},
|
|
71
|
+
"TACC": {
|
|
72
|
+
"Weex": ["TACCUSDT"]
|
|
73
|
+
},
|
|
68
74
|
"TITAN": {
|
|
69
75
|
"Gatev4": ["TITANUSDT"]
|
|
70
76
|
},
|
|
@@ -76,6 +82,7 @@
|
|
|
76
82
|
"AAI": [],
|
|
77
83
|
"ARMY": [],
|
|
78
84
|
"AVALOX": [],
|
|
85
|
+
"BCHEM": [],
|
|
79
86
|
"BVT": [],
|
|
80
87
|
"DCC": [],
|
|
81
88
|
"ETHF": [],
|
|
@@ -89,6 +96,7 @@
|
|
|
89
96
|
"SARA": [],
|
|
90
97
|
"SHRAP": [],
|
|
91
98
|
"SWFTC": ["Lbank"],
|
|
99
|
+
"TACC": [],
|
|
92
100
|
"TITAN": [],
|
|
93
101
|
"TKT": []
|
|
94
102
|
},
|
|
@@ -102,6 +110,9 @@
|
|
|
102
110
|
"AVALOX": {
|
|
103
111
|
"AVALOXUSDT": ["Mexc", "Bitmart"]
|
|
104
112
|
},
|
|
113
|
+
"BCHEM": {
|
|
114
|
+
"BCHEMUSDT": ["Mexc"]
|
|
115
|
+
},
|
|
105
116
|
"BVT": {
|
|
106
117
|
"BVTUSDT": ["Mexc"]
|
|
107
118
|
},
|
|
@@ -143,6 +154,9 @@
|
|
|
143
154
|
"SWFTCUSDC": ["Coinbase"],
|
|
144
155
|
"SWFTCUSDT": ["Gatev4", "Okx"]
|
|
145
156
|
},
|
|
157
|
+
"TACC": {
|
|
158
|
+
"TACCUSDT": ["Weex"]
|
|
159
|
+
},
|
|
146
160
|
"TITAN": {
|
|
147
161
|
"TITANUSDT": ["Gatev4"]
|
|
148
162
|
},
|
|
@@ -166,6 +180,11 @@
|
|
|
166
180
|
"trades": 1,
|
|
167
181
|
"orderbook": 1
|
|
168
182
|
},
|
|
183
|
+
"BCHEM": {
|
|
184
|
+
"balance": 1,
|
|
185
|
+
"trades": 1,
|
|
186
|
+
"orderbook": 1
|
|
187
|
+
},
|
|
169
188
|
"BVT": {
|
|
170
189
|
"balance": 1,
|
|
171
190
|
"trades": 1,
|
|
@@ -231,6 +250,11 @@
|
|
|
231
250
|
"trades": 1,
|
|
232
251
|
"orderbook": 1
|
|
233
252
|
},
|
|
253
|
+
"TACC": {
|
|
254
|
+
"balance": 1,
|
|
255
|
+
"trades": 1,
|
|
256
|
+
"orderbook": 1
|
|
257
|
+
},
|
|
234
258
|
"TITAN": {
|
|
235
259
|
"balance": 1,
|
|
236
260
|
"trades": 1,
|
|
@@ -247,6 +271,7 @@
|
|
|
247
271
|
"AAI": true,
|
|
248
272
|
"ARMY": true,
|
|
249
273
|
"AVALOX": true,
|
|
274
|
+
"BCHEM": true,
|
|
250
275
|
"BVT": true,
|
|
251
276
|
"DCC": true,
|
|
252
277
|
"ETHF": true,
|
|
@@ -259,6 +284,7 @@
|
|
|
259
284
|
"SARA": true,
|
|
260
285
|
"SHRAP": true,
|
|
261
286
|
"SWFTC": true,
|
|
287
|
+
"TACC": true,
|
|
262
288
|
"TITAN": true,
|
|
263
289
|
"TKT": true
|
|
264
290
|
},
|
|
@@ -275,6 +301,7 @@
|
|
|
275
301
|
"AAI": true,
|
|
276
302
|
"ARMY": true,
|
|
277
303
|
"AVALOX": true,
|
|
304
|
+
"BCHEM": true,
|
|
278
305
|
"BVT": true,
|
|
279
306
|
"DCC": true,
|
|
280
307
|
"ETHF": true,
|
|
@@ -288,6 +315,7 @@
|
|
|
288
315
|
"SARA": true,
|
|
289
316
|
"SHRAP": true,
|
|
290
317
|
"SWFTC": true,
|
|
318
|
+
"TACC": true,
|
|
291
319
|
"TITAN": true,
|
|
292
320
|
"TKT": true
|
|
293
321
|
},
|
|
@@ -299,6 +327,7 @@
|
|
|
299
327
|
"AAI": [1, 2, 5, 10, 20, 50, 100],
|
|
300
328
|
"ARMY": [1, 2, 5, 10, 20, 50, 100],
|
|
301
329
|
"AVALOX": [1, 2, 5, 10, 20, 50, 100],
|
|
330
|
+
"BCHEM": [1, 2, 5, 10, 20, 50, 100],
|
|
302
331
|
"BVT": [1, 2, 5, 10, 20, 50, 100],
|
|
303
332
|
"DCC": [1, 2, 5, 10, 20, 50, 100],
|
|
304
333
|
"ETHF": [1, 2, 5, 10, 20, 50, 100],
|
|
@@ -312,6 +341,7 @@
|
|
|
312
341
|
"SARA": [1, 2, 5, 10, 20, 50, 100],
|
|
313
342
|
"SHRAP": [1, 2, 5, 10, 20, 50, 100],
|
|
314
343
|
"SWFTC": [1, 2, 5, 10, 20, 50, 100],
|
|
344
|
+
"TACC": [1, 2, 5, 10, 20, 50, 100],
|
|
315
345
|
"TITAN": [1, 2, 5, 10, 20, 50, 100],
|
|
316
346
|
"TKT": [1, 2, 5, 10, 20, 50, 100]
|
|
317
347
|
},
|
|
@@ -319,6 +349,7 @@
|
|
|
319
349
|
"AAI": ["BTC", "ETH"],
|
|
320
350
|
"ARMY": ["BTC", "ETH"],
|
|
321
351
|
"AVALOX": ["BTC", "ETH"],
|
|
352
|
+
"BCHEM": ["BTC", "ETH"],
|
|
322
353
|
"BVT": ["BTC", "ETH"],
|
|
323
354
|
"DCC": ["BTC", "ETH"],
|
|
324
355
|
"ETHF": ["BTC", "ETH"],
|
|
@@ -332,6 +363,7 @@
|
|
|
332
363
|
"SARA": ["BTC", "ETH"],
|
|
333
364
|
"SHRAP": ["BTC", "ETH"],
|
|
334
365
|
"SWFTC": ["BTC", "ETH"],
|
|
366
|
+
"TACC": ["BTC", "ETH"],
|
|
335
367
|
"TITAN": ["BTC", "ETH"],
|
|
336
368
|
"TKT": ["BTC", "ETH"]
|
|
337
369
|
},
|
|
@@ -339,6 +371,7 @@
|
|
|
339
371
|
"AAI": "-4873414367",
|
|
340
372
|
"ARMY": "-4733838023",
|
|
341
373
|
"AVALOX": "-1002106426914",
|
|
374
|
+
"BCHEM": "-4802690196",
|
|
342
375
|
"BVT": "-4802263491",
|
|
343
376
|
"DCC": "-4971137298",
|
|
344
377
|
"ETHF": "-4698418127",
|
|
@@ -352,6 +385,7 @@
|
|
|
352
385
|
"SARA": "-4660700305",
|
|
353
386
|
"SHRAP": "-1001996867582",
|
|
354
387
|
"SWFTC": "-1002067948127",
|
|
388
|
+
"TACC": "-4874959768",
|
|
355
389
|
"TITAN": "-4710863832",
|
|
356
390
|
"TKT": "-4946654975"
|
|
357
391
|
},
|
|
@@ -379,6 +413,7 @@
|
|
|
379
413
|
"AAI": "icg",
|
|
380
414
|
"ARMY": "icg",
|
|
381
415
|
"AVALOX": "icg",
|
|
416
|
+
"BCHEM": "icg",
|
|
382
417
|
"BVT": "icg",
|
|
383
418
|
"DCC": "icg",
|
|
384
419
|
"ETHF": "icg",
|
|
@@ -392,6 +427,7 @@
|
|
|
392
427
|
"SARA": "icg",
|
|
393
428
|
"SHRAP": "icg",
|
|
394
429
|
"SWFTC": "icg",
|
|
430
|
+
"TACC": "icg",
|
|
395
431
|
"TITAN": "icg",
|
|
396
432
|
"TKT": "icg"
|
|
397
433
|
},
|
|
@@ -408,6 +444,10 @@
|
|
|
408
444
|
"username": "avalox@icg.io",
|
|
409
445
|
"password": "omXfKUcHl2whb4W"
|
|
410
446
|
},
|
|
447
|
+
"BCHEM": {
|
|
448
|
+
"username": "bchem@icg.io",
|
|
449
|
+
"password": "dktx74ew2HY5oWt"
|
|
450
|
+
},
|
|
411
451
|
"BVT": {
|
|
412
452
|
"username": "bvt@icg.io",
|
|
413
453
|
"password": "DhnK4CXBaenTQR9"
|
|
@@ -464,6 +504,10 @@
|
|
|
464
504
|
"username": "swftc@icg.io",
|
|
465
505
|
"password": "XeH7kUVRjsEisQ0"
|
|
466
506
|
},
|
|
507
|
+
"TACC": {
|
|
508
|
+
"username": "tacc@icg.io",
|
|
509
|
+
"password": "NqDhRLCE68zsKA4"
|
|
510
|
+
},
|
|
467
511
|
"TITAN": {
|
|
468
512
|
"username": "titan@icg.io",
|
|
469
513
|
"password": "PWW8Te4dPDoDS76"
|
package/data-source.js.secret
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@icgio/clients-config",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/icgio/clients-config.git"
|
|
12
|
-
},
|
|
13
|
-
"author": "",
|
|
14
|
-
"license": "ISC",
|
|
15
|
-
"bugs": {
|
|
16
|
-
"url": "https://github.com/icgio/clients-config/issues"
|
|
17
|
-
},
|
|
18
|
-
"homepage": "https://github.com/icgio/clients-config#readme",
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"lodash": "^4.17.20"
|
|
21
|
-
},
|
|
22
|
-
"devDependencies": {
|
|
23
|
-
"fs-extra": "^11.2.0",
|
|
24
|
-
"node-cmd": "^5.0.0",
|
|
25
|
-
"prompt": "^1.3.0"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@icgio/clients-config",
|
|
3
|
+
"version": "1.0.171",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/icgio/clients-config.git"
|
|
12
|
+
},
|
|
13
|
+
"author": "",
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/icgio/clients-config/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/icgio/clients-config#readme",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"lodash": "^4.17.20"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"fs-extra": "^11.2.0",
|
|
24
|
+
"node-cmd": "^5.0.0",
|
|
25
|
+
"prompt": "^1.3.0"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/secretread.js.secret
CHANGED
|
Binary file
|
package/update-config-json.js
CHANGED
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
const fs = require('fs')
|
|
2
|
-
const prompt = require('prompt')
|
|
3
|
-
|
|
4
|
-
const config_file_path = './config.json'
|
|
5
|
-
const config_archive_file_path = './config-archive.json'
|
|
6
|
-
|
|
7
|
-
prompt.start()
|
|
8
|
-
|
|
9
|
-
function read_config_file(path) {
|
|
10
|
-
return new Promise((resolve, reject) => {
|
|
11
|
-
fs.readFile(path, 'utf8', (err, data) => {
|
|
12
|
-
if (err) reject(err)
|
|
13
|
-
else resolve(data)
|
|
14
|
-
})
|
|
15
|
-
})
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function write_config_file(data, path) {
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', (err) => {
|
|
21
|
-
if (err) return reject(err)
|
|
22
|
-
else resolve()
|
|
23
|
-
})
|
|
24
|
-
})
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function process_config() {
|
|
28
|
-
try {
|
|
29
|
-
const schema = {
|
|
30
|
-
properties: {
|
|
31
|
-
action: {
|
|
32
|
-
description: 'Enter the action ( add, delete )',
|
|
33
|
-
pattern: /^(add|delete)$/,
|
|
34
|
-
message: 'Action must be one of "add", "delete"',
|
|
35
|
-
required: true,
|
|
36
|
-
},
|
|
37
|
-
client_name: {
|
|
38
|
-
description: 'Enter the client name you want to perform the action on',
|
|
39
|
-
required: true,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
prompt.get(schema, (err, result) => {
|
|
45
|
-
if (err) {
|
|
46
|
-
console.error(err)
|
|
47
|
-
return
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
switch (result.action) {
|
|
51
|
-
case 'add':
|
|
52
|
-
add_client(result.client_name)
|
|
53
|
-
break
|
|
54
|
-
case 'delete':
|
|
55
|
-
delete_client(result.client_name)
|
|
56
|
-
break
|
|
57
|
-
default:
|
|
58
|
-
console.log('Invalid action')
|
|
59
|
-
break
|
|
60
|
-
}
|
|
61
|
-
})
|
|
62
|
-
} catch (error) {
|
|
63
|
-
console.error(`Error processing the config file: ${error}`)
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function delete_client(client_name) {
|
|
68
|
-
read_config_file(config_file_path)
|
|
69
|
-
.then((config_file_data) => {
|
|
70
|
-
config_file_data = JSON.parse(config_file_data)
|
|
71
|
-
|
|
72
|
-
update_config_archive(config_file_data, client_name)
|
|
73
|
-
.then(() => {
|
|
74
|
-
delete config_file_data.client_exchange_pairs[client_name]
|
|
75
|
-
delete config_file_data.client_pair_main_exchanges[client_name]
|
|
76
|
-
delete config_file_data.client_not_include_exchanges[client_name]
|
|
77
|
-
delete config_file_data.client_levels[client_name]
|
|
78
|
-
delete config_file_data.client_price_index_curs[client_name]
|
|
79
|
-
delete config_file_data.client_telegram_ids[client_name]
|
|
80
|
-
delete config_file_data.clients_reporter_interval[client_name]
|
|
81
|
-
|
|
82
|
-
for (let key in config_file_data.client_enabled) {
|
|
83
|
-
if (config_file_data.client_enabled.hasOwnProperty(key)) {
|
|
84
|
-
delete config_file_data.client_enabled[key][client_name]
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
write_config_file(config_file_data, config_file_path)
|
|
89
|
-
.then(() => {
|
|
90
|
-
console.log(`Client '${client_name}' has been deleted successfully.`)
|
|
91
|
-
})
|
|
92
|
-
.catch((err) => {
|
|
93
|
-
console.error(`Error writing to config file: ${err}`)
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
.catch((err) => {
|
|
97
|
-
console.error(`Error updating config archive: ${err}`)
|
|
98
|
-
})
|
|
99
|
-
})
|
|
100
|
-
.catch((err) => {
|
|
101
|
-
console.error(`Error reading config file: ${err}`)
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function add_client(client_name) {
|
|
106
|
-
const schema = {
|
|
107
|
-
properties: {
|
|
108
|
-
client_exchange_pairs: {
|
|
109
|
-
description: 'Enter client exchange pairs (JSON format i.e { "Mexc": ["RWXUSDT"], "Bitget": ["RWXUSDT"] } )',
|
|
110
|
-
required: true,
|
|
111
|
-
pattern: /^\{.*\}$/,
|
|
112
|
-
message: 'Please enter a valid JSON object.',
|
|
113
|
-
},
|
|
114
|
-
client_not_include_exchanges: {
|
|
115
|
-
description: 'Enter client not include exchanges (Comma-separated values, e.g., Jubi, Lbank)',
|
|
116
|
-
required: false,
|
|
117
|
-
},
|
|
118
|
-
client_pair_main_exchanges: {
|
|
119
|
-
description: 'Enter client pair main exchanges (JSON format i.e {"ETHUSDT": ["Bitget", "Gatev4"]} )',
|
|
120
|
-
required: true,
|
|
121
|
-
pattern: /^\{.*\}$/,
|
|
122
|
-
message: 'Please enter a valid JSON object.',
|
|
123
|
-
},
|
|
124
|
-
clients_reporter_interval: {
|
|
125
|
-
description: 'Enter clients reporter interval (JSON format i.e { "balance": 1, "trades": 1, "orderbook": 1} )',
|
|
126
|
-
required: true,
|
|
127
|
-
pattern: /^\{.*\}$/,
|
|
128
|
-
message: 'Please enter a valid JSON object.',
|
|
129
|
-
},
|
|
130
|
-
client_levels: {
|
|
131
|
-
description: 'Enter client levels (Comma-separated values, e.g. 2, 5, 10 ) ',
|
|
132
|
-
required: true,
|
|
133
|
-
},
|
|
134
|
-
client_price_index_curs: {
|
|
135
|
-
description: 'Enter client benchmarks (Comma-separated values, e.g., BTC,ETH)',
|
|
136
|
-
required: false,
|
|
137
|
-
},
|
|
138
|
-
client_telegram_ids: {
|
|
139
|
-
description: 'Enter client telegram ids i.e 1233457 ',
|
|
140
|
-
required: true,
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
}
|
|
144
|
-
read_config_file(config_file_path)
|
|
145
|
-
.then((config_file_data) => {
|
|
146
|
-
prompt.get(schema, (err, result) => {
|
|
147
|
-
if (err) {
|
|
148
|
-
console.error(err)
|
|
149
|
-
return
|
|
150
|
-
}
|
|
151
|
-
config_file_data = JSON.parse(config_file_data)
|
|
152
|
-
|
|
153
|
-
let exchange_pairs = result.client_exchange_pairs.trim()
|
|
154
|
-
exchange_pairs = JSON.parse(exchange_pairs)
|
|
155
|
-
|
|
156
|
-
let pair_exchanges = result.client_pair_main_exchanges.trim()
|
|
157
|
-
pair_exchanges = JSON.parse(pair_exchanges)
|
|
158
|
-
|
|
159
|
-
let reporter_interval = result.clients_reporter_interval.trim()
|
|
160
|
-
reporter_interval = JSON.parse(reporter_interval)
|
|
161
|
-
|
|
162
|
-
let not_include_exchanges = []
|
|
163
|
-
if (result.client_not_include_exchanges) {
|
|
164
|
-
not_include_exchanges = result.client_not_include_exchanges.split(',').map((value) => value.trim())
|
|
165
|
-
not_include_exchanges.sort()
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
let benchmarks = []
|
|
169
|
-
if (result.client_price_index_curs) {
|
|
170
|
-
benchmarks = result.client_price_index_curs.split(',').map((value) => value.trim())
|
|
171
|
-
benchmarks.sort()
|
|
172
|
-
}
|
|
173
|
-
let levels = result.client_levels.split(',').map((value) => Number(value.trim()))
|
|
174
|
-
|
|
175
|
-
config_file_data.client_exchange_pairs[client_name] = exchange_pairs
|
|
176
|
-
config_file_data.client_pair_main_exchanges[client_name] = pair_exchanges
|
|
177
|
-
|
|
178
|
-
config_file_data.clients_reporter_interval[client_name] = reporter_interval
|
|
179
|
-
|
|
180
|
-
config_file_data.client_not_include_exchanges[client_name] = not_include_exchanges
|
|
181
|
-
config_file_data.client_levels[client_name] = levels
|
|
182
|
-
config_file_data.client_price_index_curs[client_name] = benchmarks
|
|
183
|
-
|
|
184
|
-
config_file_data.client_telegram_ids[client_name] = result.client_telegram_ids
|
|
185
|
-
|
|
186
|
-
config_file_data.client_exchange_pairs = sort(config_file_data.client_exchange_pairs)
|
|
187
|
-
config_file_data.client_pair_main_exchanges = sort(config_file_data.client_pair_main_exchanges)
|
|
188
|
-
config_file_data.clients_reporter_interval = sort(config_file_data.clients_reporter_interval)
|
|
189
|
-
config_file_data.client_not_include_exchanges = sort(config_file_data.client_not_include_exchanges)
|
|
190
|
-
config_file_data.client_levels = sort(config_file_data.client_levels)
|
|
191
|
-
config_file_data.client_price_index_curs = sort(config_file_data.client_price_index_curs)
|
|
192
|
-
config_file_data.client_telegram_ids = sort(config_file_data.client_telegram_ids)
|
|
193
|
-
|
|
194
|
-
write_config_file(config_file_data, config_file_path)
|
|
195
|
-
.then(() => {
|
|
196
|
-
console.log(`Client '${client_name}' has been added successfully.`)
|
|
197
|
-
})
|
|
198
|
-
.catch((err) => {
|
|
199
|
-
console.error(`Error writing to config file: ${err}`)
|
|
200
|
-
})
|
|
201
|
-
})
|
|
202
|
-
})
|
|
203
|
-
.catch((err) => {
|
|
204
|
-
console.error(`Error reading config file: ${err}`)
|
|
205
|
-
})
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
function update_config_archive(config_file_data, client_name) {
|
|
209
|
-
return new Promise((resolve, reject) => {
|
|
210
|
-
read_config_file(config_archive_file_path)
|
|
211
|
-
.then((config_archive_data) => {
|
|
212
|
-
try {
|
|
213
|
-
config_archive_data = JSON.parse(config_archive_data)
|
|
214
|
-
} catch (error) {
|
|
215
|
-
console.error(`Error parsing config archive data: ${error}`)
|
|
216
|
-
reject(error)
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
config_archive_data.client_exchange_pairs[client_name] = config_file_data.client_exchange_pairs[client_name]
|
|
220
|
-
config_archive_data.client_pair_main_exchanges[client_name] = config_file_data.client_pair_main_exchanges[client_name]
|
|
221
|
-
config_archive_data.clients_reporter_interval[client_name] = config_file_data.clients_reporter_interval[client_name]
|
|
222
|
-
config_archive_data.client_not_include_exchanges[client_name] = config_file_data.client_not_include_exchanges[client_name]
|
|
223
|
-
config_archive_data.client_levels[client_name] = config_file_data.client_levels[client_name]
|
|
224
|
-
config_archive_data.client_price_index_curs[client_name] = config_file_data.client_price_index_curs[client_name]
|
|
225
|
-
config_archive_data.client_telegram_ids[client_name] = config_file_data.client_telegram_ids[client_name]
|
|
226
|
-
|
|
227
|
-
if (!config_archive_data.client_enabled) {
|
|
228
|
-
config_archive_data.client_enabled = {}
|
|
229
|
-
}
|
|
230
|
-
for (let key in config_file_data.client_enabled) {
|
|
231
|
-
if (config_file_data.client_enabled.hasOwnProperty(key)) {
|
|
232
|
-
if (!config_archive_data.client_enabled[key]) {
|
|
233
|
-
config_archive_data.client_enabled[key] = {}
|
|
234
|
-
}
|
|
235
|
-
config_archive_data.client_enabled[key][client_name] = config_file_data.client_enabled[key][client_name]
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
config_archive_data.client_exchange_pairs = sort(config_archive_data.client_exchange_pairs)
|
|
240
|
-
config_archive_data.client_pair_main_exchanges = sort(config_archive_data.client_pair_main_exchanges)
|
|
241
|
-
config_archive_data.clients_reporter_interval = sort(config_archive_data.clients_reporter_interval)
|
|
242
|
-
config_archive_data.client_not_include_exchanges = sort(config_archive_data.client_not_include_exchanges)
|
|
243
|
-
config_archive_data.client_levels = sort(config_archive_data.client_levels)
|
|
244
|
-
config_archive_data.client_price_index_curs = sort(config_archive_data.client_price_index_curs)
|
|
245
|
-
config_archive_data.client_telegram_ids = sort(config_archive_data.client_telegram_ids)
|
|
246
|
-
|
|
247
|
-
for (let key in config_archive_data.client_enabled) {
|
|
248
|
-
if (config_archive_data.client_enabled.hasOwnProperty(key)) {
|
|
249
|
-
config_archive_data.client_enabled[key] = sort(config_archive_data.client_enabled[key])
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
write_config_file(config_archive_data, config_archive_file_path)
|
|
254
|
-
.then(() => {
|
|
255
|
-
resolve()
|
|
256
|
-
})
|
|
257
|
-
.catch((err) => {
|
|
258
|
-
console.error(`Error writing to config file: ${err}`)
|
|
259
|
-
reject(err)
|
|
260
|
-
})
|
|
261
|
-
})
|
|
262
|
-
.catch((err) => {
|
|
263
|
-
console.error(`Error reading config archive file: ${err}`)
|
|
264
|
-
reject(err)
|
|
265
|
-
})
|
|
266
|
-
})
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function sort(obj) {
|
|
270
|
-
return Object.keys(obj)
|
|
271
|
-
.sort()
|
|
272
|
-
.reduce((result, key) => {
|
|
273
|
-
result[key] = obj[key]
|
|
274
|
-
return result
|
|
275
|
-
}, {})
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
process_config()
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
const prompt = require('prompt')
|
|
3
|
+
|
|
4
|
+
const config_file_path = './config.json'
|
|
5
|
+
const config_archive_file_path = './config-archive.json'
|
|
6
|
+
|
|
7
|
+
prompt.start()
|
|
8
|
+
|
|
9
|
+
function read_config_file(path) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
fs.readFile(path, 'utf8', (err, data) => {
|
|
12
|
+
if (err) reject(err)
|
|
13
|
+
else resolve(data)
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function write_config_file(data, path) {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
fs.writeFile(path, JSON.stringify(data, null, 2), 'utf8', (err) => {
|
|
21
|
+
if (err) return reject(err)
|
|
22
|
+
else resolve()
|
|
23
|
+
})
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function process_config() {
|
|
28
|
+
try {
|
|
29
|
+
const schema = {
|
|
30
|
+
properties: {
|
|
31
|
+
action: {
|
|
32
|
+
description: 'Enter the action ( add, delete )',
|
|
33
|
+
pattern: /^(add|delete)$/,
|
|
34
|
+
message: 'Action must be one of "add", "delete"',
|
|
35
|
+
required: true,
|
|
36
|
+
},
|
|
37
|
+
client_name: {
|
|
38
|
+
description: 'Enter the client name you want to perform the action on',
|
|
39
|
+
required: true,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
prompt.get(schema, (err, result) => {
|
|
45
|
+
if (err) {
|
|
46
|
+
console.error(err)
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
switch (result.action) {
|
|
51
|
+
case 'add':
|
|
52
|
+
add_client(result.client_name)
|
|
53
|
+
break
|
|
54
|
+
case 'delete':
|
|
55
|
+
delete_client(result.client_name)
|
|
56
|
+
break
|
|
57
|
+
default:
|
|
58
|
+
console.log('Invalid action')
|
|
59
|
+
break
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.error(`Error processing the config file: ${error}`)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function delete_client(client_name) {
|
|
68
|
+
read_config_file(config_file_path)
|
|
69
|
+
.then((config_file_data) => {
|
|
70
|
+
config_file_data = JSON.parse(config_file_data)
|
|
71
|
+
|
|
72
|
+
update_config_archive(config_file_data, client_name)
|
|
73
|
+
.then(() => {
|
|
74
|
+
delete config_file_data.client_exchange_pairs[client_name]
|
|
75
|
+
delete config_file_data.client_pair_main_exchanges[client_name]
|
|
76
|
+
delete config_file_data.client_not_include_exchanges[client_name]
|
|
77
|
+
delete config_file_data.client_levels[client_name]
|
|
78
|
+
delete config_file_data.client_price_index_curs[client_name]
|
|
79
|
+
delete config_file_data.client_telegram_ids[client_name]
|
|
80
|
+
delete config_file_data.clients_reporter_interval[client_name]
|
|
81
|
+
|
|
82
|
+
for (let key in config_file_data.client_enabled) {
|
|
83
|
+
if (config_file_data.client_enabled.hasOwnProperty(key)) {
|
|
84
|
+
delete config_file_data.client_enabled[key][client_name]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
write_config_file(config_file_data, config_file_path)
|
|
89
|
+
.then(() => {
|
|
90
|
+
console.log(`Client '${client_name}' has been deleted successfully.`)
|
|
91
|
+
})
|
|
92
|
+
.catch((err) => {
|
|
93
|
+
console.error(`Error writing to config file: ${err}`)
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
.catch((err) => {
|
|
97
|
+
console.error(`Error updating config archive: ${err}`)
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
.catch((err) => {
|
|
101
|
+
console.error(`Error reading config file: ${err}`)
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function add_client(client_name) {
|
|
106
|
+
const schema = {
|
|
107
|
+
properties: {
|
|
108
|
+
client_exchange_pairs: {
|
|
109
|
+
description: 'Enter client exchange pairs (JSON format i.e { "Mexc": ["RWXUSDT"], "Bitget": ["RWXUSDT"] } )',
|
|
110
|
+
required: true,
|
|
111
|
+
pattern: /^\{.*\}$/,
|
|
112
|
+
message: 'Please enter a valid JSON object.',
|
|
113
|
+
},
|
|
114
|
+
client_not_include_exchanges: {
|
|
115
|
+
description: 'Enter client not include exchanges (Comma-separated values, e.g., Jubi, Lbank)',
|
|
116
|
+
required: false,
|
|
117
|
+
},
|
|
118
|
+
client_pair_main_exchanges: {
|
|
119
|
+
description: 'Enter client pair main exchanges (JSON format i.e {"ETHUSDT": ["Bitget", "Gatev4"]} )',
|
|
120
|
+
required: true,
|
|
121
|
+
pattern: /^\{.*\}$/,
|
|
122
|
+
message: 'Please enter a valid JSON object.',
|
|
123
|
+
},
|
|
124
|
+
clients_reporter_interval: {
|
|
125
|
+
description: 'Enter clients reporter interval (JSON format i.e { "balance": 1, "trades": 1, "orderbook": 1} )',
|
|
126
|
+
required: true,
|
|
127
|
+
pattern: /^\{.*\}$/,
|
|
128
|
+
message: 'Please enter a valid JSON object.',
|
|
129
|
+
},
|
|
130
|
+
client_levels: {
|
|
131
|
+
description: 'Enter client levels (Comma-separated values, e.g. 2, 5, 10 ) ',
|
|
132
|
+
required: true,
|
|
133
|
+
},
|
|
134
|
+
client_price_index_curs: {
|
|
135
|
+
description: 'Enter client benchmarks (Comma-separated values, e.g., BTC,ETH)',
|
|
136
|
+
required: false,
|
|
137
|
+
},
|
|
138
|
+
client_telegram_ids: {
|
|
139
|
+
description: 'Enter client telegram ids i.e 1233457 ',
|
|
140
|
+
required: true,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}
|
|
144
|
+
read_config_file(config_file_path)
|
|
145
|
+
.then((config_file_data) => {
|
|
146
|
+
prompt.get(schema, (err, result) => {
|
|
147
|
+
if (err) {
|
|
148
|
+
console.error(err)
|
|
149
|
+
return
|
|
150
|
+
}
|
|
151
|
+
config_file_data = JSON.parse(config_file_data)
|
|
152
|
+
|
|
153
|
+
let exchange_pairs = result.client_exchange_pairs.trim()
|
|
154
|
+
exchange_pairs = JSON.parse(exchange_pairs)
|
|
155
|
+
|
|
156
|
+
let pair_exchanges = result.client_pair_main_exchanges.trim()
|
|
157
|
+
pair_exchanges = JSON.parse(pair_exchanges)
|
|
158
|
+
|
|
159
|
+
let reporter_interval = result.clients_reporter_interval.trim()
|
|
160
|
+
reporter_interval = JSON.parse(reporter_interval)
|
|
161
|
+
|
|
162
|
+
let not_include_exchanges = []
|
|
163
|
+
if (result.client_not_include_exchanges) {
|
|
164
|
+
not_include_exchanges = result.client_not_include_exchanges.split(',').map((value) => value.trim())
|
|
165
|
+
not_include_exchanges.sort()
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
let benchmarks = []
|
|
169
|
+
if (result.client_price_index_curs) {
|
|
170
|
+
benchmarks = result.client_price_index_curs.split(',').map((value) => value.trim())
|
|
171
|
+
benchmarks.sort()
|
|
172
|
+
}
|
|
173
|
+
let levels = result.client_levels.split(',').map((value) => Number(value.trim()))
|
|
174
|
+
|
|
175
|
+
config_file_data.client_exchange_pairs[client_name] = exchange_pairs
|
|
176
|
+
config_file_data.client_pair_main_exchanges[client_name] = pair_exchanges
|
|
177
|
+
|
|
178
|
+
config_file_data.clients_reporter_interval[client_name] = reporter_interval
|
|
179
|
+
|
|
180
|
+
config_file_data.client_not_include_exchanges[client_name] = not_include_exchanges
|
|
181
|
+
config_file_data.client_levels[client_name] = levels
|
|
182
|
+
config_file_data.client_price_index_curs[client_name] = benchmarks
|
|
183
|
+
|
|
184
|
+
config_file_data.client_telegram_ids[client_name] = result.client_telegram_ids
|
|
185
|
+
|
|
186
|
+
config_file_data.client_exchange_pairs = sort(config_file_data.client_exchange_pairs)
|
|
187
|
+
config_file_data.client_pair_main_exchanges = sort(config_file_data.client_pair_main_exchanges)
|
|
188
|
+
config_file_data.clients_reporter_interval = sort(config_file_data.clients_reporter_interval)
|
|
189
|
+
config_file_data.client_not_include_exchanges = sort(config_file_data.client_not_include_exchanges)
|
|
190
|
+
config_file_data.client_levels = sort(config_file_data.client_levels)
|
|
191
|
+
config_file_data.client_price_index_curs = sort(config_file_data.client_price_index_curs)
|
|
192
|
+
config_file_data.client_telegram_ids = sort(config_file_data.client_telegram_ids)
|
|
193
|
+
|
|
194
|
+
write_config_file(config_file_data, config_file_path)
|
|
195
|
+
.then(() => {
|
|
196
|
+
console.log(`Client '${client_name}' has been added successfully.`)
|
|
197
|
+
})
|
|
198
|
+
.catch((err) => {
|
|
199
|
+
console.error(`Error writing to config file: ${err}`)
|
|
200
|
+
})
|
|
201
|
+
})
|
|
202
|
+
})
|
|
203
|
+
.catch((err) => {
|
|
204
|
+
console.error(`Error reading config file: ${err}`)
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function update_config_archive(config_file_data, client_name) {
|
|
209
|
+
return new Promise((resolve, reject) => {
|
|
210
|
+
read_config_file(config_archive_file_path)
|
|
211
|
+
.then((config_archive_data) => {
|
|
212
|
+
try {
|
|
213
|
+
config_archive_data = JSON.parse(config_archive_data)
|
|
214
|
+
} catch (error) {
|
|
215
|
+
console.error(`Error parsing config archive data: ${error}`)
|
|
216
|
+
reject(error)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
config_archive_data.client_exchange_pairs[client_name] = config_file_data.client_exchange_pairs[client_name]
|
|
220
|
+
config_archive_data.client_pair_main_exchanges[client_name] = config_file_data.client_pair_main_exchanges[client_name]
|
|
221
|
+
config_archive_data.clients_reporter_interval[client_name] = config_file_data.clients_reporter_interval[client_name]
|
|
222
|
+
config_archive_data.client_not_include_exchanges[client_name] = config_file_data.client_not_include_exchanges[client_name]
|
|
223
|
+
config_archive_data.client_levels[client_name] = config_file_data.client_levels[client_name]
|
|
224
|
+
config_archive_data.client_price_index_curs[client_name] = config_file_data.client_price_index_curs[client_name]
|
|
225
|
+
config_archive_data.client_telegram_ids[client_name] = config_file_data.client_telegram_ids[client_name]
|
|
226
|
+
|
|
227
|
+
if (!config_archive_data.client_enabled) {
|
|
228
|
+
config_archive_data.client_enabled = {}
|
|
229
|
+
}
|
|
230
|
+
for (let key in config_file_data.client_enabled) {
|
|
231
|
+
if (config_file_data.client_enabled.hasOwnProperty(key)) {
|
|
232
|
+
if (!config_archive_data.client_enabled[key]) {
|
|
233
|
+
config_archive_data.client_enabled[key] = {}
|
|
234
|
+
}
|
|
235
|
+
config_archive_data.client_enabled[key][client_name] = config_file_data.client_enabled[key][client_name]
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
config_archive_data.client_exchange_pairs = sort(config_archive_data.client_exchange_pairs)
|
|
240
|
+
config_archive_data.client_pair_main_exchanges = sort(config_archive_data.client_pair_main_exchanges)
|
|
241
|
+
config_archive_data.clients_reporter_interval = sort(config_archive_data.clients_reporter_interval)
|
|
242
|
+
config_archive_data.client_not_include_exchanges = sort(config_archive_data.client_not_include_exchanges)
|
|
243
|
+
config_archive_data.client_levels = sort(config_archive_data.client_levels)
|
|
244
|
+
config_archive_data.client_price_index_curs = sort(config_archive_data.client_price_index_curs)
|
|
245
|
+
config_archive_data.client_telegram_ids = sort(config_archive_data.client_telegram_ids)
|
|
246
|
+
|
|
247
|
+
for (let key in config_archive_data.client_enabled) {
|
|
248
|
+
if (config_archive_data.client_enabled.hasOwnProperty(key)) {
|
|
249
|
+
config_archive_data.client_enabled[key] = sort(config_archive_data.client_enabled[key])
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
write_config_file(config_archive_data, config_archive_file_path)
|
|
254
|
+
.then(() => {
|
|
255
|
+
resolve()
|
|
256
|
+
})
|
|
257
|
+
.catch((err) => {
|
|
258
|
+
console.error(`Error writing to config file: ${err}`)
|
|
259
|
+
reject(err)
|
|
260
|
+
})
|
|
261
|
+
})
|
|
262
|
+
.catch((err) => {
|
|
263
|
+
console.error(`Error reading config archive file: ${err}`)
|
|
264
|
+
reject(err)
|
|
265
|
+
})
|
|
266
|
+
})
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function sort(obj) {
|
|
270
|
+
return Object.keys(obj)
|
|
271
|
+
.sort()
|
|
272
|
+
.reduce((result, key) => {
|
|
273
|
+
result[key] = obj[key]
|
|
274
|
+
return result
|
|
275
|
+
}, {})
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
process_config()
|