@sembix/cli 1.8.1 → 1.8.3

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.
@@ -0,0 +1,510 @@
1
+ const DEFAULT_COMMANDS = ['create', 'update'];
2
+ export const CONFIG_FIELDS = [
3
+ // ── Basic configuration ──────────────────────────────────────
4
+ {
5
+ flag: '--aws-account-id <id>',
6
+ description: 'AWS Account ID (12 digits)',
7
+ label: 'AWS Account',
8
+ configPath: 'awsAccountId',
9
+ type: 'string',
10
+ },
11
+ {
12
+ flag: '--aws-region <region>',
13
+ description: 'AWS Region (e.g., us-east-1)',
14
+ label: 'AWS Region',
15
+ configPath: 'awsRegion',
16
+ type: 'string',
17
+ },
18
+ {
19
+ flag: '--customer-role-arn <arn>',
20
+ description: 'GitHub Actions IAM role ARN',
21
+ label: 'Customer Role ARN',
22
+ configPath: 'customerRoleArn',
23
+ type: 'string',
24
+ },
25
+ {
26
+ flag: '--terraform-state-bucket <bucket>',
27
+ description: 'S3 bucket for Terraform state',
28
+ label: 'Terraform State Bucket',
29
+ configPath: 'terraformStateBucket',
30
+ type: 'string',
31
+ },
32
+ // ── Database ─────────────────────────────────────────────────
33
+ {
34
+ flag: '--database-name <name>',
35
+ description: 'PostgreSQL database name',
36
+ label: 'Database Name',
37
+ configPath: 'database.name',
38
+ type: 'string',
39
+ },
40
+ {
41
+ flag: '--database-user <user>',
42
+ description: 'PostgreSQL database user',
43
+ label: 'Database User',
44
+ configPath: 'database.user',
45
+ type: 'string',
46
+ },
47
+ // ── Networking ───────────────────────────────────────────────
48
+ {
49
+ flag: '--enable-vpc-endpoints <boolean>',
50
+ description: 'Enable VPC endpoints (true/false)',
51
+ label: 'VPC Endpoints',
52
+ configPath: 'networking.enableVpcEndpoints',
53
+ type: 'boolean',
54
+ },
55
+ {
56
+ flag: '--use-custom-networking <boolean>',
57
+ description: 'Use existing VPC (true/false)',
58
+ label: 'Custom Networking',
59
+ configPath: 'networking.useCustomNetworking',
60
+ type: 'boolean',
61
+ },
62
+ {
63
+ flag: '--vpc-cidr <cidr>',
64
+ description: 'VPC CIDR block (e.g., 10.0.0.0/16)',
65
+ label: 'VPC CIDR',
66
+ configPath: 'networking.vpcCidr',
67
+ type: 'string',
68
+ },
69
+ {
70
+ flag: '--public-subnet-cidrs <json>',
71
+ description: 'Public subnet CIDRs (JSON array)',
72
+ label: 'Public Subnet CIDRs',
73
+ configPath: 'networking.publicSubnetCidrs',
74
+ type: 'string',
75
+ },
76
+ {
77
+ flag: '--private-subnet-cidrs <json>',
78
+ description: 'Private subnet CIDRs (JSON array)',
79
+ label: 'Private Subnet CIDRs',
80
+ configPath: 'networking.privateSubnetCidrs',
81
+ type: 'string',
82
+ },
83
+ {
84
+ flag: '--az-count <count>',
85
+ description: 'Number of availability zones (2 or 3)',
86
+ label: 'AZ Count',
87
+ configPath: 'networking.azCount',
88
+ type: 'string',
89
+ },
90
+ {
91
+ flag: '--custom-vpc-id <id>',
92
+ description: 'Existing VPC ID',
93
+ label: 'Custom VPC ID',
94
+ configPath: 'networking.customVpcId',
95
+ type: 'string',
96
+ },
97
+ {
98
+ flag: '--custom-public-subnet-ids <ids>',
99
+ description: 'Existing public subnet IDs (comma-separated)',
100
+ label: 'Custom Public Subnet IDs',
101
+ configPath: 'networking.customPublicSubnetIds',
102
+ type: 'string',
103
+ },
104
+ {
105
+ flag: '--custom-private-subnet-ids <ids>',
106
+ description: 'Existing private subnet IDs (comma-separated)',
107
+ label: 'Custom Private Subnet IDs',
108
+ configPath: 'networking.customPrivateSubnetIds',
109
+ type: 'string',
110
+ },
111
+ // ── Security – KMS ───────────────────────────────────────────
112
+ {
113
+ flag: '--workflow-runs-key-alias <alias>',
114
+ description: 'KMS key alias for workflow runs',
115
+ label: 'Workflow Runs Key Alias',
116
+ configPath: 'security.workflowRunsKeyAlias',
117
+ type: 'string',
118
+ },
119
+ // ── Security – Security Groups ───────────────────────────────
120
+ {
121
+ flag: '--use-custom-security-groups <boolean>',
122
+ description: 'Use custom security groups (true/false)',
123
+ label: 'Custom Security Groups',
124
+ configPath: 'security.useCustomSecurityGroups',
125
+ type: 'boolean',
126
+ },
127
+ {
128
+ flag: '--sg-workflow-engine <id>',
129
+ description: 'Workflow Engine security group ID',
130
+ label: 'SG Workflow Engine',
131
+ configPath: 'security.customSecurityGroups.workflowEngine',
132
+ type: 'string',
133
+ },
134
+ {
135
+ flag: '--sg-aurora <id>',
136
+ description: 'Aurora database security group ID',
137
+ label: 'SG Aurora',
138
+ configPath: 'security.customSecurityGroups.aurora',
139
+ type: 'string',
140
+ },
141
+ {
142
+ flag: '--sg-rds-proxy <id>',
143
+ description: 'RDS Proxy security group ID',
144
+ label: 'SG RDS Proxy',
145
+ configPath: 'security.customSecurityGroups.rdsProxy',
146
+ type: 'string',
147
+ },
148
+ {
149
+ flag: '--sg-bff-ecs <id>',
150
+ description: 'BFF ECS service security group ID',
151
+ label: 'SG BFF ECS',
152
+ configPath: 'security.customSecurityGroups.bffEcs',
153
+ type: 'string',
154
+ },
155
+ {
156
+ flag: '--sg-bff-alb <id>',
157
+ description: 'BFF ALB security group ID',
158
+ label: 'SG BFF ALB',
159
+ configPath: 'security.customSecurityGroups.bffAlb',
160
+ type: 'string',
161
+ },
162
+ {
163
+ flag: '--sg-semantic-event-engine <id>',
164
+ description: 'Semantic Event Engine security group ID',
165
+ label: 'SG Semantic Event Engine',
166
+ configPath: 'security.customSecurityGroups.semanticEventEngine',
167
+ type: 'string',
168
+ },
169
+ {
170
+ flag: '--sg-workspace-runtime <id>',
171
+ description: 'Workspace Runtime security group ID',
172
+ label: 'SG Workspace Runtime',
173
+ configPath: 'security.customSecurityGroups.workspaceRuntime',
174
+ type: 'string',
175
+ },
176
+ {
177
+ flag: '--sg-workspace-runtime-efs <id>',
178
+ description: 'Workspace Runtime EFS security group ID',
179
+ label: 'SG Workspace Runtime EFS',
180
+ configPath: 'security.customSecurityGroups.workspaceRuntimeEfs',
181
+ type: 'string',
182
+ },
183
+ // ── Security – IAM Roles ─────────────────────────────────────
184
+ {
185
+ flag: '--use-custom-iam-roles <boolean>',
186
+ description: 'Use custom IAM roles (true/false)',
187
+ label: 'Custom IAM Roles',
188
+ configPath: 'security.useCustomIamPolicies',
189
+ type: 'boolean',
190
+ },
191
+ {
192
+ flag: '--iam-workflow-engine-exec <arn>',
193
+ description: 'Workflow Engine execution role ARN',
194
+ label: 'IAM Workflow Engine Exec',
195
+ configPath: 'security.customIamRoles.workflowEngineExecutionRole',
196
+ type: 'string',
197
+ },
198
+ {
199
+ flag: '--iam-workflow-engine-task <arn>',
200
+ description: 'Workflow Engine task role ARN',
201
+ label: 'IAM Workflow Engine Task',
202
+ configPath: 'security.customIamRoles.workflowEngineTaskRole',
203
+ type: 'string',
204
+ },
205
+ {
206
+ flag: '--iam-bff-ecs-exec <arn>',
207
+ description: 'BFF ECS task execution role ARN',
208
+ label: 'IAM BFF ECS Exec',
209
+ configPath: 'security.customIamRoles.bffEcsTaskExecutionRole',
210
+ type: 'string',
211
+ },
212
+ {
213
+ flag: '--iam-bff-ecs-task <arn>',
214
+ description: 'BFF ECS task role ARN',
215
+ label: 'IAM BFF ECS Task',
216
+ configPath: 'security.customIamRoles.bffEcsTaskRole',
217
+ type: 'string',
218
+ },
219
+ {
220
+ flag: '--iam-semantic-event-engine-exec <arn>',
221
+ description: 'Semantic Event Engine execution role ARN',
222
+ label: 'IAM Semantic Event Engine Exec',
223
+ configPath: 'security.customIamRoles.semanticEventEngineExecutionRole',
224
+ type: 'string',
225
+ },
226
+ {
227
+ flag: '--iam-semantic-event-engine-task <arn>',
228
+ description: 'Semantic Event Engine task role ARN',
229
+ label: 'IAM Semantic Event Engine Task',
230
+ configPath: 'security.customIamRoles.semanticEventEngineTaskRole',
231
+ type: 'string',
232
+ },
233
+ {
234
+ flag: '--iam-rds-proxy <arn>',
235
+ description: 'RDS Proxy role ARN',
236
+ label: 'IAM RDS Proxy',
237
+ configPath: 'security.customIamRoles.rdsProxyRole',
238
+ type: 'string',
239
+ },
240
+ {
241
+ flag: '--iam-studio-notification <arn>',
242
+ description: 'Studio Notification role ARN',
243
+ label: 'IAM Studio Notification',
244
+ configPath: 'security.customIamRoles.sembixStudioNotificationRole',
245
+ type: 'string',
246
+ },
247
+ {
248
+ flag: '--iam-workspace-runtime-exec <arn>',
249
+ description: 'Workspace Runtime execution role ARN',
250
+ label: 'IAM Workspace Runtime Exec',
251
+ configPath: 'security.customIamRoles.workspaceRuntimeExecutionRole',
252
+ type: 'string',
253
+ },
254
+ {
255
+ flag: '--iam-workspace-runtime-task <arn>',
256
+ description: 'Workspace Runtime task role ARN',
257
+ label: 'IAM Workspace Runtime Task',
258
+ configPath: 'security.customIamRoles.workspaceRuntimeTaskRole',
259
+ type: 'string',
260
+ },
261
+ // ── TLS / DNS ────────────────────────────────────────────────
262
+ {
263
+ flag: '--certificate-arn <arn>',
264
+ description: 'Primary ACM certificate ARN (wildcard, used for all TLS components)',
265
+ label: 'Primary Certificate',
266
+ configPath: 'tls.certificateArn',
267
+ type: 'string',
268
+ },
269
+ {
270
+ flag: '--cloudfront-domain <domain>',
271
+ description: 'CloudFront custom domain',
272
+ label: 'CloudFront Domain',
273
+ configPath: 'tls.cloudfrontDomain',
274
+ type: 'string',
275
+ },
276
+ {
277
+ flag: '--cloudfront-cert-arn <arn>',
278
+ description: 'CloudFront SSL certificate ARN (must be in us-east-1, overrides primary)',
279
+ label: 'CloudFront Certificate',
280
+ configPath: 'tls.cloudfrontCertArn',
281
+ type: 'string',
282
+ },
283
+ {
284
+ flag: '--bff-alb-cert-arn <arn>',
285
+ description: 'BFF public ALB SSL certificate ARN (overrides primary)',
286
+ label: 'Public ALB Certificate',
287
+ configPath: 'tls.bffAlbCertificateArn',
288
+ type: 'string',
289
+ },
290
+ {
291
+ flag: '--bff-internal-alb-cert-arn <arn>',
292
+ description: 'BFF internal ALB SSL certificate ARN (overrides primary)',
293
+ label: 'Internal ALB Certificate',
294
+ configPath: 'tls.bffInternalAlbCertificateArn',
295
+ type: 'string',
296
+ },
297
+ {
298
+ flag: '--hosted-zone-id <id>',
299
+ description: 'Route53 hosted zone ID',
300
+ label: 'Hosted Zone',
301
+ configPath: 'tls.hostedZoneId',
302
+ type: 'string',
303
+ },
304
+ // ── Features ─────────────────────────────────────────────────
305
+ {
306
+ flag: '--deploy-studio-notifications <boolean>',
307
+ description: 'Deploy Studio Notifications service (true/false)',
308
+ label: 'Notifications',
309
+ configPath: 'features.deploySembixStudioNotifications',
310
+ type: 'boolean',
311
+ },
312
+ {
313
+ flag: '--enable-bff-waf <boolean>',
314
+ description: 'Enable WAF for BFF (true/false)',
315
+ label: 'WAF',
316
+ configPath: 'features.enableBffWaf',
317
+ type: 'boolean',
318
+ },
319
+ // ── Frontend ─────────────────────────────────────────────────
320
+ {
321
+ flag: '--github-app-client-id <id>',
322
+ description: 'GitHub App OAuth client ID',
323
+ label: 'GitHub App Client ID',
324
+ configPath: 'frontend.githubAppClientId',
325
+ type: 'string',
326
+ },
327
+ {
328
+ flag: '--github-app-name <name>',
329
+ description: 'GitHub App name',
330
+ label: 'GitHub App Name',
331
+ configPath: 'frontend.githubAppName',
332
+ type: 'string',
333
+ },
334
+ {
335
+ flag: '--jira-client-id <id>',
336
+ description: 'Jira OAuth client ID',
337
+ label: 'Jira Client ID',
338
+ configPath: 'frontend.jiraClientId',
339
+ type: 'string',
340
+ },
341
+ // ── Hub integration ──────────────────────────────────────────
342
+ {
343
+ flag: '--hub-engine-execution-role <arn>',
344
+ description: 'Hub Engine Execution Role ARN',
345
+ label: 'Hub Engine Execution Role',
346
+ configPath: 'hub.hubRoles.engineExecutionRole',
347
+ type: 'string',
348
+ commands: ['create', 'update', 'add-hub'],
349
+ },
350
+ {
351
+ flag: '--hub-consumer-role <arn>',
352
+ description: 'Hub Consumer Role ARN',
353
+ label: 'Hub Consumer Role',
354
+ configPath: 'hub.hubRoles.consumerRole',
355
+ type: 'string',
356
+ commands: ['create', 'update', 'add-hub'],
357
+ },
358
+ {
359
+ flag: '--hub-appconfig-role <arn>',
360
+ description: 'Hub AppConfig Role ARN',
361
+ label: 'Hub AppConfig Role',
362
+ configPath: 'hub.appConfig.roleArn',
363
+ type: 'string',
364
+ commands: ['create', 'update', 'add-hub'],
365
+ },
366
+ {
367
+ flag: '--hub-appconfig-app-id <id>',
368
+ description: 'Hub AppConfig Application ID',
369
+ label: 'Hub AppConfig App ID',
370
+ configPath: 'hub.appConfig.appId',
371
+ type: 'string',
372
+ commands: ['create', 'update', 'add-hub'],
373
+ },
374
+ {
375
+ flag: '--hub-appconfig-env-id <id>',
376
+ description: 'Hub AppConfig Environment ID',
377
+ label: 'Hub AppConfig Env ID',
378
+ configPath: 'hub.appConfig.envId',
379
+ type: 'string',
380
+ commands: ['create', 'update', 'add-hub'],
381
+ },
382
+ {
383
+ flag: '--hub-appconfig-profile-id <id>',
384
+ description: 'Hub AppConfig Profile ID',
385
+ label: 'Hub AppConfig Profile ID',
386
+ configPath: 'hub.appConfig.profileId',
387
+ type: 'string',
388
+ commands: ['create', 'update', 'add-hub'],
389
+ },
390
+ // ── Customer Portal ──────────────────────────────────────────
391
+ {
392
+ flag: '--customer-portal-cloudfront-domain <domain>',
393
+ description: 'Customer Portal CloudFront domain',
394
+ label: 'Customer Portal Domain',
395
+ configPath: 'customerPortal.cloudfrontDomain',
396
+ type: 'string',
397
+ commands: ['update', 'add-customer-portal'],
398
+ },
399
+ {
400
+ flag: '--customer-portal-cloudfront-cert-arn <arn>',
401
+ description: 'Customer Portal ACM certificate ARN (us-east-1)',
402
+ label: 'Customer Portal Certificate',
403
+ configPath: 'customerPortal.cloudfrontCertArn',
404
+ type: 'string',
405
+ commands: ['update', 'add-customer-portal'],
406
+ },
407
+ {
408
+ flag: '--customer-portal-hosted-zone-id <id>',
409
+ description: 'Customer Portal Route53 hosted zone ID',
410
+ label: 'Customer Portal Hosted Zone',
411
+ configPath: 'customerPortal.hostedZoneId',
412
+ type: 'string',
413
+ commands: ['update', 'add-customer-portal'],
414
+ },
415
+ {
416
+ flag: '--customer-portal-data-bucket-name <name>',
417
+ description: 'Customer Portal S3 bucket name',
418
+ label: 'Customer Portal Data Bucket',
419
+ configPath: 'customerPortal.dataBucketName',
420
+ type: 'string',
421
+ commands: ['update', 'add-customer-portal'],
422
+ },
423
+ {
424
+ flag: '--customer-portal-central-hub-role-arn <arn>',
425
+ description: 'Customer Portal Central Hub Role ARN',
426
+ label: 'Central Hub Role ARN',
427
+ configPath: 'customerPortal.centralHubRoleArn',
428
+ type: 'string',
429
+ commands: ['update', 'add-customer-portal'],
430
+ },
431
+ {
432
+ flag: '--customer-portal-cognito-password-min-length <length>',
433
+ description: 'Customer Portal Cognito password min length',
434
+ label: 'Cognito Password Min Length',
435
+ configPath: 'customerPortal.cognitoPasswordMinLength',
436
+ type: 'number',
437
+ commands: ['update', 'add-customer-portal'],
438
+ },
439
+ {
440
+ flag: '--customer-portal-log-level <level>',
441
+ description: 'Customer Portal log level (debug, info, warn, error)',
442
+ label: 'Customer Portal Log Level',
443
+ configPath: 'customerPortal.logLevel',
444
+ type: 'string',
445
+ commands: ['update', 'add-customer-portal'],
446
+ },
447
+ ];
448
+ // ── Private helpers ──────────────────────────────────────────────
449
+ function flagToKey(flag) {
450
+ const name = flag
451
+ .replace(/^--/, '')
452
+ .replace(/ <.*>$/, '');
453
+ return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
454
+ }
455
+ function setNestedValue(obj, path, value) {
456
+ const parts = path.split('.');
457
+ let current = obj;
458
+ for (let i = 0; i < parts.length - 1; i++) {
459
+ const key = parts[i];
460
+ if (current[key] === undefined || current[key] === null || typeof current[key] !== 'object') {
461
+ current[key] = {};
462
+ }
463
+ current = current[key];
464
+ }
465
+ current[parts[parts.length - 1]] = value;
466
+ }
467
+ function parseBooleanArg(val) {
468
+ return val === 'true';
469
+ }
470
+ // ── Public API ───────────────────────────────────────────────────
471
+ export function registerConfigOptions(command, commandName) {
472
+ for (const field of CONFIG_FIELDS) {
473
+ const commands = field.commands ?? DEFAULT_COMMANDS;
474
+ if (!commands.includes(commandName))
475
+ continue;
476
+ if (field.type === 'boolean') {
477
+ command.option(field.flag, field.description, parseBooleanArg);
478
+ }
479
+ else if (field.type === 'number') {
480
+ command.option(field.flag, field.description, parseInt);
481
+ }
482
+ else {
483
+ command.option(field.flag, field.description);
484
+ }
485
+ }
486
+ return command;
487
+ }
488
+ export function mergeConfigFields(merged, cliFlags) {
489
+ for (const field of CONFIG_FIELDS) {
490
+ const key = flagToKey(field.flag);
491
+ const value = cliFlags[key];
492
+ if (value === undefined)
493
+ continue;
494
+ setNestedValue(merged, field.configPath, value);
495
+ }
496
+ }
497
+ export function buildLabelMap() {
498
+ const map = {};
499
+ for (const field of CONFIG_FIELDS) {
500
+ const leafKey = field.configPath.split('.').pop();
501
+ map[leafKey] = field.label;
502
+ }
503
+ return map;
504
+ }
505
+ export function formatLabel(key) {
506
+ return key
507
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
508
+ .replace(/^./, c => c.toUpperCase());
509
+ }
510
+ //# sourceMappingURL=config-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-fields.js","sourceRoot":"","sources":["../src/config-fields.ts"],"names":[],"mappings":"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"}