@sembix/cli 0.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 (61) hide show
  1. package/.env.example +6 -0
  2. package/LICENSE +15 -0
  3. package/README.md +698 -0
  4. package/config.example.yaml +118 -0
  5. package/dist/commands/hub-integration.d.ts +3 -0
  6. package/dist/commands/hub-integration.d.ts.map +1 -0
  7. package/dist/commands/hub-integration.js +107 -0
  8. package/dist/commands/hub-integration.js.map +1 -0
  9. package/dist/commands/setup.d.ts +3 -0
  10. package/dist/commands/setup.d.ts.map +1 -0
  11. package/dist/commands/setup.js +282 -0
  12. package/dist/commands/setup.js.map +1 -0
  13. package/dist/commands/update.d.ts +3 -0
  14. package/dist/commands/update.d.ts.map +1 -0
  15. package/dist/commands/update.js +498 -0
  16. package/dist/commands/update.js.map +1 -0
  17. package/dist/config-schema.d.ts +417 -0
  18. package/dist/config-schema.d.ts.map +1 -0
  19. package/dist/config-schema.js +152 -0
  20. package/dist/config-schema.js.map +1 -0
  21. package/dist/config.d.ts +6 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +17 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +260 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/prompts/environment-setup.d.ts +4 -0
  30. package/dist/prompts/environment-setup.d.ts.map +1 -0
  31. package/dist/prompts/environment-setup.js +689 -0
  32. package/dist/prompts/environment-setup.js.map +1 -0
  33. package/dist/prompts/hub-integration-step.d.ts +21 -0
  34. package/dist/prompts/hub-integration-step.d.ts.map +1 -0
  35. package/dist/prompts/hub-integration-step.js +104 -0
  36. package/dist/prompts/hub-integration-step.js.map +1 -0
  37. package/dist/prompts/hub-integration.d.ts +4 -0
  38. package/dist/prompts/hub-integration.d.ts.map +1 -0
  39. package/dist/prompts/hub-integration.js +141 -0
  40. package/dist/prompts/hub-integration.js.map +1 -0
  41. package/dist/prompts/prompt-helpers.d.ts +18 -0
  42. package/dist/prompts/prompt-helpers.d.ts.map +1 -0
  43. package/dist/prompts/prompt-helpers.js +50 -0
  44. package/dist/prompts/prompt-helpers.js.map +1 -0
  45. package/dist/types.d.ts +144 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +23 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/utils/config-loader.d.ts +34 -0
  50. package/dist/utils/config-loader.d.ts.map +1 -0
  51. package/dist/utils/config-loader.js +377 -0
  52. package/dist/utils/config-loader.js.map +1 -0
  53. package/dist/utils/github.d.ts +38 -0
  54. package/dist/utils/github.d.ts.map +1 -0
  55. package/dist/utils/github.js +188 -0
  56. package/dist/utils/github.js.map +1 -0
  57. package/dist/utils/ui.d.ts +18 -0
  58. package/dist/utils/ui.d.ts.map +1 -0
  59. package/dist/utils/ui.js +62 -0
  60. package/dist/utils/ui.js.map +1 -0
  61. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkDxF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAS1D;AAED;;;;;;;;;;;;GAYG;AAEH,wBAAgB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,YAAY,CA6L3G;AAoFD;;;;GAIG;AAEH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAElF"}
@@ -0,0 +1,377 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ import yaml from 'js-yaml';
4
+ import { configFileSchema } from '../config-schema.js';
5
+ import * as ui from './ui.js';
6
+ import { awsAccountIdSchema, iamRoleArnSchema, acmCertArnSchema, route53ZoneIdSchema } from '../types.js';
7
+ /**
8
+ * Load and validate a YAML configuration file
9
+ * @param configPath - Path to the YAML config file (absolute or relative to CWD)
10
+ * @returns Validation result with parsed config or errors
11
+ */
12
+ export async function loadConfigFile(configPath) {
13
+ try {
14
+ // Resolve path relative to current working directory
15
+ const absolutePath = resolve(process.cwd(), configPath);
16
+ // Read file contents
17
+ const fileContents = await readFile(absolutePath, 'utf-8');
18
+ // Parse YAML
19
+ const parsedYaml = yaml.load(fileContents);
20
+ // Validate against schema
21
+ const result = configFileSchema.safeParse(parsedYaml);
22
+ if (result.success) {
23
+ return {
24
+ success: true,
25
+ data: result.data,
26
+ };
27
+ }
28
+ else {
29
+ // Extract error messages from Zod
30
+ const errors = result.error.errors.map(err => {
31
+ const path = err.path.join('.');
32
+ return `${path}: ${err.message}`;
33
+ });
34
+ return {
35
+ success: false,
36
+ errors,
37
+ };
38
+ }
39
+ }
40
+ catch (error) {
41
+ // Handle file system or YAML parsing errors
42
+ if (error.code === 'ENOENT') {
43
+ return {
44
+ success: false,
45
+ errors: [`Config file not found: ${configPath}`],
46
+ };
47
+ }
48
+ else if (error.name === 'YAMLException') {
49
+ return {
50
+ success: false,
51
+ errors: [`Invalid YAML syntax: ${error.message}`],
52
+ };
53
+ }
54
+ else {
55
+ return {
56
+ success: false,
57
+ errors: [`Failed to load config: ${error.message}`],
58
+ };
59
+ }
60
+ }
61
+ }
62
+ /**
63
+ * Display validation errors in a user-friendly format
64
+ * @param errors - Array of validation error messages
65
+ */
66
+ export function displayConfigErrors(errors) {
67
+ ui.error('Configuration file validation failed:');
68
+ console.log();
69
+ errors.forEach(err => {
70
+ console.log(ui.dim(' • ' + err));
71
+ });
72
+ console.log();
73
+ console.log(ui.dim('💡 Tip: Check your YAML syntax and field values against the schema.'));
74
+ console.log(ui.dim(' See documentation for valid configuration format.'));
75
+ }
76
+ /**
77
+ * Merge config file with CLI flags and set defaults
78
+ * Priority: CLI flags > Config file > Defaults
79
+ *
80
+ * Note: CLI flags are NOT validated here - they're validated when used:
81
+ * - In the interactive prompts (via prompt validation)
82
+ * - In the GitHub API calls (will fail with helpful errors)
83
+ * This allows flexibility while still catching errors early.
84
+ *
85
+ * @param configFile - Parsed config file (optional, already validated)
86
+ * @param cliFlags - CLI flags/options object (not validated here)
87
+ * @returns Merged configuration object
88
+ */
89
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
+ export function mergeConfig(configFile, cliFlags) {
91
+ // Start with config file as base (if provided - already validated by loadConfigFile)
92
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
+ const merged = configFile ? JSON.parse(JSON.stringify(configFile)) : {};
94
+ // Override with CLI flags (if provided)
95
+ // Top-level fields
96
+ if (cliFlags.environmentName !== undefined)
97
+ merged.environmentName = cliFlags.environmentName;
98
+ if (cliFlags.awsAccountId !== undefined)
99
+ merged.awsAccountId = cliFlags.awsAccountId;
100
+ if (cliFlags.awsRegion !== undefined)
101
+ merged.awsRegion = cliFlags.awsRegion;
102
+ if (cliFlags.customerRoleArn !== undefined)
103
+ merged.customerRoleArn = cliFlags.customerRoleArn;
104
+ if (cliFlags.terraformStateBucket !== undefined)
105
+ merged.terraformStateBucket = cliFlags.terraformStateBucket;
106
+ // Repository
107
+ if (cliFlags.repo !== undefined) {
108
+ const [owner, repo] = cliFlags.repo.split('/');
109
+ merged.repository = { owner, repo };
110
+ }
111
+ // Database
112
+ if (cliFlags.databaseName !== undefined || cliFlags.databaseUser !== undefined) {
113
+ merged.database = merged.database || {};
114
+ if (cliFlags.databaseName !== undefined)
115
+ merged.database.name = cliFlags.databaseName;
116
+ if (cliFlags.databaseUser !== undefined)
117
+ merged.database.user = cliFlags.databaseUser;
118
+ }
119
+ // Networking
120
+ const hasNetworkingFlags = cliFlags.enableVpcEndpoints !== undefined ||
121
+ cliFlags.useCustomNetworking !== undefined ||
122
+ cliFlags.vpcCidr !== undefined ||
123
+ cliFlags.publicSubnetCidrs !== undefined ||
124
+ cliFlags.privateSubnetCidrs !== undefined ||
125
+ cliFlags.azCount !== undefined ||
126
+ cliFlags.customVpcId !== undefined ||
127
+ cliFlags.customPublicSubnetIds !== undefined ||
128
+ cliFlags.customPrivateSubnetIds !== undefined;
129
+ if (hasNetworkingFlags) {
130
+ merged.networking = merged.networking || {};
131
+ if (cliFlags.enableVpcEndpoints !== undefined)
132
+ merged.networking.enableVpcEndpoints = cliFlags.enableVpcEndpoints;
133
+ if (cliFlags.useCustomNetworking !== undefined)
134
+ merged.networking.useCustomNetworking = cliFlags.useCustomNetworking;
135
+ if (cliFlags.vpcCidr !== undefined)
136
+ merged.networking.vpcCidr = cliFlags.vpcCidr;
137
+ if (cliFlags.publicSubnetCidrs !== undefined)
138
+ merged.networking.publicSubnetCidrs = cliFlags.publicSubnetCidrs;
139
+ if (cliFlags.privateSubnetCidrs !== undefined)
140
+ merged.networking.privateSubnetCidrs = cliFlags.privateSubnetCidrs;
141
+ if (cliFlags.azCount !== undefined)
142
+ merged.networking.azCount = cliFlags.azCount;
143
+ if (cliFlags.customVpcId !== undefined)
144
+ merged.networking.customVpcId = cliFlags.customVpcId;
145
+ if (cliFlags.customPublicSubnetIds !== undefined)
146
+ merged.networking.customPublicSubnetIds = cliFlags.customPublicSubnetIds;
147
+ if (cliFlags.customPrivateSubnetIds !== undefined)
148
+ merged.networking.customPrivateSubnetIds = cliFlags.customPrivateSubnetIds;
149
+ }
150
+ // Security - Security Groups
151
+ const hasSecurityGroupFlags = cliFlags.useCustomSecurityGroups !== undefined ||
152
+ cliFlags.sgWorkflowEngine !== undefined ||
153
+ cliFlags.sgAurora !== undefined ||
154
+ cliFlags.sgRdsProxy !== undefined ||
155
+ cliFlags.sgBffEcs !== undefined ||
156
+ cliFlags.sgBastion !== undefined ||
157
+ cliFlags.sgBffAlb !== undefined;
158
+ if (hasSecurityGroupFlags) {
159
+ merged.security = merged.security || {};
160
+ if (cliFlags.useCustomSecurityGroups !== undefined)
161
+ merged.security.useCustomSecurityGroups = cliFlags.useCustomSecurityGroups;
162
+ if (cliFlags.sgWorkflowEngine !== undefined || cliFlags.sgAurora !== undefined || cliFlags.sgRdsProxy !== undefined ||
163
+ cliFlags.sgBffEcs !== undefined || cliFlags.sgBastion !== undefined || cliFlags.sgBffAlb !== undefined) {
164
+ merged.security.customSecurityGroups = merged.security.customSecurityGroups || {};
165
+ if (cliFlags.sgWorkflowEngine !== undefined)
166
+ merged.security.customSecurityGroups.workflowEngine = cliFlags.sgWorkflowEngine;
167
+ if (cliFlags.sgAurora !== undefined)
168
+ merged.security.customSecurityGroups.aurora = cliFlags.sgAurora;
169
+ if (cliFlags.sgRdsProxy !== undefined)
170
+ merged.security.customSecurityGroups.rdsProxy = cliFlags.sgRdsProxy;
171
+ if (cliFlags.sgBffEcs !== undefined)
172
+ merged.security.customSecurityGroups.bffEcs = cliFlags.sgBffEcs;
173
+ if (cliFlags.sgBastion !== undefined)
174
+ merged.security.customSecurityGroups.bastion = cliFlags.sgBastion;
175
+ if (cliFlags.sgBffAlb !== undefined)
176
+ merged.security.customSecurityGroups.bffAlb = cliFlags.sgBffAlb;
177
+ }
178
+ }
179
+ // Security - IAM Roles
180
+ const hasIamRoleFlags = cliFlags.useCustomIamRoles !== undefined ||
181
+ cliFlags.iamWorkflowEngineExec !== undefined ||
182
+ cliFlags.iamWorkflowEngineTask !== undefined ||
183
+ cliFlags.iamBffEcsExec !== undefined ||
184
+ cliFlags.iamBffEcsTask !== undefined ||
185
+ cliFlags.iamRdsProxy !== undefined ||
186
+ cliFlags.iamStudioMemory !== undefined ||
187
+ cliFlags.iamStudioNotification !== undefined;
188
+ if (hasIamRoleFlags) {
189
+ merged.security = merged.security || {};
190
+ if (cliFlags.useCustomIamRoles !== undefined)
191
+ merged.security.useCustomIamPolicies = cliFlags.useCustomIamRoles;
192
+ if (cliFlags.iamWorkflowEngineExec !== undefined || cliFlags.iamWorkflowEngineTask !== undefined ||
193
+ cliFlags.iamBffEcsExec !== undefined || cliFlags.iamBffEcsTask !== undefined ||
194
+ cliFlags.iamRdsProxy !== undefined || cliFlags.iamStudioMemory !== undefined ||
195
+ cliFlags.iamStudioNotification !== undefined) {
196
+ merged.security.customIamRoles = merged.security.customIamRoles || {};
197
+ if (cliFlags.iamWorkflowEngineExec !== undefined)
198
+ merged.security.customIamRoles.workflowEngineExecutionRole = cliFlags.iamWorkflowEngineExec;
199
+ if (cliFlags.iamWorkflowEngineTask !== undefined)
200
+ merged.security.customIamRoles.workflowEngineTaskRole = cliFlags.iamWorkflowEngineTask;
201
+ if (cliFlags.iamBffEcsExec !== undefined)
202
+ merged.security.customIamRoles.bffEcsTaskExecutionRole = cliFlags.iamBffEcsExec;
203
+ if (cliFlags.iamBffEcsTask !== undefined)
204
+ merged.security.customIamRoles.bffEcsTaskRole = cliFlags.iamBffEcsTask;
205
+ if (cliFlags.iamRdsProxy !== undefined)
206
+ merged.security.customIamRoles.rdsProxyRole = cliFlags.iamRdsProxy;
207
+ if (cliFlags.iamStudioMemory !== undefined)
208
+ merged.security.customIamRoles.sembixStudioMemoryRole = cliFlags.iamStudioMemory;
209
+ if (cliFlags.iamStudioNotification !== undefined)
210
+ merged.security.customIamRoles.sembixStudioNotificationRole = cliFlags.iamStudioNotification;
211
+ }
212
+ }
213
+ // Security - Other
214
+ if (cliFlags.workflowRunsKeyAlias !== undefined) {
215
+ merged.security = merged.security || {};
216
+ merged.security.workflowRunsKeyAlias = cliFlags.workflowRunsKeyAlias;
217
+ }
218
+ // TLS
219
+ const hasTlsFlags = cliFlags.cloudfrontDomain !== undefined ||
220
+ cliFlags.cloudfrontCertArn !== undefined ||
221
+ cliFlags.bffAlbCertArn !== undefined ||
222
+ cliFlags.hostedZoneId !== undefined;
223
+ if (hasTlsFlags) {
224
+ merged.tls = merged.tls || {};
225
+ if (cliFlags.cloudfrontDomain !== undefined)
226
+ merged.tls.cloudfrontDomain = cliFlags.cloudfrontDomain;
227
+ if (cliFlags.cloudfrontCertArn !== undefined)
228
+ merged.tls.cloudfrontCertArn = cliFlags.cloudfrontCertArn;
229
+ if (cliFlags.bffAlbCertArn !== undefined)
230
+ merged.tls.bffAlbCertificateArn = cliFlags.bffAlbCertArn;
231
+ if (cliFlags.hostedZoneId !== undefined)
232
+ merged.tls.hostedZoneId = cliFlags.hostedZoneId;
233
+ }
234
+ // Features
235
+ const hasFeatureFlags = cliFlags.deployStudioMemory !== undefined ||
236
+ cliFlags.deployStudioNotifications !== undefined ||
237
+ cliFlags.enableBffWaf !== undefined;
238
+ if (hasFeatureFlags) {
239
+ merged.features = merged.features || {};
240
+ if (cliFlags.deployStudioMemory !== undefined)
241
+ merged.features.deploySembixStudioMemory = cliFlags.deployStudioMemory;
242
+ if (cliFlags.deployStudioNotifications !== undefined)
243
+ merged.features.deploySembixStudioNotifications = cliFlags.deployStudioNotifications;
244
+ if (cliFlags.enableBffWaf !== undefined)
245
+ merged.features.enableBffWaf = cliFlags.enableBffWaf;
246
+ }
247
+ // Frontend
248
+ const hasFrontendFlags = cliFlags.githubAppClientId !== undefined ||
249
+ cliFlags.githubAppName !== undefined ||
250
+ cliFlags.jiraClientId !== undefined;
251
+ if (hasFrontendFlags) {
252
+ merged.frontend = merged.frontend || {};
253
+ if (cliFlags.githubAppClientId !== undefined)
254
+ merged.frontend.githubAppClientId = cliFlags.githubAppClientId;
255
+ if (cliFlags.githubAppName !== undefined)
256
+ merged.frontend.githubAppName = cliFlags.githubAppName;
257
+ if (cliFlags.jiraClientId !== undefined)
258
+ merged.frontend.jiraClientId = cliFlags.jiraClientId;
259
+ }
260
+ // Hub Integration
261
+ const hasHubFlags = cliFlags.skipHub !== undefined ||
262
+ cliFlags.hubEngineExecutionRole !== undefined ||
263
+ cliFlags.hubConsumerRole !== undefined ||
264
+ cliFlags.hubAppconfigRole !== undefined ||
265
+ cliFlags.hubAppconfigAppId !== undefined ||
266
+ cliFlags.hubAppconfigEnvId !== undefined ||
267
+ cliFlags.hubAppconfigProfileId !== undefined;
268
+ if (hasHubFlags) {
269
+ merged.hub = merged.hub || {};
270
+ // Hub roles
271
+ if (cliFlags.hubEngineExecutionRole !== undefined || cliFlags.hubConsumerRole !== undefined) {
272
+ merged.hub.hubRoles = merged.hub.hubRoles || {};
273
+ if (cliFlags.hubEngineExecutionRole !== undefined)
274
+ merged.hub.hubRoles.engineExecutionRole = cliFlags.hubEngineExecutionRole;
275
+ if (cliFlags.hubConsumerRole !== undefined)
276
+ merged.hub.hubRoles.consumerRole = cliFlags.hubConsumerRole;
277
+ }
278
+ // AppConfig
279
+ if (cliFlags.hubAppconfigRole !== undefined || cliFlags.hubAppconfigAppId !== undefined ||
280
+ cliFlags.hubAppconfigEnvId !== undefined || cliFlags.hubAppconfigProfileId !== undefined) {
281
+ merged.hub.appConfig = merged.hub.appConfig || {};
282
+ if (cliFlags.hubAppconfigRole !== undefined)
283
+ merged.hub.appConfig.roleArn = cliFlags.hubAppconfigRole;
284
+ if (cliFlags.hubAppconfigAppId !== undefined)
285
+ merged.hub.appConfig.appId = cliFlags.hubAppconfigAppId;
286
+ if (cliFlags.hubAppconfigEnvId !== undefined)
287
+ merged.hub.appConfig.envId = cliFlags.hubAppconfigEnvId;
288
+ if (cliFlags.hubAppconfigProfileId !== undefined)
289
+ merged.hub.appConfig.profileId = cliFlags.hubAppconfigProfileId;
290
+ }
291
+ }
292
+ // Validate critical fields that were provided via CLI flags
293
+ validateMergedConfig(merged, cliFlags);
294
+ return merged;
295
+ }
296
+ /**
297
+ * Validate critical fields in merged config (especially those from CLI flags)
298
+ * Throws error with helpful message if validation fails
299
+ */
300
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
301
+ function validateMergedConfig(merged, cliFlags) {
302
+ const errors = [];
303
+ // Only validate fields that came from CLI flags (not config file, as that's already validated)
304
+ // Check if field exists in merged AND was provided via CLI flag
305
+ if (cliFlags.awsAccountId !== undefined && merged.awsAccountId) {
306
+ const result = awsAccountIdSchema.safeParse(merged.awsAccountId);
307
+ if (!result.success) {
308
+ errors.push(`--aws-account-id: ${result.error.errors[0].message}`);
309
+ }
310
+ }
311
+ if (cliFlags.customerRoleArn !== undefined && merged.customerRoleArn) {
312
+ const result = iamRoleArnSchema.safeParse(merged.customerRoleArn);
313
+ if (!result.success) {
314
+ errors.push(`--customer-role-arn: ${result.error.errors[0].message}`);
315
+ }
316
+ }
317
+ if (cliFlags.cloudfrontCertArn !== undefined && merged.tls?.cloudfrontCertArn) {
318
+ const result = acmCertArnSchema.safeParse(merged.tls.cloudfrontCertArn);
319
+ if (!result.success) {
320
+ errors.push(`--cloudfront-cert-arn: ${result.error.errors[0].message}`);
321
+ }
322
+ // Special check: CloudFront cert must be in us-east-1
323
+ if (result.success && !merged.tls.cloudfrontCertArn.includes('us-east-1')) {
324
+ errors.push(`--cloudfront-cert-arn: CloudFront certificate MUST be in us-east-1 region (CloudFront requirement)`);
325
+ }
326
+ }
327
+ if (cliFlags.bffAlbCertArn !== undefined && merged.tls?.bffAlbCertificateArn) {
328
+ const result = acmCertArnSchema.safeParse(merged.tls.bffAlbCertificateArn);
329
+ if (!result.success) {
330
+ errors.push(`--bff-alb-cert-arn: ${result.error.errors[0].message}`);
331
+ }
332
+ }
333
+ if (cliFlags.hostedZoneId !== undefined && merged.tls?.hostedZoneId) {
334
+ const result = route53ZoneIdSchema.safeParse(merged.tls.hostedZoneId);
335
+ if (!result.success) {
336
+ errors.push(`--hosted-zone-id: ${result.error.errors[0].message}`);
337
+ }
338
+ }
339
+ // Validate IAM roles from CLI flags
340
+ const iamRoleFlags = [
341
+ { flag: 'hubEngineExecutionRole', path: 'hub.hubRoles.engineExecutionRole', name: '--hub-engine-execution-role' },
342
+ { flag: 'hubConsumerRole', path: 'hub.hubRoles.consumerRole', name: '--hub-consumer-role' },
343
+ { flag: 'hubAppconfigRole', path: 'hub.appConfig.roleArn', name: '--hub-appconfig-role' },
344
+ ];
345
+ for (const { flag, path, name } of iamRoleFlags) {
346
+ if (cliFlags[flag] !== undefined) {
347
+ const value = path.split('.').reduce((obj, key) => obj?.[key], merged);
348
+ if (value) {
349
+ const result = iamRoleArnSchema.safeParse(value);
350
+ if (!result.success) {
351
+ errors.push(`${name}: ${result.error.errors[0].message}`);
352
+ }
353
+ }
354
+ }
355
+ }
356
+ // If any validation errors, throw with helpful message
357
+ if (errors.length > 0) {
358
+ console.log();
359
+ ui.error('CLI flag validation failed:');
360
+ console.log();
361
+ errors.forEach(err => {
362
+ console.log(ui.dim(' • ' + err));
363
+ });
364
+ console.log();
365
+ throw new Error('Invalid CLI flags provided. Please fix the errors above.');
366
+ }
367
+ }
368
+ /**
369
+ * Check if a config file path is provided in CLI options
370
+ * @param options - CLI options object
371
+ * @returns Config file path if provided, undefined otherwise
372
+ */
373
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
374
+ export function getConfigFilePath(options) {
375
+ return options.config || options.configFile;
376
+ }
377
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAgD,MAAM,qBAAqB,CAAC;AAErG,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,IAAI,CAAC;QACH,qDAAqD;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAExD,qBAAqB;QACrB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE3D,aAAa;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3C,0BAA0B;QAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,OAAO,GAAG,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM;aACP,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4CAA4C;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,0BAA0B,UAAU,EAAE,CAAC;aACjD,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC;aAClD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAgB;IAClD,EAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CAAC,UAAkC,EAAE,QAA6B;IAC3F,qFAAqF;IACrF,8DAA8D;IAC9D,MAAM,MAAM,GAAQ,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,wCAAwC;IACxC,mBAAmB;IACnB,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;QAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;IAC9F,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IACrF,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC5E,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;QAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;IAC9F,IAAI,QAAQ,CAAC,oBAAoB,KAAK,SAAS;QAAE,MAAM,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;IAE7G,aAAa;IACb,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,WAAW;IACX,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/E,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;QACtF,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;IACxF,CAAC;IAED,aAAa;IACb,MAAM,kBAAkB,GACtB,QAAQ,CAAC,kBAAkB,KAAK,SAAS;QACzC,QAAQ,CAAC,mBAAmB,KAAK,SAAS;QAC1C,QAAQ,CAAC,OAAO,KAAK,SAAS;QAC9B,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,kBAAkB,KAAK,SAAS;QACzC,QAAQ,CAAC,OAAO,KAAK,SAAS;QAC9B,QAAQ,CAAC,WAAW,KAAK,SAAS;QAClC,QAAQ,CAAC,qBAAqB,KAAK,SAAS;QAC5C,QAAQ,CAAC,sBAAsB,KAAK,SAAS,CAAC;IAEhD,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QAC5C,IAAI,QAAQ,CAAC,kBAAkB,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QAClH,IAAI,QAAQ,CAAC,mBAAmB,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QACrH,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjF,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QAC/G,IAAI,QAAQ,CAAC,kBAAkB,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QAClH,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjF,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC7F,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAC3H,IAAI,QAAQ,CAAC,sBAAsB,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,CAAC,sBAAsB,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAChI,CAAC;IAED,6BAA6B;IAC7B,MAAM,qBAAqB,GACzB,QAAQ,CAAC,uBAAuB,KAAK,SAAS;QAC9C,QAAQ,CAAC,gBAAgB,KAAK,SAAS;QACvC,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAC/B,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAC/B,QAAQ,CAAC,SAAS,KAAK,SAAS;QAChC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC;IAElC,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,uBAAuB,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,uBAAuB,GAAG,QAAQ,CAAC,uBAAuB,CAAC;QAE/H,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;YAC/G,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3G,MAAM,CAAC,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC;YAClF,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,cAAc,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YAC7H,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACrG,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;YAC3G,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACrG,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;YACxG,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACvG,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,eAAe,GACnB,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,qBAAqB,KAAK,SAAS;QAC5C,QAAQ,CAAC,qBAAqB,KAAK,SAAS;QAC5C,QAAQ,CAAC,aAAa,KAAK,SAAS;QACpC,QAAQ,CAAC,aAAa,KAAK,SAAS;QACpC,QAAQ,CAAC,WAAW,KAAK,SAAS;QAClC,QAAQ,CAAC,eAAe,KAAK,SAAS;QACtC,QAAQ,CAAC,qBAAqB,KAAK,SAAS,CAAC;IAE/C,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QAEhH,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS;YAC5F,QAAQ,CAAC,aAAa,KAAK,SAAS,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;YAC5E,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;YAC5E,QAAQ,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;YACtE,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,2BAA2B,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YAC9I,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YACzI,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,GAAG,QAAQ,CAAC,aAAa,CAAC;YAC1H,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC;YACjH,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC3G,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC7H,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,4BAA4B,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QACjJ,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,QAAQ,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;IACvE,CAAC;IAED,MAAM;IACN,MAAM,WAAW,GACf,QAAQ,CAAC,gBAAgB,KAAK,SAAS;QACvC,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,aAAa,KAAK,SAAS;QACpC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC;IAEtC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QACrG,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QACxG,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,aAAa,CAAC;QACnG,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3F,CAAC;IAED,WAAW;IACX,MAAM,eAAe,GACnB,QAAQ,CAAC,kBAAkB,KAAK,SAAS;QACzC,QAAQ,CAAC,yBAAyB,KAAK,SAAS;QAChD,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC;IAEtC,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,kBAAkB,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,wBAAwB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QACtH,IAAI,QAAQ,CAAC,yBAAyB,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,+BAA+B,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QAC3I,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAChG,CAAC;IAED,WAAW;IACX,MAAM,gBAAgB,GACpB,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,aAAa,KAAK,SAAS;QACpC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC;IAEtC,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QAC7G,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QACjG,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAChG,CAAC;IAED,kBAAkB;IAClB,MAAM,WAAW,GACf,QAAQ,CAAC,OAAO,KAAK,SAAS;QAC9B,QAAQ,CAAC,sBAAsB,KAAK,SAAS;QAC7C,QAAQ,CAAC,eAAe,KAAK,SAAS;QACtC,QAAQ,CAAC,gBAAgB,KAAK,SAAS;QACvC,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,iBAAiB,KAAK,SAAS;QACxC,QAAQ,CAAC,qBAAqB,KAAK,SAAS,CAAC;IAE/C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QAE9B,YAAY;QACZ,IAAI,QAAQ,CAAC,sBAAsB,KAAK,SAAS,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;YAChD,IAAI,QAAQ,CAAC,sBAAsB,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,GAAG,QAAQ,CAAC,sBAAsB,CAAC;YAC7H,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC;QAC1G,CAAC;QAED,YAAY;QACZ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;YACnF,QAAQ,CAAC,iBAAiB,KAAK,SAAS,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7F,MAAM,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;YAClD,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YACtG,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YACtG,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YACtG,IAAI,QAAQ,CAAC,qBAAqB,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QACpH,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,8DAA8D;AAC9D,SAAS,oBAAoB,CAAC,MAAW,EAAE,QAA6B;IACtE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,+FAA+F;IAC/F,gEAAgE;IAEhE,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC;QAC9E,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,sDAAsD;QACtD,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,oGAAoG,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,CAAC;QAC7E,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,YAAY,GAAG;QACnB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,6BAA6B,EAAE;QACjH,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,qBAAqB,EAAE;QAC3F,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,sBAAsB,EAAE;KAC1F,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { GitHubEnvironment, GitHubRepository } from '../types.js';
2
+ export declare class GitHubClient {
3
+ private octokit;
4
+ constructor(token?: string);
5
+ /**
6
+ * List repositories for the authenticated user or organization
7
+ */
8
+ listRepositories(org?: string): Promise<GitHubRepository[]>;
9
+ /**
10
+ * Get repository information
11
+ */
12
+ getRepository(owner: string, repo: string): Promise<GitHubRepository>;
13
+ /**
14
+ * List environments for a repository
15
+ */
16
+ listEnvironments(owner: string, repo: string): Promise<GitHubEnvironment[]>;
17
+ /**
18
+ * Create a new GitHub environment
19
+ */
20
+ createEnvironment(owner: string, repo: string, environmentName: string): Promise<void>;
21
+ /**
22
+ * Check if an environment exists
23
+ */
24
+ environmentExists(owner: string, repo: string, environmentName: string): Promise<boolean>;
25
+ /**
26
+ * Create or update environment variables
27
+ */
28
+ createEnvironmentVariables(owner: string, repo: string, environmentName: string, variables: Record<string, string>): Promise<void>;
29
+ /**
30
+ * Create or update environment secrets
31
+ */
32
+ createEnvironmentSecrets(owner: string, repo: string, environmentName: string, secrets: Record<string, string>): Promise<void>;
33
+ /**
34
+ * Encrypt a secret using libsodium (via dynamic import)
35
+ */
36
+ private encryptSecret;
37
+ }
38
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/utils/github.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;gBAEb,KAAK,CAAC,EAAE,MAAM;IAM1B;;OAEG;IACG,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA4BjE;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiB3E;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAiBjF;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5F;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB/F;;OAEG;IACG,0BAA0B,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAkBhB;;OAEG;IACG,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC;IA6BhB;;OAEG;YACW,aAAa;CA0B5B"}
@@ -0,0 +1,188 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ import { config } from '../config.js';
3
+ export class GitHubClient {
4
+ octokit;
5
+ constructor(token) {
6
+ this.octokit = new Octokit({
7
+ auth: token || config.githubToken,
8
+ });
9
+ }
10
+ /**
11
+ * List repositories for the authenticated user or organization
12
+ */
13
+ async listRepositories(org) {
14
+ try {
15
+ let repos;
16
+ if (org) {
17
+ const response = await this.octokit.repos.listForOrg({
18
+ org,
19
+ type: 'all',
20
+ per_page: 100,
21
+ });
22
+ repos = response.data;
23
+ }
24
+ else {
25
+ const response = await this.octokit.repos.listForAuthenticatedUser({
26
+ per_page: 100,
27
+ });
28
+ repos = response.data;
29
+ }
30
+ return repos.map(repo => ({
31
+ owner: repo.owner.login,
32
+ repo: repo.name,
33
+ full_name: repo.full_name,
34
+ }));
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Failed to list repositories: ${error.message}`);
38
+ }
39
+ }
40
+ /**
41
+ * Get repository information
42
+ */
43
+ async getRepository(owner, repo) {
44
+ try {
45
+ const response = await this.octokit.repos.get({
46
+ owner,
47
+ repo,
48
+ });
49
+ return {
50
+ owner: response.data.owner.login,
51
+ repo: response.data.name,
52
+ full_name: response.data.full_name,
53
+ };
54
+ }
55
+ catch (error) {
56
+ throw new Error(`Failed to get repository: ${error.message}`);
57
+ }
58
+ }
59
+ /**
60
+ * List environments for a repository
61
+ */
62
+ async listEnvironments(owner, repo) {
63
+ try {
64
+ const response = await this.octokit.repos.getAllEnvironments({
65
+ owner,
66
+ repo,
67
+ });
68
+ return (response.data.environments || []).map(env => ({
69
+ name: env.name,
70
+ id: env.id,
71
+ url: env.html_url || `https://github.com/${owner}/${repo}/settings/environments/${env.name}`,
72
+ }));
73
+ }
74
+ catch (error) {
75
+ throw new Error(`Failed to list environments: ${error.message}`);
76
+ }
77
+ }
78
+ /**
79
+ * Create a new GitHub environment
80
+ */
81
+ async createEnvironment(owner, repo, environmentName) {
82
+ try {
83
+ await this.octokit.repos.createOrUpdateEnvironment({
84
+ owner,
85
+ repo,
86
+ environment_name: environmentName,
87
+ });
88
+ }
89
+ catch (error) {
90
+ throw new Error(`Failed to create environment: ${error.message}`);
91
+ }
92
+ }
93
+ /**
94
+ * Check if an environment exists
95
+ */
96
+ async environmentExists(owner, repo, environmentName) {
97
+ try {
98
+ await this.octokit.repos.getEnvironment({
99
+ owner,
100
+ repo,
101
+ environment_name: environmentName,
102
+ });
103
+ return true;
104
+ }
105
+ catch (error) {
106
+ if (error.status === 404) {
107
+ return false;
108
+ }
109
+ throw new Error(`Failed to check environment: ${error.message}`);
110
+ }
111
+ }
112
+ /**
113
+ * Create or update environment variables
114
+ */
115
+ async createEnvironmentVariables(owner, repo, environmentName, variables) {
116
+ try {
117
+ for (const [name, value] of Object.entries(variables)) {
118
+ if (!value)
119
+ continue; // Skip empty values
120
+ await this.octokit.actions.createEnvironmentVariable({
121
+ owner,
122
+ repo,
123
+ environment_name: environmentName,
124
+ name,
125
+ value,
126
+ });
127
+ }
128
+ }
129
+ catch (error) {
130
+ throw new Error(`Failed to create environment variables: ${error.message}`);
131
+ }
132
+ }
133
+ /**
134
+ * Create or update environment secrets
135
+ */
136
+ async createEnvironmentSecrets(owner, repo, environmentName, secrets) {
137
+ try {
138
+ // Get environment public key for encryption
139
+ const { data: envPublicKey } = await this.octokit.actions.getEnvironmentPublicKey({
140
+ owner,
141
+ repo,
142
+ environment_name: environmentName,
143
+ });
144
+ for (const [name, value] of Object.entries(secrets)) {
145
+ if (!value)
146
+ continue; // Skip empty values
147
+ // Encrypt the secret value
148
+ const encryptedValue = await this.encryptSecret(value, envPublicKey.key);
149
+ await this.octokit.actions.createOrUpdateEnvironmentSecret({
150
+ owner,
151
+ repo,
152
+ environment_name: environmentName,
153
+ secret_name: name,
154
+ encrypted_value: encryptedValue,
155
+ key_id: envPublicKey.key_id,
156
+ });
157
+ }
158
+ }
159
+ catch (error) {
160
+ throw new Error(`Failed to create environment secrets: ${error.message}`);
161
+ }
162
+ }
163
+ /**
164
+ * Encrypt a secret using libsodium (via dynamic import)
165
+ */
166
+ async encryptSecret(secret, publicKey) {
167
+ try {
168
+ // Import libsodium dynamically
169
+ const sodiumModule = await import('libsodium-wrappers');
170
+ // Handle both default export and direct export patterns
171
+ const sodium = sodiumModule.default || sodiumModule;
172
+ // Wait for the library to be ready
173
+ await sodium.ready;
174
+ // Convert the public key from base64
175
+ const binkey = sodium.from_base64(publicKey, sodium.base64_variants.ORIGINAL);
176
+ // Convert the secret to Uint8Array
177
+ const binsec = sodium.from_string(secret);
178
+ // Encrypt the secret using sealed box
179
+ const encBytes = sodium.crypto_box_seal(binsec, binkey);
180
+ // Convert to base64
181
+ return sodium.to_base64(encBytes, sodium.base64_variants.ORIGINAL);
182
+ }
183
+ catch (error) {
184
+ throw new Error(`Failed to encrypt secret: ${error.message}`);
185
+ }
186
+ }
187
+ }
188
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/utils/github.ts"],"names":[],"mappings":"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"}