check-my-toolkit 2.4.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/infra/checkers/ec2.d.ts +14 -0
- package/dist/infra/checkers/ec2.d.ts.map +1 -0
- package/dist/infra/checkers/ec2.js +165 -0
- package/dist/infra/checkers/ec2.js.map +1 -0
- package/dist/infra/checkers/elasticache.d.ts +14 -0
- package/dist/infra/checkers/elasticache.d.ts.map +1 -0
- package/dist/infra/checkers/elasticache.js +165 -0
- package/dist/infra/checkers/elasticache.js.map +1 -0
- package/dist/infra/checkers/elb.d.ts +14 -0
- package/dist/infra/checkers/elb.d.ts.map +1 -0
- package/dist/infra/checkers/elb.js +167 -0
- package/dist/infra/checkers/elb.js.map +1 -0
- package/dist/infra/checkers/index.d.ts +1 -1
- package/dist/infra/checkers/index.d.ts.map +1 -1
- package/dist/infra/checkers/index.js +6 -0
- package/dist/infra/checkers/index.js.map +1 -1
- package/dist/infra/generate.d.ts.map +1 -1
- package/dist/infra/generate.js +23 -3
- package/dist/infra/generate.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EC2 resource checker
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Instances
|
|
6
|
+
* - Security groups
|
|
7
|
+
* - Key pairs
|
|
8
|
+
*/
|
|
9
|
+
import type { ResourceChecker } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* EC2 resource checker
|
|
12
|
+
*/
|
|
13
|
+
export declare const EC2Checker: ResourceChecker;
|
|
14
|
+
//# sourceMappingURL=ec2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ec2.d.ts","sourceRoot":"","sources":["../../../src/infra/checkers/ec2.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmKlD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,eA0BxB,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EC2 resource checker
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Instances
|
|
6
|
+
* - Security groups
|
|
7
|
+
* - Key pairs
|
|
8
|
+
*/
|
|
9
|
+
import { DescribeInstancesCommand, DescribeSecurityGroupsCommand, DescribeKeyPairsCommand, EC2Client, } from "@aws-sdk/client-ec2";
|
|
10
|
+
/**
|
|
11
|
+
* Cache of EC2 clients by region
|
|
12
|
+
*/
|
|
13
|
+
const clientCache = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Get or create an EC2 client for a region
|
|
16
|
+
*/
|
|
17
|
+
function getClient(region) {
|
|
18
|
+
let client = clientCache.get(region);
|
|
19
|
+
if (!client) {
|
|
20
|
+
client = new EC2Client({ region });
|
|
21
|
+
clientCache.set(region, client);
|
|
22
|
+
}
|
|
23
|
+
return client;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if an EC2 instance exists
|
|
27
|
+
*/
|
|
28
|
+
async function checkInstance(client, arn) {
|
|
29
|
+
const { resourceId, raw } = arn;
|
|
30
|
+
try {
|
|
31
|
+
const response = await client.send(new DescribeInstancesCommand({ InstanceIds: [resourceId] }));
|
|
32
|
+
const instance = response.Reservations?.[0]?.Instances?.[0];
|
|
33
|
+
const exists = !!instance && instance.State?.Name !== "terminated";
|
|
34
|
+
return {
|
|
35
|
+
arn: raw,
|
|
36
|
+
exists,
|
|
37
|
+
service: "ec2",
|
|
38
|
+
resourceType: "instance",
|
|
39
|
+
resourceId,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const err = error;
|
|
44
|
+
if (err.name === "InvalidInstanceID.NotFound") {
|
|
45
|
+
return {
|
|
46
|
+
arn: raw,
|
|
47
|
+
exists: false,
|
|
48
|
+
service: "ec2",
|
|
49
|
+
resourceType: "instance",
|
|
50
|
+
resourceId,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
arn: raw,
|
|
55
|
+
exists: false,
|
|
56
|
+
error: err.message || "Unknown error",
|
|
57
|
+
service: "ec2",
|
|
58
|
+
resourceType: "instance",
|
|
59
|
+
resourceId,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if an EC2 security group exists
|
|
65
|
+
*/
|
|
66
|
+
async function checkSecurityGroup(client, arn) {
|
|
67
|
+
const { resourceId, raw } = arn;
|
|
68
|
+
try {
|
|
69
|
+
const response = await client.send(new DescribeSecurityGroupsCommand({ GroupIds: [resourceId] }));
|
|
70
|
+
const securityGroup = response.SecurityGroups?.[0];
|
|
71
|
+
const exists = !!securityGroup;
|
|
72
|
+
return {
|
|
73
|
+
arn: raw,
|
|
74
|
+
exists,
|
|
75
|
+
service: "ec2",
|
|
76
|
+
resourceType: "security-group",
|
|
77
|
+
resourceId,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const err = error;
|
|
82
|
+
if (err.name === "InvalidGroup.NotFound") {
|
|
83
|
+
return {
|
|
84
|
+
arn: raw,
|
|
85
|
+
exists: false,
|
|
86
|
+
service: "ec2",
|
|
87
|
+
resourceType: "security-group",
|
|
88
|
+
resourceId,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
arn: raw,
|
|
93
|
+
exists: false,
|
|
94
|
+
error: err.message || "Unknown error",
|
|
95
|
+
service: "ec2",
|
|
96
|
+
resourceType: "security-group",
|
|
97
|
+
resourceId,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if an EC2 key pair exists
|
|
103
|
+
*/
|
|
104
|
+
async function checkKeyPair(client, arn) {
|
|
105
|
+
const { resourceId, raw } = arn;
|
|
106
|
+
try {
|
|
107
|
+
const response = await client.send(new DescribeKeyPairsCommand({ KeyNames: [resourceId] }));
|
|
108
|
+
const keyPair = response.KeyPairs?.[0];
|
|
109
|
+
const exists = !!keyPair;
|
|
110
|
+
return {
|
|
111
|
+
arn: raw,
|
|
112
|
+
exists,
|
|
113
|
+
service: "ec2",
|
|
114
|
+
resourceType: "key-pair",
|
|
115
|
+
resourceId,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const err = error;
|
|
120
|
+
if (err.name === "InvalidKeyPair.NotFound") {
|
|
121
|
+
return {
|
|
122
|
+
arn: raw,
|
|
123
|
+
exists: false,
|
|
124
|
+
service: "ec2",
|
|
125
|
+
resourceType: "key-pair",
|
|
126
|
+
resourceId,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
arn: raw,
|
|
131
|
+
exists: false,
|
|
132
|
+
error: err.message || "Unknown error",
|
|
133
|
+
service: "ec2",
|
|
134
|
+
resourceType: "key-pair",
|
|
135
|
+
resourceId,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* EC2 resource checker
|
|
141
|
+
*/
|
|
142
|
+
export const EC2Checker = {
|
|
143
|
+
async check(arn) {
|
|
144
|
+
const { resourceType, resourceId, region, raw } = arn;
|
|
145
|
+
const client = getClient(region);
|
|
146
|
+
switch (resourceType) {
|
|
147
|
+
case "instance":
|
|
148
|
+
return checkInstance(client, arn);
|
|
149
|
+
case "security-group":
|
|
150
|
+
return checkSecurityGroup(client, arn);
|
|
151
|
+
case "key-pair":
|
|
152
|
+
return checkKeyPair(client, arn);
|
|
153
|
+
default:
|
|
154
|
+
return {
|
|
155
|
+
arn: raw,
|
|
156
|
+
exists: false,
|
|
157
|
+
error: `Unsupported EC2 resource type: ${resourceType}`,
|
|
158
|
+
service: "ec2",
|
|
159
|
+
resourceType,
|
|
160
|
+
resourceId,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=ec2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ec2.js","sourceRoot":"","sources":["../../../src/infra/checkers/ec2.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAK7B;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAC;AAEjD;;GAEG;AACH,SAAS,SAAS,CAAC,MAAc;IAC/B,IAAI,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,MAAiB,EACjB,GAAc;IAEd,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,wBAAwB,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAC5D,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,KAAK,YAAY,CAAC;QAEnE,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM;YACN,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAkC,CAAC;QAE/C,IAAI,GAAG,CAAC,IAAI,KAAK,4BAA4B,EAAE,CAAC;YAC9C,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,UAAU;gBACxB,UAAU;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,eAAe;YACrC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,UAAU;SACX,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,MAAiB,EACjB,GAAc;IAEd,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,6BAA6B,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAC9D,CAAC;QAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC;QAE/B,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM;YACN,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,gBAAgB;YAC9B,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAkC,CAAC;QAE/C,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YACzC,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,gBAAgB;gBAC9B,UAAU;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,eAAe;YACrC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,gBAAgB;YAC9B,UAAU;SACX,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,MAAiB,EACjB,GAAc;IAEd,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CACxD,CAAC;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;QAEzB,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM;YACN,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAkC,CAAC;QAE/C,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;YAC3C,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,UAAU;gBACxB,UAAU;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,eAAe;YACrC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,UAAU;SACX,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAoB;IACzC,KAAK,CAAC,KAAK,CAAC,GAAc;QACxB,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QACtD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAEjC,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,UAAU;gBACb,OAAO,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAEpC,KAAK,gBAAgB;gBACnB,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAEzC,KAAK,UAAU;gBACb,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAEnC;gBACE,OAAO;oBACL,GAAG,EAAE,GAAG;oBACR,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,kCAAkC,YAAY,EAAE;oBACvD,OAAO,EAAE,KAAK;oBACd,YAAY;oBACZ,UAAU;iBACX,CAAC;QACN,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ElastiCache resource checker
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Cache clusters
|
|
6
|
+
* - Subnet groups
|
|
7
|
+
* - Replication groups
|
|
8
|
+
*/
|
|
9
|
+
import type { ResourceChecker } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* ElastiCache resource checker
|
|
12
|
+
*/
|
|
13
|
+
export declare const ElastiCacheChecker: ResourceChecker;
|
|
14
|
+
//# sourceMappingURL=elasticache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elasticache.d.ts","sourceRoot":"","sources":["../../../src/infra/checkers/elasticache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmKlD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,eA0BhC,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ElastiCache resource checker
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Cache clusters
|
|
6
|
+
* - Subnet groups
|
|
7
|
+
* - Replication groups
|
|
8
|
+
*/
|
|
9
|
+
import { DescribeCacheClustersCommand, DescribeCacheSubnetGroupsCommand, DescribeReplicationGroupsCommand, ElastiCacheClient, } from "@aws-sdk/client-elasticache";
|
|
10
|
+
/**
|
|
11
|
+
* Cache of ElastiCache clients by region
|
|
12
|
+
*/
|
|
13
|
+
const clientCache = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Get or create an ElastiCache client for a region
|
|
16
|
+
*/
|
|
17
|
+
function getClient(region) {
|
|
18
|
+
let client = clientCache.get(region);
|
|
19
|
+
if (!client) {
|
|
20
|
+
client = new ElastiCacheClient({ region });
|
|
21
|
+
clientCache.set(region, client);
|
|
22
|
+
}
|
|
23
|
+
return client;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if an ElastiCache cluster exists
|
|
27
|
+
*/
|
|
28
|
+
async function checkCacheCluster(client, arn) {
|
|
29
|
+
const { resourceId, raw } = arn;
|
|
30
|
+
try {
|
|
31
|
+
const response = await client.send(new DescribeCacheClustersCommand({ CacheClusterId: resourceId }));
|
|
32
|
+
const cluster = response.CacheClusters?.[0];
|
|
33
|
+
const exists = !!cluster && cluster.CacheClusterStatus !== "deleting";
|
|
34
|
+
return {
|
|
35
|
+
arn: raw,
|
|
36
|
+
exists,
|
|
37
|
+
service: "elasticache",
|
|
38
|
+
resourceType: "cluster",
|
|
39
|
+
resourceId,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const err = error;
|
|
44
|
+
if (err.name === "CacheClusterNotFoundFault") {
|
|
45
|
+
return {
|
|
46
|
+
arn: raw,
|
|
47
|
+
exists: false,
|
|
48
|
+
service: "elasticache",
|
|
49
|
+
resourceType: "cluster",
|
|
50
|
+
resourceId,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
arn: raw,
|
|
55
|
+
exists: false,
|
|
56
|
+
error: err.message || "Unknown error",
|
|
57
|
+
service: "elasticache",
|
|
58
|
+
resourceType: "cluster",
|
|
59
|
+
resourceId,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if an ElastiCache subnet group exists
|
|
65
|
+
*/
|
|
66
|
+
async function checkSubnetGroup(client, arn) {
|
|
67
|
+
const { resourceId, raw } = arn;
|
|
68
|
+
try {
|
|
69
|
+
const response = await client.send(new DescribeCacheSubnetGroupsCommand({ CacheSubnetGroupName: resourceId }));
|
|
70
|
+
const subnetGroup = response.CacheSubnetGroups?.[0];
|
|
71
|
+
const exists = !!subnetGroup;
|
|
72
|
+
return {
|
|
73
|
+
arn: raw,
|
|
74
|
+
exists,
|
|
75
|
+
service: "elasticache",
|
|
76
|
+
resourceType: "subnetgroup",
|
|
77
|
+
resourceId,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const err = error;
|
|
82
|
+
if (err.name === "CacheSubnetGroupNotFoundFault") {
|
|
83
|
+
return {
|
|
84
|
+
arn: raw,
|
|
85
|
+
exists: false,
|
|
86
|
+
service: "elasticache",
|
|
87
|
+
resourceType: "subnetgroup",
|
|
88
|
+
resourceId,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
arn: raw,
|
|
93
|
+
exists: false,
|
|
94
|
+
error: err.message || "Unknown error",
|
|
95
|
+
service: "elasticache",
|
|
96
|
+
resourceType: "subnetgroup",
|
|
97
|
+
resourceId,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if an ElastiCache replication group exists
|
|
103
|
+
*/
|
|
104
|
+
async function checkReplicationGroup(client, arn) {
|
|
105
|
+
const { resourceId, raw } = arn;
|
|
106
|
+
try {
|
|
107
|
+
const response = await client.send(new DescribeReplicationGroupsCommand({ ReplicationGroupId: resourceId }));
|
|
108
|
+
const replicationGroup = response.ReplicationGroups?.[0];
|
|
109
|
+
const exists = !!replicationGroup && replicationGroup.Status !== "deleting";
|
|
110
|
+
return {
|
|
111
|
+
arn: raw,
|
|
112
|
+
exists,
|
|
113
|
+
service: "elasticache",
|
|
114
|
+
resourceType: "replicationgroup",
|
|
115
|
+
resourceId,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const err = error;
|
|
120
|
+
if (err.name === "ReplicationGroupNotFoundFault") {
|
|
121
|
+
return {
|
|
122
|
+
arn: raw,
|
|
123
|
+
exists: false,
|
|
124
|
+
service: "elasticache",
|
|
125
|
+
resourceType: "replicationgroup",
|
|
126
|
+
resourceId,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
arn: raw,
|
|
131
|
+
exists: false,
|
|
132
|
+
error: err.message || "Unknown error",
|
|
133
|
+
service: "elasticache",
|
|
134
|
+
resourceType: "replicationgroup",
|
|
135
|
+
resourceId,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* ElastiCache resource checker
|
|
141
|
+
*/
|
|
142
|
+
export const ElastiCacheChecker = {
|
|
143
|
+
async check(arn) {
|
|
144
|
+
const { resourceType, resourceId, region, raw } = arn;
|
|
145
|
+
const client = getClient(region);
|
|
146
|
+
switch (resourceType) {
|
|
147
|
+
case "cluster":
|
|
148
|
+
return checkCacheCluster(client, arn);
|
|
149
|
+
case "subnetgroup":
|
|
150
|
+
return checkSubnetGroup(client, arn);
|
|
151
|
+
case "replicationgroup":
|
|
152
|
+
return checkReplicationGroup(client, arn);
|
|
153
|
+
default:
|
|
154
|
+
return {
|
|
155
|
+
arn: raw,
|
|
156
|
+
exists: false,
|
|
157
|
+
error: `Unsupported ElastiCache resource type: ${resourceType}`,
|
|
158
|
+
service: "elasticache",
|
|
159
|
+
resourceType,
|
|
160
|
+
resourceId,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=elasticache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elasticache.js","sourceRoot":"","sources":["../../../src/infra/checkers/elasticache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Elastic Load Balancing v2 resource checker
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Load balancers (ALB, NLB, GLB)
|
|
6
|
+
* - Target groups
|
|
7
|
+
* - Listeners
|
|
8
|
+
*/
|
|
9
|
+
import type { ResourceChecker } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Elastic Load Balancing resource checker
|
|
12
|
+
*/
|
|
13
|
+
export declare const ELBChecker: ResourceChecker;
|
|
14
|
+
//# sourceMappingURL=elb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elb.d.ts","sourceRoot":"","sources":["../../../src/infra/checkers/elb.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAsKlD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,eA0BxB,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Elastic Load Balancing v2 resource checker
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Load balancers (ALB, NLB, GLB)
|
|
6
|
+
* - Target groups
|
|
7
|
+
* - Listeners
|
|
8
|
+
*/
|
|
9
|
+
import { DescribeLoadBalancersCommand, DescribeTargetGroupsCommand, DescribeListenersCommand, ElasticLoadBalancingV2Client, } from "@aws-sdk/client-elastic-load-balancing-v2";
|
|
10
|
+
/**
|
|
11
|
+
* Cache of ELBv2 clients by region
|
|
12
|
+
*/
|
|
13
|
+
const clientCache = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Get or create an ELBv2 client for a region
|
|
16
|
+
*/
|
|
17
|
+
function getClient(region) {
|
|
18
|
+
let client = clientCache.get(region);
|
|
19
|
+
if (!client) {
|
|
20
|
+
client = new ElasticLoadBalancingV2Client({ region });
|
|
21
|
+
clientCache.set(region, client);
|
|
22
|
+
}
|
|
23
|
+
return client;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if a load balancer exists
|
|
27
|
+
*/
|
|
28
|
+
async function checkLoadBalancer(client, arn) {
|
|
29
|
+
const { resourceId, raw } = arn;
|
|
30
|
+
try {
|
|
31
|
+
const response = await client.send(new DescribeLoadBalancersCommand({ LoadBalancerArns: [raw] }));
|
|
32
|
+
const loadBalancer = response.LoadBalancers?.[0];
|
|
33
|
+
const exists = !!loadBalancer &&
|
|
34
|
+
loadBalancer.State?.Code !== "failed" &&
|
|
35
|
+
loadBalancer.State?.Code !== "active_impaired";
|
|
36
|
+
return {
|
|
37
|
+
arn: raw,
|
|
38
|
+
exists,
|
|
39
|
+
service: "elasticloadbalancing",
|
|
40
|
+
resourceType: "loadbalancer",
|
|
41
|
+
resourceId,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const err = error;
|
|
46
|
+
if (err.name === "LoadBalancerNotFoundException") {
|
|
47
|
+
return {
|
|
48
|
+
arn: raw,
|
|
49
|
+
exists: false,
|
|
50
|
+
service: "elasticloadbalancing",
|
|
51
|
+
resourceType: "loadbalancer",
|
|
52
|
+
resourceId,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
arn: raw,
|
|
57
|
+
exists: false,
|
|
58
|
+
error: err.message || "Unknown error",
|
|
59
|
+
service: "elasticloadbalancing",
|
|
60
|
+
resourceType: "loadbalancer",
|
|
61
|
+
resourceId,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if a target group exists
|
|
67
|
+
*/
|
|
68
|
+
async function checkTargetGroup(client, arn) {
|
|
69
|
+
const { resourceId, raw } = arn;
|
|
70
|
+
try {
|
|
71
|
+
const response = await client.send(new DescribeTargetGroupsCommand({ TargetGroupArns: [raw] }));
|
|
72
|
+
const targetGroup = response.TargetGroups?.[0];
|
|
73
|
+
const exists = !!targetGroup;
|
|
74
|
+
return {
|
|
75
|
+
arn: raw,
|
|
76
|
+
exists,
|
|
77
|
+
service: "elasticloadbalancing",
|
|
78
|
+
resourceType: "targetgroup",
|
|
79
|
+
resourceId,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const err = error;
|
|
84
|
+
if (err.name === "TargetGroupNotFoundException") {
|
|
85
|
+
return {
|
|
86
|
+
arn: raw,
|
|
87
|
+
exists: false,
|
|
88
|
+
service: "elasticloadbalancing",
|
|
89
|
+
resourceType: "targetgroup",
|
|
90
|
+
resourceId,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
arn: raw,
|
|
95
|
+
exists: false,
|
|
96
|
+
error: err.message || "Unknown error",
|
|
97
|
+
service: "elasticloadbalancing",
|
|
98
|
+
resourceType: "targetgroup",
|
|
99
|
+
resourceId,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if a listener exists
|
|
105
|
+
*/
|
|
106
|
+
async function checkListener(client, arn) {
|
|
107
|
+
const { resourceId, raw } = arn;
|
|
108
|
+
try {
|
|
109
|
+
const response = await client.send(new DescribeListenersCommand({ ListenerArns: [raw] }));
|
|
110
|
+
const listener = response.Listeners?.[0];
|
|
111
|
+
const exists = !!listener;
|
|
112
|
+
return {
|
|
113
|
+
arn: raw,
|
|
114
|
+
exists,
|
|
115
|
+
service: "elasticloadbalancing",
|
|
116
|
+
resourceType: "listener",
|
|
117
|
+
resourceId,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const err = error;
|
|
122
|
+
if (err.name === "ListenerNotFoundException") {
|
|
123
|
+
return {
|
|
124
|
+
arn: raw,
|
|
125
|
+
exists: false,
|
|
126
|
+
service: "elasticloadbalancing",
|
|
127
|
+
resourceType: "listener",
|
|
128
|
+
resourceId,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
arn: raw,
|
|
133
|
+
exists: false,
|
|
134
|
+
error: err.message || "Unknown error",
|
|
135
|
+
service: "elasticloadbalancing",
|
|
136
|
+
resourceType: "listener",
|
|
137
|
+
resourceId,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Elastic Load Balancing resource checker
|
|
143
|
+
*/
|
|
144
|
+
export const ELBChecker = {
|
|
145
|
+
async check(arn) {
|
|
146
|
+
const { resourceType, resourceId, region, raw } = arn;
|
|
147
|
+
const client = getClient(region);
|
|
148
|
+
switch (resourceType) {
|
|
149
|
+
case "loadbalancer":
|
|
150
|
+
return checkLoadBalancer(client, arn);
|
|
151
|
+
case "targetgroup":
|
|
152
|
+
return checkTargetGroup(client, arn);
|
|
153
|
+
case "listener":
|
|
154
|
+
return checkListener(client, arn);
|
|
155
|
+
default:
|
|
156
|
+
return {
|
|
157
|
+
arn: raw,
|
|
158
|
+
exists: false,
|
|
159
|
+
error: `Unsupported ELB resource type: ${resourceType}`,
|
|
160
|
+
service: "elasticloadbalancing",
|
|
161
|
+
resourceType,
|
|
162
|
+
resourceId,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=elb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elb.js","sourceRoot":"","sources":["../../../src/infra/checkers/elb.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import type { ResourceChecker } from "./types.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* Supported AWS services for resource checking
|
|
9
9
|
*/
|
|
10
|
-
export declare const SUPPORTED_SERVICES: readonly ["s3", "lambda", "dynamodb", "sqs", "sns", "iam", "secretsmanager", "logs", "ecs", "rds"];
|
|
10
|
+
export declare const SUPPORTED_SERVICES: readonly ["s3", "lambda", "dynamodb", "sqs", "sns", "iam", "secretsmanager", "logs", "ecs", "rds", "ec2", "elasticache", "elasticloadbalancing"];
|
|
11
11
|
export type SupportedService = (typeof SUPPORTED_SERVICES)[number];
|
|
12
12
|
/**
|
|
13
13
|
* Check if a service is supported
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/checkers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infra/checkers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,kBAAkB,kJAcrB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,gBAAgB,CAE/E;AA0BD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAiBtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -17,6 +17,9 @@ export const SUPPORTED_SERVICES = [
|
|
|
17
17
|
"logs",
|
|
18
18
|
"ecs",
|
|
19
19
|
"rds",
|
|
20
|
+
"ec2",
|
|
21
|
+
"elasticache",
|
|
22
|
+
"elasticloadbalancing",
|
|
20
23
|
];
|
|
21
24
|
/**
|
|
22
25
|
* Check if a service is supported
|
|
@@ -38,6 +41,9 @@ const checkerFactories = {
|
|
|
38
41
|
logs: async () => (await import("./cloudwatch.js")).CloudWatchLogsChecker,
|
|
39
42
|
ecs: async () => (await import("./ecs.js")).ECSChecker,
|
|
40
43
|
rds: async () => (await import("./rds.js")).RDSChecker,
|
|
44
|
+
ec2: async () => (await import("./ec2.js")).EC2Checker,
|
|
45
|
+
elasticache: async () => (await import("./elasticache.js")).ElastiCacheChecker,
|
|
46
|
+
elasticloadbalancing: async () => (await import("./elb.js")).ELBChecker,
|
|
41
47
|
};
|
|
42
48
|
/**
|
|
43
49
|
* Cache of loaded checkers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/checkers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI;IACJ,QAAQ;IACR,UAAU;IACV,KAAK;IACL,KAAK;IACL,KAAK;IACL,gBAAgB;IAChB,MAAM;IACN,KAAK;IACL,KAAK;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infra/checkers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI;IACJ,QAAQ;IACR,UAAU;IACV,KAAK;IACL,KAAK;IACL,KAAK;IACL,gBAAgB;IAChB,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,aAAa;IACb,sBAAsB;CACd,CAAC;AAIX;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,OAA2B,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,gBAAgB,GAA6D;IACjF,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;IACnD,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa;IAC/D,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe;IACrE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;IACtD,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;IACtD,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;IACtD,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB;IACvF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB;IACzE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;IACtD,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;IACtD,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;IACtD,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;IAC9E,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;CACxE,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe;IAC9C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qCAAqC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6BAA6B;IAC7B,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;IAChC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/infra/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmB3C,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/infra/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmB3C,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA0FD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAgCjF;AAsCD;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAWxG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,QAAQ,CAe1G;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAS3G"}
|
package/dist/infra/generate.js
CHANGED
|
@@ -10,11 +10,31 @@ import { isValidArn } from "./arn.js";
|
|
|
10
10
|
import { isValidGcpResource } from "./gcp.js";
|
|
11
11
|
/** Default manifest filename */
|
|
12
12
|
export const DEFAULT_MANIFEST_NAME = "infra-manifest.json";
|
|
13
|
+
/**
|
|
14
|
+
* Clean a resource identifier by stripping Pulumi internal suffixes
|
|
15
|
+
*
|
|
16
|
+
* Pulumi sometimes appends internal metadata to ARNs like:
|
|
17
|
+
* arn:aws:secretsmanager:...:secret:name|terraform-20260123...
|
|
18
|
+
*
|
|
19
|
+
* The pipe and everything after it should be stripped.
|
|
20
|
+
*/
|
|
21
|
+
function cleanResourceIdentifier(value) {
|
|
22
|
+
const pipeIndex = value.indexOf("|");
|
|
23
|
+
if (pipeIndex !== -1) {
|
|
24
|
+
return value.substring(0, pipeIndex);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
13
28
|
/**
|
|
14
29
|
* Check if a value is a valid resource identifier (AWS ARN or GCP path)
|
|
15
30
|
*/
|
|
16
31
|
function isValidResource(value) {
|
|
17
|
-
|
|
32
|
+
if (typeof value !== "string") {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
// Clean the value before validating (strip Pulumi suffixes)
|
|
36
|
+
const cleaned = cleanResourceIdentifier(value);
|
|
37
|
+
return isValidArn(cleaned) || isValidGcpResource(cleaned);
|
|
18
38
|
}
|
|
19
39
|
/**
|
|
20
40
|
* Extract ARNs and resource identifiers from Pulumi resource outputs
|
|
@@ -43,13 +63,13 @@ function extractResourcesFromOutputs(outputs) {
|
|
|
43
63
|
for (const field of arnFields) {
|
|
44
64
|
const value = outputs[field];
|
|
45
65
|
if (isValidResource(value)) {
|
|
46
|
-
resources.push(value);
|
|
66
|
+
resources.push(cleanResourceIdentifier(value));
|
|
47
67
|
}
|
|
48
68
|
}
|
|
49
69
|
// Also check for any other fields that look like ARNs or GCP resources
|
|
50
70
|
for (const [key, value] of Object.entries(outputs)) {
|
|
51
71
|
if (!arnFields.includes(key) && isValidResource(value)) {
|
|
52
|
-
resources.push(value);
|
|
72
|
+
resources.push(cleanResourceIdentifier(value));
|
|
53
73
|
}
|
|
54
74
|
}
|
|
55
75
|
return resources;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/infra/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAoB9C,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAc3D;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/infra/generate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "check-my-toolkit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Unified project health checks - code, process, and infra",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -53,7 +53,10 @@
|
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"@aws-sdk/client-cloudwatch-logs": "^3.974.0",
|
|
55
55
|
"@aws-sdk/client-dynamodb": "^3.974.0",
|
|
56
|
+
"@aws-sdk/client-ec2": "^3.975.0",
|
|
56
57
|
"@aws-sdk/client-ecs": "^3.975.0",
|
|
58
|
+
"@aws-sdk/client-elastic-load-balancing-v2": "^3.975.0",
|
|
59
|
+
"@aws-sdk/client-elasticache": "^3.975.0",
|
|
57
60
|
"@aws-sdk/client-iam": "^3.974.0",
|
|
58
61
|
"@aws-sdk/client-lambda": "^3.974.0",
|
|
59
62
|
"@aws-sdk/client-rds": "^3.975.0",
|