@icgio/clients-config 1.0.284 → 1.0.287

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.
@@ -1 +1 @@
1
- v:1:
1
+ v:1:
@@ -1,2 +1,2 @@
1
- secretread.js:b6bd159307534eb50376dbdf83f7d77b83730f5b6c575037177a77b9deb55a28
1
+ secretread.js:a0d95e1f2f4568b3feea36f9129bc082460869b98aaac09923702322f4c4e66a
2
2
  data-source.js:440e328f62856d665e4b66a66f55406e0c9f3a974d2be3c000041fd1c552652b
@@ -11,7 +11,8 @@
11
11
  },
12
12
  "AVALOX": {
13
13
  "Gate": ["AVALOXUSDT"],
14
- "Bitmart": ["AVALOXUSDT"]
14
+ "Bitmart": ["AVALOXUSDT"],
15
+ "Mexc": ["AVALOXUSDT"]
15
16
  },
16
17
  "AVAV": {
17
18
  "Bitget": ["AVAVUSDT"]
@@ -405,7 +406,7 @@
405
406
  "AVUSDT": ["Mexc"]
406
407
  },
407
408
  "AVALOX": {
408
- "AVALOXUSDT": ["Bitmart"]
409
+ "AVALOXUSDT": ["Bitmart", "Mexc"]
409
410
  },
410
411
  "AVAV": {
411
412
  "AVAVUSDT": ["Bitget"]
@@ -1065,6 +1066,7 @@
1065
1066
  "AAI": true,
1066
1067
  "ACL": true,
1067
1068
  "AV": true,
1069
+ "AVALOX": true,
1068
1070
  "AVAV": true,
1069
1071
  "AXL": true,
1070
1072
  "BCHEM": true,
@@ -1138,6 +1140,7 @@
1138
1140
  "XERT": true
1139
1141
  },
1140
1142
  "deposits_withdrawals": {
1143
+ "AVALOX": true,
1141
1144
  "GRIPPY": true,
1142
1145
  "TACC": true
1143
1146
  },
@@ -1157,6 +1160,7 @@
1157
1160
  "AAI": true,
1158
1161
  "ACL": true,
1159
1162
  "AV": true,
1163
+ "AVALOX": true,
1160
1164
  "AVAV": true,
1161
1165
  "AXL": true,
1162
1166
  "BCHEM": true,
@@ -1242,6 +1246,7 @@
1242
1246
  "AAI": [1, 2, 5, 10, 20, 50, 100],
1243
1247
  "ACL": [10, 50, 100],
1244
1248
  "AV": [1, 2, 5, 10, 20, 50, 100],
1249
+ "AVALOX": [1, 2, 5, 10, 20, 50, 100],
1245
1250
  "AVAV": [2, 5, 10],
1246
1251
  "AXL": [10, 50, 100],
1247
1252
  "BCHEM": [1, 2, 5, 10, 20, 50, 100],
@@ -1328,6 +1333,7 @@
1328
1333
  "AAI": ["BTC", "ETH"],
1329
1334
  "ACL": ["BTC, ETH"],
1330
1335
  "AV": ["BTC", "ETH"],
1336
+ "AVALOX": ["BTC", "ETH"],
1331
1337
  "AVAV": ["BTC", "ETH"],
1332
1338
  "AXL": ["BTC", "ETH"],
1333
1339
  "BCHEM": ["BTC", "ETH"],
@@ -1413,6 +1419,7 @@
1413
1419
  "AAI": "-4873414367",
1414
1420
  "ACL": "-4283734918",
1415
1421
  "AV": "-5059409056",
1422
+ "AVALOX": "-1002106426914",
1416
1423
  "AVAV": "-4199615909",
1417
1424
  "AXL": "-1002044946729",
1418
1425
  "BCHEM": "-4802690196",
@@ -1523,6 +1530,7 @@
1523
1530
  "client_telegram_sender": {
1524
1531
  "AAI": "icg",
1525
1532
  "AV": "icg",
1533
+ "AVALOX": "icg",
1526
1534
  "AXL": "icg",
1527
1535
  "BCHEM": "icg",
1528
1536
  "BVT": "icg",
@@ -1572,6 +1580,7 @@
1572
1580
  "username": "av@icg.io",
1573
1581
  "password": "av@icg.io"
1574
1582
  },
1583
+ "AVALOX": { "username": "avalox@icg.io" },
1575
1584
  "AXL": {
1576
1585
  "username": "axl@icg.io",
1577
1586
  "password": "lUzpE7Ku0elfayb"
@@ -1718,6 +1727,7 @@
1718
1727
  }
1719
1728
  },
1720
1729
  "server_config_enabled": {
1730
+ "AVALOX": true,
1721
1731
  "MAK": true
1722
1732
  },
1723
1733
  "server_config_whitelist_ips": {
@@ -1725,6 +1735,7 @@
1725
1735
  "MAK": ["172.105.237.102", "52.221.185.198", "178.157.58.210"]
1726
1736
  },
1727
1737
  "server_config_admin_whitelist_ips": {
1738
+ "AVALOX": ["172.105.237.102", "139.162.84.139"],
1728
1739
  "BVT": [],
1729
1740
  "GO": [],
1730
1741
  "GRIPPY": ["172.105.237.102"],
package/config.json CHANGED
@@ -4,9 +4,6 @@
4
4
  "Bitrue": ["ARMYUSDT"],
5
5
  "Mexc": ["ARMYUSDT"]
6
6
  },
7
- "AVALOX": {
8
- "Mexc": ["AVALOXUSDT"]
9
- },
10
7
  "B3TR": {
11
8
  "Biconomy": ["B3TRUSDT"],
12
9
  "Bitrue": ["B3TRUSDT"],
@@ -28,7 +25,7 @@
28
25
  "Hkbitex": ["ETHUSD", "ETHHKD"]
29
26
  },
30
27
  "JYAI": {
31
- "Biconomy": ["JYAIBTC", "JYAIUSDC", "JYAIUSDT"],
28
+ "Biconomy": ["JYAIBTC","JYAIUSDC", "JYAIUSDT"],
32
29
  "Bingx": ["JYAIUSDT"],
33
30
  "Bitmart": ["JYAIUSDC", "JYAIUSDT"],
34
31
  "Lbank": ["JYAIUSDT"],
@@ -74,7 +71,6 @@
74
71
  },
75
72
  "client_not_include_exchanges": {
76
73
  "ARMY": [],
77
- "AVALOX": [],
78
74
  "B3TR": [],
79
75
  "CCDOG": [],
80
76
  "FREEZONE": [],
@@ -95,9 +91,6 @@
95
91
  "ARMY": {
96
92
  "ARMYUSDT": ["Mexc"]
97
93
  },
98
- "AVALOX": {
99
- "AVALOXUSDT": ["Mexc"]
100
- },
101
94
  "B3TR": {
102
95
  "B3TRUSDT": ["Mexc"]
103
96
  },
@@ -156,11 +149,6 @@
156
149
  "orderbook": 1,
157
150
  "deposits_withdrawals": 1
158
151
  },
159
- "AVALOX": {
160
- "balance": 1,
161
- "trades": 1,
162
- "orderbook": 1
163
- },
164
152
  "B3TR": {
165
153
  "balance": 1,
166
154
  "trades": 1,
@@ -255,7 +243,6 @@
255
243
  "client_enabled": {
256
244
  "balance": {
257
245
  "ARMY": true,
258
- "AVALOX": true,
259
246
  "B3TR": true,
260
247
  "CCDOG": true,
261
248
  "FREEZONE": true,
@@ -275,7 +262,6 @@
275
262
  "balance_cur": {},
276
263
  "deposits_withdrawals": {
277
264
  "ARMY": true,
278
- "AVALOX": true,
279
265
  "B3TR": true,
280
266
  "CCDOG": true,
281
267
  "FREEZONE": true,
@@ -298,7 +284,6 @@
298
284
  "trades_detail": {},
299
285
  "trades": {
300
286
  "ARMY": true,
301
- "AVALOX": true,
302
287
  "B3TR": true,
303
288
  "CCDOG": true,
304
289
  "FREEZONE": true,
@@ -319,7 +304,6 @@
319
304
  },
320
305
  "client_levels": {
321
306
  "ARMY": [1, 2, 5, 10, 20, 50, 100],
322
- "AVALOX": [1, 2, 5, 10, 20, 50, 100],
323
307
  "B3TR": [1, 2, 5, 10, 20, 50, 100],
324
308
  "CCDOG": [1, 2, 5, 10, 20, 50, 100],
325
309
  "FREEZONE": [1, 2, 5, 10, 20, 50, 100],
@@ -338,7 +322,6 @@
338
322
  },
339
323
  "client_price_index_curs": {
340
324
  "ARMY": ["BTC", "ETH"],
341
- "AVALOX": ["BTC", "ETH"],
342
325
  "B3TR": ["BTC", "ETH"],
343
326
  "CCDOG": ["BTC", "ETH"],
344
327
  "FREEZONE": ["BTC", "ETH"],
@@ -357,7 +340,6 @@
357
340
  },
358
341
  "client_telegram_ids": {
359
342
  "ARMY": "-4733838023",
360
- "AVALOX": "-1002106426914",
361
343
  "B3TR": "-4957633893",
362
344
  "CCDOG": "-4866473272",
363
345
  "FREEZONE": "-5013286765",
@@ -391,7 +373,6 @@
391
373
  "client_additional_telegram_ids": {},
392
374
  "client_telegram_sender": {
393
375
  "ARMY": "icg",
394
- "AVALOX": "icg",
395
376
  "B3TR": "icg",
396
377
  "CCDOG": "icg",
397
378
  "FREEZONE": "icg",
@@ -411,7 +392,6 @@
411
392
  "dashboard_users": {
412
393
  "ADMIN": { "username": "admin@icg.io" },
413
394
  "ARMY": { "username": "army@icg.io" },
414
- "AVALOX": { "username": "avalox@icg.io" },
415
395
  "B3TR": { "username": "b3tr@icg.io" },
416
396
  "CCDOG": { "username": "ccdog@icg.io" },
417
397
  "FREEZONE": { "username": "freezone@icg.io" },
@@ -438,7 +418,6 @@
438
418
  "MINDFAK": "https://api.geckoterminal.com/api/v2/networks/eth/pools/0x40c03fb952df5f4ec72414efb0b378d70cded263"
439
419
  },
440
420
  "server_config_enabled": {
441
- "AVALOX": true,
442
421
  "FREEZONE": true,
443
422
  "HKBITEX-BTC": true,
444
423
  "HKBITEX-ETH": true,
@@ -448,7 +427,6 @@
448
427
  "server_config_whitelist_ips": {},
449
428
  "server_config_admin_whitelist_ips": {
450
429
  "ARMY": ["172.105.237.102", "139.162.90.70"],
451
- "AVALOX": ["172.105.237.102", "139.162.84.139"],
452
430
  "B3TR": ["172.105.237.102", "139.162.122.208", "172.104.97.165"],
453
431
  "CCDOG": ["172.105.237.102", "139.162.102.147"],
454
432
  "FREEZONE": ["172.105.237.102", "172.104.114.32"],
Binary file
package/index.js CHANGED
@@ -1,19 +1,19 @@
1
- function safe_require(path) {
2
- try {
3
- return require(path)
4
- } catch (error) {
5
- if (error.code === 'MODULE_NOT_FOUND') {
6
- return {}
7
- } else {
8
- throw error
9
- }
10
- }
11
- }
12
-
13
- module.exports = {
14
- config: safe_require('./config.js'),
15
- secretread: safe_require('./secretread.js').secret,
16
- secretread_shared: safe_require('./secretread.js').shared,
17
- 'data-source': safe_require('./data-source.js'),
18
- benchmarks: safe_require('./config-benchmarks.js'),
19
- }
1
+ function safe_require(path) {
2
+ try {
3
+ return require(path)
4
+ } catch (error) {
5
+ if (error.code === 'MODULE_NOT_FOUND') {
6
+ return {}
7
+ } else {
8
+ throw error
9
+ }
10
+ }
11
+ }
12
+
13
+ module.exports = {
14
+ config: safe_require('./config.js'),
15
+ secretread: safe_require('./secretread.js').secret,
16
+ secretread_shared: safe_require('./secretread.js').shared,
17
+ 'data-source': safe_require('./data-source.js'),
18
+ benchmarks: safe_require('./config-benchmarks.js'),
19
+ }
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
- {
2
- "name": "@icgio/clients-config",
3
- "version": "1.0.284",
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.287",
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
+ }
Binary file
@@ -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", "Gate"]} )',
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", "Gate"]} )',
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()