@aws/nx-plugin 1.0.0-rc.6 → 1.0.0-rc.60

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 (1262) hide show
  1. package/LICENSE-THIRD-PARTY +7104 -6167
  2. package/README.md +8 -7
  3. package/generators.json +145 -10
  4. package/migrations.json +111 -0
  5. package/package.json +41 -22
  6. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +273 -0
  7. package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
  8. package/src/agentcore-gateway/agent-connection/generator.js +95 -0
  9. package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
  10. package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
  11. package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
  12. package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
  13. package/src/agentcore-gateway/agent-connection/schema.json +31 -0
  14. package/src/agentcore-gateway/attach-upstream.d.ts +49 -0
  15. package/src/agentcore-gateway/attach-upstream.js +59 -0
  16. package/src/agentcore-gateway/attach-upstream.js.map +1 -0
  17. package/src/agentcore-gateway/files/cedar/policies/README.md +61 -0
  18. package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +26 -0
  19. package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
  20. package/src/agentcore-gateway/files/project/mcp/local-dev.ts.template +134 -0
  21. package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
  22. package/src/agentcore-gateway/gateway-connection/generator.js +103 -0
  23. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
  24. package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
  25. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
  26. package/src/agentcore-gateway/gateway-connection/schema.d.ts +13 -0
  27. package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
  28. package/src/agentcore-gateway/generator.d.ts +89 -0
  29. package/src/agentcore-gateway/generator.js +212 -0
  30. package/src/agentcore-gateway/generator.js.map +1 -0
  31. package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
  32. package/src/agentcore-gateway/mcp-connection/generator.js +61 -0
  33. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
  34. package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
  35. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
  36. package/src/agentcore-gateway/mcp-connection/schema.d.ts +13 -0
  37. package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
  38. package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
  39. package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
  40. package/src/agentcore-gateway/react-connection/generator.js +119 -0
  41. package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
  42. package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
  43. package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
  44. package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
  45. package/src/agentcore-gateway/react-connection/schema.json +31 -0
  46. package/src/agentcore-gateway/schema.d.js +6 -0
  47. package/src/agentcore-gateway/schema.d.js.map +1 -0
  48. package/src/agentcore-gateway/schema.d.ts +17 -0
  49. package/src/agentcore-gateway/schema.json +72 -0
  50. package/src/connection/agent-local-dev.d.ts +49 -0
  51. package/src/connection/agent-local-dev.js +84 -0
  52. package/src/connection/agent-local-dev.js.map +1 -0
  53. package/src/connection/agent-runtime-config.js +9 -14
  54. package/src/connection/agent-runtime-config.js.map +1 -1
  55. package/src/connection/gateway-runtime-config.d.ts +19 -0
  56. package/src/connection/gateway-runtime-config.js +47 -0
  57. package/src/connection/gateway-runtime-config.js.map +1 -0
  58. package/src/connection/generator.d.ts +3 -10
  59. package/src/connection/generator.js +172 -194
  60. package/src/connection/generator.js.map +1 -1
  61. package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
  62. package/src/connection/local-dev.js +37 -0
  63. package/src/connection/local-dev.js.map +1 -0
  64. package/src/connection/scaffold-catalog.d.ts +267 -0
  65. package/src/connection/scaffold-catalog.js +347 -0
  66. package/src/connection/scaffold-catalog.js.map +1 -0
  67. package/src/connection/schema-resolver.d.ts +5 -0
  68. package/src/connection/schema-resolver.js +27 -0
  69. package/src/connection/schema-resolver.js.map +1 -0
  70. package/src/connection/schema.d.js +6 -0
  71. package/src/connection/schema.d.js.map +1 -0
  72. package/src/connection/schema.d.ts +1 -0
  73. package/src/connection/schema.json +5 -0
  74. package/src/connection/supported-connections.d.ts +116 -0
  75. package/src/connection/supported-connections.js +163 -0
  76. package/src/connection/supported-connections.js.map +1 -0
  77. package/src/index.js +2 -5
  78. package/src/index.js.map +1 -1
  79. package/src/infra/app/__snapshots__/generator.spec.ts.snap +91 -72
  80. package/src/infra/app/files/app/src/main.ts.template +1 -1
  81. package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
  82. package/src/infra/app/generator.d.ts +43 -0
  83. package/src/infra/app/generator.js +179 -127
  84. package/src/infra/app/generator.js.map +1 -1
  85. package/src/infra/app/schema.d.js +6 -0
  86. package/src/infra/app/schema.d.js.map +1 -0
  87. package/src/infra/app/schema.d.ts +1 -1
  88. package/src/infra/app/schema.json +5 -0
  89. package/src/init/generator.d.ts +31 -0
  90. package/src/init/generator.js +46 -0
  91. package/src/init/generator.js.map +1 -0
  92. package/src/init/schema.d.js +6 -0
  93. package/src/init/schema.d.js.map +1 -0
  94. package/src/init/schema.d.ts +16 -0
  95. package/src/init/schema.json +35 -0
  96. package/src/internal/test-matrix/generator.d.ts +29 -0
  97. package/src/internal/test-matrix/generator.js +698 -0
  98. package/src/internal/test-matrix/generator.js.map +1 -0
  99. package/src/internal/test-matrix/schema.d.js +6 -0
  100. package/src/internal/test-matrix/schema.d.js.map +1 -0
  101. package/src/internal/test-matrix/schema.d.ts +12 -0
  102. package/src/internal/test-matrix/schema.json +21 -0
  103. package/src/license/config-types.js +5 -3
  104. package/src/license/config-types.js.map +1 -1
  105. package/src/license/config.d.ts +1 -1
  106. package/src/license/config.js +267 -242
  107. package/src/license/config.js.map +1 -1
  108. package/src/license/dependency-check/check.js +51 -46
  109. package/src/license/dependency-check/check.js.map +1 -1
  110. package/src/license/dependency-check/collectors/collector.js +41 -71
  111. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  112. package/src/license/dependency-check/collectors/npm-collector.js +34 -41
  113. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
  114. package/src/license/dependency-check/collectors/python-collector.js +55 -62
  115. package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
  116. package/src/license/dependency-check/evaluator.js +40 -68
  117. package/src/license/dependency-check/evaluator.js.map +1 -1
  118. package/src/license/dependency-check/executor.js +30 -22
  119. package/src/license/dependency-check/executor.js.map +1 -1
  120. package/src/license/dependency-check/pre-approved.js +949 -336
  121. package/src/license/dependency-check/pre-approved.js.map +1 -1
  122. package/src/license/dependency-check/types.js +2 -3
  123. package/src/license/dependency-check/types.js.map +1 -1
  124. package/src/license/generator.js +65 -68
  125. package/src/license/generator.js.map +1 -1
  126. package/src/license/index.js +3 -9
  127. package/src/license/index.js.map +1 -1
  128. package/src/license/known-exceptions.d.ts +1 -1
  129. package/src/license/known-exceptions.js +19 -13
  130. package/src/license/known-exceptions.js.map +1 -1
  131. package/src/license/schema.d.js +6 -0
  132. package/src/license/schema.d.js.map +1 -0
  133. package/src/license/schema.d.ts +2 -0
  134. package/src/license/schema.json +5 -0
  135. package/src/license/sync/generator.js +94 -119
  136. package/src/license/sync/generator.js.map +1 -1
  137. package/src/license/sync/project-file-sync.js +28 -35
  138. package/src/license/sync/project-file-sync.js.map +1 -1
  139. package/src/mcp-server/dev-server.d.ts +1 -0
  140. package/src/mcp-server/dev-server.js +18 -0
  141. package/src/mcp-server/dev-server.js.map +1 -0
  142. package/src/mcp-server/generator-info.js +149 -165
  143. package/src/mcp-server/generator-info.js.map +1 -1
  144. package/src/mcp-server/guide-pipeline.js +199 -206
  145. package/src/mcp-server/guide-pipeline.js.map +1 -1
  146. package/src/mcp-server/guide-render.js +10 -25
  147. package/src/mcp-server/guide-render.js.map +1 -1
  148. package/src/mcp-server/index.js +6 -10
  149. package/src/mcp-server/index.js.map +1 -1
  150. package/src/mcp-server/mdx-ast.js +39 -57
  151. package/src/mcp-server/mdx-ast.js.map +1 -1
  152. package/src/mcp-server/option-filter.js +33 -47
  153. package/src/mcp-server/option-filter.js.map +1 -1
  154. package/src/mcp-server/schema-registry.d.ts +9 -3
  155. package/src/mcp-server/schema-registry.js +41 -38
  156. package/src/mcp-server/schema-registry.js.map +1 -1
  157. package/src/mcp-server/schema.d.ts +1 -1
  158. package/src/mcp-server/schema.js +9 -7
  159. package/src/mcp-server/schema.js.map +1 -1
  160. package/src/mcp-server/server.js +24 -24
  161. package/src/mcp-server/server.js.map +1 -1
  162. package/src/mcp-server/tools/add-to-existing-project.d.ts +12 -0
  163. package/src/mcp-server/tools/add-to-existing-project.js +36 -0
  164. package/src/mcp-server/tools/add-to-existing-project.js.map +1 -0
  165. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  166. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  167. package/src/mcp-server/tools/general-guidance.d.ts +1 -1
  168. package/src/mcp-server/tools/general-guidance.js +53 -31
  169. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  170. package/src/mcp-server/tools/generator-guide.js +29 -37
  171. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  172. package/src/mcp-server/tools/list-generators.js +19 -25
  173. package/src/mcp-server/tools/list-generators.js.map +1 -1
  174. package/src/mcp-server/tools/upgrade-workspace.d.ts +11 -0
  175. package/src/mcp-server/tools/upgrade-workspace.js +32 -0
  176. package/src/mcp-server/tools/upgrade-workspace.js.map +1 -0
  177. package/src/migrations/latest/gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
  178. package/src/migrations/latest/gateway-agent-targets/metadata.json +3 -0
  179. package/src/migrations/latest/gateway-agent-targets/migration.d.ts +6 -0
  180. package/src/migrations/latest/gateway-agent-targets/migration.js +217 -0
  181. package/src/migrations/latest/gateway-agent-targets/migration.js.map +1 -0
  182. package/src/migrations/latest/gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
  183. package/src/migrations/latest/gateway-cognito-passthrough/metadata.json +3 -0
  184. package/src/migrations/latest/gateway-cognito-passthrough/migration.d.ts +6 -0
  185. package/src/migrations/latest/gateway-cognito-passthrough/migration.js +195 -0
  186. package/src/migrations/latest/gateway-cognito-passthrough/migration.js.map +1 -0
  187. package/src/migrations/latest/smithy-ssdk-bundle-pins/metadata.json +3 -0
  188. package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.d.ts +6 -0
  189. package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js +78 -0
  190. package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +1 -0
  191. package/src/migrations/latest/strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
  192. package/src/migrations/latest/strip-pip-from-python-images/metadata.json +3 -0
  193. package/src/migrations/latest/strip-pip-from-python-images/migration.d.ts +6 -0
  194. package/src/migrations/latest/strip-pip-from-python-images/migration.js +91 -0
  195. package/src/migrations/latest/strip-pip-from-python-images/migration.js.map +1 -0
  196. package/src/migrations/latest/waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
  197. package/src/migrations/latest/waf-log-group-removal/metadata.json +3 -0
  198. package/src/migrations/latest/waf-log-group-removal/migration.d.ts +6 -0
  199. package/src/migrations/latest/waf-log-group-removal/migration.js +77 -0
  200. package/src/migrations/latest/waf-log-group-removal/migration.js.map +1 -0
  201. package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/metadata.json +3 -0
  202. package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.d.ts +6 -0
  203. package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js +65 -0
  204. package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js.map +1 -0
  205. package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/metadata.json +3 -0
  206. package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.d.ts +6 -0
  207. package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js +108 -0
  208. package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js.map +1 -0
  209. package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
  210. package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
  211. package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
  212. package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
  213. package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/metadata.json +3 -0
  214. package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
  215. package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js +215 -0
  216. package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
  217. package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
  218. package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
  219. package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js +93 -0
  220. package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  221. package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/metadata.json +3 -0
  222. package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.d.ts +96 -0
  223. package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js +670 -0
  224. package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js.map +1 -0
  225. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/metadata.json +3 -0
  226. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  227. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js +89 -0
  228. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  229. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/metadata.json +3 -0
  230. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.d.ts +6 -0
  231. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js +449 -0
  232. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js.map +1 -0
  233. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  234. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  235. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +298 -74
  236. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +748 -103
  237. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +230 -37
  238. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +249 -52
  239. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5535 -0
  240. package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
  241. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +305 -71
  242. package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +298 -0
  243. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +353 -82
  244. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +176 -55
  245. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +100 -24
  246. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  247. package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
  248. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  249. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
  250. package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
  251. package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
  252. package/src/open-api/ts-client/generator.js +41 -26
  253. package/src/open-api/ts-client/generator.js.map +1 -1
  254. package/src/open-api/ts-client/schema.d.js +6 -0
  255. package/src/open-api/ts-client/schema.d.js.map +1 -0
  256. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
  257. package/src/open-api/ts-hooks/generator.js +17 -21
  258. package/src/open-api/ts-hooks/generator.js.map +1 -1
  259. package/src/open-api/ts-hooks/generator.spec.tsx +70 -0
  260. package/src/open-api/ts-hooks/schema.d.js +6 -0
  261. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  262. package/src/open-api/ts-metadata/generator.js +12 -20
  263. package/src/open-api/ts-metadata/generator.js.map +1 -1
  264. package/src/open-api/ts-metadata/schema.d.js +6 -0
  265. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  266. package/src/open-api/utils/codegen-data/languages.d.ts +0 -6
  267. package/src/open-api/utils/codegen-data/languages.js +59 -66
  268. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  269. package/src/open-api/utils/codegen-data/types.d.ts +255 -10
  270. package/src/open-api/utils/codegen-data/types.js +54 -30
  271. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  272. package/src/open-api/utils/codegen-data.d.ts +2 -2
  273. package/src/open-api/utils/codegen-data.js +494 -674
  274. package/src/open-api/utils/codegen-data.js.map +1 -1
  275. package/src/open-api/utils/normalise.js +437 -246
  276. package/src/open-api/utils/normalise.js.map +1 -1
  277. package/src/open-api/utils/parse.js +8 -14
  278. package/src/open-api/utils/parse.js.map +1 -1
  279. package/src/open-api/utils/parser.d.ts +55 -0
  280. package/src/open-api/utils/parser.js +787 -0
  281. package/src/open-api/utils/parser.js.map +1 -0
  282. package/src/open-api/utils/refs.js +12 -22
  283. package/src/open-api/utils/refs.js.map +1 -1
  284. package/src/open-api/utils/types.d.ts +18 -0
  285. package/src/open-api/utils/types.js +5 -2
  286. package/src/open-api/utils/types.js.map +1 -1
  287. package/src/preset/__snapshots__/generator.spec.ts.snap +99 -20
  288. package/src/preset/generator.d.ts +14 -1
  289. package/src/preset/generator.js +76 -151
  290. package/src/preset/generator.js.map +1 -1
  291. package/src/preset/schema.d.js +6 -0
  292. package/src/preset/schema.d.js.map +1 -0
  293. package/src/preset/schema.d.ts +4 -1
  294. package/src/preset/schema.json +16 -5
  295. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +334 -0
  296. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +734 -0
  297. package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.protocols.spec.ts.snap} +191 -315
  298. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +190 -0
  299. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +31 -0
  300. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +29 -0
  301. package/src/py/agent/a2a-connection/generator.d.ts +24 -0
  302. package/src/py/agent/a2a-connection/generator.js +145 -88
  303. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  304. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  305. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  306. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  307. package/src/py/agent/a2a-connection/schema.json +5 -0
  308. package/src/py/agent/files/a2a-langchain/main.py.template +89 -0
  309. package/src/py/agent/files/ag-ui-langchain/main.py.template +83 -0
  310. package/src/py/agent/files/common/agent.py.template +2 -0
  311. package/src/py/agent/files/common-langchain/agent.py.template +30 -0
  312. package/src/py/agent/files/deploy/Dockerfile.template +8 -1
  313. package/src/py/agent/files/http/init.py.template +7 -25
  314. package/src/py/agent/files/http/main.py.template +3 -4
  315. package/src/py/agent/files/http-langchain/main.py.template +84 -0
  316. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  317. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  318. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  319. package/src/py/agent/gateway-connection/generator.d.ts +33 -0
  320. package/src/py/agent/gateway-connection/generator.js +153 -0
  321. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  322. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  323. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  324. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  325. package/src/py/agent/gateway-connection/schema.json +31 -0
  326. package/src/py/agent/generator.d.ts +146 -1
  327. package/src/py/agent/generator.js +406 -197
  328. package/src/py/agent/generator.js.map +1 -1
  329. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +154 -89
  330. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +31 -0
  331. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +31 -0
  332. package/src/py/agent/mcp-connection/generator.d.ts +23 -0
  333. package/src/py/agent/mcp-connection/generator.js +103 -130
  334. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  335. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  336. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  337. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  338. package/src/py/agent/mcp-connection/schema.json +5 -0
  339. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +17 -19
  340. package/src/py/agent/react-connection/generator.d.ts +150 -1
  341. package/src/py/agent/react-connection/generator.js +105 -65
  342. package/src/py/agent/react-connection/generator.js.map +1 -1
  343. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +4 -4
  344. package/src/py/agent/react-connection/local-dev.js +36 -0
  345. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  346. package/src/py/agent/react-connection/schema.d.js +8 -0
  347. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  348. package/src/py/agent/react-connection/schema.d.ts +1 -0
  349. package/src/py/agent/react-connection/schema.json +5 -0
  350. package/src/py/agent/schema.d.js +6 -0
  351. package/src/py/agent/schema.d.js.map +1 -0
  352. package/src/py/agent/schema.d.ts +5 -1
  353. package/src/py/agent/schema.json +15 -1
  354. package/src/py/api/generator.js +12 -11
  355. package/src/py/api/generator.js.map +1 -1
  356. package/src/py/api/schema.d.js +6 -0
  357. package/src/py/api/schema.d.js.map +1 -0
  358. package/src/py/api/schema.d.ts +1 -0
  359. package/src/py/api/schema.json +5 -0
  360. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1520 -0
  361. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +63 -0
  362. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  363. package/src/py/dynamodb/agent-connection/generator.js +45 -0
  364. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  365. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  366. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  367. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  368. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  369. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +32 -0
  370. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  371. package/src/py/dynamodb/fast-api-connection/generator.js +39 -0
  372. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  373. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  374. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  375. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  376. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  377. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  378. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  379. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  380. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  381. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  382. package/src/py/dynamodb/files/config.json.template +24 -0
  383. package/src/py/dynamodb/generator.d.ts +39 -0
  384. package/src/py/dynamodb/generator.js +130 -0
  385. package/src/py/dynamodb/generator.js.map +1 -0
  386. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +63 -0
  387. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  388. package/src/py/dynamodb/mcp-server-connection/generator.js +45 -0
  389. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  390. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  391. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  392. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  393. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  394. package/src/py/dynamodb/schema.d.js +6 -0
  395. package/src/py/dynamodb/schema.d.js.map +1 -0
  396. package/src/py/dynamodb/schema.d.ts +16 -0
  397. package/src/py/dynamodb/schema.json +76 -0
  398. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +240 -4693
  399. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +5409 -0
  400. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  401. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  402. package/src/py/fast-api/generator.d.ts +68 -0
  403. package/src/py/fast-api/generator.js +134 -95
  404. package/src/py/fast-api/generator.js.map +1 -1
  405. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  406. package/src/py/fast-api/react/generator.d.ts +16 -1
  407. package/src/py/fast-api/react/generator.js +38 -26
  408. package/src/py/fast-api/react/generator.js.map +1 -1
  409. package/src/py/fast-api/react/open-api.js +31 -29
  410. package/src/py/fast-api/react/open-api.js.map +1 -1
  411. package/src/py/fast-api/react/schema.d.js +6 -0
  412. package/src/py/fast-api/react/schema.d.js.map +1 -0
  413. package/src/py/fast-api/react/schema.d.ts +1 -0
  414. package/src/py/fast-api/react/schema.json +5 -0
  415. package/src/py/fast-api/schema.d.js +6 -0
  416. package/src/py/fast-api/schema.d.js.map +1 -0
  417. package/src/py/fast-api/schema.d.ts +1 -0
  418. package/src/py/fast-api/schema.json +6 -0
  419. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  420. package/src/py/lambda-function/generator.d.ts +21 -0
  421. package/src/py/lambda-function/generator.js +82 -62
  422. package/src/py/lambda-function/generator.js.map +1 -1
  423. package/src/py/lambda-function/schema.d.js +6 -0
  424. package/src/py/lambda-function/schema.d.js.map +1 -0
  425. package/src/py/lambda-function/schema.d.ts +1 -0
  426. package/src/py/lambda-function/schema.json +5 -0
  427. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +221 -21
  428. package/src/py/mcp-server/files/deploy/Dockerfile.template +8 -1
  429. package/src/py/mcp-server/generator.d.ts +60 -0
  430. package/src/py/mcp-server/generator.js +204 -131
  431. package/src/py/mcp-server/generator.js.map +1 -1
  432. package/src/py/mcp-server/schema.d.js +6 -0
  433. package/src/py/mcp-server/schema.d.js.map +1 -0
  434. package/src/py/mcp-server/schema.d.ts +1 -0
  435. package/src/py/mcp-server/schema.json +6 -0
  436. package/src/py/project/generator.d.ts +27 -1
  437. package/src/py/project/generator.js +248 -130
  438. package/src/py/project/generator.js.map +1 -1
  439. package/src/py/project/schema.d.js +6 -0
  440. package/src/py/project/schema.d.js.map +1 -0
  441. package/src/py/project/schema.d.ts +1 -0
  442. package/src/py/project/schema.json +5 -0
  443. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2070 -0
  444. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +123 -0
  445. package/src/py/rdb/agent-connection/generator.d.ts +10 -0
  446. package/src/py/rdb/agent-connection/generator.js +52 -0
  447. package/src/py/rdb/agent-connection/generator.js.map +1 -0
  448. package/src/py/rdb/agent-connection/schema.d.js +8 -0
  449. package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
  450. package/src/py/rdb/agent-connection/schema.d.ts +15 -0
  451. package/src/py/rdb/agent-connection/schema.json +27 -0
  452. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +51 -0
  453. package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
  454. package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
  455. package/src/py/rdb/fast-api-connection/generator.js +56 -0
  456. package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
  457. package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
  458. package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
  459. package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
  460. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  461. package/src/py/rdb/files/Dockerfile.create-db-user.template +14 -0
  462. package/src/py/rdb/files/Dockerfile.migration.template +14 -0
  463. package/src/py/rdb/files/__name__/__init__.py.template +3 -0
  464. package/src/py/rdb/files/__name__/connection.py.template +55 -0
  465. package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
  466. package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
  467. package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
  468. package/src/py/rdb/files/__name__/models/example.py.template +8 -0
  469. package/src/py/rdb/files/__name__/utils.py.template +104 -0
  470. package/src/py/rdb/files/alembic.ini.template +38 -0
  471. package/src/py/rdb/files/config.json.template +14 -0
  472. package/src/py/rdb/files/migrations/env.py.template +80 -0
  473. package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
  474. package/src/py/rdb/generator.d.ts +95 -0
  475. package/src/py/rdb/generator.js +328 -0
  476. package/src/py/rdb/generator.js.map +1 -0
  477. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +119 -0
  478. package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
  479. package/src/py/rdb/mcp-server-connection/generator.js +52 -0
  480. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
  481. package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
  482. package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
  483. package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
  484. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  485. package/src/py/rdb/schema.d.js +6 -0
  486. package/src/py/rdb/schema.d.js.map +1 -0
  487. package/src/py/rdb/schema.d.ts +16 -0
  488. package/src/py/rdb/schema.json +78 -0
  489. package/src/py/rdb/utils.d.ts +6 -0
  490. package/src/py/rdb/utils.js +16 -0
  491. package/src/py/rdb/utils.js.map +1 -0
  492. package/src/sdk/agentcore-gateway.d.ts +6 -0
  493. package/src/sdk/agentcore-gateway.js +7 -0
  494. package/src/sdk/agentcore-gateway.js.map +1 -0
  495. package/src/sdk/connection.d.ts +6 -0
  496. package/src/sdk/connection.js +6 -0
  497. package/src/sdk/connection.js.map +1 -0
  498. package/src/sdk/license.d.ts +8 -0
  499. package/src/sdk/license.js +7 -0
  500. package/src/sdk/license.js.map +1 -0
  501. package/src/sdk/open-api.d.ts +10 -0
  502. package/src/sdk/open-api.js +8 -0
  503. package/src/sdk/open-api.js.map +1 -0
  504. package/src/sdk/py.d.ts +18 -0
  505. package/src/sdk/py.js +12 -0
  506. package/src/sdk/py.js.map +1 -0
  507. package/src/sdk/terraform.d.ts +6 -0
  508. package/src/sdk/terraform.js +7 -0
  509. package/src/sdk/terraform.js.map +1 -0
  510. package/src/sdk/ts.d.ts +39 -0
  511. package/src/sdk/ts.js +41 -0
  512. package/src/sdk/ts.js.map +1 -0
  513. package/{sdk/utils/format.d.ts → src/sdk/utils/ast.d.ts} +1 -1
  514. package/src/sdk/utils/ast.js +6 -0
  515. package/src/sdk/utils/ast.js.map +1 -0
  516. package/{sdk/utils/ast.d.ts → src/sdk/utils/format.d.ts} +1 -2
  517. package/src/sdk/utils/format.js +6 -0
  518. package/src/sdk/utils/format.js.map +1 -0
  519. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  520. package/src/sdk/utils/test.js +6 -0
  521. package/src/sdk/utils/test.js.map +1 -0
  522. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +132 -32
  523. package/src/smithy/project/files/{build.Dockerfile.template → service/build.Dockerfile.template} +3 -6
  524. package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
  525. package/src/smithy/project/files/shapes/build.Dockerfile.template +33 -0
  526. package/src/smithy/project/files/shapes/smithy-build.json.template +7 -0
  527. package/src/smithy/project/files/shapes/src/main.smithy.template +11 -0
  528. package/src/smithy/project/generator.d.ts +32 -0
  529. package/src/smithy/project/generator.js +101 -56
  530. package/src/smithy/project/generator.js.map +1 -1
  531. package/src/smithy/project/schema.d.js +6 -0
  532. package/src/smithy/project/schema.d.js.map +1 -0
  533. package/src/smithy/project/schema.d.ts +2 -0
  534. package/src/smithy/project/schema.json +28 -1
  535. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  536. package/src/smithy/react-connection/generator.d.ts +15 -0
  537. package/src/smithy/react-connection/generator.js +54 -48
  538. package/src/smithy/react-connection/generator.js.map +1 -1
  539. package/src/smithy/react-connection/schema.d.js +6 -0
  540. package/src/smithy/react-connection/schema.d.js.map +1 -0
  541. package/src/smithy/react-connection/schema.d.ts +1 -0
  542. package/src/smithy/react-connection/schema.json +5 -0
  543. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +847 -104
  544. package/src/smithy/ts/api/files/handler.ts.template +2 -2
  545. package/src/smithy/ts/api/files/local-server.ts.template +2 -2
  546. package/src/smithy/ts/api/files/operations/echo.ts.template +2 -2
  547. package/src/smithy/ts/api/files/service.ts.template +3 -3
  548. package/src/smithy/ts/api/generator.d.ts +84 -0
  549. package/src/smithy/ts/api/generator.js +187 -114
  550. package/src/smithy/ts/api/generator.js.map +1 -1
  551. package/src/smithy/ts/api/schema.d.js +6 -0
  552. package/src/smithy/ts/api/schema.d.js.map +1 -0
  553. package/src/smithy/ts/api/schema.d.ts +1 -0
  554. package/src/smithy/ts/api/schema.json +6 -0
  555. package/src/terraform/project/files/application/scripts/bootstrap.ts.template +40 -1
  556. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  557. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  558. package/src/terraform/project/generator.d.ts +50 -0
  559. package/src/terraform/project/generator.js +212 -111
  560. package/src/terraform/project/generator.js.map +1 -1
  561. package/src/terraform/project/schema.d.js +9 -0
  562. package/src/terraform/project/schema.d.js.map +1 -0
  563. package/src/terraform/project/schema.d.ts +1 -0
  564. package/src/terraform/project/schema.json +5 -0
  565. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +1182 -184
  566. package/src/trpc/backend/files/src/client/index.ts.template +1 -1
  567. package/src/trpc/backend/files/src/handler.ts.template +1 -1
  568. package/src/trpc/backend/files/src/index.ts.template +5 -5
  569. package/src/trpc/backend/files/src/init.ts.template +1 -1
  570. package/src/trpc/backend/files/src/local-server.ts.template +1 -1
  571. package/src/trpc/backend/files/src/middleware/index.ts.template +7 -7
  572. package/src/trpc/backend/files/src/procedures/echo.ts.template +3 -3
  573. package/src/trpc/backend/files/src/router.ts.template +2 -2
  574. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  575. package/src/trpc/backend/files/src/schema/index.ts.template +1 -1
  576. package/src/trpc/backend/generator.d.ts +90 -1
  577. package/src/trpc/backend/generator.js +177 -100
  578. package/src/trpc/backend/generator.js.map +1 -1
  579. package/src/trpc/backend/schema.d.js +6 -0
  580. package/src/trpc/backend/schema.d.js.map +1 -0
  581. package/src/trpc/backend/schema.d.ts +1 -0
  582. package/src/trpc/backend/schema.json +6 -0
  583. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  584. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  585. package/src/trpc/react/generator.d.ts +38 -1
  586. package/src/trpc/react/generator.js +105 -63
  587. package/src/trpc/react/generator.js.map +1 -1
  588. package/src/trpc/react/schema.d.js +6 -0
  589. package/src/trpc/react/schema.d.js.map +1 -0
  590. package/src/trpc/react/schema.d.ts +1 -0
  591. package/src/trpc/react/schema.json +5 -0
  592. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1452 -25
  593. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +258 -0
  594. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  595. package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
  596. package/src/ts/agent/a2a-connection/generator.js +110 -63
  597. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  598. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  599. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  600. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  601. package/src/ts/agent/a2a-connection/schema.json +5 -0
  602. package/src/ts/agent/files/a2a/index.ts.template +1 -1
  603. package/src/ts/agent/files/ag-ui/index.ts.template +36 -11
  604. package/src/ts/agent/files/common/agent.ts.template +15 -2
  605. package/src/ts/agent/files/common/session.ts.template +43 -0
  606. package/src/ts/agent/files/deploy/Dockerfile.template +13 -2
  607. package/src/ts/agent/files/http/client.ts.template +2 -2
  608. package/src/ts/agent/files/http/index.ts.template +2 -2
  609. package/src/ts/agent/files/http/router.ts.template +5 -5
  610. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +222 -0
  611. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  612. package/src/ts/agent/gateway-connection/generator.d.ts +47 -0
  613. package/src/ts/agent/gateway-connection/generator.js +144 -0
  614. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  615. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  616. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  617. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  618. package/src/ts/agent/gateway-connection/schema.json +31 -0
  619. package/src/ts/agent/generator.d.ts +197 -0
  620. package/src/ts/agent/generator.js +339 -156
  621. package/src/ts/agent/generator.js.map +1 -1
  622. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +194 -113
  623. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +23 -0
  624. package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
  625. package/src/ts/agent/mcp-connection/generator.js +88 -65
  626. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  627. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  628. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  629. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  630. package/src/ts/agent/mcp-connection/schema.json +5 -0
  631. package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
  632. package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
  633. package/src/ts/agent/react-connection/generator.d.ts +202 -1
  634. package/src/ts/agent/react-connection/generator.js +158 -99
  635. package/src/ts/agent/react-connection/generator.js.map +1 -1
  636. package/src/ts/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +2 -2
  637. package/src/ts/agent/react-connection/local-dev.js +17 -0
  638. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  639. package/src/ts/agent/react-connection/schema.d.js +8 -0
  640. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  641. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  642. package/src/ts/agent/react-connection/schema.json +5 -0
  643. package/src/ts/agent/schema.d.js +6 -0
  644. package/src/ts/agent/schema.d.js.map +1 -0
  645. package/src/ts/agent/schema.d.ts +4 -0
  646. package/src/ts/agent/schema.json +14 -0
  647. package/src/ts/api/generator.js +16 -16
  648. package/src/ts/api/generator.js.map +1 -1
  649. package/src/ts/api/schema.d.js +6 -0
  650. package/src/ts/api/schema.d.js.map +1 -0
  651. package/src/ts/api/schema.d.ts +1 -0
  652. package/src/ts/api/schema.json +5 -0
  653. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +14 -14
  654. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +3 -2
  655. package/src/ts/astro-docs/generator.d.ts +38 -0
  656. package/src/ts/astro-docs/generator.js +126 -61
  657. package/src/ts/astro-docs/generator.js.map +1 -1
  658. package/src/ts/astro-docs/schema.d.js +6 -0
  659. package/src/ts/astro-docs/schema.d.js.map +1 -0
  660. package/src/ts/astro-docs/schema.d.ts +2 -2
  661. package/src/ts/astro-docs/schema.json +3 -3
  662. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +982 -0
  663. package/src/ts/dcr-proxy/generator.d.ts +34 -0
  664. package/src/ts/dcr-proxy/generator.js +115 -0
  665. package/src/ts/dcr-proxy/generator.js.map +1 -0
  666. package/src/ts/dcr-proxy/schema.d.js +6 -0
  667. package/src/ts/dcr-proxy/schema.d.js.map +1 -0
  668. package/src/ts/dcr-proxy/schema.d.ts +13 -0
  669. package/src/ts/dcr-proxy/schema.json +44 -0
  670. package/src/ts/docs/generator.js +10 -10
  671. package/src/ts/docs/generator.js.map +1 -1
  672. package/src/ts/docs/schema.d.js +6 -0
  673. package/src/ts/docs/schema.d.js.map +1 -0
  674. package/src/ts/docs/schema.d.ts +1 -4
  675. package/src/ts/docs/schema.json +3 -3
  676. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +400 -518
  677. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
  678. package/src/ts/dynamodb/agent-connection/generator.js +27 -23
  679. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  680. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  681. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  682. package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
  683. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  684. package/src/ts/dynamodb/files/config.json.template +24 -0
  685. package/src/ts/dynamodb/files/src/client.ts.template +30 -11
  686. package/src/ts/dynamodb/files/src/entities/example.ts.template +1 -1
  687. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -1
  688. package/src/ts/dynamodb/files/src/index.ts.template +2 -11
  689. package/src/ts/dynamodb/generator.d.ts +41 -0
  690. package/src/ts/dynamodb/generator.js +106 -64
  691. package/src/ts/dynamodb/generator.js.map +1 -1
  692. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +23 -5
  693. package/src/ts/dynamodb/mcp-server-connection/generator.js +27 -23
  694. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  695. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  696. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  697. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  698. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  699. package/src/ts/dynamodb/schema.d.js +6 -0
  700. package/src/ts/dynamodb/schema.d.js.map +1 -0
  701. package/src/ts/dynamodb/schema.d.ts +2 -0
  702. package/src/ts/dynamodb/schema.json +26 -2
  703. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
  704. package/src/ts/dynamodb/smithy-connection/generator.js +22 -22
  705. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  706. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  707. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  708. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  709. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  710. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  711. package/src/ts/dynamodb/trpc-connection/generator.js +22 -22
  712. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  713. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  714. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  715. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  716. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  717. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -6
  718. package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
  719. package/src/ts/lambda-function/generator.d.ts +38 -0
  720. package/src/ts/lambda-function/generator.js +98 -65
  721. package/src/ts/lambda-function/generator.js.map +1 -1
  722. package/src/ts/lambda-function/io.js +83 -52
  723. package/src/ts/lambda-function/io.js.map +1 -1
  724. package/src/ts/lambda-function/schema.d.js +6 -0
  725. package/src/ts/lambda-function/schema.d.js.map +1 -0
  726. package/src/ts/lambda-function/schema.d.ts +1 -0
  727. package/src/ts/lambda-function/schema.json +5 -0
  728. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -45
  729. package/src/ts/lib/biome.js +71 -35
  730. package/src/ts/lib/biome.js.map +1 -1
  731. package/src/ts/lib/generator.d.ts +7 -0
  732. package/src/ts/lib/generator.js +115 -103
  733. package/src/ts/lib/generator.js.map +1 -1
  734. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  735. package/src/ts/lib/schema.d.js +6 -0
  736. package/src/ts/lib/schema.d.js.map +1 -0
  737. package/src/ts/lib/schema.d.ts +1 -1
  738. package/src/ts/lib/schema.json +5 -0
  739. package/src/ts/lib/ts-project-utils.d.ts +13 -1
  740. package/src/ts/lib/ts-project-utils.js +96 -71
  741. package/src/ts/lib/ts-project-utils.js.map +1 -1
  742. package/src/ts/lib/types.d.ts +6 -0
  743. package/src/ts/lib/types.js +5 -2
  744. package/src/ts/lib/types.js.map +1 -1
  745. package/src/ts/lib/vitest.d.ts +10 -1
  746. package/src/ts/lib/vitest.js +42 -26
  747. package/src/ts/lib/vitest.js.map +1 -1
  748. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +221 -44
  749. package/src/ts/mcp-server/files/Dockerfile.template +13 -2
  750. package/src/ts/mcp-server/generator.d.ts +102 -0
  751. package/src/ts/mcp-server/generator.js +231 -148
  752. package/src/ts/mcp-server/generator.js.map +1 -1
  753. package/src/ts/mcp-server/schema.d.js +6 -0
  754. package/src/ts/mcp-server/schema.d.js.map +1 -0
  755. package/src/ts/mcp-server/schema.d.ts +1 -0
  756. package/src/ts/mcp-server/schema.json +6 -0
  757. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +27 -12
  758. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  759. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  760. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  761. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  762. package/src/ts/nx-generator/generator.d.ts +3 -0
  763. package/src/ts/nx-generator/generator.js +124 -73
  764. package/src/ts/nx-generator/generator.js.map +1 -1
  765. package/src/ts/nx-generator/schema.d.js +6 -0
  766. package/src/ts/nx-generator/schema.d.js.map +1 -0
  767. package/src/ts/nx-generator/schema.d.ts +1 -0
  768. package/src/ts/nx-generator/schema.json +5 -0
  769. package/src/ts/nx-migration/files/migration.spec.ts.template +26 -0
  770. package/src/ts/nx-migration/files/migration.ts.template +65 -0
  771. package/src/ts/nx-migration/files/prompt.md.template +46 -0
  772. package/src/ts/nx-migration/generator.d.ts +27 -0
  773. package/src/ts/nx-migration/generator.js +141 -0
  774. package/src/ts/nx-migration/generator.js.map +1 -0
  775. package/src/ts/nx-migration/schema.d.js +6 -0
  776. package/src/ts/nx-migration/schema.d.js.map +1 -0
  777. package/src/ts/nx-migration/schema.d.ts +13 -0
  778. package/src/ts/nx-migration/schema.json +63 -0
  779. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +36 -25
  780. package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
  781. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  782. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  783. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  784. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  785. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  786. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +4 -4
  787. package/src/ts/nx-plugin/generator.d.ts +3 -0
  788. package/src/ts/nx-plugin/generator.js +67 -50
  789. package/src/ts/nx-plugin/generator.js.map +1 -1
  790. package/src/ts/nx-plugin/schema.d.js +9 -0
  791. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  792. package/src/ts/nx-plugin/schema.json +5 -0
  793. package/src/ts/nx-plugin/utils.d.ts +27 -2
  794. package/src/ts/nx-plugin/utils.js +66 -51
  795. package/src/ts/nx-plugin/utils.js.map +1 -1
  796. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +551 -642
  797. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
  798. package/src/ts/rdb/agent-connection/generator.js +44 -39
  799. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  800. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  801. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  802. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  803. package/src/ts/rdb/agent-connection/schema.json +5 -0
  804. package/src/ts/rdb/files/Dockerfile.template +19 -1
  805. package/src/ts/rdb/files/config.json.template +14 -0
  806. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  807. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +9 -11
  808. package/src/ts/rdb/files/src/index.ts.template +1 -2
  809. package/src/ts/rdb/files/src/migration-handler.ts.template +5 -30
  810. package/src/ts/rdb/files/src/prisma.ts.template +33 -25
  811. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  812. package/src/ts/rdb/generator.d.ts +109 -4
  813. package/src/ts/rdb/generator.js +257 -138
  814. package/src/ts/rdb/generator.js.map +1 -1
  815. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +16 -6
  816. package/src/ts/rdb/mcp-server-connection/generator.js +42 -37
  817. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  818. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  819. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  820. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  821. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  822. package/src/ts/rdb/schema.d.js +6 -0
  823. package/src/ts/rdb/schema.d.js.map +1 -0
  824. package/src/ts/rdb/schema.d.ts +1 -0
  825. package/src/ts/rdb/schema.json +7 -1
  826. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
  827. package/src/ts/rdb/smithy-connection/generator.js +48 -43
  828. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  829. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  830. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  831. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  832. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  833. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  834. package/src/ts/rdb/trpc-connection/generator.js +37 -31
  835. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  836. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  837. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  838. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  839. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  840. package/src/ts/rdb/utils.js +9 -11
  841. package/src/ts/rdb/utils.js.map +1 -1
  842. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +17 -16
  843. package/src/ts/react-website/agui/generator.d.ts +97 -0
  844. package/src/ts/react-website/agui/generator.js +114 -67
  845. package/src/ts/react-website/agui/generator.js.map +1 -1
  846. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +1381 -634
  847. package/src/ts/react-website/app/generator.d.ts +142 -2
  848. package/src/ts/react-website/app/generator.js +330 -206
  849. package/src/ts/react-website/app/generator.js.map +1 -1
  850. package/src/ts/react-website/app/schema.d.js +6 -0
  851. package/src/ts/react-website/app/schema.d.js.map +1 -0
  852. package/src/ts/react-website/app/schema.d.ts +1 -1
  853. package/src/ts/react-website/app/schema.json +12 -6
  854. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +161 -26
  855. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +48 -12
  856. package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
  857. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  858. package/src/ts/react-website/cognito-auth/generator.d.ts +25 -1
  859. package/src/ts/react-website/cognito-auth/generator.js +79 -64
  860. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  861. package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +3 -1
  862. package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
  863. package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
  864. package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
  865. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  866. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  867. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  868. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  869. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  870. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  871. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  872. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  873. package/src/ts/react-website/runtime-config/generator.js +29 -31
  874. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  875. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  876. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  877. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  878. package/src/ts/react-website/runtime-config/schema.json +5 -0
  879. package/src/ts/sync/generator.js +137 -60
  880. package/src/ts/sync/generator.js.map +1 -1
  881. package/src/ts/website/app/generator.js +10 -10
  882. package/src/ts/website/app/generator.js.map +1 -1
  883. package/src/ts/website/app/schema.d.js +6 -0
  884. package/src/ts/website/app/schema.d.js.map +1 -0
  885. package/src/ts/website/app/schema.d.ts +1 -1
  886. package/src/ts/website/app/schema.json +11 -6
  887. package/src/ts/website/auth/generator.d.ts +1 -1
  888. package/src/ts/website/auth/generator.js +11 -10
  889. package/src/ts/website/auth/generator.js.map +1 -1
  890. package/src/ts/website/auth/schema.d.js +6 -0
  891. package/src/ts/website/auth/schema.d.js.map +1 -0
  892. package/src/ts/website/auth/schema.d.ts +1 -0
  893. package/src/ts/website/auth/schema.json +5 -0
  894. package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +21 -0
  895. package/src/utils/add-dependencies.d.ts +38 -0
  896. package/src/utils/add-dependencies.js +83 -0
  897. package/src/utils/add-dependencies.js.map +1 -0
  898. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  899. package/src/utils/agent-chat/agent-chat.js +31 -0
  900. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  901. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  902. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  903. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  904. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  905. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  906. package/src/utils/agent-connection/agent-connection.d.ts +139 -26
  907. package/src/utils/agent-connection/agent-connection.js +500 -103
  908. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  909. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  910. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  911. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  912. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  913. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  914. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +33 -33
  915. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  916. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  917. package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +47 -0
  918. package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +29 -0
  919. package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +1 -1
  920. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  921. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  922. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  923. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  924. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  925. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  926. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +99 -0
  927. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  928. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  929. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  930. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +6 -18
  931. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  932. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +66 -0
  933. package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
  934. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  935. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  936. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +54 -0
  937. package/src/utils/agent-core-constructs/agent-core-constructs.js +153 -38
  938. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  939. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +170 -6
  940. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +87 -0
  941. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +624 -0
  942. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  943. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +212 -1
  944. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +505 -0
  945. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  946. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +159 -13
  947. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  948. package/src/utils/api-constructs/api-constructs.d.ts +30 -2
  949. package/src/utils/api-constructs/api-constructs.js +82 -32
  950. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  951. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +20 -15
  952. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +24 -16
  953. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +26 -9
  954. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +70 -0
  955. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  956. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +56 -17
  957. package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
  958. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  959. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +101 -12
  960. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +194 -8
  961. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  962. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  963. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  964. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  965. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  966. package/src/utils/ast/website.js +18 -20
  967. package/src/utils/ast/website.js.map +1 -1
  968. package/src/utils/ast.d.ts +9 -0
  969. package/src/utils/ast.js +125 -86
  970. package/src/utils/ast.js.map +1 -1
  971. package/src/utils/base-tsconfig.d.ts +30 -0
  972. package/src/utils/base-tsconfig.js +32 -0
  973. package/src/utils/base-tsconfig.js.map +1 -0
  974. package/src/utils/bundle/bundle.d.ts +6 -1
  975. package/src/utils/bundle/bundle.js +57 -47
  976. package/src/utils/bundle/bundle.js.map +1 -1
  977. package/src/utils/commands.d.ts +14 -3
  978. package/src/utils/commands.js +83 -28
  979. package/src/utils/commands.js.map +1 -1
  980. package/src/utils/config/index.d.ts +18 -2
  981. package/src/utils/config/index.js +5 -4
  982. package/src/utils/config/index.js.map +1 -1
  983. package/src/utils/config/utils.d.ts +8 -2
  984. package/src/utils/config/utils.js +56 -59
  985. package/src/utils/config/utils.js.map +1 -1
  986. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +16 -3
  987. package/src/utils/connection/open-api/react.d.ts +31 -5
  988. package/src/utils/connection/open-api/react.js +106 -76
  989. package/src/utils/connection/open-api/react.js.map +1 -1
  990. package/src/utils/containers.js +22 -23
  991. package/src/utils/containers.js.map +1 -1
  992. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +38 -0
  993. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +93 -0
  994. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -0
  995. package/src/utils/dcr-proxy-constructs/files/cdk/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.ts.template +227 -0
  996. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorization-server-metadata.ts.template +39 -0
  997. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorize.ts.template +26 -0
  998. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/mcp-proxy.ts.template +89 -0
  999. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/protected-resource-metadata.ts.template +13 -0
  1000. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/register.ts.template +70 -0
  1001. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/token.ts.template +75 -0
  1002. package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +410 -0
  1003. package/src/utils/declared-dependencies.d.ts +140 -0
  1004. package/src/utils/declared-dependencies.js +64 -0
  1005. package/src/utils/declared-dependencies.js.map +1 -0
  1006. package/src/utils/dependencies.d.ts +18 -0
  1007. package/src/utils/dependencies.js +206 -0
  1008. package/src/utils/dependencies.js.map +1 -0
  1009. package/src/utils/docker.d.ts +87 -0
  1010. package/src/utils/docker.js +125 -0
  1011. package/src/utils/docker.js.map +1 -0
  1012. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +1 -1
  1013. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +39 -41
  1014. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  1015. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +18 -5
  1016. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +1 -1
  1017. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +24 -17
  1018. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
  1019. package/src/utils/files/common/constructs/src/core/cloudfront.ts.template +14 -0
  1020. package/src/utils/files/common/constructs/src/core/index.ts.template +5 -4
  1021. package/src/utils/files/common/constructs/src/index.ts.template +2 -2
  1022. package/src/utils/files/common/infra-config/src/index.ts.template +3 -3
  1023. package/src/utils/files/common/infra-config/src/resolve-stage.ts.template +2 -2
  1024. package/src/utils/files/common/infra-config/src/stages.config.ts.template +1 -1
  1025. package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/create-local-table.ts.template +65 -31
  1026. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  1027. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +103 -0
  1028. package/src/utils/files/common/scripts/src/infra/infra-deploy.ts.template +2 -0
  1029. package/src/utils/files/common/scripts/src/infra/infra-destroy.ts.template +2 -0
  1030. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
  1031. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +3 -3
  1032. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  1033. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  1034. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  1035. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +115 -0
  1036. package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
  1037. package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
  1038. package/src/utils/files/shadcn/components.json.template +1 -1
  1039. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +63 -72
  1040. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  1041. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
  1042. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  1043. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  1044. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  1045. package/src/utils/format.d.ts +39 -4
  1046. package/src/utils/format.js +327 -127
  1047. package/src/utils/format.js.map +1 -1
  1048. package/src/utils/fs.d.ts +16 -5
  1049. package/src/utils/fs.js +29 -15
  1050. package/src/utils/fs.js.map +1 -1
  1051. package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
  1052. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  1053. package/src/utils/function-constructs/function-constructs.js +22 -25
  1054. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  1055. package/src/utils/generators.js +18 -20
  1056. package/src/utils/generators.js.map +1 -1
  1057. package/src/utils/git.js +19 -34
  1058. package/src/utils/git.js.map +1 -1
  1059. package/src/utils/iac-providers.js +5 -5
  1060. package/src/utils/iac-providers.js.map +1 -1
  1061. package/src/utils/iac.js +12 -14
  1062. package/src/utils/iac.js.map +1 -1
  1063. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +153 -24
  1064. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
  1065. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +129 -12
  1066. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
  1067. package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
  1068. package/src/utils/identity-constructs/identity-constructs.js +52 -31
  1069. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  1070. package/src/utils/init.d.ts +72 -0
  1071. package/src/utils/init.js +300 -0
  1072. package/src/utils/init.js.map +1 -0
  1073. package/src/utils/install.d.ts +32 -0
  1074. package/src/utils/install.js +58 -0
  1075. package/src/utils/install.js.map +1 -0
  1076. package/src/utils/js.js +27 -20
  1077. package/src/utils/js.js.map +1 -1
  1078. package/src/utils/mcp.d.ts +9 -0
  1079. package/src/utils/mcp.js +42 -41
  1080. package/src/utils/mcp.js.map +1 -1
  1081. package/src/utils/metrics.d.ts +7 -1
  1082. package/src/utils/metrics.js +61 -46
  1083. package/src/utils/metrics.js.map +1 -1
  1084. package/src/utils/migration-manifest.d.ts +58 -0
  1085. package/src/utils/migration-manifest.js +76 -0
  1086. package/src/utils/migration-manifest.js.map +1 -0
  1087. package/src/utils/migration-versions.d.ts +116 -0
  1088. package/src/utils/migration-versions.js +186 -0
  1089. package/src/utils/migration-versions.js.map +1 -0
  1090. package/src/utils/mock-project-graph.js +8 -12
  1091. package/src/utils/mock-project-graph.js.map +1 -1
  1092. package/src/utils/module-format.d.ts +25 -0
  1093. package/src/utils/module-format.js +45 -0
  1094. package/src/utils/module-format.js.map +1 -0
  1095. package/src/utils/names.d.ts +22 -0
  1096. package/src/utils/names.js +44 -48
  1097. package/src/utils/names.js.map +1 -1
  1098. package/src/utils/npm-scope.d.ts +0 -4
  1099. package/src/utils/npm-scope.js +7 -20
  1100. package/src/utils/npm-scope.js.map +1 -1
  1101. package/src/utils/nx.d.ts +74 -3
  1102. package/src/utils/nx.js +196 -75
  1103. package/src/utils/nx.js.map +1 -1
  1104. package/src/utils/nxlv-python.js +27 -15
  1105. package/src/utils/nxlv-python.js.map +1 -1
  1106. package/src/utils/object.js +5 -11
  1107. package/src/utils/object.js.map +1 -1
  1108. package/src/utils/paths.js +11 -15
  1109. package/src/utils/paths.js.map +1 -1
  1110. package/src/utils/pkg-manager.js +4 -9
  1111. package/src/utils/pkg-manager.js.map +1 -1
  1112. package/src/utils/pnpm-workspace.d.ts +1 -12
  1113. package/src/utils/pnpm-workspace.js +16 -43
  1114. package/src/utils/pnpm-workspace.js.map +1 -1
  1115. package/src/utils/port.d.ts +28 -6
  1116. package/src/utils/port.js +67 -28
  1117. package/src/utils/port.js.map +1 -1
  1118. package/src/utils/project-package-json.d.ts +39 -0
  1119. package/src/utils/project-package-json.js +119 -0
  1120. package/src/utils/project-package-json.js.map +1 -0
  1121. package/src/utils/py.d.ts +17 -3
  1122. package/src/utils/py.js +73 -48
  1123. package/src/utils/py.js.map +1 -1
  1124. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +72 -18
  1125. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +112 -88
  1126. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +127 -53
  1127. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +60 -53
  1128. package/src/utils/rdb-constructs/rdb-constructs.d.ts +12 -1
  1129. package/src/utils/rdb-constructs/rdb-constructs.js +38 -41
  1130. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  1131. package/src/utils/ruff.d.ts +59 -0
  1132. package/src/utils/ruff.js +140 -0
  1133. package/src/utils/ruff.js.map +1 -0
  1134. package/src/utils/shared-constructs-constants.d.ts +46 -4
  1135. package/src/utils/shared-constructs-constants.js +50 -15
  1136. package/src/utils/shared-constructs-constants.js.map +1 -1
  1137. package/src/utils/shared-constructs.d.ts +4 -1
  1138. package/src/utils/shared-constructs.js +62 -67
  1139. package/src/utils/shared-constructs.js.map +1 -1
  1140. package/src/utils/shared-dynamodb-scripts.d.ts +18 -0
  1141. package/src/utils/shared-dynamodb-scripts.js +35 -0
  1142. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  1143. package/src/utils/shared-infra-config.js +31 -30
  1144. package/src/utils/shared-infra-config.js.map +1 -1
  1145. package/src/utils/shared-infra-scripts.d.ts +26 -0
  1146. package/src/utils/shared-infra-scripts.js +58 -0
  1147. package/src/utils/shared-infra-scripts.js.map +1 -0
  1148. package/src/utils/shared-rdb-scripts.d.ts +27 -0
  1149. package/src/utils/shared-rdb-scripts.js +59 -0
  1150. package/src/utils/shared-rdb-scripts.js.map +1 -0
  1151. package/src/utils/shared-scripts.d.ts +1 -4
  1152. package/src/utils/shared-scripts.js +12 -38
  1153. package/src/utils/shared-scripts.js.map +1 -1
  1154. package/src/utils/shared-shadcn.d.ts +26 -1
  1155. package/src/utils/shared-shadcn.js +93 -67
  1156. package/src/utils/shared-shadcn.js.map +1 -1
  1157. package/src/utils/test-git.d.ts +39 -0
  1158. package/src/utils/test-git.js +117 -0
  1159. package/src/utils/test-git.js.map +1 -0
  1160. package/src/utils/test.d.ts +10 -0
  1161. package/src/utils/test.js +44 -25
  1162. package/src/utils/test.js.map +1 -1
  1163. package/src/utils/toml.d.ts +5 -0
  1164. package/src/utils/toml.js +17 -15
  1165. package/src/utils/toml.js.map +1 -1
  1166. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  1167. package/src/utils/version-upgrade-migration/migration.js +16 -0
  1168. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  1169. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
  1170. package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
  1171. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  1172. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +76 -0
  1173. package/src/utils/version-upgrade-migration/owned-dependencies.js +146 -0
  1174. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  1175. package/src/utils/version-upgrade-migration/register.d.ts +29 -0
  1176. package/src/utils/version-upgrade-migration/register.js +42 -0
  1177. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  1178. package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
  1179. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +304 -0
  1180. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
  1181. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  1182. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  1183. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  1184. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  1185. package/src/utils/version-upgrade-migration/sync-vended-versions.js +518 -0
  1186. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  1187. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  1188. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  1189. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  1190. package/src/utils/versions.d.ts +206 -106
  1191. package/src/utils/versions.js +238 -119
  1192. package/src/utils/versions.js.map +1 -1
  1193. package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +2 -2
  1194. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +207 -41
  1195. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
  1196. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +145 -93
  1197. package/src/utils/website-constructs/website-constructs.d.ts +11 -0
  1198. package/src/utils/website-constructs/website-constructs.js +49 -30
  1199. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  1200. package/bin/aws-nx-mcp.d.ts +0 -2
  1201. package/bin/aws-nx-mcp.js +0 -17
  1202. package/bin/aws-nx-mcp.js.map +0 -1
  1203. package/sdk/connection.d.ts +0 -6
  1204. package/sdk/connection.js +0 -10
  1205. package/sdk/connection.js.map +0 -1
  1206. package/sdk/license.d.ts +0 -8
  1207. package/sdk/license.js +0 -13
  1208. package/sdk/license.js.map +0 -1
  1209. package/sdk/open-api.d.ts +0 -10
  1210. package/sdk/open-api.js +0 -15
  1211. package/sdk/open-api.js.map +0 -1
  1212. package/sdk/py.d.ts +0 -14
  1213. package/sdk/py.js +0 -18
  1214. package/sdk/py.js.map +0 -1
  1215. package/sdk/terraform.d.ts +0 -6
  1216. package/sdk/terraform.js +0 -11
  1217. package/sdk/terraform.js.map +0 -1
  1218. package/sdk/ts.d.ts +0 -29
  1219. package/sdk/ts.js +0 -47
  1220. package/sdk/ts.js.map +0 -1
  1221. package/sdk/utils/ast.js +0 -12
  1222. package/sdk/utils/ast.js.map +0 -1
  1223. package/sdk/utils/format.js +0 -10
  1224. package/sdk/utils/format.js.map +0 -1
  1225. package/sdk/utils/test.js +0 -10
  1226. package/sdk/utils/test.js.map +0 -1
  1227. package/src/connection/agent-serve-local.d.ts +0 -33
  1228. package/src/connection/agent-serve-local.js +0 -48
  1229. package/src/connection/agent-serve-local.js.map +0 -1
  1230. package/src/connection/serve-local.js +0 -41
  1231. package/src/connection/serve-local.js.map +0 -1
  1232. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  1233. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  1234. package/src/py/agent/react-connection/serve-local.js +0 -30
  1235. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  1236. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  1237. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  1238. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  1239. package/src/ts/agent/react-connection/serve-local.js +0 -19
  1240. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  1241. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  1242. package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
  1243. package/src/ts/dynamodb/files/scripts/start-container.ts.template +0 -81
  1244. package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
  1245. package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
  1246. package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
  1247. package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
  1248. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1249. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1250. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1251. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1252. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1253. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1254. package/src/utils/files/common/scripts/src/infra-deploy.ts.template +0 -2
  1255. package/src/utils/files/common/scripts/src/infra-destroy.ts.template +0 -2
  1256. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
  1257. /package/src/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +0 -0
  1258. /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -0
  1259. /package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +0 -0
  1260. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1261. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1262. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
@@ -32,6 +32,7 @@ import {
32
32
  IntegrationBuilder,
33
33
  RestApiIntegration,
34
34
  } from '../../core/api/utils.js';
35
+ import { findCloudFrontDomainNames } from '../../core/cloudfront.js';
35
36
  import { AddCorsPreflightAspect, RestApi } from '../../core/api/rest-api.js';
36
37
  import {
37
38
  OPERATION_DETAILS,
@@ -86,7 +87,7 @@ export class TestApi<
86
87
  return IntegrationBuilder.rest({
87
88
  pattern: 'isolated',
88
89
  operations: OPERATION_DETAILS,
89
- defaultIntegrationOptions: <FunctionProps>{
90
+ defaultIntegrationOptions: {
90
91
  runtime: Runtime.NODEJS_LATEST,
91
92
  handler: 'index.handler',
92
93
  code: Code.fromAsset(
@@ -99,7 +100,7 @@ export class TestApi<
99
100
  ),
100
101
  timeout: Duration.seconds(30),
101
102
  tracing: Tracing.ACTIVE,
102
- },
103
+ } as FunctionProps,
103
104
  buildDefaultIntegration: (op, props: FunctionProps) => {
104
105
  const handler = new Function(scope, \`TestApi\${op}Handler\`, props);
105
106
  handler.addEnvironment(
@@ -127,6 +128,9 @@ export class TestApi<
127
128
  authorizer: new CognitoUserPoolsAuthorizer(scope, 'TestApiAuthorizer', {
128
129
  cognitoUserPools: [props.identity.userPool],
129
130
  }),
131
+ // Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
132
+ // and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
133
+ authorizationScopes: ['openid', 'aws.cognito.signin.user.admin'],
130
134
  },
131
135
  deployOptions: {
132
136
  tracingEnabled: true,
@@ -153,7 +157,9 @@ export class TestApi<
153
157
  *
154
158
  * Configures the provided CloudFront distribution domains or origin strings
155
159
  * as the only permitted CORS origins in API Gateway preflight responses and the
156
- * AWS Lambda integrations.
160
+ * AWS Lambda integrations. Any custom domain names (aliases) configured on a
161
+ * CloudFront distribution are included automatically alongside its default
162
+ * \`*.cloudfront.net\` domain.
157
163
  *
158
164
  * @param origins - The origin strings, CloudFront distributions, or objects containing a CloudFront distribution to grant CORS from
159
165
  */
@@ -164,12 +170,14 @@ export class TestApi<
164
170
  | { cloudFrontDistribution: Distribution }
165
171
  )[]
166
172
  ) {
167
- const allowedOrigins = origins.map((origin) =>
173
+ const allowedOrigins = origins.flatMap((origin) =>
168
174
  typeof origin === 'string'
169
- ? origin
170
- : 'cloudFrontDistribution' in origin
171
- ? \`https://\${origin.cloudFrontDistribution.distributionDomainName}\`
172
- : \`https://\${origin.distributionDomainName}\`,
175
+ ? [origin]
176
+ : findCloudFrontDomainNames(
177
+ 'cloudFrontDistribution' in origin
178
+ ? origin.cloudFrontDistribution
179
+ : origin,
180
+ ).map((domain) => \`https://\${domain}\`),
173
181
  );
174
182
 
175
183
  this.allowedOrigins = allowedOrigins;
@@ -218,6 +226,7 @@ import {
218
226
  IntegrationBuilder,
219
227
  RestApiIntegration,
220
228
  } from '../../core/api/utils.js';
229
+ import { findCloudFrontDomainNames } from '../../core/cloudfront.js';
221
230
  import { AddCorsPreflightAspect, RestApi } from '../../core/api/rest-api.js';
222
231
  import {
223
232
  OPERATION_DETAILS,
@@ -266,7 +275,7 @@ export class TestApi<
266
275
  return IntegrationBuilder.rest({
267
276
  pattern: 'isolated',
268
277
  operations: OPERATION_DETAILS,
269
- defaultIntegrationOptions: <FunctionProps>{
278
+ defaultIntegrationOptions: {
270
279
  runtime: Runtime.NODEJS_LATEST,
271
280
  handler: 'index.handler',
272
281
  code: Code.fromAsset(
@@ -279,7 +288,7 @@ export class TestApi<
279
288
  ),
280
289
  timeout: Duration.seconds(30),
281
290
  tracing: Tracing.ACTIVE,
282
- },
291
+ } as FunctionProps,
283
292
  buildDefaultIntegration: (op, props: FunctionProps) => {
284
293
  const handler = new Function(scope, \`TestApi\${op}Handler\`, props);
285
294
  handler.addEnvironment(
@@ -330,7 +339,9 @@ export class TestApi<
330
339
  *
331
340
  * Configures the provided CloudFront distribution domains or origin strings
332
341
  * as the only permitted CORS origins in API Gateway preflight responses and the
333
- * AWS Lambda integrations.
342
+ * AWS Lambda integrations. Any custom domain names (aliases) configured on a
343
+ * CloudFront distribution are included automatically alongside its default
344
+ * \`*.cloudfront.net\` domain.
334
345
  *
335
346
  * @param origins - The origin strings, CloudFront distributions, or objects containing a CloudFront distribution to grant CORS from
336
347
  */
@@ -341,12 +352,14 @@ export class TestApi<
341
352
  | { cloudFrontDistribution: Distribution }
342
353
  )[]
343
354
  ) {
344
- const allowedOrigins = origins.map((origin) =>
355
+ const allowedOrigins = origins.flatMap((origin) =>
345
356
  typeof origin === 'string'
346
- ? origin
347
- : 'cloudFrontDistribution' in origin
348
- ? \`https://\${origin.cloudFrontDistribution.distributionDomainName}\`
349
- : \`https://\${origin.distributionDomainName}\`,
357
+ ? [origin]
358
+ : findCloudFrontDomainNames(
359
+ 'cloudFrontDistribution' in origin
360
+ ? origin.cloudFrontDistribution
361
+ : origin,
362
+ ).map((domain) => \`https://\${domain}\`),
350
363
  );
351
364
 
352
365
  this.allowedOrigins = allowedOrigins;
@@ -400,11 +413,11 @@ terraform {
400
413
  required_providers {
401
414
  aws = {
402
415
  source = "hashicorp/aws"
403
- version = "~> 6.33"
416
+ version = "6.57.1"
404
417
  }
405
418
  random = {
406
419
  source = "hashicorp/random"
407
- version = "~> 3.1"
420
+ version = "3.9.0"
408
421
  }
409
422
  }
410
423
  }
@@ -474,8 +487,6 @@ data "aws_caller_identity" "current" {}
474
487
 
475
488
  # Resources
476
489
 
477
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
478
-
479
490
  # REST API Gateway
480
491
  resource "aws_api_gateway_rest_api" "rest_api" {
481
492
  name = var.api_name
@@ -492,10 +503,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
492
503
  tags = var.tags
493
504
  }
494
505
 
495
- # Note: Deployment and stage are created in the consuming module (e.g., foo-api.tf)
496
- # after all methods and integrations are defined
497
-
498
- # Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
506
+ # Note: Deployment, stage and access logging are created in the consuming module
507
+ # (e.g., foo-api.tf) after all methods and integrations are defined
499
508
 
500
509
  # Gateway Response for CORS (4XX errors)
501
510
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -653,9 +662,7 @@ output "waf_web_acl_arn" {
653
662
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
654
663
  }
655
664
 
656
- # Note: Stage and deployment outputs are provided by the consuming module
657
-
658
- # Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement"
665
+ # Note: Stage, deployment and access log outputs are provided by the consuming module"
659
666
  `;
660
667
 
661
668
  exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform provider and None auth > none-auth-terraform.tf 1`] = `
@@ -665,7 +672,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
665
672
  required_providers {
666
673
  aws = {
667
674
  source = "hashicorp/aws"
668
- version = "~> 6.33"
675
+ version = "6.57.1"
669
676
  }
670
677
  }
671
678
  }
@@ -687,11 +694,47 @@ variable "additional_iam_policy_statements" {
687
694
  default = []
688
695
  }
689
696
 
697
+ variable "appconfig_application_id" {
698
+ description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
699
+ type = string
700
+ default = null
701
+ }
702
+
703
+ variable "appconfig_application_arn" {
704
+ description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
705
+ type = string
706
+ default = null
707
+ }
708
+
690
709
  variable "asset_bucket_name" {
691
710
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
692
711
  type = string
693
712
  }
694
713
 
714
+ # VPC Configuration (optional)
715
+ variable "enable_vpc" {
716
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
717
+ type = bool
718
+ default = false
719
+ }
720
+
721
+ variable "vpc_id" {
722
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
723
+ type = string
724
+ default = null
725
+
726
+ validation {
727
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
728
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
729
+ }
730
+ }
731
+
732
+ variable "subnet_ids" {
733
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
734
+ type = list(string)
735
+ default = null
736
+ }
737
+
695
738
  # CORS Configuration (passed to core module)
696
739
 
697
740
  variable "cors_allow_headers" {
@@ -754,6 +797,11 @@ resource "aws_s3_object" "lambda_zip" {
754
797
  }
755
798
 
756
799
  # Use the core REST API module
800
+ # Account-level CloudWatch role required for REST API access logging
801
+ module "account" {
802
+ source = "../../../core/api/api-gateway-account"
803
+ }
804
+
757
805
  module "rest_api" {
758
806
  source = "../../../core/api/rest-api"
759
807
 
@@ -783,9 +831,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
783
831
  depends_on = [aws_api_gateway_stage.api_stage]
784
832
  }
785
833
 
834
+ # Security group for the API Lambda function, used when deployed into a VPC
835
+ resource "aws_security_group" "api_lambda" {
836
+ count = var.enable_vpc ? 1 : 0
837
+
838
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
839
+ name_prefix = "test-api-lambda-"
840
+ description = "Security group for the TestApi API Lambda function"
841
+ vpc_id = var.vpc_id
842
+ tags = var.tags
843
+ }
844
+
845
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
846
+ count = var.enable_vpc ? 1 : 0
847
+
848
+ security_group_id = aws_security_group.api_lambda[0].id
849
+ cidr_ipv4 = "0.0.0.0/0"
850
+ from_port = 443
851
+ to_port = 443
852
+ ip_protocol = "tcp"
853
+ description = "Allow outbound HTTPS to AWS service endpoints"
854
+ }
855
+
786
856
  # Lambda function
787
857
  resource "aws_lambda_function" "api_lambda" {
788
- #checkov:skip=CKV_AWS_117:Lambda function does not need to be in VPC for this use case
858
+ #checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
789
859
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
790
860
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
791
861
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -807,13 +877,25 @@ resource "aws_lambda_function" "api_lambda" {
807
877
  mode = "Active"
808
878
  }
809
879
 
880
+ dynamic "vpc_config" {
881
+ for_each = var.enable_vpc ? [1] : []
882
+ content {
883
+ subnet_ids = var.subnet_ids
884
+ security_group_ids = [aws_security_group.api_lambda[0].id]
885
+ }
886
+ }
887
+
810
888
 
811
889
  environment {
812
890
  variables = merge({
813
- }, var.env)
891
+ }, var.appconfig_application_id != null ? {
892
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
893
+ } : {}, var.env)
814
894
  }
815
895
 
816
896
  tags = var.tags
897
+
898
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
817
899
  }
818
900
 
819
901
  # IAM role for Lambda execution
@@ -848,18 +930,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
848
930
  role = aws_iam_role.lambda_execution_role.name
849
931
  }
850
932
 
933
+ # Attach VPC access policy to Lambda role when deployed into a VPC
934
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
935
+ count = var.enable_vpc ? 1 : 0
936
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
937
+ role = aws_iam_role.lambda_execution_role.name
938
+ }
939
+
851
940
  # Additional IAM policies for Lambda (if provided)
852
941
  resource "aws_iam_role_policy" "lambda_additional_policies" {
853
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
942
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
854
943
  name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
855
944
  role = aws_iam_role.lambda_execution_role.id
856
945
 
857
946
  policy = jsonencode({
858
947
  Version = "2012-10-17"
859
- Statement = var.additional_iam_policy_statements
948
+ Statement = local.lambda_policy_statements
860
949
  })
861
950
  }
862
951
 
952
+ locals {
953
+ # Grant read access to the runtime-config AppConfig application when wired
954
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
955
+ {
956
+ Effect = "Allow"
957
+ Action = [
958
+ "appconfig:StartConfigurationSession",
959
+ "appconfig:GetLatestConfiguration"
960
+ ]
961
+ Resource = ["\${var.appconfig_application_arn}/*"]
962
+ }
963
+ ] : [], var.additional_iam_policy_statements)
964
+ }
965
+
863
966
  # CloudWatch Log Group for Lambda
864
967
  resource "aws_cloudwatch_log_group" "lambda_logs" {
865
968
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -1079,11 +1182,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
1079
1182
  ]
1080
1183
  }
1081
1184
 
1185
+ # KMS key for encrypting access logs at rest
1186
+ resource "aws_kms_key" "access_logs" {
1187
+ description = "TestApi API access log encryption"
1188
+ deletion_window_in_days = 7
1189
+ enable_key_rotation = true
1190
+
1191
+ policy = jsonencode({
1192
+ Version = "2012-10-17"
1193
+ Statement = [
1194
+ {
1195
+ Sid = "Enable IAM User Permissions"
1196
+ Effect = "Allow"
1197
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
1198
+ Action = "kms:*"
1199
+ Resource = "*"
1200
+ },
1201
+ {
1202
+ Sid = "Allow CloudWatch Logs"
1203
+ Effect = "Allow"
1204
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
1205
+ Action = [
1206
+ "kms:Encrypt",
1207
+ "kms:Decrypt",
1208
+ "kms:ReEncrypt*",
1209
+ "kms:GenerateDataKey*",
1210
+ "kms:DescribeKey"
1211
+ ]
1212
+ Resource = "*"
1213
+ Condition = {
1214
+ ArnEquals = {
1215
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
1216
+ }
1217
+ }
1218
+ }
1219
+ ]
1220
+ })
1221
+
1222
+ tags = var.tags
1223
+ }
1224
+
1225
+ resource "aws_kms_alias" "access_logs" {
1226
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
1227
+ target_key_id = aws_kms_key.access_logs.key_id
1228
+ }
1229
+
1230
+ # Access logs for the API Gateway stage
1231
+ resource "aws_cloudwatch_log_group" "access_logs" {
1232
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
1233
+ retention_in_days = 365
1234
+ kms_key_id = aws_kms_key.access_logs.arn
1235
+ tags = var.tags
1236
+ }
1237
+
1082
1238
  # API Gateway stage
1083
1239
  resource "aws_api_gateway_stage" "api_stage" {
1084
1240
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
1085
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
1086
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
1241
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
1087
1242
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
1088
1243
  #checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
1089
1244
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -1091,9 +1246,39 @@ resource "aws_api_gateway_stage" "api_stage" {
1091
1246
  stage_name = "prod"
1092
1247
  xray_tracing_enabled = true
1093
1248
 
1249
+ access_log_settings {
1250
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
1251
+ format = jsonencode({
1252
+ requestId = "$context.requestId"
1253
+ ip = "$context.identity.sourceIp"
1254
+ caller = "$context.identity.caller"
1255
+ user = "$context.identity.user"
1256
+ requestTime = "$context.requestTime"
1257
+ httpMethod = "$context.httpMethod"
1258
+ resourcePath = "$context.resourcePath"
1259
+ status = "$context.status"
1260
+ protocol = "$context.protocol"
1261
+ responseLength = "$context.responseLength"
1262
+ })
1263
+ }
1264
+
1094
1265
  tags = var.tags
1095
1266
 
1096
- depends_on = [aws_api_gateway_deployment.api_deployment]
1267
+ # Ensure the account-level role is configured before the stage is created
1268
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
1269
+ }
1270
+
1271
+ # Default throttling applied to all resource paths and methods
1272
+ resource "aws_api_gateway_method_settings" "throttling" {
1273
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
1274
+ rest_api_id = module.rest_api.api_id
1275
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
1276
+ method_path = "*/*"
1277
+
1278
+ settings {
1279
+ throttling_rate_limit = 10000
1280
+ throttling_burst_limit = 5000
1281
+ }
1097
1282
  }
1098
1283
 
1099
1284
  # API Gateway Resource Policy
@@ -1232,6 +1417,11 @@ output "lambda_execution_role_name" {
1232
1417
  value = aws_iam_role.lambda_execution_role.name
1233
1418
  }
1234
1419
 
1420
+ output "security_group_id" {
1421
+ description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
1422
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
1423
+ }
1424
+
1235
1425
  # Integration Outputs
1236
1426
  output "integration_id" {
1237
1427
  description = "ID of the Lambda integration"
@@ -1296,6 +1486,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1296
1486
  "apiName": "test-api",
1297
1487
  "auth": "custom",
1298
1488
  "modelProject": "@proj/test-api-model",
1489
+ "iac": "cdk",
1299
1490
  "ports": [3001]
1300
1491
  },
1301
1492
  "targets": {
@@ -1304,17 +1495,34 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1304
1495
  },
1305
1496
  "compile": {
1306
1497
  "executor": "nx:run-commands",
1498
+ "dependsOn": ["copy-ssdk"],
1307
1499
  "outputs": ["{workspaceRoot}/dist/{projectRoot}/tsc"],
1308
1500
  "options": {
1309
1501
  "command": "tsc --build tsconfig.lib.json",
1310
1502
  "cwd": "{projectRoot}"
1503
+ }
1504
+ },
1505
+ "format": {
1506
+ "executor": "nx:run-commands",
1507
+ "cache": true,
1508
+ "inputs": ["biome"],
1509
+ "options": {
1510
+ "command": "biome format {projectRoot}"
1311
1511
  },
1312
- "dependsOn": ["copy-ssdk"]
1512
+ "configurations": {
1513
+ "fix": {
1514
+ "command": "biome format --write {projectRoot}"
1515
+ },
1516
+ "skip-lint": {
1517
+ "command": "node -e \\"\\""
1518
+ }
1519
+ }
1313
1520
  },
1314
1521
  "lint": {
1315
1522
  "executor": "nx:run-commands",
1316
1523
  "cache": true,
1317
1524
  "inputs": ["biome"],
1525
+ "dependsOn": ["format"],
1318
1526
  "options": {
1319
1527
  "command": "biome lint {projectRoot}"
1320
1528
  },
@@ -1327,22 +1535,15 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1327
1535
  }
1328
1536
  }
1329
1537
  },
1330
- "test": {
1331
- "executor": "@nx/vitest:test",
1332
- "outputs": ["{options.reportsDirectory}"],
1333
- "options": {
1334
- "reportsDirectory": "{workspaceRoot}/coverage/{projectRoot}"
1335
- }
1336
- },
1337
1538
  "bundle": {
1539
+ "executor": "nx:run-commands",
1540
+ "dependsOn": ["compile"],
1338
1541
  "cache": true,
1339
1542
  "outputs": ["{workspaceRoot}/dist/{projectRoot}/bundle"],
1340
- "executor": "nx:run-commands",
1341
1543
  "options": {
1342
1544
  "command": "rolldown -c rolldown.config.ts",
1343
1545
  "cwd": "{projectRoot}"
1344
- },
1345
- "dependsOn": ["compile"]
1546
+ }
1346
1547
  },
1347
1548
  "copy-ssdk": {
1348
1549
  "cache": true,
@@ -1365,31 +1566,31 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1365
1566
  },
1366
1567
  "watch-copy-ssdk": {
1367
1568
  "executor": "nx:run-commands",
1569
+ "continuous": true,
1368
1570
  "options": {
1369
- "command": "nx watch --projects=@proj/test-api-model --includeDependentProjects -- nx run @proj/test-api:copy-ssdk"
1370
- },
1371
- "continuous": true
1571
+ "command": "nx watch --projects=@proj/test-api-model --includeDependencies -- nx run @proj/test-api:copy-ssdk"
1572
+ }
1372
1573
  },
1373
1574
  "serve": {
1374
1575
  "executor": "nx:run-commands",
1576
+ "dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
1577
+ "continuous": true,
1375
1578
  "options": {
1376
1579
  "command": "tsx --watch src/local-server.ts",
1377
1580
  "cwd": "{projectRoot}"
1378
- },
1379
- "continuous": true,
1380
- "dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
1581
+ }
1381
1582
  },
1382
- "serve-local": {
1583
+ "dev": {
1383
1584
  "executor": "nx:run-commands",
1585
+ "dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
1586
+ "continuous": true,
1384
1587
  "options": {
1385
1588
  "command": "tsx --watch src/local-server.ts",
1386
1589
  "cwd": "{projectRoot}",
1387
1590
  "env": {
1388
- "SERVE_LOCAL": "true"
1591
+ "LOCAL_DEV": "true"
1389
1592
  }
1390
- },
1391
- "continuous": true,
1392
- "dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
1593
+ }
1393
1594
  }
1394
1595
  }
1395
1596
  }
@@ -1543,6 +1744,8 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1543
1744
  "projectType": "library",
1544
1745
  "metadata": {
1545
1746
  "generator": "smithy#project",
1747
+ "smithyType": "service",
1748
+ "namespace": "proj",
1546
1749
  "apiName": "test-api-model",
1547
1750
  "backendProject": "@proj/test-api"
1548
1751
  },
@@ -1558,7 +1761,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1558
1761
  "commands": [
1559
1762
  "rimraf dist/{projectRoot}/build",
1560
1763
  "make-dir dist/{projectRoot}/build",
1561
- "docker build -f {projectRoot}/build.Dockerfile --target export --output type=local,dest=dist/{projectRoot}/build {projectRoot}"
1764
+ "docker build -f {projectRoot}/build.Dockerfile --build-context workspace=. --target export --output type=local,dest=dist/{projectRoot}/build {projectRoot}"
1562
1765
  ],
1563
1766
  "parallel": false,
1564
1767
  "cwd": "{workspaceRoot}"
@@ -1682,11 +1885,11 @@ terraform {
1682
1885
  required_providers {
1683
1886
  aws = {
1684
1887
  source = "hashicorp/aws"
1685
- version = "~> 6.33"
1888
+ version = "6.57.1"
1686
1889
  }
1687
1890
  random = {
1688
1891
  source = "hashicorp/random"
1689
- version = "~> 3.1"
1892
+ version = "3.9.0"
1690
1893
  }
1691
1894
  }
1692
1895
  }
@@ -1756,8 +1959,6 @@ data "aws_caller_identity" "current" {}
1756
1959
 
1757
1960
  # Resources
1758
1961
 
1759
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
1760
-
1761
1962
  # REST API Gateway
1762
1963
  resource "aws_api_gateway_rest_api" "rest_api" {
1763
1964
  name = var.api_name
@@ -1774,10 +1975,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
1774
1975
  tags = var.tags
1775
1976
  }
1776
1977
 
1777
- # Note: Deployment and stage are created in the consuming module (e.g., foo-api.tf)
1778
- # after all methods and integrations are defined
1779
-
1780
- # Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
1978
+ # Note: Deployment, stage and access logging are created in the consuming module
1979
+ # (e.g., foo-api.tf) after all methods and integrations are defined
1781
1980
 
1782
1981
  # Gateway Response for CORS (4XX errors)
1783
1982
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -1935,16 +2134,14 @@ output "waf_web_acl_arn" {
1935
2134
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
1936
2135
  }
1937
2136
 
1938
- # Note: Stage and deployment outputs are provided by the consuming module
1939
-
1940
- # Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
2137
+ # Note: Stage, deployment and access log outputs are provided by the consuming module",
1941
2138
  "test-api.tf": "terraform {
1942
2139
  required_version = ">= 1.0"
1943
2140
 
1944
2141
  required_providers {
1945
2142
  aws = {
1946
2143
  source = "hashicorp/aws"
1947
- version = "~> 6.33"
2144
+ version = "6.57.1"
1948
2145
  }
1949
2146
  }
1950
2147
  }
@@ -1976,11 +2173,47 @@ variable "additional_iam_policy_statements" {
1976
2173
  default = []
1977
2174
  }
1978
2175
 
2176
+ variable "appconfig_application_id" {
2177
+ description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
2178
+ type = string
2179
+ default = null
2180
+ }
2181
+
2182
+ variable "appconfig_application_arn" {
2183
+ description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
2184
+ type = string
2185
+ default = null
2186
+ }
2187
+
1979
2188
  variable "asset_bucket_name" {
1980
2189
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
1981
2190
  type = string
1982
2191
  }
1983
2192
 
2193
+ # VPC Configuration (optional)
2194
+ variable "enable_vpc" {
2195
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
2196
+ type = bool
2197
+ default = false
2198
+ }
2199
+
2200
+ variable "vpc_id" {
2201
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
2202
+ type = string
2203
+ default = null
2204
+
2205
+ validation {
2206
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
2207
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
2208
+ }
2209
+ }
2210
+
2211
+ variable "subnet_ids" {
2212
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
2213
+ type = list(string)
2214
+ default = null
2215
+ }
2216
+
1984
2217
  # CORS Configuration (passed to core module)
1985
2218
 
1986
2219
  variable "cors_allow_headers" {
@@ -2043,6 +2276,11 @@ resource "aws_s3_object" "lambda_zip" {
2043
2276
  }
2044
2277
 
2045
2278
  # Use the core REST API module
2279
+ # Account-level CloudWatch role required for REST API access logging
2280
+ module "account" {
2281
+ source = "../../../core/api/api-gateway-account"
2282
+ }
2283
+
2046
2284
  module "rest_api" {
2047
2285
  source = "../../../core/api/rest-api"
2048
2286
 
@@ -2072,9 +2310,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
2072
2310
  depends_on = [aws_api_gateway_stage.api_stage]
2073
2311
  }
2074
2312
 
2313
+ # Security group for the API Lambda function, used when deployed into a VPC
2314
+ resource "aws_security_group" "api_lambda" {
2315
+ count = var.enable_vpc ? 1 : 0
2316
+
2317
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
2318
+ name_prefix = "test-api-lambda-"
2319
+ description = "Security group for the TestApi API Lambda function"
2320
+ vpc_id = var.vpc_id
2321
+ tags = var.tags
2322
+ }
2323
+
2324
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
2325
+ count = var.enable_vpc ? 1 : 0
2326
+
2327
+ security_group_id = aws_security_group.api_lambda[0].id
2328
+ cidr_ipv4 = "0.0.0.0/0"
2329
+ from_port = 443
2330
+ to_port = 443
2331
+ ip_protocol = "tcp"
2332
+ description = "Allow outbound HTTPS to AWS service endpoints"
2333
+ }
2334
+
2075
2335
  # Lambda function
2076
2336
  resource "aws_lambda_function" "api_lambda" {
2077
- #checkov:skip=CKV_AWS_117:Lambda function does not need to be in VPC for this use case
2337
+ #checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
2078
2338
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
2079
2339
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
2080
2340
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -2096,13 +2356,25 @@ resource "aws_lambda_function" "api_lambda" {
2096
2356
  mode = "Active"
2097
2357
  }
2098
2358
 
2359
+ dynamic "vpc_config" {
2360
+ for_each = var.enable_vpc ? [1] : []
2361
+ content {
2362
+ subnet_ids = var.subnet_ids
2363
+ security_group_ids = [aws_security_group.api_lambda[0].id]
2364
+ }
2365
+ }
2366
+
2099
2367
 
2100
2368
  environment {
2101
2369
  variables = merge({
2102
- }, var.env)
2370
+ }, var.appconfig_application_id != null ? {
2371
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
2372
+ } : {}, var.env)
2103
2373
  }
2104
2374
 
2105
2375
  tags = var.tags
2376
+
2377
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
2106
2378
  }
2107
2379
 
2108
2380
  # IAM role for Lambda execution
@@ -2137,18 +2409,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
2137
2409
  role = aws_iam_role.lambda_execution_role.name
2138
2410
  }
2139
2411
 
2412
+ # Attach VPC access policy to Lambda role when deployed into a VPC
2413
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
2414
+ count = var.enable_vpc ? 1 : 0
2415
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
2416
+ role = aws_iam_role.lambda_execution_role.name
2417
+ }
2418
+
2140
2419
  # Additional IAM policies for Lambda (if provided)
2141
2420
  resource "aws_iam_role_policy" "lambda_additional_policies" {
2142
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
2421
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
2143
2422
  name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
2144
2423
  role = aws_iam_role.lambda_execution_role.id
2145
2424
 
2146
2425
  policy = jsonencode({
2147
2426
  Version = "2012-10-17"
2148
- Statement = var.additional_iam_policy_statements
2427
+ Statement = local.lambda_policy_statements
2149
2428
  })
2150
2429
  }
2151
2430
 
2431
+ locals {
2432
+ # Grant read access to the runtime-config AppConfig application when wired
2433
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
2434
+ {
2435
+ Effect = "Allow"
2436
+ Action = [
2437
+ "appconfig:StartConfigurationSession",
2438
+ "appconfig:GetLatestConfiguration"
2439
+ ]
2440
+ Resource = ["\${var.appconfig_application_arn}/*"]
2441
+ }
2442
+ ] : [], var.additional_iam_policy_statements)
2443
+ }
2444
+
2152
2445
  # CloudWatch Log Group for Lambda
2153
2446
  resource "aws_cloudwatch_log_group" "lambda_logs" {
2154
2447
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -2197,6 +2490,9 @@ resource "aws_api_gateway_method" "proxy_method" {
2197
2490
 
2198
2491
  authorization = "COGNITO_USER_POOLS"
2199
2492
  authorizer_id = aws_api_gateway_authorizer.cognito_authorizer.id
2493
+ # Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
2494
+ # and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
2495
+ authorization_scopes = ["openid", "aws.cognito.signin.user.admin"]
2200
2496
 
2201
2497
  request_parameters = {
2202
2498
  "method.request.path.proxy" = true
@@ -2283,11 +2579,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
2283
2579
  ]
2284
2580
  }
2285
2581
 
2582
+ # KMS key for encrypting access logs at rest
2583
+ resource "aws_kms_key" "access_logs" {
2584
+ description = "TestApi API access log encryption"
2585
+ deletion_window_in_days = 7
2586
+ enable_key_rotation = true
2587
+
2588
+ policy = jsonencode({
2589
+ Version = "2012-10-17"
2590
+ Statement = [
2591
+ {
2592
+ Sid = "Enable IAM User Permissions"
2593
+ Effect = "Allow"
2594
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
2595
+ Action = "kms:*"
2596
+ Resource = "*"
2597
+ },
2598
+ {
2599
+ Sid = "Allow CloudWatch Logs"
2600
+ Effect = "Allow"
2601
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
2602
+ Action = [
2603
+ "kms:Encrypt",
2604
+ "kms:Decrypt",
2605
+ "kms:ReEncrypt*",
2606
+ "kms:GenerateDataKey*",
2607
+ "kms:DescribeKey"
2608
+ ]
2609
+ Resource = "*"
2610
+ Condition = {
2611
+ ArnEquals = {
2612
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
2613
+ }
2614
+ }
2615
+ }
2616
+ ]
2617
+ })
2618
+
2619
+ tags = var.tags
2620
+ }
2621
+
2622
+ resource "aws_kms_alias" "access_logs" {
2623
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
2624
+ target_key_id = aws_kms_key.access_logs.key_id
2625
+ }
2626
+
2627
+ # Access logs for the API Gateway stage
2628
+ resource "aws_cloudwatch_log_group" "access_logs" {
2629
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
2630
+ retention_in_days = 365
2631
+ kms_key_id = aws_kms_key.access_logs.arn
2632
+ tags = var.tags
2633
+ }
2634
+
2286
2635
  # API Gateway stage
2287
2636
  resource "aws_api_gateway_stage" "api_stage" {
2288
2637
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
2289
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
2290
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
2638
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
2291
2639
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
2292
2640
  #checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
2293
2641
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -2295,9 +2643,39 @@ resource "aws_api_gateway_stage" "api_stage" {
2295
2643
  stage_name = "prod"
2296
2644
  xray_tracing_enabled = true
2297
2645
 
2646
+ access_log_settings {
2647
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
2648
+ format = jsonencode({
2649
+ requestId = "$context.requestId"
2650
+ ip = "$context.identity.sourceIp"
2651
+ caller = "$context.identity.caller"
2652
+ user = "$context.identity.user"
2653
+ requestTime = "$context.requestTime"
2654
+ httpMethod = "$context.httpMethod"
2655
+ resourcePath = "$context.resourcePath"
2656
+ status = "$context.status"
2657
+ protocol = "$context.protocol"
2658
+ responseLength = "$context.responseLength"
2659
+ })
2660
+ }
2661
+
2298
2662
  tags = var.tags
2299
2663
 
2300
- depends_on = [aws_api_gateway_deployment.api_deployment]
2664
+ # Ensure the account-level role is configured before the stage is created
2665
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
2666
+ }
2667
+
2668
+ # Default throttling applied to all resource paths and methods
2669
+ resource "aws_api_gateway_method_settings" "throttling" {
2670
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
2671
+ rest_api_id = module.rest_api.api_id
2672
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
2673
+ method_path = "*/*"
2674
+
2675
+ settings {
2676
+ throttling_rate_limit = 10000
2677
+ throttling_burst_limit = 5000
2678
+ }
2301
2679
  }
2302
2680
 
2303
2681
  # API Gateway Resource Policy
@@ -2436,6 +2814,11 @@ output "lambda_execution_role_name" {
2436
2814
  value = aws_iam_role.lambda_execution_role.name
2437
2815
  }
2438
2816
 
2817
+ output "security_group_id" {
2818
+ description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
2819
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
2820
+ }
2821
+
2439
2822
  # Integration Outputs
2440
2823
  output "integration_id" {
2441
2824
  description = "ID of the Lambda integration"
@@ -2477,11 +2860,11 @@ terraform {
2477
2860
  required_providers {
2478
2861
  aws = {
2479
2862
  source = "hashicorp/aws"
2480
- version = "~> 6.33"
2863
+ version = "6.57.1"
2481
2864
  }
2482
2865
  random = {
2483
2866
  source = "hashicorp/random"
2484
- version = "~> 3.1"
2867
+ version = "3.9.0"
2485
2868
  }
2486
2869
  }
2487
2870
  }
@@ -2551,8 +2934,6 @@ data "aws_caller_identity" "current" {}
2551
2934
 
2552
2935
  # Resources
2553
2936
 
2554
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
2555
-
2556
2937
  # REST API Gateway
2557
2938
  resource "aws_api_gateway_rest_api" "rest_api" {
2558
2939
  name = var.api_name
@@ -2569,10 +2950,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
2569
2950
  tags = var.tags
2570
2951
  }
2571
2952
 
2572
- # Note: Deployment and stage are created in the consuming module (e.g., foo-api.tf)
2573
- # after all methods and integrations are defined
2574
-
2575
- # Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
2953
+ # Note: Deployment, stage and access logging are created in the consuming module
2954
+ # (e.g., foo-api.tf) after all methods and integrations are defined
2576
2955
 
2577
2956
  # Gateway Response for CORS (4XX errors)
2578
2957
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -2730,16 +3109,14 @@ output "waf_web_acl_arn" {
2730
3109
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
2731
3110
  }
2732
3111
 
2733
- # Note: Stage and deployment outputs are provided by the consuming module
2734
-
2735
- # Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
3112
+ # Note: Stage, deployment and access log outputs are provided by the consuming module",
2736
3113
  "test-api.tf": "terraform {
2737
3114
  required_version = ">= 1.0"
2738
3115
 
2739
3116
  required_providers {
2740
3117
  aws = {
2741
3118
  source = "hashicorp/aws"
2742
- version = "~> 6.33"
3119
+ version = "6.57.1"
2743
3120
  }
2744
3121
  }
2745
3122
  }
@@ -2761,11 +3138,47 @@ variable "additional_iam_policy_statements" {
2761
3138
  default = []
2762
3139
  }
2763
3140
 
3141
+ variable "appconfig_application_id" {
3142
+ description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
3143
+ type = string
3144
+ default = null
3145
+ }
3146
+
3147
+ variable "appconfig_application_arn" {
3148
+ description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
3149
+ type = string
3150
+ default = null
3151
+ }
3152
+
2764
3153
  variable "asset_bucket_name" {
2765
3154
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
2766
3155
  type = string
2767
3156
  }
2768
3157
 
3158
+ # VPC Configuration (optional)
3159
+ variable "enable_vpc" {
3160
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
3161
+ type = bool
3162
+ default = false
3163
+ }
3164
+
3165
+ variable "vpc_id" {
3166
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
3167
+ type = string
3168
+ default = null
3169
+
3170
+ validation {
3171
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
3172
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
3173
+ }
3174
+ }
3175
+
3176
+ variable "subnet_ids" {
3177
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
3178
+ type = list(string)
3179
+ default = null
3180
+ }
3181
+
2769
3182
  # CORS Configuration (passed to core module)
2770
3183
 
2771
3184
  variable "cors_allow_headers" {
@@ -2828,6 +3241,11 @@ resource "aws_s3_object" "lambda_zip" {
2828
3241
  }
2829
3242
 
2830
3243
  # Use the core REST API module
3244
+ # Account-level CloudWatch role required for REST API access logging
3245
+ module "account" {
3246
+ source = "../../../core/api/api-gateway-account"
3247
+ }
3248
+
2831
3249
  module "rest_api" {
2832
3250
  source = "../../../core/api/rest-api"
2833
3251
 
@@ -2857,9 +3275,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
2857
3275
  depends_on = [aws_api_gateway_stage.api_stage]
2858
3276
  }
2859
3277
 
3278
+ # Security group for the API Lambda function, used when deployed into a VPC
3279
+ resource "aws_security_group" "api_lambda" {
3280
+ count = var.enable_vpc ? 1 : 0
3281
+
3282
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
3283
+ name_prefix = "test-api-lambda-"
3284
+ description = "Security group for the TestApi API Lambda function"
3285
+ vpc_id = var.vpc_id
3286
+ tags = var.tags
3287
+ }
3288
+
3289
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
3290
+ count = var.enable_vpc ? 1 : 0
3291
+
3292
+ security_group_id = aws_security_group.api_lambda[0].id
3293
+ cidr_ipv4 = "0.0.0.0/0"
3294
+ from_port = 443
3295
+ to_port = 443
3296
+ ip_protocol = "tcp"
3297
+ description = "Allow outbound HTTPS to AWS service endpoints"
3298
+ }
3299
+
2860
3300
  # Lambda function
2861
3301
  resource "aws_lambda_function" "api_lambda" {
2862
- #checkov:skip=CKV_AWS_117:Lambda function does not need to be in VPC for this use case
3302
+ #checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
2863
3303
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
2864
3304
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
2865
3305
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -2881,13 +3321,25 @@ resource "aws_lambda_function" "api_lambda" {
2881
3321
  mode = "Active"
2882
3322
  }
2883
3323
 
3324
+ dynamic "vpc_config" {
3325
+ for_each = var.enable_vpc ? [1] : []
3326
+ content {
3327
+ subnet_ids = var.subnet_ids
3328
+ security_group_ids = [aws_security_group.api_lambda[0].id]
3329
+ }
3330
+ }
3331
+
2884
3332
 
2885
3333
  environment {
2886
3334
  variables = merge({
2887
- }, var.env)
3335
+ }, var.appconfig_application_id != null ? {
3336
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
3337
+ } : {}, var.env)
2888
3338
  }
2889
3339
 
2890
3340
  tags = var.tags
3341
+
3342
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
2891
3343
  }
2892
3344
 
2893
3345
  # IAM role for Lambda execution
@@ -2922,18 +3374,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
2922
3374
  role = aws_iam_role.lambda_execution_role.name
2923
3375
  }
2924
3376
 
3377
+ # Attach VPC access policy to Lambda role when deployed into a VPC
3378
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
3379
+ count = var.enable_vpc ? 1 : 0
3380
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
3381
+ role = aws_iam_role.lambda_execution_role.name
3382
+ }
3383
+
2925
3384
  # Additional IAM policies for Lambda (if provided)
2926
3385
  resource "aws_iam_role_policy" "lambda_additional_policies" {
2927
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
3386
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
2928
3387
  name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
2929
3388
  role = aws_iam_role.lambda_execution_role.id
2930
3389
 
2931
3390
  policy = jsonencode({
2932
3391
  Version = "2012-10-17"
2933
- Statement = var.additional_iam_policy_statements
3392
+ Statement = local.lambda_policy_statements
2934
3393
  })
2935
3394
  }
2936
3395
 
3396
+ locals {
3397
+ # Grant read access to the runtime-config AppConfig application when wired
3398
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
3399
+ {
3400
+ Effect = "Allow"
3401
+ Action = [
3402
+ "appconfig:StartConfigurationSession",
3403
+ "appconfig:GetLatestConfiguration"
3404
+ ]
3405
+ Resource = ["\${var.appconfig_application_arn}/*"]
3406
+ }
3407
+ ] : [], var.additional_iam_policy_statements)
3408
+ }
3409
+
2937
3410
  # CloudWatch Log Group for Lambda
2938
3411
  resource "aws_cloudwatch_log_group" "lambda_logs" {
2939
3412
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -3059,11 +3532,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
3059
3532
  ]
3060
3533
  }
3061
3534
 
3535
+ # KMS key for encrypting access logs at rest
3536
+ resource "aws_kms_key" "access_logs" {
3537
+ description = "TestApi API access log encryption"
3538
+ deletion_window_in_days = 7
3539
+ enable_key_rotation = true
3540
+
3541
+ policy = jsonencode({
3542
+ Version = "2012-10-17"
3543
+ Statement = [
3544
+ {
3545
+ Sid = "Enable IAM User Permissions"
3546
+ Effect = "Allow"
3547
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
3548
+ Action = "kms:*"
3549
+ Resource = "*"
3550
+ },
3551
+ {
3552
+ Sid = "Allow CloudWatch Logs"
3553
+ Effect = "Allow"
3554
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
3555
+ Action = [
3556
+ "kms:Encrypt",
3557
+ "kms:Decrypt",
3558
+ "kms:ReEncrypt*",
3559
+ "kms:GenerateDataKey*",
3560
+ "kms:DescribeKey"
3561
+ ]
3562
+ Resource = "*"
3563
+ Condition = {
3564
+ ArnEquals = {
3565
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
3566
+ }
3567
+ }
3568
+ }
3569
+ ]
3570
+ })
3571
+
3572
+ tags = var.tags
3573
+ }
3574
+
3575
+ resource "aws_kms_alias" "access_logs" {
3576
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
3577
+ target_key_id = aws_kms_key.access_logs.key_id
3578
+ }
3579
+
3580
+ # Access logs for the API Gateway stage
3581
+ resource "aws_cloudwatch_log_group" "access_logs" {
3582
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
3583
+ retention_in_days = 365
3584
+ kms_key_id = aws_kms_key.access_logs.arn
3585
+ tags = var.tags
3586
+ }
3587
+
3062
3588
  # API Gateway stage
3063
3589
  resource "aws_api_gateway_stage" "api_stage" {
3064
3590
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
3065
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
3066
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
3591
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
3067
3592
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
3068
3593
  #checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
3069
3594
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -3071,9 +3596,39 @@ resource "aws_api_gateway_stage" "api_stage" {
3071
3596
  stage_name = "prod"
3072
3597
  xray_tracing_enabled = true
3073
3598
 
3599
+ access_log_settings {
3600
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
3601
+ format = jsonencode({
3602
+ requestId = "$context.requestId"
3603
+ ip = "$context.identity.sourceIp"
3604
+ caller = "$context.identity.caller"
3605
+ user = "$context.identity.user"
3606
+ requestTime = "$context.requestTime"
3607
+ httpMethod = "$context.httpMethod"
3608
+ resourcePath = "$context.resourcePath"
3609
+ status = "$context.status"
3610
+ protocol = "$context.protocol"
3611
+ responseLength = "$context.responseLength"
3612
+ })
3613
+ }
3614
+
3074
3615
  tags = var.tags
3075
3616
 
3076
- depends_on = [aws_api_gateway_deployment.api_deployment]
3617
+ # Ensure the account-level role is configured before the stage is created
3618
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
3619
+ }
3620
+
3621
+ # Default throttling applied to all resource paths and methods
3622
+ resource "aws_api_gateway_method_settings" "throttling" {
3623
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
3624
+ rest_api_id = module.rest_api.api_id
3625
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
3626
+ method_path = "*/*"
3627
+
3628
+ settings {
3629
+ throttling_rate_limit = 10000
3630
+ throttling_burst_limit = 5000
3631
+ }
3077
3632
  }
3078
3633
 
3079
3634
  # API Gateway Resource Policy
@@ -3223,6 +3778,11 @@ output "lambda_execution_role_name" {
3223
3778
  value = aws_iam_role.lambda_execution_role.name
3224
3779
  }
3225
3780
 
3781
+ output "security_group_id" {
3782
+ description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
3783
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
3784
+ }
3785
+
3226
3786
  # Integration Outputs
3227
3787
  output "integration_id" {
3228
3788
  description = "ID of the Lambda integration"
@@ -3260,7 +3820,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
3260
3820
  required_providers {
3261
3821
  aws = {
3262
3822
  source = "hashicorp/aws"
3263
- version = "~> 6.33"
3823
+ version = "6.57.1"
3264
3824
  }
3265
3825
  }
3266
3826
  }
@@ -3282,11 +3842,47 @@ variable "additional_iam_policy_statements" {
3282
3842
  default = []
3283
3843
  }
3284
3844
 
3845
+ variable "appconfig_application_id" {
3846
+ description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
3847
+ type = string
3848
+ default = null
3849
+ }
3850
+
3851
+ variable "appconfig_application_arn" {
3852
+ description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
3853
+ type = string
3854
+ default = null
3855
+ }
3856
+
3285
3857
  variable "asset_bucket_name" {
3286
3858
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
3287
3859
  type = string
3288
3860
  }
3289
3861
 
3862
+ # VPC Configuration (optional)
3863
+ variable "enable_vpc" {
3864
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
3865
+ type = bool
3866
+ default = false
3867
+ }
3868
+
3869
+ variable "vpc_id" {
3870
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
3871
+ type = string
3872
+ default = null
3873
+
3874
+ validation {
3875
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
3876
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
3877
+ }
3878
+ }
3879
+
3880
+ variable "subnet_ids" {
3881
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
3882
+ type = list(string)
3883
+ default = null
3884
+ }
3885
+
3290
3886
  # CORS Configuration (passed to core module)
3291
3887
 
3292
3888
  variable "cors_allow_headers" {
@@ -3349,6 +3945,11 @@ resource "aws_s3_object" "lambda_zip" {
3349
3945
  }
3350
3946
 
3351
3947
  # Use the core REST API module
3948
+ # Account-level CloudWatch role required for REST API access logging
3949
+ module "account" {
3950
+ source = "../../../core/api/api-gateway-account"
3951
+ }
3952
+
3352
3953
  module "rest_api" {
3353
3954
  source = "../../../core/api/rest-api"
3354
3955
 
@@ -3378,9 +3979,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
3378
3979
  depends_on = [aws_api_gateway_stage.api_stage]
3379
3980
  }
3380
3981
 
3982
+ # Security group for the API Lambda function, used when deployed into a VPC
3983
+ resource "aws_security_group" "api_lambda" {
3984
+ count = var.enable_vpc ? 1 : 0
3985
+
3986
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
3987
+ name_prefix = "custom-api-lambda-"
3988
+ description = "Security group for the CustomApi API Lambda function"
3989
+ vpc_id = var.vpc_id
3990
+ tags = var.tags
3991
+ }
3992
+
3993
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
3994
+ count = var.enable_vpc ? 1 : 0
3995
+
3996
+ security_group_id = aws_security_group.api_lambda[0].id
3997
+ cidr_ipv4 = "0.0.0.0/0"
3998
+ from_port = 443
3999
+ to_port = 443
4000
+ ip_protocol = "tcp"
4001
+ description = "Allow outbound HTTPS to AWS service endpoints"
4002
+ }
4003
+
3381
4004
  # Lambda function
3382
4005
  resource "aws_lambda_function" "api_lambda" {
3383
- #checkov:skip=CKV_AWS_117:Lambda function does not need to be in VPC for this use case
4006
+ #checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
3384
4007
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
3385
4008
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
3386
4009
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -3402,13 +4025,25 @@ resource "aws_lambda_function" "api_lambda" {
3402
4025
  mode = "Active"
3403
4026
  }
3404
4027
 
4028
+ dynamic "vpc_config" {
4029
+ for_each = var.enable_vpc ? [1] : []
4030
+ content {
4031
+ subnet_ids = var.subnet_ids
4032
+ security_group_ids = [aws_security_group.api_lambda[0].id]
4033
+ }
4034
+ }
4035
+
3405
4036
 
3406
4037
  environment {
3407
4038
  variables = merge({
3408
- }, var.env)
4039
+ }, var.appconfig_application_id != null ? {
4040
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
4041
+ } : {}, var.env)
3409
4042
  }
3410
4043
 
3411
4044
  tags = var.tags
4045
+
4046
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
3412
4047
  }
3413
4048
 
3414
4049
  # IAM role for Lambda execution
@@ -3443,18 +4078,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
3443
4078
  role = aws_iam_role.lambda_execution_role.name
3444
4079
  }
3445
4080
 
4081
+ # Attach VPC access policy to Lambda role when deployed into a VPC
4082
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
4083
+ count = var.enable_vpc ? 1 : 0
4084
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
4085
+ role = aws_iam_role.lambda_execution_role.name
4086
+ }
4087
+
3446
4088
  # Additional IAM policies for Lambda (if provided)
3447
4089
  resource "aws_iam_role_policy" "lambda_additional_policies" {
3448
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
4090
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
3449
4091
  name = "CustomApiHandler-additional-policies-\${random_string.suffix.result}"
3450
4092
  role = aws_iam_role.lambda_execution_role.id
3451
4093
 
3452
4094
  policy = jsonencode({
3453
4095
  Version = "2012-10-17"
3454
- Statement = var.additional_iam_policy_statements
4096
+ Statement = local.lambda_policy_statements
3455
4097
  })
3456
4098
  }
3457
4099
 
4100
+ locals {
4101
+ # Grant read access to the runtime-config AppConfig application when wired
4102
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
4103
+ {
4104
+ Effect = "Allow"
4105
+ Action = [
4106
+ "appconfig:StartConfigurationSession",
4107
+ "appconfig:GetLatestConfiguration"
4108
+ ]
4109
+ Resource = ["\${var.appconfig_application_arn}/*"]
4110
+ }
4111
+ ] : [], var.additional_iam_policy_statements)
4112
+ }
4113
+
3458
4114
  # CloudWatch Log Group for Lambda
3459
4115
  resource "aws_cloudwatch_log_group" "lambda_logs" {
3460
4116
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -3674,11 +4330,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
3674
4330
  ]
3675
4331
  }
3676
4332
 
4333
+ # KMS key for encrypting access logs at rest
4334
+ resource "aws_kms_key" "access_logs" {
4335
+ description = "CustomApi API access log encryption"
4336
+ deletion_window_in_days = 7
4337
+ enable_key_rotation = true
4338
+
4339
+ policy = jsonencode({
4340
+ Version = "2012-10-17"
4341
+ Statement = [
4342
+ {
4343
+ Sid = "Enable IAM User Permissions"
4344
+ Effect = "Allow"
4345
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
4346
+ Action = "kms:*"
4347
+ Resource = "*"
4348
+ },
4349
+ {
4350
+ Sid = "Allow CloudWatch Logs"
4351
+ Effect = "Allow"
4352
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
4353
+ Action = [
4354
+ "kms:Encrypt",
4355
+ "kms:Decrypt",
4356
+ "kms:ReEncrypt*",
4357
+ "kms:GenerateDataKey*",
4358
+ "kms:DescribeKey"
4359
+ ]
4360
+ Resource = "*"
4361
+ Condition = {
4362
+ ArnEquals = {
4363
+ "kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
4364
+ }
4365
+ }
4366
+ }
4367
+ ]
4368
+ })
4369
+
4370
+ tags = var.tags
4371
+ }
4372
+
4373
+ resource "aws_kms_alias" "access_logs" {
4374
+ name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
4375
+ target_key_id = aws_kms_key.access_logs.key_id
4376
+ }
4377
+
4378
+ # Access logs for the API Gateway stage
4379
+ resource "aws_cloudwatch_log_group" "access_logs" {
4380
+ name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
4381
+ retention_in_days = 365
4382
+ kms_key_id = aws_kms_key.access_logs.arn
4383
+ tags = var.tags
4384
+ }
4385
+
3677
4386
  # API Gateway stage
3678
4387
  resource "aws_api_gateway_stage" "api_stage" {
3679
4388
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
3680
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
3681
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
4389
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
3682
4390
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
3683
4391
  #checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
3684
4392
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -3686,9 +4394,39 @@ resource "aws_api_gateway_stage" "api_stage" {
3686
4394
  stage_name = "prod"
3687
4395
  xray_tracing_enabled = true
3688
4396
 
4397
+ access_log_settings {
4398
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
4399
+ format = jsonencode({
4400
+ requestId = "$context.requestId"
4401
+ ip = "$context.identity.sourceIp"
4402
+ caller = "$context.identity.caller"
4403
+ user = "$context.identity.user"
4404
+ requestTime = "$context.requestTime"
4405
+ httpMethod = "$context.httpMethod"
4406
+ resourcePath = "$context.resourcePath"
4407
+ status = "$context.status"
4408
+ protocol = "$context.protocol"
4409
+ responseLength = "$context.responseLength"
4410
+ })
4411
+ }
4412
+
3689
4413
  tags = var.tags
3690
4414
 
3691
- depends_on = [aws_api_gateway_deployment.api_deployment]
4415
+ # Ensure the account-level role is configured before the stage is created
4416
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
4417
+ }
4418
+
4419
+ # Default throttling applied to all resource paths and methods
4420
+ resource "aws_api_gateway_method_settings" "throttling" {
4421
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
4422
+ rest_api_id = module.rest_api.api_id
4423
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
4424
+ method_path = "*/*"
4425
+
4426
+ settings {
4427
+ throttling_rate_limit = 10000
4428
+ throttling_burst_limit = 5000
4429
+ }
3692
4430
  }
3693
4431
 
3694
4432
  # API Gateway Resource Policy
@@ -3827,6 +4565,11 @@ output "lambda_execution_role_name" {
3827
4565
  value = aws_iam_role.lambda_execution_role.name
3828
4566
  }
3829
4567
 
4568
+ output "security_group_id" {
4569
+ description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
4570
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
4571
+ }
4572
+
3830
4573
  # Integration Outputs
3831
4574
  output "integration_id" {
3832
4575
  description = "ID of the Lambda integration"