@aws/nx-plugin 1.0.0-rc.7 → 1.0.0-rc.71

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 (1358) hide show
  1. package/LICENSE-THIRD-PARTY +7044 -6135
  2. package/README.md +9 -7
  3. package/generators.json +152 -10
  4. package/migrations.json +161 -0
  5. package/package.json +41 -22
  6. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +295 -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/agentcore-harness/__snapshots__/generator.spec.ts.snap +238 -0
  51. package/src/agentcore-harness/files/project/README.md.template +83 -0
  52. package/src/agentcore-harness/files/project/scripts/chat.ts.template +99 -0
  53. package/src/agentcore-harness/files/project/src/PROMPT.md.template +16 -0
  54. package/src/agentcore-harness/generator.d.ts +62 -0
  55. package/src/agentcore-harness/generator.js +158 -0
  56. package/src/agentcore-harness/generator.js.map +1 -0
  57. package/src/agentcore-harness/schema.d.js +8 -0
  58. package/src/agentcore-harness/schema.d.js.map +1 -0
  59. package/src/agentcore-harness/schema.d.ts +17 -0
  60. package/src/agentcore-harness/schema.json +53 -0
  61. package/src/connection/agent-local-dev.d.ts +49 -0
  62. package/src/connection/agent-local-dev.js +84 -0
  63. package/src/connection/agent-local-dev.js.map +1 -0
  64. package/src/connection/agent-runtime-config.js +9 -14
  65. package/src/connection/agent-runtime-config.js.map +1 -1
  66. package/src/connection/gateway-runtime-config.d.ts +19 -0
  67. package/src/connection/gateway-runtime-config.js +47 -0
  68. package/src/connection/gateway-runtime-config.js.map +1 -0
  69. package/src/connection/generator.d.ts +3 -10
  70. package/src/connection/generator.js +172 -194
  71. package/src/connection/generator.js.map +1 -1
  72. package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
  73. package/src/connection/local-dev.js +37 -0
  74. package/src/connection/local-dev.js.map +1 -0
  75. package/src/connection/scaffold-catalog.d.ts +267 -0
  76. package/src/connection/scaffold-catalog.js +347 -0
  77. package/src/connection/scaffold-catalog.js.map +1 -0
  78. package/src/connection/schema-resolver.d.ts +5 -0
  79. package/src/connection/schema-resolver.js +27 -0
  80. package/src/connection/schema-resolver.js.map +1 -0
  81. package/src/connection/schema.d.js +6 -0
  82. package/src/connection/schema.d.js.map +1 -0
  83. package/src/connection/schema.d.ts +1 -0
  84. package/src/connection/schema.json +5 -0
  85. package/src/connection/supported-connections.d.ts +116 -0
  86. package/src/connection/supported-connections.js +163 -0
  87. package/src/connection/supported-connections.js.map +1 -0
  88. package/src/index.js +2 -5
  89. package/src/index.js.map +1 -1
  90. package/src/infra/app/__snapshots__/generator.spec.ts.snap +119 -72
  91. package/src/infra/app/files/app/README.md.template +8 -4
  92. package/src/infra/app/files/app/src/main.ts.template +5 -1
  93. package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
  94. package/src/infra/app/generator.d.ts +43 -0
  95. package/src/infra/app/generator.js +195 -127
  96. package/src/infra/app/generator.js.map +1 -1
  97. package/src/infra/app/schema.d.js +6 -0
  98. package/src/infra/app/schema.d.js.map +1 -0
  99. package/src/infra/app/schema.d.ts +1 -1
  100. package/src/infra/app/schema.json +5 -0
  101. package/src/init/generator.d.ts +31 -0
  102. package/src/init/generator.js +46 -0
  103. package/src/init/generator.js.map +1 -0
  104. package/src/init/schema.d.js +6 -0
  105. package/src/init/schema.d.js.map +1 -0
  106. package/src/init/schema.d.ts +16 -0
  107. package/src/init/schema.json +35 -0
  108. package/src/internal/test-matrix/generator.d.ts +29 -0
  109. package/src/internal/test-matrix/generator.js +698 -0
  110. package/src/internal/test-matrix/generator.js.map +1 -0
  111. package/src/internal/test-matrix/schema.d.js +6 -0
  112. package/src/internal/test-matrix/schema.d.js.map +1 -0
  113. package/src/internal/test-matrix/schema.d.ts +12 -0
  114. package/src/internal/test-matrix/schema.json +21 -0
  115. package/src/license/config-types.js +5 -3
  116. package/src/license/config-types.js.map +1 -1
  117. package/src/license/config.d.ts +1 -1
  118. package/src/license/config.js +267 -242
  119. package/src/license/config.js.map +1 -1
  120. package/src/license/dependency-check/check.js +51 -46
  121. package/src/license/dependency-check/check.js.map +1 -1
  122. package/src/license/dependency-check/collectors/collector.js +41 -71
  123. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  124. package/src/license/dependency-check/collectors/npm-collector.js +34 -41
  125. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
  126. package/src/license/dependency-check/collectors/python-collector.js +55 -62
  127. package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
  128. package/src/license/dependency-check/evaluator.js +40 -68
  129. package/src/license/dependency-check/evaluator.js.map +1 -1
  130. package/src/license/dependency-check/executor.js +30 -22
  131. package/src/license/dependency-check/executor.js.map +1 -1
  132. package/src/license/dependency-check/pre-approved.js +949 -336
  133. package/src/license/dependency-check/pre-approved.js.map +1 -1
  134. package/src/license/dependency-check/types.js +2 -3
  135. package/src/license/dependency-check/types.js.map +1 -1
  136. package/src/license/generator.js +65 -68
  137. package/src/license/generator.js.map +1 -1
  138. package/src/license/index.js +3 -9
  139. package/src/license/index.js.map +1 -1
  140. package/src/license/known-exceptions.d.ts +1 -1
  141. package/src/license/known-exceptions.js +19 -13
  142. package/src/license/known-exceptions.js.map +1 -1
  143. package/src/license/schema.d.js +6 -0
  144. package/src/license/schema.d.js.map +1 -0
  145. package/src/license/schema.d.ts +2 -0
  146. package/src/license/schema.json +5 -0
  147. package/src/license/sync/generator.js +94 -119
  148. package/src/license/sync/generator.js.map +1 -1
  149. package/src/license/sync/project-file-sync.js +28 -35
  150. package/src/license/sync/project-file-sync.js.map +1 -1
  151. package/src/mcp-server/dev-server.d.ts +1 -0
  152. package/src/mcp-server/dev-server.js +18 -0
  153. package/src/mcp-server/dev-server.js.map +1 -0
  154. package/src/mcp-server/generator-info.js +149 -165
  155. package/src/mcp-server/generator-info.js.map +1 -1
  156. package/src/mcp-server/guide-pipeline.js +199 -206
  157. package/src/mcp-server/guide-pipeline.js.map +1 -1
  158. package/src/mcp-server/guide-render.js +10 -25
  159. package/src/mcp-server/guide-render.js.map +1 -1
  160. package/src/mcp-server/index.js +6 -10
  161. package/src/mcp-server/index.js.map +1 -1
  162. package/src/mcp-server/mdx-ast.js +39 -57
  163. package/src/mcp-server/mdx-ast.js.map +1 -1
  164. package/src/mcp-server/option-filter.js +33 -47
  165. package/src/mcp-server/option-filter.js.map +1 -1
  166. package/src/mcp-server/schema-registry.d.ts +9 -3
  167. package/src/mcp-server/schema-registry.js +41 -38
  168. package/src/mcp-server/schema-registry.js.map +1 -1
  169. package/src/mcp-server/schema.d.ts +1 -1
  170. package/src/mcp-server/schema.js +9 -7
  171. package/src/mcp-server/schema.js.map +1 -1
  172. package/src/mcp-server/server.js +24 -24
  173. package/src/mcp-server/server.js.map +1 -1
  174. package/src/mcp-server/tools/add-to-existing-project.d.ts +12 -0
  175. package/src/mcp-server/tools/add-to-existing-project.js +36 -0
  176. package/src/mcp-server/tools/add-to-existing-project.js.map +1 -0
  177. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  178. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  179. package/src/mcp-server/tools/general-guidance.d.ts +1 -1
  180. package/src/mcp-server/tools/general-guidance.js +55 -32
  181. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  182. package/src/mcp-server/tools/generator-guide.js +29 -37
  183. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  184. package/src/mcp-server/tools/list-generators.js +19 -25
  185. package/src/mcp-server/tools/list-generators.js.map +1 -1
  186. package/src/mcp-server/tools/upgrade-workspace.d.ts +11 -0
  187. package/src/mcp-server/tools/upgrade-workspace.js +32 -0
  188. package/src/mcp-server/tools/upgrade-workspace.js.map +1 -0
  189. package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/metadata.json +3 -0
  190. package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
  191. package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.js +329 -0
  192. package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
  193. package/src/migrations/latest/py-agent-a2a-lifespan-construction/metadata.json +3 -0
  194. package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.d.ts +6 -0
  195. package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.js +234 -0
  196. package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.js.map +1 -0
  197. package/src/migrations/latest/smithy-server-package-rename/metadata.json +3 -0
  198. package/src/migrations/latest/smithy-server-package-rename/migration.d.ts +6 -0
  199. package/src/migrations/latest/smithy-server-package-rename/migration.js +123 -0
  200. package/src/migrations/latest/smithy-server-package-rename/migration.js.map +1 -0
  201. package/src/migrations/latest/translate-script-whole-file-writes/files/build-system-prompt.ts.fixture +23 -0
  202. package/src/migrations/latest/translate-script-whole-file-writes/files/build-user-prompt.ts.fixture +96 -0
  203. package/src/migrations/latest/translate-script-whole-file-writes/files/config-path.ts.fixture +1 -0
  204. package/src/migrations/latest/translate-script-whole-file-writes/files/file-to-translate.ts.fixture +10 -0
  205. package/src/migrations/latest/translate-script-whole-file-writes/files/get-files-to-translate.ts.fixture +96 -0
  206. package/src/migrations/latest/translate-script-whole-file-writes/files/header.ts.fixture +15 -0
  207. package/src/migrations/latest/translate-script-whole-file-writes/files/log.ts.fixture +18 -0
  208. package/src/migrations/latest/translate-script-whole-file-writes/files/main-call.ts.fixture +6 -0
  209. package/src/migrations/latest/translate-script-whole-file-writes/files/main.ts.fixture +79 -0
  210. package/src/migrations/latest/translate-script-whole-file-writes/files/project-root.ts.fixture +1 -0
  211. package/src/migrations/latest/translate-script-whole-file-writes/files/run-with-concurrency.ts.fixture +57 -0
  212. package/src/migrations/latest/translate-script-whole-file-writes/files/scripts-dir.ts.fixture +1 -0
  213. package/src/migrations/latest/translate-script-whole-file-writes/files/translate-file-for-language.ts.fixture +61 -0
  214. package/src/migrations/latest/translate-script-whole-file-writes/grit/already-migrated.grit +1 -0
  215. package/src/migrations/latest/translate-script-whole-file-writes/grit/build-system-prompt.grit +6 -0
  216. package/src/migrations/latest/translate-script-whole-file-writes/grit/build-user-prompt.grit +6 -0
  217. package/src/migrations/latest/translate-script-whole-file-writes/grit/config-path.grit +1 -0
  218. package/src/migrations/latest/translate-script-whole-file-writes/grit/file-to-translate.grit +11 -0
  219. package/src/migrations/latest/translate-script-whole-file-writes/grit/get-files-to-translate.grit +7 -0
  220. package/src/migrations/latest/translate-script-whole-file-writes/grit/log.grit +3 -0
  221. package/src/migrations/latest/translate-script-whole-file-writes/grit/main-call.grit +1 -0
  222. package/src/migrations/latest/translate-script-whole-file-writes/grit/main.grit +8 -0
  223. package/src/migrations/latest/translate-script-whole-file-writes/grit/project-root.grit +1 -0
  224. package/src/migrations/latest/translate-script-whole-file-writes/grit/run-with-concurrency.grit +6 -0
  225. package/src/migrations/latest/translate-script-whole-file-writes/grit/translate-file-for-language.grit +6 -0
  226. package/src/migrations/latest/translate-script-whole-file-writes/metadata.json +3 -0
  227. package/src/migrations/latest/translate-script-whole-file-writes/migration.d.ts +2 -0
  228. package/src/migrations/latest/translate-script-whole-file-writes/migration.js +103 -0
  229. package/src/migrations/latest/translate-script-whole-file-writes/migration.js.map +1 -0
  230. package/src/migrations/latest/translate-script-whole-file-writes/test-fixtures/released-script-first.ts.fixture +430 -0
  231. package/src/migrations/latest/translate-script-whole-file-writes/test-fixtures/released-script.ts.fixture +431 -0
  232. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/metadata.json +3 -0
  233. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.d.ts +6 -0
  234. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js +65 -0
  235. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js.map +1 -0
  236. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/metadata.json +3 -0
  237. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.d.ts +6 -0
  238. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js +108 -0
  239. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js.map +1 -0
  240. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
  241. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
  242. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
  243. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
  244. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/metadata.json +3 -0
  245. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
  246. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js +215 -0
  247. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
  248. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
  249. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
  250. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js +93 -0
  251. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  252. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/metadata.json +3 -0
  253. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.d.ts +96 -0
  254. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js +670 -0
  255. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js.map +1 -0
  256. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/metadata.json +3 -0
  257. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  258. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js +89 -0
  259. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  260. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/metadata.json +3 -0
  261. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.d.ts +6 -0
  262. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js +449 -0
  263. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js.map +1 -0
  264. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/metadata.json +3 -0
  265. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.d.ts +6 -0
  266. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js +78 -0
  267. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -0
  268. package/src/{smithy/project/files/build.Dockerfile.template → migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/rc57-service.Dockerfile.fixture} +1 -4
  269. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
  270. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/metadata.json +3 -0
  271. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.d.ts +6 -0
  272. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js +217 -0
  273. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -0
  274. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
  275. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/metadata.json +3 -0
  276. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.d.ts +6 -0
  277. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js +195 -0
  278. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -0
  279. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
  280. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/metadata.json +3 -0
  281. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.d.ts +6 -0
  282. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js +77 -0
  283. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -0
  284. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
  285. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/metadata.json +3 -0
  286. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.d.ts +6 -0
  287. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js +91 -0
  288. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -0
  289. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/metadata.json +3 -0
  290. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.d.ts +6 -0
  291. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js +412 -0
  292. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -0
  293. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/metadata.json +3 -0
  294. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.d.ts +6 -0
  295. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js +33 -0
  296. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -0
  297. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/metadata.json +3 -0
  298. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.d.ts +6 -0
  299. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js +83 -0
  300. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -0
  301. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/legacy-service.Dockerfile.fixture +95 -0
  302. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/metadata.json +3 -0
  303. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.d.ts +6 -0
  304. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js +154 -0
  305. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -0
  306. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/metadata.json +3 -0
  307. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.d.ts +6 -0
  308. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js +71 -0
  309. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -0
  310. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/metadata.json +3 -0
  311. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.d.ts +6 -0
  312. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js +57 -0
  313. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -0
  314. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  315. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  316. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +298 -74
  317. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +748 -103
  318. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +230 -37
  319. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +249 -52
  320. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5535 -0
  321. package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
  322. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +305 -71
  323. package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +298 -0
  324. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +353 -82
  325. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +176 -55
  326. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +100 -24
  327. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  328. package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
  329. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  330. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
  331. package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
  332. package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
  333. package/src/open-api/ts-client/generator.js +41 -26
  334. package/src/open-api/ts-client/generator.js.map +1 -1
  335. package/src/open-api/ts-client/schema.d.js +6 -0
  336. package/src/open-api/ts-client/schema.d.js.map +1 -0
  337. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
  338. package/src/open-api/ts-hooks/generator.js +17 -21
  339. package/src/open-api/ts-hooks/generator.js.map +1 -1
  340. package/src/open-api/ts-hooks/generator.spec.tsx +70 -0
  341. package/src/open-api/ts-hooks/schema.d.js +6 -0
  342. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  343. package/src/open-api/ts-metadata/generator.js +12 -20
  344. package/src/open-api/ts-metadata/generator.js.map +1 -1
  345. package/src/open-api/ts-metadata/schema.d.js +6 -0
  346. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  347. package/src/open-api/utils/codegen-data/languages.d.ts +0 -6
  348. package/src/open-api/utils/codegen-data/languages.js +59 -66
  349. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  350. package/src/open-api/utils/codegen-data/types.d.ts +255 -10
  351. package/src/open-api/utils/codegen-data/types.js +54 -30
  352. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  353. package/src/open-api/utils/codegen-data.d.ts +2 -2
  354. package/src/open-api/utils/codegen-data.js +494 -674
  355. package/src/open-api/utils/codegen-data.js.map +1 -1
  356. package/src/open-api/utils/normalise.js +437 -246
  357. package/src/open-api/utils/normalise.js.map +1 -1
  358. package/src/open-api/utils/parse.js +8 -14
  359. package/src/open-api/utils/parse.js.map +1 -1
  360. package/src/open-api/utils/parser.d.ts +55 -0
  361. package/src/open-api/utils/parser.js +787 -0
  362. package/src/open-api/utils/parser.js.map +1 -0
  363. package/src/open-api/utils/refs.js +12 -22
  364. package/src/open-api/utils/refs.js.map +1 -1
  365. package/src/open-api/utils/types.d.ts +18 -0
  366. package/src/open-api/utils/types.js +5 -2
  367. package/src/open-api/utils/types.js.map +1 -1
  368. package/src/preset/__snapshots__/generator.spec.ts.snap +101 -20
  369. package/src/preset/generator.d.ts +14 -1
  370. package/src/preset/generator.js +76 -151
  371. package/src/preset/generator.js.map +1 -1
  372. package/src/preset/schema.d.js +6 -0
  373. package/src/preset/schema.d.js.map +1 -0
  374. package/src/preset/schema.d.ts +4 -1
  375. package/src/preset/schema.json +16 -5
  376. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +326 -0
  377. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +738 -0
  378. package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.protocols.spec.ts.snap} +191 -315
  379. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +231 -0
  380. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +29 -0
  381. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +29 -0
  382. package/src/py/agent/a2a-connection/generator.d.ts +24 -0
  383. package/src/py/agent/a2a-connection/generator.js +145 -88
  384. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  385. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  386. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  387. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  388. package/src/py/agent/a2a-connection/schema.json +5 -0
  389. package/src/py/agent/files/deploy/Dockerfile.template +8 -1
  390. package/src/py/agent/files/langchain/a2a/main.py.template +94 -0
  391. package/src/py/agent/files/langchain/ag-ui/main.py.template +87 -0
  392. package/src/py/agent/files/langchain/common/agent.py.template +30 -0
  393. package/src/py/agent/files/{http → langchain/http}/init.py.template +17 -25
  394. package/src/py/agent/files/langchain/http/main.py.template +81 -0
  395. package/src/py/agent/files/{a2a → strands/a2a}/main.py.template +33 -15
  396. package/src/py/agent/files/strands/ag-ui/main.py.template +89 -0
  397. package/src/py/agent/files/{common → strands/common}/agent.py.template +2 -0
  398. package/src/py/agent/files/strands/http/init.py.template +97 -0
  399. package/src/py/agent/files/{http → strands/http}/main.py.template +4 -13
  400. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  401. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  402. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  403. package/src/py/agent/gateway-connection/generator.d.ts +33 -0
  404. package/src/py/agent/gateway-connection/generator.js +153 -0
  405. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  406. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  407. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  408. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  409. package/src/py/agent/gateway-connection/schema.json +31 -0
  410. package/src/py/agent/generator.d.ts +154 -1
  411. package/src/py/agent/generator.js +396 -197
  412. package/src/py/agent/generator.js.map +1 -1
  413. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +154 -89
  414. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +31 -0
  415. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +31 -0
  416. package/src/py/agent/mcp-connection/generator.d.ts +23 -0
  417. package/src/py/agent/mcp-connection/generator.js +103 -130
  418. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  419. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  420. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  421. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  422. package/src/py/agent/mcp-connection/schema.json +5 -0
  423. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +17 -19
  424. package/src/py/agent/react-connection/generator.d.ts +150 -1
  425. package/src/py/agent/react-connection/generator.js +105 -65
  426. package/src/py/agent/react-connection/generator.js.map +1 -1
  427. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +4 -4
  428. package/src/py/agent/react-connection/local-dev.js +36 -0
  429. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  430. package/src/py/agent/react-connection/schema.d.js +8 -0
  431. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  432. package/src/py/agent/react-connection/schema.d.ts +1 -0
  433. package/src/py/agent/react-connection/schema.json +5 -0
  434. package/src/py/agent/schema.d.js +6 -0
  435. package/src/py/agent/schema.d.js.map +1 -0
  436. package/src/py/agent/schema.d.ts +5 -1
  437. package/src/py/agent/schema.json +15 -1
  438. package/src/py/api/generator.js +12 -11
  439. package/src/py/api/generator.js.map +1 -1
  440. package/src/py/api/schema.d.js +6 -0
  441. package/src/py/api/schema.d.js.map +1 -0
  442. package/src/py/api/schema.d.ts +1 -0
  443. package/src/py/api/schema.json +5 -0
  444. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1520 -0
  445. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +63 -0
  446. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  447. package/src/py/dynamodb/agent-connection/generator.js +45 -0
  448. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  449. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  450. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  451. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  452. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  453. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +32 -0
  454. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  455. package/src/py/dynamodb/fast-api-connection/generator.js +39 -0
  456. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  457. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  458. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  459. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  460. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  461. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  462. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  463. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  464. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  465. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  466. package/src/py/dynamodb/files/config.json.template +24 -0
  467. package/src/py/dynamodb/generator.d.ts +39 -0
  468. package/src/py/dynamodb/generator.js +130 -0
  469. package/src/py/dynamodb/generator.js.map +1 -0
  470. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +63 -0
  471. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  472. package/src/py/dynamodb/mcp-server-connection/generator.js +45 -0
  473. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  474. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  475. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  476. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  477. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  478. package/src/py/dynamodb/schema.d.js +6 -0
  479. package/src/py/dynamodb/schema.d.js.map +1 -0
  480. package/src/py/dynamodb/schema.d.ts +16 -0
  481. package/src/py/dynamodb/schema.json +76 -0
  482. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +240 -4693
  483. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +5409 -0
  484. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  485. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  486. package/src/py/fast-api/generator.d.ts +72 -0
  487. package/src/py/fast-api/generator.js +134 -95
  488. package/src/py/fast-api/generator.js.map +1 -1
  489. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  490. package/src/py/fast-api/react/generator.d.ts +16 -1
  491. package/src/py/fast-api/react/generator.js +38 -26
  492. package/src/py/fast-api/react/generator.js.map +1 -1
  493. package/src/py/fast-api/react/open-api.js +31 -29
  494. package/src/py/fast-api/react/open-api.js.map +1 -1
  495. package/src/py/fast-api/react/schema.d.js +6 -0
  496. package/src/py/fast-api/react/schema.d.js.map +1 -0
  497. package/src/py/fast-api/react/schema.d.ts +1 -0
  498. package/src/py/fast-api/react/schema.json +5 -0
  499. package/src/py/fast-api/schema.d.js +6 -0
  500. package/src/py/fast-api/schema.d.js.map +1 -0
  501. package/src/py/fast-api/schema.d.ts +1 -0
  502. package/src/py/fast-api/schema.json +6 -0
  503. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  504. package/src/py/lambda-function/generator.d.ts +21 -0
  505. package/src/py/lambda-function/generator.js +82 -62
  506. package/src/py/lambda-function/generator.js.map +1 -1
  507. package/src/py/lambda-function/schema.d.js +6 -0
  508. package/src/py/lambda-function/schema.d.js.map +1 -0
  509. package/src/py/lambda-function/schema.d.ts +1 -0
  510. package/src/py/lambda-function/schema.json +5 -0
  511. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +221 -21
  512. package/src/py/mcp-server/files/deploy/Dockerfile.template +8 -1
  513. package/src/py/mcp-server/generator.d.ts +68 -0
  514. package/src/py/mcp-server/generator.js +204 -131
  515. package/src/py/mcp-server/generator.js.map +1 -1
  516. package/src/py/mcp-server/schema.d.js +6 -0
  517. package/src/py/mcp-server/schema.d.js.map +1 -0
  518. package/src/py/mcp-server/schema.d.ts +1 -0
  519. package/src/py/mcp-server/schema.json +6 -0
  520. package/src/py/project/generator.d.ts +27 -1
  521. package/src/py/project/generator.js +248 -130
  522. package/src/py/project/generator.js.map +1 -1
  523. package/src/py/project/schema.d.js +6 -0
  524. package/src/py/project/schema.d.js.map +1 -0
  525. package/src/py/project/schema.d.ts +1 -0
  526. package/src/py/project/schema.json +5 -0
  527. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2070 -0
  528. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +123 -0
  529. package/src/py/rdb/agent-connection/generator.d.ts +10 -0
  530. package/src/py/rdb/agent-connection/generator.js +52 -0
  531. package/src/py/rdb/agent-connection/generator.js.map +1 -0
  532. package/src/py/rdb/agent-connection/schema.d.js +8 -0
  533. package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
  534. package/src/py/rdb/agent-connection/schema.d.ts +15 -0
  535. package/src/py/rdb/agent-connection/schema.json +27 -0
  536. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +51 -0
  537. package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
  538. package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
  539. package/src/py/rdb/fast-api-connection/generator.js +56 -0
  540. package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
  541. package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
  542. package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
  543. package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
  544. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  545. package/src/py/rdb/files/Dockerfile.create-db-user.template +14 -0
  546. package/src/py/rdb/files/Dockerfile.migration.template +14 -0
  547. package/src/py/rdb/files/__name__/__init__.py.template +3 -0
  548. package/src/py/rdb/files/__name__/connection.py.template +55 -0
  549. package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
  550. package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
  551. package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
  552. package/src/py/rdb/files/__name__/models/example.py.template +8 -0
  553. package/src/py/rdb/files/__name__/utils.py.template +104 -0
  554. package/src/py/rdb/files/alembic.ini.template +38 -0
  555. package/src/py/rdb/files/config.json.template +14 -0
  556. package/src/py/rdb/files/migrations/env.py.template +80 -0
  557. package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
  558. package/src/py/rdb/generator.d.ts +103 -0
  559. package/src/py/rdb/generator.js +328 -0
  560. package/src/py/rdb/generator.js.map +1 -0
  561. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +119 -0
  562. package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
  563. package/src/py/rdb/mcp-server-connection/generator.js +52 -0
  564. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
  565. package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
  566. package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
  567. package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
  568. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  569. package/src/py/rdb/schema.d.js +6 -0
  570. package/src/py/rdb/schema.d.js.map +1 -0
  571. package/src/py/rdb/schema.d.ts +16 -0
  572. package/src/py/rdb/schema.json +78 -0
  573. package/src/py/rdb/utils.d.ts +6 -0
  574. package/src/py/rdb/utils.js +16 -0
  575. package/src/py/rdb/utils.js.map +1 -0
  576. package/src/sdk/agentcore-gateway.d.ts +6 -0
  577. package/src/sdk/agentcore-gateway.js +7 -0
  578. package/src/sdk/agentcore-gateway.js.map +1 -0
  579. package/src/sdk/connection.d.ts +6 -0
  580. package/src/sdk/connection.js +6 -0
  581. package/src/sdk/connection.js.map +1 -0
  582. package/src/sdk/license.d.ts +8 -0
  583. package/src/sdk/license.js +7 -0
  584. package/src/sdk/license.js.map +1 -0
  585. package/src/sdk/open-api.d.ts +10 -0
  586. package/src/sdk/open-api.js +8 -0
  587. package/src/sdk/open-api.js.map +1 -0
  588. package/src/sdk/py.d.ts +18 -0
  589. package/src/sdk/py.js +12 -0
  590. package/src/sdk/py.js.map +1 -0
  591. package/src/sdk/terraform.d.ts +6 -0
  592. package/src/sdk/terraform.js +7 -0
  593. package/src/sdk/terraform.js.map +1 -0
  594. package/src/sdk/ts.d.ts +39 -0
  595. package/src/sdk/ts.js +41 -0
  596. package/src/sdk/ts.js.map +1 -0
  597. package/{sdk/utils/format.d.ts → src/sdk/utils/ast.d.ts} +1 -1
  598. package/src/sdk/utils/ast.js +6 -0
  599. package/src/sdk/utils/ast.js.map +1 -0
  600. package/{sdk/utils/ast.d.ts → src/sdk/utils/format.d.ts} +1 -2
  601. package/src/sdk/utils/format.js +6 -0
  602. package/src/sdk/utils/format.js.map +1 -0
  603. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  604. package/src/sdk/utils/test.js +6 -0
  605. package/src/sdk/utils/test.js.map +1 -0
  606. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +245 -242
  607. package/src/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +5 -5
  608. package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
  609. package/src/smithy/project/files/shapes/smithy-build.json.template +7 -0
  610. package/src/smithy/project/files/shapes/src/main.smithy.template +11 -0
  611. package/src/smithy/project/files/ssdk-bundle/ssdk.rolldown.config.mjs.template +52 -0
  612. package/src/smithy/project/generator.d.ts +90 -0
  613. package/src/smithy/project/generator.js +223 -56
  614. package/src/smithy/project/generator.js.map +1 -1
  615. package/src/smithy/project/schema.d.js +6 -0
  616. package/src/smithy/project/schema.d.js.map +1 -0
  617. package/src/smithy/project/schema.d.ts +2 -0
  618. package/src/smithy/project/schema.json +28 -1
  619. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  620. package/src/smithy/react-connection/generator.d.ts +15 -0
  621. package/src/smithy/react-connection/generator.js +54 -48
  622. package/src/smithy/react-connection/generator.js.map +1 -1
  623. package/src/smithy/react-connection/schema.d.js +6 -0
  624. package/src/smithy/react-connection/schema.d.js.map +1 -0
  625. package/src/smithy/react-connection/schema.d.ts +1 -0
  626. package/src/smithy/react-connection/schema.json +5 -0
  627. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +871 -109
  628. package/src/smithy/ts/api/files/handler.ts.template +3 -3
  629. package/src/smithy/ts/api/files/local-server.ts.template +3 -3
  630. package/src/smithy/ts/api/files/operations/echo.ts.template +2 -2
  631. package/src/smithy/ts/api/files/service.ts.template +3 -3
  632. package/src/smithy/ts/api/generator.d.ts +88 -0
  633. package/src/smithy/ts/api/generator.js +187 -114
  634. package/src/smithy/ts/api/generator.js.map +1 -1
  635. package/src/smithy/ts/api/schema.d.js +6 -0
  636. package/src/smithy/ts/api/schema.d.js.map +1 -0
  637. package/src/smithy/ts/api/schema.d.ts +1 -0
  638. package/src/smithy/ts/api/schema.json +6 -0
  639. package/src/terraform/project/files/application/scripts/bootstrap.ts.template +40 -1
  640. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  641. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  642. package/src/terraform/project/generator.d.ts +50 -0
  643. package/src/terraform/project/generator.js +212 -111
  644. package/src/terraform/project/generator.js.map +1 -1
  645. package/src/terraform/project/schema.d.js +9 -0
  646. package/src/terraform/project/schema.d.js.map +1 -0
  647. package/src/terraform/project/schema.d.ts +1 -0
  648. package/src/terraform/project/schema.json +5 -0
  649. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +1182 -184
  650. package/src/trpc/backend/files/src/client/index.ts.template +1 -1
  651. package/src/trpc/backend/files/src/handler.ts.template +1 -1
  652. package/src/trpc/backend/files/src/index.ts.template +5 -5
  653. package/src/trpc/backend/files/src/init.ts.template +1 -1
  654. package/src/trpc/backend/files/src/local-server.ts.template +1 -1
  655. package/src/trpc/backend/files/src/middleware/index.ts.template +7 -7
  656. package/src/trpc/backend/files/src/procedures/echo.ts.template +3 -3
  657. package/src/trpc/backend/files/src/router.ts.template +2 -2
  658. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  659. package/src/trpc/backend/files/src/schema/index.ts.template +1 -1
  660. package/src/trpc/backend/generator.d.ts +90 -1
  661. package/src/trpc/backend/generator.js +177 -100
  662. package/src/trpc/backend/generator.js.map +1 -1
  663. package/src/trpc/backend/schema.d.js +6 -0
  664. package/src/trpc/backend/schema.d.js.map +1 -0
  665. package/src/trpc/backend/schema.d.ts +1 -0
  666. package/src/trpc/backend/schema.json +6 -0
  667. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  668. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  669. package/src/trpc/react/generator.d.ts +38 -1
  670. package/src/trpc/react/generator.js +105 -63
  671. package/src/trpc/react/generator.js.map +1 -1
  672. package/src/trpc/react/schema.d.js +6 -0
  673. package/src/trpc/react/schema.d.js.map +1 -0
  674. package/src/trpc/react/schema.d.ts +1 -0
  675. package/src/trpc/react/schema.json +5 -0
  676. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1452 -25
  677. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +258 -0
  678. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  679. package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
  680. package/src/ts/agent/a2a-connection/generator.js +110 -63
  681. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  682. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  683. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  684. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  685. package/src/ts/agent/a2a-connection/schema.json +5 -0
  686. package/src/ts/agent/files/a2a/index.ts.template +1 -1
  687. package/src/ts/agent/files/ag-ui/index.ts.template +36 -11
  688. package/src/ts/agent/files/common/agent.ts.template +15 -2
  689. package/src/ts/agent/files/common/session.ts.template +43 -0
  690. package/src/ts/agent/files/deploy/Dockerfile.template +13 -2
  691. package/src/ts/agent/files/http/client.ts.template +2 -2
  692. package/src/ts/agent/files/http/index.ts.template +2 -2
  693. package/src/ts/agent/files/http/router.ts.template +5 -5
  694. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +222 -0
  695. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  696. package/src/ts/agent/gateway-connection/generator.d.ts +47 -0
  697. package/src/ts/agent/gateway-connection/generator.js +144 -0
  698. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  699. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  700. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  701. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  702. package/src/ts/agent/gateway-connection/schema.json +31 -0
  703. package/src/ts/agent/generator.d.ts +205 -0
  704. package/src/ts/agent/generator.js +339 -156
  705. package/src/ts/agent/generator.js.map +1 -1
  706. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +194 -113
  707. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +23 -0
  708. package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
  709. package/src/ts/agent/mcp-connection/generator.js +88 -65
  710. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  711. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  712. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  713. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  714. package/src/ts/agent/mcp-connection/schema.json +5 -0
  715. package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
  716. package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
  717. package/src/ts/agent/react-connection/generator.d.ts +202 -1
  718. package/src/ts/agent/react-connection/generator.js +158 -99
  719. package/src/ts/agent/react-connection/generator.js.map +1 -1
  720. package/src/ts/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +2 -2
  721. package/src/ts/agent/react-connection/local-dev.js +17 -0
  722. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  723. package/src/ts/agent/react-connection/schema.d.js +8 -0
  724. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  725. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  726. package/src/ts/agent/react-connection/schema.json +5 -0
  727. package/src/ts/agent/schema.d.js +6 -0
  728. package/src/ts/agent/schema.d.js.map +1 -0
  729. package/src/ts/agent/schema.d.ts +4 -0
  730. package/src/ts/agent/schema.json +14 -0
  731. package/src/ts/api/generator.js +16 -16
  732. package/src/ts/api/generator.js.map +1 -1
  733. package/src/ts/api/schema.d.js +6 -0
  734. package/src/ts/api/schema.d.js.map +1 -0
  735. package/src/ts/api/schema.d.ts +1 -0
  736. package/src/ts/api/schema.json +5 -0
  737. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +28 -14
  738. package/src/ts/astro-docs/files/base/src/content/docs/en/index.mdx.template +2 -2
  739. package/src/ts/astro-docs/files/base/src/content.config.ts.template +4 -4
  740. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +272 -150
  741. package/src/ts/astro-docs/generator.d.ts +38 -0
  742. package/src/ts/astro-docs/generator.js +126 -61
  743. package/src/ts/astro-docs/generator.js.map +1 -1
  744. package/src/ts/astro-docs/schema.d.js +6 -0
  745. package/src/ts/astro-docs/schema.d.js.map +1 -0
  746. package/src/ts/astro-docs/schema.d.ts +2 -2
  747. package/src/ts/astro-docs/schema.json +3 -3
  748. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +982 -0
  749. package/src/ts/dcr-proxy/generator.d.ts +34 -0
  750. package/src/ts/dcr-proxy/generator.js +115 -0
  751. package/src/ts/dcr-proxy/generator.js.map +1 -0
  752. package/src/ts/dcr-proxy/schema.d.js +6 -0
  753. package/src/ts/dcr-proxy/schema.d.js.map +1 -0
  754. package/src/ts/dcr-proxy/schema.d.ts +13 -0
  755. package/src/ts/dcr-proxy/schema.json +44 -0
  756. package/src/ts/docs/generator.js +10 -10
  757. package/src/ts/docs/generator.js.map +1 -1
  758. package/src/ts/docs/schema.d.js +6 -0
  759. package/src/ts/docs/schema.d.js.map +1 -0
  760. package/src/ts/docs/schema.d.ts +1 -4
  761. package/src/ts/docs/schema.json +3 -3
  762. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +400 -518
  763. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
  764. package/src/ts/dynamodb/agent-connection/generator.js +27 -23
  765. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  766. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  767. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  768. package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
  769. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  770. package/src/ts/dynamodb/files/config.json.template +24 -0
  771. package/src/ts/dynamodb/files/src/client.ts.template +30 -11
  772. package/src/ts/dynamodb/files/src/entities/example.ts.template +1 -1
  773. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -1
  774. package/src/ts/dynamodb/files/src/index.ts.template +2 -11
  775. package/src/ts/dynamodb/generator.d.ts +41 -0
  776. package/src/ts/dynamodb/generator.js +106 -64
  777. package/src/ts/dynamodb/generator.js.map +1 -1
  778. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +23 -5
  779. package/src/ts/dynamodb/mcp-server-connection/generator.js +27 -23
  780. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  781. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  782. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  783. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  784. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  785. package/src/ts/dynamodb/schema.d.js +6 -0
  786. package/src/ts/dynamodb/schema.d.js.map +1 -0
  787. package/src/ts/dynamodb/schema.d.ts +2 -0
  788. package/src/ts/dynamodb/schema.json +26 -2
  789. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
  790. package/src/ts/dynamodb/smithy-connection/generator.js +22 -22
  791. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  792. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  793. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  794. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  795. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  796. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  797. package/src/ts/dynamodb/trpc-connection/generator.js +22 -22
  798. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  799. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  800. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  801. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  802. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  803. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -6
  804. package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
  805. package/src/ts/lambda-function/generator.d.ts +38 -0
  806. package/src/ts/lambda-function/generator.js +98 -65
  807. package/src/ts/lambda-function/generator.js.map +1 -1
  808. package/src/ts/lambda-function/io.js +83 -52
  809. package/src/ts/lambda-function/io.js.map +1 -1
  810. package/src/ts/lambda-function/schema.d.js +6 -0
  811. package/src/ts/lambda-function/schema.d.js.map +1 -0
  812. package/src/ts/lambda-function/schema.d.ts +1 -0
  813. package/src/ts/lambda-function/schema.json +5 -0
  814. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -45
  815. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +1 -1
  816. package/src/ts/lib/biome.js +71 -35
  817. package/src/ts/lib/biome.js.map +1 -1
  818. package/src/ts/lib/generator.d.ts +7 -0
  819. package/src/ts/lib/generator.js +115 -103
  820. package/src/ts/lib/generator.js.map +1 -1
  821. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  822. package/src/ts/lib/schema.d.js +6 -0
  823. package/src/ts/lib/schema.d.js.map +1 -0
  824. package/src/ts/lib/schema.d.ts +1 -1
  825. package/src/ts/lib/schema.json +5 -0
  826. package/src/ts/lib/ts-project-utils.d.ts +13 -1
  827. package/src/ts/lib/ts-project-utils.js +96 -71
  828. package/src/ts/lib/ts-project-utils.js.map +1 -1
  829. package/src/ts/lib/types.d.ts +6 -0
  830. package/src/ts/lib/types.js +5 -2
  831. package/src/ts/lib/types.js.map +1 -1
  832. package/src/ts/lib/vitest.d.ts +10 -1
  833. package/src/ts/lib/vitest.js +54 -26
  834. package/src/ts/lib/vitest.js.map +1 -1
  835. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +221 -44
  836. package/src/ts/mcp-server/files/Dockerfile.template +13 -2
  837. package/src/ts/mcp-server/generator.d.ts +110 -0
  838. package/src/ts/mcp-server/generator.js +231 -148
  839. package/src/ts/mcp-server/generator.js.map +1 -1
  840. package/src/ts/mcp-server/schema.d.js +6 -0
  841. package/src/ts/mcp-server/schema.d.js.map +1 -0
  842. package/src/ts/mcp-server/schema.d.ts +1 -0
  843. package/src/ts/mcp-server/schema.json +6 -0
  844. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +28 -13
  845. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  846. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  847. package/src/ts/nx-generator/files/local/generator.spec.ts.template +1 -1
  848. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  849. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  850. package/src/ts/nx-generator/generator.d.ts +3 -0
  851. package/src/ts/nx-generator/generator.js +124 -73
  852. package/src/ts/nx-generator/generator.js.map +1 -1
  853. package/src/ts/nx-generator/schema.d.js +6 -0
  854. package/src/ts/nx-generator/schema.d.js.map +1 -0
  855. package/src/ts/nx-generator/schema.d.ts +1 -0
  856. package/src/ts/nx-generator/schema.json +5 -0
  857. package/src/ts/nx-migration/files/migration.spec.ts.template +26 -0
  858. package/src/ts/nx-migration/files/migration.ts.template +65 -0
  859. package/src/ts/nx-migration/files/prompt.md.template +46 -0
  860. package/src/ts/nx-migration/generator.d.ts +27 -0
  861. package/src/ts/nx-migration/generator.js +147 -0
  862. package/src/ts/nx-migration/generator.js.map +1 -0
  863. package/src/ts/nx-migration/schema.d.js +6 -0
  864. package/src/ts/nx-migration/schema.d.js.map +1 -0
  865. package/src/ts/nx-migration/schema.d.ts +13 -0
  866. package/src/ts/nx-migration/schema.json +63 -0
  867. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +36 -25
  868. package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
  869. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  870. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  871. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  872. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  873. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  874. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +4 -4
  875. package/src/ts/nx-plugin/generator.d.ts +3 -0
  876. package/src/ts/nx-plugin/generator.js +67 -50
  877. package/src/ts/nx-plugin/generator.js.map +1 -1
  878. package/src/ts/nx-plugin/schema.d.js +9 -0
  879. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  880. package/src/ts/nx-plugin/schema.json +5 -0
  881. package/src/ts/nx-plugin/utils.d.ts +27 -2
  882. package/src/ts/nx-plugin/utils.js +66 -51
  883. package/src/ts/nx-plugin/utils.js.map +1 -1
  884. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +553 -644
  885. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
  886. package/src/ts/rdb/agent-connection/generator.js +44 -39
  887. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  888. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  889. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  890. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  891. package/src/ts/rdb/agent-connection/schema.json +5 -0
  892. package/src/ts/rdb/files/Dockerfile.template +19 -1
  893. package/src/ts/rdb/files/config.json.template +14 -0
  894. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  895. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +9 -11
  896. package/src/ts/rdb/files/src/index.ts.template +1 -2
  897. package/src/ts/rdb/files/src/migration-handler.ts.template +5 -30
  898. package/src/ts/rdb/files/src/prisma.ts.template +33 -25
  899. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  900. package/src/ts/rdb/generator.d.ts +117 -4
  901. package/src/ts/rdb/generator.js +257 -138
  902. package/src/ts/rdb/generator.js.map +1 -1
  903. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +16 -6
  904. package/src/ts/rdb/mcp-server-connection/generator.js +42 -37
  905. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  906. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  907. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  908. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  909. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  910. package/src/ts/rdb/schema.d.js +6 -0
  911. package/src/ts/rdb/schema.d.js.map +1 -0
  912. package/src/ts/rdb/schema.d.ts +1 -0
  913. package/src/ts/rdb/schema.json +7 -1
  914. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +18 -9
  915. package/src/ts/rdb/smithy-connection/generator.js +48 -43
  916. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  917. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  918. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  919. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  920. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  921. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  922. package/src/ts/rdb/trpc-connection/generator.js +37 -31
  923. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  924. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  925. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  926. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  927. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  928. package/src/ts/rdb/utils.js +9 -11
  929. package/src/ts/rdb/utils.js.map +1 -1
  930. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +17 -16
  931. package/src/ts/react-website/agui/generator.d.ts +97 -0
  932. package/src/ts/react-website/agui/generator.js +114 -67
  933. package/src/ts/react-website/agui/generator.js.map +1 -1
  934. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +1391 -644
  935. package/src/ts/react-website/app/files/app/common/README.md.template +1 -1
  936. package/src/ts/react-website/app/generator.d.ts +142 -2
  937. package/src/ts/react-website/app/generator.js +333 -209
  938. package/src/ts/react-website/app/generator.js.map +1 -1
  939. package/src/ts/react-website/app/schema.d.js +6 -0
  940. package/src/ts/react-website/app/schema.d.js.map +1 -0
  941. package/src/ts/react-website/app/schema.d.ts +1 -1
  942. package/src/ts/react-website/app/schema.json +12 -6
  943. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +161 -26
  944. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +48 -12
  945. package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
  946. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  947. package/src/ts/react-website/cognito-auth/generator.d.ts +25 -1
  948. package/src/ts/react-website/cognito-auth/generator.js +79 -64
  949. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  950. package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +3 -1
  951. package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
  952. package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
  953. package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
  954. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  955. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  956. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  957. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  958. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  959. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  960. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  961. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  962. package/src/ts/react-website/runtime-config/generator.js +29 -31
  963. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  964. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  965. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  966. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  967. package/src/ts/react-website/runtime-config/schema.json +5 -0
  968. package/src/ts/sync/generator.js +137 -60
  969. package/src/ts/sync/generator.js.map +1 -1
  970. package/src/ts/website/app/generator.js +10 -10
  971. package/src/ts/website/app/generator.js.map +1 -1
  972. package/src/ts/website/app/schema.d.js +6 -0
  973. package/src/ts/website/app/schema.d.js.map +1 -0
  974. package/src/ts/website/app/schema.d.ts +1 -1
  975. package/src/ts/website/app/schema.json +11 -6
  976. package/src/ts/website/auth/generator.d.ts +1 -1
  977. package/src/ts/website/auth/generator.js +11 -10
  978. package/src/ts/website/auth/generator.js.map +1 -1
  979. package/src/ts/website/auth/schema.d.js +6 -0
  980. package/src/ts/website/auth/schema.d.js.map +1 -0
  981. package/src/ts/website/auth/schema.d.ts +1 -0
  982. package/src/ts/website/auth/schema.json +5 -0
  983. package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +21 -0
  984. package/src/utils/add-dependencies.d.ts +38 -0
  985. package/src/utils/add-dependencies.js +83 -0
  986. package/src/utils/add-dependencies.js.map +1 -0
  987. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  988. package/src/utils/agent-chat/agent-chat.js +31 -0
  989. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  990. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  991. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  992. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  993. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  994. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  995. package/src/utils/agent-connection/agent-connection.d.ts +139 -26
  996. package/src/utils/agent-connection/agent-connection.js +500 -103
  997. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  998. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  999. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  1000. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  1001. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  1002. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  1003. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +33 -33
  1004. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  1005. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  1006. package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +47 -0
  1007. package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +29 -0
  1008. 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
  1009. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  1010. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  1011. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  1012. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  1013. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  1014. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  1015. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +105 -0
  1016. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  1017. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  1018. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  1019. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +6 -18
  1020. package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +2 -2
  1021. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  1022. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +111 -0
  1023. package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
  1024. 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} +2 -2
  1025. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  1026. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  1027. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +79 -0
  1028. package/src/utils/agent-core-constructs/agent-core-constructs.js +212 -38
  1029. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  1030. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +170 -6
  1031. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +87 -0
  1032. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +366 -0
  1033. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +624 -0
  1034. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  1035. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +212 -1
  1036. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +521 -0
  1037. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  1038. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +282 -0
  1039. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +159 -13
  1040. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  1041. package/src/utils/api-constructs/api-constructs.d.ts +30 -2
  1042. package/src/utils/api-constructs/api-constructs.js +82 -32
  1043. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  1044. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +20 -15
  1045. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +24 -16
  1046. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +26 -9
  1047. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +70 -0
  1048. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  1049. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +56 -17
  1050. package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
  1051. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  1052. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +101 -12
  1053. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +194 -8
  1054. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  1055. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  1056. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  1057. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  1058. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  1059. package/src/utils/ast/website.js +18 -20
  1060. package/src/utils/ast/website.js.map +1 -1
  1061. package/src/utils/ast.d.ts +9 -0
  1062. package/src/utils/ast.js +125 -86
  1063. package/src/utils/ast.js.map +1 -1
  1064. package/src/utils/base-tsconfig.d.ts +30 -0
  1065. package/src/utils/base-tsconfig.js +32 -0
  1066. package/src/utils/base-tsconfig.js.map +1 -0
  1067. package/src/utils/bundle/bundle.d.ts +6 -1
  1068. package/src/utils/bundle/bundle.js +58 -48
  1069. package/src/utils/bundle/bundle.js.map +1 -1
  1070. package/src/utils/commands.d.ts +14 -3
  1071. package/src/utils/commands.js +83 -28
  1072. package/src/utils/commands.js.map +1 -1
  1073. package/src/utils/config/index.d.ts +18 -2
  1074. package/src/utils/config/index.js +5 -4
  1075. package/src/utils/config/index.js.map +1 -1
  1076. package/src/utils/config/utils.d.ts +8 -2
  1077. package/src/utils/config/utils.js +56 -59
  1078. package/src/utils/config/utils.js.map +1 -1
  1079. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +16 -3
  1080. package/src/utils/connection/open-api/react.d.ts +31 -5
  1081. package/src/utils/connection/open-api/react.js +106 -76
  1082. package/src/utils/connection/open-api/react.js.map +1 -1
  1083. package/src/utils/containers.js +22 -23
  1084. package/src/utils/containers.js.map +1 -1
  1085. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +38 -0
  1086. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +93 -0
  1087. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -0
  1088. package/src/utils/dcr-proxy-constructs/files/cdk/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.ts.template +227 -0
  1089. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorization-server-metadata.ts.template +39 -0
  1090. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorize.ts.template +26 -0
  1091. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/mcp-proxy.ts.template +89 -0
  1092. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/protected-resource-metadata.ts.template +13 -0
  1093. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/register.ts.template +70 -0
  1094. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/token.ts.template +75 -0
  1095. package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +410 -0
  1096. package/src/utils/declared-dependencies.d.ts +140 -0
  1097. package/src/utils/declared-dependencies.js +64 -0
  1098. package/src/utils/declared-dependencies.js.map +1 -0
  1099. package/src/utils/dependencies.d.ts +18 -0
  1100. package/src/utils/dependencies.js +206 -0
  1101. package/src/utils/dependencies.js.map +1 -0
  1102. package/src/utils/docker.d.ts +89 -0
  1103. package/src/utils/docker.js +125 -0
  1104. package/src/utils/docker.js.map +1 -0
  1105. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +1 -1
  1106. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +39 -41
  1107. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  1108. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +18 -5
  1109. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +1 -1
  1110. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +24 -17
  1111. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
  1112. package/src/utils/files/common/constructs/src/core/cloudfront.ts.template +14 -0
  1113. package/src/utils/files/common/constructs/src/core/index.ts.template +5 -4
  1114. package/src/utils/files/common/constructs/src/index.ts.template +2 -2
  1115. package/src/utils/files/common/infra-config/src/index.ts.template +3 -3
  1116. package/src/utils/files/common/infra-config/src/resolve-stage.ts.template +2 -2
  1117. package/src/utils/files/common/infra-config/src/stages.config.ts.template +1 -1
  1118. package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/create-local-table.ts.template +65 -31
  1119. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  1120. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +103 -0
  1121. package/src/utils/files/common/scripts/src/infra/infra-deploy.ts.template +2 -0
  1122. package/src/utils/files/common/scripts/src/infra/infra-destroy.ts.template +2 -0
  1123. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
  1124. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +3 -3
  1125. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  1126. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  1127. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  1128. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +115 -0
  1129. package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
  1130. package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
  1131. package/src/utils/files/shadcn/components.json.template +1 -1
  1132. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +63 -72
  1133. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  1134. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
  1135. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  1136. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  1137. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  1138. package/src/utils/format.d.ts +39 -4
  1139. package/src/utils/format.js +318 -198
  1140. package/src/utils/format.js.map +1 -1
  1141. package/src/utils/fs.d.ts +24 -5
  1142. package/src/utils/fs.js +40 -15
  1143. package/src/utils/fs.js.map +1 -1
  1144. package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
  1145. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  1146. package/src/utils/function-constructs/function-constructs.js +22 -25
  1147. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  1148. package/src/utils/generators.js +18 -20
  1149. package/src/utils/generators.js.map +1 -1
  1150. package/src/utils/git.js +19 -34
  1151. package/src/utils/git.js.map +1 -1
  1152. package/src/utils/iac-providers.js +5 -5
  1153. package/src/utils/iac-providers.js.map +1 -1
  1154. package/src/utils/iac.js +12 -14
  1155. package/src/utils/iac.js.map +1 -1
  1156. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +153 -24
  1157. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
  1158. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +129 -12
  1159. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
  1160. package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
  1161. package/src/utils/identity-constructs/identity-constructs.js +52 -31
  1162. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  1163. package/src/utils/init.d.ts +72 -0
  1164. package/src/utils/init.js +300 -0
  1165. package/src/utils/init.js.map +1 -0
  1166. package/src/utils/install.d.ts +32 -0
  1167. package/src/utils/install.js +58 -0
  1168. package/src/utils/install.js.map +1 -0
  1169. package/src/utils/js.js +27 -20
  1170. package/src/utils/js.js.map +1 -1
  1171. package/src/utils/mcp.d.ts +9 -0
  1172. package/src/utils/mcp.js +42 -41
  1173. package/src/utils/mcp.js.map +1 -1
  1174. package/src/utils/metrics.d.ts +7 -1
  1175. package/src/utils/metrics.js +61 -46
  1176. package/src/utils/metrics.js.map +1 -1
  1177. package/src/utils/migration-manifest.d.ts +58 -0
  1178. package/src/utils/migration-manifest.js +76 -0
  1179. package/src/utils/migration-manifest.js.map +1 -0
  1180. package/src/utils/migration-versions.d.ts +145 -0
  1181. package/src/utils/migration-versions.js +250 -0
  1182. package/src/utils/migration-versions.js.map +1 -0
  1183. package/src/utils/mock-project-graph.js +8 -12
  1184. package/src/utils/mock-project-graph.js.map +1 -1
  1185. package/src/utils/module-format.d.ts +25 -0
  1186. package/src/utils/module-format.js +45 -0
  1187. package/src/utils/module-format.js.map +1 -0
  1188. package/src/utils/names.d.ts +22 -0
  1189. package/src/utils/names.js +44 -48
  1190. package/src/utils/names.js.map +1 -1
  1191. package/src/utils/npm-scope.d.ts +0 -4
  1192. package/src/utils/npm-scope.js +7 -20
  1193. package/src/utils/npm-scope.js.map +1 -1
  1194. package/src/utils/nx.d.ts +74 -3
  1195. package/src/utils/nx.js +196 -75
  1196. package/src/utils/nx.js.map +1 -1
  1197. package/src/utils/nxlv-python.js +27 -15
  1198. package/src/utils/nxlv-python.js.map +1 -1
  1199. package/src/utils/object.js +5 -11
  1200. package/src/utils/object.js.map +1 -1
  1201. package/src/utils/paths.js +11 -15
  1202. package/src/utils/paths.js.map +1 -1
  1203. package/src/utils/pkg-manager.js +4 -9
  1204. package/src/utils/pkg-manager.js.map +1 -1
  1205. package/src/utils/pnpm-workspace.d.ts +1 -12
  1206. package/src/utils/pnpm-workspace.js +16 -43
  1207. package/src/utils/pnpm-workspace.js.map +1 -1
  1208. package/src/utils/port.d.ts +28 -6
  1209. package/src/utils/port.js +67 -28
  1210. package/src/utils/port.js.map +1 -1
  1211. package/src/utils/project-package-json.d.ts +39 -0
  1212. package/src/utils/project-package-json.js +119 -0
  1213. package/src/utils/project-package-json.js.map +1 -0
  1214. package/src/utils/py.d.ts +17 -3
  1215. package/src/utils/py.js +73 -48
  1216. package/src/utils/py.js.map +1 -1
  1217. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +72 -18
  1218. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +112 -88
  1219. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +127 -53
  1220. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +60 -53
  1221. package/src/utils/rdb-constructs/rdb-constructs.d.ts +12 -1
  1222. package/src/utils/rdb-constructs/rdb-constructs.js +38 -41
  1223. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  1224. package/src/utils/ruff.d.ts +59 -0
  1225. package/src/utils/ruff.js +140 -0
  1226. package/src/utils/ruff.js.map +1 -0
  1227. package/src/utils/shared-constructs-constants.d.ts +46 -4
  1228. package/src/utils/shared-constructs-constants.js +50 -15
  1229. package/src/utils/shared-constructs-constants.js.map +1 -1
  1230. package/src/utils/shared-constructs.d.ts +4 -1
  1231. package/src/utils/shared-constructs.js +62 -67
  1232. package/src/utils/shared-constructs.js.map +1 -1
  1233. package/src/utils/shared-dynamodb-scripts.d.ts +18 -0
  1234. package/src/utils/shared-dynamodb-scripts.js +35 -0
  1235. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  1236. package/src/utils/shared-infra-config.js +31 -30
  1237. package/src/utils/shared-infra-config.js.map +1 -1
  1238. package/src/utils/shared-infra-scripts.d.ts +26 -0
  1239. package/src/utils/shared-infra-scripts.js +58 -0
  1240. package/src/utils/shared-infra-scripts.js.map +1 -0
  1241. package/src/utils/shared-rdb-scripts.d.ts +27 -0
  1242. package/src/utils/shared-rdb-scripts.js +59 -0
  1243. package/src/utils/shared-rdb-scripts.js.map +1 -0
  1244. package/src/utils/shared-scripts.d.ts +1 -4
  1245. package/src/utils/shared-scripts.js +12 -38
  1246. package/src/utils/shared-scripts.js.map +1 -1
  1247. package/src/utils/shared-shadcn.d.ts +26 -1
  1248. package/src/utils/shared-shadcn.js +93 -67
  1249. package/src/utils/shared-shadcn.js.map +1 -1
  1250. package/src/utils/smithy.d.ts +59 -0
  1251. package/src/utils/smithy.js +73 -0
  1252. package/src/utils/smithy.js.map +1 -0
  1253. package/src/utils/test-git.d.ts +39 -0
  1254. package/src/utils/test-git.js +117 -0
  1255. package/src/utils/test-git.js.map +1 -0
  1256. package/src/utils/test.d.ts +10 -0
  1257. package/src/utils/test.js +44 -25
  1258. package/src/utils/test.js.map +1 -1
  1259. package/src/utils/toml.d.ts +5 -0
  1260. package/src/utils/toml.js +17 -15
  1261. package/src/utils/toml.js.map +1 -1
  1262. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  1263. package/src/utils/version-upgrade-migration/migration.js +16 -0
  1264. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  1265. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
  1266. package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
  1267. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  1268. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +76 -0
  1269. package/src/utils/version-upgrade-migration/owned-dependencies.js +146 -0
  1270. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  1271. package/src/utils/version-upgrade-migration/register.d.ts +29 -0
  1272. package/src/utils/version-upgrade-migration/register.js +42 -0
  1273. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  1274. package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
  1275. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +352 -0
  1276. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
  1277. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  1278. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  1279. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  1280. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  1281. package/src/utils/version-upgrade-migration/sync-vended-versions.js +518 -0
  1282. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  1283. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  1284. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  1285. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  1286. package/src/utils/versions.d.ts +240 -108
  1287. package/src/utils/versions.js +265 -121
  1288. package/src/utils/versions.js.map +1 -1
  1289. package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +2 -2
  1290. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +207 -41
  1291. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
  1292. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +145 -93
  1293. package/src/utils/website-constructs/website-constructs.d.ts +11 -0
  1294. package/src/utils/website-constructs/website-constructs.js +49 -30
  1295. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  1296. package/bin/aws-nx-mcp.d.ts +0 -2
  1297. package/bin/aws-nx-mcp.js +0 -17
  1298. package/bin/aws-nx-mcp.js.map +0 -1
  1299. package/sdk/connection.d.ts +0 -6
  1300. package/sdk/connection.js +0 -10
  1301. package/sdk/connection.js.map +0 -1
  1302. package/sdk/license.d.ts +0 -8
  1303. package/sdk/license.js +0 -13
  1304. package/sdk/license.js.map +0 -1
  1305. package/sdk/open-api.d.ts +0 -10
  1306. package/sdk/open-api.js +0 -15
  1307. package/sdk/open-api.js.map +0 -1
  1308. package/sdk/py.d.ts +0 -14
  1309. package/sdk/py.js +0 -18
  1310. package/sdk/py.js.map +0 -1
  1311. package/sdk/terraform.d.ts +0 -6
  1312. package/sdk/terraform.js +0 -11
  1313. package/sdk/terraform.js.map +0 -1
  1314. package/sdk/ts.d.ts +0 -29
  1315. package/sdk/ts.js +0 -47
  1316. package/sdk/ts.js.map +0 -1
  1317. package/sdk/utils/ast.js +0 -12
  1318. package/sdk/utils/ast.js.map +0 -1
  1319. package/sdk/utils/format.js +0 -10
  1320. package/sdk/utils/format.js.map +0 -1
  1321. package/sdk/utils/test.js +0 -10
  1322. package/sdk/utils/test.js.map +0 -1
  1323. package/src/connection/agent-serve-local.d.ts +0 -33
  1324. package/src/connection/agent-serve-local.js +0 -48
  1325. package/src/connection/agent-serve-local.js.map +0 -1
  1326. package/src/connection/serve-local.js +0 -41
  1327. package/src/connection/serve-local.js.map +0 -1
  1328. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  1329. package/src/py/agent/files/ag-ui/main.py.template +0 -37
  1330. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  1331. package/src/py/agent/react-connection/serve-local.js +0 -30
  1332. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  1333. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  1334. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  1335. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  1336. package/src/ts/agent/react-connection/serve-local.js +0 -19
  1337. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  1338. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  1339. package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
  1340. package/src/ts/dynamodb/files/scripts/start-container.ts.template +0 -81
  1341. package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
  1342. package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
  1343. package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
  1344. package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
  1345. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1346. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1347. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1348. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1349. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1350. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1351. package/src/utils/files/common/scripts/src/infra-deploy.ts.template +0 -2
  1352. package/src/utils/files/common/scripts/src/infra-destroy.ts.template +0 -2
  1353. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
  1354. /package/src/py/agent/files/{common → strands/common}/__init__.py.template +0 -0
  1355. /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -0
  1356. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1357. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1358. /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.60.0"
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.60.0"
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
  }
@@ -1427,7 +1628,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1427
1628
  "import {
1428
1629
  convertEvent,
1429
1630
  convertVersion1Response,
1430
- } from '@aws-smithy/server-apigateway';
1631
+ } from '@smithy/server-apigateway';
1431
1632
  import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
1432
1633
  import middy from '@middy/core';
1433
1634
  import { Tracer } from '@aws-lambda-powertools/tracer';
@@ -1492,7 +1693,7 @@ export const handler = middy<APIGatewayProxyEvent, APIGatewayProxyResult>()
1492
1693
 
1493
1694
  exports[`tsSmithyApiGenerator > should generate smithy ts api with default options > local-server.ts 1`] = `
1494
1695
  "import { IncomingMessage, ServerResponse, createServer } from 'http';
1495
- import { convertRequest, writeResponse } from '@aws-smithy/server-node';
1696
+ import { convertRequest, writeResponse } from '@smithy/server-node';
1496
1697
  import { Logger } from '@aws-lambda-powertools/logger';
1497
1698
  import { Metrics } from '@aws-lambda-powertools/metrics';
1498
1699
  import { Tracer } from '@aws-lambda-powertools/tracer';
@@ -1543,22 +1744,43 @@ 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
  },
1549
1752
  "targets": {
1550
1753
  "build": {
1551
- "dependsOn": ["compile"]
1754
+ "dependsOn": ["compile", "generate-ssdk"]
1552
1755
  },
1553
1756
  "compile": {
1554
1757
  "cache": true,
1555
- "outputs": ["{workspaceRoot}/dist/{projectRoot}/build"],
1758
+ "outputs": [
1759
+ "{workspaceRoot}/dist/{projectRoot}/smithy",
1760
+ "{workspaceRoot}/dist/{projectRoot}/build/openapi"
1761
+ ],
1556
1762
  "executor": "nx:run-commands",
1557
1763
  "options": {
1558
1764
  "commands": [
1559
1765
  "rimraf dist/{projectRoot}/build",
1766
+ "rimraf dist/{projectRoot}/smithy",
1560
1767
  "make-dir dist/{projectRoot}/build",
1561
- "docker build -f {projectRoot}/build.Dockerfile --target export --output type=local,dest=dist/{projectRoot}/build {projectRoot}"
1768
+ "npx -y mise@2026.8.3 exec smithy@1.72.1 -- smithy build -c {projectRoot}/smithy-build.json --output dist/{projectRoot}/smithy",
1769
+ "cpy \\"dist/{projectRoot}/smithy/source/openapi/*.openapi.json\\" dist/{projectRoot}/build/openapi --flat --rename=openapi.json"
1770
+ ],
1771
+ "parallel": false,
1772
+ "cwd": "{workspaceRoot}"
1773
+ }
1774
+ },
1775
+ "generate-ssdk": {
1776
+ "cache": true,
1777
+ "outputs": ["{workspaceRoot}/dist/{projectRoot}/build/ssdk"],
1778
+ "executor": "nx:run-commands",
1779
+ "dependsOn": ["compile"],
1780
+ "options": {
1781
+ "commands": [
1782
+ "npm install --prefix dist/{projectRoot}/smithy/source/typescript-ssdk-codegen --include=dev --ignore-scripts --no-audit --no-fund",
1783
+ "rolldown -c {projectRoot}/ssdk.rolldown.config.mjs"
1562
1784
  ],
1563
1785
  "parallel": false,
1564
1786
  "cwd": "{workspaceRoot}"
@@ -1585,7 +1807,7 @@ exports[`tsSmithyApiGenerator > should handle kebab-case API names correctly > k
1585
1807
  "import {
1586
1808
  convertEvent,
1587
1809
  convertVersion1Response,
1588
- } from '@aws-smithy/server-apigateway';
1810
+ } from '@smithy/server-apigateway';
1589
1811
  import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
1590
1812
  import middy from '@middy/core';
1591
1813
  import { Tracer } from '@aws-lambda-powertools/tracer';
@@ -1682,11 +1904,11 @@ terraform {
1682
1904
  required_providers {
1683
1905
  aws = {
1684
1906
  source = "hashicorp/aws"
1685
- version = "~> 6.33"
1907
+ version = "6.60.0"
1686
1908
  }
1687
1909
  random = {
1688
1910
  source = "hashicorp/random"
1689
- version = "~> 3.1"
1911
+ version = "3.9.0"
1690
1912
  }
1691
1913
  }
1692
1914
  }
@@ -1756,8 +1978,6 @@ data "aws_caller_identity" "current" {}
1756
1978
 
1757
1979
  # Resources
1758
1980
 
1759
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
1760
-
1761
1981
  # REST API Gateway
1762
1982
  resource "aws_api_gateway_rest_api" "rest_api" {
1763
1983
  name = var.api_name
@@ -1774,10 +1994,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
1774
1994
  tags = var.tags
1775
1995
  }
1776
1996
 
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
1997
+ # Note: Deployment, stage and access logging are created in the consuming module
1998
+ # (e.g., foo-api.tf) after all methods and integrations are defined
1781
1999
 
1782
2000
  # Gateway Response for CORS (4XX errors)
1783
2001
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -1935,16 +2153,14 @@ output "waf_web_acl_arn" {
1935
2153
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
1936
2154
  }
1937
2155
 
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",
2156
+ # Note: Stage, deployment and access log outputs are provided by the consuming module",
1941
2157
  "test-api.tf": "terraform {
1942
2158
  required_version = ">= 1.0"
1943
2159
 
1944
2160
  required_providers {
1945
2161
  aws = {
1946
2162
  source = "hashicorp/aws"
1947
- version = "~> 6.33"
2163
+ version = "6.60.0"
1948
2164
  }
1949
2165
  }
1950
2166
  }
@@ -1976,11 +2192,47 @@ variable "additional_iam_policy_statements" {
1976
2192
  default = []
1977
2193
  }
1978
2194
 
2195
+ variable "appconfig_application_id" {
2196
+ 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."
2197
+ type = string
2198
+ default = null
2199
+ }
2200
+
2201
+ variable "appconfig_application_arn" {
2202
+ 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."
2203
+ type = string
2204
+ default = null
2205
+ }
2206
+
1979
2207
  variable "asset_bucket_name" {
1980
2208
  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
2209
  type = string
1982
2210
  }
1983
2211
 
2212
+ # VPC Configuration (optional)
2213
+ variable "enable_vpc" {
2214
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
2215
+ type = bool
2216
+ default = false
2217
+ }
2218
+
2219
+ variable "vpc_id" {
2220
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
2221
+ type = string
2222
+ default = null
2223
+
2224
+ validation {
2225
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
2226
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
2227
+ }
2228
+ }
2229
+
2230
+ variable "subnet_ids" {
2231
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
2232
+ type = list(string)
2233
+ default = null
2234
+ }
2235
+
1984
2236
  # CORS Configuration (passed to core module)
1985
2237
 
1986
2238
  variable "cors_allow_headers" {
@@ -2043,6 +2295,11 @@ resource "aws_s3_object" "lambda_zip" {
2043
2295
  }
2044
2296
 
2045
2297
  # Use the core REST API module
2298
+ # Account-level CloudWatch role required for REST API access logging
2299
+ module "account" {
2300
+ source = "../../../core/api/api-gateway-account"
2301
+ }
2302
+
2046
2303
  module "rest_api" {
2047
2304
  source = "../../../core/api/rest-api"
2048
2305
 
@@ -2072,9 +2329,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
2072
2329
  depends_on = [aws_api_gateway_stage.api_stage]
2073
2330
  }
2074
2331
 
2332
+ # Security group for the API Lambda function, used when deployed into a VPC
2333
+ resource "aws_security_group" "api_lambda" {
2334
+ count = var.enable_vpc ? 1 : 0
2335
+
2336
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
2337
+ name_prefix = "test-api-lambda-"
2338
+ description = "Security group for the TestApi API Lambda function"
2339
+ vpc_id = var.vpc_id
2340
+ tags = var.tags
2341
+ }
2342
+
2343
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
2344
+ count = var.enable_vpc ? 1 : 0
2345
+
2346
+ security_group_id = aws_security_group.api_lambda[0].id
2347
+ cidr_ipv4 = "0.0.0.0/0"
2348
+ from_port = 443
2349
+ to_port = 443
2350
+ ip_protocol = "tcp"
2351
+ description = "Allow outbound HTTPS to AWS service endpoints"
2352
+ }
2353
+
2075
2354
  # Lambda function
2076
2355
  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
2356
+ #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
2357
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
2079
2358
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
2080
2359
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -2096,13 +2375,25 @@ resource "aws_lambda_function" "api_lambda" {
2096
2375
  mode = "Active"
2097
2376
  }
2098
2377
 
2378
+ dynamic "vpc_config" {
2379
+ for_each = var.enable_vpc ? [1] : []
2380
+ content {
2381
+ subnet_ids = var.subnet_ids
2382
+ security_group_ids = [aws_security_group.api_lambda[0].id]
2383
+ }
2384
+ }
2385
+
2099
2386
 
2100
2387
  environment {
2101
2388
  variables = merge({
2102
- }, var.env)
2389
+ }, var.appconfig_application_id != null ? {
2390
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
2391
+ } : {}, var.env)
2103
2392
  }
2104
2393
 
2105
2394
  tags = var.tags
2395
+
2396
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
2106
2397
  }
2107
2398
 
2108
2399
  # IAM role for Lambda execution
@@ -2137,18 +2428,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
2137
2428
  role = aws_iam_role.lambda_execution_role.name
2138
2429
  }
2139
2430
 
2431
+ # Attach VPC access policy to Lambda role when deployed into a VPC
2432
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
2433
+ count = var.enable_vpc ? 1 : 0
2434
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
2435
+ role = aws_iam_role.lambda_execution_role.name
2436
+ }
2437
+
2140
2438
  # Additional IAM policies for Lambda (if provided)
2141
2439
  resource "aws_iam_role_policy" "lambda_additional_policies" {
2142
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
2440
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
2143
2441
  name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
2144
2442
  role = aws_iam_role.lambda_execution_role.id
2145
2443
 
2146
2444
  policy = jsonencode({
2147
2445
  Version = "2012-10-17"
2148
- Statement = var.additional_iam_policy_statements
2446
+ Statement = local.lambda_policy_statements
2149
2447
  })
2150
2448
  }
2151
2449
 
2450
+ locals {
2451
+ # Grant read access to the runtime-config AppConfig application when wired
2452
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
2453
+ {
2454
+ Effect = "Allow"
2455
+ Action = [
2456
+ "appconfig:StartConfigurationSession",
2457
+ "appconfig:GetLatestConfiguration"
2458
+ ]
2459
+ Resource = ["\${var.appconfig_application_arn}/*"]
2460
+ }
2461
+ ] : [], var.additional_iam_policy_statements)
2462
+ }
2463
+
2152
2464
  # CloudWatch Log Group for Lambda
2153
2465
  resource "aws_cloudwatch_log_group" "lambda_logs" {
2154
2466
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -2197,6 +2509,9 @@ resource "aws_api_gateway_method" "proxy_method" {
2197
2509
 
2198
2510
  authorization = "COGNITO_USER_POOLS"
2199
2511
  authorizer_id = aws_api_gateway_authorizer.cognito_authorizer.id
2512
+ # Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
2513
+ # and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
2514
+ authorization_scopes = ["openid", "aws.cognito.signin.user.admin"]
2200
2515
 
2201
2516
  request_parameters = {
2202
2517
  "method.request.path.proxy" = true
@@ -2283,11 +2598,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
2283
2598
  ]
2284
2599
  }
2285
2600
 
2601
+ # KMS key for encrypting access logs at rest
2602
+ resource "aws_kms_key" "access_logs" {
2603
+ description = "TestApi API access log encryption"
2604
+ deletion_window_in_days = 7
2605
+ enable_key_rotation = true
2606
+
2607
+ policy = jsonencode({
2608
+ Version = "2012-10-17"
2609
+ Statement = [
2610
+ {
2611
+ Sid = "Enable IAM User Permissions"
2612
+ Effect = "Allow"
2613
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
2614
+ Action = "kms:*"
2615
+ Resource = "*"
2616
+ },
2617
+ {
2618
+ Sid = "Allow CloudWatch Logs"
2619
+ Effect = "Allow"
2620
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
2621
+ Action = [
2622
+ "kms:Encrypt",
2623
+ "kms:Decrypt",
2624
+ "kms:ReEncrypt*",
2625
+ "kms:GenerateDataKey*",
2626
+ "kms:DescribeKey"
2627
+ ]
2628
+ Resource = "*"
2629
+ Condition = {
2630
+ ArnEquals = {
2631
+ "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"
2632
+ }
2633
+ }
2634
+ }
2635
+ ]
2636
+ })
2637
+
2638
+ tags = var.tags
2639
+ }
2640
+
2641
+ resource "aws_kms_alias" "access_logs" {
2642
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
2643
+ target_key_id = aws_kms_key.access_logs.key_id
2644
+ }
2645
+
2646
+ # Access logs for the API Gateway stage
2647
+ resource "aws_cloudwatch_log_group" "access_logs" {
2648
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
2649
+ retention_in_days = 365
2650
+ kms_key_id = aws_kms_key.access_logs.arn
2651
+ tags = var.tags
2652
+ }
2653
+
2286
2654
  # API Gateway stage
2287
2655
  resource "aws_api_gateway_stage" "api_stage" {
2288
2656
  #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
2657
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
2291
2658
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
2292
2659
  #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
2660
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -2295,9 +2662,39 @@ resource "aws_api_gateway_stage" "api_stage" {
2295
2662
  stage_name = "prod"
2296
2663
  xray_tracing_enabled = true
2297
2664
 
2665
+ access_log_settings {
2666
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
2667
+ format = jsonencode({
2668
+ requestId = "$context.requestId"
2669
+ ip = "$context.identity.sourceIp"
2670
+ caller = "$context.identity.caller"
2671
+ user = "$context.identity.user"
2672
+ requestTime = "$context.requestTime"
2673
+ httpMethod = "$context.httpMethod"
2674
+ resourcePath = "$context.resourcePath"
2675
+ status = "$context.status"
2676
+ protocol = "$context.protocol"
2677
+ responseLength = "$context.responseLength"
2678
+ })
2679
+ }
2680
+
2298
2681
  tags = var.tags
2299
2682
 
2300
- depends_on = [aws_api_gateway_deployment.api_deployment]
2683
+ # Ensure the account-level role is configured before the stage is created
2684
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
2685
+ }
2686
+
2687
+ # Default throttling applied to all resource paths and methods
2688
+ resource "aws_api_gateway_method_settings" "throttling" {
2689
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
2690
+ rest_api_id = module.rest_api.api_id
2691
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
2692
+ method_path = "*/*"
2693
+
2694
+ settings {
2695
+ throttling_rate_limit = 10000
2696
+ throttling_burst_limit = 5000
2697
+ }
2301
2698
  }
2302
2699
 
2303
2700
  # API Gateway Resource Policy
@@ -2436,6 +2833,11 @@ output "lambda_execution_role_name" {
2436
2833
  value = aws_iam_role.lambda_execution_role.name
2437
2834
  }
2438
2835
 
2836
+ output "security_group_id" {
2837
+ 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."
2838
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
2839
+ }
2840
+
2439
2841
  # Integration Outputs
2440
2842
  output "integration_id" {
2441
2843
  description = "ID of the Lambda integration"
@@ -2477,11 +2879,11 @@ terraform {
2477
2879
  required_providers {
2478
2880
  aws = {
2479
2881
  source = "hashicorp/aws"
2480
- version = "~> 6.33"
2882
+ version = "6.60.0"
2481
2883
  }
2482
2884
  random = {
2483
2885
  source = "hashicorp/random"
2484
- version = "~> 3.1"
2886
+ version = "3.9.0"
2485
2887
  }
2486
2888
  }
2487
2889
  }
@@ -2551,8 +2953,6 @@ data "aws_caller_identity" "current" {}
2551
2953
 
2552
2954
  # Resources
2553
2955
 
2554
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
2555
-
2556
2956
  # REST API Gateway
2557
2957
  resource "aws_api_gateway_rest_api" "rest_api" {
2558
2958
  name = var.api_name
@@ -2569,10 +2969,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
2569
2969
  tags = var.tags
2570
2970
  }
2571
2971
 
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
2972
+ # Note: Deployment, stage and access logging are created in the consuming module
2973
+ # (e.g., foo-api.tf) after all methods and integrations are defined
2576
2974
 
2577
2975
  # Gateway Response for CORS (4XX errors)
2578
2976
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -2730,16 +3128,14 @@ output "waf_web_acl_arn" {
2730
3128
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
2731
3129
  }
2732
3130
 
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",
3131
+ # Note: Stage, deployment and access log outputs are provided by the consuming module",
2736
3132
  "test-api.tf": "terraform {
2737
3133
  required_version = ">= 1.0"
2738
3134
 
2739
3135
  required_providers {
2740
3136
  aws = {
2741
3137
  source = "hashicorp/aws"
2742
- version = "~> 6.33"
3138
+ version = "6.60.0"
2743
3139
  }
2744
3140
  }
2745
3141
  }
@@ -2761,11 +3157,47 @@ variable "additional_iam_policy_statements" {
2761
3157
  default = []
2762
3158
  }
2763
3159
 
3160
+ variable "appconfig_application_id" {
3161
+ 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."
3162
+ type = string
3163
+ default = null
3164
+ }
3165
+
3166
+ variable "appconfig_application_arn" {
3167
+ 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."
3168
+ type = string
3169
+ default = null
3170
+ }
3171
+
2764
3172
  variable "asset_bucket_name" {
2765
3173
  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
3174
  type = string
2767
3175
  }
2768
3176
 
3177
+ # VPC Configuration (optional)
3178
+ variable "enable_vpc" {
3179
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
3180
+ type = bool
3181
+ default = false
3182
+ }
3183
+
3184
+ variable "vpc_id" {
3185
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
3186
+ type = string
3187
+ default = null
3188
+
3189
+ validation {
3190
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
3191
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
3192
+ }
3193
+ }
3194
+
3195
+ variable "subnet_ids" {
3196
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
3197
+ type = list(string)
3198
+ default = null
3199
+ }
3200
+
2769
3201
  # CORS Configuration (passed to core module)
2770
3202
 
2771
3203
  variable "cors_allow_headers" {
@@ -2828,6 +3260,11 @@ resource "aws_s3_object" "lambda_zip" {
2828
3260
  }
2829
3261
 
2830
3262
  # Use the core REST API module
3263
+ # Account-level CloudWatch role required for REST API access logging
3264
+ module "account" {
3265
+ source = "../../../core/api/api-gateway-account"
3266
+ }
3267
+
2831
3268
  module "rest_api" {
2832
3269
  source = "../../../core/api/rest-api"
2833
3270
 
@@ -2857,9 +3294,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
2857
3294
  depends_on = [aws_api_gateway_stage.api_stage]
2858
3295
  }
2859
3296
 
3297
+ # Security group for the API Lambda function, used when deployed into a VPC
3298
+ resource "aws_security_group" "api_lambda" {
3299
+ count = var.enable_vpc ? 1 : 0
3300
+
3301
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
3302
+ name_prefix = "test-api-lambda-"
3303
+ description = "Security group for the TestApi API Lambda function"
3304
+ vpc_id = var.vpc_id
3305
+ tags = var.tags
3306
+ }
3307
+
3308
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
3309
+ count = var.enable_vpc ? 1 : 0
3310
+
3311
+ security_group_id = aws_security_group.api_lambda[0].id
3312
+ cidr_ipv4 = "0.0.0.0/0"
3313
+ from_port = 443
3314
+ to_port = 443
3315
+ ip_protocol = "tcp"
3316
+ description = "Allow outbound HTTPS to AWS service endpoints"
3317
+ }
3318
+
2860
3319
  # Lambda function
2861
3320
  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
3321
+ #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
3322
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
2864
3323
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
2865
3324
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -2881,13 +3340,25 @@ resource "aws_lambda_function" "api_lambda" {
2881
3340
  mode = "Active"
2882
3341
  }
2883
3342
 
3343
+ dynamic "vpc_config" {
3344
+ for_each = var.enable_vpc ? [1] : []
3345
+ content {
3346
+ subnet_ids = var.subnet_ids
3347
+ security_group_ids = [aws_security_group.api_lambda[0].id]
3348
+ }
3349
+ }
3350
+
2884
3351
 
2885
3352
  environment {
2886
3353
  variables = merge({
2887
- }, var.env)
3354
+ }, var.appconfig_application_id != null ? {
3355
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
3356
+ } : {}, var.env)
2888
3357
  }
2889
3358
 
2890
3359
  tags = var.tags
3360
+
3361
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
2891
3362
  }
2892
3363
 
2893
3364
  # IAM role for Lambda execution
@@ -2922,18 +3393,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
2922
3393
  role = aws_iam_role.lambda_execution_role.name
2923
3394
  }
2924
3395
 
3396
+ # Attach VPC access policy to Lambda role when deployed into a VPC
3397
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
3398
+ count = var.enable_vpc ? 1 : 0
3399
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
3400
+ role = aws_iam_role.lambda_execution_role.name
3401
+ }
3402
+
2925
3403
  # Additional IAM policies for Lambda (if provided)
2926
3404
  resource "aws_iam_role_policy" "lambda_additional_policies" {
2927
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
3405
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
2928
3406
  name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
2929
3407
  role = aws_iam_role.lambda_execution_role.id
2930
3408
 
2931
3409
  policy = jsonencode({
2932
3410
  Version = "2012-10-17"
2933
- Statement = var.additional_iam_policy_statements
3411
+ Statement = local.lambda_policy_statements
2934
3412
  })
2935
3413
  }
2936
3414
 
3415
+ locals {
3416
+ # Grant read access to the runtime-config AppConfig application when wired
3417
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
3418
+ {
3419
+ Effect = "Allow"
3420
+ Action = [
3421
+ "appconfig:StartConfigurationSession",
3422
+ "appconfig:GetLatestConfiguration"
3423
+ ]
3424
+ Resource = ["\${var.appconfig_application_arn}/*"]
3425
+ }
3426
+ ] : [], var.additional_iam_policy_statements)
3427
+ }
3428
+
2937
3429
  # CloudWatch Log Group for Lambda
2938
3430
  resource "aws_cloudwatch_log_group" "lambda_logs" {
2939
3431
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -3059,11 +3551,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
3059
3551
  ]
3060
3552
  }
3061
3553
 
3554
+ # KMS key for encrypting access logs at rest
3555
+ resource "aws_kms_key" "access_logs" {
3556
+ description = "TestApi API access log encryption"
3557
+ deletion_window_in_days = 7
3558
+ enable_key_rotation = true
3559
+
3560
+ policy = jsonencode({
3561
+ Version = "2012-10-17"
3562
+ Statement = [
3563
+ {
3564
+ Sid = "Enable IAM User Permissions"
3565
+ Effect = "Allow"
3566
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
3567
+ Action = "kms:*"
3568
+ Resource = "*"
3569
+ },
3570
+ {
3571
+ Sid = "Allow CloudWatch Logs"
3572
+ Effect = "Allow"
3573
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
3574
+ Action = [
3575
+ "kms:Encrypt",
3576
+ "kms:Decrypt",
3577
+ "kms:ReEncrypt*",
3578
+ "kms:GenerateDataKey*",
3579
+ "kms:DescribeKey"
3580
+ ]
3581
+ Resource = "*"
3582
+ Condition = {
3583
+ ArnEquals = {
3584
+ "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"
3585
+ }
3586
+ }
3587
+ }
3588
+ ]
3589
+ })
3590
+
3591
+ tags = var.tags
3592
+ }
3593
+
3594
+ resource "aws_kms_alias" "access_logs" {
3595
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
3596
+ target_key_id = aws_kms_key.access_logs.key_id
3597
+ }
3598
+
3599
+ # Access logs for the API Gateway stage
3600
+ resource "aws_cloudwatch_log_group" "access_logs" {
3601
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
3602
+ retention_in_days = 365
3603
+ kms_key_id = aws_kms_key.access_logs.arn
3604
+ tags = var.tags
3605
+ }
3606
+
3062
3607
  # API Gateway stage
3063
3608
  resource "aws_api_gateway_stage" "api_stage" {
3064
3609
  #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
3610
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
3067
3611
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
3068
3612
  #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
3613
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -3071,9 +3615,39 @@ resource "aws_api_gateway_stage" "api_stage" {
3071
3615
  stage_name = "prod"
3072
3616
  xray_tracing_enabled = true
3073
3617
 
3618
+ access_log_settings {
3619
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
3620
+ format = jsonencode({
3621
+ requestId = "$context.requestId"
3622
+ ip = "$context.identity.sourceIp"
3623
+ caller = "$context.identity.caller"
3624
+ user = "$context.identity.user"
3625
+ requestTime = "$context.requestTime"
3626
+ httpMethod = "$context.httpMethod"
3627
+ resourcePath = "$context.resourcePath"
3628
+ status = "$context.status"
3629
+ protocol = "$context.protocol"
3630
+ responseLength = "$context.responseLength"
3631
+ })
3632
+ }
3633
+
3074
3634
  tags = var.tags
3075
3635
 
3076
- depends_on = [aws_api_gateway_deployment.api_deployment]
3636
+ # Ensure the account-level role is configured before the stage is created
3637
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
3638
+ }
3639
+
3640
+ # Default throttling applied to all resource paths and methods
3641
+ resource "aws_api_gateway_method_settings" "throttling" {
3642
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
3643
+ rest_api_id = module.rest_api.api_id
3644
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
3645
+ method_path = "*/*"
3646
+
3647
+ settings {
3648
+ throttling_rate_limit = 10000
3649
+ throttling_burst_limit = 5000
3650
+ }
3077
3651
  }
3078
3652
 
3079
3653
  # API Gateway Resource Policy
@@ -3223,6 +3797,11 @@ output "lambda_execution_role_name" {
3223
3797
  value = aws_iam_role.lambda_execution_role.name
3224
3798
  }
3225
3799
 
3800
+ output "security_group_id" {
3801
+ 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."
3802
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
3803
+ }
3804
+
3226
3805
  # Integration Outputs
3227
3806
  output "integration_id" {
3228
3807
  description = "ID of the Lambda integration"
@@ -3260,7 +3839,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
3260
3839
  required_providers {
3261
3840
  aws = {
3262
3841
  source = "hashicorp/aws"
3263
- version = "~> 6.33"
3842
+ version = "6.60.0"
3264
3843
  }
3265
3844
  }
3266
3845
  }
@@ -3282,11 +3861,47 @@ variable "additional_iam_policy_statements" {
3282
3861
  default = []
3283
3862
  }
3284
3863
 
3864
+ variable "appconfig_application_id" {
3865
+ 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."
3866
+ type = string
3867
+ default = null
3868
+ }
3869
+
3870
+ variable "appconfig_application_arn" {
3871
+ 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."
3872
+ type = string
3873
+ default = null
3874
+ }
3875
+
3285
3876
  variable "asset_bucket_name" {
3286
3877
  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
3878
  type = string
3288
3879
  }
3289
3880
 
3881
+ # VPC Configuration (optional)
3882
+ variable "enable_vpc" {
3883
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
3884
+ type = bool
3885
+ default = false
3886
+ }
3887
+
3888
+ variable "vpc_id" {
3889
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
3890
+ type = string
3891
+ default = null
3892
+
3893
+ validation {
3894
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
3895
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
3896
+ }
3897
+ }
3898
+
3899
+ variable "subnet_ids" {
3900
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
3901
+ type = list(string)
3902
+ default = null
3903
+ }
3904
+
3290
3905
  # CORS Configuration (passed to core module)
3291
3906
 
3292
3907
  variable "cors_allow_headers" {
@@ -3349,6 +3964,11 @@ resource "aws_s3_object" "lambda_zip" {
3349
3964
  }
3350
3965
 
3351
3966
  # Use the core REST API module
3967
+ # Account-level CloudWatch role required for REST API access logging
3968
+ module "account" {
3969
+ source = "../../../core/api/api-gateway-account"
3970
+ }
3971
+
3352
3972
  module "rest_api" {
3353
3973
  source = "../../../core/api/rest-api"
3354
3974
 
@@ -3378,9 +3998,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
3378
3998
  depends_on = [aws_api_gateway_stage.api_stage]
3379
3999
  }
3380
4000
 
4001
+ # Security group for the API Lambda function, used when deployed into a VPC
4002
+ resource "aws_security_group" "api_lambda" {
4003
+ count = var.enable_vpc ? 1 : 0
4004
+
4005
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
4006
+ name_prefix = "custom-api-lambda-"
4007
+ description = "Security group for the CustomApi API Lambda function"
4008
+ vpc_id = var.vpc_id
4009
+ tags = var.tags
4010
+ }
4011
+
4012
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
4013
+ count = var.enable_vpc ? 1 : 0
4014
+
4015
+ security_group_id = aws_security_group.api_lambda[0].id
4016
+ cidr_ipv4 = "0.0.0.0/0"
4017
+ from_port = 443
4018
+ to_port = 443
4019
+ ip_protocol = "tcp"
4020
+ description = "Allow outbound HTTPS to AWS service endpoints"
4021
+ }
4022
+
3381
4023
  # Lambda function
3382
4024
  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
4025
+ #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
4026
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
3385
4027
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
3386
4028
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -3402,13 +4044,25 @@ resource "aws_lambda_function" "api_lambda" {
3402
4044
  mode = "Active"
3403
4045
  }
3404
4046
 
4047
+ dynamic "vpc_config" {
4048
+ for_each = var.enable_vpc ? [1] : []
4049
+ content {
4050
+ subnet_ids = var.subnet_ids
4051
+ security_group_ids = [aws_security_group.api_lambda[0].id]
4052
+ }
4053
+ }
4054
+
3405
4055
 
3406
4056
  environment {
3407
4057
  variables = merge({
3408
- }, var.env)
4058
+ }, var.appconfig_application_id != null ? {
4059
+ RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
4060
+ } : {}, var.env)
3409
4061
  }
3410
4062
 
3411
4063
  tags = var.tags
4064
+
4065
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
3412
4066
  }
3413
4067
 
3414
4068
  # IAM role for Lambda execution
@@ -3443,18 +4097,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
3443
4097
  role = aws_iam_role.lambda_execution_role.name
3444
4098
  }
3445
4099
 
4100
+ # Attach VPC access policy to Lambda role when deployed into a VPC
4101
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
4102
+ count = var.enable_vpc ? 1 : 0
4103
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
4104
+ role = aws_iam_role.lambda_execution_role.name
4105
+ }
4106
+
3446
4107
  # Additional IAM policies for Lambda (if provided)
3447
4108
  resource "aws_iam_role_policy" "lambda_additional_policies" {
3448
- count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
4109
+ count = length(local.lambda_policy_statements) > 0 ? 1 : 0
3449
4110
  name = "CustomApiHandler-additional-policies-\${random_string.suffix.result}"
3450
4111
  role = aws_iam_role.lambda_execution_role.id
3451
4112
 
3452
4113
  policy = jsonencode({
3453
4114
  Version = "2012-10-17"
3454
- Statement = var.additional_iam_policy_statements
4115
+ Statement = local.lambda_policy_statements
3455
4116
  })
3456
4117
  }
3457
4118
 
4119
+ locals {
4120
+ # Grant read access to the runtime-config AppConfig application when wired
4121
+ lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
4122
+ {
4123
+ Effect = "Allow"
4124
+ Action = [
4125
+ "appconfig:StartConfigurationSession",
4126
+ "appconfig:GetLatestConfiguration"
4127
+ ]
4128
+ Resource = ["\${var.appconfig_application_arn}/*"]
4129
+ }
4130
+ ] : [], var.additional_iam_policy_statements)
4131
+ }
4132
+
3458
4133
  # CloudWatch Log Group for Lambda
3459
4134
  resource "aws_cloudwatch_log_group" "lambda_logs" {
3460
4135
  #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
@@ -3674,11 +4349,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
3674
4349
  ]
3675
4350
  }
3676
4351
 
4352
+ # KMS key for encrypting access logs at rest
4353
+ resource "aws_kms_key" "access_logs" {
4354
+ description = "CustomApi API access log encryption"
4355
+ deletion_window_in_days = 7
4356
+ enable_key_rotation = true
4357
+
4358
+ policy = jsonencode({
4359
+ Version = "2012-10-17"
4360
+ Statement = [
4361
+ {
4362
+ Sid = "Enable IAM User Permissions"
4363
+ Effect = "Allow"
4364
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
4365
+ Action = "kms:*"
4366
+ Resource = "*"
4367
+ },
4368
+ {
4369
+ Sid = "Allow CloudWatch Logs"
4370
+ Effect = "Allow"
4371
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
4372
+ Action = [
4373
+ "kms:Encrypt",
4374
+ "kms:Decrypt",
4375
+ "kms:ReEncrypt*",
4376
+ "kms:GenerateDataKey*",
4377
+ "kms:DescribeKey"
4378
+ ]
4379
+ Resource = "*"
4380
+ Condition = {
4381
+ ArnEquals = {
4382
+ "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"
4383
+ }
4384
+ }
4385
+ }
4386
+ ]
4387
+ })
4388
+
4389
+ tags = var.tags
4390
+ }
4391
+
4392
+ resource "aws_kms_alias" "access_logs" {
4393
+ name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
4394
+ target_key_id = aws_kms_key.access_logs.key_id
4395
+ }
4396
+
4397
+ # Access logs for the API Gateway stage
4398
+ resource "aws_cloudwatch_log_group" "access_logs" {
4399
+ name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
4400
+ retention_in_days = 365
4401
+ kms_key_id = aws_kms_key.access_logs.arn
4402
+ tags = var.tags
4403
+ }
4404
+
3677
4405
  # API Gateway stage
3678
4406
  resource "aws_api_gateway_stage" "api_stage" {
3679
4407
  #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
4408
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
3682
4409
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
3683
4410
  #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
4411
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -3686,9 +4413,39 @@ resource "aws_api_gateway_stage" "api_stage" {
3686
4413
  stage_name = "prod"
3687
4414
  xray_tracing_enabled = true
3688
4415
 
4416
+ access_log_settings {
4417
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
4418
+ format = jsonencode({
4419
+ requestId = "$context.requestId"
4420
+ ip = "$context.identity.sourceIp"
4421
+ caller = "$context.identity.caller"
4422
+ user = "$context.identity.user"
4423
+ requestTime = "$context.requestTime"
4424
+ httpMethod = "$context.httpMethod"
4425
+ resourcePath = "$context.resourcePath"
4426
+ status = "$context.status"
4427
+ protocol = "$context.protocol"
4428
+ responseLength = "$context.responseLength"
4429
+ })
4430
+ }
4431
+
3689
4432
  tags = var.tags
3690
4433
 
3691
- depends_on = [aws_api_gateway_deployment.api_deployment]
4434
+ # Ensure the account-level role is configured before the stage is created
4435
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
4436
+ }
4437
+
4438
+ # Default throttling applied to all resource paths and methods
4439
+ resource "aws_api_gateway_method_settings" "throttling" {
4440
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
4441
+ rest_api_id = module.rest_api.api_id
4442
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
4443
+ method_path = "*/*"
4444
+
4445
+ settings {
4446
+ throttling_rate_limit = 10000
4447
+ throttling_burst_limit = 5000
4448
+ }
3692
4449
  }
3693
4450
 
3694
4451
  # API Gateway Resource Policy
@@ -3827,6 +4584,11 @@ output "lambda_execution_role_name" {
3827
4584
  value = aws_iam_role.lambda_execution_role.name
3828
4585
  }
3829
4586
 
4587
+ output "security_group_id" {
4588
+ 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."
4589
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
4590
+ }
4591
+
3830
4592
  # Integration Outputs
3831
4593
  output "integration_id" {
3832
4594
  description = "ID of the Lambda integration"