@standards-kit/conform 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/{chunk-RXA4FO7L.js → chunk-NADY2H35.js} +12 -8
  2. package/dist/chunk-NADY2H35.js.map +1 -0
  3. package/dist/chunk-O745CMWG.js +29 -0
  4. package/dist/chunk-O745CMWG.js.map +1 -0
  5. package/dist/chunk-RHM53NLG.js +49 -0
  6. package/dist/chunk-RHM53NLG.js.map +1 -0
  7. package/dist/{chunk-PZ2NVKI7.js → chunk-YGDEM6K5.js} +19 -5
  8. package/dist/chunk-YGDEM6K5.js.map +1 -0
  9. package/dist/cli.js +47 -36
  10. package/dist/cli.js.map +1 -1
  11. package/dist/{cloudwatch-KSZ4A256.js → cloudwatch-3LTDYG6G.js} +6 -10
  12. package/dist/cloudwatch-3LTDYG6G.js.map +1 -0
  13. package/dist/constants.d.ts +69 -0
  14. package/dist/core/schema.d.ts +28 -0
  15. package/dist/{core-KB2W6SE2.js → core-QRFGIQ42.js} +3 -2
  16. package/dist/{dynamodb-5KVESCVJ.js → dynamodb-HQH3IMAI.js} +6 -10
  17. package/dist/dynamodb-HQH3IMAI.js.map +1 -0
  18. package/dist/{ec2-HKPE6GZV.js → ec2-AEPT735A.js} +6 -10
  19. package/dist/ec2-AEPT735A.js.map +1 -0
  20. package/dist/{ecs-OS3NJZTA.js → ecs-UHKCH5A7.js} +6 -10
  21. package/dist/ecs-UHKCH5A7.js.map +1 -0
  22. package/dist/{elasticache-7TCRHYYM.js → elasticache-5Y6K7GKJ.js} +6 -10
  23. package/dist/elasticache-5Y6K7GKJ.js.map +1 -0
  24. package/dist/{elb-PEDLXW5R.js → elb-CN6ELVM5.js} +6 -10
  25. package/dist/elb-CN6ELVM5.js.map +1 -0
  26. package/dist/{iam-7H5HFWVQ.js → iam-YXMHK2MV.js} +6 -2
  27. package/dist/iam-YXMHK2MV.js.map +1 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +92 -118
  30. package/dist/index.js.map +1 -1
  31. package/dist/infra/checkers/client-factory.d.ts +45 -0
  32. package/dist/infra/schemas.d.ts +4 -4
  33. package/dist/{infra-ZQRXX7AW.js → infra-TO54IUSC.js} +20 -18
  34. package/dist/{infra-ZQRXX7AW.js.map → infra-TO54IUSC.js.map} +1 -1
  35. package/dist/{lambda-NFB5UILT.js → lambda-YTJOCYV5.js} +6 -10
  36. package/dist/lambda-YTJOCYV5.js.map +1 -0
  37. package/dist/{mcp-WXYRFNEV.js → mcp-73FZXT3P.js} +4 -3
  38. package/dist/{mcp-WXYRFNEV.js.map → mcp-73FZXT3P.js.map} +1 -1
  39. package/dist/projects/tier-loader.d.ts +10 -3
  40. package/dist/projects/types.d.ts +4 -4
  41. package/dist/{rds-KLG5O5SI.js → rds-GZ5RVPIU.js} +6 -10
  42. package/dist/rds-GZ5RVPIU.js.map +1 -0
  43. package/dist/{registry-7CDIMOLZ.js → registry-JRCQAIHR.js} +3 -2
  44. package/dist/{s3-2DH7PRVR.js → s3-53UELUWT.js} +16 -12
  45. package/dist/s3-53UELUWT.js.map +1 -0
  46. package/dist/s3-S4GXNR7H.js +53 -0
  47. package/dist/s3-S4GXNR7H.js.map +1 -0
  48. package/dist/{scan-IKEHLZXV.js → scan-RHQWHASY.js} +4 -3
  49. package/dist/{scan-IKEHLZXV.js.map → scan-RHQWHASY.js.map} +1 -1
  50. package/dist/{secretsmanager-MOOIHLAO.js → secretsmanager-FJKTPIXI.js} +6 -10
  51. package/dist/secretsmanager-FJKTPIXI.js.map +1 -0
  52. package/dist/{sns-Y36LVTWA.js → sns-RV64OMK2.js} +6 -10
  53. package/dist/sns-RV64OMK2.js.map +1 -0
  54. package/dist/{sqs-RRS3GRHK.js → sqs-MHBW6UFC.js} +6 -10
  55. package/dist/sqs-MHBW6UFC.js.map +1 -0
  56. package/dist/{standards-RXK5G4IG.js → standards-XAZKTKYJ.js} +3 -2
  57. package/dist/{sync-XV6XBLVZ.js → sync-P3UZECLW.js} +3 -2
  58. package/dist/{sync-XV6XBLVZ.js.map → sync-P3UZECLW.js.map} +1 -1
  59. package/dist/validate/index.d.ts +1 -1
  60. package/dist/validate/tier.d.ts +3 -0
  61. package/dist/validate/types.d.ts +3 -9
  62. package/dist/{validate-DKEJICCK.js → validate-J5E336GX.js} +52 -83
  63. package/dist/validate-J5E336GX.js.map +1 -0
  64. package/package.json +5 -15
  65. package/dist/chunk-PZ2NVKI7.js.map +0 -1
  66. package/dist/chunk-RXA4FO7L.js.map +0 -1
  67. package/dist/cloudwatch-KSZ4A256.js.map +0 -1
  68. package/dist/dynamodb-5KVESCVJ.js.map +0 -1
  69. package/dist/ec2-HKPE6GZV.js.map +0 -1
  70. package/dist/ecs-OS3NJZTA.js.map +0 -1
  71. package/dist/elasticache-7TCRHYYM.js.map +0 -1
  72. package/dist/elb-PEDLXW5R.js.map +0 -1
  73. package/dist/iam-7H5HFWVQ.js.map +0 -1
  74. package/dist/lambda-NFB5UILT.js.map +0 -1
  75. package/dist/rds-KLG5O5SI.js.map +0 -1
  76. package/dist/s3-2DH7PRVR.js.map +0 -1
  77. package/dist/secretsmanager-MOOIHLAO.js.map +0 -1
  78. package/dist/sns-Y36LVTWA.js.map +0 -1
  79. package/dist/sqs-RRS3GRHK.js.map +0 -1
  80. package/dist/validate-DKEJICCK.js.map +0 -1
  81. /package/dist/{core-KB2W6SE2.js.map → core-QRFGIQ42.js.map} +0 -0
  82. /package/dist/{registry-7CDIMOLZ.js.map → registry-JRCQAIHR.js.map} +0 -0
  83. /package/dist/{standards-RXK5G4IG.js.map → standards-XAZKTKYJ.js.map} +0 -0
@@ -1,14 +1,10 @@
1
+ import {
2
+ createClientFactory
3
+ } from "./chunk-O745CMWG.js";
4
+
1
5
  // src/infra/checkers/cloudwatch.ts
2
6
  import { CloudWatchLogsClient, DescribeLogGroupsCommand } from "@aws-sdk/client-cloudwatch-logs";
3
- var clientCache = /* @__PURE__ */ new Map();
4
- function getClient(region) {
5
- let client = clientCache.get(region);
6
- if (!client) {
7
- client = new CloudWatchLogsClient({ region });
8
- clientCache.set(region, client);
9
- }
10
- return client;
11
- }
7
+ var getClient = createClientFactory(CloudWatchLogsClient);
12
8
  var CloudWatchLogsChecker = {
13
9
  async check(arn) {
14
10
  const { resourceId, region, raw } = arn;
@@ -53,4 +49,4 @@ var CloudWatchLogsChecker = {
53
49
  export {
54
50
  CloudWatchLogsChecker
55
51
  };
56
- //# sourceMappingURL=cloudwatch-KSZ4A256.js.map
52
+ //# sourceMappingURL=cloudwatch-3LTDYG6G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/cloudwatch.ts"],"sourcesContent":["/**\n * CloudWatch Logs resource checker\n */\n\nimport { CloudWatchLogsClient, DescribeLogGroupsCommand } from \"@aws-sdk/client-cloudwatch-logs\";\n\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport { createClientFactory } from \"./client-factory.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * Get or create a CloudWatch Logs client for a region\n */\nconst getClient = createClientFactory(CloudWatchLogsClient);\n\n/**\n * CloudWatch Logs log group checker\n */\nexport const CloudWatchLogsChecker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceId, region, raw } = arn;\n\n const client = getClient(region);\n\n try {\n // DescribeLogGroups filters by prefix, so we need to check the results\n const response = await client.send(\n new DescribeLogGroupsCommand({\n logGroupNamePrefix: resourceId,\n limit: 1,\n })\n );\n\n // Check if we found an exact match\n const found = response.logGroups?.some((lg) => lg.logGroupName === resourceId);\n\n return {\n arn: raw,\n exists: Boolean(found),\n service: \"logs\",\n resourceType: \"log-group\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"ResourceNotFoundException\") {\n return {\n arn: raw,\n exists: false,\n service: \"logs\",\n resourceType: \"log-group\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"logs\",\n resourceType: \"log-group\",\n resourceId,\n };\n }\n },\n};\n"],"mappings":";;;;;AAIA,SAAS,sBAAsB,gCAAgC;AAS/D,IAAM,YAAY,oBAAoB,oBAAoB;AAKnD,IAAM,wBAAyC;AAAA,EACpD,MAAM,MAAM,KAA8C;AACxD,UAAM,EAAE,YAAY,QAAQ,IAAI,IAAI;AAEpC,UAAM,SAAS,UAAU,MAAM;AAE/B,QAAI;AAEF,YAAM,WAAW,MAAM,OAAO;AAAA,QAC5B,IAAI,yBAAyB;AAAA,UAC3B,oBAAoB;AAAA,UACpB,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAGA,YAAM,QAAQ,SAAS,WAAW,KAAK,CAAC,OAAO,GAAG,iBAAiB,UAAU;AAE7E,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ,QAAQ,KAAK;AAAA,QACrB,SAAS;AAAA,QACT,cAAc;AAAA,QACd;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM;AAEZ,UAAI,IAAI,SAAS,6BAA6B;AAC5C,eAAO;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,cAAc;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,IAAI,WAAW;AAAA,QACtB,SAAS;AAAA,QACT,cAAc;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Centralized constants for the conform package.
3
+ * Consolidates all hardcoded values for easier maintenance and configuration.
4
+ */
5
+ /**
6
+ * Timeout values in milliseconds
7
+ */
8
+ export declare const TIMEOUTS: {
9
+ /** Git clone/pull operation timeout (30 seconds) */
10
+ readonly git: 30000;
11
+ /** Standard code tool execution timeout (5 minutes) */
12
+ readonly codeTool: number;
13
+ /** Extended timeout for longer operations like coverage runs (10 minutes) */
14
+ readonly codeToolExtended: number;
15
+ /** Quick operation timeout for version checks, etc (30 seconds) */
16
+ readonly quick: 30000;
17
+ /** Gitleaks version check timeout (10 seconds) */
18
+ readonly versionCheck: 10000;
19
+ };
20
+ /**
21
+ * AWS configuration defaults
22
+ */
23
+ export declare const AWS_DEFAULTS: {
24
+ /** Default region for global AWS services (IAM, S3 global operations) */
25
+ readonly globalRegion: "us-east-1";
26
+ };
27
+ /**
28
+ * GitHub API configuration
29
+ */
30
+ export declare const GITHUB_API: {
31
+ /** Base URL for GitHub API (can be overridden via GITHUB_API_URL env var for GitHub Enterprise) */
32
+ readonly baseUrl: string;
33
+ /** Number of items per page for pagination */
34
+ readonly perPage: 100;
35
+ };
36
+ /**
37
+ * Standards repository defaults
38
+ */
39
+ export declare const STANDARDS_REPO: {
40
+ /** Default owner for standards repository (can be overridden via STANDARDS_REPO_OWNER env var) */
41
+ readonly owner: string;
42
+ /** Default repository name (can be overridden via STANDARDS_REPO_NAME env var) */
43
+ readonly repo: string;
44
+ };
45
+ /**
46
+ * Cache directory configuration
47
+ */
48
+ export declare const CACHE: {
49
+ /** Base directory name for standards cache (can be overridden via CM_STANDARDS_CACHE_DIR env var) */
50
+ readonly standardsCacheDir: string;
51
+ /** Base directory name for registry cache */
52
+ readonly registryCacheDir: "conform-registry-cache";
53
+ };
54
+ /**
55
+ * Concurrency limits
56
+ */
57
+ export declare const CONCURRENCY: {
58
+ /** Default concurrency for infrastructure resource checks */
59
+ readonly infraScan: 10;
60
+ };
61
+ /**
62
+ * Default threshold values
63
+ */
64
+ export declare const DEFAULTS: {
65
+ /** Default backup max age in hours */
66
+ readonly backupMaxAgeHours: 24;
67
+ /** Default code coverage minimum threshold */
68
+ readonly coverageMinThreshold: 80;
69
+ };
@@ -4,6 +4,22 @@ declare const DEFAULT_FORBIDDEN_FILES_IGNORE: string[];
4
4
  export { DEFAULT_FORBIDDEN_FILES_IGNORE };
5
5
  /** Full standards.toml schema */
6
6
  export declare const configSchema: z.ZodObject<{
7
+ metadata: z.ZodOptional<z.ZodObject<{
8
+ tier: z.ZodEnum<["production", "internal", "prototype"]>;
9
+ project: z.ZodOptional<z.ZodString>;
10
+ organisation: z.ZodOptional<z.ZodString>;
11
+ status: z.ZodDefault<z.ZodOptional<z.ZodEnum<["active", "pre-release", "deprecated"]>>>;
12
+ }, "strict", z.ZodTypeAny, {
13
+ status: "active" | "pre-release" | "deprecated";
14
+ tier: "production" | "internal" | "prototype";
15
+ project?: string | undefined;
16
+ organisation?: string | undefined;
17
+ }, {
18
+ tier: "production" | "internal" | "prototype";
19
+ status?: "active" | "pre-release" | "deprecated" | undefined;
20
+ project?: string | undefined;
21
+ organisation?: string | undefined;
22
+ }>>;
7
23
  extends: z.ZodOptional<z.ZodObject<{
8
24
  registry: z.ZodString;
9
25
  rulesets: z.ZodArray<z.ZodString, "many">;
@@ -1442,6 +1458,12 @@ export declare const configSchema: z.ZodObject<{
1442
1458
  } | undefined;
1443
1459
  } | undefined;
1444
1460
  } | undefined;
1461
+ metadata?: {
1462
+ status: "active" | "pre-release" | "deprecated";
1463
+ tier: "production" | "internal" | "prototype";
1464
+ project?: string | undefined;
1465
+ organisation?: string | undefined;
1466
+ } | undefined;
1445
1467
  extends?: {
1446
1468
  registry: string;
1447
1469
  rulesets: string[];
@@ -1681,6 +1703,12 @@ export declare const configSchema: z.ZodObject<{
1681
1703
  } | undefined;
1682
1704
  } | undefined;
1683
1705
  } | undefined;
1706
+ metadata?: {
1707
+ tier: "production" | "internal" | "prototype";
1708
+ status?: "active" | "pre-release" | "deprecated" | undefined;
1709
+ project?: string | undefined;
1710
+ organisation?: string | undefined;
1711
+ } | undefined;
1684
1712
  extends?: {
1685
1713
  registry: string;
1686
1714
  rulesets: string[];
@@ -20,7 +20,8 @@ import {
20
20
  mergeConfigs,
21
21
  parseRegistryUrl,
22
22
  resolveExtends
23
- } from "./chunk-PZ2NVKI7.js";
23
+ } from "./chunk-YGDEM6K5.js";
24
+ import "./chunk-RHM53NLG.js";
24
25
  export {
25
26
  CONFIG_FILE_NAME,
26
27
  CheckResultBuilder,
@@ -42,4 +43,4 @@ export {
42
43
  parseRegistryUrl,
43
44
  resolveExtends
44
45
  };
45
- //# sourceMappingURL=core-KB2W6SE2.js.map
46
+ //# sourceMappingURL=core-QRFGIQ42.js.map
@@ -1,14 +1,10 @@
1
+ import {
2
+ createClientFactory
3
+ } from "./chunk-O745CMWG.js";
4
+
1
5
  // src/infra/checkers/dynamodb.ts
2
6
  import { DescribeTableCommand, DynamoDBClient } from "@aws-sdk/client-dynamodb";
3
- var clientCache = /* @__PURE__ */ new Map();
4
- function getClient(region) {
5
- let client = clientCache.get(region);
6
- if (!client) {
7
- client = new DynamoDBClient({ region });
8
- clientCache.set(region, client);
9
- }
10
- return client;
11
- }
7
+ var getClient = createClientFactory(DynamoDBClient);
12
8
  var DynamoDBChecker = {
13
9
  async check(arn) {
14
10
  const { resourceType, resourceId, region, raw } = arn;
@@ -48,4 +44,4 @@ var DynamoDBChecker = {
48
44
  export {
49
45
  DynamoDBChecker
50
46
  };
51
- //# sourceMappingURL=dynamodb-5KVESCVJ.js.map
47
+ //# sourceMappingURL=dynamodb-HQH3IMAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/dynamodb.ts"],"sourcesContent":["/**\n * DynamoDB resource checker\n */\n\nimport { DescribeTableCommand, DynamoDBClient } from \"@aws-sdk/client-dynamodb\";\n\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport { createClientFactory } from \"./client-factory.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * Get or create a DynamoDB client for a region\n */\nconst getClient = createClientFactory(DynamoDBClient);\n\n/**\n * DynamoDB table checker\n */\nexport const DynamoDBChecker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceType, resourceId, region, raw } = arn;\n\n // Extract table name (might be \"table-name\" or \"table-name/index/index-name\")\n const tableName = resourceId.split(\"/\")[0];\n\n const client = getClient(region);\n\n try {\n await client.send(new DescribeTableCommand({ TableName: tableName }));\n return {\n arn: raw,\n exists: true,\n service: \"dynamodb\",\n resourceType,\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"ResourceNotFoundException\") {\n return {\n arn: raw,\n exists: false,\n service: \"dynamodb\",\n resourceType,\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"dynamodb\",\n resourceType,\n resourceId,\n };\n }\n },\n};\n"],"mappings":";;;;;AAIA,SAAS,sBAAsB,sBAAsB;AASrD,IAAM,YAAY,oBAAoB,cAAc;AAK7C,IAAM,kBAAmC;AAAA,EAC9C,MAAM,MAAM,KAA8C;AACxD,UAAM,EAAE,cAAc,YAAY,QAAQ,IAAI,IAAI;AAGlD,UAAM,YAAY,WAAW,MAAM,GAAG,EAAE,CAAC;AAEzC,UAAM,SAAS,UAAU,MAAM;AAE/B,QAAI;AACF,YAAM,OAAO,KAAK,IAAI,qBAAqB,EAAE,WAAW,UAAU,CAAC,CAAC;AACpE,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM;AAEZ,UAAI,IAAI,SAAS,6BAA6B;AAC5C,eAAO;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,IAAI,WAAW;AAAA,QACtB,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,3 +1,7 @@
1
+ import {
2
+ createClientFactory
3
+ } from "./chunk-O745CMWG.js";
4
+
1
5
  // src/infra/checkers/ec2.ts
2
6
  import {
3
7
  DescribeInstancesCommand,
@@ -5,15 +9,7 @@ import {
5
9
  DescribeKeyPairsCommand,
6
10
  EC2Client
7
11
  } from "@aws-sdk/client-ec2";
8
- var clientCache = /* @__PURE__ */ new Map();
9
- function getClient(region) {
10
- let client = clientCache.get(region);
11
- if (!client) {
12
- client = new EC2Client({ region });
13
- clientCache.set(region, client);
14
- }
15
- return client;
16
- }
12
+ var getClient = createClientFactory(EC2Client);
17
13
  async function checkInstance(client, arn) {
18
14
  const { resourceId, raw } = arn;
19
15
  try {
@@ -148,4 +144,4 @@ var EC2Checker = {
148
144
  export {
149
145
  EC2Checker
150
146
  };
151
- //# sourceMappingURL=ec2-HKPE6GZV.js.map
147
+ //# sourceMappingURL=ec2-AEPT735A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/ec2.ts"],"sourcesContent":["/**\n * EC2 resource checker\n *\n * Supports:\n * - Instances\n * - Security groups\n * - Key pairs\n */\n\nimport {\n DescribeInstancesCommand,\n DescribeSecurityGroupsCommand,\n DescribeKeyPairsCommand,\n EC2Client,\n} from \"@aws-sdk/client-ec2\";\n\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport { createClientFactory } from \"./client-factory.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * Get or create an EC2 client for a region\n */\nconst getClient = createClientFactory(EC2Client);\n\n/**\n * Check if an EC2 instance exists\n */\nasync function checkInstance(\n client: EC2Client,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeInstancesCommand({ InstanceIds: [resourceId] })\n );\n\n const instance = response.Reservations?.[0]?.Instances?.[0];\n const exists = !!instance && instance.State?.Name !== \"terminated\";\n\n return {\n arn: raw,\n exists,\n service: \"ec2\",\n resourceType: \"instance\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"InvalidInstanceID.NotFound\") {\n return {\n arn: raw,\n exists: false,\n service: \"ec2\",\n resourceType: \"instance\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"ec2\",\n resourceType: \"instance\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if an EC2 security group exists\n */\nasync function checkSecurityGroup(\n client: EC2Client,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeSecurityGroupsCommand({ GroupIds: [resourceId] })\n );\n\n const securityGroup = response.SecurityGroups?.[0];\n const exists = !!securityGroup;\n\n return {\n arn: raw,\n exists,\n service: \"ec2\",\n resourceType: \"security-group\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"InvalidGroup.NotFound\") {\n return {\n arn: raw,\n exists: false,\n service: \"ec2\",\n resourceType: \"security-group\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"ec2\",\n resourceType: \"security-group\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if an EC2 key pair exists\n */\nasync function checkKeyPair(\n client: EC2Client,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeKeyPairsCommand({ KeyNames: [resourceId] })\n );\n\n const keyPair = response.KeyPairs?.[0];\n const exists = !!keyPair;\n\n return {\n arn: raw,\n exists,\n service: \"ec2\",\n resourceType: \"key-pair\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"InvalidKeyPair.NotFound\") {\n return {\n arn: raw,\n exists: false,\n service: \"ec2\",\n resourceType: \"key-pair\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"ec2\",\n resourceType: \"key-pair\",\n resourceId,\n };\n }\n}\n\n/**\n * EC2 resource checker\n */\nexport const EC2Checker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceType, resourceId, region, raw } = arn;\n const client = getClient(region);\n\n switch (resourceType) {\n case \"instance\":\n return checkInstance(client, arn);\n\n case \"security-group\":\n return checkSecurityGroup(client, arn);\n\n case \"key-pair\":\n return checkKeyPair(client, arn);\n\n default:\n return {\n arn: raw,\n exists: false,\n error: `Unsupported EC2 resource type: ${resourceType}`,\n service: \"ec2\",\n resourceType,\n resourceId,\n };\n }\n },\n};\n"],"mappings":"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","names":[]}
@@ -1,3 +1,7 @@
1
+ import {
2
+ createClientFactory
3
+ } from "./chunk-O745CMWG.js";
4
+
1
5
  // src/infra/checkers/ecs.ts
2
6
  import {
3
7
  DescribeClustersCommand,
@@ -5,15 +9,7 @@ import {
5
9
  DescribeTaskDefinitionCommand,
6
10
  ECSClient
7
11
  } from "@aws-sdk/client-ecs";
8
- var clientCache = /* @__PURE__ */ new Map();
9
- function getClient(region) {
10
- let client = clientCache.get(region);
11
- if (!client) {
12
- client = new ECSClient({ region });
13
- clientCache.set(region, client);
14
- }
15
- return client;
16
- }
12
+ var getClient = createClientFactory(ECSClient);
17
13
  async function checkCluster(client, arn) {
18
14
  const { resourceId, raw } = arn;
19
15
  try {
@@ -138,4 +134,4 @@ var ECSChecker = {
138
134
  export {
139
135
  ECSChecker
140
136
  };
141
- //# sourceMappingURL=ecs-OS3NJZTA.js.map
137
+ //# sourceMappingURL=ecs-UHKCH5A7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/ecs.ts"],"sourcesContent":["/**\n * ECS resource checker\n *\n * Supports:\n * - Clusters\n * - Services\n * - Task definitions\n */\n\nimport {\n DescribeClustersCommand,\n DescribeServicesCommand,\n DescribeTaskDefinitionCommand,\n ECSClient,\n} from \"@aws-sdk/client-ecs\";\n\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport { createClientFactory } from \"./client-factory.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * Get or create an ECS client for a region\n */\nconst getClient = createClientFactory(ECSClient);\n\n/**\n * Check if an ECS cluster exists\n */\nasync function checkCluster(\n client: ECSClient,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeClustersCommand({ clusters: [raw] })\n );\n\n const cluster = response.clusters?.[0];\n const exists = cluster?.status === \"ACTIVE\";\n\n return {\n arn: raw,\n exists,\n service: \"ecs\",\n resourceType: \"cluster\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error;\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"ecs\",\n resourceType: \"cluster\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if an ECS service exists\n *\n * Service ARN format: arn:aws:ecs:region:account:service/cluster/service-name\n */\nasync function checkService(\n client: ECSClient,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw, accountId, region } = arn;\n\n // resourceId format: cluster-name/service-name\n const parts = resourceId.split(\"/\");\n if (parts.length < 2) {\n return {\n arn: raw,\n exists: false,\n error: \"Invalid service ARN format\",\n service: \"ecs\",\n resourceType: \"service\",\n resourceId,\n };\n }\n\n const clusterName = parts[0];\n const serviceName = parts[1];\n const clusterArn = `arn:aws:ecs:${region}:${accountId}:cluster/${clusterName}`;\n\n try {\n const response = await client.send(\n new DescribeServicesCommand({\n cluster: clusterArn,\n services: [serviceName],\n })\n );\n\n const service = response.services?.[0];\n const exists = service?.status === \"ACTIVE\";\n\n return {\n arn: raw,\n exists,\n service: \"ecs\",\n resourceType: \"service\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error;\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"ecs\",\n resourceType: \"service\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if an ECS task definition exists\n *\n * Task definition ARN format: arn:aws:ecs:region:account:task-definition/name:revision\n * or: arn:aws:ecs:region:account:task-definition/name (latest)\n */\nasync function checkTaskDefinition(\n client: ECSClient,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeTaskDefinitionCommand({ taskDefinition: raw })\n );\n\n const taskDef = response.taskDefinition;\n const exists = taskDef?.status === \"ACTIVE\";\n\n return {\n arn: raw,\n exists,\n service: \"ecs\",\n resourceType: \"task-definition\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error;\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"ecs\",\n resourceType: \"task-definition\",\n resourceId,\n };\n }\n}\n\n/**\n * ECS resource checker\n */\nexport const ECSChecker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceType, resourceId, region, raw } = arn;\n const client = getClient(region);\n\n switch (resourceType) {\n case \"cluster\":\n return checkCluster(client, arn);\n\n case \"service\":\n return checkService(client, arn);\n\n case \"task-definition\":\n return checkTaskDefinition(client, arn);\n\n default:\n return {\n arn: raw,\n exists: false,\n error: `Unsupported ECS resource type: ${resourceType}`,\n service: \"ecs\",\n resourceType,\n resourceId,\n };\n }\n },\n};\n"],"mappings":"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","names":[]}
@@ -1,3 +1,7 @@
1
+ import {
2
+ createClientFactory
3
+ } from "./chunk-O745CMWG.js";
4
+
1
5
  // src/infra/checkers/elasticache.ts
2
6
  import {
3
7
  DescribeCacheClustersCommand,
@@ -5,15 +9,7 @@ import {
5
9
  DescribeReplicationGroupsCommand,
6
10
  ElastiCacheClient
7
11
  } from "@aws-sdk/client-elasticache";
8
- var clientCache = /* @__PURE__ */ new Map();
9
- function getClient(region) {
10
- let client = clientCache.get(region);
11
- if (!client) {
12
- client = new ElastiCacheClient({ region });
13
- clientCache.set(region, client);
14
- }
15
- return client;
16
- }
12
+ var getClient = createClientFactory(ElastiCacheClient);
17
13
  async function checkCacheCluster(client, arn) {
18
14
  const { resourceId, raw } = arn;
19
15
  try {
@@ -148,4 +144,4 @@ var ElastiCacheChecker = {
148
144
  export {
149
145
  ElastiCacheChecker
150
146
  };
151
- //# sourceMappingURL=elasticache-7TCRHYYM.js.map
147
+ //# sourceMappingURL=elasticache-5Y6K7GKJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/elasticache.ts"],"sourcesContent":["/**\n * ElastiCache resource checker\n *\n * Supports:\n * - Cache clusters\n * - Subnet groups\n * - Replication groups\n */\n\nimport {\n DescribeCacheClustersCommand,\n DescribeCacheSubnetGroupsCommand,\n DescribeReplicationGroupsCommand,\n ElastiCacheClient,\n} from \"@aws-sdk/client-elasticache\";\n\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport { createClientFactory } from \"./client-factory.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * Get or create an ElastiCache client for a region\n */\nconst getClient = createClientFactory(ElastiCacheClient);\n\n/**\n * Check if an ElastiCache cluster exists\n */\nasync function checkCacheCluster(\n client: ElastiCacheClient,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeCacheClustersCommand({ CacheClusterId: resourceId })\n );\n\n const cluster = response.CacheClusters?.[0];\n const exists = !!cluster && cluster.CacheClusterStatus !== \"deleting\";\n\n return {\n arn: raw,\n exists,\n service: \"elasticache\",\n resourceType: \"cluster\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"CacheClusterNotFoundFault\") {\n return {\n arn: raw,\n exists: false,\n service: \"elasticache\",\n resourceType: \"cluster\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"elasticache\",\n resourceType: \"cluster\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if an ElastiCache subnet group exists\n */\nasync function checkSubnetGroup(\n client: ElastiCacheClient,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeCacheSubnetGroupsCommand({ CacheSubnetGroupName: resourceId })\n );\n\n const subnetGroup = response.CacheSubnetGroups?.[0];\n const exists = !!subnetGroup;\n\n return {\n arn: raw,\n exists,\n service: \"elasticache\",\n resourceType: \"subnetgroup\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"CacheSubnetGroupNotFoundFault\") {\n return {\n arn: raw,\n exists: false,\n service: \"elasticache\",\n resourceType: \"subnetgroup\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"elasticache\",\n resourceType: \"subnetgroup\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if an ElastiCache replication group exists\n */\nasync function checkReplicationGroup(\n client: ElastiCacheClient,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeReplicationGroupsCommand({ ReplicationGroupId: resourceId })\n );\n\n const replicationGroup = response.ReplicationGroups?.[0];\n const exists = !!replicationGroup && replicationGroup.Status !== \"deleting\";\n\n return {\n arn: raw,\n exists,\n service: \"elasticache\",\n resourceType: \"replicationgroup\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"ReplicationGroupNotFoundFault\") {\n return {\n arn: raw,\n exists: false,\n service: \"elasticache\",\n resourceType: \"replicationgroup\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"elasticache\",\n resourceType: \"replicationgroup\",\n resourceId,\n };\n }\n}\n\n/**\n * ElastiCache resource checker\n */\nexport const ElastiCacheChecker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceType, resourceId, region, raw } = arn;\n const client = getClient(region);\n\n switch (resourceType) {\n case \"cluster\":\n return checkCacheCluster(client, arn);\n\n case \"subnetgroup\":\n return checkSubnetGroup(client, arn);\n\n case \"replicationgroup\":\n return checkReplicationGroup(client, arn);\n\n default:\n return {\n arn: raw,\n exists: false,\n error: `Unsupported ElastiCache resource type: ${resourceType}`,\n service: \"elasticache\",\n resourceType,\n resourceId,\n };\n }\n },\n};\n"],"mappings":"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","names":[]}
@@ -1,3 +1,7 @@
1
+ import {
2
+ createClientFactory
3
+ } from "./chunk-O745CMWG.js";
4
+
1
5
  // src/infra/checkers/elb.ts
2
6
  import {
3
7
  DescribeLoadBalancersCommand,
@@ -5,15 +9,7 @@ import {
5
9
  DescribeListenersCommand,
6
10
  ElasticLoadBalancingV2Client
7
11
  } from "@aws-sdk/client-elastic-load-balancing-v2";
8
- var clientCache = /* @__PURE__ */ new Map();
9
- function getClient(region) {
10
- let client = clientCache.get(region);
11
- if (!client) {
12
- client = new ElasticLoadBalancingV2Client({ region });
13
- clientCache.set(region, client);
14
- }
15
- return client;
16
- }
12
+ var getClient = createClientFactory(ElasticLoadBalancingV2Client);
17
13
  async function checkLoadBalancer(client, arn) {
18
14
  const { resourceId, raw } = arn;
19
15
  try {
@@ -148,4 +144,4 @@ var ELBChecker = {
148
144
  export {
149
145
  ELBChecker
150
146
  };
151
- //# sourceMappingURL=elb-PEDLXW5R.js.map
147
+ //# sourceMappingURL=elb-CN6ELVM5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/elb.ts"],"sourcesContent":["/**\n * Elastic Load Balancing v2 resource checker\n *\n * Supports:\n * - Load balancers (ALB, NLB, GLB)\n * - Target groups\n * - Listeners\n */\n\nimport {\n DescribeLoadBalancersCommand,\n DescribeTargetGroupsCommand,\n DescribeListenersCommand,\n ElasticLoadBalancingV2Client,\n} from \"@aws-sdk/client-elastic-load-balancing-v2\";\n\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport { createClientFactory } from \"./client-factory.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * Get or create an ELBv2 client for a region\n */\nconst getClient = createClientFactory(ElasticLoadBalancingV2Client);\n\n/**\n * Check if a load balancer exists\n */\nasync function checkLoadBalancer(\n client: ElasticLoadBalancingV2Client,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeLoadBalancersCommand({ LoadBalancerArns: [raw] })\n );\n\n const loadBalancer = response.LoadBalancers?.[0];\n const exists =\n !!loadBalancer &&\n loadBalancer.State?.Code !== \"failed\" &&\n loadBalancer.State?.Code !== \"active_impaired\";\n\n return {\n arn: raw,\n exists,\n service: \"elasticloadbalancing\",\n resourceType: \"loadbalancer\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"LoadBalancerNotFoundException\") {\n return {\n arn: raw,\n exists: false,\n service: \"elasticloadbalancing\",\n resourceType: \"loadbalancer\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"elasticloadbalancing\",\n resourceType: \"loadbalancer\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if a target group exists\n */\nasync function checkTargetGroup(\n client: ElasticLoadBalancingV2Client,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeTargetGroupsCommand({ TargetGroupArns: [raw] })\n );\n\n const targetGroup = response.TargetGroups?.[0];\n const exists = !!targetGroup;\n\n return {\n arn: raw,\n exists,\n service: \"elasticloadbalancing\",\n resourceType: \"targetgroup\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"TargetGroupNotFoundException\") {\n return {\n arn: raw,\n exists: false,\n service: \"elasticloadbalancing\",\n resourceType: \"targetgroup\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"elasticloadbalancing\",\n resourceType: \"targetgroup\",\n resourceId,\n };\n }\n}\n\n/**\n * Check if a listener exists\n */\nasync function checkListener(\n client: ElasticLoadBalancingV2Client,\n arn: ParsedArn\n): Promise<ResourceCheckResult> {\n const { resourceId, raw } = arn;\n\n try {\n const response = await client.send(\n new DescribeListenersCommand({ ListenerArns: [raw] })\n );\n\n const listener = response.Listeners?.[0];\n const exists = !!listener;\n\n return {\n arn: raw,\n exists,\n service: \"elasticloadbalancing\",\n resourceType: \"listener\",\n resourceId,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"ListenerNotFoundException\") {\n return {\n arn: raw,\n exists: false,\n service: \"elasticloadbalancing\",\n resourceType: \"listener\",\n resourceId,\n };\n }\n\n return {\n arn: raw,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"elasticloadbalancing\",\n resourceType: \"listener\",\n resourceId,\n };\n }\n}\n\n/**\n * Elastic Load Balancing resource checker\n */\nexport const ELBChecker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceType, resourceId, region, raw } = arn;\n const client = getClient(region);\n\n switch (resourceType) {\n case \"loadbalancer\":\n return checkLoadBalancer(client, arn);\n\n case \"targetgroup\":\n return checkTargetGroup(client, arn);\n\n case \"listener\":\n return checkListener(client, arn);\n\n default:\n return {\n arn: raw,\n exists: false,\n error: `Unsupported ELB resource type: ${resourceType}`,\n service: \"elasticloadbalancing\",\n resourceType,\n resourceId,\n };\n }\n },\n};\n"],"mappings":"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","names":[]}
@@ -1,8 +1,12 @@
1
+ import {
2
+ AWS_DEFAULTS
3
+ } from "./chunk-RHM53NLG.js";
4
+
1
5
  // src/infra/checkers/iam.ts
2
6
  import { GetPolicyCommand, GetRoleCommand, IAMClient } from "@aws-sdk/client-iam";
3
7
  var client = null;
4
8
  function getClient() {
5
- client ??= new IAMClient({ region: "us-east-1" });
9
+ client ??= new IAMClient({ region: AWS_DEFAULTS.globalRegion });
6
10
  return client;
7
11
  }
8
12
  var IAMChecker = {
@@ -93,4 +97,4 @@ async function checkPolicy(policyArn) {
93
97
  export {
94
98
  IAMChecker
95
99
  };
96
- //# sourceMappingURL=iam-7H5HFWVQ.js.map
100
+ //# sourceMappingURL=iam-YXMHK2MV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/infra/checkers/iam.ts"],"sourcesContent":["/**\n * IAM resource checker\n */\n\nimport { GetPolicyCommand, GetRoleCommand, IAMClient } from \"@aws-sdk/client-iam\";\n\nimport { AWS_DEFAULTS } from \"../../constants.js\";\nimport type { ParsedArn, ResourceCheckResult } from \"../types.js\";\nimport type { ResourceChecker } from \"./types.js\";\n\n/**\n * IAM is global, so we only need one client\n */\nlet client: IAMClient | null = null;\n\n/**\n * Get or create the IAM client\n */\nfunction getClient(): IAMClient {\n // IAM is global, use the default global region\n client ??= new IAMClient({ region: AWS_DEFAULTS.globalRegion });\n return client;\n}\n\n/**\n * IAM resource checker (roles and policies)\n */\nexport const IAMChecker: ResourceChecker = {\n async check(arn: ParsedArn): Promise<ResourceCheckResult> {\n const { resourceType, resourceId, raw } = arn;\n\n switch (resourceType) {\n case \"role\":\n return checkRole(resourceId, raw);\n case \"policy\":\n return checkPolicy(raw);\n default:\n return {\n arn: raw,\n exists: false,\n error: `Unsupported IAM resource type: ${resourceType}`,\n service: \"iam\",\n resourceType,\n resourceId,\n };\n }\n },\n};\n\n/**\n * Check if an IAM role exists\n */\nasync function checkRole(roleName: string, arn: string): Promise<ResourceCheckResult> {\n const iamClient = getClient();\n\n try {\n await iamClient.send(new GetRoleCommand({ RoleName: roleName }));\n return {\n arn,\n exists: true,\n service: \"iam\",\n resourceType: \"role\",\n resourceId: roleName,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"NoSuchEntityException\") {\n return {\n arn,\n exists: false,\n service: \"iam\",\n resourceType: \"role\",\n resourceId: roleName,\n };\n }\n\n return {\n arn,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"iam\",\n resourceType: \"role\",\n resourceId: roleName,\n };\n }\n}\n\n/**\n * Check if an IAM policy exists\n */\nasync function checkPolicy(policyArn: string): Promise<ResourceCheckResult> {\n const iamClient = getClient();\n\n // Extract policy name from ARN for display\n const policyName = policyArn.split(\"/\").pop() ?? policyArn;\n\n try {\n await iamClient.send(new GetPolicyCommand({ PolicyArn: policyArn }));\n return {\n arn: policyArn,\n exists: true,\n service: \"iam\",\n resourceType: \"policy\",\n resourceId: policyName,\n };\n } catch (error) {\n const err = error as Error & { name?: string };\n\n if (err.name === \"NoSuchEntityException\") {\n return {\n arn: policyArn,\n exists: false,\n service: \"iam\",\n resourceType: \"policy\",\n resourceId: policyName,\n };\n }\n\n return {\n arn: policyArn,\n exists: false,\n error: err.message || \"Unknown error\",\n service: \"iam\",\n resourceType: \"policy\",\n resourceId: policyName,\n };\n }\n}\n"],"mappings":";;;;;AAIA,SAAS,kBAAkB,gBAAgB,iBAAiB;AAS5D,IAAI,SAA2B;AAK/B,SAAS,YAAuB;AAE9B,aAAW,IAAI,UAAU,EAAE,QAAQ,aAAa,aAAa,CAAC;AAC9D,SAAO;AACT;AAKO,IAAM,aAA8B;AAAA,EACzC,MAAM,MAAM,KAA8C;AACxD,UAAM,EAAE,cAAc,YAAY,IAAI,IAAI;AAE1C,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO,UAAU,YAAY,GAAG;AAAA,MAClC,KAAK;AACH,eAAO,YAAY,GAAG;AAAA,MACxB;AACE,eAAO;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,OAAO,kCAAkC,YAAY;AAAA,UACrD,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,IACJ;AAAA,EACF;AACF;AAKA,eAAe,UAAU,UAAkB,KAA2C;AACpF,QAAM,YAAY,UAAU;AAE5B,MAAI;AACF,UAAM,UAAU,KAAK,IAAI,eAAe,EAAE,UAAU,SAAS,CAAC,CAAC;AAC/D,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF,SAAS,OAAO;AACd,UAAM,MAAM;AAEZ,QAAI,IAAI,SAAS,yBAAyB;AACxC,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,OAAO,IAAI,WAAW;AAAA,MACtB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAKA,eAAe,YAAY,WAAiD;AAC1E,QAAM,YAAY,UAAU;AAG5B,QAAM,aAAa,UAAU,MAAM,GAAG,EAAE,IAAI,KAAK;AAEjD,MAAI;AACF,UAAM,UAAU,KAAK,IAAI,iBAAiB,EAAE,WAAW,UAAU,CAAC,CAAC;AACnE,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF,SAAS,OAAO;AACd,UAAM,MAAM;AAEZ,QAAI,IAAI,SAAS,yBAAyB;AACxC,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO,IAAI,WAAW;AAAA,MACtB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ export { auditProcessConfig, BaseProcessToolRunner, HooksRunner, runProcessCheck
9
9
  export { type RemoteRepoInfo, type ScanOptions, scanRepository, type ScanResult, validateProcess, type ValidateProcessOptions, type ValidateProcessResult, } from "./process/scan/index.js";
10
10
  export { formatJson, formatOutput, formatText, type OutputFormat } from "./output/index.js";
11
11
  export { type DependenciesOptions, type DependenciesResult, getDependencies, } from "./dependencies/index.js";
12
- export { formatTierResultJson, formatTierResultText, type RepoMetadata, type Tier, type TierSourceDetail, VALID_TIERS, type ValidateTierOptions, type ValidateTierResult, validateTierRuleset, } from "./validate/index.js";
12
+ export { formatTierResultJson, formatTierResultText, type Tier, type TierSourceDetail, VALID_TIERS, type ValidateTierOptions, type ValidateTierResult, validateTierRuleset, } from "./validate/index.js";
13
13
  export { createServer as createMcpServer, startServer as startMcpServer, type Guideline, type GuidelineFrontmatter, type GuidelineListItem, type Ruleset, } from "./mcp/index.js";
14
14
  export type { AccountId, AccountScanResult, Arn, CloudProvider, GcpResourcePath, InfraScanResult, InfraScanSummary, LegacyManifest, Manifest, ManifestAccount, MultiAccountManifest, ParsedArn, ParsedGcpResource, PulumiResource, PulumiStackExport, ResourceCheckResult, ResourceIdentifier, ScanInfraOptions, GenerateManifestOptions, } from "./infra/index.js";
15
15
  export { ArnSchema, AccountIdSchema, AccountKeySchema, CloudProviderSchema, GcpResourcePathSchema, InfraScanResultSchema, InfraScanSummarySchema, LegacyManifestSchema, ManifestAccountSchema, ManifestSchema, MultiAccountManifestSchema, ParsedArnSchema, ParsedGcpResourceSchema, PulumiResourceSchema, PulumiStackExportSchema, ResourceCheckResultSchema, ResourceIdentifierSchema, } from "./infra/index.js";