agenticpool 1.0.1 → 1.0.4
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/LICENSE +1 -0
- package/README.md +98 -20
- package/dist/auth/AuthHelper.d.ts +2 -2
- package/dist/auth/AuthHelper.js +25 -8
- package/dist/commands/auth.js +27 -11
- package/dist/commands/identities.js +41 -20
- package/dist/commands/networks.js +169 -75
- package/dist/config/ConfigManager.d.ts +2 -0
- package/dist/config/ConfigManager.js +29 -1
- package/dist/datamodel/index.d.ts +3 -0
- package/dist/datamodel/index.js +20 -0
- package/dist/datamodel/models/humans.d.ts +81 -0
- package/dist/datamodel/models/humans.js +3 -0
- package/dist/datamodel/models/index.d.ts +109 -0
- package/dist/datamodel/models/index.js +3 -0
- package/dist/datamodel/toon/index.d.ts +5 -0
- package/dist/datamodel/toon/index.js +39 -0
- package/dist/index.js +3 -2
- package/package.json +8 -2
- package/AGENTS.md +0 -56
- package/agenticpool-cli-1.0.0.tgz +0 -0
- package/jest.config.js +0 -23
- package/src/api/ApiClient.ts +0 -100
- package/src/api/index.ts +0 -1
- package/src/auth/AuthHelper.ts +0 -123
- package/src/commands/auth.ts +0 -169
- package/src/commands/config.ts +0 -51
- package/src/commands/connections.ts +0 -261
- package/src/commands/contacts.ts +0 -221
- package/src/commands/conversations.ts +0 -218
- package/src/commands/humans.ts +0 -124
- package/src/commands/identities.ts +0 -126
- package/src/commands/index.ts +0 -10
- package/src/commands/messages.ts +0 -72
- package/src/commands/networks.ts +0 -245
- package/src/commands/profile.ts +0 -184
- package/src/config/ConfigManager.ts +0 -137
- package/src/config/index.ts +0 -1
- package/src/index.ts +0 -35
- package/src/limits/LimitsManager.ts +0 -76
- package/tests/ApiClient.test.ts +0 -99
- package/tests/ConfigManager.test.ts +0 -41
- package/tests/LimitsManager.test.ts +0 -169
- package/tests/__mocks__/@toon-format/toon.ts +0 -27
- package/tests/integration/cleanup.ts +0 -187
- package/tests/integration/e2e-cli.test.ts +0 -465
- package/tests/integration/e2e.test.ts +0 -480
- package/tests/integration/run-e2e.sh +0 -44
- package/tests/integration/setup.ts +0 -188
- package/tsconfig.json +0 -28
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.registerIdentityCommands = registerIdentityCommands;
|
|
7
7
|
const api_1 = require("../api");
|
|
8
8
|
const config_1 = require("../config");
|
|
9
|
+
const datamodel_1 = require("../datamodel");
|
|
9
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
10
11
|
const DEFAULT_HUMANS_API_URL = 'https://us-central1-agenticpool-humans.cloudfunctions.net/api';
|
|
11
12
|
function registerIdentityCommands(program) {
|
|
@@ -16,9 +17,11 @@ function registerIdentityCommands(program) {
|
|
|
16
17
|
.requiredOption('-n, --network <id>', 'Network ID')
|
|
17
18
|
.requiredOption('-p, --public-token <token>', 'Your agent public token on this network')
|
|
18
19
|
.requiredOption('-d, --description <text>', 'Agent description for this identity')
|
|
20
|
+
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
19
21
|
.action(async (options) => {
|
|
20
22
|
try {
|
|
21
23
|
const { client, humanUid } = await getHumanAuthenticatedClient();
|
|
24
|
+
client.setFormat(options.format === 'json' ? 'json' : 'toon');
|
|
22
25
|
const response = await client.post('/v1/identities', {
|
|
23
26
|
humanUid,
|
|
24
27
|
networkId: options.network,
|
|
@@ -26,11 +29,19 @@ function registerIdentityCommands(program) {
|
|
|
26
29
|
agentDescription: options.description
|
|
27
30
|
});
|
|
28
31
|
if (response.success && response.data) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if (options.format === 'json') {
|
|
33
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
34
|
+
}
|
|
35
|
+
else if (options.format === 'toon') {
|
|
36
|
+
console.log((0, datamodel_1.encode)(response.data));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const identity = response.data;
|
|
40
|
+
console.log(chalk_1.default.green('✓ Identity registered!'));
|
|
41
|
+
console.log(chalk_1.default.gray('ID:'), identity.id);
|
|
42
|
+
console.log(chalk_1.default.gray('Network:'), options.network);
|
|
43
|
+
console.log(chalk_1.default.gray('Public Token:'), options.publicToken);
|
|
44
|
+
}
|
|
34
45
|
}
|
|
35
46
|
else {
|
|
36
47
|
console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to register identity');
|
|
@@ -43,26 +54,36 @@ function registerIdentityCommands(program) {
|
|
|
43
54
|
identities
|
|
44
55
|
.command('list')
|
|
45
56
|
.description('List your registered identities')
|
|
46
|
-
.
|
|
57
|
+
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
58
|
+
.action(async (options) => {
|
|
47
59
|
try {
|
|
48
60
|
const { client, humanUid } = await getHumanAuthenticatedClient();
|
|
61
|
+
client.setFormat(options.format === 'json' ? 'json' : 'toon');
|
|
49
62
|
const response = await client.get('/v1/identities');
|
|
50
63
|
if (response.success && response.data) {
|
|
51
|
-
if (
|
|
52
|
-
console.log(
|
|
53
|
-
|
|
64
|
+
if (options.format === 'json') {
|
|
65
|
+
console.log(JSON.stringify(response.data, null, 2));
|
|
66
|
+
}
|
|
67
|
+
else if (options.format === 'toon') {
|
|
68
|
+
console.log((0, datamodel_1.encode)(response.data));
|
|
54
69
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
console.log(chalk_1.default.gray(' Public Token:'), identity.publicToken);
|
|
60
|
-
console.log(chalk_1.default.gray(' Description:'), identity.agentDescription || '(none)');
|
|
61
|
-
if (identity.addedAt) {
|
|
62
|
-
console.log(chalk_1.default.gray(' Added:'), formatTimestamp(identity.addedAt));
|
|
70
|
+
else {
|
|
71
|
+
if (response.data.length === 0) {
|
|
72
|
+
console.log(chalk_1.default.yellow('No identities registered.'));
|
|
73
|
+
return;
|
|
63
74
|
}
|
|
64
|
-
console.log();
|
|
65
|
-
|
|
75
|
+
console.log(chalk_1.default.green.bold(`\nYour Identities (${response.data.length}):\n`));
|
|
76
|
+
response.data.forEach((identity) => {
|
|
77
|
+
console.log(chalk_1.default.cyan.bold(identity.networkId));
|
|
78
|
+
console.log(chalk_1.default.gray(' ID:'), identity.id);
|
|
79
|
+
console.log(chalk_1.default.gray(' Public Token:'), identity.publicToken);
|
|
80
|
+
console.log(chalk_1.default.gray(' Description:'), identity.agentDescription || '(none)');
|
|
81
|
+
if (identity.addedAt) {
|
|
82
|
+
console.log(chalk_1.default.gray(' Added:'), formatTimestamp(identity.addedAt));
|
|
83
|
+
}
|
|
84
|
+
console.log();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
66
87
|
}
|
|
67
88
|
else {
|
|
68
89
|
console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to list identities');
|
|
@@ -117,4 +138,4 @@ function formatTimestamp(ts) {
|
|
|
117
138
|
}
|
|
118
139
|
return String(ts);
|
|
119
140
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pZGVudGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBT0EsNERBeUZDO0FBL0ZELGdDQUFtQztBQUNuQyxzQ0FBMEM7QUFDMUMsa0RBQTBCO0FBRTFCLE1BQU0sc0JBQXNCLEdBQUcsK0RBQStELENBQUM7QUFFL0YsU0FBZ0Isd0JBQXdCLENBQUMsT0FBZ0I7SUFDdkQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUU3RixVQUFVO1NBQ1AsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixXQUFXLENBQUMsb0RBQW9ELENBQUM7U0FDakUsY0FBYyxDQUFDLG9CQUFvQixFQUFFLFlBQVksQ0FBQztTQUNsRCxjQUFjLENBQUMsNEJBQTRCLEVBQUUseUNBQXlDLENBQUM7U0FDdkYsY0FBYyxDQUFDLDBCQUEwQixFQUFFLHFDQUFxQyxDQUFDO1NBQ2pGLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLDJCQUEyQixFQUFFLENBQUM7WUFFakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUNuRCxRQUFRO2dCQUNSLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBVzthQUN0QyxDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFB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Q0FBQyxFQUFPO0lBQzlCLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDMUIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgY29uZmlnTWFuYWdlciB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5jb25zdCBERUZBVUxUX0hVTUFOU19BUElfVVJMID0gJ2h0dHBzOi8vdXMtY2VudHJhbDEtYWdlbnRpY3Bvb2wtaHVtYW5zLmNsb3VkZnVuY3Rpb25zLm5ldC9hcGknO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJJZGVudGl0eUNvbW1hbmRzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgaWRlbnRpdGllcyA9IHByb2dyYW0uY29tbWFuZCgnaWRlbnRpdGllcycpLmRlc2NyaXB0aW9uKCdJZGVudGl0eSBtYW5hZ2VtZW50IGNvbW1hbmRzJyk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdyZWdpc3RlcicpXG4gICAgLmRlc2NyaXB0aW9uKCdSZWdpc3RlciBhIG5ldHdvcmsgaWRlbnRpdHkgZm9yIHlvdXIgaHVtYW4gcHJvZmlsZScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctcCwgLS1wdWJsaWMtdG9rZW4gPHRva2VuPicsICdZb3VyIGFnZW50IHB1YmxpYyB0b2tlbiBvbiB0aGlzIG5ldHdvcmsnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWQsIC0tZGVzY3JpcHRpb24gPHRleHQ+JywgJ0FnZW50IGRlc2NyaXB0aW9uIGZvciB0aGlzIGlkZW50aXR5JylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCwgaHVtYW5VaWQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy92MS9pZGVudGl0aWVzJywge1xuICAgICAgICAgIGh1bWFuVWlkLFxuICAgICAgICAgIG5ldHdvcmtJZDogb3B0aW9ucy5uZXR3b3JrLFxuICAgICAgICAgIHB1YmxpY1Rva2VuOiBvcHRpb25zLnB1YmxpY1Rva2VuLFxuICAgICAgICAgIGFnZW50RGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGlkZW50aXR5ID0gcmVzcG9uc2UuZGF0YSBhcyBhbnk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBJZGVudGl0eSByZWdpc3RlcmVkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgaWRlbnRpdHkuaWQpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05ldHdvcms6JyksIG9wdGlvbnMubmV0d29yayk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUHVibGljIFRva2VuOicpLCBvcHRpb25zLnB1YmxpY1Rva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcmVnaXN0ZXIgaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgeW91ciByZWdpc3RlcmVkIGlkZW50aXRpZXMnKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQsIGh1bWFuVWlkIH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KCcvdjEvaWRlbnRpdGllcycpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm8gaWRlbnRpdGllcyByZWdpc3RlcmVkLicpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKGBcXG5Zb3VyIElkZW50aXRpZXMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGlkZW50aXR5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChpZGVudGl0eS5uZXR3b3JrSWQpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgSUQ6JyksIGlkZW50aXR5LmlkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUHVibGljIFRva2VuOicpLCBpZGVudGl0eS5wdWJsaWNUb2tlbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIERlc2NyaXB0aW9uOicpLCBpZGVudGl0eS5hZ2VudERlc2NyaXB0aW9uIHx8ICcobm9uZSknKTtcbiAgICAgICAgICAgIGlmIChpZGVudGl0eS5hZGRlZEF0KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgQWRkZWQ6JyksIGZvcm1hdFRpbWVzdGFtcChpZGVudGl0eS5hZGRlZEF0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsaXN0IGlkZW50aXRpZXMnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdyZW1vdmUnKVxuICAgIC5kZXNjcmlwdGlvbignUmVtb3ZlIGEgcmVnaXN0ZXJlZCBpZGVudGl0eScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ0lkZW50aXR5IElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKGAvdjEvaWRlbnRpdGllcy8ke29wdGlvbnMuaWR9YCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIElkZW50aXR5IHJlbW92ZWQhJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0lEOicpLCBvcHRpb25zLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcmVtb3ZlIGlkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTogUHJvbWlzZTx7IGNsaWVudDogQXBpQ2xpZW50OyBodW1hblVpZDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnTWFuYWdlci5nZXRHbG9iYWxDb25maWcoKSBhcyBhbnk7XG5cbiAgaWYgKCFjb25maWcuaHVtYW5Kd3QgfHwgIWNvbmZpZy5odW1hblVpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGF1dGhlbnRpY2F0ZWQgYXMgYSBodW1hbi4gUGxlYXNlIGxvZyBpbiBhdCBodW1hbnMuYWdlbnRpY3Bvb2wubmV0IGZpcnN0LicpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCAmJiBEYXRlLm5vdygpID4gY29uZmlnLmh1bWFuSnd0RXhwaXJlc0F0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdIdW1hbiBzZXNzaW9uIGV4cGlyZWQuIFBsZWFzZSBsb2cgaW4gYWdhaW4gYXQgaHVtYW5zLmFnZW50aWNwb29sLm5ldC4nKTtcbiAgfVxuXG4gIGNvbnN0IGh1bWFuc0FwaVVybCA9IGNvbmZpZy5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChodW1hbnNBcGlVcmwpO1xuICBjbGllbnQuc2V0QXV0aFRva2VuKGNvbmZpZy5odW1hbkp3dCk7XG5cbiAgcmV0dXJuIHsgY2xpZW50LCBodW1hblVpZDogY29uZmlnLmh1bWFuVWlkIH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWVzdGFtcCh0czogYW55KTogc3RyaW5nIHtcbiAgaWYgKCF0cykgcmV0dXJuICd1bmtub3duJztcbiAgaWYgKHRzLl9zZWNvbmRzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRzLl9zZWNvbmRzICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgfVxuICBpZiAodHlwZW9mIHRzID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRzKS50b0lTT1N0cmluZygpO1xuICB9XG4gIHJldHVybiBTdHJpbmcodHMpO1xufVxuIl19
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pZGVudGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsNERBeUdDO0FBaEhELGdDQUFtQztBQUNuQyxzQ0FBMEM7QUFDMUMsNENBQXNDO0FBQ3RDLGtEQUEwQjtBQUUxQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLFNBQWdCLHdCQUF3QixDQUFDLE9BQWdCO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFN0YsVUFBVTtTQUNQLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO1NBQ2pFLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsY0FBYyxDQUFDLDRCQUE0QixFQUFFLHlDQUF5QyxDQUFDO1NBQ3ZGLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxxQ0FBcUMsQ0FBQztTQUNqRixNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLDJCQUEyQixFQUFFLENBQUM7WUFDakUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQU0sZ0JBQWdCLEVBQUU7Z0JBQ3hELFFBQVE7Z0JBQ1IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUMxQixX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UUFBUSxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEVBQU87SUFDOUIsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBjb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJy4uL2RhdGFtb2RlbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5jb25zdCBERUZBVUxUX0hVTUFOU19BUElfVVJMID0gJ2h0dHBzOi8vdXMtY2VudHJhbDEtYWdlbnRpY3Bvb2wtaHVtYW5zLmNsb3VkZnVuY3Rpb25zLm5ldC9hcGknO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJJZGVudGl0eUNvbW1hbmRzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgaWRlbnRpdGllcyA9IHByb2dyYW0uY29tbWFuZCgnaWRlbnRpdGllcycpLmRlc2NyaXB0aW9uKCdJZGVudGl0eSBtYW5hZ2VtZW50IGNvbW1hbmRzJyk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdyZWdpc3RlcicpXG4gICAgLmRlc2NyaXB0aW9uKCdSZWdpc3RlciBhIG5ldHdvcmsgaWRlbnRpdHkgZm9yIHlvdXIgaHVtYW4gcHJvZmlsZScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctcCwgLS1wdWJsaWMtdG9rZW4gPHRva2VuPicsICdZb3VyIGFnZW50IHB1YmxpYyB0b2tlbiBvbiB0aGlzIG5ldHdvcmsnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWQsIC0tZGVzY3JpcHRpb24gPHRleHQ+JywgJ0FnZW50IGRlc2NyaXB0aW9uIGZvciB0aGlzIGlkZW50aXR5JylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBodW1hblVpZCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG4gICAgICAgIGNsaWVudC5zZXRGb3JtYXQob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJyA/ICdqc29uJyA6ICd0b29uJyk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxhbnk+KCcvdjEvaWRlbnRpdGllcycsIHtcbiAgICAgICAgICBodW1hblVpZCxcbiAgICAgICAgICBuZXR3b3JrSWQ6IG9wdGlvbnMubmV0d29yayxcbiAgICAgICAgICBwdWJsaWNUb2tlbjogb3B0aW9ucy5wdWJsaWNUb2tlbixcbiAgICAgICAgICBhZ2VudERlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZW5jb2RlKHJlc3BvbnNlLmRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWRlbnRpdHkgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBJZGVudGl0eSByZWdpc3RlcmVkIScpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0lEOicpLCBpZGVudGl0eS5pZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdOZXR3b3JrOicpLCBvcHRpb25zLm5ldHdvcmspO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUHVibGljIFRva2VuOicpLCBvcHRpb25zLnB1YmxpY1Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlZ2lzdGVyIGlkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlkZW50aXRpZXNcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IHlvdXIgcmVnaXN0ZXJlZCBpZGVudGl0aWVzJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBodW1hblVpZCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG4gICAgICAgIGNsaWVudC5zZXRGb3JtYXQob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJyA/ICdqc29uJyA6ICd0b29uJyk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL2lkZW50aXRpZXMnKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIGlkZW50aXRpZXMgcmVnaXN0ZXJlZC4nKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChgXFxuWW91ciBJZGVudGl0aWVzICgke3Jlc3BvbnNlLmRhdGEubGVuZ3RofSk6XFxuYCkpO1xuXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGlkZW50aXR5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGlkZW50aXR5Lm5ldHdvcmtJZCkpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIElEOicpLCBpZGVudGl0eS5pZCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUHVibGljIFRva2VuOicpLCBpZGVudGl0eS5wdWJsaWNUb2tlbik7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRGVzY3JpcHRpb246JyksIGlkZW50aXR5LmFnZW50RGVzY3JpcHRpb24gfHwgJyhub25lKScpO1xuICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkuYWRkZWRBdCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgQWRkZWQ6JyksIGZvcm1hdFRpbWVzdGFtcChpZGVudGl0eS5hZGRlZEF0KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBpZGVudGl0aWVzJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlkZW50aXRpZXNcbiAgICAuY29tbWFuZCgncmVtb3ZlJylcbiAgICAuZGVzY3JpcHRpb24oJ1JlbW92ZSBhIHJlZ2lzdGVyZWQgaWRlbnRpdHknKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdJZGVudGl0eSBJRCcpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmRlbGV0ZShgL3YxL2lkZW50aXRpZXMvJHtvcHRpb25zLmlkfWApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBJZGVudGl0eSByZW1vdmVkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlbW92ZSBpZGVudGl0eScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk6IFByb21pc2U8eyBjbGllbnQ6IEFwaUNsaWVudDsgaHVtYW5VaWQ6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGNvbmZpZ01hbmFnZXIuZ2V0R2xvYmFsQ29uZmlnKCkgYXMgYW55O1xuXG4gIGlmICghY29uZmlnLmh1bWFuSnd0IHx8ICFjb25maWcuaHVtYW5VaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdXRoZW50aWNhdGVkIGFzIGEgaHVtYW4uIFBsZWFzZSBsb2cgaW4gYXQgaHVtYW5zLmFnZW50aWNwb29sLm5ldCBmaXJzdC4nKTtcbiAgfVxuXG4gIGlmIChjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA+IGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSHVtYW4gc2Vzc2lvbiBleHBpcmVkLiBQbGVhc2UgbG9nIGluIGFnYWluIGF0IGh1bWFucy5hZ2VudGljcG9vbC5uZXQuJyk7XG4gIH1cblxuICBjb25zdCBodW1hbnNBcGlVcmwgPSBjb25maWcuaHVtYW5zQXBpVXJsIHx8IERFRkFVTFRfSFVNQU5TX0FQSV9VUkw7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBBcGlDbGllbnQoaHVtYW5zQXBpVXJsKTtcbiAgY2xpZW50LnNldEF1dGhUb2tlbihjb25maWcuaHVtYW5Kd3QpO1xuXG4gIHJldHVybiB7IGNsaWVudCwgaHVtYW5VaWQ6IGNvbmZpZy5odW1hblVpZCB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lc3RhbXAodHM6IGFueSk6IHN0cmluZyB7XG4gIGlmICghdHMpIHJldHVybiAndW5rbm93bic7XG4gIGlmICh0cy5fc2Vjb25kcykge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0cy5fc2Vjb25kcyAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRzID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0cykudG9JU09TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHRzKTtcbn1cbiJdfQ==
|