@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.
Files changed (110) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +74 -0
  3. package/cdk.json +91 -0
  4. package/config.yml +94 -0
  5. package/dist/boilerplate.d.ts +3 -0
  6. package/dist/boilerplate.d.ts.map +1 -0
  7. package/dist/boilerplate.js +58 -0
  8. package/dist/cdk.json +91 -0
  9. package/dist/cli.d.ts +62 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +372 -0
  12. package/dist/commands/bootstrap.d.ts +11 -0
  13. package/dist/commands/bootstrap.d.ts.map +1 -0
  14. package/dist/commands/bootstrap.js +159 -0
  15. package/dist/commands/create-pipeline.d.ts +12 -0
  16. package/dist/commands/create-pipeline.d.ts.map +1 -0
  17. package/dist/commands/create-pipeline.js +291 -0
  18. package/dist/commands/deploy.d.ts +15 -0
  19. package/dist/commands/deploy.d.ts.map +1 -0
  20. package/dist/commands/deploy.js +167 -0
  21. package/dist/commands/get-pipeline.d.ts +13 -0
  22. package/dist/commands/get-pipeline.d.ts.map +1 -0
  23. package/dist/commands/get-pipeline.js +97 -0
  24. package/dist/commands/get-plugin.d.ts +13 -0
  25. package/dist/commands/get-plugin.d.ts.map +1 -0
  26. package/dist/commands/get-plugin.js +98 -0
  27. package/dist/commands/list-pipelines.d.ts +20 -0
  28. package/dist/commands/list-pipelines.d.ts.map +1 -0
  29. package/dist/commands/list-pipelines.js +172 -0
  30. package/dist/commands/list-plugins.d.ts +20 -0
  31. package/dist/commands/list-plugins.d.ts.map +1 -0
  32. package/dist/commands/list-plugins.js +167 -0
  33. package/dist/commands/login.d.ts +21 -0
  34. package/dist/commands/login.d.ts.map +1 -0
  35. package/dist/commands/login.js +179 -0
  36. package/dist/commands/setup-events.d.ts +15 -0
  37. package/dist/commands/setup-events.d.ts.map +1 -0
  38. package/dist/commands/setup-events.js +177 -0
  39. package/dist/commands/status.d.ts +11 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +89 -0
  42. package/dist/commands/store-token.d.ts +20 -0
  43. package/dist/commands/store-token.d.ts.map +1 -0
  44. package/dist/commands/store-token.js +233 -0
  45. package/dist/commands/synth.d.ts +21 -0
  46. package/dist/commands/synth.d.ts.map +1 -0
  47. package/dist/commands/synth.js +143 -0
  48. package/dist/commands/upload-plugin.d.ts +21 -0
  49. package/dist/commands/upload-plugin.d.ts.map +1 -0
  50. package/dist/commands/upload-plugin.js +311 -0
  51. package/dist/commands/version.d.ts +12 -0
  52. package/dist/commands/version.d.ts.map +1 -0
  53. package/dist/commands/version.js +223 -0
  54. package/dist/config/cli.constants.d.ts +101 -0
  55. package/dist/config/cli.constants.d.ts.map +1 -0
  56. package/dist/config/cli.constants.js +165 -0
  57. package/dist/config.yml +94 -0
  58. package/dist/templates/events-stack.json +141 -0
  59. package/dist/types/config.d.ts +44 -0
  60. package/dist/types/config.d.ts.map +1 -0
  61. package/dist/types/config.js +5 -0
  62. package/dist/types/error.d.ts +61 -0
  63. package/dist/types/error.d.ts.map +1 -0
  64. package/dist/types/error.js +39 -0
  65. package/dist/types/index.d.ts +8 -0
  66. package/dist/types/index.d.ts.map +1 -0
  67. package/dist/types/index.js +26 -0
  68. package/dist/types/pipeline.d.ts +144 -0
  69. package/dist/types/pipeline.d.ts.map +1 -0
  70. package/dist/types/pipeline.js +5 -0
  71. package/dist/types/plugin.d.ts +160 -0
  72. package/dist/types/plugin.d.ts.map +1 -0
  73. package/dist/types/plugin.js +5 -0
  74. package/dist/utils/api-client.d.ts +26 -0
  75. package/dist/utils/api-client.d.ts.map +1 -0
  76. package/dist/utils/api-client.js +160 -0
  77. package/dist/utils/audit-log.d.ts +8 -0
  78. package/dist/utils/audit-log.d.ts.map +1 -0
  79. package/dist/utils/audit-log.js +53 -0
  80. package/dist/utils/auth-guard.d.ts +16 -0
  81. package/dist/utils/auth-guard.d.ts.map +1 -0
  82. package/dist/utils/auth-guard.js +25 -0
  83. package/dist/utils/aws-secrets.d.ts +21 -0
  84. package/dist/utils/aws-secrets.d.ts.map +1 -0
  85. package/dist/utils/aws-secrets.js +74 -0
  86. package/dist/utils/banner.d.ts +19 -0
  87. package/dist/utils/banner.d.ts.map +1 -0
  88. package/dist/utils/banner.js +59 -0
  89. package/dist/utils/cdk-utils.d.ts +51 -0
  90. package/dist/utils/cdk-utils.d.ts.map +1 -0
  91. package/dist/utils/cdk-utils.js +101 -0
  92. package/dist/utils/command-utils.d.ts +56 -0
  93. package/dist/utils/command-utils.d.ts.map +1 -0
  94. package/dist/utils/command-utils.js +138 -0
  95. package/dist/utils/config-loader.d.ts +27 -0
  96. package/dist/utils/config-loader.d.ts.map +1 -0
  97. package/dist/utils/config-loader.js +166 -0
  98. package/dist/utils/error-handler.d.ts +29 -0
  99. package/dist/utils/error-handler.d.ts.map +1 -0
  100. package/dist/utils/error-handler.js +255 -0
  101. package/dist/utils/list-command-utils.d.ts +23 -0
  102. package/dist/utils/list-command-utils.d.ts.map +1 -0
  103. package/dist/utils/list-command-utils.js +60 -0
  104. package/dist/utils/output-utils.d.ts +60 -0
  105. package/dist/utils/output-utils.d.ts.map +1 -0
  106. package/dist/utils/output-utils.js +320 -0
  107. package/dist/utils/rate-limiter.d.ts +14 -0
  108. package/dist/utils/rate-limiter.d.ts.map +1 -0
  109. package/dist/utils/rate-limiter.js +73 -0
  110. 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"}