@pipeline-builder/pipeline-manager 3.1.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/LICENSE +202 -0
- package/README.md +74 -0
- package/cdk.json +91 -0
- package/config.yml +94 -0
- package/dist/boilerplate.d.ts +3 -0
- package/dist/boilerplate.d.ts.map +1 -0
- package/dist/boilerplate.js +58 -0
- package/dist/cdk.json +91 -0
- package/dist/cli.d.ts +62 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +372 -0
- package/dist/commands/bootstrap.d.ts +11 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +159 -0
- package/dist/commands/create-pipeline.d.ts +12 -0
- package/dist/commands/create-pipeline.d.ts.map +1 -0
- package/dist/commands/create-pipeline.js +291 -0
- package/dist/commands/deploy.d.ts +15 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +167 -0
- package/dist/commands/get-pipeline.d.ts +13 -0
- package/dist/commands/get-pipeline.d.ts.map +1 -0
- package/dist/commands/get-pipeline.js +97 -0
- package/dist/commands/get-plugin.d.ts +13 -0
- package/dist/commands/get-plugin.d.ts.map +1 -0
- package/dist/commands/get-plugin.js +98 -0
- package/dist/commands/list-pipelines.d.ts +20 -0
- package/dist/commands/list-pipelines.d.ts.map +1 -0
- package/dist/commands/list-pipelines.js +172 -0
- package/dist/commands/list-plugins.d.ts +20 -0
- package/dist/commands/list-plugins.d.ts.map +1 -0
- package/dist/commands/list-plugins.js +167 -0
- package/dist/commands/login.d.ts +21 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +179 -0
- package/dist/commands/setup-events.d.ts +15 -0
- package/dist/commands/setup-events.d.ts.map +1 -0
- package/dist/commands/setup-events.js +177 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +89 -0
- package/dist/commands/store-token.d.ts +20 -0
- package/dist/commands/store-token.d.ts.map +1 -0
- package/dist/commands/store-token.js +233 -0
- package/dist/commands/synth.d.ts +21 -0
- package/dist/commands/synth.d.ts.map +1 -0
- package/dist/commands/synth.js +143 -0
- package/dist/commands/upload-plugin.d.ts +21 -0
- package/dist/commands/upload-plugin.d.ts.map +1 -0
- package/dist/commands/upload-plugin.js +311 -0
- package/dist/commands/version.d.ts +12 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +223 -0
- package/dist/config/cli.constants.d.ts +101 -0
- package/dist/config/cli.constants.d.ts.map +1 -0
- package/dist/config/cli.constants.js +165 -0
- package/dist/config.yml +94 -0
- package/dist/templates/events-stack.json +141 -0
- package/dist/types/config.d.ts +44 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/error.d.ts +61 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +39 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/pipeline.d.ts +144 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +5 -0
- package/dist/types/plugin.d.ts +160 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +5 -0
- package/dist/utils/api-client.d.ts +26 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +160 -0
- package/dist/utils/audit-log.d.ts +8 -0
- package/dist/utils/audit-log.d.ts.map +1 -0
- package/dist/utils/audit-log.js +53 -0
- package/dist/utils/auth-guard.d.ts +16 -0
- package/dist/utils/auth-guard.d.ts.map +1 -0
- package/dist/utils/auth-guard.js +25 -0
- package/dist/utils/aws-secrets.d.ts +21 -0
- package/dist/utils/aws-secrets.d.ts.map +1 -0
- package/dist/utils/aws-secrets.js +74 -0
- package/dist/utils/banner.d.ts +19 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +59 -0
- package/dist/utils/cdk-utils.d.ts +51 -0
- package/dist/utils/cdk-utils.d.ts.map +1 -0
- package/dist/utils/cdk-utils.js +101 -0
- package/dist/utils/command-utils.d.ts +56 -0
- package/dist/utils/command-utils.d.ts.map +1 -0
- package/dist/utils/command-utils.js +138 -0
- package/dist/utils/config-loader.d.ts +27 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +166 -0
- package/dist/utils/error-handler.d.ts +29 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +255 -0
- package/dist/utils/list-command-utils.d.ts +23 -0
- package/dist/utils/list-command-utils.d.ts.map +1 -0
- package/dist/utils/list-command-utils.js +60 -0
- package/dist/utils/output-utils.d.ts +60 -0
- package/dist/utils/output-utils.d.ts.map +1 -0
- package/dist/utils/output-utils.js +320 -0
- package/dist/utils/rate-limiter.d.ts +14 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +73 -0
- package/package.json +144 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.listPipelines = listPipelines;
|
|
6
|
+
const cli_constants_1 = require("../config/cli.constants");
|
|
7
|
+
const command_utils_1 = require("../utils/command-utils");
|
|
8
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
9
|
+
const list_command_utils_1 = require("../utils/list-command-utils");
|
|
10
|
+
const output_utils_1 = require("../utils/output-utils");
|
|
11
|
+
/**
|
|
12
|
+
* Registers the `list-pipelines` command with the CLI program.
|
|
13
|
+
*
|
|
14
|
+
* Queries pipelines with filters for project, organization, name,
|
|
15
|
+
* access modifier, active/default status, plus pagination and sorting.
|
|
16
|
+
*
|
|
17
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```bash
|
|
21
|
+
* cli list-pipelines
|
|
22
|
+
* cli list-pipelines --project my-app --is-active true
|
|
23
|
+
* cli list-pipelines --organization my-org
|
|
24
|
+
* cli list-pipelines --limit 50 --offset 100 --sort "pipelineName:asc"
|
|
25
|
+
* cli list-pipelines --format json --output pipelines.json
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
function listPipelines(program) {
|
|
29
|
+
program
|
|
30
|
+
.command('list-pipelines')
|
|
31
|
+
.description('Query pipelines with comprehensive filters')
|
|
32
|
+
// Common filter options
|
|
33
|
+
.option('--id <id>', 'Filter by pipeline ID (can specify multiple with commas)')
|
|
34
|
+
.option('--access-modifier <modifier>', 'Filter by access modifier (public/private)')
|
|
35
|
+
.option('--is-default <boolean>', 'Filter by default status (true/false)')
|
|
36
|
+
.option('--is-active <boolean>', 'Filter by active status (true/false)')
|
|
37
|
+
.option('--limit <number>', 'Maximum number of results (1-1000)', parseInt, 50)
|
|
38
|
+
.option('--offset <number>', 'Number of results to skip', parseInt, 0)
|
|
39
|
+
.option('--sort <sort>', 'Sort format: field:direction (e.g., pipelineName:asc, createdAt:desc)')
|
|
40
|
+
// Pipeline-specific filter options
|
|
41
|
+
.option('--project <project>', 'Filter by exact project name')
|
|
42
|
+
.option('--organization <organization>', 'Filter by exact organization name')
|
|
43
|
+
.option('--pipeline-name <name>', 'Filter by exact pipeline name')
|
|
44
|
+
// Output options
|
|
45
|
+
.option('-f, --format <format>', 'Output format (json, yaml, table, csv)', 'table')
|
|
46
|
+
.option('-o, --output <file>', 'Save output to file')
|
|
47
|
+
.option('--show-props', 'Include pipeline properties in output (json/yaml only)', false)
|
|
48
|
+
.option('--verify-ssl', 'Enable SSL certificate verification')
|
|
49
|
+
.option('--no-verify-ssl', 'Disable SSL certificate verification')
|
|
50
|
+
.action(async (options) => {
|
|
51
|
+
const executionId = (0, command_utils_1.printCommandHeader)('List Pipelines', 'Query Pipelines');
|
|
52
|
+
const startTime = Date.now();
|
|
53
|
+
try {
|
|
54
|
+
// Build filter parameters (common + pipeline-specific)
|
|
55
|
+
const filterParams = {
|
|
56
|
+
...(0, list_command_utils_1.buildCommonFilters)(options),
|
|
57
|
+
};
|
|
58
|
+
// Pipeline-specific filters
|
|
59
|
+
if (options.accessModifier) {
|
|
60
|
+
filterParams.accessModifier = options.accessModifier;
|
|
61
|
+
}
|
|
62
|
+
if (options.isDefault !== undefined) {
|
|
63
|
+
filterParams.isDefault = (0, cli_constants_1.validateBoolean)(options.isDefault, 'is-default');
|
|
64
|
+
}
|
|
65
|
+
if (options.project) {
|
|
66
|
+
filterParams.project = options.project;
|
|
67
|
+
}
|
|
68
|
+
if (options.organization) {
|
|
69
|
+
filterParams.organization = options.organization;
|
|
70
|
+
}
|
|
71
|
+
if (options.pipelineName) {
|
|
72
|
+
filterParams.pipelineName = options.pipelineName;
|
|
73
|
+
}
|
|
74
|
+
// Display active filters
|
|
75
|
+
const activeFilters = {};
|
|
76
|
+
if (filterParams.id)
|
|
77
|
+
activeFilters.ID = filterParams.id;
|
|
78
|
+
if (filterParams.accessModifier)
|
|
79
|
+
activeFilters['Access Modifier'] = filterParams.accessModifier;
|
|
80
|
+
if (filterParams.isDefault !== undefined)
|
|
81
|
+
activeFilters['Is Default'] = filterParams.isDefault;
|
|
82
|
+
if (filterParams.isActive !== undefined)
|
|
83
|
+
activeFilters['Is Active'] = filterParams.isActive;
|
|
84
|
+
if (filterParams.project)
|
|
85
|
+
activeFilters.Project = filterParams.project;
|
|
86
|
+
if (filterParams.organization)
|
|
87
|
+
activeFilters.Organization = filterParams.organization;
|
|
88
|
+
if (filterParams.pipelineName)
|
|
89
|
+
activeFilters['Pipeline Name'] = filterParams.pipelineName;
|
|
90
|
+
if (Object.keys(activeFilters).length > 0) {
|
|
91
|
+
(0, output_utils_1.printInfo)('Active Filters');
|
|
92
|
+
(0, output_utils_1.printKeyValue)(activeFilters);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
(0, output_utils_1.printInfo)('No filters applied - fetching all pipelines');
|
|
96
|
+
}
|
|
97
|
+
(0, list_command_utils_1.displayPaginationInfo)(filterParams);
|
|
98
|
+
// Security warning for SSL verification disabled
|
|
99
|
+
(0, command_utils_1.printSslWarning)(options.verifySsl);
|
|
100
|
+
// Create authenticated API client
|
|
101
|
+
const client = (0, command_utils_1.createAuthenticatedClient)(options);
|
|
102
|
+
const config = client.getConfig();
|
|
103
|
+
// Query pipelines
|
|
104
|
+
console.log('');
|
|
105
|
+
(0, output_utils_1.printSection)('Querying Pipelines');
|
|
106
|
+
(0, output_utils_1.printInfo)('Sending request to API...');
|
|
107
|
+
const requestStart = Date.now();
|
|
108
|
+
const response = await client.get(config.api.pipelineListUrl, filterParams);
|
|
109
|
+
const requestDuration = Date.now() - requestStart;
|
|
110
|
+
// Handle response
|
|
111
|
+
const { items: pipelines, total, hasMore } = (0, output_utils_1.extractListResponse)(response, 'pipelines');
|
|
112
|
+
console.log('');
|
|
113
|
+
(0, output_utils_1.printSection)('✓ Query Complete');
|
|
114
|
+
// Display results summary
|
|
115
|
+
(0, list_command_utils_1.displayListResults)(pipelines, total, hasMore, 'Pipelines', requestDuration, filterParams);
|
|
116
|
+
// Display statistics
|
|
117
|
+
if (pipelines.length > 0 && options.format === 'table') {
|
|
118
|
+
const activeCount = pipelines.filter(p => p.isActive).length;
|
|
119
|
+
const defaultCount = pipelines.filter(p => p.isDefault).length;
|
|
120
|
+
console.log('');
|
|
121
|
+
(0, output_utils_1.printInfo)('Statistics');
|
|
122
|
+
(0, output_utils_1.printKeyValue)({
|
|
123
|
+
'Active Pipelines': `${activeCount}/${pipelines.length}`,
|
|
124
|
+
'Default Pipelines': `${defaultCount}/${pipelines.length}`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// Output data in requested format
|
|
128
|
+
console.log('');
|
|
129
|
+
if (options.output) {
|
|
130
|
+
(0, output_utils_1.printInfo)('Saving to file', {
|
|
131
|
+
path: options.output,
|
|
132
|
+
format: options.format,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Format output data
|
|
136
|
+
const outputPipelines = options.showProps ? pipelines : pipelines.map(p => ({
|
|
137
|
+
'ID': p.id,
|
|
138
|
+
'Project': p.project,
|
|
139
|
+
'Organization': p.organization,
|
|
140
|
+
'Name': p.pipelineName || 'N/A',
|
|
141
|
+
'Access Modifier': p.accessModifier || 'private',
|
|
142
|
+
'Default': p.isDefault ? 'Yes' : 'No',
|
|
143
|
+
'Active': p.isActive ? 'Yes' : 'No',
|
|
144
|
+
'Created At': p.createdAt || 'N/A',
|
|
145
|
+
}));
|
|
146
|
+
(0, output_utils_1.outputData)(outputPipelines, {
|
|
147
|
+
format: options.format,
|
|
148
|
+
file: options.output,
|
|
149
|
+
});
|
|
150
|
+
// Performance metrics
|
|
151
|
+
console.log('');
|
|
152
|
+
(0, output_utils_1.printKeyValue)({
|
|
153
|
+
'Execution ID': executionId,
|
|
154
|
+
'Total Duration': (0, cli_constants_1.formatDuration)(Date.now() - startTime),
|
|
155
|
+
});
|
|
156
|
+
console.log('');
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
(0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.API_REQUEST, {
|
|
160
|
+
debug: program.opts().debug,
|
|
161
|
+
exit: true,
|
|
162
|
+
context: {
|
|
163
|
+
command: 'list-pipelines',
|
|
164
|
+
executionId,
|
|
165
|
+
filters: options,
|
|
166
|
+
verifySsl: options.verifySsl,
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1waXBlbGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbGlzdC1waXBlbGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBeUN0QyxzQ0FzS0M7QUE1TUQsMkRBQTBFO0FBRTFFLDBEQUF3RztBQUN4RywwREFBa0U7QUFDbEUsb0VBQWdJO0FBQ2hJLHdEQUFnSDtBQWdCaEg7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixhQUFhLENBQUMsT0FBZ0I7SUFDNUMsT0FBTztTQUNKLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztTQUN6QixXQUFXLENBQUMsNENBQTRDLENBQUM7UUFFMUQsd0JBQXdCO1NBQ3ZCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsMERBQTBELENBQUM7U0FDL0UsTUFBTSxDQUFDLDhCQUE4QixFQUFFLDRDQUE0QyxDQUFDO1NBQ3BGLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSx1Q0FBdUMsQ0FBQztTQUN6RSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsc0NBQXNDLENBQUM7U0FDdkUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLG9DQUFvQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7U0FDOUUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDckUsTUFBTSxDQUFDLGVBQWUsRUFBRSx1RUFBdUUsQ0FBQztRQUVqRyxtQ0FBbUM7U0FDbEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDhCQUE4QixDQUFDO1NBQzdELE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQztTQUM1RSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsK0JBQStCLENBQUM7UUFFbEUsaUJBQWlCO1NBQ2hCLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSx3Q0FBd0MsRUFBRSxPQUFPLENBQUM7U0FDbEYsTUFBTSxDQUFDLHFC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cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgdmFsaWRhdGVCb29sZWFuIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMnO1xuaW1wb3J0IHsgUGlwZWxpbmVMaXN0UmVzcG9uc2UsIFBpcGVsaW5lIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgYnVpbGRDb21tb25GaWx0ZXJzLCBDb21tb25GaWx0ZXJQYXJhbXMsIGRpc3BsYXlQYWdpbmF0aW9uSW5mbywgZGlzcGxheUxpc3RSZXN1bHRzIH0gZnJvbSAnLi4vdXRpbHMvbGlzdC1jb21tYW5kLXV0aWxzJztcbmltcG9ydCB7IG91dHB1dERhdGEsIGV4dHJhY3RMaXN0UmVzcG9uc2UsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuLyoqXG4gKiBRdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcGlwZWxpbmUgbGlzdCBBUEkgZW5kcG9pbnQuXG4gKiBDb21iaW5lcyBjb21tb24gZmlsdGVycyAocGFnaW5hdGlvbiwgc29ydCwgYWNjZXNzKSB3aXRoIHBpcGVsaW5lLXNwZWNpZmljIGZpbHRlcnMuXG4gKi9cbmludGVyZmFjZSBQaXBlbGluZUZpbHRlclBhcmFtcyBleHRlbmRzIENvbW1vbkZpbHRlclBhcmFtcyB7XG4gIGFjY2Vzc01vZGlmaWVyPzogc3RyaW5nO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuXG4gIC8vIFBpcGVsaW5lLXNwZWNpZmljIGZpbHRlcnNcbiAgcHJvamVjdD86IHN0cmluZztcbiAgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgbGlzdC1waXBlbGluZXNgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogUXVlcmllcyBwaXBlbGluZXMgd2l0aCBmaWx0ZXJzIGZvciBwcm9qZWN0LCBvcmdhbml6YXRpb24sIG5hbWUsXG4gKiBhY2Nlc3MgbW9kaWZpZXIsIGFjdGl2ZS9kZWZhdWx0IHN0YXR1cywgcGx1cyBwYWdpbmF0aW9uIGFuZCBzb3J0aW5nLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBjbGkgbGlzdC1waXBlbGluZXNcbiAqIGNsaSBsaXN0LXBpcGVsaW5lcyAtLXByb2plY3QgbXktYXBwIC0taXMtYWN0aXZlIHRydWVcbiAqIGNsaSBsaXN0LXBpcGVsaW5lcyAtLW9yZ2FuaXphdGlvbiBteS1vcmdcbiAqIGNsaSBsaXN0LXBpcGVsaW5lcyAtLWxpbWl0IDUwIC0tb2Zmc2V0IDEwMCAtLXNvcnQgXCJwaXBlbGluZU5hbWU6YXNjXCJcbiAqIGNsaSBsaXN0LXBpcGVsaW5lcyAtLWZvcm1hdCBqc29uIC0tb3V0cHV0IHBpcGVsaW5lcy5qc29uXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RQaXBlbGluZXMocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xpc3QtcGlwZWxpbmVzJylcbiAgICAuZGVzY3JpcHRpb24oJ1F1ZXJ5IHBpcGVsaW5lcyB3aXRoIGNvbXByZWhlbnNpdmUgZmlsdGVycycpXG5cbiAgICAvLyBDb21tb24gZmlsdGVyIG9wdGlvbnNcbiAgICAub3B0aW9uKCctLWlkIDxpZD4nLCAnRmlsdGVyIGJ5IHBpcGVsaW5lIElEIChjYW4gc3BlY2lmeSBtdWx0aXBsZSB3aXRoIGNvbW1hcyknKVxuICAgIC5vcHRpb24oJy0tYWNjZXNzLW1vZGlmaWVyIDxtb2RpZmllcj4nLCAnRmlsdGVyIGJ5IGFjY2VzcyBtb2RpZmllciAocHVibGljL3ByaXZhdGUpJylcbiAgICAub3B0aW9uKCctLWlzLWRlZmF1bHQgPGJvb2xlYW4+JywgJ0ZpbHRlciBieSBkZWZhdWx0IHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0taXMtYWN0aXZlIDxib29sZWFuPicsICdGaWx0ZXIgYnkgYWN0aXZlIHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG51bWJlcj4nLCAnTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyAoMS0xMDAwKScsIHBhcnNlSW50LCA1MClcbiAgICAub3B0aW9uKCctLW9mZnNldCA8bnVtYmVyPicsICdOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwJywgcGFyc2VJbnQsIDApXG4gICAgLm9wdGlvbignLS1zb3J0IDxzb3J0PicsICdTb3J0IGZvcm1hdDogZmllbGQ6ZGlyZWN0aW9uIChlLmcuLCBwaXBlbGluZU5hbWU6YXNjLCBjcmVhdGVkQXQ6ZGVzYyknKVxuXG4gICAgLy8gUGlwZWxpbmUtc3BlY2lmaWMgZmlsdGVyIG9wdGlvbnNcbiAgICAub3B0aW9uKCctLXByb2plY3QgPHByb2plY3Q+JywgJ0ZpbHRlciBieSBleGFjdCBwcm9qZWN0IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ0ZpbHRlciBieSBleGFjdCBvcmdhbml6YXRpb24gbmFtZScpXG4gICAgLm9wdGlvbignLS1waXBlbGluZS1uYW1lIDxuYW1lPicsICdGaWx0ZXIgYnkgZXhhY3QgcGlwZWxpbmUgbmFtZScpXG5cbiAgICAvLyBPdXRwdXQgb3B0aW9uc1xuICAgIC5vcHRpb24oJy1mLCAtLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0IChqc29uLCB5YW1sLCB0YWJsZSwgY3N2KScsICd0YWJsZScpXG4gICAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxmaWxlPicsICdTYXZlIG91dHB1dCB0byBmaWxlJylcbiAgICAub3B0aW9uKCctLXNob3ctcHJvcHMnLCAnSW5jbHVkZSBwaXBlbGluZSBwcm9wZXJ0aWVzIGluIG91dHB1dCAoanNvbi95YW1sIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcblxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdMaXN0IFBpcGVsaW5lcycsICdRdWVyeSBQaXBlbGluZXMnKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIHRyeSB7XG5cbiAgICAgICAgLy8gQnVpbGQgZmlsdGVyIHBhcmFtZXRlcnMgKGNvbW1vbiArIHBpcGVsaW5lLXNwZWNpZmljKVxuICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbXM6IFBpcGVsaW5lRmlsdGVyUGFyYW1zID0ge1xuICAgICAgICAgIC4uLmJ1aWxkQ29tbW9uRmlsdGVycyhvcHRpb25zKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQaXBlbGluZS1zcGVjaWZpYyBmaWx0ZXJzXG4gICAgICAgIGlmIChvcHRpb25zLmFjY2Vzc01vZGlmaWVyKSB7XG4gICAgICAgICAgZmlsdGVyUGFyYW1zLmFjY2Vzc01vZGlmaWVyID0gb3B0aW9ucy5hY2Nlc3NNb2RpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmlzRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmlsdGVyUGFyYW1zLmlzRGVmYXVsdCA9IHZhbGlkYXRlQm9vbGVhbihvcHRpb25zLmlzRGVmYXVsdCwgJ2lzLWRlZmF1bHQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnByb2plY3QpIHtcbiAgICAgICAgICBmaWx0ZXJQYXJhbXMucHJvamVjdCA9IG9wdGlvbnMucHJvamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm9yZ2FuaXphdGlvbikge1xuICAgICAgICAgIGZpbHRlclBhcmFtcy5vcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBpcGVsaW5lTmFtZSkge1xuICAgICAgICAgIGZpbHRlclBhcmFtcy5waXBlbGluZU5hbWUgPSBvcHRpb25zLnBpcGVsaW5lTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERpc3BsYXkgYWN0aXZlIGZpbHRlcnNcbiAgICAgICAgY29uc3QgYWN0aXZlRmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgICAgaWYgKGZpbHRlclBhcmFtcy5pZCkgYWN0aXZlRmlsdGVycy5JRCA9IGZpbHRlclBhcmFtcy5pZDtcbiAgICAgICAgaWYgKGZpbHRlclBhcmFtcy5hY2Nlc3NNb2RpZmllcikgYWN0aXZlRmlsdGVyc1snQWNjZXNzIE1vZGlmaWVyJ10gPSBmaWx0ZXJQYXJhbXMuYWNjZXNzTW9kaWZpZXI7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMuaXNEZWZhdWx0ICE9PSB1bmRlZmluZWQpIGFjdGl2ZUZpbHRlcnNbJ0lzIERlZmF1bHQnXSA9IGZpbHRlclBhcmFtcy5pc0RlZmF1bHQ7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMuaXNBY3RpdmUgIT09IHVuZGVmaW5lZCkgYWN0aXZlRmlsdGVyc1snSXMgQWN0aXZlJ10gPSBmaWx0ZXJQYXJhbXMuaXNBY3RpdmU7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMucHJvamVjdCkgYWN0aXZlRmlsdGVycy5Qcm9qZWN0ID0gZmlsdGVyUGFyYW1zLnByb2plY3Q7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMub3JnYW5pemF0aW9uKSBhY3RpdmVGaWx0ZXJzLk9yZ2FuaXphdGlvbiA9IGZpbHRlclBhcmFtcy5vcmdhbml6YXRpb247XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMucGlwZWxpbmVOYW1lKSBhY3RpdmVGaWx0ZXJzWydQaXBlbGluZSBOYW1lJ10gPSBmaWx0ZXJQYXJhbXMucGlwZWxpbmVOYW1lO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhY3RpdmVGaWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdBY3RpdmUgRmlsdGVycycpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoYWN0aXZlRmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdObyBmaWx0ZXJzIGFwcGxpZWQgLSBmZXRjaGluZyBhbGwgcGlwZWxpbmVzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaXNwbGF5UGFnaW5hdGlvbkluZm8oZmlsdGVyUGFyYW1zKTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gUXVlcnkgcGlwZWxpbmVzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdRdWVyeWluZyBQaXBlbGluZXMnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdTZW5kaW5nIHJlcXVlc3QgdG8gQVBJLi4uJyk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFBpcGVsaW5lTGlzdFJlc3BvbnNlPihcbiAgICAgICAgICBjb25maWcuYXBpLnBpcGVsaW5lTGlzdFVybCxcbiAgICAgICAgICBmaWx0ZXJQYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnQ7XG5cbiAgICAgICAgLy8gSGFuZGxlIHJlc3BvbnNlXG4gICAgICAgIGNvbnN0IHsgaXRlbXM6IHBpcGVsaW5lcywgdG90YWwsIGhhc01vcmUgfSA9IGV4dHJhY3RMaXN0UmVzcG9uc2U8UGlwZWxpbmU+KHJlc3BvbnNlLCAncGlwZWxpbmVzJyk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ+KckyBRdWVyeSBDb21wbGV0ZScpO1xuXG4gICAgICAgIC8vIERpc3BsYXkgcmVzdWx0cyBzdW1tYXJ5XG4gICAgICAgIGRpc3BsYXlMaXN0UmVzdWx0cyhwaXBlbGluZXMsIHRvdGFsLCBoYXNNb3JlLCAnUGlwZWxpbmVzJywgcmVxdWVzdER1cmF0aW9uLCBmaWx0ZXJQYXJhbXMpO1xuXG4gICAgICAgIC8vIERpc3BsYXkgc3RhdGlzdGljc1xuICAgICAgICBpZiAocGlwZWxpbmVzLmxlbmd0aCA+IDAgJiYgb3B0aW9ucy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVDb3VudCA9IHBpcGVsaW5lcy5maWx0ZXIocCA9PiBwLmlzQWN0aXZlKS5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdENvdW50ID0gcGlwZWxpbmVzLmZpbHRlcihwID0+IHAuaXNEZWZhdWx0KS5sZW5ndGg7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdTdGF0aXN0aWNzJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQWN0aXZlIFBpcGVsaW5lcyc6IGAke2FjdGl2ZUNvdW50fS8ke3BpcGVsaW5lcy5sZW5ndGh9YCxcbiAgICAgICAgICAgICdEZWZhdWx0IFBpcGVsaW5lcyc6IGAke2RlZmF1bHRDb3VudH0vJHtwaXBlbGluZXMubGVuZ3RofWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdXRwdXQgZGF0YSBpbiByZXF1ZXN0ZWQgZm9ybWF0XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0KSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdTYXZpbmcgdG8gZmlsZScsIHtcbiAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvcm1hdCBvdXRwdXQgZGF0YVxuICAgICAgICBjb25zdCBvdXRwdXRQaXBlbGluZXMgPSBvcHRpb25zLnNob3dQcm9wcyA/IHBpcGVsaW5lcyA6IHBpcGVsaW5lcy5tYXAocCA9PiAoe1xuICAgICAgICAgICdJRCc6IHAuaWQsXG4gICAgICAgICAgJ1Byb2plY3QnOiBwLnByb2plY3QsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHAub3JnYW5pemF0aW9uLFxuICAgICAgICAgICdOYW1lJzogcC5waXBlbGluZU5hbWUgfHwgJ04vQScsXG4gICAgICAgICAgJ0FjY2VzcyBNb2RpZmllcic6IHAuYWNjZXNzTW9kaWZpZXIgfHwgJ3ByaXZhdGUnLFxuICAgICAgICAgICdEZWZhdWx0JzogcC5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IHAuaXNBY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0NyZWF0ZWQgQXQnOiBwLmNyZWF0ZWRBdCB8fCAnTi9BJyxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIG91dHB1dERhdGEob3V0cHV0UGlwZWxpbmVzLCB7XG4gICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICBmaWxlOiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGVyZm9ybWFuY2UgbWV0cmljc1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnbGlzdC1waXBlbGluZXMnLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBvcHRpb25zLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `list-plugins` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Queries plugins with filters for name, version, image tag,
|
|
6
|
+
* active status, plus pagination and sorting.
|
|
7
|
+
*
|
|
8
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```bash
|
|
12
|
+
* cli list-plugins
|
|
13
|
+
* cli list-plugins --name auth-plugin --is-active true
|
|
14
|
+
* cli list-plugins --version "^1.0.0"
|
|
15
|
+
* cli list-plugins --limit 50 --offset 100 --sort "name:asc"
|
|
16
|
+
* cli list-plugins --format json --output plugins.json
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function listPlugins(program: Command): void;
|
|
20
|
+
//# sourceMappingURL=list-plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-plugins.d.ts","sourceRoot":"","sources":["../../src/commands/list-plugins.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiKlD"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.listPlugins = listPlugins;
|
|
6
|
+
const cli_constants_1 = require("../config/cli.constants");
|
|
7
|
+
const command_utils_1 = require("../utils/command-utils");
|
|
8
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
9
|
+
const list_command_utils_1 = require("../utils/list-command-utils");
|
|
10
|
+
const output_utils_1 = require("../utils/output-utils");
|
|
11
|
+
/**
|
|
12
|
+
* Registers the `list-plugins` command with the CLI program.
|
|
13
|
+
*
|
|
14
|
+
* Queries plugins with filters for name, version, image tag,
|
|
15
|
+
* active status, plus pagination and sorting.
|
|
16
|
+
*
|
|
17
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```bash
|
|
21
|
+
* cli list-plugins
|
|
22
|
+
* cli list-plugins --name auth-plugin --is-active true
|
|
23
|
+
* cli list-plugins --version "^1.0.0"
|
|
24
|
+
* cli list-plugins --limit 50 --offset 100 --sort "name:asc"
|
|
25
|
+
* cli list-plugins --format json --output plugins.json
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
function listPlugins(program) {
|
|
29
|
+
program
|
|
30
|
+
.command('list-plugins')
|
|
31
|
+
.description('Query plugins with comprehensive filters')
|
|
32
|
+
// Common filter options
|
|
33
|
+
.option('--id <id>', 'Filter by plugin ID (can specify multiple with commas)')
|
|
34
|
+
.option('--is-active <boolean>', 'Filter by active status (true/false)')
|
|
35
|
+
.option('--limit <number>', 'Maximum number of results (1-1000)', parseInt, 50)
|
|
36
|
+
.option('--offset <number>', 'Number of results to skip', parseInt, 0)
|
|
37
|
+
.option('--sort <sort>', 'Sort format: field:direction (e.g., name:asc, createdAt:desc)')
|
|
38
|
+
// Plugin-specific filter options
|
|
39
|
+
.option('--name <name>', 'Filter by exact plugin name')
|
|
40
|
+
.option('--version <version>', 'Filter by version (supports semver, e.g., "^1.0.0")')
|
|
41
|
+
.option('--image-tag <tag>', 'Filter by Docker image tag')
|
|
42
|
+
// Output options
|
|
43
|
+
.option('-f, --format <format>', 'Output format (json, yaml, table, csv)', 'table')
|
|
44
|
+
.option('-o, --output <file>', 'Save output to file')
|
|
45
|
+
.option('--show-metadata', 'Include full metadata in output (json/yaml only)', false)
|
|
46
|
+
.option('--verify-ssl', 'Enable SSL certificate verification')
|
|
47
|
+
.option('--no-verify-ssl', 'Disable SSL certificate verification')
|
|
48
|
+
.action(async (options) => {
|
|
49
|
+
const executionId = (0, command_utils_1.printCommandHeader)('List Plugins', 'Query Plugins');
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
try {
|
|
52
|
+
// Build filter parameters (common + plugin-specific)
|
|
53
|
+
const filterParams = {
|
|
54
|
+
...(0, list_command_utils_1.buildCommonFilters)(options),
|
|
55
|
+
};
|
|
56
|
+
// Plugin-specific filters
|
|
57
|
+
if (options.name) {
|
|
58
|
+
filterParams.name = options.name;
|
|
59
|
+
}
|
|
60
|
+
if (options.version) {
|
|
61
|
+
// Validate semver format
|
|
62
|
+
const versionPattern = /^(\^|~)?(\d+)\.(\d+)\.(\d+)(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/;
|
|
63
|
+
if (!versionPattern.test(options.version)) {
|
|
64
|
+
(0, output_utils_1.printWarning)(`Version "${options.version}" may not be valid semver format`);
|
|
65
|
+
}
|
|
66
|
+
filterParams.version = options.version;
|
|
67
|
+
}
|
|
68
|
+
if (options.imageTag) {
|
|
69
|
+
filterParams.imageTag = options.imageTag;
|
|
70
|
+
}
|
|
71
|
+
// Display active filters
|
|
72
|
+
const activeFilters = {};
|
|
73
|
+
if (filterParams.id)
|
|
74
|
+
activeFilters.ID = filterParams.id;
|
|
75
|
+
if (filterParams.isActive !== undefined)
|
|
76
|
+
activeFilters['Is Active'] = filterParams.isActive;
|
|
77
|
+
if (filterParams.name)
|
|
78
|
+
activeFilters.Name = filterParams.name;
|
|
79
|
+
if (filterParams.version)
|
|
80
|
+
activeFilters.Version = filterParams.version;
|
|
81
|
+
if (filterParams.imageTag)
|
|
82
|
+
activeFilters['Image Tag'] = filterParams.imageTag;
|
|
83
|
+
if (Object.keys(activeFilters).length > 0) {
|
|
84
|
+
(0, output_utils_1.printInfo)('Active Filters');
|
|
85
|
+
(0, output_utils_1.printKeyValue)(activeFilters);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
(0, output_utils_1.printInfo)('No filters applied - fetching all plugins');
|
|
89
|
+
}
|
|
90
|
+
(0, list_command_utils_1.displayPaginationInfo)(filterParams);
|
|
91
|
+
// Security warning for SSL verification disabled
|
|
92
|
+
(0, command_utils_1.printSslWarning)(options.verifySsl);
|
|
93
|
+
// Create authenticated API client
|
|
94
|
+
const client = (0, command_utils_1.createAuthenticatedClient)(options);
|
|
95
|
+
const config = client.getConfig();
|
|
96
|
+
// Query plugins
|
|
97
|
+
console.log('');
|
|
98
|
+
(0, output_utils_1.printSection)('Querying Plugins');
|
|
99
|
+
(0, output_utils_1.printInfo)('Sending request to API...');
|
|
100
|
+
const requestStart = Date.now();
|
|
101
|
+
const response = await client.get(config.api.pluginListUrl, filterParams);
|
|
102
|
+
const requestDuration = Date.now() - requestStart;
|
|
103
|
+
// Handle response
|
|
104
|
+
const { items: plugins, total, hasMore } = (0, output_utils_1.extractListResponse)(response, 'plugins');
|
|
105
|
+
console.log('');
|
|
106
|
+
(0, output_utils_1.printSection)('✓ Query Complete');
|
|
107
|
+
// Display results summary
|
|
108
|
+
(0, list_command_utils_1.displayListResults)(plugins, total, hasMore, 'Plugins', requestDuration, filterParams);
|
|
109
|
+
// Display statistics
|
|
110
|
+
if (plugins.length > 0 && options.format === 'table') {
|
|
111
|
+
const activeCount = plugins.filter(p => p.isActive).length;
|
|
112
|
+
const publicCount = plugins.filter(p => p.isPublic === true).length;
|
|
113
|
+
const totalSize = plugins.reduce((sum, p) => sum + (p.fileSize || 0), 0);
|
|
114
|
+
console.log('');
|
|
115
|
+
(0, output_utils_1.printInfo)('Statistics');
|
|
116
|
+
(0, output_utils_1.printKeyValue)({
|
|
117
|
+
'Active Plugins': `${activeCount}/${plugins.length}`,
|
|
118
|
+
'Public Plugins': `${publicCount}/${plugins.length}`,
|
|
119
|
+
'Total Size': (0, cli_constants_1.formatFileSize)(totalSize),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// Output data in requested format
|
|
123
|
+
console.log('');
|
|
124
|
+
if (options.output) {
|
|
125
|
+
(0, output_utils_1.printInfo)('Saving to file', {
|
|
126
|
+
path: options.output,
|
|
127
|
+
format: options.format,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// Format output data
|
|
131
|
+
const outputPlugins = options.showMetadata ? plugins : plugins.map(p => ({
|
|
132
|
+
'ID': p.id,
|
|
133
|
+
'Name': p.name,
|
|
134
|
+
'Version': p.version,
|
|
135
|
+
'Organization': p.organization,
|
|
136
|
+
'Active': p.isActive ? 'Yes' : 'No',
|
|
137
|
+
'Public': p.isPublic ? 'Yes' : 'No',
|
|
138
|
+
'Size': p.fileSize ? (0, cli_constants_1.formatFileSize)(p.fileSize) : 'N/A',
|
|
139
|
+
'Created At': p.createdAt || 'N/A',
|
|
140
|
+
}));
|
|
141
|
+
(0, output_utils_1.outputData)(outputPlugins, {
|
|
142
|
+
format: options.format,
|
|
143
|
+
file: options.output,
|
|
144
|
+
});
|
|
145
|
+
// Performance metrics
|
|
146
|
+
console.log('');
|
|
147
|
+
(0, output_utils_1.printKeyValue)({
|
|
148
|
+
'Execution ID': executionId,
|
|
149
|
+
'Total Duration': (0, cli_constants_1.formatDuration)(Date.now() - startTime),
|
|
150
|
+
});
|
|
151
|
+
console.log('');
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
(0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.API_REQUEST, {
|
|
155
|
+
debug: program.opts().debug,
|
|
156
|
+
exit: true,
|
|
157
|
+
context: {
|
|
158
|
+
command: 'list-plugins',
|
|
159
|
+
executionId,
|
|
160
|
+
filters: options,
|
|
161
|
+
verifySsl: options.verifySsl,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xpc3QtcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFzQ3RDLGtDQWlLQztBQXBNRCwyREFBeUU7QUFFekUsMERBQXdHO0FBQ3hHLDBEQUFrRTtBQUNsRSxvRUFBZ0k7QUFDaEksd0RBQThIO0FBYTlIOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLE9BQWdCO0lBQzFDLE9BQU87U0FDSixPQUFPLENBQUMsY0FBYyxDQUFDO1NBQ3ZCLFdBQVcsQ0FBQywwQ0FBMEMsQ0FBQztRQUV4RCx3QkFBd0I7U0FDdkIsTUFBTSxDQUFDLFdBQVcsRUFBRSx3REFBd0QsQ0FBQztTQUM3RSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsc0NBQXNDLENBQUM7U0FDdkUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLG9DQUFvQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7U0FDOUUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDckUsTUFBTSxDQUFDLGVBQWUsRUFBRSwrREFBK0QsQ0FBQztRQUV6RixpQ0FBaUM7U0FDaEMsTUFBTSxDQUFDLGVBQWUsRUFBRSw2QkFBNkIsQ0FBQztTQUN0RCxNQUFNLENBQUMscUJBQXFCLEVBQUUscURBQXFELENBQUM7U0FDcEYsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDRCQUE0QixDQUFDO1FBRTFELGlCQUFpQjtTQUNoQixNQUFNLENBQUMsdUJBQXVCLEVBQUUsd0NBQXdDLEVBQUUsT0FBTyxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztTQUNwRCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsa0RBQWtELEVBQUUsS0FBSyxDQUFDO1NBQ3BGLE1BQU0sQ0FBQyxj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bkMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUEsOEJBQWMsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ3ZELFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUs7YUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSixJQUFBLHlCQUFVLEVBQUMsYUFBYSxFQUFFO2dCQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTTthQUNyQixDQUFDLENBQUM7WUFFSCxzQkFBc0I7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixJQUFBLDRCQUFhLEVBQUM7Z0JBQ1osY0FBYyxFQUFFLFdBQVc7Z0JBQzNCLGdCQUFnQixFQUFFLElBQUEsOEJBQWMsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO2FBQ3pELENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFBLDJCQUFXLEVBQUMsS0FBSyxFQUFFLDJCQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUUsY0FBYztvQkFDdkIsV0FBVztvQkFDWCxPQUFPLEVBQUUsT0FBTztvQkFDaEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2lCQUM3QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBQbHVnaW5MaXN0UmVzcG9uc2UsIFBsdWdpbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50IH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IGJ1aWxkQ29tbW9uRmlsdGVycywgQ29tbW9uRmlsdGVyUGFyYW1zLCBkaXNwbGF5UGFnaW5hdGlvbkluZm8sIGRpc3BsYXlMaXN0UmVzdWx0cyB9IGZyb20gJy4uL3V0aWxzL2xpc3QtY29tbWFuZC11dGlscyc7XG5pbXBvcnQgeyBvdXRwdXREYXRhLCBleHRyYWN0TGlzdFJlc3BvbnNlLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuLyoqXG4gKiBRdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcGx1Z2luIGxpc3QgQVBJIGVuZHBvaW50LlxuICogQ29tYmluZXMgY29tbW9uIGZpbHRlcnMgKHBhZ2luYXRpb24sIHNvcnQpIHdpdGggcGx1Z2luLXNwZWNpZmljIGZpbHRlcnMuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5GaWx0ZXJQYXJhbXMgZXh0ZW5kcyBDb21tb25GaWx0ZXJQYXJhbXMge1xuICAvLyBQbHVnaW4tc3BlY2lmaWMgZmlsdGVyc1xuICBuYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBpbWFnZVRhZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBsaXN0LXBsdWdpbnNgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogUXVlcmllcyBwbHVnaW5zIHdpdGggZmlsdGVycyBmb3IgbmFtZSwgdmVyc2lvbiwgaW1hZ2UgdGFnLFxuICogYWN0aXZlIHN0YXR1cywgcGx1cyBwYWdpbmF0aW9uIGFuZCBzb3J0aW5nLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBjbGkgbGlzdC1wbHVnaW5zXG4gKiBjbGkgbGlzdC1wbHVnaW5zIC0tbmFtZSBhdXRoLXBsdWdpbiAtLWlzLWFjdGl2ZSB0cnVlXG4gKiBjbGkgbGlzdC1wbHVnaW5zIC0tdmVyc2lvbiBcIl4xLjAuMFwiXG4gKiBjbGkgbGlzdC1wbHVnaW5zIC0tbGltaXQgNTAgLS1vZmZzZXQgMTAwIC0tc29ydCBcIm5hbWU6YXNjXCJcbiAqIGNsaSBsaXN0LXBsdWdpbnMgLS1mb3JtYXQganNvbiAtLW91dHB1dCBwbHVnaW5zLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFBsdWdpbnMocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xpc3QtcGx1Z2lucycpXG4gICAgLmRlc2NyaXB0aW9uKCdRdWVyeSBwbHVnaW5zIHdpdGggY29tcHJlaGVuc2l2ZSBmaWx0ZXJzJylcblxuICAgIC8vIENvbW1vbiBmaWx0ZXIgb3B0aW9uc1xuICAgIC5vcHRpb24oJy0taWQgPGlkPicsICdGaWx0ZXIgYnkgcGx1Z2luIElEIChjYW4gc3BlY2lmeSBtdWx0aXBsZSB3aXRoIGNvbW1hcyknKVxuICAgIC5vcHRpb24oJy0taXMtYWN0aXZlIDxib29sZWFuPicsICdGaWx0ZXIgYnkgYWN0aXZlIHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG51bWJlcj4nLCAnTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyAoMS0xMDAwKScsIHBhcnNlSW50LCA1MClcbiAgICAub3B0aW9uKCctLW9mZnNldCA8bnVtYmVyPicsICdOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwJywgcGFyc2VJbnQsIDApXG4gICAgLm9wdGlvbignLS1zb3J0IDxzb3J0PicsICdTb3J0IGZvcm1hdDogZmllbGQ6ZGlyZWN0aW9uIChlLmcuLCBuYW1lOmFzYywgY3JlYXRlZEF0OmRlc2MpJylcblxuICAgIC8vIFBsdWdpbi1zcGVjaWZpYyBmaWx0ZXIgb3B0aW9uc1xuICAgIC5vcHRpb24oJy0tbmFtZSA8bmFtZT4nLCAnRmlsdGVyIGJ5IGV4YWN0IHBsdWdpbiBuYW1lJylcbiAgICAub3B0aW9uKCctLXZlcnNpb24gPHZlcnNpb24+JywgJ0ZpbHRlciBieSB2ZXJzaW9uIChzdXBwb3J0cyBzZW12ZXIsIGUuZy4sIFwiXjEuMC4wXCIpJylcbiAgICAub3B0aW9uKCctLWltYWdlLXRhZyA8dGFnPicsICdGaWx0ZXIgYnkgRG9ja2VyIGltYWdlIHRhZycpXG5cbiAgICAvLyBPdXRwdXQgb3B0aW9uc1xuICAgIC5vcHRpb24oJy1mLCAtLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0IChqc29uLCB5YW1sLCB0YWJsZSwgY3N2KScsICd0YWJsZScpXG4gICAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxmaWxlPicsICdTYXZlIG91dHB1dCB0byBmaWxlJylcbiAgICAub3B0aW9uKCctLXNob3ctbWV0YWRhdGEnLCAnSW5jbHVkZSBmdWxsIG1ldGFkYXRhIGluIG91dHB1dCAoanNvbi95YW1sIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcblxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdMaXN0IFBsdWdpbnMnLCAnUXVlcnkgUGx1Z2lucycpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgdHJ5IHtcblxuICAgICAgICAvLyBCdWlsZCBmaWx0ZXIgcGFyYW1ldGVycyAoY29tbW9uICsgcGx1Z2luLXNwZWNpZmljKVxuICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbXM6IFBsdWdpbkZpbHRlclBhcmFtcyA9IHtcbiAgICAgICAgICAuLi5idWlsZENvbW1vbkZpbHRlcnMob3B0aW9ucyksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGx1Z2luLXNwZWNpZmljIGZpbHRlcnNcbiAgICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgIGZpbHRlclBhcmFtcy5uYW1lID0gb3B0aW9ucy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudmVyc2lvbikge1xuICAgICAgICAgIC8vIFZhbGlkYXRlIHNlbXZlciBmb3JtYXRcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uUGF0dGVybiA9IC9eKFxcXnx+KT8oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQvO1xuICAgICAgICAgIGlmICghdmVyc2lvblBhdHRlcm4udGVzdChvcHRpb25zLnZlcnNpb24pKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoYFZlcnNpb24gXCIke29wdGlvbnMudmVyc2lvbn1cIiBtYXkgbm90IGJlIHZhbGlkIHNlbXZlciBmb3JtYXRgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsdGVyUGFyYW1zLnZlcnNpb24gPSBvcHRpb25zLnZlcnNpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5pbWFnZVRhZykge1xuICAgICAgICAgIGZpbHRlclBhcmFtcy5pbWFnZVRhZyA9IG9wdGlvbnMuaW1hZ2VUYWc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNwbGF5IGFjdGl2ZSBmaWx0ZXJzXG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMuaWQpIGFjdGl2ZUZpbHRlcnMuSUQgPSBmaWx0ZXJQYXJhbXMuaWQ7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMuaXNBY3RpdmUgIT09IHVuZGVmaW5lZCkgYWN0aXZlRmlsdGVyc1snSXMgQWN0aXZlJ10gPSBmaWx0ZXJQYXJhbXMuaXNBY3RpdmU7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMubmFtZSkgYWN0aXZlRmlsdGVycy5OYW1lID0gZmlsdGVyUGFyYW1zLm5hbWU7XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMudmVyc2lvbikgYWN0aXZlRmlsdGVycy5WZXJzaW9uID0gZmlsdGVyUGFyYW1zLnZlcnNpb247XG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbXMuaW1hZ2VUYWcpIGFjdGl2ZUZpbHRlcnNbJ0ltYWdlIFRhZyddID0gZmlsdGVyUGFyYW1zLmltYWdlVGFnO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhY3RpdmVGaWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdBY3RpdmUgRmlsdGVycycpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoYWN0aXZlRmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdObyBmaWx0ZXJzIGFwcGxpZWQgLSBmZXRjaGluZyBhbGwgcGx1Z2lucycpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlzcGxheVBhZ2luYXRpb25JbmZvKGZpbHRlclBhcmFtcyk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnRcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgICAgIC8vIFF1ZXJ5IHBsdWdpbnNcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1F1ZXJ5aW5nIFBsdWdpbnMnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdTZW5kaW5nIHJlcXVlc3QgdG8gQVBJLi4uJyk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFBsdWdpbkxpc3RSZXNwb25zZT4oXG4gICAgICAgICAgY29uZmlnLmFwaS5wbHVnaW5MaXN0VXJsLFxuICAgICAgICAgIGZpbHRlclBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydDtcblxuICAgICAgICAvLyBIYW5kbGUgcmVzcG9uc2VcbiAgICAgICAgY29uc3QgeyBpdGVtczogcGx1Z2lucywgdG90YWwsIGhhc01vcmUgfSA9IGV4dHJhY3RMaXN0UmVzcG9uc2U8UGx1Z2luPihyZXNwb25zZSwgJ3BsdWdpbnMnKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbign4pyTIFF1ZXJ5IENvbXBsZXRlJyk7XG5cbiAgICAgICAgLy8gRGlzcGxheSByZXN1bHRzIHN1bW1hcnlcbiAgICAgICAgZGlzcGxheUxpc3RSZXN1bHRzKHBsdWdpbnMsIHRvdGFsLCBoYXNNb3JlLCAnUGx1Z2lucycsIHJlcXVlc3REdXJhdGlvbiwgZmlsdGVyUGFyYW1zKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHN0YXRpc3RpY3NcbiAgICAgICAgaWYgKHBsdWdpbnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLmZvcm1hdCA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUNvdW50ID0gcGx1Z2lucy5maWx0ZXIocCA9PiBwLmlzQWN0aXZlKS5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcHVibGljQ291bnQgPSBwbHVnaW5zLmZpbHRlcihwID0+IHAuaXNQdWJsaWMgPT09IHRydWUpLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCB0b3RhbFNpemUgPSBwbHVnaW5zLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyAocC5maWxlU2l6ZSB8fCAwKSwgMCk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdTdGF0aXN0aWNzJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQWN0aXZlIFBsdWdpbnMnOiBgJHthY3RpdmVDb3VudH0vJHtwbHVnaW5zLmxlbmd0aH1gLFxuICAgICAgICAgICAgJ1B1YmxpYyBQbHVnaW5zJzogYCR7cHVibGljQ291bnR9LyR7cGx1Z2lucy5sZW5ndGh9YCxcbiAgICAgICAgICAgICdUb3RhbCBTaXplJzogZm9ybWF0RmlsZVNpemUodG90YWxTaXplKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE91dHB1dCBkYXRhIGluIHJlcXVlc3RlZCBmb3JtYXRcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgICAgICBwcmludEluZm8oJ1NhdmluZyB0byBmaWxlJywge1xuICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9ybWF0IG91dHB1dCBkYXRhXG4gICAgICAgIGNvbnN0IG91dHB1dFBsdWdpbnMgPSBvcHRpb25zLnNob3dNZXRhZGF0YSA/IHBsdWdpbnMgOiBwbHVnaW5zLm1hcChwID0+ICh7XG4gICAgICAgICAgJ0lEJzogcC5pZCxcbiAgICAgICAgICAnTmFtZSc6IHAubmFtZSxcbiAgICAgICAgICAnVmVyc2lvbic6IHAudmVyc2lvbixcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcC5vcmdhbml6YXRpb24sXG4gICAgICAgICAgJ0FjdGl2ZSc6IHAuaXNBY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ1B1YmxpYyc6IHAuaXNQdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ1NpemUnOiBwLmZpbGVTaXplID8gZm9ybWF0RmlsZVNpemUocC5maWxlU2l6ZSkgOiAnTi9BJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHAuY3JlYXRlZEF0IHx8ICdOL0EnLFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgb3V0cHV0RGF0YShvdXRwdXRQbHVnaW5zLCB7XG4gICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICBmaWxlOiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGVyZm9ybWFuY2UgbWV0cmljc1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnbGlzdC1wbHVnaW5zJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgZmlsdGVyczogb3B0aW9ucyxcbiAgICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `login` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Authenticates against the platform API and prints an export statement
|
|
6
|
+
* for `PLATFORM_TOKEN` on success. Does NOT require `PLATFORM_TOKEN`
|
|
7
|
+
* to be set beforehand (unlike other commands).
|
|
8
|
+
*
|
|
9
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```bash
|
|
13
|
+
* pipeline-manager login --identifier admin@example.com --password secret
|
|
14
|
+
* pipeline-manager login -u admin@example.com -p secret
|
|
15
|
+
* pipeline-manager login -u admin@example.com -p secret --url https://myhost:8443
|
|
16
|
+
* eval $(pipeline-manager login -u admin@example.com -p secret --quiet)
|
|
17
|
+
* pipeline-manager login --refresh <refresh-token>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function login(program: Command): void;
|
|
21
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8K5C"}
|