@intentius/chant-lexicon-aws 0.124.31 → 0.124.33

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 (649) hide show
  1. package/dist/actions/dynamodb.js +41 -0
  2. package/dist/actions/ecr.js +9 -0
  3. package/dist/actions/ecs.js +5 -0
  4. package/dist/actions/iam.js +3 -0
  5. package/dist/actions/index.js +9 -0
  6. package/dist/actions/lambda.js +11 -0
  7. package/dist/actions/logs.js +4 -0
  8. package/dist/actions/s3.js +40 -0
  9. package/dist/actions/sns.js +5 -0
  10. package/dist/actions/sqs.js +15 -0
  11. package/dist/agentcore/trace-fetch.d.ts.map +1 -1
  12. package/dist/agentcore/trace-fetch.js +472 -0
  13. package/dist/agentcore/trace-render.js +359 -0
  14. package/dist/ambient.js +148 -0
  15. package/dist/api/credential-chain.d.ts +30 -3
  16. package/dist/api/credential-chain.d.ts.map +1 -1
  17. package/dist/api/credential-chain.js +509 -0
  18. package/dist/api/read-client.d.ts +16 -43
  19. package/dist/api/read-client.d.ts.map +1 -1
  20. package/dist/api/read-client.js +458 -0
  21. package/dist/api/sigv4.d.ts +4 -4
  22. package/dist/api/sigv4.js +185 -0
  23. package/dist/behaviour-kinds.js +114 -0
  24. package/dist/caller-identity.d.ts +3 -5
  25. package/dist/caller-identity.d.ts.map +1 -1
  26. package/dist/caller-identity.js +146 -0
  27. package/dist/codegen/docs-cli.js +2 -0
  28. package/dist/codegen/docs.js +120 -0
  29. package/dist/codegen/enum-overlay.js +162 -0
  30. package/dist/codegen/extensions.js +139 -0
  31. package/dist/codegen/fallback.js +32 -0
  32. package/dist/codegen/generate-cli.js +15 -0
  33. package/dist/codegen/generate-lexicon.js +70 -0
  34. package/dist/codegen/generate-typescript.js +226 -0
  35. package/dist/codegen/generate.d.ts.map +1 -1
  36. package/dist/codegen/generate.js +234 -0
  37. package/dist/codegen/naming.js +135 -0
  38. package/dist/codegen/package.js +67 -0
  39. package/dist/codegen/patches.d.ts +26 -1
  40. package/dist/codegen/patches.d.ts.map +1 -1
  41. package/dist/codegen/patches.js +90 -0
  42. package/dist/codegen/property-overlay.js +85 -0
  43. package/dist/codegen/property-overlay.json +1 -16
  44. package/dist/codegen/sam.js +402 -0
  45. package/dist/codegen/typecheck.js +4 -0
  46. package/dist/codegen/versions.js +31 -0
  47. package/dist/components/__tests__/mock-cloud-executor.js +326 -0
  48. package/dist/components/apply.d.ts +44 -1
  49. package/dist/components/apply.d.ts.map +1 -1
  50. package/dist/components/apply.js +752 -0
  51. package/dist/components/builders.js +37 -0
  52. package/dist/components/capability-plugin.js +66 -0
  53. package/dist/components/cloud-executor.d.ts +35 -0
  54. package/dist/components/cloud-executor.d.ts.map +1 -1
  55. package/dist/components/cloud-executor.js +576 -0
  56. package/dist/components/config-bom.js +207 -0
  57. package/dist/components/host-delivery.js +117 -0
  58. package/dist/components/index.js +18 -0
  59. package/dist/components/job-submission.js +77 -0
  60. package/dist/components/publish.js +234 -0
  61. package/dist/components/safety.js +62 -0
  62. package/dist/components/wait-aws.js +68 -0
  63. package/dist/composites/agentcore-agent.js +187 -0
  64. package/dist/composites/agentcore-trust-policy.js +13 -0
  65. package/dist/composites/alb-shared.js +84 -0
  66. package/dist/composites/bucket-deployment.js +93 -0
  67. package/dist/composites/catalog.js +2714 -0
  68. package/dist/composites/dynamodb-table.js +66 -0
  69. package/dist/composites/ec2-instance-bundle.js +75 -0
  70. package/dist/composites/ec2-instance-role.js +26 -0
  71. package/dist/composites/ecr-repository.js +64 -0
  72. package/dist/composites/ecs-trust-policy.js +10 -0
  73. package/dist/composites/efs-with-access-point.js +44 -0
  74. package/dist/composites/eks-cluster.js +118 -0
  75. package/dist/composites/fargate-alb.js +216 -0
  76. package/dist/composites/fargate-service.js +222 -0
  77. package/dist/composites/index.js +28 -0
  78. package/dist/composites/lambda-api.js +15 -0
  79. package/dist/composites/lambda-dynamodb.js +77 -0
  80. package/dist/composites/lambda-eventbridge.js +27 -0
  81. package/dist/composites/lambda-function.js +54 -0
  82. package/dist/composites/lambda-s3.js +93 -0
  83. package/dist/composites/lambda-sns.js +23 -0
  84. package/dist/composites/lambda-sqs.js +34 -0
  85. package/dist/composites/landing-zone.js +82 -0
  86. package/dist/composites/microvm-app.js +293 -0
  87. package/dist/composites/minimal-vpc.js +40 -0
  88. package/dist/composites/monitoring-stack.js +105 -0
  89. package/dist/composites/nlb-service.js +61 -0
  90. package/dist/composites/rds-instance.js +98 -0
  91. package/dist/composites/scheduled-lambda.js +28 -0
  92. package/dist/composites/solr-fargate-service.js +33 -0
  93. package/dist/composites/step-functions-workflow.js +78 -0
  94. package/dist/composites/vpc-default.js +132 -0
  95. package/dist/condition.js +43 -0
  96. package/dist/coverage.js +4 -0
  97. package/dist/deep-observe.d.ts.map +1 -1
  98. package/dist/deep-observe.js +709 -0
  99. package/dist/deep-topology.js +226 -0
  100. package/dist/default-tags.js +50 -0
  101. package/dist/defaults.js +85 -0
  102. package/dist/dependencies.js +269 -0
  103. package/dist/detect.js +21 -0
  104. package/dist/disruption.d.ts.map +1 -1
  105. package/dist/disruption.js +129 -0
  106. package/dist/effect-receipt-row.js +107 -0
  107. package/dist/generated/index.d.ts +1297 -82
  108. package/dist/generated/index.d.ts.map +1 -1
  109. package/dist/generated/index.js +12382 -0
  110. package/dist/generated/runtime.js +4 -0
  111. package/dist/governance.js +131 -0
  112. package/dist/health.d.ts +61 -0
  113. package/dist/health.d.ts.map +1 -0
  114. package/dist/health.js +216 -0
  115. package/dist/identity-observe.d.ts.map +1 -1
  116. package/dist/identity-observe.js +127 -0
  117. package/dist/import/generator.js +757 -0
  118. package/dist/import/live-export.js +34 -0
  119. package/dist/import/parser.js +394 -0
  120. package/dist/index.js +69 -0
  121. package/dist/integrity.json +6 -6
  122. package/dist/intrinsics.js +393 -0
  123. package/dist/lint/audit-catalog.js +87 -0
  124. package/dist/lint/audit-lineage.js +150 -0
  125. package/dist/lint/post-synth/cf-refs.js +247 -0
  126. package/dist/lint/post-synth/cor020.js +60 -0
  127. package/dist/lint/post-synth/ext001.d.ts.map +1 -1
  128. package/dist/lint/post-synth/ext001.js +197 -0
  129. package/dist/lint/post-synth/index.js +124 -0
  130. package/dist/lint/post-synth/waw010.js +41 -0
  131. package/dist/lint/post-synth/waw011.js +41 -0
  132. package/dist/lint/post-synth/waw013.js +38 -0
  133. package/dist/lint/post-synth/waw014.js +42 -0
  134. package/dist/lint/post-synth/waw015.js +88 -0
  135. package/dist/lint/post-synth/waw016.d.ts.map +1 -1
  136. package/dist/lint/post-synth/waw016.js +116 -0
  137. package/dist/lint/post-synth/waw017.js +43 -0
  138. package/dist/lint/post-synth/waw018.js +61 -0
  139. package/dist/lint/post-synth/waw019.js +64 -0
  140. package/dist/lint/post-synth/waw020.js +56 -0
  141. package/dist/lint/post-synth/waw021.js +44 -0
  142. package/dist/lint/post-synth/waw022.js +36 -0
  143. package/dist/lint/post-synth/waw023.js +40 -0
  144. package/dist/lint/post-synth/waw024.js +46 -0
  145. package/dist/lint/post-synth/waw025.js +36 -0
  146. package/dist/lint/post-synth/waw026.js +38 -0
  147. package/dist/lint/post-synth/waw027.js +41 -0
  148. package/dist/lint/post-synth/waw028.js +39 -0
  149. package/dist/lint/post-synth/waw029.js +54 -0
  150. package/dist/lint/post-synth/waw030.js +282 -0
  151. package/dist/lint/post-synth/waw031.js +58 -0
  152. package/dist/lint/post-synth/waw032.js +45 -0
  153. package/dist/lint/post-synth/waw033.js +75 -0
  154. package/dist/lint/post-synth/waw034.js +52 -0
  155. package/dist/lint/post-synth/waw035.js +56 -0
  156. package/dist/lint/post-synth/waw036.js +79 -0
  157. package/dist/lint/post-synth/waw037.js +67 -0
  158. package/dist/lint/post-synth/waw038.js +42 -0
  159. package/dist/lint/post-synth/waw039.js +42 -0
  160. package/dist/lint/post-synth/waw040.js +45 -0
  161. package/dist/lint/post-synth/waw041.js +40 -0
  162. package/dist/lint/post-synth/waw042.js +99 -0
  163. package/dist/lint/post-synth/waw043.js +51 -0
  164. package/dist/lint/post-synth/waw044.js +64 -0
  165. package/dist/lint/post-synth/waw045.js +49 -0
  166. package/dist/lint/post-synth/waw046.js +52 -0
  167. package/dist/lint/post-synth/waw047.js +43 -0
  168. package/dist/lint/post-synth/waw048.js +40 -0
  169. package/dist/lint/post-synth/waw049.js +78 -0
  170. package/dist/lint/post-synth/waw050.js +44 -0
  171. package/dist/lint/post-synth/waw051.js +41 -0
  172. package/dist/lint/post-synth/waw052.js +43 -0
  173. package/dist/lint/post-synth/waw053.js +43 -0
  174. package/dist/lint/post-synth/waw054.js +41 -0
  175. package/dist/lint/post-synth/waw055.js +41 -0
  176. package/dist/lint/post-synth/waw056.js +65 -0
  177. package/dist/lint/post-synth/waw057.js +43 -0
  178. package/dist/lint/post-synth/waw058.js +61 -0
  179. package/dist/lint/post-synth/waw059.js +338 -0
  180. package/dist/lint/post-synth/waw060.js +83 -0
  181. package/dist/lint/post-synth/waw061.js +60 -0
  182. package/dist/lint/post-synth/waw062.js +0 -0
  183. package/dist/lint/post-synth/waw063.js +0 -0
  184. package/dist/lint/post-synth/waw064.js +45 -0
  185. package/dist/lint/post-synth/waw065.js +104 -0
  186. package/dist/lint/post-synth/waw066.js +145 -0
  187. package/dist/lint/post-synth/waw067.js +115 -0
  188. package/dist/lint/post-synth/waw068.js +69 -0
  189. package/dist/lint/post-synth/waw069.js +0 -0
  190. package/dist/lint/rules/hardcoded-region.js +38 -0
  191. package/dist/lint/rules/iam-wildcard.js +60 -0
  192. package/dist/lint/rules/index.js +6 -0
  193. package/dist/lint/rules/s3-encryption.js +60 -0
  194. package/dist/live-attrs.js +42 -0
  195. package/dist/lsp/completions.d.ts.map +1 -1
  196. package/dist/lsp/completions.js +18 -0
  197. package/dist/lsp/hover.d.ts.map +1 -1
  198. package/dist/lsp/hover.js +66 -0
  199. package/dist/manifest.json +1 -1
  200. package/dist/mapping.js +33 -0
  201. package/dist/meta.json +17359 -784
  202. package/dist/nested-stack.js +95 -0
  203. package/dist/okf/index.md +203 -0
  204. package/dist/okf/rules/EXT001.md +1 -0
  205. package/dist/okf/rules/WAW016.md +2 -0
  206. package/dist/okf/rules/WAW019.md +1 -0
  207. package/dist/okf/rules/WAW028.md +1 -0
  208. package/dist/okf/rules/WAW030.md +2 -0
  209. package/dist/okf/rules/WAW039.md +1 -0
  210. package/dist/okf/rules/WAW049.md +1 -0
  211. package/dist/okf/rules/WAW056.md +1 -0
  212. package/dist/okf/rules/WAW058.md +1 -0
  213. package/dist/okf/rules/WAW062.md +1 -0
  214. package/dist/okf/rules/WAW064.md +1 -0
  215. package/dist/okf/rules/WAW065.md +1 -0
  216. package/dist/okf/rules/WAW066.md +1 -0
  217. package/dist/okf/rules/WAW067.md +1 -0
  218. package/dist/okf/rules/WAW068.md +1 -0
  219. package/dist/okf/rules/WAW069.md +4 -0
  220. package/dist/okf/types/AIWorkloadConfig.md +23 -0
  221. package/dist/okf/types/ARCRegionSwitchPlan.md +1 -0
  222. package/dist/okf/types/AccountAccessApplication.md +28 -0
  223. package/dist/okf/types/AccountAccessEntitlement.md +22 -0
  224. package/dist/okf/types/ActionTarget.md +20 -0
  225. package/dist/okf/types/AdConfiguration.md +21 -0
  226. package/dist/okf/types/Adapter.md +26 -0
  227. package/dist/okf/types/AgentContext.md +35 -0
  228. package/dist/okf/types/AgentGoal.md +31 -0
  229. package/dist/okf/types/AgentProfile.md +34 -0
  230. package/dist/okf/types/Alarm.md +3 -1
  231. package/dist/okf/types/AlarmModel.md +14 -9
  232. package/dist/okf/types/AmplifyWebhook.md +25 -0
  233. package/dist/okf/types/ApiCache.md +8 -8
  234. package/dist/okf/types/ApiGatewayManagedOverrides.md +5 -5
  235. package/dist/okf/types/AppAuthorization.md +35 -0
  236. package/dist/okf/types/AppBlockBuilder.md +1 -0
  237. package/dist/okf/types/AppInstance.md +2 -2
  238. package/dist/okf/types/AppInstanceBot.md +2 -2
  239. package/dist/okf/types/AppStreamFleet.md +3 -2
  240. package/dist/okf/types/AppSyncApiKey.md +6 -6
  241. package/dist/okf/types/AppSyncType.md +22 -0
  242. package/dist/okf/types/ApplicationStatusCheck.md +36 -0
  243. package/dist/okf/types/ApplicationVersion.md +4 -1
  244. package/dist/okf/types/ApplicationsList.md +26 -0
  245. package/dist/okf/types/ApprovalPolicy.md +28 -0
  246. package/dist/okf/types/ArchiveRule.md +24 -0
  247. package/dist/okf/types/Asset.md +30 -0
  248. package/dist/okf/types/Backup.md +31 -0
  249. package/dist/okf/types/BedrockAgentCoreDataset.md +1 -1
  250. package/dist/okf/types/BedrockAgentCoreGateway.md +3 -0
  251. package/dist/okf/types/BedrockSession.md +28 -0
  252. package/dist/okf/types/BillEstimate.md +35 -0
  253. package/dist/okf/types/Brand.md +32 -0
  254. package/dist/okf/types/CallAnalyticsCategory.md +25 -0
  255. package/dist/okf/types/Campaign.md +28 -0
  256. package/dist/okf/types/CapacityProvider.md +30 -0
  257. package/dist/okf/types/Case.md +24 -0
  258. package/dist/okf/types/CertificateAssociation.md +13 -0
  259. package/dist/okf/types/ChangeSet.md +36 -0
  260. package/dist/okf/types/ChannelFlow.md +29 -0
  261. package/dist/okf/types/ChimeChannel.md +39 -0
  262. package/dist/okf/types/Classifier.md +6 -6
  263. package/dist/okf/types/ClientVpnAuthorizationRule.md +6 -6
  264. package/dist/okf/types/ClientVpnEndpoint.md +2 -0
  265. package/dist/okf/types/ClientVpnRoute.md +5 -5
  266. package/dist/okf/types/CloudConnector.md +29 -0
  267. package/dist/okf/types/Cluster.md +39 -0
  268. package/dist/okf/types/ClusterSchedulerConfig.md +30 -0
  269. package/dist/okf/types/CodeCommitRepository.md +12 -12
  270. package/dist/okf/types/CodeConnectionsHost.md +26 -0
  271. package/dist/okf/types/CodeRepository.md +5 -5
  272. package/dist/okf/types/CompositeAlarm.md +1 -0
  273. package/dist/okf/types/ComputeEnvironment.md +2 -0
  274. package/dist/okf/types/ComputeNodeGroup.md +1 -1
  275. package/dist/okf/types/ComputeQuota.md +34 -0
  276. package/dist/okf/types/ConfigRule.md +1 -1
  277. package/dist/okf/types/ConfigurationRecorder.md +7 -6
  278. package/dist/okf/types/ConnectAttachment.md +2 -0
  279. package/dist/okf/types/ConnectQueue.md +5 -1
  280. package/dist/okf/types/ConnectVocabulary.md +28 -0
  281. package/dist/okf/types/ConnectionType.md +24 -0
  282. package/dist/okf/types/ConsentPortal.md +33 -0
  283. package/dist/okf/types/ContactMethod.md +29 -0
  284. package/dist/okf/types/ContainerAssociation.md +26 -0
  285. package/dist/okf/types/ContainerFleet.md +1 -1
  286. package/dist/okf/types/ContainerGroupDefinition.md +1 -1
  287. package/dist/okf/types/Content.md +40 -0
  288. package/dist/okf/types/ContentAssociation.md +28 -0
  289. package/dist/okf/types/CustomDetectionRuleAssociation.md +28 -0
  290. package/dist/okf/types/CustomEntityType.md +4 -9
  291. package/dist/okf/types/Customization.md +22 -0
  292. package/dist/okf/types/CwIntegration.md +31 -0
  293. package/dist/okf/types/DAXParameterGroup.md +3 -8
  294. package/dist/okf/types/DAXSubnetGroup.md +0 -5
  295. package/dist/okf/types/DBClusterEndpoint.md +31 -0
  296. package/dist/okf/types/DBProxyTargetGroup.md +1 -0
  297. package/dist/okf/types/DBSnapshot.md +62 -0
  298. package/dist/okf/types/DLMLifecyclePolicy.md +12 -12
  299. package/dist/okf/types/DLPSetting.md +31 -0
  300. package/dist/okf/types/DMSInstanceProfile.md +1 -1
  301. package/dist/okf/types/DRSLaunchConfigurationTemplate.md +28 -0
  302. package/dist/okf/types/Daemon.md +1 -0
  303. package/dist/okf/types/DataExchangeDataSet.md +29 -0
  304. package/dist/okf/types/DataIntegrationFlow.md +27 -0
  305. package/dist/okf/types/DataMigration.md +1 -1
  306. package/dist/okf/types/DataProvider.md +2 -1
  307. package/dist/okf/types/DataQualityRuleset.md +6 -11
  308. package/dist/okf/types/DataSource.md +23 -0
  309. package/dist/okf/types/Dataset.md +20 -0
  310. package/dist/okf/types/DatasetIntegration.md +23 -0
  311. package/dist/okf/types/DbCluster.md +1 -1
  312. package/dist/okf/types/DbInstance.md +8 -2
  313. package/dist/okf/types/DeadlineBudget.md +29 -0
  314. package/dist/okf/types/DelegationSet.md +23 -0
  315. package/dist/okf/types/DeliveryChannel.md +6 -11
  316. package/dist/okf/types/DevOpsAgentAgentSpace.md +4 -0
  317. package/dist/okf/types/DevOpsAgentService.md +1 -0
  318. package/dist/okf/types/DevOpsAgentTrigger.md +28 -0
  319. package/dist/okf/types/DirectConnectGatewayAttachment.md +2 -0
  320. package/dist/okf/types/Directory.md +60 -0
  321. package/dist/okf/types/DocDBDBClusterParameterGroup.md +5 -10
  322. package/dist/okf/types/DocDBDBSubnetGroup.md +4 -9
  323. package/dist/okf/types/DocDBElasticClusterSnapshot.md +36 -0
  324. package/dist/okf/types/DocumentClassifierEndpoint.md +27 -0
  325. package/dist/okf/types/Domain.md +27 -0
  326. package/dist/okf/types/EKSCertificateAuthority.md +42 -0
  327. package/dist/okf/types/EKSCluster.md +8 -0
  328. package/dist/okf/types/EcSnapshot.md +66 -0
  329. package/dist/okf/types/EmailIdentityCertificate.md +15 -0
  330. package/dist/okf/types/EndpointConfig.md +14 -13
  331. package/dist/okf/types/EntityRecognizer.md +27 -0
  332. package/dist/okf/types/EntityRecognizerEndpoint.md +31 -0
  333. package/dist/okf/types/EnvironmentEC2.md +13 -13
  334. package/dist/okf/types/EvaluationForm.md +1 -0
  335. package/dist/okf/types/Evaluator.md +6 -2
  336. package/dist/okf/types/EventAction.md +26 -0
  337. package/dist/okf/types/EventRule.md +2 -0
  338. package/dist/okf/types/EventSource.md +30 -0
  339. package/dist/okf/types/EventTracker.md +22 -0
  340. package/dist/okf/types/EventsV2EventBus.md +28 -0
  341. package/dist/okf/types/EventsV2ResourcePolicy.md +19 -0
  342. package/dist/okf/types/EventsV2Subscriber.md +39 -0
  343. package/dist/okf/types/ExperimentDefinition.md +39 -0
  344. package/dist/okf/types/ExperimentRun.md +33 -0
  345. package/dist/okf/types/ExperimentTrialComponent.md +13 -11
  346. package/dist/okf/types/FHIRDatastore.md +3 -0
  347. package/dist/okf/types/FSxSnapshot.md +5 -5
  348. package/dist/okf/types/FSxVolume.md +9 -9
  349. package/dist/okf/types/FeaturedResultsSet.md +26 -0
  350. package/dist/okf/types/Feed.md +1 -0
  351. package/dist/okf/types/FieldLevelEncryptionConfig.md +25 -0
  352. package/dist/okf/types/FieldLevelEncryptionProfile.md +22 -0
  353. package/dist/okf/types/FileCache.md +45 -0
  354. package/dist/okf/types/Filter.md +27 -0
  355. package/dist/okf/types/Firewall.md +6 -0
  356. package/dist/okf/types/FlowMediaStream.md +28 -0
  357. package/dist/okf/types/FlowOutput.md +1 -0
  358. package/dist/okf/types/FpgaImage.md +38 -0
  359. package/dist/okf/types/Function.md +2 -2
  360. package/dist/okf/types/Gateway.md +41 -0
  361. package/dist/okf/types/GatewayClusterAssociations.md +23 -0
  362. package/dist/okf/types/GatewayRateLimit.md +26 -0
  363. package/dist/okf/types/GatewayRule.md +32 -0
  364. package/dist/okf/types/GlobalReplicationGroup.md +3 -0
  365. package/dist/okf/types/GlobalResolver.md +1 -1
  366. package/dist/okf/types/GlobalTable.md +1 -0
  367. package/dist/okf/types/GlueConnection.md +5 -4
  368. package/dist/okf/types/GlueSecurityConfiguration.md +1 -6
  369. package/dist/okf/types/GlueSession.md +38 -0
  370. package/dist/okf/types/GlueTable.md +5 -10
  371. package/dist/okf/types/GlueWorkflow.md +5 -10
  372. package/dist/okf/types/Group.md +27 -0
  373. package/dist/okf/types/Harness.md +1 -0
  374. package/dist/okf/types/HostKey.md +33 -0
  375. package/dist/okf/types/HostedZone.md +1 -0
  376. package/dist/okf/types/HttpApi.md +2 -0
  377. package/dist/okf/types/HttpNamespace.md +5 -5
  378. package/dist/okf/types/HubV2.md +1 -0
  379. package/dist/okf/types/HumanTaskUi.md +22 -0
  380. package/dist/okf/types/IPv4Pool.md +28 -0
  381. package/dist/okf/types/ImageBuilder.md +1 -0
  382. package/dist/okf/types/ImageBuilderImage.md +1 -1
  383. package/dist/okf/types/ImagePipeline.md +1 -1
  384. package/dist/okf/types/InferenceComponent.md +5 -1
  385. package/dist/okf/types/InfluxDBBackup.md +65 -0
  386. package/dist/okf/types/InfluxDBCluster.md +3 -0
  387. package/dist/okf/types/InfrastructureConfiguration.md +2 -0
  388. package/dist/okf/types/IngestionDestination.md +28 -0
  389. package/dist/okf/types/InputSecurityGroup.md +6 -4
  390. package/dist/okf/types/InspectorV2Connector.md +38 -0
  391. package/dist/okf/types/InstanceEventWindow.md +25 -0
  392. package/dist/okf/types/InstanceFleetConfig.md +10 -10
  393. package/dist/okf/types/InstanceGroupConfig.md +3 -3
  394. package/dist/okf/types/InstrumentationConfig.md +31 -0
  395. package/dist/okf/types/IntegrationAssociation.md +3 -0
  396. package/dist/okf/types/IoTSiteWiseApplication.md +34 -0
  397. package/dist/okf/types/IoTSiteWiseDataset.md +5 -2
  398. package/dist/okf/types/IoTSiteWiseTask.md +24 -0
  399. package/dist/okf/types/IpamExternalResourceVerificationToken.md +35 -0
  400. package/dist/okf/types/IpamInternetRegistryAssociation.md +32 -0
  401. package/dist/okf/types/Job.md +35 -0
  402. package/dist/okf/types/JobTemplate.md +26 -0
  403. package/dist/okf/types/KinesisChannel.md +31 -0
  404. package/dist/okf/types/KinesisStream.md +1 -0
  405. package/dist/okf/types/LambdaResourcePolicy.md +14 -0
  406. package/dist/okf/types/Lexicon.md +34 -0
  407. package/dist/okf/types/LicenseAssetGroup.md +23 -0
  408. package/dist/okf/types/LicenseConfiguration.md +33 -0
  409. package/dist/okf/types/LicenseServerEndpoint.md +32 -0
  410. package/dist/okf/types/LightsailKeyPair.md +29 -0
  411. package/dist/okf/types/LimitsProfile.md +27 -0
  412. package/dist/okf/types/LocationAzureBlob.md +2 -1
  413. package/dist/okf/types/LocationObjectStorage.md +1 -0
  414. package/dist/okf/types/LogAlarm.md +2 -0
  415. package/dist/okf/types/MGNConnector.md +23 -0
  416. package/dist/okf/types/MGNLaunchConfigurationTemplate.md +37 -0
  417. package/dist/okf/types/MLTransform.md +15 -15
  418. package/dist/okf/types/MWAAServerlessWorkflow.md +3 -0
  419. package/dist/okf/types/ManagedNotificationAccountContactAssociation.md +1 -0
  420. package/dist/okf/types/ManagedNotificationAdditionalChannelAssociation.md +1 -0
  421. package/dist/okf/types/MediaConvertJobTemplate.md +11 -13
  422. package/dist/okf/types/MediaConvertQueue.md +8 -10
  423. package/dist/okf/types/MediaInsightsPipelineConfiguration.md +28 -0
  424. package/dist/okf/types/MediaLiveInput.md +41 -18
  425. package/dist/okf/types/MediaPackageV2Channel.md +3 -0
  426. package/dist/okf/types/MediaPackageV2OriginEndpoint.md +1 -0
  427. package/dist/okf/types/MediaPipelineKinesisVideoStreamPool.md +28 -0
  428. package/dist/okf/types/MediaTailorFunction.md +27 -0
  429. package/dist/okf/types/MedicalVocabulary.md +21 -0
  430. package/dist/okf/types/Member.md +26 -0
  431. package/dist/okf/types/Memory.md +6 -0
  432. package/dist/okf/types/MemoryDBSnapshot.md +29 -0
  433. package/dist/okf/types/Metric.md +59 -0
  434. package/dist/okf/types/MetricAttribution.md +23 -0
  435. package/dist/okf/types/MicrosoftAD.md +11 -11
  436. package/dist/okf/types/MigrationProject.md +8 -1
  437. package/dist/okf/types/Monitor.md +26 -0
  438. package/dist/okf/types/NFSFileShare.md +44 -0
  439. package/dist/okf/types/NeptuneGraphGraph.md +1 -0
  440. package/dist/okf/types/NetworkConnector.md +4 -0
  441. package/dist/okf/types/NetworkFlowMonitorScope.md +23 -0
  442. package/dist/okf/types/NetworkMigrationDefinition.md +31 -0
  443. package/dist/okf/types/NetworkSecurityManagerDeployment.md +31 -0
  444. package/dist/okf/types/NetworkSecurityManagerPolicy.md +32 -0
  445. package/dist/okf/types/NetworkSecurityManagerScope.md +29 -0
  446. package/dist/okf/types/NotebookInstance.md +18 -18
  447. package/dist/okf/types/NotebookInstanceLifecycleConfig.md +6 -5
  448. package/dist/okf/types/NotifyConfiguration.md +35 -0
  449. package/dist/okf/types/OTelEnrichment.md +2 -0
  450. package/dist/okf/types/OnlineEvaluationConfig.md +0 -1
  451. package/dist/okf/types/OrganizationConfigRule.md +7 -7
  452. package/dist/okf/types/Outpost.md +32 -0
  453. package/dist/okf/types/ParallelData.md +40 -0
  454. package/dist/okf/types/Partition.md +5 -5
  455. package/dist/okf/types/PaymentConnector.md +4 -1
  456. package/dist/okf/types/Pentest.md +1 -0
  457. package/dist/okf/types/PerfReports.md +28 -0
  458. package/dist/okf/types/PermissionAssociation.md +30 -0
  459. package/dist/okf/types/PersonalizeDataset.md +1 -0
  460. package/dist/okf/types/PersonalizeDatasetGroup.md +1 -0
  461. package/dist/okf/types/PersonalizeSchema.md +1 -0
  462. package/dist/okf/types/Pipeline.md +25 -0
  463. package/dist/okf/types/PlaybackConfiguration.md +1 -0
  464. package/dist/okf/types/PolicyAssociation.md +1 -1
  465. package/dist/okf/types/PolicyGrant.md +2 -2
  466. package/dist/okf/types/PolicyPrincipalAttachment.md +2 -7
  467. package/dist/okf/types/PortalProduct.md +24 -0
  468. package/dist/okf/types/PrefetchSchedule.md +25 -0
  469. package/dist/okf/types/PricingPlanManagerSubscription.md +31 -0
  470. package/dist/okf/types/PrincipalAssociation.md +27 -0
  471. package/dist/okf/types/PrivateDnsNamespace.md +8 -8
  472. package/dist/okf/types/PrivateVirtualInterface.md +1 -0
  473. package/dist/okf/types/ProcurementPortalPreference.md +45 -0
  474. package/dist/okf/types/Program.md +33 -0
  475. package/dist/okf/types/ProjectMembership.md +1 -1
  476. package/dist/okf/types/ProtocolsList.md +26 -0
  477. package/dist/okf/types/PublicDnsNamespace.md +7 -7
  478. package/dist/okf/types/PublicVirtualInterface.md +1 -0
  479. package/dist/okf/types/QEV2IdcApplication.md +25 -0
  480. package/dist/okf/types/QueryLoggingConfig.md +21 -0
  481. package/dist/okf/types/QuerySuggestionsBlockList.md +25 -0
  482. package/dist/okf/types/QuickSightAssignment.md +24 -0
  483. package/dist/okf/types/RAMResourceAssociation.md +27 -0
  484. package/dist/okf/types/RDSClusterSnapshot.md +54 -0
  485. package/dist/okf/types/RDSDBParameterGroup.md +5 -0
  486. package/dist/okf/types/RDSDeployment.md +41 -0
  487. package/dist/okf/types/RcsAgent.md +38 -0
  488. package/dist/okf/types/ReceiptRule.md +5 -5
  489. package/dist/okf/types/ReceiptRuleSet.md +1 -6
  490. package/dist/okf/types/RecommenderFilter.md +27 -0
  491. package/dist/okf/types/RecommenderSchema.md +25 -0
  492. package/dist/okf/types/RecordSet.md +16 -22
  493. package/dist/okf/types/RecoveryPlan.md +28 -0
  494. package/dist/okf/types/RedshiftIdcApplication.md +31 -0
  495. package/dist/okf/types/RedshiftSnapshot.md +59 -0
  496. package/dist/okf/types/RegistrationAttachment.md +28 -0
  497. package/dist/okf/types/Registry.md +41 -0
  498. package/dist/okf/types/RegistryRecord.md +38 -0
  499. package/dist/okf/types/RelatedItem.md +24 -0
  500. package/dist/okf/types/ReplicationConfigurationTemplate.md +35 -0
  501. package/dist/okf/types/ReplicationSubnetGroup.md +4 -9
  502. package/dist/okf/types/ReplicationTask.md +14 -14
  503. package/dist/okf/types/ReportGenerator.md +29 -0
  504. package/dist/okf/types/ReportGroup.md +1 -3
  505. package/dist/okf/types/ResilienceHubV2Policy.md +1 -0
  506. package/dist/okf/types/ResilienceHubV2Service.md +1 -0
  507. package/dist/okf/types/ResourceConfiguration.md +1 -1
  508. package/dist/okf/types/ResourceMetricsConfiguration.md +21 -0
  509. package/dist/okf/types/RestApi.md +1 -0
  510. package/dist/okf/types/RetrievalInstruction.md +32 -0
  511. package/dist/okf/types/RouterOutput.md +1 -0
  512. package/dist/okf/types/Rule.md +31 -0
  513. package/dist/okf/types/RunCache.md +29 -0
  514. package/dist/okf/types/Runtime.md +2 -1
  515. package/dist/okf/types/SCNInstance.md +33 -0
  516. package/dist/okf/types/SDBDomain.md +2 -2
  517. package/dist/okf/types/SMBFileShare.md +49 -0
  518. package/dist/okf/types/SageMakerArtifact.md +27 -0
  519. package/dist/okf/types/SageMakerEndpoint.md +0 -1
  520. package/dist/okf/types/ScalableTarget.md +1 -0
  521. package/dist/okf/types/ScalingPlan.md +6 -6
  522. package/dist/okf/types/ScheduledReport.md +31 -0
  523. package/dist/okf/types/SecondaryNetwork.md +26 -0
  524. package/dist/okf/types/SecurityAgentArtifact.md +25 -0
  525. package/dist/okf/types/SecurityAgentIntegration.md +31 -0
  526. package/dist/okf/types/Server.md +1 -0
  527. package/dist/okf/types/ServerlessCache.md +2 -0
  528. package/dist/okf/types/ServerlessCacheSnapshot.md +31 -0
  529. package/dist/okf/types/ServerlessRepoApplication.md +32 -0
  530. package/dist/okf/types/ServiceDiscoveryInstance.md +3 -7
  531. package/dist/okf/types/SipMediaApplication.md +27 -0
  532. package/dist/okf/types/SiteToSiteVpnAttachment.md +2 -0
  533. package/dist/okf/types/SnapshotCopyGrant.md +20 -0
  534. package/dist/okf/types/Solution.md +1 -0
  535. package/dist/okf/types/SourceAssociation.md +25 -0
  536. package/dist/okf/types/SourceCredential.md +6 -6
  537. package/dist/okf/types/SourceNetwork.md +23 -0
  538. package/dist/okf/types/StackFleetAssociation.md +2 -7
  539. package/dist/okf/types/StorageTierPolicy.md +20 -0
  540. package/dist/okf/types/StorageVirtualMachine.md +9 -9
  541. package/dist/okf/types/Stream.md +28 -0
  542. package/dist/okf/types/SubnetCidrReservation.md +26 -0
  543. package/dist/okf/types/SubscriptionProvider.md +26 -0
  544. package/dist/okf/types/SupportPermit.md +29 -0
  545. package/dist/okf/types/Table.md +2 -1
  546. package/dist/okf/types/TableOptimizer.md +5 -10
  547. package/dist/okf/types/Tape.md +31 -0
  548. package/dist/okf/types/Template.md +36 -0
  549. package/dist/okf/types/Tenant.md +2 -0
  550. package/dist/okf/types/Terminology.md +39 -0
  551. package/dist/okf/types/Thesaurus.md +25 -0
  552. package/dist/okf/types/ThingPrincipalAttachment.md +3 -8
  553. package/dist/okf/types/Topic.md +1 -0
  554. package/dist/okf/types/TopicRuleDestination.md +1 -0
  555. package/dist/okf/types/TrafficPolicy.md +26 -0
  556. package/dist/okf/types/TrafficPolicyInstance.md +28 -0
  557. package/dist/okf/types/TranscribeVocabulary.md +27 -0
  558. package/dist/okf/types/TransitGatewayRouteTableAttachment.md +2 -0
  559. package/dist/okf/types/TransitVirtualInterface.md +1 -0
  560. package/dist/okf/types/Tunnel.md +25 -0
  561. package/dist/okf/types/UsageLimit.md +26 -0
  562. package/dist/okf/types/UseCase.md +23 -0
  563. package/dist/okf/types/User.md +47 -0
  564. package/dist/okf/types/VPCEndpoint.md +1 -1
  565. package/dist/okf/types/VPCEndpointService.md +6 -0
  566. package/dist/okf/types/VPCPeeringConnection.md +2 -2
  567. package/dist/okf/types/VPNConcentrator.md +1 -1
  568. package/dist/okf/types/VPNConnection.md +1 -1
  569. package/dist/okf/types/VerifiedDestinationNumber.md +25 -0
  570. package/dist/okf/types/View.md +27 -0
  571. package/dist/okf/types/VoiceConnector.md +30 -0
  572. package/dist/okf/types/Volume.md +44 -0
  573. package/dist/okf/types/Vpc.md +1 -1
  574. package/dist/okf/types/VpcAttachment.md +2 -0
  575. package/dist/okf/types/WebFunction.md +27 -0
  576. package/dist/okf/types/WebFunctionEndpoint.md +44 -0
  577. package/dist/okf/types/WebFunctionRevision.md +32 -0
  578. package/dist/okf/types/WickrNetwork.md +27 -0
  579. package/dist/okf/types/Worker.md +29 -0
  580. package/dist/okf/types/Workforce.md +26 -0
  581. package/dist/okf/types/Workload.md +35 -0
  582. package/dist/okf/types/WorkloadEstimate.md +35 -0
  583. package/dist/okf/types/Workspace.md +28 -0
  584. package/dist/okf/types/Workteam.md +8 -8
  585. package/dist/op/activities/aws-apply.js +214 -0
  586. package/dist/op/activities/floci.js +97 -0
  587. package/dist/op/activities/index.js +32 -0
  588. package/dist/op/builders.js +50 -0
  589. package/dist/ownership.js +52 -0
  590. package/dist/package-cli.js +25 -0
  591. package/dist/parameter.js +19 -0
  592. package/dist/plugin.d.ts.map +1 -1
  593. package/dist/plugin.js +1012 -0
  594. package/dist/properties.js +166 -0
  595. package/dist/pseudo.js +25 -0
  596. package/dist/receipt-store.d.ts.map +1 -1
  597. package/dist/receipt-store.js +233 -0
  598. package/dist/reference-catalog.js +106 -0
  599. package/dist/rules/ext001.ts +3 -3
  600. package/dist/rules/waw016.ts +2 -2
  601. package/dist/serializer.js +529 -0
  602. package/dist/spec/fetch.js +193 -0
  603. package/dist/spec/parse.js +259 -0
  604. package/dist/spec/pin.js +185 -0
  605. package/dist/spec/pinned-types.json +203 -0
  606. package/dist/stack-errors.js +14 -0
  607. package/dist/taggable.d.ts.map +1 -1
  608. package/dist/taggable.js +33 -0
  609. package/dist/teardown.js +199 -0
  610. package/dist/template-sections.js +53 -0
  611. package/dist/template-transform.js +50 -0
  612. package/dist/types/index.d.ts +18847 -1124
  613. package/dist/validate-cli.js +16 -0
  614. package/dist/validate.js +33 -0
  615. package/package.json +9 -9
  616. package/src/agentcore/trace-fetch.ts +2 -1
  617. package/src/api/credential-chain.ts +119 -9
  618. package/src/api/credential-isolation.test.ts +72 -0
  619. package/src/api/read-client-chain.test.ts +159 -0
  620. package/src/api/read-client.ts +42 -6
  621. package/src/api/sigv4.ts +4 -4
  622. package/src/caller-identity.ts +3 -5
  623. package/src/codegen/any-budget.test.ts +12 -2
  624. package/src/codegen/generate.ts +9 -0
  625. package/src/codegen/package.ts +2 -2
  626. package/src/codegen/patches.test.ts +95 -0
  627. package/src/codegen/patches.ts +53 -9
  628. package/src/codegen/property-overlay.json +1 -16
  629. package/src/components/apply.ts +218 -6
  630. package/src/components/cfn-plan-floci.e2e.test.ts +76 -0
  631. package/src/components/cfn-plan.test.ts +225 -16
  632. package/src/components/cloud-executor.ts +73 -25
  633. package/src/deep-observe.ts +2 -1
  634. package/src/disruption.ts +2 -1
  635. package/src/generated/index.d.ts +18847 -1124
  636. package/src/generated/index.ts +1376 -161
  637. package/src/generated/lexicon-aws.json +17359 -784
  638. package/src/health.test.ts +136 -0
  639. package/src/health.ts +281 -0
  640. package/src/identity-observe.ts +2 -1
  641. package/src/lint/post-synth/ext001.ts +3 -3
  642. package/src/lint/post-synth/waw016.ts +2 -2
  643. package/src/lsp/completions.ts +2 -1
  644. package/src/lsp/hover.ts +2 -1
  645. package/src/plugin.ts +10 -1
  646. package/src/receipt-store.ts +2 -1
  647. package/src/spec/pin.ts +3 -3
  648. package/src/spec/pinned-types.json +203 -0
  649. package/src/taggable.ts +2 -2
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WAW011: Deprecated Lambda Runtime
3
+ *
4
+ * Checks Lambda function resources for deprecated or approaching-EOL runtimes.
5
+ * Emits error for "deprecated" runtimes and warning for "approaching_eol".
6
+ */
7
+ import { parseCFTemplate } from "./cf-refs.js";
8
+ import { lambdaRuntimeDeprecations } from "../../codegen/generate-lexicon.js";
9
+ export const waw011 = {
10
+ id: "WAW011",
11
+ description: "Deprecated Lambda runtime — flags deprecated or approaching-EOL Lambda runtimes",
12
+ check(ctx) {
13
+ const diagnostics = [];
14
+ const deprecations = lambdaRuntimeDeprecations();
15
+ for (const [_lexicon, output] of ctx.outputs) {
16
+ const template = parseCFTemplate(output);
17
+ if (!template?.Resources)
18
+ continue;
19
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
20
+ if (resource.Type !== "AWS::Lambda::Function")
21
+ continue;
22
+ const runtime = resource.Properties?.Runtime;
23
+ if (typeof runtime !== "string")
24
+ continue;
25
+ const status = deprecations[runtime];
26
+ if (!status)
27
+ continue;
28
+ const severity = status === "deprecated" ? "error" : "warning";
29
+ const label = status === "deprecated" ? "deprecated" : "approaching end-of-life";
30
+ diagnostics.push({
31
+ checkId: "WAW011",
32
+ severity,
33
+ message: `Lambda "${logicalId}" uses ${label} runtime "${runtime}"`,
34
+ entity: logicalId,
35
+ lexicon: "aws",
36
+ });
37
+ }
38
+ }
39
+ return diagnostics;
40
+ },
41
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * WAW013: Child project has no stackOutput() exports
3
+ *
4
+ * When a parent uses nestedStack() to reference a child project, the child
5
+ * must declare at least one stackOutput() — otherwise the parent can't
6
+ * reference any of its values.
7
+ */
8
+ import { isChildProject } from "@intentius/chant/child-project";
9
+ import { isStackOutput } from "@intentius/chant/stack-output";
10
+ export const waw013 = {
11
+ id: "WAW013",
12
+ description: "Child project has no stackOutput() exports — parent can't reference anything",
13
+ check(ctx) {
14
+ const diagnostics = [];
15
+ for (const [name, entity] of ctx.entities) {
16
+ if (isChildProject(entity) && entity.buildResult) {
17
+ // Check if the child has any StackOutput entities
18
+ let hasOutputs = false;
19
+ for (const [, childEntity] of entity.buildResult.entities) {
20
+ if (isStackOutput(childEntity)) {
21
+ hasOutputs = true;
22
+ break;
23
+ }
24
+ }
25
+ if (!hasOutputs) {
26
+ diagnostics.push({
27
+ checkId: "WAW013",
28
+ severity: "error",
29
+ message: `Nested stack "${name}" child project has no stackOutput() exports — parent can't reference any values`,
30
+ entity: name,
31
+ lexicon: "aws",
32
+ });
33
+ }
34
+ }
35
+ }
36
+ return diagnostics;
37
+ },
38
+ };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * WAW014: Nested stack outputs never referenced from parent
3
+ *
4
+ * Warns when a nestedStack() is declared but none of its outputs are
5
+ * referenced from the parent template. Could just be a separate build.
6
+ */
7
+ import { getPrimaryOutput } from "@intentius/chant/lint/post-synth";
8
+ import { isChildProject } from "@intentius/chant/child-project";
9
+ export const waw014 = {
10
+ id: "WAW014",
11
+ description: "Nested stack outputs never referenced from parent — could just be a separate build",
12
+ check(ctx) {
13
+ const diagnostics = [];
14
+ // Collect child project names
15
+ const childProjectNames = new Set();
16
+ for (const [name, entity] of ctx.entities) {
17
+ if (isChildProject(entity)) {
18
+ childProjectNames.add(name);
19
+ }
20
+ }
21
+ if (childProjectNames.size === 0)
22
+ return diagnostics;
23
+ // Parse the primary template to check for Fn::GetAtt on nested stacks
24
+ for (const [_lexicon, output] of ctx.outputs) {
25
+ const json = getPrimaryOutput(output);
26
+ for (const stackName of childProjectNames) {
27
+ // Check if any Fn::GetAtt references this stack's outputs
28
+ const hasRef = json.includes(`"Fn::GetAtt"`) && json.includes(`"${stackName}"`);
29
+ if (!hasRef) {
30
+ diagnostics.push({
31
+ checkId: "WAW014",
32
+ severity: "warning",
33
+ message: `Nested stack "${stackName}" outputs are never referenced — consider building it separately`,
34
+ entity: stackName,
35
+ lexicon: "aws",
36
+ });
37
+ }
38
+ }
39
+ }
40
+ return diagnostics;
41
+ },
42
+ };
@@ -0,0 +1,88 @@
1
+ /**
2
+ * WAW015: Circular project references
3
+ *
4
+ * Detects when child projects form circular references through
5
+ * nestedStack() declarations. A → B → A would cause infinite recursion
6
+ * at build time.
7
+ *
8
+ * Note: The core build pipeline also detects this and emits a BuildError,
9
+ * but this lint check provides a clearer diagnostic message.
10
+ */
11
+ import { isChildProject } from "@intentius/chant/child-project";
12
+ export const waw015 = {
13
+ id: "WAW015",
14
+ description: "Circular dependency between nested stacks would cause infinite build recursion",
15
+ check(ctx) {
16
+ const diagnostics = [];
17
+ // Build a dependency graph: stackName → set of child project paths
18
+ const stacks = new Map();
19
+ for (const [name, entity] of ctx.entities) {
20
+ if (isChildProject(entity)) {
21
+ stacks.set(name, entity.projectPath);
22
+ }
23
+ }
24
+ if (stacks.size < 2)
25
+ return diagnostics;
26
+ // Check for cycles by looking at child build results for nested ChildProjectInstances
27
+ const deps = new Map();
28
+ for (const [name] of stacks) {
29
+ deps.set(name, new Set());
30
+ }
31
+ for (const [name, entity] of ctx.entities) {
32
+ if (isChildProject(entity) && entity.buildResult) {
33
+ for (const [, childEntity] of entity.buildResult.entities) {
34
+ if (isChildProject(childEntity)) {
35
+ // Check if the child references any of our known stacks
36
+ for (const [stackName, stackPath] of stacks) {
37
+ if (childEntity.projectPath === stackPath) {
38
+ deps.get(name).add(stackName);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ // Detect cycles using DFS
46
+ const visited = new Set();
47
+ const inPath = new Set();
48
+ function dfs(node, path) {
49
+ if (inPath.has(node)) {
50
+ const cycleStart = path.indexOf(node);
51
+ return path.slice(cycleStart);
52
+ }
53
+ if (visited.has(node))
54
+ return null;
55
+ visited.add(node);
56
+ inPath.add(node);
57
+ path.push(node);
58
+ for (const dep of deps.get(node) ?? []) {
59
+ const cycle = dfs(dep, path);
60
+ if (cycle)
61
+ return cycle;
62
+ }
63
+ path.pop();
64
+ inPath.delete(node);
65
+ return null;
66
+ }
67
+ const reportedCycles = new Set();
68
+ for (const [name] of stacks) {
69
+ if (!visited.has(name)) {
70
+ const cycle = dfs(name, []);
71
+ if (cycle) {
72
+ const cycleKey = [...cycle].sort().join(",");
73
+ if (!reportedCycles.has(cycleKey)) {
74
+ reportedCycles.add(cycleKey);
75
+ diagnostics.push({
76
+ checkId: "WAW015",
77
+ severity: "error",
78
+ message: `Circular dependency between nested stacks: ${cycle.join(" → ")} → ${cycle[0]}`,
79
+ entity: cycle[0],
80
+ lexicon: "aws",
81
+ });
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return diagnostics;
87
+ },
88
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"waw016.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/waw016.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAG9G,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;AA6DvD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GACrD,mBAAmB,EAAE,CAmCvB;AAED,eAAO,MAAM,MAAM,EAAE,cAOpB,CAAC"}
1
+ {"version":3,"file":"waw016.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/waw016.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAG9G,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;AA4DvD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GACrD,mBAAmB,EAAE,CAmCvB;AAED,eAAO,MAAM,MAAM,EAAE,cAOpB,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * WAW016: Deprecated Property Usage
3
+ *
4
+ * Flags properties marked as deprecated in the CloudFormation Registry.
5
+ *
6
+ * Two bases feed this, and the finding says which one it stands on (#1701).
7
+ * A `declared` name comes from the Registry schema's own `deprecatedProperties`
8
+ * array. An `inferred` name comes from a regex over the property description,
9
+ * which also matches descriptions that mention the deprecation of a sibling
10
+ * property, an enum value, or the thing the property configures. Declared is a
11
+ * warning; inferred is reported at info and worded as a guess.
12
+ *
13
+ * A declared name is a flattened Registry pointer path (#1988), so most of them
14
+ * are nested — `Tags/TagKey`, `Source/Decryption/Url`. The template is walked
15
+ * along that path; matching top-level keys reached fewer than half of them.
16
+ */
17
+ import { readFileSync } from "fs";
18
+ import { join } from "path";
19
+ import { moduleSourceDir } from "@intentius/chant/module-source";
20
+ import { parseCFTemplate } from "./cf-refs.js";
21
+ /**
22
+ * Load deprecated properties per resource type from the lexicon JSON, each
23
+ * tagged with the basis it was classified on.
24
+ */
25
+ function loadDeprecatedProperties() {
26
+ const map = new Map();
27
+ try {
28
+ const lexiconPath = join(moduleSourceDir(import.meta.url), "..", "..", "generated", "lexicon-aws.json");
29
+ const content = readFileSync(lexiconPath, "utf-8");
30
+ const data = JSON.parse(content);
31
+ for (const [_name, entry] of Object.entries(data)) {
32
+ if (entry.kind !== "resource" || !entry.resourceType)
33
+ continue;
34
+ if (!entry.deprecatedProperties?.length)
35
+ continue;
36
+ const inferred = new Set(entry.inferredDeprecations ?? []);
37
+ const byProp = new Map();
38
+ for (const propName of entry.deprecatedProperties) {
39
+ byProp.set(propName, inferred.has(propName) ? "inferred" : "declared");
40
+ }
41
+ map.set(entry.resourceType, byProp);
42
+ }
43
+ }
44
+ catch {
45
+ // Lexicon not available — skip
46
+ }
47
+ return map;
48
+ }
49
+ /**
50
+ * True when `value` expresses `segments` — the flattened Registry pointer path
51
+ * (#1988), which is a single key for a top-level property and `/`-joined for a
52
+ * nested one.
53
+ *
54
+ * An array met where the pointer named a property is descended anyway: the
55
+ * Registry elides the wildcard in some schemas, so `Tags/TagKey` addresses a
56
+ * key inside the Tags array's items.
57
+ */
58
+ function expressesPath(value, segments) {
59
+ if (segments.length === 0)
60
+ return true;
61
+ if (Array.isArray(value)) {
62
+ const rest = segments[0] === "*" ? segments.slice(1) : segments;
63
+ return value.some((item) => expressesPath(item, rest));
64
+ }
65
+ if (segments[0] === "*")
66
+ return false;
67
+ if (typeof value !== "object" || value === null)
68
+ return false;
69
+ const obj = value;
70
+ if (!Object.prototype.hasOwnProperty.call(obj, segments[0]))
71
+ return false;
72
+ return expressesPath(obj[segments[0]], segments.slice(1));
73
+ }
74
+ /**
75
+ * Core detection logic — exported for direct testing with synthetic data.
76
+ */
77
+ export function checkDeprecatedProperties(ctx, deprecated) {
78
+ if (deprecated.size === 0)
79
+ return [];
80
+ const diagnostics = [];
81
+ for (const [_lexicon, output] of ctx.outputs) {
82
+ const template = parseCFTemplate(output);
83
+ if (!template?.Resources)
84
+ continue;
85
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
86
+ const deprProps = deprecated.get(resource.Type);
87
+ if (!deprProps)
88
+ continue;
89
+ const props = resource.Properties ?? {};
90
+ // Walk each declared path into the template, rather than matching
91
+ // top-level template keys: over half the declared names are nested
92
+ // (#1988), and a key comparison could never reach them.
93
+ for (const [propName, basis] of deprProps) {
94
+ if (!expressesPath(props, propName.split("/")))
95
+ continue;
96
+ diagnostics.push({
97
+ checkId: "WAW016",
98
+ severity: basis === "declared" ? "warning" : "info",
99
+ message: basis === "declared"
100
+ ? `Resource "${logicalId}" (${resource.Type}) uses deprecated property "${propName}" — consider alternatives`
101
+ : `Resource "${logicalId}" (${resource.Type}) uses property "${propName}", whose description reads as deprecated — the CloudFormation Registry does not declare it deprecated, so confirm before changing it`,
102
+ entity: logicalId,
103
+ lexicon: "aws",
104
+ });
105
+ }
106
+ }
107
+ }
108
+ return diagnostics;
109
+ }
110
+ export const waw016 = {
111
+ id: "WAW016",
112
+ description: "Deprecated property usage — flags properties marked as deprecated in the CloudFormation Registry",
113
+ check(ctx) {
114
+ return checkDeprecatedProperties(ctx, loadDeprecatedProperties());
115
+ },
116
+ };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * WAW017: Missing Tags on Taggable Resource
3
+ *
4
+ * Flags taggable resources that have no Tags property set.
5
+ * Encourages adding tags for cost allocation and compliance.
6
+ */
7
+ import { parseCFTemplate } from "./cf-refs.js";
8
+ import { loadTaggableResources } from "../../taggable.js";
9
+ /**
10
+ * Core detection logic — exported for direct testing with synthetic data.
11
+ */
12
+ export function checkMissingTags(ctx, taggable) {
13
+ if (taggable.size === 0)
14
+ return [];
15
+ const diagnostics = [];
16
+ for (const [_lexicon, output] of ctx.outputs) {
17
+ const template = parseCFTemplate(output);
18
+ if (!template?.Resources)
19
+ continue;
20
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
21
+ if (!taggable.has(resource.Type))
22
+ continue;
23
+ const props = resource.Properties ?? {};
24
+ if (!("Tags" in props)) {
25
+ diagnostics.push({
26
+ checkId: "WAW017",
27
+ severity: "warning",
28
+ message: `Resource "${logicalId}" (${resource.Type}) supports tagging but has no Tags — consider adding tags for cost allocation and compliance`,
29
+ entity: logicalId,
30
+ lexicon: "aws",
31
+ });
32
+ }
33
+ }
34
+ }
35
+ return diagnostics;
36
+ }
37
+ export const waw017 = {
38
+ id: "WAW017",
39
+ description: "Missing tags on taggable resource — suggests adding tags for cost allocation and compliance",
40
+ check(ctx) {
41
+ return checkMissingTags(ctx, loadTaggableResources());
42
+ },
43
+ };
@@ -0,0 +1,61 @@
1
+ /**
2
+ * WAW018: S3 Public Access Not Blocked
3
+ *
4
+ * Flags S3 buckets missing PublicAccessBlockConfiguration or with any flag set to false.
5
+ */
6
+ import { parseCFTemplate, isIntrinsic } from "./cf-refs.js";
7
+ const REQUIRED_FLAGS = [
8
+ "BlockPublicAcls",
9
+ "BlockPublicPolicy",
10
+ "IgnorePublicAcls",
11
+ "RestrictPublicBuckets",
12
+ ];
13
+ export function checkS3PublicAccess(ctx) {
14
+ const diagnostics = [];
15
+ for (const [_lexicon, output] of ctx.outputs) {
16
+ const template = parseCFTemplate(output);
17
+ if (!template?.Resources)
18
+ continue;
19
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
20
+ if (resource.Type !== "AWS::S3::Bucket")
21
+ continue;
22
+ const props = resource.Properties ?? {};
23
+ const pab = props.PublicAccessBlockConfiguration;
24
+ if (!pab) {
25
+ diagnostics.push({
26
+ checkId: "WAW018",
27
+ severity: "error",
28
+ message: `S3 bucket "${logicalId}" is missing PublicAccessBlockConfiguration — all public access should be blocked`,
29
+ entity: logicalId,
30
+ lexicon: "aws",
31
+ });
32
+ continue;
33
+ }
34
+ if (isIntrinsic(pab))
35
+ continue;
36
+ if (typeof pab === "object" && pab !== null) {
37
+ const config = pab;
38
+ for (const flag of REQUIRED_FLAGS) {
39
+ const value = config[flag];
40
+ if (value === false) {
41
+ diagnostics.push({
42
+ checkId: "WAW018",
43
+ severity: "error",
44
+ message: `S3 bucket "${logicalId}" has ${flag} set to false — all public access should be blocked`,
45
+ entity: logicalId,
46
+ lexicon: "aws",
47
+ });
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ return diagnostics;
54
+ }
55
+ export const waw018 = {
56
+ id: "WAW018",
57
+ description: "S3 bucket missing public access block — all public access should be blocked",
58
+ check(ctx) {
59
+ return checkS3PublicAccess(ctx);
60
+ },
61
+ };
@@ -0,0 +1,64 @@
1
+ /**
2
+ * WAW019: Security Group Unrestricted Ingress
3
+ *
4
+ * Flags security groups with 0.0.0.0/0 or ::/0 ingress on sensitive ports
5
+ * (SSH 22, RDP 3389, MySQL 3306, PostgreSQL 5432).
6
+ */
7
+ import { parseCFTemplate, getSecurityGroupIngress, portRangeContainsSensitive, isIntrinsic } from "./cf-refs.js";
8
+ const SENSITIVE_PORTS = [22, 3389, 3306, 5432];
9
+ const OPEN_CIDRS = new Set(["0.0.0.0/0", "::/0"]);
10
+ function checkIngressRule(rule, logicalId, diagnostics) {
11
+ const cidrIp = rule.CidrIp;
12
+ const cidrIpv6 = rule.CidrIpv6;
13
+ const hasOpenCidr = (typeof cidrIp === "string" && OPEN_CIDRS.has(cidrIp)) ||
14
+ (typeof cidrIpv6 === "string" && OPEN_CIDRS.has(cidrIpv6));
15
+ if (!hasOpenCidr)
16
+ return;
17
+ if (portRangeContainsSensitive(rule.FromPort, rule.ToPort, SENSITIVE_PORTS)) {
18
+ const cidr = typeof cidrIp === "string" && OPEN_CIDRS.has(cidrIp) ? cidrIp : cidrIpv6;
19
+ const fromPort = rule.FromPort;
20
+ const toPort = rule.ToPort;
21
+ const portDesc = fromPort !== undefined && toPort !== undefined
22
+ ? ` on ports ${fromPort}-${toPort}`
23
+ : " on all ports";
24
+ diagnostics.push({
25
+ checkId: "WAW019",
26
+ severity: "error",
27
+ message: `Security group "${logicalId}" allows unrestricted ingress from ${cidr}${portDesc} — restrict to specific CIDR ranges`,
28
+ entity: logicalId,
29
+ lexicon: "aws",
30
+ });
31
+ }
32
+ }
33
+ export function checkUnrestrictedIngress(ctx) {
34
+ const diagnostics = [];
35
+ for (const [_lexicon, output] of ctx.outputs) {
36
+ const template = parseCFTemplate(output);
37
+ if (!template?.Resources)
38
+ continue;
39
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
40
+ // Check inline SecurityGroupIngress on EC2::SecurityGroup
41
+ if (resource.Type === "AWS::EC2::SecurityGroup") {
42
+ const rules = getSecurityGroupIngress(resource);
43
+ for (const rule of rules) {
44
+ checkIngressRule(rule, logicalId, diagnostics);
45
+ }
46
+ }
47
+ // Check standalone SecurityGroupIngress resources
48
+ if (resource.Type === "AWS::EC2::SecurityGroupIngress") {
49
+ const props = resource.Properties ?? {};
50
+ if (!isIntrinsic(props)) {
51
+ checkIngressRule(props, logicalId, diagnostics);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ return diagnostics;
57
+ }
58
+ export const waw019 = {
59
+ id: "WAW019",
60
+ description: "Security group allows unrestricted ingress on sensitive ports (SSH, RDP, database)",
61
+ check(ctx) {
62
+ return checkUnrestrictedIngress(ctx);
63
+ },
64
+ };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * WAW020: IAM Wildcard Action
3
+ *
4
+ * Flags IAM policies with Action: "*" in any statement.
5
+ * Checks IAM::Policy, IAM::Role, and IAM::ManagedPolicy resource types.
6
+ */
7
+ import { parseCFTemplate, walkPolicyStatements, isIntrinsic } from "./cf-refs.js";
8
+ const IAM_TYPES = new Set([
9
+ "AWS::IAM::Policy",
10
+ "AWS::IAM::Role",
11
+ "AWS::IAM::ManagedPolicy",
12
+ ]);
13
+ function hasWildcardAction(statement) {
14
+ const action = statement.Action;
15
+ if (action === "*")
16
+ return true;
17
+ if (Array.isArray(action)) {
18
+ return action.some((a) => a === "*");
19
+ }
20
+ return false;
21
+ }
22
+ export function checkIamWildcardAction(ctx) {
23
+ const diagnostics = [];
24
+ for (const [_lexicon, output] of ctx.outputs) {
25
+ const template = parseCFTemplate(output);
26
+ if (!template?.Resources)
27
+ continue;
28
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
29
+ if (!IAM_TYPES.has(resource.Type))
30
+ continue;
31
+ const statements = walkPolicyStatements(resource);
32
+ for (const stmt of statements) {
33
+ if (isIntrinsic(stmt.Action))
34
+ continue;
35
+ if (hasWildcardAction(stmt)) {
36
+ diagnostics.push({
37
+ checkId: "WAW020",
38
+ severity: "warning",
39
+ message: `IAM resource "${logicalId}" has a policy statement with Action: "*" — use specific actions following least privilege`,
40
+ entity: logicalId,
41
+ lexicon: "aws",
42
+ });
43
+ break; // One diagnostic per resource
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return diagnostics;
49
+ }
50
+ export const waw020 = {
51
+ id: "WAW020",
52
+ description: "IAM policy uses wildcard Action — use specific actions following least privilege",
53
+ check(ctx) {
54
+ return checkIamWildcardAction(ctx);
55
+ },
56
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WAW021: RDS Storage Not Encrypted
3
+ *
4
+ * Flags RDS instances and clusters without StorageEncrypted: true.
5
+ */
6
+ import { parseCFTemplate, isIntrinsic } from "./cf-refs.js";
7
+ const RDS_TYPES = new Set([
8
+ "AWS::RDS::DBInstance",
9
+ "AWS::RDS::DBCluster",
10
+ ]);
11
+ export function checkRdsEncryption(ctx) {
12
+ const diagnostics = [];
13
+ for (const [_lexicon, output] of ctx.outputs) {
14
+ const template = parseCFTemplate(output);
15
+ if (!template?.Resources)
16
+ continue;
17
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
18
+ if (!RDS_TYPES.has(resource.Type))
19
+ continue;
20
+ const props = resource.Properties ?? {};
21
+ const encrypted = props.StorageEncrypted;
22
+ // Skip if it's an intrinsic (can't statically verify)
23
+ if (isIntrinsic(encrypted))
24
+ continue;
25
+ if (encrypted !== true) {
26
+ diagnostics.push({
27
+ checkId: "WAW021",
28
+ severity: "error",
29
+ message: `RDS resource "${logicalId}" (${resource.Type}) does not have StorageEncrypted: true — enable encryption at rest`,
30
+ entity: logicalId,
31
+ lexicon: "aws",
32
+ });
33
+ }
34
+ }
35
+ }
36
+ return diagnostics;
37
+ }
38
+ export const waw021 = {
39
+ id: "WAW021",
40
+ description: "RDS instance or cluster storage is not encrypted — enable encryption at rest",
41
+ check(ctx) {
42
+ return checkRdsEncryption(ctx);
43
+ },
44
+ };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * WAW022: Lambda Not in VPC
3
+ *
4
+ * Flags Lambda functions without VpcConfig.
5
+ */
6
+ import { parseCFTemplate } from "./cf-refs.js";
7
+ export function checkLambdaVpc(ctx) {
8
+ const diagnostics = [];
9
+ for (const [_lexicon, output] of ctx.outputs) {
10
+ const template = parseCFTemplate(output);
11
+ if (!template?.Resources)
12
+ continue;
13
+ for (const [logicalId, resource] of Object.entries(template.Resources)) {
14
+ if (resource.Type !== "AWS::Lambda::Function")
15
+ continue;
16
+ const props = resource.Properties ?? {};
17
+ if (!("VpcConfig" in props)) {
18
+ diagnostics.push({
19
+ checkId: "WAW022",
20
+ severity: "warning",
21
+ message: `Lambda function "${logicalId}" is not configured with a VPC — consider adding VpcConfig for network isolation`,
22
+ entity: logicalId,
23
+ lexicon: "aws",
24
+ });
25
+ }
26
+ }
27
+ }
28
+ return diagnostics;
29
+ }
30
+ export const waw022 = {
31
+ id: "WAW022",
32
+ description: "Lambda function is not configured with a VPC — consider adding VpcConfig for network isolation",
33
+ check(ctx) {
34
+ return checkLambdaVpc(ctx);
35
+ },
36
+ };