@icgio/clients-config 1.0.262 → 1.0.264

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:f21d699fb1b648ae148bc27993a0b6c1a1104c58980aca4de4c3cb61eb64d9bf
1
+ secretread.js:61ce7f7b7a1ca4eca88d6a384f930265d928a49f0305b3f909640ee0643c28a5
2
2
  data-source.js:a88043810676f6017be94bbcc357f8f0d439890c6698cc0b02941b605e7dbd9a
package/config.json CHANGED
@@ -42,9 +42,6 @@
42
42
  "Mexc": ["MINDFAKUSDT"],
43
43
  "Xt": ["MINDFAKUSDT"]
44
44
  },
45
- "MIX": {
46
- "Gate": ["MIXUSDT"]
47
- },
48
45
  "OPUL": {
49
46
  "Ascendex": ["OPULUSDT"],
50
47
  "Gate": ["OPULUSDT"],
@@ -54,9 +51,6 @@
54
51
  "SARA": {
55
52
  "Bitmart": ["SARAUSDT"]
56
53
  },
57
- "SQL": {
58
- "Bitmart": ["SQLUSDT"]
59
- },
60
54
  "SWFTC": {
61
55
  "Coinbase": ["SWFTCUSDC"],
62
56
  "Gate": ["SWFTCUSDT"],
@@ -76,10 +70,8 @@
76
70
  "LBAI": [],
77
71
  "LUCIC": [],
78
72
  "MINDFAK": [],
79
- "MIX": [],
80
73
  "OPUL": [],
81
74
  "SARA": [],
82
- "SQL": [],
83
75
  "SWFTC": ["Lbank"]
84
76
  },
85
77
  "client_pair_main_exchanges": {
@@ -105,8 +97,8 @@
105
97
  },
106
98
  "JYAI": {
107
99
  "JYAIBTC": ["Biconomy"],
108
- "JYAIUSDC": ["Biconomy", "Bitmart", "Xt"],
109
- "JYAIUSDT": ["Biconomy", "Bingx", "Bitmart", "Lbank", "Mexc", "Xt"]
100
+ "JYAIUSDC": ["Bitmart", "Xt"],
101
+ "JYAIUSDT": ["Mexc", "Xt"]
110
102
  },
111
103
  "LBAI": {
112
104
  "LBAIUSDC": ["Xt"],
@@ -116,20 +108,14 @@
116
108
  "LUCICUSDT": ["Xt"]
117
109
  },
118
110
  "MINDFAK": {
119
- "MINDFAKUSDT": ["Bitmart", "Mexc", "Xt"]
120
- },
121
- "MIX": {
122
- "MIXUSDT": ["Gate"]
111
+ "MINDFAKUSDT": ["Mexc", "Xt"]
123
112
  },
124
113
  "OPUL": {
125
- "OPULUSDT": ["Ascendex", "Gate", "Kucoin", "Weex"]
114
+ "OPULUSDT": ["Gate", "Kucoin"]
126
115
  },
127
116
  "SARA": {
128
117
  "SARAUSDT": ["Bitmart"]
129
118
  },
130
- "SQL": {
131
- "SQLUSDT": ["Bitmart"]
132
- },
133
119
  "SWFTC": {
134
120
  "SWFTCUSDC": ["Coinbase"],
135
121
  "SWFTCUSDT": ["Okx"]
@@ -140,91 +126,79 @@
140
126
  "balance": 1,
141
127
  "trades": 1,
142
128
  "orderbook": 1,
143
- "deposits_withdrawals":1
129
+ "deposits_withdrawals": 1
144
130
  },
145
131
  "B3TR": {
146
132
  "balance": 1,
147
133
  "trades": 1,
148
134
  "orderbook": 1,
149
- "deposits_withdrawals":1
135
+ "deposits_withdrawals": 1
150
136
  },
151
137
  "CCDOG": {
152
138
  "balance": 1,
153
139
  "trades": 1,
154
140
  "orderbook": 1,
155
- "deposits_withdrawals":1
141
+ "deposits_withdrawals": 1
156
142
  },
157
143
  "GRIPPY": {
158
144
  "balance": 1,
159
145
  "trades": 1,
160
146
  "orderbook": 1,
161
- "deposits_withdrawals":1
147
+ "deposits_withdrawals": 1
162
148
  },
163
149
  "HKBITEX-BTC": {
164
150
  "balance": 1,
165
151
  "trades": 1,
166
152
  "orderbook": 1,
167
- "deposits_withdrawals":1
153
+ "deposits_withdrawals": 1
168
154
  },
169
155
  "HKBITEX-ETH": {
170
156
  "balance": 1,
171
157
  "trades": 1,
172
158
  "orderbook": 1,
173
- "deposits_withdrawals":1
159
+ "deposits_withdrawals": 1
174
160
  },
175
161
  "JYAI": {
176
162
  "balance": 1,
177
163
  "trades": 1,
178
164
  "orderbook": 1,
179
- "deposits_withdrawals":1
165
+ "deposits_withdrawals": 1
180
166
  },
181
167
  "LBAI": {
182
168
  "balance": 1,
183
169
  "trades": 1,
184
170
  "orderbook": 1,
185
- "deposits_withdrawals":1
171
+ "deposits_withdrawals": 1
186
172
  },
187
173
  "LUCIC": {
188
174
  "balance": 1,
189
175
  "trades": 1,
190
176
  "orderbook": 1,
191
- "deposits_withdrawals":1
177
+ "deposits_withdrawals": 1
192
178
  },
193
179
  "MINDFAK": {
194
180
  "balance": 1,
195
181
  "trades": 1,
196
182
  "orderbook": 1,
197
- "deposits_withdrawals":1
198
- },
199
- "MIX": {
200
- "balance": 1,
201
- "trades": 1,
202
- "orderbook": 1,
203
- "deposits_withdrawals":1
183
+ "deposits_withdrawals": 1
204
184
  },
205
185
  "OPUL": {
206
186
  "balance": 1,
207
187
  "trades": 1,
208
188
  "orderbook": 1,
209
- "deposits_withdrawals":1
189
+ "deposits_withdrawals": 1
210
190
  },
211
191
  "SARA": {
212
192
  "balance": 1,
213
193
  "trades": 1,
214
194
  "orderbook": 1,
215
- "deposits_withdrawals":1
216
- },
217
- "SQL": {
218
- "balance": 1,
219
- "trades": 1,
220
- "orderbook": 1,
221
- "deposits_withdrawals":1
195
+ "deposits_withdrawals": 1
222
196
  },
223
197
  "SWFTC": {
224
198
  "balance": 1,
225
199
  "trades": 1,
226
200
  "orderbook": 1,
227
- "deposits_withdrawals":1
201
+ "deposits_withdrawals": 1
228
202
  }
229
203
  },
230
204
  "client_enabled": {
@@ -239,10 +213,8 @@
239
213
  "LBAI": true,
240
214
  "LUCIC": true,
241
215
  "MINDFAK": true,
242
- "MIX": true,
243
216
  "OPUL": true,
244
217
  "SARA": true,
245
- "SQL": true,
246
218
  "SWFTC": true
247
219
  },
248
220
  "balance_cur": {},
@@ -257,10 +229,8 @@
257
229
  "LBAI": true,
258
230
  "LUCIC": true,
259
231
  "MINDFAK": true,
260
- "MIX": true,
261
232
  "OPUL": true,
262
233
  "SARA": true,
263
- "SQL": true,
264
234
  "SWFTC": true
265
235
  },
266
236
  "total_in_usd": {
@@ -278,15 +248,11 @@
278
248
  "LBAI": true,
279
249
  "LUCIC": true,
280
250
  "MINDFAK": true,
281
- "MIX": true,
282
251
  "OPUL": true,
283
252
  "SARA": true,
284
- "SQL": true,
285
253
  "SWFTC": true
286
254
  },
287
- "orderbook": {
288
- "MIX": true
289
- }
255
+ "orderbook": {}
290
256
  },
291
257
  "client_levels": {
292
258
  "ARMY": [1, 2, 5, 10, 20, 50, 100],
@@ -299,10 +265,8 @@
299
265
  "LBAI": [1, 2, 5, 10, 20, 50, 100],
300
266
  "LUCIC": [1, 2, 5, 10, 20, 50, 100],
301
267
  "MINDFAK": [1, 2, 5, 10, 20, 50, 100],
302
- "MIX": [2, 5, 10],
303
268
  "OPUL": [1, 2, 5, 10, 20, 50, 100],
304
269
  "SARA": [1, 2, 5, 10, 20, 50, 100],
305
- "SQL": [1, 2, 5, 10, 20, 50, 100],
306
270
  "SWFTC": [1, 2, 5, 10, 20, 50, 100]
307
271
  },
308
272
  "client_price_index_curs": {
@@ -316,10 +280,8 @@
316
280
  "LBAI": ["BTC", "ETH"],
317
281
  "LUCIC": ["BTC", "ETH"],
318
282
  "MINDFAK": ["BTC", "ETH"],
319
- "MIX": ["BTC", "ETH"],
320
283
  "OPUL": ["BTC", "ETH"],
321
284
  "SARA": ["BTC", "ETH"],
322
- "SQL": ["BTC", "ETH"],
323
285
  "SWFTC": ["BTC", "ETH"]
324
286
  },
325
287
  "client_telegram_ids": {
@@ -333,10 +295,8 @@
333
295
  "LBAI": "-4939231107",
334
296
  "LUCIC": "-4701729001",
335
297
  "MINDFAK": "-4869618531",
336
- "MIX": "-4941930380",
337
298
  "OPUL": "-4581926908",
338
299
  "SARA": "-4660700305",
339
- "SQL": "-4959066810",
340
300
  "SWFTC": "-1002067948127"
341
301
  },
342
302
  "balance_premium": {
@@ -359,10 +319,8 @@
359
319
  "LBAI": "icg",
360
320
  "LUCIC": "icg",
361
321
  "MINDFAK": "icg",
362
- "MIX": "icg",
363
322
  "OPUL": "icg",
364
323
  "SARA": "icg",
365
- "SQL": "icg",
366
324
  "SWFTC": "icg"
367
325
  },
368
326
  "client_dashboard_credentials": {
@@ -410,10 +368,6 @@
410
368
  "username": "mindfak@icg.io",
411
369
  "password": "ccGjkj0U6LRjIfW"
412
370
  },
413
- "MIX": {
414
- "username": "mix@icg.io",
415
- "password": "2sNhI8ohGSYxmgc"
416
- },
417
371
  "OPUL": {
418
372
  "username": "opul@icg.io",
419
373
  "password": "GPrGIgSjR75bqqF"
@@ -422,10 +376,6 @@
422
376
  "username": "sara@icg.io",
423
377
  "password": "5PNgIqLM0msiWNf"
424
378
  },
425
- "SQL": {
426
- "username": "sql@icg.io",
427
- "password": "lhwGkPtLq3o7gJj5"
428
- },
429
379
  "SUPERADMIN": {
430
380
  "username": "superadmin@icg.io",
431
381
  "password": "vUmU5Jeoo67g18QR"
@@ -435,12 +385,8 @@
435
385
  "password": "XeH7kUVRjsEisQ0"
436
386
  }
437
387
  },
438
- "server_config_enabled": {
439
- "MIX": true
440
- },
441
- "server_config_whitelist_ips": {
442
- "MIX": ["172.105.237.102", "18.140.53.222", "178.157.58.210" , "172.104.86.85", "172.104.97.165"]
443
- },
388
+ "server_config_enabled": {},
389
+ "server_config_whitelist_ips": {},
444
390
  "server_config_admin_whitelist_ips": {
445
391
  "ARMY": ["172.105.237.102"],
446
392
  "B3TR": ["172.105.237.102"],
@@ -452,10 +398,8 @@
452
398
  "LBAI": ["172.105.237.102"],
453
399
  "LUCIC": ["172.105.237.102"],
454
400
  "MINDFAK": ["172.105.237.102"],
455
- "MIX": ["172.105.237.102", "172.104.86.85", "172.104.97.165"],
456
401
  "OPUL": ["172.105.237.102"],
457
402
  "SARA": ["172.105.237.102"],
458
- "SQL": ["172.105.237.102"],
459
403
  "SWFTC": ["172.105.237.102"]
460
404
  }
461
405
  }
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.262",
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.264",
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()