agenticpool 1.0.19 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -118
- package/bin/agenticpool.js +6 -0
- package/dist/adapters/autogen.d.ts +33 -0
- package/dist/adapters/autogen.d.ts.map +1 -0
- package/dist/adapters/autogen.js +49 -0
- package/dist/adapters/autogen.js.map +1 -0
- package/dist/adapters/crewai.d.ts +30 -0
- package/dist/adapters/crewai.d.ts.map +1 -0
- package/dist/adapters/crewai.js +48 -0
- package/dist/adapters/crewai.js.map +1 -0
- package/dist/adapters/langchain.d.ts +30 -0
- package/dist/adapters/langchain.d.ts.map +1 -0
- package/dist/adapters/langchain.js +53 -0
- package/dist/adapters/langchain.js.map +1 -0
- package/dist/adapters/llamaindex.d.ts +29 -0
- package/dist/adapters/llamaindex.d.ts.map +1 -0
- package/dist/adapters/llamaindex.js +47 -0
- package/dist/adapters/llamaindex.js.map +1 -0
- package/dist/adapters/openai.d.ts +21 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +51 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +187 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +115 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +251 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/balance.d.ts +4 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +34 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/contract.d.ts +20 -0
- package/dist/commands/contract.d.ts.map +1 -0
- package/dist/commands/contract.js +188 -0
- package/dist/commands/contract.js.map +1 -0
- package/dist/commands/favor.d.ts +21 -0
- package/dist/commands/favor.d.ts.map +1 -0
- package/dist/commands/favor.js +144 -0
- package/dist/commands/favor.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +77 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/reputation.d.ts +2 -0
- package/dist/commands/reputation.d.ts.map +1 -0
- package/dist/commands/reputation.js +38 -0
- package/dist/commands/reputation.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +110 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/services.d.ts +16 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +93 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/trust.d.ts +2 -0
- package/dist/commands/trust.d.ts.map +1 -0
- package/dist/commands/trust.js +44 -0
- package/dist/commands/trust.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +32 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +72 -0
- package/dist/config.js.map +1 -0
- package/dist/economy/duckies.d.ts +75 -0
- package/dist/economy/duckies.d.ts.map +1 -0
- package/dist/economy/duckies.js +386 -0
- package/dist/economy/duckies.js.map +1 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -29
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +28 -38
- package/LICENSE +0 -1
- package/dist/api/ApiClient.d.ts +0 -37
- package/dist/api/ApiClient.js +0 -160
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.js +0 -6
- package/dist/auth/AuthHelper.d.ts +0 -17
- package/dist/auth/AuthHelper.js +0 -197
- package/dist/commands/auth.d.ts +0 -2
- package/dist/commands/auth.js +0 -206
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.js +0 -51
- package/dist/commands/connections.d.ts +0 -2
- package/dist/commands/connections.js +0 -244
- package/dist/commands/contacts.d.ts +0 -2
- package/dist/commands/contacts.js +0 -205
- package/dist/commands/conversations.d.ts +0 -2
- package/dist/commands/conversations.js +0 -251
- package/dist/commands/errors.d.ts +0 -2
- package/dist/commands/errors.js +0 -73
- package/dist/commands/humans.d.ts +0 -2
- package/dist/commands/humans.js +0 -161
- package/dist/commands/identities.d.ts +0 -2
- package/dist/commands/identities.js +0 -141
- package/dist/commands/index.d.ts +0 -11
- package/dist/commands/index.js +0 -26
- package/dist/commands/messages.d.ts +0 -2
- package/dist/commands/messages.js +0 -216
- package/dist/commands/networks.d.ts +0 -2
- package/dist/commands/networks.js +0 -430
- package/dist/commands/profile.d.ts +0 -2
- package/dist/commands/profile.js +0 -257
- package/dist/config/ConfigManager.d.ts +0 -47
- package/dist/config/ConfigManager.js +0 -234
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.js +0 -7
- package/dist/datamodel/index.d.ts +0 -3
- package/dist/datamodel/index.js +0 -20
- package/dist/datamodel/models/humans.d.ts +0 -81
- package/dist/datamodel/models/humans.js +0 -3
- package/dist/datamodel/models/index.d.ts +0 -110
- package/dist/datamodel/models/index.js +0 -3
- package/dist/datamodel/toon/index.d.ts +0 -5
- package/dist/datamodel/toon/index.js +0 -225
- package/dist/limits/LimitsManager.d.ts +0 -23
- package/dist/limits/LimitsManager.js +0 -99
- package/dist/utils/colors.d.ts +0 -16
- package/dist/utils/colors.js +0 -23
- package/dist/utils/logger.d.ts +0 -11
- package/dist/utils/logger.js +0 -34
package/dist/commands/profile.js
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.registerProfileCommands = registerProfileCommands;
|
|
7
|
-
const AuthHelper_1 = require("../auth/AuthHelper");
|
|
8
|
-
const config_1 = require("../config");
|
|
9
|
-
const colors_1 = __importDefault(require("../utils/colors"));
|
|
10
|
-
function registerProfileCommands(program) {
|
|
11
|
-
const profile = program.command('profile').description('Profile management commands');
|
|
12
|
-
profile
|
|
13
|
-
.command('questions')
|
|
14
|
-
.description('Get profile questions for a network')
|
|
15
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
16
|
-
.action(async (options) => {
|
|
17
|
-
try {
|
|
18
|
-
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
19
|
-
const response = await client.get(`/v1/networks/${options.network}/questions`);
|
|
20
|
-
if (response.success && response.data) {
|
|
21
|
-
if (response.data.length === 0) {
|
|
22
|
-
console.log(colors_1.default.yellow('No profile questions for this network.'));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
console.log(colors_1.default.green.bold('\nProfile Questions:\n'));
|
|
26
|
-
response.data.forEach((q, index) => {
|
|
27
|
-
console.log(colors_1.default.cyan(`${index + 1}. ${q.question}`));
|
|
28
|
-
console.log(colors_1.default.gray(` ID: ${q.id}`));
|
|
29
|
-
console.log(colors_1.default.gray(` Required: ${q.required ? 'Yes' : 'No'}`));
|
|
30
|
-
console.log();
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to get questions');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
profile
|
|
42
|
-
.command('set')
|
|
43
|
-
.description('Set your profile for a network')
|
|
44
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
45
|
-
.option('-s, --short <desc>', 'Short description')
|
|
46
|
-
.option('-l, --long <desc>', 'Long description')
|
|
47
|
-
.option('-f, --long-file <file>', 'Read long description from file')
|
|
48
|
-
.action(async (options) => {
|
|
49
|
-
try {
|
|
50
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
51
|
-
let longDescription = options.long;
|
|
52
|
-
if (options.longFile) {
|
|
53
|
-
const filePath = options.longFile;
|
|
54
|
-
longDescription = require('fs').readFileSync(filePath, 'utf-8');
|
|
55
|
-
}
|
|
56
|
-
const updateData = {};
|
|
57
|
-
if (options.short)
|
|
58
|
-
updateData.shortDescription = options.short;
|
|
59
|
-
if (longDescription)
|
|
60
|
-
updateData.longDescription = longDescription;
|
|
61
|
-
const response = await client.put(`/v1/networks/${options.network}/profile`, updateData);
|
|
62
|
-
if (response.success) {
|
|
63
|
-
console.log(colors_1.default.green('✓ Profile updated successfully!'));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to update profile');
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
profile
|
|
74
|
-
.command('get')
|
|
75
|
-
.description('Get your profile for a network')
|
|
76
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
77
|
-
.action(async (options) => {
|
|
78
|
-
try {
|
|
79
|
-
const { client, credentials } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
80
|
-
const response = await client.get(`/v1/networks/${options.network}/profile`);
|
|
81
|
-
if (response.success && response.data) {
|
|
82
|
-
const profile = response.data;
|
|
83
|
-
console.log(colors_1.default.cyan.bold('\nYour Profile\n'));
|
|
84
|
-
console.log(colors_1.default.gray('Public Token:'), credentials.publicToken);
|
|
85
|
-
console.log(colors_1.default.gray('Role:'), profile.role || 'member');
|
|
86
|
-
console.log(colors_1.default.gray('Short Description:'), profile.shortDescription || '(none)');
|
|
87
|
-
if (profile.longDescription) {
|
|
88
|
-
console.log(colors_1.default.gray('\nLong Description:'));
|
|
89
|
-
console.log(profile.longDescription);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to get profile');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
profile
|
|
101
|
-
.command('show')
|
|
102
|
-
.description("Show another swimmer's public profile")
|
|
103
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
104
|
-
.requiredOption('-p, --public-token <token>', 'Public Token of the swimmer')
|
|
105
|
-
.action(async (options) => {
|
|
106
|
-
try {
|
|
107
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
108
|
-
const response = await client.get(`/v1/networks/${options.network}/members/${options.publicToken}/profile`);
|
|
109
|
-
if (response.success && response.data) {
|
|
110
|
-
const profile = response.data;
|
|
111
|
-
console.log(colors_1.default.cyan.bold(`\nPublic Profile: ${options.publicToken}\n`));
|
|
112
|
-
console.log(colors_1.default.gray('Short Description:'), profile.shortDescription || '(none)');
|
|
113
|
-
if (profile.longDescription) {
|
|
114
|
-
console.log(colors_1.default.gray('\nLong Description:'));
|
|
115
|
-
console.log(profile.longDescription);
|
|
116
|
-
}
|
|
117
|
-
if (profile.profileAnswers && Object.keys(profile.profileAnswers).length > 0) {
|
|
118
|
-
console.log(colors_1.default.yellow.bold('\nProfile Answers:'));
|
|
119
|
-
Object.entries(profile.profileAnswers).forEach(([qId, answer]) => {
|
|
120
|
-
console.log(`${colors_1.default.cyan(qId)}: ${colors_1.default.white(String(answer))}`);
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to get public profile');
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
profile
|
|
133
|
-
.command('complete')
|
|
134
|
-
.description('Complete profile by answering questions')
|
|
135
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
136
|
-
.option('-a, --answers <json>', 'JSON string of question ID to answer mapping')
|
|
137
|
-
.option('--auto', 'Auto-answer all required questions with default responses')
|
|
138
|
-
.action(async (options) => {
|
|
139
|
-
try {
|
|
140
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
141
|
-
let answers = {};
|
|
142
|
-
if (options.answers) {
|
|
143
|
-
answers = JSON.parse(options.answers);
|
|
144
|
-
}
|
|
145
|
-
else if (options.auto) {
|
|
146
|
-
const questionsRes = await client.get(`/v1/networks/${options.network}/questions`);
|
|
147
|
-
if (questionsRes.success && questionsRes.data) {
|
|
148
|
-
for (const q of questionsRes.data) {
|
|
149
|
-
if (q.required) {
|
|
150
|
-
answers[q.id] = `Auto-completed answer for: ${q.question}`;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
console.error(colors_1.default.red('Error:'), 'Provide --answers <json> or --auto flag');
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const response = await client.post(`/v1/networks/${options.network}/profile/complete`, {
|
|
160
|
-
answers
|
|
161
|
-
});
|
|
162
|
-
if (response.success && response.data) {
|
|
163
|
-
const data = response.data;
|
|
164
|
-
console.log(colors_1.default.green('✓ Profile completed!'));
|
|
165
|
-
console.log(colors_1.default.cyan('Completion:'), `${data.completionPercentage}%`);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to complete profile');
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
profile
|
|
176
|
-
.command('build')
|
|
177
|
-
.description('Build profile interactively')
|
|
178
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
179
|
-
.option('-i, --interactive', 'Interactive mode', true)
|
|
180
|
-
.action(async (options) => {
|
|
181
|
-
try {
|
|
182
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
183
|
-
const response = await client.get(`/v1/networks/${options.network}/questions`);
|
|
184
|
-
if (!response.success || !response.data || response.data.length === 0) {
|
|
185
|
-
console.log(colors_1.default.yellow('No profile questions for this network.'));
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const questions = response.data;
|
|
189
|
-
const answers = {};
|
|
190
|
-
console.log(colors_1.default.green.bold('\nBuilding Your Profile\n'));
|
|
191
|
-
console.log(colors_1.default.gray(`Found ${questions.length} profile questions\n`));
|
|
192
|
-
for (let i = 0; i < questions.length; i++) {
|
|
193
|
-
const q = questions[i];
|
|
194
|
-
console.log(colors_1.default.cyan(`${i + 1}. ${q.question}`));
|
|
195
|
-
console.log(colors_1.default.gray(' Required:'), q.required ? 'Yes' : 'No');
|
|
196
|
-
if (q.required) {
|
|
197
|
-
const answer = await askQuestion(q.question + ' ');
|
|
198
|
-
if (!answer.trim()) {
|
|
199
|
-
console.error(colors_1.default.red('Required question missing answer. Please try again.'));
|
|
200
|
-
process.exit(1);
|
|
201
|
-
}
|
|
202
|
-
answers[q.id || `question_${i}`] = answer;
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
const answer = await askQuestion(q.question + ' (optional): ');
|
|
206
|
-
if (answer.trim()) {
|
|
207
|
-
answers[q.id || `question_${i}`] = answer;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
console.log();
|
|
211
|
-
}
|
|
212
|
-
console.log(colors_1.default.green.bold('\nCompleting profile...\n'));
|
|
213
|
-
const completeResponse = await client.post(`/v1/networks/${options.network}/profile/complete`, {
|
|
214
|
-
answers
|
|
215
|
-
});
|
|
216
|
-
if (completeResponse.success && completeResponse.data) {
|
|
217
|
-
const data = completeResponse.data;
|
|
218
|
-
await config_1.configManager.saveJSONProfile(options.network, {
|
|
219
|
-
networkId: options.network,
|
|
220
|
-
answers,
|
|
221
|
-
completionPercentage: data.completionPercentage,
|
|
222
|
-
completedAt: new Date().toISOString()
|
|
223
|
-
});
|
|
224
|
-
console.log(colors_1.default.green('✓ Profile built successfully!\n'));
|
|
225
|
-
console.log(colors_1.default.cyan('Completion:'), `${data.completionPercentage}%`);
|
|
226
|
-
if (data.recommendations && data.recommendations.conversationsToJoin && data.recommendations.conversationsToJoin.length > 0) {
|
|
227
|
-
console.log(colors_1.default.yellow('\nRecommended conversations to join:'));
|
|
228
|
-
data.recommendations.conversationsToJoin.forEach((convId) => {
|
|
229
|
-
console.log(colors_1.default.gray(' -'), convId);
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
if (data.recommendations && data.recommendations.networkStrengths && data.recommendations.networkStrengths.length > 0) {
|
|
233
|
-
console.log(colors_1.default.yellow('\nYour network strengths:'));
|
|
234
|
-
data.recommendations.networkStrengths.forEach((strength) => {
|
|
235
|
-
console.log(colors_1.default.gray(' -'), strength);
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
console.error(colors_1.default.red('Error:'), completeResponse.error?.message || 'Failed to complete profile');
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
catch (error) {
|
|
244
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
async function askQuestion(prompt) {
|
|
249
|
-
return new Promise((resolve) => {
|
|
250
|
-
process.stdout.write(prompt);
|
|
251
|
-
process.stdin.setEncoding('utf-8');
|
|
252
|
-
process.stdin.once('data', (data) => {
|
|
253
|
-
resolve(data.toString().trim());
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9wcm9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0EsMERBaVFDO0FBclFELG1EQUFnRDtBQUNoRCxzQ0FBMEM7QUFDMUMsNkRBQW9DO0FBRXBDLFNBQWdCLHVCQUF1QixDQUFDLE9BQWdCO0lBQ3RELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFdEYsT0FBTztTQUNKLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDcEIsV0FBVyxDQUFDLHFDQUFxQyxDQUFDO1NBQ2xELGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLHVCQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFRLGdCQUFnQixPQUFPLENBQUMsT0FBTyxZQUFZLENBQUMsQ0FBQztZQUV0RixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFLLENBQUMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztvQkFDcEUsT0FBTztnQkFDVCxDQUFDO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztnQkFFeEQsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMs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Q0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxDQUFDO1lBQ3RHLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELEtBQUssVUFBVSxXQUFXLENBQUMsTUFBYztJQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vYXV0aC9BdXRoSGVscGVyJztcbmltcG9ydCB7IGNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IGNoYWxrIGZyb20gJy4uL3V0aWxzL2NvbG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclByb2ZpbGVDb21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IHByb2ZpbGUgPSBwcm9ncmFtLmNvbW1hbmQoJ3Byb2ZpbGUnKS5kZXNjcmlwdGlvbignUHJvZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzJyk7XG5cbiAgcHJvZmlsZVxuICAgIC5jb21tYW5kKCdxdWVzdGlvbnMnKVxuICAgIC5kZXNjcmlwdGlvbignR2V0IHByb2ZpbGUgcXVlc3Rpb25zIGZvciBhIG5ldHdvcmsnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmV0d29yayA8aWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oYC92MS9uZXR3b3Jrcy8ke29wdGlvbnMubmV0d29ya30vcXVlc3Rpb25zYCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdObyBwcm9maWxlIHF1ZXN0aW9ucyBmb3IgdGhpcyBuZXR3b3JrLicpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKCdcXG5Qcm9maWxlIFF1ZXN0aW9uczpcXG4nKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKHE6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgJHtpbmRleCArIDF9LiAke3EucXVlc3Rpb259YCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgSUQ6ICR7cS5pZH1gKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgICBSZXF1aXJlZDogJHtxLnJlcXVpcmVkID8gJ1llcycgOiAnTm8nfWApKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBxdWVzdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcHJvZmlsZVxuICAgIC5jb21tYW5kKCdzZXQnKVxuICAgIC5kZXNjcmlwdGlvbignU2V0IHlvdXIgcHJvZmlsZSBmb3IgYSBuZXR3b3JrJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAub3B0aW9uKCctcywgLS1zaG9ydCA8ZGVzYz4nLCAnU2hvcnQgZGVzY3JpcHRpb24nKVxuICAgIC5vcHRpb24oJy1sLCAtLWxvbmcgPGRlc2M+JywgJ0xvbmcgZGVzY3JpcHRpb24nKVxuICAgIC5vcHRpb24oJy1mLCAtLWxvbmctZmlsZSA8ZmlsZT4nLCAnUmVhZCBsb25nIGRlc2NyaXB0aW9uIGZyb20gZmlsZScpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgbGV0IGxvbmdEZXNjcmlwdGlvbiA9IG9wdGlvbnMubG9uZztcbiAgICAgICAgaWYgKG9wdGlvbnMubG9uZ0ZpbGUpIHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IG9wdGlvbnMubG9uZ0ZpbGU7XG4gICAgICAgICAgbG9uZ0Rlc2NyaXB0aW9uID0gcmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlRGF0YTogYW55ID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnNob3J0KSB1cGRhdGVEYXRhLnNob3J0RGVzY3JpcHRpb24gPSBvcHRpb25zLnNob3J0O1xuICAgICAgICBpZiAobG9uZ0Rlc2NyaXB0aW9uKSB1cGRhdGVEYXRhLmxvbmdEZXNjcmlwdGlvbiA9IGxvbmdEZXNjcmlwdGlvbjtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoYC92MS9uZXR3b3Jrcy8ke29wdGlvbnMubmV0d29ya30vcHJvZmlsZWAsIHVwZGF0ZURhdGEpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBQcm9maWxlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IScpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBkYXRlIHByb2ZpbGUnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcHJvZmlsZVxuICAgIC5jb21tYW5kKCdnZXQnKVxuICAgIC5kZXNjcmlwdGlvbignR2V0IHlvdXIgcHJvZmlsZSBmb3IgYSBuZXR3b3JrJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBjcmVkZW50aWFscyB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueT4oYC92MS9uZXR3b3Jrcy8ke29wdGlvbnMubmV0d29ya30vcHJvZmlsZWApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBjb25zdCBwcm9maWxlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuLmJvbGQoJ1xcbllvdXIgUHJvZmlsZVxcbicpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQdWJsaWMgVG9rZW46JyksIGNyZWRlbnRpYWxzLnB1YmxpY1Rva2VuKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdSb2xlOicpLCBwcm9maWxlLnJvbGUgfHwgJ21lbWJlcicpO1xuICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdTaG9ydCBEZXNjcmlwdGlvbjonKSwgcHJvZmlsZS5zaG9ydERlc2NyaXB0aW9uIHx8ICcobm9uZSknKTtcblxuICAgICAgICAgIGlmIChwcm9maWxlLmxvbmdEZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnXFxuTG9uZyBEZXNjcmlwdGlvbjonKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9maWxlLmxvbmdEZXNjcmlwdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBnZXQgcHJvZmlsZScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBwcm9maWxlXG4gICAgLmNvbW1hbmQoJ3Nob3cnKVxuICAgIC5kZXNjcmlwdGlvbihcIlNob3cgYW5vdGhlciBzd2ltbWVyJ3MgcHVibGljIHByb2ZpbGVcIilcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1wLCAtLXB1YmxpYy10b2tlbiA8dG9rZW4+JywgJ1B1YmxpYyBUb2tlbiBvZiB0aGUgc3dpbW1lcicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueT4oYC92MS9uZXR3b3Jrcy8ke29wdGlvbnMubmV0d29ya30vbWVtYmVycy8ke29wdGlvbnMucHVibGljVG9rZW59L3Byb2ZpbGVgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgcHJvZmlsZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBcXG5QdWJsaWMgUHJvZmlsZTogJHtvcHRpb25zLnB1YmxpY1Rva2VufVxcbmApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdTaG9ydCBEZXNjcmlwdGlvbjonKSwgcHJvZmlsZS5zaG9ydERlc2NyaXB0aW9uIHx8ICcobm9uZSknKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAocHJvZmlsZS5sb25nRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1xcbkxvbmcgRGVzY3JpcHRpb246JykpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocHJvZmlsZS5sb25nRGVzY3JpcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9maWxlLnByb2ZpbGVBbnN3ZXJzICYmIE9iamVjdC5rZXlzKHByb2ZpbGUucHJvZmlsZUFuc3dlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKCdcXG5Qcm9maWxlIEFuc3dlcnM6JykpO1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvZmlsZS5wcm9maWxlQW5zd2VycykuZm9yRWFjaCgoW3FJZCwgYW5zd2VyXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKHFJZCl9OiAke2NoYWxrLndoaXRlKFN0cmluZyhhbnN3ZXIpKX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZ2V0IHB1YmxpYyBwcm9maWxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHByb2ZpbGVcbiAgICAuY29tbWFuZCgnY29tcGxldGUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29tcGxldGUgcHJvZmlsZSBieSBhbnN3ZXJpbmcgcXVlc3Rpb25zJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAub3B0aW9uKCctYSwgLS1hbnN3ZXJzIDxqc29uPicsICdKU09OIHN0cmluZyBvZiBxdWVzdGlvbiBJRCB0byBhbnN3ZXIgbWFwcGluZycpXG4gICAgLm9wdGlvbignLS1hdXRvJywgJ0F1dG8tYW5zd2VyIGFsbCByZXF1aXJlZCBxdWVzdGlvbnMgd2l0aCBkZWZhdWx0IHJlc3BvbnNlcycpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgbGV0IGFuc3dlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hbnN3ZXJzKSB7XG4gICAgICAgICAgYW5zd2VycyA9IEpTT04ucGFyc2Uob3B0aW9ucy5hbnN3ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmF1dG8pIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbnNSZXMgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPihgL3YxL25ldHdvcmtzLyR7b3B0aW9ucy5uZXR3b3JrfS9xdWVzdGlvbnNgKTtcbiAgICAgICAgICBpZiAocXVlc3Rpb25zUmVzLnN1Y2Nlc3MgJiYgcXVlc3Rpb25zUmVzLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcSBvZiBxdWVzdGlvbnNSZXMuZGF0YSkge1xuICAgICAgICAgICAgICBpZiAocS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGFuc3dlcnNbcS5pZF0gPSBgQXV0by1jb21wbGV0ZWQgYW5zd2VyIGZvcjogJHtxLnF1ZXN0aW9ufWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCAnUHJvdmlkZSAtLWFuc3dlcnMgPGpzb24+IG9yIC0tYXV0byBmbGFnJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL3YxL25ldHdvcmtzLyR7b3B0aW9ucy5uZXR3b3JrfS9wcm9maWxlL2NvbXBsZXRlYCwge1xuICAgICAgICAgIGFuc3dlcnNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhIGFzIGFueTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIFByb2ZpbGUgY29tcGxldGVkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdDb21wbGV0aW9uOicpLCBgJHtkYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlfSVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gY29tcGxldGUgcHJvZmlsZScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBwcm9maWxlXG4gICAgLmNvbW1hbmQoJ2J1aWxkJylcbiAgICAuZGVzY3JpcHRpb24oJ0J1aWxkIHByb2ZpbGUgaW50ZXJhY3RpdmVseScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLm9wdGlvbignLWksIC0taW50ZXJhY3RpdmUnLCAnSW50ZXJhY3RpdmUgbW9kZScsIHRydWUpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oYC92MS9uZXR3b3Jrcy8ke29wdGlvbnMubmV0d29ya30vcXVlc3Rpb25zYCk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzIHx8ICFyZXNwb25zZS5kYXRhIHx8IHJlc3BvbnNlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdObyBwcm9maWxlIHF1ZXN0aW9ucyBmb3IgdGhpcyBuZXR3b3JrLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVzdGlvbnMgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICBjb25zdCBhbnN3ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZCgnXFxuQnVpbGRpbmcgWW91ciBQcm9maWxlXFxuJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBGb3VuZCAke3F1ZXN0aW9ucy5sZW5ndGh9IHByb2ZpbGUgcXVlc3Rpb25zXFxuYCkpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGAke2kgKyAxfS4gJHtxLnF1ZXN0aW9ufWApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICBSZXF1aXJlZDonKSwgcS5yZXF1aXJlZCA/ICdZZXMnIDogJ05vJyk7XG5cbiAgICAgICAgICBpZiAocS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgYXNrUXVlc3Rpb24ocS5xdWVzdGlvbiArICcgJyk7XG4gICAgICAgICAgICBpZiAoIWFuc3dlci50cmltKCkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ1JlcXVpcmVkIHF1ZXN0aW9uIG1pc3NpbmcgYW5zd2VyLiBQbGVhc2UgdHJ5IGFnYWluLicpKTtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5zd2Vyc1txLmlkIHx8IGBxdWVzdGlvbl8ke2l9YF0gPSBhbnN3ZXI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGFza1F1ZXN0aW9uKHEucXVlc3Rpb24gKyAnIChvcHRpb25hbCk6ICcpO1xuICAgICAgICAgICAgaWYgKGFuc3dlci50cmltKCkpIHtcbiAgICAgICAgICAgICAgYW5zd2Vyc1txLmlkIHx8IGBxdWVzdGlvbl8ke2l9YF0gPSBhbnN3ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoJ1xcbkNvbXBsZXRpbmcgcHJvZmlsZS4uLlxcbicpKTtcblxuICAgICAgICBjb25zdCBjb21wbGV0ZVJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC92MS9uZXR3b3Jrcy8ke29wdGlvbnMubmV0d29ya30vcHJvZmlsZS9jb21wbGV0ZWAsIHtcbiAgICAgICAgICBhbnN3ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjb21wbGV0ZVJlc3BvbnNlLnN1Y2Nlc3MgJiYgY29tcGxldGVSZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGNvbXBsZXRlUmVzcG9uc2UuZGF0YSBhcyBhbnk7XG5cbiAgICAgICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLnNhdmVKU09OUHJvZmlsZShvcHRpb25zLm5ldHdvcmssIHtcbiAgICAgICAgICAgIG5ldHdvcmtJZDogb3B0aW9ucy5uZXR3b3JrLFxuICAgICAgICAgICAgYW5zd2VycyxcbiAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBkYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlLFxuICAgICAgICAgICAgY29tcGxldGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBQcm9maWxlIGJ1aWx0IHN1Y2Nlc3NmdWxseSFcXG4nKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignQ29tcGxldGlvbjonKSwgYCR7ZGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZX0lYCk7XG5cbiAgICAgICAgICBpZiAoZGF0YS5yZWNvbW1lbmRhdGlvbnMgJiYgZGF0YS5yZWNvbW1lbmRhdGlvbnMuY29udmVyc2F0aW9uc1RvSm9pbiAmJiBkYXRhLnJlY29tbWVuZGF0aW9ucy5jb252ZXJzYXRpb25zVG9Kb2luLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxuUmVjb21tZW5kZWQgY29udmVyc2F0aW9ucyB0byBqb2luOicpKTtcbiAgICAgICAgICAgIGRhdGEucmVjb21tZW5kYXRpb25zLmNvbnZlcnNhdGlvbnNUb0pvaW4uZm9yRWFjaCgoY29udklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAtJyksIGNvbnZJZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGF0YS5yZWNvbW1lbmRhdGlvbnMgJiYgZGF0YS5yZWNvbW1lbmRhdGlvbnMubmV0d29ya1N0cmVuZ3RocyAmJiBkYXRhLnJlY29tbWVuZGF0aW9ucy5uZXR3b3JrU3RyZW5ndGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxuWW91ciBuZXR3b3JrIHN0cmVuZ3RoczonKSk7XG4gICAgICAgICAgICBkYXRhLnJlY29tbWVuZGF0aW9ucy5uZXR3b3JrU3RyZW5ndGhzLmZvckVhY2goKHN0cmVuZ3RoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAtJyksIHN0cmVuZ3RoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGNvbXBsZXRlUmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb21wbGV0ZSBwcm9maWxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhc2tRdWVzdGlvbihwcm9tcHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHByb21wdCk7XG4gICAgcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmLTgnKTtcbiAgICBwcm9jZXNzLnN0ZGluLm9uY2UoJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgcmVzb2x2ZShkYXRhLnRvU3RyaW5nKCkudHJpbSgpKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
export interface GlobalConfig {
|
|
2
|
-
apiUrl: string;
|
|
3
|
-
defaultFormat: 'toon' | 'json';
|
|
4
|
-
humansApiUrl?: string;
|
|
5
|
-
humanUid?: string;
|
|
6
|
-
humanJwt?: string;
|
|
7
|
-
humanJwtExpiresAt?: number;
|
|
8
|
-
}
|
|
9
|
-
export interface NetworkCredentials {
|
|
10
|
-
publicToken: string;
|
|
11
|
-
privateKey: string;
|
|
12
|
-
jwt?: string;
|
|
13
|
-
expiresAt?: number;
|
|
14
|
-
}
|
|
15
|
-
export interface Identity {
|
|
16
|
-
publicToken: string;
|
|
17
|
-
privateKey: string;
|
|
18
|
-
}
|
|
19
|
-
export declare class ConfigManager {
|
|
20
|
-
private initialized;
|
|
21
|
-
private initializing;
|
|
22
|
-
init(): Promise<void>;
|
|
23
|
-
getGlobalConfig(): Promise<GlobalConfig>;
|
|
24
|
-
saveGlobalConfig(config: GlobalConfig): Promise<void>;
|
|
25
|
-
saveDefaultIdentity(identity: Identity): Promise<void>;
|
|
26
|
-
getDefaultIdentity(): Promise<Identity | null>;
|
|
27
|
-
setApiUrl(url: string): Promise<void>;
|
|
28
|
-
getCredentials(networkId: string): Promise<NetworkCredentials | null>;
|
|
29
|
-
saveCredentials(networkId: string, credentials: NetworkCredentials): Promise<void>;
|
|
30
|
-
addRegisteredNetwork(networkId: string, reason?: string): Promise<void>;
|
|
31
|
-
getRegisteredNetworks(): Promise<string[]>;
|
|
32
|
-
getNetworkHistory(): Promise<{
|
|
33
|
-
id: string;
|
|
34
|
-
reason?: string;
|
|
35
|
-
}[]>;
|
|
36
|
-
clearCredentials(networkId: string): Promise<void>;
|
|
37
|
-
getProfile(networkId: string): Promise<string | null>;
|
|
38
|
-
saveProfile(networkId: string, content: string): Promise<void>;
|
|
39
|
-
getJSONProfile<T = Record<string, any>>(networkId: string): Promise<T | null>;
|
|
40
|
-
saveJSONProfile(networkId: string, data: Record<string, any>): Promise<void>;
|
|
41
|
-
getAllJSONProfiles(): Promise<Record<string, any>>;
|
|
42
|
-
getCache<T>(key: string): Promise<T | null>;
|
|
43
|
-
setCache<T>(key: string, data: T): Promise<void>;
|
|
44
|
-
clearCache(): Promise<void>;
|
|
45
|
-
getConfigPath(): string;
|
|
46
|
-
}
|
|
47
|
-
export declare const configManager: ConfigManager;
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.configManager = exports.ConfigManager = void 0;
|
|
37
|
-
const path = __importStar(require("path"));
|
|
38
|
-
const os = __importStar(require("os"));
|
|
39
|
-
const fs = __importStar(require("fs-extra"));
|
|
40
|
-
const logger_1 = require("../utils/logger");
|
|
41
|
-
const CONFIG_DIR = path.join(os.homedir(), '.agenticpool');
|
|
42
|
-
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
43
|
-
const IDENTITY_FILE = path.join(CONFIG_DIR, 'identity.json');
|
|
44
|
-
const CREDENTIALS_DIR = path.join(CONFIG_DIR, 'credentials');
|
|
45
|
-
const PROFILES_DIR = path.join(CONFIG_DIR, 'profiles');
|
|
46
|
-
const CACHE_DIR = path.join(CONFIG_DIR, 'cache');
|
|
47
|
-
const NETWORKS_FILE = path.join(CONFIG_DIR, 'networks.md');
|
|
48
|
-
class ConfigManager {
|
|
49
|
-
constructor() {
|
|
50
|
-
this.initialized = false;
|
|
51
|
-
this.initializing = false;
|
|
52
|
-
}
|
|
53
|
-
async init() {
|
|
54
|
-
if (this.initialized || this.initializing)
|
|
55
|
-
return;
|
|
56
|
-
this.initializing = true;
|
|
57
|
-
logger_1.logger.debug(`Initializing ConfigManager. Path: ${CONFIG_DIR}`);
|
|
58
|
-
try {
|
|
59
|
-
await fs.ensureDir(CONFIG_DIR);
|
|
60
|
-
await fs.ensureDir(CREDENTIALS_DIR);
|
|
61
|
-
await fs.ensureDir(PROFILES_DIR);
|
|
62
|
-
await fs.ensureDir(CACHE_DIR);
|
|
63
|
-
if (!(await fs.pathExists(CONFIG_FILE))) {
|
|
64
|
-
logger_1.logger.debug('Creating default config file');
|
|
65
|
-
const defaultConfig = {
|
|
66
|
-
apiUrl: 'https://api.agenticpool.net',
|
|
67
|
-
defaultFormat: 'toon'
|
|
68
|
-
};
|
|
69
|
-
await fs.writeJson(CONFIG_FILE, defaultConfig, { spaces: 2 });
|
|
70
|
-
}
|
|
71
|
-
if (!(await fs.pathExists(NETWORKS_FILE))) {
|
|
72
|
-
logger_1.logger.debug('Creating default networks file');
|
|
73
|
-
await fs.writeFile(NETWORKS_FILE, '# Registered AgenticPool Networks\n\n');
|
|
74
|
-
}
|
|
75
|
-
this.initialized = true;
|
|
76
|
-
logger_1.logger.debug('ConfigManager initialized');
|
|
77
|
-
}
|
|
78
|
-
catch (e) {
|
|
79
|
-
logger_1.logger.debug(`ConfigManager init failed: ${e instanceof Error ? e.message : 'Unknown'}`);
|
|
80
|
-
throw e;
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
this.initializing = false;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
async getGlobalConfig() {
|
|
87
|
-
await this.init();
|
|
88
|
-
return fs.readJson(CONFIG_FILE);
|
|
89
|
-
}
|
|
90
|
-
async saveGlobalConfig(config) {
|
|
91
|
-
await this.init();
|
|
92
|
-
logger_1.logger.debug('Saving global config');
|
|
93
|
-
await fs.writeJson(CONFIG_FILE, config, { spaces: 2 });
|
|
94
|
-
}
|
|
95
|
-
async saveDefaultIdentity(identity) {
|
|
96
|
-
await this.init();
|
|
97
|
-
logger_1.logger.debug('Saving default identity');
|
|
98
|
-
await fs.writeJson(IDENTITY_FILE, identity, { spaces: 2 });
|
|
99
|
-
}
|
|
100
|
-
async getDefaultIdentity() {
|
|
101
|
-
await this.init();
|
|
102
|
-
if (!(await fs.pathExists(IDENTITY_FILE))) {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
return fs.readJson(IDENTITY_FILE);
|
|
106
|
-
}
|
|
107
|
-
async setApiUrl(url) {
|
|
108
|
-
const config = await this.getGlobalConfig();
|
|
109
|
-
config.apiUrl = url;
|
|
110
|
-
await this.saveGlobalConfig(config);
|
|
111
|
-
}
|
|
112
|
-
async getCredentials(networkId) {
|
|
113
|
-
await this.init();
|
|
114
|
-
const credFile = path.join(CREDENTIALS_DIR, `${networkId}.json`);
|
|
115
|
-
if (!(await fs.pathExists(credFile))) {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
const creds = await fs.readJson(credFile);
|
|
119
|
-
if (creds.expiresAt && Date.now() > creds.expiresAt) {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
return creds;
|
|
123
|
-
}
|
|
124
|
-
async saveCredentials(networkId, credentials) {
|
|
125
|
-
await this.init();
|
|
126
|
-
const credFile = path.join(CREDENTIALS_DIR, `${networkId}.json`);
|
|
127
|
-
logger_1.logger.debug(`Saving credentials for ${networkId}`);
|
|
128
|
-
await fs.writeJson(credFile, credentials, { spaces: 2 });
|
|
129
|
-
}
|
|
130
|
-
async addRegisteredNetwork(networkId, reason) {
|
|
131
|
-
await this.init();
|
|
132
|
-
logger_1.logger.debug(`Registering network in local history: ${networkId}`);
|
|
133
|
-
const content = await fs.readFile(NETWORKS_FILE, 'utf-8');
|
|
134
|
-
const lines = content.split('\n');
|
|
135
|
-
const entryPrefix = `- ${networkId}`;
|
|
136
|
-
const fullEntry = `- ${networkId}${reason ? ` | Reason: ${reason}` : ''}`;
|
|
137
|
-
const existingIndex = lines.findIndex(line => line.trim().startsWith(entryPrefix));
|
|
138
|
-
if (existingIndex !== -1) {
|
|
139
|
-
lines[existingIndex] = fullEntry;
|
|
140
|
-
await fs.writeFile(NETWORKS_FILE, lines.join('\n'));
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
await fs.appendFile(NETWORKS_FILE, `${fullEntry}\n`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
async getRegisteredNetworks() {
|
|
147
|
-
await this.init();
|
|
148
|
-
const content = await fs.readFile(NETWORKS_FILE, 'utf-8');
|
|
149
|
-
return content
|
|
150
|
-
.split('\n')
|
|
151
|
-
.filter(line => line.startsWith('- '))
|
|
152
|
-
.map(line => line.replace('- ', '').trim());
|
|
153
|
-
}
|
|
154
|
-
async getNetworkHistory() {
|
|
155
|
-
await this.init();
|
|
156
|
-
const content = await fs.readFile(NETWORKS_FILE, 'utf-8');
|
|
157
|
-
return content
|
|
158
|
-
.split('\n')
|
|
159
|
-
.filter(line => line.startsWith('- '))
|
|
160
|
-
.map(line => {
|
|
161
|
-
const parts = line.replace('- ', '').split('| Reason:');
|
|
162
|
-
return {
|
|
163
|
-
id: parts[0].trim(),
|
|
164
|
-
reason: parts[1] ? parts[1].trim() : undefined
|
|
165
|
-
};
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
async clearCredentials(networkId) {
|
|
169
|
-
await this.init();
|
|
170
|
-
const credFile = path.join(CREDENTIALS_DIR, `${networkId}.json`);
|
|
171
|
-
await fs.remove(credFile);
|
|
172
|
-
}
|
|
173
|
-
async getProfile(networkId) {
|
|
174
|
-
await this.init();
|
|
175
|
-
const profileFile = path.join(PROFILES_DIR, `${networkId}.md`);
|
|
176
|
-
if (!(await fs.pathExists(profileFile))) {
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
return fs.readFile(profileFile, 'utf-8');
|
|
180
|
-
}
|
|
181
|
-
async saveProfile(networkId, content) {
|
|
182
|
-
await this.init();
|
|
183
|
-
const profileFile = path.join(PROFILES_DIR, `${networkId}.md`);
|
|
184
|
-
await fs.writeFile(profileFile, content);
|
|
185
|
-
}
|
|
186
|
-
async getJSONProfile(networkId) {
|
|
187
|
-
await this.init();
|
|
188
|
-
const profileFile = path.join(PROFILES_DIR, `${networkId}.json`);
|
|
189
|
-
if (!(await fs.pathExists(profileFile))) {
|
|
190
|
-
return null;
|
|
191
|
-
}
|
|
192
|
-
return fs.readJson(profileFile);
|
|
193
|
-
}
|
|
194
|
-
async saveJSONProfile(networkId, data) {
|
|
195
|
-
await this.init();
|
|
196
|
-
const profileFile = path.join(PROFILES_DIR, `${networkId}.json`);
|
|
197
|
-
await fs.writeJson(profileFile, data, { spaces: 2 });
|
|
198
|
-
}
|
|
199
|
-
async getAllJSONProfiles() {
|
|
200
|
-
await this.init();
|
|
201
|
-
const files = await fs.readdir(PROFILES_DIR);
|
|
202
|
-
const profiles = {};
|
|
203
|
-
for (const file of files) {
|
|
204
|
-
if (file.endsWith('.json')) {
|
|
205
|
-
const networkId = file.replace('.json', '');
|
|
206
|
-
profiles[networkId] = await fs.readJson(path.join(PROFILES_DIR, file));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
return profiles;
|
|
210
|
-
}
|
|
211
|
-
async getCache(key) {
|
|
212
|
-
await this.init();
|
|
213
|
-
const cacheFile = path.join(CACHE_DIR, `${key}.json`);
|
|
214
|
-
if (!(await fs.pathExists(cacheFile))) {
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
return fs.readJson(cacheFile);
|
|
218
|
-
}
|
|
219
|
-
async setCache(key, data) {
|
|
220
|
-
await this.init();
|
|
221
|
-
const cacheFile = path.join(CACHE_DIR, `${key}.json`);
|
|
222
|
-
await fs.writeJson(cacheFile, data, { spaces: 2 });
|
|
223
|
-
}
|
|
224
|
-
async clearCache() {
|
|
225
|
-
await this.init();
|
|
226
|
-
await fs.emptyDir(CACHE_DIR);
|
|
227
|
-
}
|
|
228
|
-
getConfigPath() {
|
|
229
|
-
return CONFIG_DIR;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
exports.ConfigManager = ConfigManager;
|
|
233
|
-
exports.configManager = new ConfigManager();
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLDZDQUErQjtBQUUvQiw0Q0FBeUM7QUFFekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDN0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUF1QjNELE1BQWEsYUFBYTtJQUExQjtRQUNVLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBb04vQixDQUFDO0lBbE5DLEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUVsRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixlQUFN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QUFHLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUksR0FBVyxFQUFFLElBQU87UUFDcEMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBdE5ELHNDQXNOQztBQUVZLFFBQUEsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgQXV0aFRva2VucyB9IGZyb20gJy4uL2RhdGFtb2RlbCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5jb25zdCBDT05GSUdfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5hZ2VudGljcG9vbCcpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgJ2NvbmZpZy5qc29uJyk7XG5jb25zdCBJREVOVElUWV9GSUxFID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdpZGVudGl0eS5qc29uJyk7XG5jb25zdCBDUkVERU5USUFMU19ESVIgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgJ2NyZWRlbnRpYWxzJyk7XG5jb25zdCBQUk9GSUxFU19ESVIgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgJ3Byb2ZpbGVzJyk7XG5jb25zdCBDQUNIRV9ESVIgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgJ2NhY2hlJyk7XG5jb25zdCBORVRXT1JLU19GSUxFID0gcGF0aC5qb2luKENPTkZJR19ESVIsICduZXR3b3Jrcy5tZCcpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbENvbmZpZyB7XG4gIGFwaVVybDogc3RyaW5nO1xuICBkZWZhdWx0Rm9ybWF0OiAndG9vbicgfCAnanNvbic7XG4gIGh1bWFuc0FwaVVybD86IHN0cmluZztcbiAgaHVtYW5VaWQ/OiBzdHJpbmc7XG4gIGh1bWFuSnd0Pzogc3RyaW5nO1xuICBodW1hbkp3dEV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQ3JlZGVudGlhbHMge1xuICBwdWJsaWNUb2tlbjogc3RyaW5nO1xuICBwcml2YXRlS2V5OiBzdHJpbmc7XG4gIGp3dD86IHN0cmluZztcbiAgZXhwaXJlc0F0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5IHtcbiAgcHVibGljVG9rZW46IHN0cmluZztcbiAgcHJpdmF0ZUtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlnTWFuYWdlciB7XG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsaXppbmcgPSBmYWxzZTtcblxuICBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkIHx8IHRoaXMuaW5pdGlhbGl6aW5nKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSB0cnVlO1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5pdGlhbGl6aW5nIENvbmZpZ01hbmFnZXIuIFBhdGg6ICR7Q09ORklHX0RJUn1gKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuZW5zdXJlRGlyKENPTkZJR19ESVIpO1xuICAgICAgYXdhaXQgZnMuZW5zdXJlRGlyKENSRURFTlRJQUxTX0RJUik7XG4gICAgICBhd2FpdCBmcy5lbnN1cmVEaXIoUFJPRklMRVNfRElSKTtcbiAgICAgIGF3YWl0IGZzLmVuc3VyZURpcihDQUNIRV9ESVIpO1xuICAgICAgXG4gICAgICBpZiAoIShhd2FpdCBmcy5wYXRoRXhpc3RzKENPTkZJR19GSUxFKSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBkZWZhdWx0IGNvbmZpZyBmaWxlJyk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWc6IEdsb2JhbENvbmZpZyA9IHtcbiAgICAgICAgICBhcGlVcmw6ICdodHRwczovL2FwaS5hZ2VudGljcG9vbC5uZXQnLFxuICAgICAgICAgIGRlZmF1bHRGb3JtYXQ6ICd0b29uJ1xuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBmcy53cml0ZUpzb24oQ09ORklHX0ZJTEUsIGRlZmF1bHRDb25maWcsIHsgc3BhY2VzOiAyIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShhd2FpdCBmcy5wYXRoRXhpc3RzKE5FVFdPUktTX0ZJTEUpKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NyZWF0aW5nIGRlZmF1bHQgbmV0d29ya3MgZmlsZScpO1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoTkVUV09SS1NfRklMRSwgJyMgUmVnaXN0ZXJlZCBBZ2VudGljUG9vbCBOZXR3b3Jrc1xcblxcbicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29uZmlnTWFuYWdlciBpbml0aWFsaXplZCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29uZmlnTWFuYWdlciBpbml0IGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnVW5rbm93bid9YCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEdsb2JhbENvbmZpZygpOiBQcm9taXNlPEdsb2JhbENvbmZpZz4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIHJldHVybiBmcy5yZWFkSnNvbihDT05GSUdfRklMRSk7XG4gIH1cblxuICBhc3luYyBzYXZlR2xvYmFsQ29uZmlnKGNvbmZpZzogR2xvYmFsQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgbG9nZ2VyLmRlYnVnKCdTYXZpbmcgZ2xvYmFsIGNvbmZpZycpO1xuICAgIGF3YWl0IGZzLndyaXRlSnNvbihDT05GSUdfRklMRSwgY29uZmlnLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVEZWZhdWx0SWRlbnRpdHkoaWRlbnRpdHk6IElkZW50aXR5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgbG9nZ2VyLmRlYnVnKCdTYXZpbmcgZGVmYXVsdCBpZGVudGl0eScpO1xuICAgIGF3YWl0IGZzLndyaXRlSnNvbihJREVOVElUWV9GSUxFLCBpZGVudGl0eSwgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBnZXREZWZhdWx0SWRlbnRpdHkoKTogUHJvbWlzZTxJZGVudGl0eSB8IG51bGw+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBpZiAoIShhd2FpdCBmcy5wYXRoRXhpc3RzKElERU5USVRZX0ZJTEUpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcy5yZWFkSnNvbihJREVOVElUWV9GSUxFKTtcbiAgfVxuXG4gIGFzeW5jIHNldEFwaVVybCh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsQ29uZmlnKCk7XG4gICAgY29uZmlnLmFwaVVybCA9IHVybDtcbiAgICBhd2FpdCB0aGlzLnNhdmVHbG9iYWxDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIGFzeW5jIGdldENyZWRlbnRpYWxzKG5ldHdvcmtJZDogc3RyaW5nKTogUHJvbWlzZTxOZXR3b3JrQ3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY3JlZEZpbGUgPSBwYXRoLmpvaW4oQ1JFREVOVElBTFNfRElSLCBgJHtuZXR3b3JrSWR9Lmpzb25gKTtcbiAgICBcbiAgICBpZiAoIShhd2FpdCBmcy5wYXRoRXhpc3RzKGNyZWRGaWxlKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBjcmVkcyA9IGF3YWl0IGZzLnJlYWRKc29uKGNyZWRGaWxlKTtcbiAgICBcbiAgICBpZiAoY3JlZHMuZXhwaXJlc0F0ICYmIERhdGUubm93KCkgPiBjcmVkcy5leHBpcmVzQXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY3JlZHM7XG4gIH1cblxuICBhc3luYyBzYXZlQ3JlZGVudGlhbHMobmV0d29ya0lkOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBOZXR3b3JrQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBjcmVkRmlsZSA9IHBhdGguam9pbihDUkVERU5USUFMU19ESVIsIGAke25ldHdvcmtJZH0uanNvbmApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgU2F2aW5nIGNyZWRlbnRpYWxzIGZvciAke25ldHdvcmtJZH1gKTtcbiAgICBhd2FpdCBmcy53cml0ZUpzb24oY3JlZEZpbGUsIGNyZWRlbnRpYWxzLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIGFzeW5jIGFkZFJlZ2lzdGVyZWROZXR3b3JrKG5ldHdvcmtJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBsb2dnZXIuZGVidWcoYFJlZ2lzdGVyaW5nIG5ldHdvcmsgaW4gbG9jYWwgaGlzdG9yeTogJHtuZXR3b3JrSWR9YCk7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKE5FVFdPUktTX0ZJTEUsICd1dGYtOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgXG4gICAgY29uc3QgZW50cnlQcmVmaXggPSBgLSAke25ldHdvcmtJZH1gO1xuICAgIGNvbnN0IGZ1bGxFbnRyeSA9IGAtICR7bmV0d29ya0lkfSR7cmVhc29uID8gYCB8IFJlYXNvbjogJHtyZWFzb259YCA6ICcnfWA7XG4gICAgXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGxpbmVzLmZpbmRJbmRleChsaW5lID0+IGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoZW50cnlQcmVmaXgpKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGxpbmVzW2V4aXN0aW5nSW5kZXhdID0gZnVsbEVudHJ5O1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKE5FVFdPUktTX0ZJTEUsIGxpbmVzLmpvaW4oJ1xcbicpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShORVRXT1JLU19GSUxFLCBgJHtmdWxsRW50cnl9XFxuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0UmVnaXN0ZXJlZE5ldHdvcmtzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoTkVUV09SS1NfRklMRSwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLnN0YXJ0c1dpdGgoJy0gJykpXG4gICAgICAubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKCctICcsICcnKS50cmltKCkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV0d29ya0hpc3RvcnkoKTogUHJvbWlzZTx7IGlkOiBzdHJpbmc7IHJlYXNvbj86IHN0cmluZyB9W10+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoTkVUV09SS1NfRklMRSwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLnN0YXJ0c1dpdGgoJy0gJykpXG4gICAgICAubWFwKGxpbmUgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUucmVwbGFjZSgnLSAnLCAnJykuc3BsaXQoJ3wgUmVhc29uOicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBwYXJ0c1swXS50cmltKCksXG4gICAgICAgICAgcmVhc29uOiBwYXJ0c1sxXSA/IHBhcnRzWzFdLnRyaW0oKSA6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBjbGVhckNyZWRlbnRpYWxzKG5ldHdvcmtJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY3JlZEZpbGUgPSBwYXRoLmpvaW4oQ1JFREVOVElBTFNfRElSLCBgJHtuZXR3b3JrSWR9Lmpzb25gKTtcbiAgICBhd2FpdCBmcy5yZW1vdmUoY3JlZEZpbGUpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZmlsZShuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IHByb2ZpbGVGaWxlID0gcGF0aC5qb2luKFBST0ZJTEVTX0RJUiwgYCR7bmV0d29ya0lkfS5tZGApO1xuICAgIFxuICAgIGlmICghKGF3YWl0IGZzLnBhdGhFeGlzdHMocHJvZmlsZUZpbGUpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmcy5yZWFkRmlsZShwcm9maWxlRmlsZSwgJ3V0Zi04Jyk7XG4gIH1cblxuICBhc3luYyBzYXZlUHJvZmlsZShuZXR3b3JrSWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgcHJvZmlsZUZpbGUgPSBwYXRoLmpvaW4oUFJPRklMRVNfRElSLCBgJHtuZXR3b3JrSWR9Lm1kYCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb2ZpbGVGaWxlLCBjb250ZW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldEpTT05Qcm9maWxlPFQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PihuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBwcm9maWxlRmlsZSA9IHBhdGguam9pbihQUk9GSUxFU19ESVIsIGAke25ldHdvcmtJZH0uanNvbmApO1xuICAgIGlmICghKGF3YWl0IGZzLnBhdGhFeGlzdHMocHJvZmlsZUZpbGUpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcy5yZWFkSnNvbihwcm9maWxlRmlsZSk7XG4gIH1cblxuICBhc3luYyBzYXZlSlNPTlByb2ZpbGUobmV0d29ya0lkOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBwcm9maWxlRmlsZSA9IHBhdGguam9pbihQUk9GSUxFU19ESVIsIGAke25ldHdvcmtJZH0uanNvbmApO1xuICAgIGF3YWl0IGZzLndyaXRlSnNvbihwcm9maWxlRmlsZSwgZGF0YSwgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBnZXRBbGxKU09OUHJvZmlsZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKFBST0ZJTEVTX0RJUik7XG4gICAgY29uc3QgcHJvZmlsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICAgIGNvbnN0IG5ldHdvcmtJZCA9IGZpbGUucmVwbGFjZSgnLmpzb24nLCAnJyk7XG4gICAgICAgIHByb2ZpbGVzW25ldHdvcmtJZF0gPSBhd2FpdCBmcy5yZWFkSnNvbihwYXRoLmpvaW4oUFJPRklMRVNfRElSLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9maWxlcztcbiAgfVxuXG4gIGFzeW5jIGdldENhY2hlPFQ+KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IGNhY2hlRmlsZSA9IHBhdGguam9pbihDQUNIRV9ESVIsIGAke2tleX0uanNvbmApO1xuICAgIFxuICAgIGlmICghKGF3YWl0IGZzLnBhdGhFeGlzdHMoY2FjaGVGaWxlKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZnMucmVhZEpzb24oY2FjaGVGaWxlKTtcbiAgfVxuXG4gIGFzeW5jIHNldENhY2hlPFQ+KGtleTogc3RyaW5nLCBkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKENBQ0hFX0RJUiwgYCR7a2V5fS5qc29uYCk7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKGNhY2hlRmlsZSwgZGF0YSwgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGF3YWl0IGZzLmVtcHR5RGlyKENBQ0hFX0RJUik7XG4gIH1cblxuICBnZXRDb25maWdQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIENPTkZJR19ESVI7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcigpO1xuIl19
|
package/dist/config/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { ConfigManager, configManager, GlobalConfig, NetworkCredentials } from './ConfigManager';
|