@factiii/stack 0.1.34 → 0.1.35

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 (102) hide show
  1. package/README.md +441 -441
  2. package/bin/stack +46 -0
  3. package/dist/cli/fix.js +10 -10
  4. package/dist/cli/fix.js.map +1 -1
  5. package/dist/cli/init.d.ts.map +1 -1
  6. package/dist/cli/init.js +20 -7
  7. package/dist/cli/init.js.map +1 -1
  8. package/dist/cli/scan.d.ts.map +1 -1
  9. package/dist/cli/scan.js +14 -22
  10. package/dist/cli/scan.js.map +1 -1
  11. package/dist/generators/generate-stack-yml.d.ts +1 -1
  12. package/dist/generators/generate-stack-yml.d.ts.map +1 -1
  13. package/dist/generators/generate-stack-yml.js +96 -69
  14. package/dist/generators/generate-stack-yml.js.map +1 -1
  15. package/dist/plugins/addons/openclaw/index.d.ts +45 -0
  16. package/dist/plugins/addons/openclaw/index.d.ts.map +1 -0
  17. package/dist/plugins/addons/openclaw/index.js +107 -0
  18. package/dist/plugins/addons/openclaw/index.js.map +1 -0
  19. package/dist/plugins/addons/openclaw/scanfix/setup.d.ts +19 -0
  20. package/dist/plugins/addons/openclaw/scanfix/setup.d.ts.map +1 -0
  21. package/dist/plugins/addons/openclaw/scanfix/setup.js +441 -0
  22. package/dist/plugins/addons/openclaw/scanfix/setup.js.map +1 -0
  23. package/dist/plugins/index.d.ts.map +1 -1
  24. package/dist/plugins/index.js +8 -0
  25. package/dist/plugins/index.js.map +1 -1
  26. package/dist/plugins/pipelines/aws/index.js +15 -15
  27. package/dist/plugins/pipelines/aws/prod.js +7 -7
  28. package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +3 -1
  29. package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -1
  30. package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +17 -7
  31. package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -1
  32. package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts +1 -1
  33. package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts.map +1 -1
  34. package/dist/plugins/pipelines/aws/scanfix/credentials.js +27 -73
  35. package/dist/plugins/pipelines/aws/scanfix/credentials.js.map +1 -1
  36. package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts +1 -4
  37. package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts.map +1 -1
  38. package/dist/plugins/pipelines/aws/scanfix/db-replication.js +9 -39
  39. package/dist/plugins/pipelines/aws/scanfix/db-replication.js.map +1 -1
  40. package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts +1 -0
  41. package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts.map +1 -1
  42. package/dist/plugins/pipelines/aws/scanfix/ec2.js +61 -110
  43. package/dist/plugins/pipelines/aws/scanfix/ec2.js.map +1 -1
  44. package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts +1 -0
  45. package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts.map +1 -1
  46. package/dist/plugins/pipelines/aws/scanfix/ecr.js +25 -34
  47. package/dist/plugins/pipelines/aws/scanfix/ecr.js.map +1 -1
  48. package/dist/plugins/pipelines/aws/scanfix/iam.d.ts +1 -0
  49. package/dist/plugins/pipelines/aws/scanfix/iam.d.ts.map +1 -1
  50. package/dist/plugins/pipelines/aws/scanfix/iam.js +35 -44
  51. package/dist/plugins/pipelines/aws/scanfix/iam.js.map +1 -1
  52. package/dist/plugins/pipelines/aws/scanfix/rds.d.ts +1 -0
  53. package/dist/plugins/pipelines/aws/scanfix/rds.d.ts.map +1 -1
  54. package/dist/plugins/pipelines/aws/scanfix/rds.js +39 -104
  55. package/dist/plugins/pipelines/aws/scanfix/rds.js.map +1 -1
  56. package/dist/plugins/pipelines/aws/scanfix/s3.d.ts +1 -0
  57. package/dist/plugins/pipelines/aws/scanfix/s3.d.ts.map +1 -1
  58. package/dist/plugins/pipelines/aws/scanfix/s3.js +44 -53
  59. package/dist/plugins/pipelines/aws/scanfix/s3.js.map +1 -1
  60. package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts +1 -0
  61. package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts.map +1 -1
  62. package/dist/plugins/pipelines/aws/scanfix/security-groups.js +80 -79
  63. package/dist/plugins/pipelines/aws/scanfix/security-groups.js.map +1 -1
  64. package/dist/plugins/pipelines/aws/scanfix/ses.d.ts +1 -0
  65. package/dist/plugins/pipelines/aws/scanfix/ses.d.ts.map +1 -1
  66. package/dist/plugins/pipelines/aws/scanfix/ses.js +28 -50
  67. package/dist/plugins/pipelines/aws/scanfix/ses.js.map +1 -1
  68. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts +17 -0
  69. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts.map +1 -0
  70. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js +180 -0
  71. package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js.map +1 -0
  72. package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts +1 -0
  73. package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts.map +1 -1
  74. package/dist/plugins/pipelines/aws/scanfix/vpc.js +93 -94
  75. package/dist/plugins/pipelines/aws/scanfix/vpc.js.map +1 -1
  76. package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts +101 -28
  77. package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts.map +1 -1
  78. package/dist/plugins/pipelines/aws/utils/aws-helpers.js +428 -76
  79. package/dist/plugins/pipelines/aws/utils/aws-helpers.js.map +1 -1
  80. package/dist/plugins/pipelines/factiii/index.d.ts +11 -1
  81. package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -1
  82. package/dist/plugins/pipelines/factiii/index.js +183 -33
  83. package/dist/plugins/pipelines/factiii/index.js.map +1 -1
  84. package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +1 -1
  85. package/dist/plugins/pipelines/factiii/scanfix/config.js +4 -4
  86. package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -1
  87. package/dist/plugins/pipelines/factiii/scanfix/secrets.js +68 -8
  88. package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -1
  89. package/dist/plugins/servers/mac/index.js +13 -13
  90. package/dist/plugins/servers/mac/staging.js +4 -4
  91. package/dist/scanfix/fixes/certbot.js +1 -1
  92. package/dist/scripts/validate-example-values.d.ts +1 -1
  93. package/dist/scripts/validate-example-values.js +6 -6
  94. package/dist/utils/config-helpers.d.ts +3 -0
  95. package/dist/utils/config-helpers.d.ts.map +1 -1
  96. package/dist/utils/config-helpers.js.map +1 -1
  97. package/dist/utils/secret-prompts.d.ts +5 -2
  98. package/dist/utils/secret-prompts.d.ts.map +1 -1
  99. package/dist/utils/secret-prompts.js +55 -32
  100. package/dist/utils/secret-prompts.js.map +1 -1
  101. package/dist/utils/template-generator.js +71 -71
  102. package/package.json +8 -1
@@ -2,72 +2,146 @@
2
2
  /**
3
3
  * AWS Helper Utilities
4
4
  *
5
- * Shared functions for AWS CLI operations used across all AWS scanfix files.
6
- * All functions use AWS CLI via execSync (no SDK dependency).
5
+ * Shared functions for AWS SDK operations used across all AWS scanfix files.
6
+ * Uses AWS SDK v3 clients instead of AWS CLI.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.awsExec = awsExec;
10
- exports.awsExecSafe = awsExecSafe;
11
- exports.findResourceByTag = findResourceByTag;
9
+ exports.GetAuthorizationTokenCommand = exports.PutLifecyclePolicyCommand = exports.CreateRepositoryCommand = exports.DescribeRepositoriesCommand = exports.ECRClient = exports.PutBucketCorsCommand = exports.GetBucketCorsCommand = exports.PutBucketEncryptionCommand = exports.PutPublicAccessBlockCommand = exports.CreateBucketCommand = exports.HeadBucketCommand = exports.S3Client = exports.CreateDBInstanceCommand = exports.DescribeDBInstancesCommand = exports.CreateDBSubnetGroupCommand = exports.DescribeDBSubnetGroupsCommand = exports.RDSClient = exports.CreateAccessKeyCommand = exports.PutUserPolicyCommand = exports.CreateUserCommand = exports.GetUserCommand = exports.IAMClient = exports.GetCallerIdentityCommand = exports.STSClient = exports.waitUntilInstanceRunning = exports.AssociateAddressCommand = exports.AllocateAddressCommand = exports.RunInstancesCommand = exports.CreateKeyPairCommand = exports.AuthorizeSecurityGroupIngressCommand = exports.CreateSecurityGroupCommand = exports.AssociateRouteTableCommand = exports.CreateRouteCommand = exports.CreateRouteTableCommand = exports.AttachInternetGatewayCommand = exports.CreateInternetGatewayCommand = exports.ModifySubnetAttributeCommand = exports.CreateSubnetCommand = exports.ModifyVpcAttributeCommand = exports.CreateVpcCommand = exports.DescribeImagesCommand = exports.DescribeAvailabilityZonesCommand = exports.DescribeInternetGatewaysCommand = exports.DescribeAddressesCommand = exports.DescribeKeyPairsCommand = exports.DescribeInstancesCommand = exports.DescribeSecurityGroupsCommand = exports.DescribeSubnetsCommand = exports.DescribeVpcsCommand = exports.EC2Client = void 0;
10
+ exports.GetSendQuotaCommand = exports.GetIdentityDkimAttributesCommand = exports.VerifyDomainDkimCommand = exports.GetIdentityVerificationAttributesCommand = exports.VerifyDomainIdentityCommand = exports.SESClient = void 0;
11
+ exports.getEC2Client = getEC2Client;
12
+ exports.getSTSClient = getSTSClient;
13
+ exports.getIAMClient = getIAMClient;
14
+ exports.getRDSClient = getRDSClient;
15
+ exports.getS3Client = getS3Client;
16
+ exports.getECRClient = getECRClient;
17
+ exports.getSESClient = getSESClient;
18
+ exports.buildTags = buildTags;
12
19
  exports.tagSpec = tagSpec;
20
+ exports.projectFilter = projectFilter;
13
21
  exports.getAwsConfig = getAwsConfig;
14
22
  exports.isOnServer = isOnServer;
15
- exports.isAwsCliInstalled = isAwsCliInstalled;
16
- exports.getAwsAccountId = getAwsAccountId;
17
23
  exports.getProjectName = getProjectName;
18
- const child_process_1 = require("child_process");
19
- /**
20
- * Execute an AWS CLI command with region injection
21
- * Returns the stdout as a trimmed string
22
- * Throws on failure
23
- */
24
- function awsExec(cmd, region) {
25
- const regionFlag = region ? ' --region ' + region : '';
26
- // Only add --output json if command doesn't already specify output format
27
- const outputFlag = cmd.includes('--output ') ? '' : ' --output json';
28
- const fullCmd = cmd + regionFlag + outputFlag;
29
- try {
30
- return (0, child_process_1.execSync)(fullCmd, {
31
- encoding: 'utf8',
32
- stdio: ['pipe', 'pipe', 'pipe'],
33
- }).trim();
34
- }
35
- catch (error) {
36
- const msg = error instanceof Error ? error.message : String(error);
37
- throw new Error('AWS CLI failed: ' + msg);
24
+ exports.getAwsAccountId = getAwsAccountId;
25
+ exports.findVpc = findVpc;
26
+ exports.findSubnet = findSubnet;
27
+ exports.findPrivateSubnets = findPrivateSubnets;
28
+ exports.findSecurityGroup = findSecurityGroup;
29
+ exports.findKeyPair = findKeyPair;
30
+ exports.findInstance = findInstance;
31
+ exports.findElasticIp = findElasticIp;
32
+ exports.findIgw = findIgw;
33
+ exports.findDbSubnetGroup = findDbSubnetGroup;
34
+ exports.findRdsInstance = findRdsInstance;
35
+ exports.findRdsEndpoint = findRdsEndpoint;
36
+ exports.findEcrRepo = findEcrRepo;
37
+ exports.findBucket = findBucket;
38
+ exports.findIamUser = findIamUser;
39
+ exports.isDomainVerified = isDomainVerified;
40
+ exports.hasDkim = hasDkim;
41
+ exports.hasCors = hasCors;
42
+ exports.isAwsConfigured = isAwsConfigured;
43
+ const client_ec2_1 = require("@aws-sdk/client-ec2");
44
+ Object.defineProperty(exports, "EC2Client", { enumerable: true, get: function () { return client_ec2_1.EC2Client; } });
45
+ Object.defineProperty(exports, "DescribeVpcsCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeVpcsCommand; } });
46
+ Object.defineProperty(exports, "DescribeSubnetsCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeSubnetsCommand; } });
47
+ Object.defineProperty(exports, "DescribeSecurityGroupsCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeSecurityGroupsCommand; } });
48
+ Object.defineProperty(exports, "DescribeInstancesCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeInstancesCommand; } });
49
+ Object.defineProperty(exports, "DescribeKeyPairsCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeKeyPairsCommand; } });
50
+ Object.defineProperty(exports, "DescribeAddressesCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeAddressesCommand; } });
51
+ Object.defineProperty(exports, "DescribeInternetGatewaysCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeInternetGatewaysCommand; } });
52
+ Object.defineProperty(exports, "DescribeAvailabilityZonesCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeAvailabilityZonesCommand; } });
53
+ Object.defineProperty(exports, "DescribeImagesCommand", { enumerable: true, get: function () { return client_ec2_1.DescribeImagesCommand; } });
54
+ Object.defineProperty(exports, "CreateVpcCommand", { enumerable: true, get: function () { return client_ec2_1.CreateVpcCommand; } });
55
+ Object.defineProperty(exports, "ModifyVpcAttributeCommand", { enumerable: true, get: function () { return client_ec2_1.ModifyVpcAttributeCommand; } });
56
+ Object.defineProperty(exports, "CreateSubnetCommand", { enumerable: true, get: function () { return client_ec2_1.CreateSubnetCommand; } });
57
+ Object.defineProperty(exports, "ModifySubnetAttributeCommand", { enumerable: true, get: function () { return client_ec2_1.ModifySubnetAttributeCommand; } });
58
+ Object.defineProperty(exports, "CreateInternetGatewayCommand", { enumerable: true, get: function () { return client_ec2_1.CreateInternetGatewayCommand; } });
59
+ Object.defineProperty(exports, "AttachInternetGatewayCommand", { enumerable: true, get: function () { return client_ec2_1.AttachInternetGatewayCommand; } });
60
+ Object.defineProperty(exports, "CreateRouteTableCommand", { enumerable: true, get: function () { return client_ec2_1.CreateRouteTableCommand; } });
61
+ Object.defineProperty(exports, "CreateRouteCommand", { enumerable: true, get: function () { return client_ec2_1.CreateRouteCommand; } });
62
+ Object.defineProperty(exports, "AssociateRouteTableCommand", { enumerable: true, get: function () { return client_ec2_1.AssociateRouteTableCommand; } });
63
+ Object.defineProperty(exports, "CreateSecurityGroupCommand", { enumerable: true, get: function () { return client_ec2_1.CreateSecurityGroupCommand; } });
64
+ Object.defineProperty(exports, "AuthorizeSecurityGroupIngressCommand", { enumerable: true, get: function () { return client_ec2_1.AuthorizeSecurityGroupIngressCommand; } });
65
+ Object.defineProperty(exports, "CreateKeyPairCommand", { enumerable: true, get: function () { return client_ec2_1.CreateKeyPairCommand; } });
66
+ Object.defineProperty(exports, "RunInstancesCommand", { enumerable: true, get: function () { return client_ec2_1.RunInstancesCommand; } });
67
+ Object.defineProperty(exports, "AllocateAddressCommand", { enumerable: true, get: function () { return client_ec2_1.AllocateAddressCommand; } });
68
+ Object.defineProperty(exports, "AssociateAddressCommand", { enumerable: true, get: function () { return client_ec2_1.AssociateAddressCommand; } });
69
+ Object.defineProperty(exports, "waitUntilInstanceRunning", { enumerable: true, get: function () { return client_ec2_1.waitUntilInstanceRunning; } });
70
+ const client_sts_1 = require("@aws-sdk/client-sts");
71
+ Object.defineProperty(exports, "STSClient", { enumerable: true, get: function () { return client_sts_1.STSClient; } });
72
+ Object.defineProperty(exports, "GetCallerIdentityCommand", { enumerable: true, get: function () { return client_sts_1.GetCallerIdentityCommand; } });
73
+ const client_iam_1 = require("@aws-sdk/client-iam");
74
+ Object.defineProperty(exports, "IAMClient", { enumerable: true, get: function () { return client_iam_1.IAMClient; } });
75
+ Object.defineProperty(exports, "GetUserCommand", { enumerable: true, get: function () { return client_iam_1.GetUserCommand; } });
76
+ Object.defineProperty(exports, "CreateUserCommand", { enumerable: true, get: function () { return client_iam_1.CreateUserCommand; } });
77
+ Object.defineProperty(exports, "PutUserPolicyCommand", { enumerable: true, get: function () { return client_iam_1.PutUserPolicyCommand; } });
78
+ Object.defineProperty(exports, "CreateAccessKeyCommand", { enumerable: true, get: function () { return client_iam_1.CreateAccessKeyCommand; } });
79
+ const client_rds_1 = require("@aws-sdk/client-rds");
80
+ Object.defineProperty(exports, "RDSClient", { enumerable: true, get: function () { return client_rds_1.RDSClient; } });
81
+ Object.defineProperty(exports, "DescribeDBSubnetGroupsCommand", { enumerable: true, get: function () { return client_rds_1.DescribeDBSubnetGroupsCommand; } });
82
+ Object.defineProperty(exports, "CreateDBSubnetGroupCommand", { enumerable: true, get: function () { return client_rds_1.CreateDBSubnetGroupCommand; } });
83
+ Object.defineProperty(exports, "DescribeDBInstancesCommand", { enumerable: true, get: function () { return client_rds_1.DescribeDBInstancesCommand; } });
84
+ Object.defineProperty(exports, "CreateDBInstanceCommand", { enumerable: true, get: function () { return client_rds_1.CreateDBInstanceCommand; } });
85
+ const client_s3_1 = require("@aws-sdk/client-s3");
86
+ Object.defineProperty(exports, "S3Client", { enumerable: true, get: function () { return client_s3_1.S3Client; } });
87
+ Object.defineProperty(exports, "HeadBucketCommand", { enumerable: true, get: function () { return client_s3_1.HeadBucketCommand; } });
88
+ Object.defineProperty(exports, "CreateBucketCommand", { enumerable: true, get: function () { return client_s3_1.CreateBucketCommand; } });
89
+ Object.defineProperty(exports, "PutPublicAccessBlockCommand", { enumerable: true, get: function () { return client_s3_1.PutPublicAccessBlockCommand; } });
90
+ Object.defineProperty(exports, "PutBucketEncryptionCommand", { enumerable: true, get: function () { return client_s3_1.PutBucketEncryptionCommand; } });
91
+ Object.defineProperty(exports, "GetBucketCorsCommand", { enumerable: true, get: function () { return client_s3_1.GetBucketCorsCommand; } });
92
+ Object.defineProperty(exports, "PutBucketCorsCommand", { enumerable: true, get: function () { return client_s3_1.PutBucketCorsCommand; } });
93
+ const client_ecr_1 = require("@aws-sdk/client-ecr");
94
+ Object.defineProperty(exports, "ECRClient", { enumerable: true, get: function () { return client_ecr_1.ECRClient; } });
95
+ Object.defineProperty(exports, "DescribeRepositoriesCommand", { enumerable: true, get: function () { return client_ecr_1.DescribeRepositoriesCommand; } });
96
+ Object.defineProperty(exports, "CreateRepositoryCommand", { enumerable: true, get: function () { return client_ecr_1.CreateRepositoryCommand; } });
97
+ Object.defineProperty(exports, "PutLifecyclePolicyCommand", { enumerable: true, get: function () { return client_ecr_1.PutLifecyclePolicyCommand; } });
98
+ Object.defineProperty(exports, "GetAuthorizationTokenCommand", { enumerable: true, get: function () { return client_ecr_1.GetAuthorizationTokenCommand; } });
99
+ const client_ses_1 = require("@aws-sdk/client-ses");
100
+ Object.defineProperty(exports, "SESClient", { enumerable: true, get: function () { return client_ses_1.SESClient; } });
101
+ Object.defineProperty(exports, "VerifyDomainIdentityCommand", { enumerable: true, get: function () { return client_ses_1.VerifyDomainIdentityCommand; } });
102
+ Object.defineProperty(exports, "GetIdentityVerificationAttributesCommand", { enumerable: true, get: function () { return client_ses_1.GetIdentityVerificationAttributesCommand; } });
103
+ Object.defineProperty(exports, "VerifyDomainDkimCommand", { enumerable: true, get: function () { return client_ses_1.VerifyDomainDkimCommand; } });
104
+ Object.defineProperty(exports, "GetIdentityDkimAttributesCommand", { enumerable: true, get: function () { return client_ses_1.GetIdentityDkimAttributesCommand; } });
105
+ Object.defineProperty(exports, "GetSendQuotaCommand", { enumerable: true, get: function () { return client_ses_1.GetSendQuotaCommand; } });
106
+ // ============================================================
107
+ // CLIENT FACTORIES — cached per region
108
+ // ============================================================
109
+ const clientCache = {};
110
+ function getCachedClient(ClientClass, region) {
111
+ const key = ClientClass.name + ':' + region;
112
+ if (!clientCache[key]) {
113
+ clientCache[key] = new ClientClass({ region });
38
114
  }
115
+ return clientCache[key];
39
116
  }
40
- /**
41
- * Execute an AWS CLI command, returning null on failure instead of throwing
42
- */
43
- function awsExecSafe(cmd, region) {
44
- try {
45
- return awsExec(cmd, region);
46
- }
47
- catch {
48
- return null;
49
- }
117
+ function getEC2Client(region) {
118
+ return getCachedClient(client_ec2_1.EC2Client, region);
50
119
  }
51
- /**
52
- * Find an AWS resource by its factiii:project tag
53
- * Returns the resource data as parsed JSON, or null if not found
54
- */
55
- function findResourceByTag(describeCmd, projectName, region) {
56
- try {
57
- const result = awsExec(describeCmd + ' --filters "Name=tag:factiii:project,Values=' + projectName + '"', region);
58
- const parsed = JSON.parse(result);
59
- return parsed;
60
- }
61
- catch {
62
- return null;
63
- }
120
+ function getSTSClient(region) {
121
+ return getCachedClient(client_sts_1.STSClient, region);
122
+ }
123
+ function getIAMClient(region) {
124
+ return getCachedClient(client_iam_1.IAMClient, region);
125
+ }
126
+ function getRDSClient(region) {
127
+ return getCachedClient(client_rds_1.RDSClient, region);
64
128
  }
129
+ function getS3Client(region) {
130
+ return getCachedClient(client_s3_1.S3Client, region);
131
+ }
132
+ function getECRClient(region) {
133
+ return getCachedClient(client_ecr_1.ECRClient, region);
134
+ }
135
+ function getSESClient(region) {
136
+ return getCachedClient(client_ses_1.SESClient, region);
137
+ }
138
+ // ============================================================
139
+ // TAGGING HELPERS
140
+ // ============================================================
65
141
  /**
66
- * Generate --tag-specifications string for AWS resource creation
67
- * Tags resources with factiii:project={name} and factiii:managed=true
68
- * Uses JSON format to avoid shell parsing issues with colons in tag keys
142
+ * Build standard tags array for AWS resources
69
143
  */
70
- function tagSpec(resourceType, projectName, extraTags) {
144
+ function buildTags(projectName, extraTags) {
71
145
  const tags = [
72
146
  { Key: 'factiii:project', Value: projectName },
73
147
  { Key: 'factiii:managed', Value: 'true' },
@@ -78,15 +152,30 @@ function tagSpec(resourceType, projectName, extraTags) {
78
152
  tags.push({ Key: key, Value: value });
79
153
  }
80
154
  }
81
- const spec = JSON.stringify([{ ResourceType: resourceType, Tags: tags }]);
82
- return "--tag-specifications '" + spec + "'";
155
+ return tags;
156
+ }
157
+ /**
158
+ * Build TagSpecification for resource creation
159
+ */
160
+ function tagSpec(resourceType, projectName, extraTags) {
161
+ return {
162
+ ResourceType: resourceType,
163
+ Tags: buildTags(projectName, extraTags),
164
+ };
165
+ }
166
+ /**
167
+ * Build a filter for factiii:project tag
168
+ */
169
+ function projectFilter(projectName) {
170
+ return { Name: 'tag:factiii:project', Values: [projectName] };
83
171
  }
172
+ // ============================================================
173
+ // CONFIG HELPERS
174
+ // ============================================================
84
175
  /**
85
176
  * Extract AWS configuration from a FactiiiConfig
86
- * Checks both top-level config.aws and per-environment aws settings
87
177
  */
88
178
  function getAwsConfig(config) {
89
- // Check top-level aws config first
90
179
  const topLevel = config.aws;
91
180
  if (topLevel) {
92
181
  return {
@@ -95,7 +184,6 @@ function getAwsConfig(config) {
95
184
  accessKeyId: topLevel.access_key_id,
96
185
  };
97
186
  }
98
- // Check per-environment configs
99
187
  // eslint-disable-next-line @typescript-eslint/no-require-imports
100
188
  const { extractEnvironments } = require('../../../../utils/config-helpers.js');
101
189
  const environments = extractEnvironments(config);
@@ -108,47 +196,311 @@ function getAwsConfig(config) {
108
196
  };
109
197
  }
110
198
  }
111
- // Default
112
199
  return { region: 'us-east-1', configType: 'ec2' };
113
200
  }
114
201
  /**
115
- * Check if AWS provisioning should run
116
- * AWS provisioning (VPC, EC2, RDS, etc.) only runs from the dev machine.
117
- * When on the server (FACTIII_ON_SERVER=true), skip provisioning — only server-level fixes run.
202
+ * Check if running on server (skip AWS provisioning)
118
203
  */
119
204
  function isOnServer() {
120
205
  return process.env.FACTIII_ON_SERVER === 'true' || process.env.GITHUB_ACTIONS === 'true';
121
206
  }
122
207
  /**
123
- * Check if AWS CLI is installed and accessible
208
+ * Get project name for tagging
124
209
  */
125
- function isAwsCliInstalled() {
210
+ function getProjectName(config) {
211
+ return config.name ?? 'app';
212
+ }
213
+ /**
214
+ * Get AWS account ID via STS
215
+ */
216
+ async function getAwsAccountId(region) {
126
217
  try {
127
- (0, child_process_1.execSync)('aws --version', { stdio: 'pipe' });
128
- return true;
218
+ const sts = getSTSClient(region);
219
+ const result = await sts.send(new client_sts_1.GetCallerIdentityCommand({}));
220
+ return result.Account ?? null;
221
+ }
222
+ catch {
223
+ return null;
224
+ }
225
+ }
226
+ // ============================================================
227
+ // SHARED RESOURCE LOOKUP HELPERS
228
+ // ============================================================
229
+ /**
230
+ * Find VPC by factiii:project tag
231
+ */
232
+ async function findVpc(projectName, region) {
233
+ try {
234
+ const ec2 = getEC2Client(region);
235
+ const result = await ec2.send(new client_ec2_1.DescribeVpcsCommand({
236
+ Filters: [projectFilter(projectName)],
237
+ }));
238
+ return result.Vpcs?.[0]?.VpcId ?? null;
239
+ }
240
+ catch {
241
+ return null;
242
+ }
243
+ }
244
+ /**
245
+ * Find subnet by tag and type
246
+ */
247
+ async function findSubnet(projectName, region, type) {
248
+ try {
249
+ const ec2 = getEC2Client(region);
250
+ const result = await ec2.send(new client_ec2_1.DescribeSubnetsCommand({
251
+ Filters: [
252
+ projectFilter(projectName),
253
+ { Name: 'tag:factiii:subnet-type', Values: [type] },
254
+ ],
255
+ }));
256
+ return result.Subnets?.[0]?.SubnetId ?? null;
257
+ }
258
+ catch {
259
+ return null;
260
+ }
261
+ }
262
+ /**
263
+ * Find all private subnets
264
+ */
265
+ async function findPrivateSubnets(projectName, region) {
266
+ try {
267
+ const ec2 = getEC2Client(region);
268
+ const result = await ec2.send(new client_ec2_1.DescribeSubnetsCommand({
269
+ Filters: [
270
+ projectFilter(projectName),
271
+ { Name: 'tag:factiii:subnet-type', Values: ['private'] },
272
+ ],
273
+ }));
274
+ return (result.Subnets ?? []).map(s => s.SubnetId).filter(Boolean);
275
+ }
276
+ catch {
277
+ return [];
278
+ }
279
+ }
280
+ /**
281
+ * Find security group by name and VPC
282
+ */
283
+ async function findSecurityGroup(groupName, vpcId, region) {
284
+ try {
285
+ const ec2 = getEC2Client(region);
286
+ const result = await ec2.send(new client_ec2_1.DescribeSecurityGroupsCommand({
287
+ Filters: [
288
+ { Name: 'group-name', Values: [groupName] },
289
+ { Name: 'vpc-id', Values: [vpcId] },
290
+ ],
291
+ }));
292
+ return result.SecurityGroups?.[0]?.GroupId ?? null;
293
+ }
294
+ catch {
295
+ return null;
296
+ }
297
+ }
298
+ /**
299
+ * Find EC2 key pair by name
300
+ */
301
+ async function findKeyPair(keyName, region) {
302
+ try {
303
+ const ec2 = getEC2Client(region);
304
+ const result = await ec2.send(new client_ec2_1.DescribeKeyPairsCommand({
305
+ KeyNames: [keyName],
306
+ }));
307
+ return (result.KeyPairs?.length ?? 0) > 0;
129
308
  }
130
309
  catch {
131
310
  return false;
132
311
  }
133
312
  }
134
313
  /**
135
- * Check if AWS credentials are configured and valid
136
- * Returns the account ID if valid, null otherwise
314
+ * Find running/stopped EC2 instance by tag
137
315
  */
138
- function getAwsAccountId(region) {
316
+ async function findInstance(projectName, region) {
139
317
  try {
140
- const result = awsExec('aws sts get-caller-identity --query Account --output text', region);
141
- // The output text mode returns without JSON wrapping
142
- return result.replace(/"/g, '').trim() || null;
318
+ const ec2 = getEC2Client(region);
319
+ const result = await ec2.send(new client_ec2_1.DescribeInstancesCommand({
320
+ Filters: [
321
+ projectFilter(projectName),
322
+ { Name: 'instance-state-name', Values: ['running', 'stopped'] },
323
+ ],
324
+ }));
325
+ return result.Reservations?.[0]?.Instances?.[0]?.InstanceId ?? null;
143
326
  }
144
327
  catch {
145
328
  return null;
146
329
  }
147
330
  }
148
331
  /**
149
- * Get the project name for tagging (from config.name)
332
+ * Find Elastic IP associated with an instance
150
333
  */
151
- function getProjectName(config) {
152
- return config.name ?? 'app';
334
+ async function findElasticIp(instanceId, region) {
335
+ try {
336
+ const ec2 = getEC2Client(region);
337
+ const result = await ec2.send(new client_ec2_1.DescribeAddressesCommand({
338
+ Filters: [{ Name: 'instance-id', Values: [instanceId] }],
339
+ }));
340
+ return result.Addresses?.[0]?.PublicIp ?? null;
341
+ }
342
+ catch {
343
+ return null;
344
+ }
345
+ }
346
+ /**
347
+ * Find internet gateway attached to VPC
348
+ */
349
+ async function findIgw(vpcId, region) {
350
+ try {
351
+ const ec2 = getEC2Client(region);
352
+ const result = await ec2.send(new client_ec2_1.DescribeInternetGatewaysCommand({
353
+ Filters: [{ Name: 'attachment.vpc-id', Values: [vpcId] }],
354
+ }));
355
+ return result.InternetGateways?.[0]?.InternetGatewayId ?? null;
356
+ }
357
+ catch {
358
+ return null;
359
+ }
360
+ }
361
+ /**
362
+ * Find DB subnet group
363
+ */
364
+ async function findDbSubnetGroup(groupName, region) {
365
+ try {
366
+ const rds = getRDSClient(region);
367
+ const result = await rds.send(new client_rds_1.DescribeDBSubnetGroupsCommand({
368
+ DBSubnetGroupName: groupName,
369
+ }));
370
+ return (result.DBSubnetGroups?.length ?? 0) > 0;
371
+ }
372
+ catch {
373
+ return false;
374
+ }
375
+ }
376
+ /**
377
+ * Find RDS instance by identifier
378
+ */
379
+ async function findRdsInstance(dbInstanceId, region) {
380
+ try {
381
+ const rds = getRDSClient(region);
382
+ const result = await rds.send(new client_rds_1.DescribeDBInstancesCommand({
383
+ DBInstanceIdentifier: dbInstanceId,
384
+ }));
385
+ const instance = result.DBInstances?.[0];
386
+ if (!instance)
387
+ return null;
388
+ return {
389
+ status: instance.DBInstanceStatus ?? 'unknown',
390
+ endpoint: instance.Endpoint?.Address ?? null,
391
+ };
392
+ }
393
+ catch {
394
+ return null;
395
+ }
396
+ }
397
+ /**
398
+ * Find RDS instance endpoint
399
+ */
400
+ async function findRdsEndpoint(projectName, region) {
401
+ const dbId = 'factiii-' + projectName + '-db';
402
+ const instance = await findRdsInstance(dbId, region);
403
+ return instance?.endpoint ?? null;
404
+ }
405
+ /**
406
+ * Check if ECR repository exists
407
+ */
408
+ async function findEcrRepo(repoName, region) {
409
+ try {
410
+ const ecr = getECRClient(region);
411
+ await ecr.send(new client_ecr_1.DescribeRepositoriesCommand({
412
+ repositoryNames: [repoName],
413
+ }));
414
+ return true;
415
+ }
416
+ catch {
417
+ return false;
418
+ }
419
+ }
420
+ /**
421
+ * Check if S3 bucket exists
422
+ */
423
+ async function findBucket(bucketName, region) {
424
+ try {
425
+ const s3 = getS3Client(region);
426
+ await s3.send(new client_s3_1.HeadBucketCommand({ Bucket: bucketName }));
427
+ return true;
428
+ }
429
+ catch {
430
+ return false;
431
+ }
432
+ }
433
+ /**
434
+ * Check if IAM user exists
435
+ */
436
+ async function findIamUser(userName, region) {
437
+ try {
438
+ const iam = getIAMClient(region);
439
+ await iam.send(new client_iam_1.GetUserCommand({ UserName: userName }));
440
+ return true;
441
+ }
442
+ catch {
443
+ return false;
444
+ }
445
+ }
446
+ /**
447
+ * Check if domain is verified in SES
448
+ */
449
+ async function isDomainVerified(domain, region) {
450
+ try {
451
+ const ses = getSESClient(region);
452
+ const result = await ses.send(new client_ses_1.GetIdentityVerificationAttributesCommand({
453
+ Identities: [domain],
454
+ }));
455
+ return result.VerificationAttributes?.[domain]?.VerificationStatus === 'Success';
456
+ }
457
+ catch {
458
+ return false;
459
+ }
460
+ }
461
+ /**
462
+ * Check if DKIM is configured for domain
463
+ */
464
+ async function hasDkim(domain, region) {
465
+ try {
466
+ const ses = getSESClient(region);
467
+ const result = await ses.send(new client_ses_1.GetIdentityDkimAttributesCommand({
468
+ Identities: [domain],
469
+ }));
470
+ return result.DkimAttributes?.[domain]?.DkimEnabled === true;
471
+ }
472
+ catch {
473
+ return false;
474
+ }
475
+ }
476
+ /**
477
+ * Check if S3 bucket has CORS configured
478
+ */
479
+ async function hasCors(bucketName, region) {
480
+ try {
481
+ const s3 = getS3Client(region);
482
+ const result = await s3.send(new client_s3_1.GetBucketCorsCommand({ Bucket: bucketName }));
483
+ return (result.CORSRules?.length ?? 0) > 0;
484
+ }
485
+ catch {
486
+ return false;
487
+ }
488
+ }
489
+ /**
490
+ * Check if AWS is configured for this project (shared guard)
491
+ */
492
+ function isAwsConfigured(config) {
493
+ if (isOnServer())
494
+ return false;
495
+ if (config.aws)
496
+ return true;
497
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
498
+ const { extractEnvironments } = require('../../../../utils/config-helpers.js');
499
+ const environments = extractEnvironments(config);
500
+ return Object.values(environments).some((e) => {
501
+ const env = e;
502
+ return env.pipeline === 'aws' || !!env.access_key_id ||
503
+ (!!env.config && ['ec2', 'free-tier', 'standard', 'enterprise'].includes(env.config));
504
+ });
153
505
  }
154
506
  //# sourceMappingURL=aws-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aws-helpers.js","sourceRoot":"","sources":["../../../../../src/plugins/pipelines/aws/utils/aws-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aws-helpers.js","sourceRoot":"","sources":["../../../../../src/plugins/pipelines/aws/utils/aws-helpers.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAwFH,oCAEC;AAED,oCAEC;AAED,oCAEC;AAED,oCAEC;AAED,kCAEC;AAED,oCAEC;AAED,oCAEC;AASD,8BAYC;AAKD,0BAKC;AAKD,sCAEC;AASD,oCA4BC;AAKD,gCAEC;AAKD,wCAEC;AAKD,0CAQC;AASD,0BAUC;AAKD,gCAaC;AAKD,gDAaC;AAKD,8CAaC;AAKD,kCAUC;AAKD,oCAaC;AAKD,sCAUC;AAKD,0BAUC;AAKD,8CAUC;AAKD,0CAeC;AAKD,0CAIC;AAKD,kCAUC;AAKD,gCAQC;AAKD,kCAQC;AAKD,4CAUC;AAKD,0BAUC;AAKD,0BAQC;AAKD,0CAWC;AA9eD,oDA8B6B;AAwd3B,0FArfA,sBAAS,OAqfA;AACT,oGArfA,gCAAmB,OAqfA;AACnB,uGArfA,mCAAsB,OAqfA;AACtB,8GArfA,0CAA6B,OAqfA;AAC7B,yGArfA,qCAAwB,OAqfA;AACxB,wGArfA,oCAAuB,OAqfA;AACvB,yGArfA,qCAAwB,OAqfA;AACxB,gHArfA,4CAA+B,OAqfA;AAC/B,iHArfA,6CAAgC,OAqfA;AAChC,sGArfA,kCAAqB,OAqfA;AACrB,iGArfA,6BAAgB,OAqfA;AAChB,0GArfA,sCAAyB,OAqfA;AACzB,oGArfA,gCAAmB,OAqfA;AACnB,6GArfA,yCAA4B,OAqfA;AAC5B,6GArfA,yCAA4B,OAqfA;AAC5B,6GArfA,yCAA4B,OAqfA;AAC5B,wGArfA,oCAAuB,OAqfA;AACvB,mGArfA,+BAAkB,OAqfA;AAClB,2GArfA,uCAA0B,OAqfA;AAC1B,2GArfA,uCAA0B,OAqfA;AAC1B,qHArfA,iDAAoC,OAqfA;AACpC,qGArfA,iCAAoB,OAqfA;AACpB,oGArfA,gCAAmB,OAqfA;AACnB,uGArfA,mCAAsB,OAqfA;AACtB,wGArfA,oCAAuB,OAqfA;AACvB,yGAlfA,qCAAwB,OAkfA;AAhf1B,oDAA0E;AAkfxE,0FAlfO,sBAAS,OAkfP;AACT,yGAnfkB,qCAAwB,OAmflB;AAlf1B,oDAM6B;AA8e3B,0FAnfA,sBAAS,OAmfA;AACT,+FAnfA,2BAAc,OAmfA;AACd,kGAnfA,8BAAiB,OAmfA;AACjB,qGAnfA,iCAAoB,OAmfA;AACpB,uGAnfA,mCAAsB,OAmfA;AAjfxB,oDAM6B;AA6e3B,0FAlfA,sBAAS,OAkfA;AACT,8GAlfA,0CAA6B,OAkfA;AAC7B,2GAlfA,uCAA0B,OAkfA;AAC1B,2GAlfA,uCAA0B,OAkfA;AAC1B,wGAlfA,oCAAuB,OAkfA;AAhfzB,kDAQ4B;AA0e1B,yFAjfA,oBAAQ,OAifA;AACR,kGAjfA,6BAAiB,OAifA;AACjB,oGAjfA,+BAAmB,OAifA;AACnB,4GAjfA,uCAA2B,OAifA;AAC3B,2GAjfA,sCAA0B,OAifA;AAC1B,qGAjfA,gCAAoB,OAifA;AACpB,qGAjfA,gCAAoB,OAifA;AA/etB,oDAM6B;AA2e3B,0FAhfA,sBAAS,OAgfA;AACT,4GAhfA,wCAA2B,OAgfA;AAC3B,wGAhfA,oCAAuB,OAgfA;AACvB,0GAhfA,sCAAyB,OAgfA;AACzB,6GAhfA,yCAA4B,OAgfA;AA9e9B,oDAO6B;AAye3B,0FA/eA,sBAAS,OA+eA;AACT,4GA/eA,wCAA2B,OA+eA;AAC3B,yHA/eA,qDAAwC,OA+eA;AACxC,wGA/eA,oCAAuB,OA+eA;AACvB,iHA/eA,6CAAgC,OA+eA;AAChC,oGA/eA,gCAAmB,OA+eA;AA3erB,+DAA+D;AAC/D,uCAAuC;AACvC,+DAA+D;AAE/D,MAAM,WAAW,GAA4B,EAAE,CAAC;AAEhD,SAAS,eAAe,CAAI,WAAkD,EAAE,MAAc;IAC5F,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;IAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,CAAM,CAAC;AAC/B,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,eAAe,CAAC,sBAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,eAAe,CAAC,sBAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,eAAe,CAAC,sBAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,eAAe,CAAC,sBAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,WAAW,CAAC,MAAc;IACxC,OAAO,eAAe,CAAC,oBAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,eAAe,CAAC,sBAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,eAAe,CAAC,sBAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,+DAA+D;AAC/D,kBAAkB;AAClB,+DAA+D;AAE/D;;GAEG;AACH,SAAgB,SAAS,CAAC,WAAmB,EAAE,SAAkC;IAC/E,MAAM,IAAI,GAAU;QAClB,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE;QAC9C,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE;QACzC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE;KACjD,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAC,YAAoB,EAAE,WAAmB,EAAE,SAAkC;IACnG,OAAO;QACL,YAAY,EAAE,YAAgD;QAC9D,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,WAAmB;IAC/C,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAE/D;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAqB;IAKhD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAA0C,CAAC;IACnE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAG,QAAQ,CAAC,MAAiB,IAAI,WAAW;YAClD,UAAU,EAAG,QAAQ,CAAC,MAAiB,IAAI,KAAK;YAChD,WAAW,EAAE,QAAQ,CAAC,aAAmC;SAC1D,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAsC,CAAC;IACtF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YAChD,OAAO;gBACL,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,WAAW;gBACjC,UAAU,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;gBAC/B,WAAW,EAAE,GAAG,CAAC,aAAa;aAC/B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC;AAC3F,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAqB;IAClD,OAAO,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC;AAC9B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,MAAc;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,qCAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,iCAAiC;AACjC,+DAA+D;AAE/D;;GAEG;AACI,KAAK,UAAU,OAAO,CAAC,WAAmB,EAAE,MAAc;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,gCAAmB,CAAC;YACpD,OAAO,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;SACtC,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAc,EAAE,IAAY;IAChF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,mCAAsB,CAAC;YACvD,OAAO,EAAE;gBACP,aAAa,CAAC,WAAW,CAAC;gBAC1B,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;aACpD;SACF,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,MAAc;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,mCAAsB,CAAC;YACvD,OAAO,EAAE;gBACP,aAAa,CAAC,WAAW,CAAC;gBAC1B,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;aACzD;SACF,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,KAAa,EAAE,MAAc;IACtF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,0CAA6B,CAAC;YAC9D,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;gBAC3C,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE;aACpC;SACF,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,MAAc;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,oCAAuB,CAAC;YACxD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,MAAc;IACpE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,qCAAwB,CAAC;YACzD,OAAO,EAAE;gBACP,aAAa,CAAC,WAAW,CAAC;gBAC1B,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;aAChE;SACF,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,IAAI,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,MAAc;IACpE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,qCAAwB,CAAC;YACzD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,OAAO,CAAC,KAAa,EAAE,MAAc;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,4CAA+B,CAAC;YAChE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SAC1D,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,IAAI,IAAI,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,MAAc;IACvE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,0CAA6B,CAAC;YAC9D,iBAAiB,EAAE,SAAS;SAC7B,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,YAAoB,EAAE,MAAc;IACxE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,uCAA0B,CAAC;YAC3D,oBAAoB,EAAE,YAAY;SACnC,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,gBAAgB,IAAI,SAAS;YAC9C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI;SAC7C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,MAAc;IACvE,MAAM,IAAI,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAc;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,wCAA2B,CAAC;YAC7C,eAAe,EAAE,CAAC,QAAQ,CAAC;SAC5B,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,MAAc;IACjE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,6BAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAc;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,2BAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc;IACnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,qDAAwC,CAAC;YACzE,UAAU,EAAE,CAAC,MAAM,CAAC;SACrB,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,kBAAkB,KAAK,SAAS,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,MAAc;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,6CAAgC,CAAC;YACjE,UAAU,EAAE,CAAC,MAAM,CAAC;SACrB,CAAC,CAAC,CAAC;QACJ,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,OAAO,CAAC,UAAkB,EAAE,MAAc;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,gCAAoB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAqB;IACnD,IAAI,UAAU,EAAE;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,MAAM,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5B,iEAAiE;IACjE,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,CAAmE,CAAC;QAChF,OAAO,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa;YAClD,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -42,7 +42,7 @@
42
42
  * - secrets.ts: When checking GitHub Secrets (secrets stage)
43
43
  * ============================================================
44
44
  */
45
- import type { FactiiiConfig, Stage, Reachability, Fix, DeployResult, DeployOptions, EnvironmentConfig, PluginCommand } from '../../../types/index.js';
45
+ import type { FactiiiConfig, Stage, Reachability, Fix, DeployResult, DeployOptions, EnvironmentConfig, PluginCommand, CommandResult } from '../../../types/index.js';
46
46
  import * as detectionUtils from './utils/detection.js';
47
47
  declare class FactiiiPipeline {
48
48
  static readonly id = "factiii";
@@ -113,6 +113,16 @@ declare class FactiiiPipeline {
113
113
  * @param useNpx - Whether to prefix with npx (false for pnpm commands)
114
114
  */
115
115
  static runDbCommand(command: string, stage: Stage, config: FactiiiConfig, rootDir: string, useNpx?: boolean): void;
116
+ /**
117
+ * Change the Ansible Vault password for the configured vault file.
118
+ *
119
+ * This runs locally on the dev machine (secrets stage) and uses:
120
+ * ansible-vault rekey <vault_path> --vault-password-file <old> --new-vault-password-file <new>
121
+ *
122
+ * It then overwrites the configured vault_password_file with the new password
123
+ * so future commands use the updated password.
124
+ */
125
+ static changeVaultPassword(config: FactiiiConfig, rootDir: string): Promise<CommandResult>;
116
126
  static readonly commands: PluginCommand[];
117
127
  /**
118
128
  * Auto-detect pipeline configuration
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/pipelines/factiii/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/pipelines/factiii/index.ts"],"names":[],"mappings":"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"}