@aws/nx-plugin 1.0.0-rc.22 → 1.0.0-rc.24

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 (657) hide show
  1. package/LICENSE-THIRD-PARTY +2088 -971
  2. package/package.json +25 -10
  3. package/src/agentcore-gateway/attach-upstream.d.ts +7 -7
  4. package/src/agentcore-gateway/attach-upstream.js +19 -22
  5. package/src/agentcore-gateway/attach-upstream.js.map +1 -1
  6. package/src/agentcore-gateway/gateway-connection/generator.d.ts +3 -3
  7. package/src/agentcore-gateway/gateway-connection/generator.js +42 -45
  8. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
  9. package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
  10. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
  11. package/src/agentcore-gateway/generator.js +89 -72
  12. package/src/agentcore-gateway/generator.js.map +1 -1
  13. package/src/agentcore-gateway/mcp-connection/generator.d.ts +2 -2
  14. package/src/agentcore-gateway/mcp-connection/generator.js +24 -30
  15. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
  16. package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
  17. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
  18. package/src/agentcore-gateway/schema.d.js +6 -0
  19. package/src/agentcore-gateway/schema.d.js.map +1 -0
  20. package/src/bin/aws-nx-mcp.js +14 -0
  21. package/src/bin/aws-nx-mcp.js.map +1 -0
  22. package/src/connection/{agent-serve-local.d.ts → agent-local-dev.d.ts} +5 -5
  23. package/src/connection/agent-local-dev.js +42 -0
  24. package/src/connection/agent-local-dev.js.map +1 -0
  25. package/src/connection/agent-runtime-config.js +9 -14
  26. package/src/connection/agent-runtime-config.js.map +1 -1
  27. package/src/connection/generator.js +262 -207
  28. package/src/connection/generator.js.map +1 -1
  29. package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
  30. package/src/connection/local-dev.js +37 -0
  31. package/src/connection/local-dev.js.map +1 -0
  32. package/src/connection/schema.d.js +6 -0
  33. package/src/connection/schema.d.js.map +1 -0
  34. package/src/index.js +2 -5
  35. package/src/index.js.map +1 -1
  36. package/src/infra/app/__snapshots__/generator.spec.ts.snap +4 -26
  37. package/src/infra/app/generator.js +133 -123
  38. package/src/infra/app/generator.js.map +1 -1
  39. package/src/infra/app/schema.d.js +6 -0
  40. package/src/infra/app/schema.d.js.map +1 -0
  41. package/src/license/config-types.js +5 -3
  42. package/src/license/config-types.js.map +1 -1
  43. package/src/license/config.d.ts +1 -1
  44. package/src/license/config.js +267 -242
  45. package/src/license/config.js.map +1 -1
  46. package/src/license/dependency-check/check.js +51 -46
  47. package/src/license/dependency-check/check.js.map +1 -1
  48. package/src/license/dependency-check/collectors/collector.js +41 -71
  49. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  50. package/src/license/dependency-check/collectors/npm-collector.js +34 -41
  51. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
  52. package/src/license/dependency-check/collectors/python-collector.js +55 -62
  53. package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
  54. package/src/license/dependency-check/evaluator.js +40 -68
  55. package/src/license/dependency-check/evaluator.js.map +1 -1
  56. package/src/license/dependency-check/executor.js +30 -22
  57. package/src/license/dependency-check/executor.js.map +1 -1
  58. package/src/license/dependency-check/pre-approved.js +949 -336
  59. package/src/license/dependency-check/pre-approved.js.map +1 -1
  60. package/src/license/dependency-check/types.js +2 -3
  61. package/src/license/dependency-check/types.js.map +1 -1
  62. package/src/license/generator.js +55 -60
  63. package/src/license/generator.js.map +1 -1
  64. package/src/license/index.js +3 -9
  65. package/src/license/index.js.map +1 -1
  66. package/src/license/known-exceptions.js +14 -13
  67. package/src/license/known-exceptions.js.map +1 -1
  68. package/src/license/schema.d.js +6 -0
  69. package/src/license/schema.d.js.map +1 -0
  70. package/src/license/sync/generator.js +94 -119
  71. package/src/license/sync/generator.js.map +1 -1
  72. package/src/license/sync/project-file-sync.js +28 -35
  73. package/src/license/sync/project-file-sync.js.map +1 -1
  74. package/src/mcp-server/generator-info.js +130 -160
  75. package/src/mcp-server/generator-info.js.map +1 -1
  76. package/src/mcp-server/guide-pipeline.js +184 -206
  77. package/src/mcp-server/guide-pipeline.js.map +1 -1
  78. package/src/mcp-server/guide-render.js +10 -25
  79. package/src/mcp-server/guide-render.js.map +1 -1
  80. package/src/mcp-server/index.js +6 -10
  81. package/src/mcp-server/index.js.map +1 -1
  82. package/src/mcp-server/mdx-ast.js +39 -57
  83. package/src/mcp-server/mdx-ast.js.map +1 -1
  84. package/src/mcp-server/option-filter.js +33 -47
  85. package/src/mcp-server/option-filter.js.map +1 -1
  86. package/src/mcp-server/schema-registry.js +27 -40
  87. package/src/mcp-server/schema-registry.js.map +1 -1
  88. package/src/mcp-server/schema.js +9 -7
  89. package/src/mcp-server/schema.js.map +1 -1
  90. package/src/mcp-server/server.js +20 -24
  91. package/src/mcp-server/server.js.map +1 -1
  92. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  93. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  94. package/src/mcp-server/tools/general-guidance.js +28 -25
  95. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  96. package/src/mcp-server/tools/generator-guide.js +29 -37
  97. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  98. package/src/mcp-server/tools/list-generators.js +19 -25
  99. package/src/mcp-server/tools/list-generators.js.map +1 -1
  100. package/src/open-api/ts-client/generator.js +16 -26
  101. package/src/open-api/ts-client/generator.js.map +1 -1
  102. package/src/open-api/ts-client/schema.d.js +6 -0
  103. package/src/open-api/ts-client/schema.d.js.map +1 -0
  104. package/src/open-api/ts-hooks/generator.js +13 -21
  105. package/src/open-api/ts-hooks/generator.js.map +1 -1
  106. package/src/open-api/ts-hooks/schema.d.js +6 -0
  107. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  108. package/src/open-api/ts-metadata/generator.js +12 -20
  109. package/src/open-api/ts-metadata/generator.js.map +1 -1
  110. package/src/open-api/ts-metadata/schema.d.js +6 -0
  111. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  112. package/src/open-api/utils/codegen-data/languages.js +42 -60
  113. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  114. package/src/open-api/utils/codegen-data/types.js +31 -30
  115. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  116. package/src/open-api/utils/codegen-data.js +253 -269
  117. package/src/open-api/utils/codegen-data.js.map +1 -1
  118. package/src/open-api/utils/normalise.js +242 -241
  119. package/src/open-api/utils/normalise.js.map +1 -1
  120. package/src/open-api/utils/parse.js +8 -14
  121. package/src/open-api/utils/parse.js.map +1 -1
  122. package/src/open-api/utils/refs.js +12 -22
  123. package/src/open-api/utils/refs.js.map +1 -1
  124. package/src/open-api/utils/types.js +5 -2
  125. package/src/open-api/utils/types.js.map +1 -1
  126. package/src/preset/__snapshots__/generator.spec.ts.snap +31 -6
  127. package/src/preset/generator.d.ts +1 -1
  128. package/src/preset/generator.js +130 -112
  129. package/src/preset/generator.js.map +1 -1
  130. package/src/preset/schema.d.js +6 -0
  131. package/src/preset/schema.d.js.map +1 -0
  132. package/src/preset/schema.d.ts +0 -1
  133. package/src/preset/schema.json +0 -5
  134. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +304 -0
  135. package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.frameworks.spec.ts.snap} +18 -845
  136. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +535 -0
  137. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +1 -2
  138. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +1 -1
  139. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +1 -1
  140. package/src/py/agent/a2a-connection/generator.js +70 -75
  141. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  142. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  143. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  144. package/src/py/agent/files/ag-ui-langchain/main.py.template +10 -0
  145. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +6 -8
  146. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +3 -3
  147. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +3 -3
  148. package/src/py/agent/gateway-connection/generator.js +61 -58
  149. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  150. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  151. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  152. package/src/py/agent/generator.js +227 -194
  153. package/src/py/agent/generator.js.map +1 -1
  154. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +5 -12
  155. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +1 -1
  156. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +1 -1
  157. package/src/py/agent/mcp-connection/generator.js +53 -52
  158. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  159. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  160. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  161. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +3 -2
  162. package/src/py/agent/react-connection/generator.js +51 -58
  163. package/src/py/agent/react-connection/generator.js.map +1 -1
  164. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +4 -4
  165. package/src/py/agent/react-connection/local-dev.js +36 -0
  166. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  167. package/src/py/agent/react-connection/schema.d.js +8 -0
  168. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  169. package/src/py/agent/schema.d.js +6 -0
  170. package/src/py/agent/schema.d.js.map +1 -0
  171. package/src/py/api/generator.js +12 -12
  172. package/src/py/api/generator.js.map +1 -1
  173. package/src/py/api/schema.d.js +6 -0
  174. package/src/py/api/schema.d.js.map +1 -0
  175. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +68 -28
  176. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
  177. package/src/py/dynamodb/agent-connection/generator.js +27 -29
  178. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  179. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  180. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  181. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +3 -3
  182. package/src/py/dynamodb/fast-api-connection/generator.js +26 -28
  183. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  184. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  185. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  186. package/src/py/dynamodb/files/__name__/client.py.template +5 -5
  187. package/src/py/dynamodb/files/__name__/entities/base.py.template +2 -2
  188. package/src/py/dynamodb/files/config.json.template +1 -1
  189. package/src/py/dynamodb/generator.js +63 -62
  190. package/src/py/dynamodb/generator.js.map +1 -1
  191. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +5 -5
  192. package/src/py/dynamodb/mcp-server-connection/generator.js +27 -29
  193. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  194. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  195. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  196. package/src/py/dynamodb/schema.d.js +6 -0
  197. package/src/py/dynamodb/schema.d.js.map +1 -0
  198. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +45 -4632
  199. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +4833 -0
  200. package/src/py/fast-api/generator.js +79 -85
  201. package/src/py/fast-api/generator.js.map +1 -1
  202. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +3 -2
  203. package/src/py/fast-api/react/generator.js +22 -24
  204. package/src/py/fast-api/react/generator.js.map +1 -1
  205. package/src/py/fast-api/react/open-api.js +28 -29
  206. package/src/py/fast-api/react/open-api.js.map +1 -1
  207. package/src/py/fast-api/react/schema.d.js +6 -0
  208. package/src/py/fast-api/react/schema.d.js.map +1 -0
  209. package/src/py/fast-api/schema.d.js +6 -0
  210. package/src/py/fast-api/schema.d.js.map +1 -0
  211. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  212. package/src/py/lambda-function/generator.js +57 -58
  213. package/src/py/lambda-function/generator.js.map +1 -1
  214. package/src/py/lambda-function/schema.d.js +6 -0
  215. package/src/py/lambda-function/schema.d.js.map +1 -0
  216. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  217. package/src/py/mcp-server/generator.js +149 -131
  218. package/src/py/mcp-server/generator.js.map +1 -1
  219. package/src/py/mcp-server/schema.d.js +6 -0
  220. package/src/py/mcp-server/schema.d.js.map +1 -0
  221. package/src/py/project/generator.d.ts +14 -1
  222. package/src/py/project/generator.js +137 -88
  223. package/src/py/project/generator.js.map +1 -1
  224. package/src/py/project/schema.d.js +6 -0
  225. package/src/py/project/schema.d.js.map +1 -0
  226. package/src/sdk/agentcore-gateway.d.ts +6 -0
  227. package/src/sdk/agentcore-gateway.js +7 -0
  228. package/src/sdk/agentcore-gateway.js.map +1 -0
  229. package/src/sdk/connection.d.ts +6 -0
  230. package/src/sdk/connection.js +6 -0
  231. package/src/sdk/connection.js.map +1 -0
  232. package/{sdk → src/sdk}/license.d.ts +4 -4
  233. package/src/sdk/license.js +7 -0
  234. package/src/sdk/license.js.map +1 -0
  235. package/src/sdk/open-api.d.ts +10 -0
  236. package/src/sdk/open-api.js +8 -0
  237. package/src/sdk/open-api.js.map +1 -0
  238. package/src/sdk/py.d.ts +14 -0
  239. package/src/sdk/py.js +10 -0
  240. package/src/sdk/py.js.map +1 -0
  241. package/src/sdk/terraform.d.ts +6 -0
  242. package/src/sdk/terraform.js +7 -0
  243. package/src/sdk/terraform.js.map +1 -0
  244. package/src/sdk/ts.d.ts +33 -0
  245. package/src/sdk/ts.js +35 -0
  246. package/src/sdk/ts.js.map +1 -0
  247. package/{sdk → src/sdk}/utils/ast.d.ts +2 -2
  248. package/src/sdk/utils/ast.js +7 -0
  249. package/src/sdk/utils/ast.js.map +1 -0
  250. package/{sdk → src/sdk}/utils/format.d.ts +1 -1
  251. package/src/sdk/utils/format.js +6 -0
  252. package/src/sdk/utils/format.js.map +1 -0
  253. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  254. package/src/sdk/utils/test.js +6 -0
  255. package/src/sdk/utils/test.js.map +1 -0
  256. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +2 -8
  257. package/src/smithy/project/files/build.Dockerfile.template +1 -4
  258. package/src/smithy/project/generator.js +44 -42
  259. package/src/smithy/project/generator.js.map +1 -1
  260. package/src/smithy/project/schema.d.js +6 -0
  261. package/src/smithy/project/schema.d.js.map +1 -0
  262. package/src/smithy/react-connection/generator.js +35 -46
  263. package/src/smithy/react-connection/generator.js.map +1 -1
  264. package/src/smithy/react-connection/schema.d.js +6 -0
  265. package/src/smithy/react-connection/schema.d.js.map +1 -0
  266. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +395 -72
  267. package/src/smithy/ts/api/generator.js +121 -111
  268. package/src/smithy/ts/api/generator.js.map +1 -1
  269. package/src/smithy/ts/api/schema.d.js +6 -0
  270. package/src/smithy/ts/api/schema.d.js.map +1 -0
  271. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  272. package/src/terraform/project/generator.js +141 -103
  273. package/src/terraform/project/generator.js.map +1 -1
  274. package/src/terraform/project/schema.d.js +9 -0
  275. package/src/terraform/project/schema.d.js.map +1 -0
  276. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +336 -92
  277. package/src/trpc/backend/generator.js +93 -86
  278. package/src/trpc/backend/generator.js.map +1 -1
  279. package/src/trpc/backend/schema.d.js +6 -0
  280. package/src/trpc/backend/schema.d.js.map +1 -0
  281. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +1 -1
  282. package/src/trpc/react/generator.js +59 -58
  283. package/src/trpc/react/generator.js.map +1 -1
  284. package/src/trpc/react/schema.d.js +6 -0
  285. package/src/trpc/react/schema.d.js.map +1 -0
  286. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +11 -11
  287. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +1 -1
  288. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +1 -1
  289. package/src/ts/agent/a2a-connection/generator.js +58 -54
  290. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  291. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  292. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  293. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +5 -5
  294. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +3 -3
  295. package/src/ts/agent/gateway-connection/generator.js +57 -52
  296. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  297. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  298. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  299. package/src/ts/agent/generator.js +165 -136
  300. package/src/ts/agent/generator.js.map +1 -1
  301. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +1 -1
  302. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +1 -1
  303. package/src/ts/agent/mcp-connection/generator.js +48 -46
  304. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  305. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  306. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  307. package/src/ts/agent/react-connection/generator.js +79 -79
  308. package/src/ts/agent/react-connection/generator.js.map +1 -1
  309. package/src/ts/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +2 -2
  310. package/src/ts/agent/react-connection/local-dev.js +17 -0
  311. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  312. package/src/ts/agent/react-connection/schema.d.js +8 -0
  313. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  314. package/src/ts/agent/schema.d.js +6 -0
  315. package/src/ts/agent/schema.d.js.map +1 -0
  316. package/src/ts/api/generator.js +16 -18
  317. package/src/ts/api/generator.js.map +1 -1
  318. package/src/ts/api/schema.d.js +6 -0
  319. package/src/ts/api/schema.d.js.map +1 -0
  320. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +8 -8
  321. package/src/ts/astro-docs/generator.js +59 -48
  322. package/src/ts/astro-docs/generator.js.map +1 -1
  323. package/src/ts/astro-docs/schema.d.js +6 -0
  324. package/src/ts/astro-docs/schema.d.js.map +1 -0
  325. package/src/ts/docs/generator.js +10 -10
  326. package/src/ts/docs/generator.js.map +1 -1
  327. package/src/ts/docs/schema.d.js +6 -0
  328. package/src/ts/docs/schema.d.js.map +1 -0
  329. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +68 -30
  330. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
  331. package/src/ts/dynamodb/agent-connection/generator.js +21 -23
  332. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  333. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  334. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  335. package/src/ts/dynamodb/files/config.json.template +1 -1
  336. package/src/ts/dynamodb/files/src/client.ts.template +7 -7
  337. package/src/ts/dynamodb/generator.js +64 -63
  338. package/src/ts/dynamodb/generator.js.map +1 -1
  339. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +5 -5
  340. package/src/ts/dynamodb/mcp-server-connection/generator.js +21 -23
  341. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  342. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  343. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  344. package/src/ts/dynamodb/schema.d.js +6 -0
  345. package/src/ts/dynamodb/schema.d.js.map +1 -0
  346. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
  347. package/src/ts/dynamodb/smithy-connection/generator.js +20 -22
  348. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  349. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  350. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  351. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +3 -3
  352. package/src/ts/dynamodb/trpc-connection/generator.js +20 -22
  353. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  354. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  355. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  356. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  357. package/src/ts/lambda-function/generator.js +55 -55
  358. package/src/ts/lambda-function/generator.js.map +1 -1
  359. package/src/ts/lambda-function/io.js +83 -52
  360. package/src/ts/lambda-function/io.js.map +1 -1
  361. package/src/ts/lambda-function/schema.d.js +6 -0
  362. package/src/ts/lambda-function/schema.d.js.map +1 -0
  363. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +23 -36
  364. package/src/ts/lib/biome.js +37 -37
  365. package/src/ts/lib/biome.js.map +1 -1
  366. package/src/ts/lib/generator.js +75 -77
  367. package/src/ts/lib/generator.js.map +1 -1
  368. package/src/ts/lib/schema.d.js +6 -0
  369. package/src/ts/lib/schema.d.js.map +1 -0
  370. package/src/ts/lib/ts-project-utils.js +65 -70
  371. package/src/ts/lib/ts-project-utils.js.map +1 -1
  372. package/src/ts/lib/types.js +5 -2
  373. package/src/ts/lib/types.js.map +1 -1
  374. package/src/ts/lib/vitest.js +29 -26
  375. package/src/ts/lib/vitest.js.map +1 -1
  376. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  377. package/src/ts/mcp-server/generator.js +157 -138
  378. package/src/ts/mcp-server/generator.js.map +1 -1
  379. package/src/ts/mcp-server/schema.d.js +6 -0
  380. package/src/ts/mcp-server/schema.d.js.map +1 -0
  381. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +14 -9
  382. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  383. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +4 -4
  384. package/src/ts/nx-generator/generator.js +84 -83
  385. package/src/ts/nx-generator/generator.js.map +1 -1
  386. package/src/ts/nx-generator/schema.d.js +6 -0
  387. package/src/ts/nx-generator/schema.d.js.map +1 -0
  388. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +30 -18
  389. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  390. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  391. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  392. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  393. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  394. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +3 -3
  395. package/src/ts/nx-plugin/generator.js +49 -48
  396. package/src/ts/nx-plugin/generator.js.map +1 -1
  397. package/src/ts/nx-plugin/schema.d.js +9 -0
  398. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  399. package/src/ts/nx-plugin/utils.js +32 -44
  400. package/src/ts/nx-plugin/utils.js.map +1 -1
  401. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +34 -30
  402. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +6 -6
  403. package/src/ts/rdb/agent-connection/generator.js +38 -39
  404. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  405. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  406. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  407. package/src/ts/rdb/files/config.json.template +1 -1
  408. package/src/ts/rdb/files/prisma.config.ts.template +2 -2
  409. package/src/ts/rdb/files/src/prisma.ts.template +7 -7
  410. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  411. package/src/ts/rdb/generator.js +130 -117
  412. package/src/ts/rdb/generator.js.map +1 -1
  413. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +6 -6
  414. package/src/ts/rdb/mcp-server-connection/generator.js +36 -37
  415. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  416. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  417. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  418. package/src/ts/rdb/schema.d.js +6 -0
  419. package/src/ts/rdb/schema.d.js.map +1 -0
  420. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
  421. package/src/ts/rdb/smithy-connection/generator.js +46 -43
  422. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  423. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  424. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  425. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +3 -3
  426. package/src/ts/rdb/trpc-connection/generator.js +36 -31
  427. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  428. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  429. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  430. package/src/ts/rdb/utils.js +9 -11
  431. package/src/ts/rdb/utils.js.map +1 -1
  432. package/src/ts/react-website/agui/generator.js +69 -61
  433. package/src/ts/react-website/agui/generator.js.map +1 -1
  434. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +179 -332
  435. package/src/ts/react-website/app/generator.js +197 -188
  436. package/src/ts/react-website/app/generator.js.map +1 -1
  437. package/src/ts/react-website/app/schema.d.js +6 -0
  438. package/src/ts/react-website/app/schema.d.js.map +1 -0
  439. package/src/ts/react-website/app/schema.json +6 -6
  440. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +118 -4
  441. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +27 -7
  442. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  443. package/src/ts/react-website/cognito-auth/generator.js +60 -60
  444. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  445. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  446. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  447. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  448. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  449. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  450. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  451. package/src/ts/react-website/runtime-config/generator.js +29 -31
  452. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  453. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  454. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  455. package/src/ts/sync/generator.js +60 -59
  456. package/src/ts/sync/generator.js.map +1 -1
  457. package/src/ts/website/app/generator.js +10 -10
  458. package/src/ts/website/app/generator.js.map +1 -1
  459. package/src/ts/website/app/schema.d.js +6 -0
  460. package/src/ts/website/app/schema.d.js.map +1 -0
  461. package/src/ts/website/app/schema.json +6 -6
  462. package/src/ts/website/auth/generator.js +11 -11
  463. package/src/ts/website/auth/generator.js.map +1 -1
  464. package/src/ts/website/auth/schema.d.js +6 -0
  465. package/src/ts/website/auth/schema.d.js.map +1 -0
  466. package/src/utils/agent-chat/agent-chat.d.ts +1 -1
  467. package/src/utils/agent-chat/agent-chat.js +11 -12
  468. package/src/utils/agent-chat/agent-chat.js.map +1 -1
  469. package/src/utils/agent-chat/files/a2a/chat.ts.template +1 -1
  470. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +1 -1
  471. package/src/utils/agent-chat/files/http-py/chat.ts.template +1 -1
  472. package/src/utils/agent-chat/files/http-ts/chat.ts.template +1 -1
  473. package/src/utils/agent-connection/agent-connection.d.ts +9 -3
  474. package/src/utils/agent-connection/agent-connection.js +133 -147
  475. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  476. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +1 -1
  477. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +1 -1
  478. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +1 -1
  479. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +1 -1
  480. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +1 -1
  481. package/src/utils/agent-core-constructs/agent-core-constructs.js +53 -50
  482. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  483. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +4 -4
  484. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +5 -5
  485. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +2 -2
  486. package/src/utils/api-constructs/api-constructs.js +30 -31
  487. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  488. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +14 -6
  489. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +58 -0
  490. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  491. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +28 -14
  492. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -8
  493. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +91 -4
  494. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  495. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  496. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  497. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  498. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  499. package/src/utils/ast/website.js +17 -19
  500. package/src/utils/ast/website.js.map +1 -1
  501. package/src/utils/ast.js +72 -97
  502. package/src/utils/ast.js.map +1 -1
  503. package/src/utils/bundle/bundle.js +50 -47
  504. package/src/utils/bundle/bundle.js.map +1 -1
  505. package/src/utils/commands.js +47 -26
  506. package/src/utils/commands.js.map +1 -1
  507. package/src/utils/config/index.d.ts +2 -2
  508. package/src/utils/config/index.js +5 -4
  509. package/src/utils/config/index.js.map +1 -1
  510. package/src/utils/config/utils.js +48 -58
  511. package/src/utils/config/utils.js.map +1 -1
  512. package/src/utils/connection/open-api/react.d.ts +5 -5
  513. package/src/utils/connection/open-api/react.js +81 -77
  514. package/src/utils/connection/open-api/react.js.map +1 -1
  515. package/src/utils/containers.js +22 -23
  516. package/src/utils/containers.js.map +1 -1
  517. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +32 -33
  518. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  519. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +12 -2
  520. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
  521. package/src/utils/files/common/scripts/src/dynamodb/create-local-table.ts.template +2 -2
  522. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +1 -1
  523. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +17 -2
  524. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  525. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  526. package/src/utils/files/common/scripts/src/rdb/{pull-image.ts.template → shared/pull-image.ts.template} +1 -1
  527. package/src/utils/files/common/scripts/src/rdb/{start-container.ts.template → shared/start-container.ts.template} +16 -1
  528. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +2 -2
  529. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  530. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +3 -3
  531. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  532. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +2 -2
  533. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  534. package/src/utils/format.js +153 -99
  535. package/src/utils/format.js.map +1 -1
  536. package/src/utils/fs.js +14 -13
  537. package/src/utils/fs.js.map +1 -1
  538. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  539. package/src/utils/function-constructs/function-constructs.js +21 -26
  540. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  541. package/src/utils/generators.js +18 -20
  542. package/src/utils/generators.js.map +1 -1
  543. package/src/utils/git.js +19 -34
  544. package/src/utils/git.js.map +1 -1
  545. package/src/utils/iac-providers.js +5 -5
  546. package/src/utils/iac-providers.js.map +1 -1
  547. package/src/utils/iac.js +12 -14
  548. package/src/utils/iac.js.map +1 -1
  549. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +112 -2
  550. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +19 -6
  551. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +104 -2
  552. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
  553. package/src/utils/identity-constructs/identity-constructs.js +24 -28
  554. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  555. package/src/utils/js.js +27 -20
  556. package/src/utils/js.js.map +1 -1
  557. package/src/utils/mcp.js +34 -41
  558. package/src/utils/mcp.js.map +1 -1
  559. package/src/utils/metrics.js +30 -45
  560. package/src/utils/metrics.js.map +1 -1
  561. package/src/utils/mock-project-graph.js +8 -12
  562. package/src/utils/mock-project-graph.js.map +1 -1
  563. package/src/utils/names.d.ts +16 -0
  564. package/src/utils/names.js +39 -48
  565. package/src/utils/names.js.map +1 -1
  566. package/src/utils/npm-scope.js +9 -17
  567. package/src/utils/npm-scope.js.map +1 -1
  568. package/src/utils/nx.d.ts +18 -2
  569. package/src/utils/nx.js +111 -74
  570. package/src/utils/nx.js.map +1 -1
  571. package/src/utils/nxlv-python.js +27 -15
  572. package/src/utils/nxlv-python.js.map +1 -1
  573. package/src/utils/object.js +5 -11
  574. package/src/utils/object.js.map +1 -1
  575. package/src/utils/paths.js +11 -15
  576. package/src/utils/paths.js.map +1 -1
  577. package/src/utils/pkg-manager.js +4 -9
  578. package/src/utils/pkg-manager.js.map +1 -1
  579. package/src/utils/pnpm-workspace.js +22 -22
  580. package/src/utils/pnpm-workspace.js.map +1 -1
  581. package/src/utils/port.js +26 -36
  582. package/src/utils/port.js.map +1 -1
  583. package/src/utils/py.d.ts +14 -1
  584. package/src/utils/py.js +63 -45
  585. package/src/utils/py.js.map +1 -1
  586. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +4 -4
  587. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +3 -3
  588. package/src/utils/rdb-constructs/rdb-constructs.js +31 -33
  589. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  590. package/src/utils/shared-constructs-constants.js +16 -16
  591. package/src/utils/shared-constructs-constants.js.map +1 -1
  592. package/src/utils/shared-constructs.js +57 -54
  593. package/src/utils/shared-constructs.js.map +1 -1
  594. package/src/utils/shared-dynamodb-scripts.js +16 -14
  595. package/src/utils/shared-dynamodb-scripts.js.map +1 -1
  596. package/src/utils/shared-infra-config.js +30 -31
  597. package/src/utils/shared-infra-config.js.map +1 -1
  598. package/src/utils/shared-infra-scripts.js +30 -25
  599. package/src/utils/shared-infra-scripts.js.map +1 -1
  600. package/src/utils/shared-rdb-scripts.d.ts +8 -3
  601. package/src/utils/shared-rdb-scripts.js +21 -13
  602. package/src/utils/shared-rdb-scripts.js.map +1 -1
  603. package/src/utils/shared-scripts.js +12 -17
  604. package/src/utils/shared-scripts.js.map +1 -1
  605. package/src/utils/shared-shadcn.js +64 -60
  606. package/src/utils/shared-shadcn.js.map +1 -1
  607. package/src/utils/test.d.ts +8 -0
  608. package/src/utils/test.js +33 -25
  609. package/src/utils/test.js.map +1 -1
  610. package/src/utils/toml.js +7 -15
  611. package/src/utils/toml.js.map +1 -1
  612. package/src/utils/versions.d.ts +31 -4
  613. package/src/utils/versions.js +40 -23
  614. package/src/utils/versions.js.map +1 -1
  615. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
  616. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +4 -4
  617. package/src/utils/website-constructs/website-constructs.js +31 -30
  618. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  619. package/bin/aws-nx-mcp.js +0 -17
  620. package/bin/aws-nx-mcp.js.map +0 -1
  621. package/sdk/agentcore-gateway.d.ts +0 -6
  622. package/sdk/agentcore-gateway.js +0 -11
  623. package/sdk/agentcore-gateway.js.map +0 -1
  624. package/sdk/connection.d.ts +0 -6
  625. package/sdk/connection.js +0 -10
  626. package/sdk/connection.js.map +0 -1
  627. package/sdk/license.js +0 -14
  628. package/sdk/license.js.map +0 -1
  629. package/sdk/open-api.d.ts +0 -10
  630. package/sdk/open-api.js +0 -15
  631. package/sdk/open-api.js.map +0 -1
  632. package/sdk/py.d.ts +0 -14
  633. package/sdk/py.js +0 -18
  634. package/sdk/py.js.map +0 -1
  635. package/sdk/terraform.d.ts +0 -6
  636. package/sdk/terraform.js +0 -11
  637. package/sdk/terraform.js.map +0 -1
  638. package/sdk/ts.d.ts +0 -33
  639. package/sdk/ts.js +0 -53
  640. package/sdk/ts.js.map +0 -1
  641. package/sdk/utils/ast.js +0 -12
  642. package/sdk/utils/ast.js.map +0 -1
  643. package/sdk/utils/format.js +0 -10
  644. package/sdk/utils/format.js.map +0 -1
  645. package/sdk/utils/test.js +0 -10
  646. package/sdk/utils/test.js.map +0 -1
  647. package/src/connection/agent-serve-local.js +0 -48
  648. package/src/connection/agent-serve-local.js.map +0 -1
  649. package/src/connection/serve-local.js +0 -41
  650. package/src/connection/serve-local.js.map +0 -1
  651. package/src/py/agent/react-connection/serve-local.js +0 -38
  652. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  653. package/src/ts/agent/react-connection/serve-local.js +0 -19
  654. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  655. package/src/utils/files/common/scripts/src/rdb/wait-for-db.ts.template +0 -59
  656. /package/src/agentcore-gateway/files/project/{serve-local.ts.template → local-dev.ts.template} +0 -0
  657. /package/{bin → src/bin}/aws-nx-mcp.d.ts +0 -0
@@ -403,11 +403,11 @@ terraform {
403
403
  required_providers {
404
404
  aws = {
405
405
  source = "hashicorp/aws"
406
- version = "~> 6.33"
406
+ version = "6.52.0"
407
407
  }
408
408
  random = {
409
409
  source = "hashicorp/random"
410
- version = "~> 3.1"
410
+ version = "3.9.0"
411
411
  }
412
412
  }
413
413
  }
@@ -477,8 +477,6 @@ data "aws_caller_identity" "current" {}
477
477
 
478
478
  # Resources
479
479
 
480
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
481
-
482
480
  # REST API Gateway
483
481
  resource "aws_api_gateway_rest_api" "rest_api" {
484
482
  name = var.api_name
@@ -495,10 +493,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
495
493
  tags = var.tags
496
494
  }
497
495
 
498
- # Note: Deployment and stage are created in the consuming module (e.g., foo-api.tf)
499
- # after all methods and integrations are defined
500
-
501
- # Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
496
+ # Note: Deployment, stage and access logging are created in the consuming module
497
+ # (e.g., foo-api.tf) after all methods and integrations are defined
502
498
 
503
499
  # Gateway Response for CORS (4XX errors)
504
500
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -656,9 +652,7 @@ output "waf_web_acl_arn" {
656
652
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
657
653
  }
658
654
 
659
- # Note: Stage and deployment outputs are provided by the consuming module
660
-
661
- # Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement"
655
+ # Note: Stage, deployment and access log outputs are provided by the consuming module"
662
656
  `;
663
657
 
664
658
  exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform provider and None auth > none-auth-terraform.tf 1`] = `
@@ -668,7 +662,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
668
662
  required_providers {
669
663
  aws = {
670
664
  source = "hashicorp/aws"
671
- version = "~> 6.33"
665
+ version = "6.52.0"
672
666
  }
673
667
  }
674
668
  }
@@ -757,6 +751,11 @@ resource "aws_s3_object" "lambda_zip" {
757
751
  }
758
752
 
759
753
  # Use the core REST API module
754
+ # Account-level CloudWatch role required for REST API access logging
755
+ module "account" {
756
+ source = "../../../core/api/api-gateway-account"
757
+ }
758
+
760
759
  module "rest_api" {
761
760
  source = "../../../core/api/rest-api"
762
761
 
@@ -1082,11 +1081,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
1082
1081
  ]
1083
1082
  }
1084
1083
 
1084
+ # KMS key for encrypting access logs at rest
1085
+ resource "aws_kms_key" "access_logs" {
1086
+ description = "TestApi API access log encryption"
1087
+ deletion_window_in_days = 7
1088
+ enable_key_rotation = true
1089
+
1090
+ policy = jsonencode({
1091
+ Version = "2012-10-17"
1092
+ Statement = [
1093
+ {
1094
+ Sid = "Enable IAM User Permissions"
1095
+ Effect = "Allow"
1096
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
1097
+ Action = "kms:*"
1098
+ Resource = "*"
1099
+ },
1100
+ {
1101
+ Sid = "Allow CloudWatch Logs"
1102
+ Effect = "Allow"
1103
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
1104
+ Action = [
1105
+ "kms:Encrypt",
1106
+ "kms:Decrypt",
1107
+ "kms:ReEncrypt*",
1108
+ "kms:GenerateDataKey*",
1109
+ "kms:DescribeKey"
1110
+ ]
1111
+ Resource = "*"
1112
+ Condition = {
1113
+ ArnEquals = {
1114
+ "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"
1115
+ }
1116
+ }
1117
+ }
1118
+ ]
1119
+ })
1120
+
1121
+ tags = var.tags
1122
+ }
1123
+
1124
+ resource "aws_kms_alias" "access_logs" {
1125
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
1126
+ target_key_id = aws_kms_key.access_logs.key_id
1127
+ }
1128
+
1129
+ # Access logs for the API Gateway stage
1130
+ resource "aws_cloudwatch_log_group" "access_logs" {
1131
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
1132
+ retention_in_days = 365
1133
+ kms_key_id = aws_kms_key.access_logs.arn
1134
+ tags = var.tags
1135
+ }
1136
+
1085
1137
  # API Gateway stage
1086
1138
  resource "aws_api_gateway_stage" "api_stage" {
1087
1139
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
1088
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
1089
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
1140
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
1090
1141
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
1091
1142
  #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
1092
1143
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -1094,9 +1145,39 @@ resource "aws_api_gateway_stage" "api_stage" {
1094
1145
  stage_name = "prod"
1095
1146
  xray_tracing_enabled = true
1096
1147
 
1148
+ access_log_settings {
1149
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
1150
+ format = jsonencode({
1151
+ requestId = "$context.requestId"
1152
+ ip = "$context.identity.sourceIp"
1153
+ caller = "$context.identity.caller"
1154
+ user = "$context.identity.user"
1155
+ requestTime = "$context.requestTime"
1156
+ httpMethod = "$context.httpMethod"
1157
+ resourcePath = "$context.resourcePath"
1158
+ status = "$context.status"
1159
+ protocol = "$context.protocol"
1160
+ responseLength = "$context.responseLength"
1161
+ })
1162
+ }
1163
+
1097
1164
  tags = var.tags
1098
1165
 
1099
- depends_on = [aws_api_gateway_deployment.api_deployment]
1166
+ # Ensure the account-level role is configured before the stage is created
1167
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
1168
+ }
1169
+
1170
+ # Default throttling applied to all resource paths and methods
1171
+ resource "aws_api_gateway_method_settings" "throttling" {
1172
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
1173
+ rest_api_id = module.rest_api.api_id
1174
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
1175
+ method_path = "*/*"
1176
+
1177
+ settings {
1178
+ throttling_rate_limit = 10000
1179
+ throttling_burst_limit = 5000
1180
+ }
1100
1181
  }
1101
1182
 
1102
1183
  # API Gateway Resource Policy
@@ -1307,12 +1388,12 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1307
1388
  },
1308
1389
  "compile": {
1309
1390
  "executor": "nx:run-commands",
1391
+ "dependsOn": ["copy-ssdk"],
1310
1392
  "outputs": ["{workspaceRoot}/dist/{projectRoot}/tsc"],
1311
1393
  "options": {
1312
1394
  "command": "tsc --build tsconfig.lib.json",
1313
1395
  "cwd": "{projectRoot}"
1314
- },
1315
- "dependsOn": ["copy-ssdk"]
1396
+ }
1316
1397
  },
1317
1398
  "lint": {
1318
1399
  "executor": "nx:run-commands",
@@ -1330,22 +1411,15 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1330
1411
  }
1331
1412
  }
1332
1413
  },
1333
- "test": {
1334
- "executor": "@nx/vitest:test",
1335
- "outputs": ["{options.reportsDirectory}"],
1336
- "options": {
1337
- "reportsDirectory": "{workspaceRoot}/coverage/{projectRoot}"
1338
- }
1339
- },
1340
1414
  "bundle": {
1415
+ "executor": "nx:run-commands",
1416
+ "dependsOn": ["compile"],
1341
1417
  "cache": true,
1342
1418
  "outputs": ["{workspaceRoot}/dist/{projectRoot}/bundle"],
1343
- "executor": "nx:run-commands",
1344
1419
  "options": {
1345
1420
  "command": "rolldown -c rolldown.config.ts",
1346
1421
  "cwd": "{projectRoot}"
1347
- },
1348
- "dependsOn": ["compile"]
1422
+ }
1349
1423
  },
1350
1424
  "copy-ssdk": {
1351
1425
  "cache": true,
@@ -1368,31 +1442,31 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
1368
1442
  },
1369
1443
  "watch-copy-ssdk": {
1370
1444
  "executor": "nx:run-commands",
1445
+ "continuous": true,
1371
1446
  "options": {
1372
- "command": "nx watch --projects=@proj/test-api-model --includeDependentProjects -- nx run @proj/test-api:copy-ssdk"
1373
- },
1374
- "continuous": true
1447
+ "command": "nx watch --projects=@proj/test-api-model --includeDependencies -- nx run @proj/test-api:copy-ssdk"
1448
+ }
1375
1449
  },
1376
1450
  "serve": {
1377
1451
  "executor": "nx:run-commands",
1452
+ "dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
1453
+ "continuous": true,
1378
1454
  "options": {
1379
1455
  "command": "tsx --watch src/local-server.ts",
1380
1456
  "cwd": "{projectRoot}"
1381
- },
1382
- "continuous": true,
1383
- "dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
1457
+ }
1384
1458
  },
1385
- "serve-local": {
1459
+ "dev": {
1386
1460
  "executor": "nx:run-commands",
1461
+ "dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
1462
+ "continuous": true,
1387
1463
  "options": {
1388
1464
  "command": "tsx --watch src/local-server.ts",
1389
1465
  "cwd": "{projectRoot}",
1390
1466
  "env": {
1391
- "SERVE_LOCAL": "true"
1467
+ "LOCAL_DEV": "true"
1392
1468
  }
1393
- },
1394
- "continuous": true,
1395
- "dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
1469
+ }
1396
1470
  }
1397
1471
  }
1398
1472
  }
@@ -1685,11 +1759,11 @@ terraform {
1685
1759
  required_providers {
1686
1760
  aws = {
1687
1761
  source = "hashicorp/aws"
1688
- version = "~> 6.33"
1762
+ version = "6.52.0"
1689
1763
  }
1690
1764
  random = {
1691
1765
  source = "hashicorp/random"
1692
- version = "~> 3.1"
1766
+ version = "3.9.0"
1693
1767
  }
1694
1768
  }
1695
1769
  }
@@ -1759,8 +1833,6 @@ data "aws_caller_identity" "current" {}
1759
1833
 
1760
1834
  # Resources
1761
1835
 
1762
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
1763
-
1764
1836
  # REST API Gateway
1765
1837
  resource "aws_api_gateway_rest_api" "rest_api" {
1766
1838
  name = var.api_name
@@ -1777,10 +1849,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
1777
1849
  tags = var.tags
1778
1850
  }
1779
1851
 
1780
- # Note: Deployment and stage are created in the consuming module (e.g., foo-api.tf)
1781
- # after all methods and integrations are defined
1782
-
1783
- # Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
1852
+ # Note: Deployment, stage and access logging are created in the consuming module
1853
+ # (e.g., foo-api.tf) after all methods and integrations are defined
1784
1854
 
1785
1855
  # Gateway Response for CORS (4XX errors)
1786
1856
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -1938,16 +2008,14 @@ output "waf_web_acl_arn" {
1938
2008
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
1939
2009
  }
1940
2010
 
1941
- # Note: Stage and deployment outputs are provided by the consuming module
1942
-
1943
- # Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
2011
+ # Note: Stage, deployment and access log outputs are provided by the consuming module",
1944
2012
  "test-api.tf": "terraform {
1945
2013
  required_version = ">= 1.0"
1946
2014
 
1947
2015
  required_providers {
1948
2016
  aws = {
1949
2017
  source = "hashicorp/aws"
1950
- version = "~> 6.33"
2018
+ version = "6.52.0"
1951
2019
  }
1952
2020
  }
1953
2021
  }
@@ -2046,6 +2114,11 @@ resource "aws_s3_object" "lambda_zip" {
2046
2114
  }
2047
2115
 
2048
2116
  # Use the core REST API module
2117
+ # Account-level CloudWatch role required for REST API access logging
2118
+ module "account" {
2119
+ source = "../../../core/api/api-gateway-account"
2120
+ }
2121
+
2049
2122
  module "rest_api" {
2050
2123
  source = "../../../core/api/rest-api"
2051
2124
 
@@ -2289,11 +2362,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
2289
2362
  ]
2290
2363
  }
2291
2364
 
2365
+ # KMS key for encrypting access logs at rest
2366
+ resource "aws_kms_key" "access_logs" {
2367
+ description = "TestApi API access log encryption"
2368
+ deletion_window_in_days = 7
2369
+ enable_key_rotation = true
2370
+
2371
+ policy = jsonencode({
2372
+ Version = "2012-10-17"
2373
+ Statement = [
2374
+ {
2375
+ Sid = "Enable IAM User Permissions"
2376
+ Effect = "Allow"
2377
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
2378
+ Action = "kms:*"
2379
+ Resource = "*"
2380
+ },
2381
+ {
2382
+ Sid = "Allow CloudWatch Logs"
2383
+ Effect = "Allow"
2384
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
2385
+ Action = [
2386
+ "kms:Encrypt",
2387
+ "kms:Decrypt",
2388
+ "kms:ReEncrypt*",
2389
+ "kms:GenerateDataKey*",
2390
+ "kms:DescribeKey"
2391
+ ]
2392
+ Resource = "*"
2393
+ Condition = {
2394
+ ArnEquals = {
2395
+ "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"
2396
+ }
2397
+ }
2398
+ }
2399
+ ]
2400
+ })
2401
+
2402
+ tags = var.tags
2403
+ }
2404
+
2405
+ resource "aws_kms_alias" "access_logs" {
2406
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
2407
+ target_key_id = aws_kms_key.access_logs.key_id
2408
+ }
2409
+
2410
+ # Access logs for the API Gateway stage
2411
+ resource "aws_cloudwatch_log_group" "access_logs" {
2412
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
2413
+ retention_in_days = 365
2414
+ kms_key_id = aws_kms_key.access_logs.arn
2415
+ tags = var.tags
2416
+ }
2417
+
2292
2418
  # API Gateway stage
2293
2419
  resource "aws_api_gateway_stage" "api_stage" {
2294
2420
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
2295
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
2296
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
2421
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
2297
2422
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
2298
2423
  #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
2299
2424
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -2301,9 +2426,39 @@ resource "aws_api_gateway_stage" "api_stage" {
2301
2426
  stage_name = "prod"
2302
2427
  xray_tracing_enabled = true
2303
2428
 
2429
+ access_log_settings {
2430
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
2431
+ format = jsonencode({
2432
+ requestId = "$context.requestId"
2433
+ ip = "$context.identity.sourceIp"
2434
+ caller = "$context.identity.caller"
2435
+ user = "$context.identity.user"
2436
+ requestTime = "$context.requestTime"
2437
+ httpMethod = "$context.httpMethod"
2438
+ resourcePath = "$context.resourcePath"
2439
+ status = "$context.status"
2440
+ protocol = "$context.protocol"
2441
+ responseLength = "$context.responseLength"
2442
+ })
2443
+ }
2444
+
2304
2445
  tags = var.tags
2305
2446
 
2306
- depends_on = [aws_api_gateway_deployment.api_deployment]
2447
+ # Ensure the account-level role is configured before the stage is created
2448
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
2449
+ }
2450
+
2451
+ # Default throttling applied to all resource paths and methods
2452
+ resource "aws_api_gateway_method_settings" "throttling" {
2453
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
2454
+ rest_api_id = module.rest_api.api_id
2455
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
2456
+ method_path = "*/*"
2457
+
2458
+ settings {
2459
+ throttling_rate_limit = 10000
2460
+ throttling_burst_limit = 5000
2461
+ }
2307
2462
  }
2308
2463
 
2309
2464
  # API Gateway Resource Policy
@@ -2483,11 +2638,11 @@ terraform {
2483
2638
  required_providers {
2484
2639
  aws = {
2485
2640
  source = "hashicorp/aws"
2486
- version = "~> 6.33"
2641
+ version = "6.52.0"
2487
2642
  }
2488
2643
  random = {
2489
2644
  source = "hashicorp/random"
2490
- version = "~> 3.1"
2645
+ version = "3.9.0"
2491
2646
  }
2492
2647
  }
2493
2648
  }
@@ -2557,8 +2712,6 @@ data "aws_caller_identity" "current" {}
2557
2712
 
2558
2713
  # Resources
2559
2714
 
2560
- # Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
2561
-
2562
2715
  # REST API Gateway
2563
2716
  resource "aws_api_gateway_rest_api" "rest_api" {
2564
2717
  name = var.api_name
@@ -2575,10 +2728,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
2575
2728
  tags = var.tags
2576
2729
  }
2577
2730
 
2578
- # Note: Deployment and stage are created in the consuming module (e.g., foo-api.tf)
2579
- # after all methods and integrations are defined
2580
-
2581
- # Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
2731
+ # Note: Deployment, stage and access logging are created in the consuming module
2732
+ # (e.g., foo-api.tf) after all methods and integrations are defined
2582
2733
 
2583
2734
  # Gateway Response for CORS (4XX errors)
2584
2735
  resource "aws_api_gateway_gateway_response" "cors_4xx" {
@@ -2736,16 +2887,14 @@ output "waf_web_acl_arn" {
2736
2887
  value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
2737
2888
  }
2738
2889
 
2739
- # Note: Stage and deployment outputs are provided by the consuming module
2740
-
2741
- # Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
2890
+ # Note: Stage, deployment and access log outputs are provided by the consuming module",
2742
2891
  "test-api.tf": "terraform {
2743
2892
  required_version = ">= 1.0"
2744
2893
 
2745
2894
  required_providers {
2746
2895
  aws = {
2747
2896
  source = "hashicorp/aws"
2748
- version = "~> 6.33"
2897
+ version = "6.52.0"
2749
2898
  }
2750
2899
  }
2751
2900
  }
@@ -2834,6 +2983,11 @@ resource "aws_s3_object" "lambda_zip" {
2834
2983
  }
2835
2984
 
2836
2985
  # Use the core REST API module
2986
+ # Account-level CloudWatch role required for REST API access logging
2987
+ module "account" {
2988
+ source = "../../../core/api/api-gateway-account"
2989
+ }
2990
+
2837
2991
  module "rest_api" {
2838
2992
  source = "../../../core/api/rest-api"
2839
2993
 
@@ -3065,11 +3219,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
3065
3219
  ]
3066
3220
  }
3067
3221
 
3222
+ # KMS key for encrypting access logs at rest
3223
+ resource "aws_kms_key" "access_logs" {
3224
+ description = "TestApi API access log encryption"
3225
+ deletion_window_in_days = 7
3226
+ enable_key_rotation = true
3227
+
3228
+ policy = jsonencode({
3229
+ Version = "2012-10-17"
3230
+ Statement = [
3231
+ {
3232
+ Sid = "Enable IAM User Permissions"
3233
+ Effect = "Allow"
3234
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
3235
+ Action = "kms:*"
3236
+ Resource = "*"
3237
+ },
3238
+ {
3239
+ Sid = "Allow CloudWatch Logs"
3240
+ Effect = "Allow"
3241
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
3242
+ Action = [
3243
+ "kms:Encrypt",
3244
+ "kms:Decrypt",
3245
+ "kms:ReEncrypt*",
3246
+ "kms:GenerateDataKey*",
3247
+ "kms:DescribeKey"
3248
+ ]
3249
+ Resource = "*"
3250
+ Condition = {
3251
+ ArnEquals = {
3252
+ "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"
3253
+ }
3254
+ }
3255
+ }
3256
+ ]
3257
+ })
3258
+
3259
+ tags = var.tags
3260
+ }
3261
+
3262
+ resource "aws_kms_alias" "access_logs" {
3263
+ name = "alias/test-api-\${random_string.suffix.result}-access-logs"
3264
+ target_key_id = aws_kms_key.access_logs.key_id
3265
+ }
3266
+
3267
+ # Access logs for the API Gateway stage
3268
+ resource "aws_cloudwatch_log_group" "access_logs" {
3269
+ name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
3270
+ retention_in_days = 365
3271
+ kms_key_id = aws_kms_key.access_logs.arn
3272
+ tags = var.tags
3273
+ }
3274
+
3068
3275
  # API Gateway stage
3069
3276
  resource "aws_api_gateway_stage" "api_stage" {
3070
3277
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
3071
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
3072
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
3278
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
3073
3279
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
3074
3280
  #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
3075
3281
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -3077,9 +3283,39 @@ resource "aws_api_gateway_stage" "api_stage" {
3077
3283
  stage_name = "prod"
3078
3284
  xray_tracing_enabled = true
3079
3285
 
3286
+ access_log_settings {
3287
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
3288
+ format = jsonencode({
3289
+ requestId = "$context.requestId"
3290
+ ip = "$context.identity.sourceIp"
3291
+ caller = "$context.identity.caller"
3292
+ user = "$context.identity.user"
3293
+ requestTime = "$context.requestTime"
3294
+ httpMethod = "$context.httpMethod"
3295
+ resourcePath = "$context.resourcePath"
3296
+ status = "$context.status"
3297
+ protocol = "$context.protocol"
3298
+ responseLength = "$context.responseLength"
3299
+ })
3300
+ }
3301
+
3080
3302
  tags = var.tags
3081
3303
 
3082
- depends_on = [aws_api_gateway_deployment.api_deployment]
3304
+ # Ensure the account-level role is configured before the stage is created
3305
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
3306
+ }
3307
+
3308
+ # Default throttling applied to all resource paths and methods
3309
+ resource "aws_api_gateway_method_settings" "throttling" {
3310
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
3311
+ rest_api_id = module.rest_api.api_id
3312
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
3313
+ method_path = "*/*"
3314
+
3315
+ settings {
3316
+ throttling_rate_limit = 10000
3317
+ throttling_burst_limit = 5000
3318
+ }
3083
3319
  }
3084
3320
 
3085
3321
  # API Gateway Resource Policy
@@ -3266,7 +3502,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
3266
3502
  required_providers {
3267
3503
  aws = {
3268
3504
  source = "hashicorp/aws"
3269
- version = "~> 6.33"
3505
+ version = "6.52.0"
3270
3506
  }
3271
3507
  }
3272
3508
  }
@@ -3355,6 +3591,11 @@ resource "aws_s3_object" "lambda_zip" {
3355
3591
  }
3356
3592
 
3357
3593
  # Use the core REST API module
3594
+ # Account-level CloudWatch role required for REST API access logging
3595
+ module "account" {
3596
+ source = "../../../core/api/api-gateway-account"
3597
+ }
3598
+
3358
3599
  module "rest_api" {
3359
3600
  source = "../../../core/api/rest-api"
3360
3601
 
@@ -3680,11 +3921,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
3680
3921
  ]
3681
3922
  }
3682
3923
 
3924
+ # KMS key for encrypting access logs at rest
3925
+ resource "aws_kms_key" "access_logs" {
3926
+ description = "CustomApi API access log encryption"
3927
+ deletion_window_in_days = 7
3928
+ enable_key_rotation = true
3929
+
3930
+ policy = jsonencode({
3931
+ Version = "2012-10-17"
3932
+ Statement = [
3933
+ {
3934
+ Sid = "Enable IAM User Permissions"
3935
+ Effect = "Allow"
3936
+ Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
3937
+ Action = "kms:*"
3938
+ Resource = "*"
3939
+ },
3940
+ {
3941
+ Sid = "Allow CloudWatch Logs"
3942
+ Effect = "Allow"
3943
+ Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
3944
+ Action = [
3945
+ "kms:Encrypt",
3946
+ "kms:Decrypt",
3947
+ "kms:ReEncrypt*",
3948
+ "kms:GenerateDataKey*",
3949
+ "kms:DescribeKey"
3950
+ ]
3951
+ Resource = "*"
3952
+ Condition = {
3953
+ ArnEquals = {
3954
+ "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"
3955
+ }
3956
+ }
3957
+ }
3958
+ ]
3959
+ })
3960
+
3961
+ tags = var.tags
3962
+ }
3963
+
3964
+ resource "aws_kms_alias" "access_logs" {
3965
+ name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
3966
+ target_key_id = aws_kms_key.access_logs.key_id
3967
+ }
3968
+
3969
+ # Access logs for the API Gateway stage
3970
+ resource "aws_cloudwatch_log_group" "access_logs" {
3971
+ name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
3972
+ retention_in_days = 365
3973
+ kms_key_id = aws_kms_key.access_logs.arn
3974
+ tags = var.tags
3975
+ }
3976
+
3683
3977
  # API Gateway stage
3684
3978
  resource "aws_api_gateway_stage" "api_stage" {
3685
3979
  #checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
3686
- #checkov:skip=CKV_AWS_76:API Gateway access logging disabled due to account-level CloudWatch Logs role ARN requirement
3687
- #checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
3980
+ #checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
3688
3981
  #checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
3689
3982
  #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
3690
3983
  deployment_id = aws_api_gateway_deployment.api_deployment.id
@@ -3692,9 +3985,39 @@ resource "aws_api_gateway_stage" "api_stage" {
3692
3985
  stage_name = "prod"
3693
3986
  xray_tracing_enabled = true
3694
3987
 
3988
+ access_log_settings {
3989
+ destination_arn = aws_cloudwatch_log_group.access_logs.arn
3990
+ format = jsonencode({
3991
+ requestId = "$context.requestId"
3992
+ ip = "$context.identity.sourceIp"
3993
+ caller = "$context.identity.caller"
3994
+ user = "$context.identity.user"
3995
+ requestTime = "$context.requestTime"
3996
+ httpMethod = "$context.httpMethod"
3997
+ resourcePath = "$context.resourcePath"
3998
+ status = "$context.status"
3999
+ protocol = "$context.protocol"
4000
+ responseLength = "$context.responseLength"
4001
+ })
4002
+ }
4003
+
3695
4004
  tags = var.tags
3696
4005
 
3697
- depends_on = [aws_api_gateway_deployment.api_deployment]
4006
+ # Ensure the account-level role is configured before the stage is created
4007
+ depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
4008
+ }
4009
+
4010
+ # Default throttling applied to all resource paths and methods
4011
+ resource "aws_api_gateway_method_settings" "throttling" {
4012
+ #checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
4013
+ rest_api_id = module.rest_api.api_id
4014
+ stage_name = aws_api_gateway_stage.api_stage.stage_name
4015
+ method_path = "*/*"
4016
+
4017
+ settings {
4018
+ throttling_rate_limit = 10000
4019
+ throttling_burst_limit = 5000
4020
+ }
3698
4021
  }
3699
4022
 
3700
4023
  # API Gateway Resource Policy