@aws/nx-plugin 1.0.0-rc.3 → 1.0.0-rc.31

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 (1017) hide show
  1. package/LICENSE-THIRD-PARTY +6746 -6133
  2. package/README.md +7 -7
  3. package/executors.json +9 -0
  4. package/generators.json +100 -1
  5. package/package.json +35 -17
  6. package/src/agentcore-gateway/attach-upstream.d.ts +33 -0
  7. package/src/agentcore-gateway/attach-upstream.js +38 -0
  8. package/src/agentcore-gateway/attach-upstream.js.map +1 -0
  9. package/src/agentcore-gateway/files/cedar/policies/README.md +52 -0
  10. package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +11 -0
  11. package/src/agentcore-gateway/files/project/local-dev.ts.template +134 -0
  12. package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
  13. package/src/agentcore-gateway/gateway-connection/generator.js +101 -0
  14. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
  15. package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
  16. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
  17. package/src/agentcore-gateway/gateway-connection/schema.d.ts +13 -0
  18. package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
  19. package/src/agentcore-gateway/generator.d.ts +25 -0
  20. package/src/agentcore-gateway/generator.js +149 -0
  21. package/src/agentcore-gateway/generator.js.map +1 -0
  22. package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
  23. package/src/agentcore-gateway/mcp-connection/generator.js +59 -0
  24. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
  25. package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
  26. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
  27. package/src/agentcore-gateway/mcp-connection/schema.d.ts +13 -0
  28. package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
  29. package/src/agentcore-gateway/schema.d.js +6 -0
  30. package/src/agentcore-gateway/schema.d.js.map +1 -0
  31. package/src/agentcore-gateway/schema.d.ts +17 -0
  32. package/src/agentcore-gateway/schema.json +70 -0
  33. package/src/bin/aws-nx-mcp.js +14 -0
  34. package/src/bin/aws-nx-mcp.js.map +1 -0
  35. package/src/connection/{agent-serve-local.d.ts → agent-local-dev.d.ts} +7 -7
  36. package/src/connection/agent-local-dev.js +42 -0
  37. package/src/connection/agent-local-dev.js.map +1 -0
  38. package/src/connection/agent-runtime-config.d.ts +1 -1
  39. package/src/connection/agent-runtime-config.js +9 -14
  40. package/src/connection/agent-runtime-config.js.map +1 -1
  41. package/src/connection/generator.d.ts +7 -14
  42. package/src/connection/generator.js +158 -177
  43. package/src/connection/generator.js.map +1 -1
  44. package/src/connection/local-dev.d.ts +15 -0
  45. package/src/connection/local-dev.js +37 -0
  46. package/src/connection/local-dev.js.map +1 -0
  47. package/src/connection/schema.d.js +6 -0
  48. package/src/connection/schema.d.js.map +1 -0
  49. package/src/connection/schema.d.ts +1 -0
  50. package/src/connection/schema.json +5 -0
  51. package/src/connection/supported-connections.d.ts +98 -0
  52. package/src/connection/supported-connections.js +138 -0
  53. package/src/connection/supported-connections.js.map +1 -0
  54. package/src/index.js +2 -5
  55. package/src/index.js.map +1 -1
  56. package/src/infra/app/__snapshots__/generator.spec.ts.snap +51 -81
  57. package/src/infra/app/generator.d.ts +3 -3
  58. package/src/infra/app/generator.js +141 -123
  59. package/src/infra/app/generator.js.map +1 -1
  60. package/src/infra/app/schema.d.js +6 -0
  61. package/src/infra/app/schema.d.js.map +1 -0
  62. package/src/infra/app/schema.d.ts +1 -1
  63. package/src/infra/app/schema.json +5 -0
  64. package/src/license/__snapshots__/config.spec.ts.snap +23 -0
  65. package/src/license/config-types.d.ts +18 -1
  66. package/src/license/config-types.js +8 -2
  67. package/src/license/config-types.js.map +1 -1
  68. package/src/license/config.d.ts +65 -7
  69. package/src/license/config.js +442 -109
  70. package/src/license/config.js.map +1 -1
  71. package/src/license/dependency-check/check.d.ts +16 -0
  72. package/src/license/dependency-check/check.js +116 -0
  73. package/src/license/dependency-check/check.js.map +1 -0
  74. package/src/license/dependency-check/collectors/collector.d.ts +21 -0
  75. package/src/license/dependency-check/collectors/collector.js +46 -0
  76. package/src/license/dependency-check/collectors/collector.js.map +1 -0
  77. package/src/license/dependency-check/collectors/npm-collector.d.ts +10 -0
  78. package/src/license/dependency-check/collectors/npm-collector.js +68 -0
  79. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -0
  80. package/src/license/dependency-check/collectors/python-collector.d.ts +23 -0
  81. package/src/license/dependency-check/collectors/python-collector.js +114 -0
  82. package/src/license/dependency-check/collectors/python-collector.js.map +1 -0
  83. package/src/license/dependency-check/evaluator.d.ts +9 -0
  84. package/src/license/dependency-check/evaluator.js +94 -0
  85. package/src/license/dependency-check/evaluator.js.map +1 -0
  86. package/src/license/dependency-check/executor-schema.json +6 -0
  87. package/src/license/dependency-check/executor.d.ts +9 -0
  88. package/src/license/dependency-check/executor.js +51 -0
  89. package/src/license/dependency-check/executor.js.map +1 -0
  90. package/src/license/dependency-check/pre-approved.d.ts +6 -0
  91. package/src/license/dependency-check/pre-approved.js +1893 -0
  92. package/src/license/dependency-check/pre-approved.js.map +1 -0
  93. package/src/license/dependency-check/types.d.ts +45 -0
  94. package/src/license/dependency-check/types.js +6 -0
  95. package/src/license/dependency-check/types.js.map +1 -0
  96. package/src/license/generator.d.ts +3 -3
  97. package/src/license/generator.js +127 -30
  98. package/src/license/generator.js.map +1 -1
  99. package/src/license/index.d.ts +8 -0
  100. package/src/license/index.js +7 -0
  101. package/src/license/index.js.map +1 -0
  102. package/src/license/known-exceptions.d.ts +7 -0
  103. package/src/license/known-exceptions.js +39 -0
  104. package/src/license/known-exceptions.js.map +1 -0
  105. package/src/license/schema.d.js +6 -0
  106. package/src/license/schema.d.js.map +1 -0
  107. package/src/license/schema.d.ts +7 -0
  108. package/src/license/schema.json +11 -0
  109. package/src/license/sync/generator.d.ts +2 -2
  110. package/src/license/sync/generator.js +100 -125
  111. package/src/license/sync/generator.js.map +1 -1
  112. package/src/license/sync/project-file-sync.d.ts +3 -3
  113. package/src/license/sync/project-file-sync.js +28 -35
  114. package/src/license/sync/project-file-sync.js.map +1 -1
  115. package/src/mcp-server/generator-info.d.ts +5 -1
  116. package/src/mcp-server/generator-info.js +130 -160
  117. package/src/mcp-server/generator-info.js.map +1 -1
  118. package/src/mcp-server/guide-pipeline.d.ts +1 -1
  119. package/src/mcp-server/guide-pipeline.js +184 -206
  120. package/src/mcp-server/guide-pipeline.js.map +1 -1
  121. package/src/mcp-server/guide-render.js +10 -25
  122. package/src/mcp-server/guide-render.js.map +1 -1
  123. package/src/mcp-server/index.js +6 -10
  124. package/src/mcp-server/index.js.map +1 -1
  125. package/src/mcp-server/mdx-ast.js +42 -56
  126. package/src/mcp-server/mdx-ast.js.map +1 -1
  127. package/src/mcp-server/option-filter.js +33 -47
  128. package/src/mcp-server/option-filter.js.map +1 -1
  129. package/src/mcp-server/schema-registry.d.ts +9 -3
  130. package/src/mcp-server/schema-registry.js +41 -38
  131. package/src/mcp-server/schema-registry.js.map +1 -1
  132. package/src/mcp-server/schema.js +9 -7
  133. package/src/mcp-server/schema.js.map +1 -1
  134. package/src/mcp-server/server.js +20 -24
  135. package/src/mcp-server/server.js.map +1 -1
  136. package/src/mcp-server/tools/create-workspace-command.d.ts +1 -1
  137. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  138. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  139. package/src/mcp-server/tools/general-guidance.d.ts +2 -2
  140. package/src/mcp-server/tools/general-guidance.js +46 -25
  141. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  142. package/src/mcp-server/tools/generator-guide.d.ts +2 -2
  143. package/src/mcp-server/tools/generator-guide.js +29 -37
  144. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  145. package/src/mcp-server/tools/list-generators.d.ts +2 -2
  146. package/src/mcp-server/tools/list-generators.js +19 -25
  147. package/src/mcp-server/tools/list-generators.js.map +1 -1
  148. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  149. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  150. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +286 -62
  151. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +674 -93
  152. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +147 -33
  153. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +196 -44
  154. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5507 -0
  155. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +219 -60
  156. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +351 -80
  157. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +170 -49
  158. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +99 -23
  159. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  160. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  161. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +196 -44
  162. package/src/open-api/ts-client/files/client.gen.ts.template +130 -18
  163. package/src/open-api/ts-client/files/types.gen.ts.template +4 -4
  164. package/src/open-api/ts-client/generator.d.ts +3 -3
  165. package/src/open-api/ts-client/generator.js +16 -26
  166. package/src/open-api/ts-client/generator.js.map +1 -1
  167. package/src/open-api/ts-client/schema.d.js +6 -0
  168. package/src/open-api/ts-client/schema.d.js.map +1 -0
  169. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +5 -0
  170. package/src/open-api/ts-hooks/generator.d.ts +3 -3
  171. package/src/open-api/ts-hooks/generator.js +13 -21
  172. package/src/open-api/ts-hooks/generator.js.map +1 -1
  173. package/src/open-api/ts-hooks/generator.spec.tsx +84 -14
  174. package/src/open-api/ts-hooks/schema.d.js +6 -0
  175. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  176. package/src/open-api/ts-metadata/generator.d.ts +3 -3
  177. package/src/open-api/ts-metadata/generator.js +12 -20
  178. package/src/open-api/ts-metadata/generator.js.map +1 -1
  179. package/src/open-api/ts-metadata/schema.d.js +6 -0
  180. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  181. package/src/open-api/utils/codegen-data/languages.d.ts +3 -5
  182. package/src/open-api/utils/codegen-data/languages.js +53 -66
  183. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  184. package/src/open-api/utils/codegen-data/types.d.ts +240 -10
  185. package/src/open-api/utils/codegen-data/types.js +54 -30
  186. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  187. package/src/open-api/utils/codegen-data.d.ts +8 -4
  188. package/src/open-api/utils/codegen-data.js +398 -674
  189. package/src/open-api/utils/codegen-data.js.map +1 -1
  190. package/src/open-api/utils/normalise.d.ts +5 -1
  191. package/src/open-api/utils/normalise.js +386 -247
  192. package/src/open-api/utils/normalise.js.map +1 -1
  193. package/src/open-api/utils/parse.d.ts +2 -2
  194. package/src/open-api/utils/parse.js +11 -13
  195. package/src/open-api/utils/parse.js.map +1 -1
  196. package/src/open-api/utils/parser.d.ts +55 -0
  197. package/src/open-api/utils/parser.js +743 -0
  198. package/src/open-api/utils/parser.js.map +1 -0
  199. package/src/open-api/utils/refs.d.ts +1 -1
  200. package/src/open-api/utils/refs.js +12 -22
  201. package/src/open-api/utils/refs.js.map +1 -1
  202. package/src/open-api/utils/types.d.ts +15 -0
  203. package/src/open-api/utils/types.js +5 -2
  204. package/src/open-api/utils/types.js.map +1 -1
  205. package/src/preset/__snapshots__/generator.spec.ts.snap +160 -17
  206. package/src/preset/generator.d.ts +4 -4
  207. package/src/preset/generator.js +140 -112
  208. package/src/preset/generator.js.map +1 -1
  209. package/src/preset/schema.d.js +6 -0
  210. package/src/preset/schema.d.js.map +1 -0
  211. package/src/preset/schema.d.ts +4 -2
  212. package/src/preset/schema.json +10 -5
  213. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +304 -0
  214. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +734 -0
  215. package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.protocols.spec.ts.snap} +80 -314
  216. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +189 -0
  217. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +30 -0
  218. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +28 -0
  219. package/src/py/agent/a2a-connection/generator.d.ts +3 -3
  220. package/src/py/agent/a2a-connection/generator.js +113 -85
  221. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  222. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  223. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  224. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  225. package/src/py/agent/a2a-connection/schema.json +5 -0
  226. package/src/py/agent/files/a2a-langchain/main.py.template +89 -0
  227. package/src/py/agent/files/ag-ui-langchain/main.py.template +83 -0
  228. package/src/py/agent/files/common/agent.py.template +2 -0
  229. package/src/py/agent/files/common-langchain/agent.py.template +30 -0
  230. package/src/py/agent/files/http/init.py.template +7 -25
  231. package/src/py/agent/files/http/main.py.template +2 -3
  232. package/src/py/agent/files/http-langchain/main.py.template +84 -0
  233. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  234. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  235. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  236. package/src/py/agent/gateway-connection/generator.d.ts +10 -0
  237. package/src/py/agent/gateway-connection/generator.js +119 -0
  238. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  239. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  240. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  241. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  242. package/src/py/agent/gateway-connection/schema.json +31 -0
  243. package/src/py/agent/generator.d.ts +3 -3
  244. package/src/py/agent/generator.js +280 -180
  245. package/src/py/agent/generator.js.map +1 -1
  246. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +153 -89
  247. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +30 -0
  248. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +30 -0
  249. package/src/py/agent/mcp-connection/generator.d.ts +3 -3
  250. package/src/py/agent/mcp-connection/generator.js +65 -126
  251. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  252. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  253. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  254. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  255. package/src/py/agent/mcp-connection/schema.json +5 -0
  256. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +11 -19
  257. package/src/py/agent/react-connection/generator.d.ts +4 -4
  258. package/src/py/agent/react-connection/generator.js +55 -59
  259. package/src/py/agent/react-connection/generator.js.map +1 -1
  260. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +6 -6
  261. package/src/py/agent/react-connection/local-dev.js +36 -0
  262. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  263. package/src/py/agent/react-connection/schema.d.js +8 -0
  264. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  265. package/src/py/agent/react-connection/schema.d.ts +1 -0
  266. package/src/py/agent/react-connection/schema.json +5 -0
  267. package/src/py/agent/schema.d.js +6 -0
  268. package/src/py/agent/schema.d.js.map +1 -0
  269. package/src/py/agent/schema.d.ts +2 -1
  270. package/src/py/agent/schema.json +6 -1
  271. package/src/py/api/generator.d.ts +3 -3
  272. package/src/py/api/generator.js +12 -11
  273. package/src/py/api/generator.js.map +1 -1
  274. package/src/py/api/schema.d.js +6 -0
  275. package/src/py/api/schema.d.js.map +1 -0
  276. package/src/py/api/schema.d.ts +1 -0
  277. package/src/py/api/schema.json +5 -0
  278. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1526 -0
  279. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
  280. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  281. package/src/py/dynamodb/agent-connection/generator.js +39 -0
  282. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  283. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  284. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  285. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  286. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  287. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +23 -0
  288. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  289. package/src/py/dynamodb/fast-api-connection/generator.js +37 -0
  290. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  291. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  292. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  293. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  294. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  295. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  296. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  297. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  298. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  299. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  300. package/src/py/dynamodb/files/config.json.template +24 -0
  301. package/src/py/dynamodb/generator.d.ts +10 -0
  302. package/src/py/dynamodb/generator.js +110 -0
  303. package/src/py/dynamodb/generator.js.map +1 -0
  304. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
  305. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  306. package/src/py/dynamodb/mcp-server-connection/generator.js +39 -0
  307. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  308. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  309. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  310. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  311. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  312. package/src/py/dynamodb/schema.d.js +6 -0
  313. package/src/py/dynamodb/schema.d.js.map +1 -0
  314. package/src/py/dynamodb/schema.d.ts +16 -0
  315. package/src/py/dynamodb/schema.json +75 -0
  316. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +212 -4678
  317. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +4833 -0
  318. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  319. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  320. package/src/py/fast-api/generator.d.ts +3 -3
  321. package/src/py/fast-api/generator.js +90 -87
  322. package/src/py/fast-api/generator.js.map +1 -1
  323. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  324. package/src/py/fast-api/react/generator.d.ts +4 -4
  325. package/src/py/fast-api/react/generator.js +25 -25
  326. package/src/py/fast-api/react/generator.js.map +1 -1
  327. package/src/py/fast-api/react/open-api.d.ts +1 -1
  328. package/src/py/fast-api/react/open-api.js +31 -29
  329. package/src/py/fast-api/react/open-api.js.map +1 -1
  330. package/src/py/fast-api/react/schema.d.js +6 -0
  331. package/src/py/fast-api/react/schema.d.js.map +1 -0
  332. package/src/py/fast-api/react/schema.d.ts +1 -0
  333. package/src/py/fast-api/react/schema.json +5 -0
  334. package/src/py/fast-api/schema.d.js +6 -0
  335. package/src/py/fast-api/schema.d.js.map +1 -0
  336. package/src/py/fast-api/schema.d.ts +1 -0
  337. package/src/py/fast-api/schema.json +5 -0
  338. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  339. package/src/py/lambda-function/generator.d.ts +3 -3
  340. package/src/py/lambda-function/generator.js +60 -59
  341. package/src/py/lambda-function/generator.js.map +1 -1
  342. package/src/py/lambda-function/schema.d.js +6 -0
  343. package/src/py/lambda-function/schema.d.js.map +1 -0
  344. package/src/py/lambda-function/schema.d.ts +1 -0
  345. package/src/py/lambda-function/schema.json +5 -0
  346. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +87 -17
  347. package/src/py/mcp-server/generator.d.ts +3 -3
  348. package/src/py/mcp-server/generator.js +152 -125
  349. package/src/py/mcp-server/generator.js.map +1 -1
  350. package/src/py/mcp-server/schema.d.js +6 -0
  351. package/src/py/mcp-server/schema.d.js.map +1 -0
  352. package/src/py/mcp-server/schema.d.ts +1 -0
  353. package/src/py/mcp-server/schema.json +5 -0
  354. package/src/py/project/generator.d.ts +17 -4
  355. package/src/py/project/generator.js +205 -127
  356. package/src/py/project/generator.js.map +1 -1
  357. package/src/py/project/schema.d.js +6 -0
  358. package/src/py/project/schema.d.js.map +1 -0
  359. package/src/py/project/schema.d.ts +1 -0
  360. package/src/py/project/schema.json +5 -0
  361. package/src/sdk/agentcore-gateway.d.ts +6 -0
  362. package/src/sdk/agentcore-gateway.js +7 -0
  363. package/src/sdk/agentcore-gateway.js.map +1 -0
  364. package/src/sdk/connection.d.ts +6 -0
  365. package/src/sdk/connection.js +6 -0
  366. package/src/sdk/connection.js.map +1 -0
  367. package/src/sdk/license.d.ts +8 -0
  368. package/src/sdk/license.js +7 -0
  369. package/src/sdk/license.js.map +1 -0
  370. package/src/sdk/open-api.d.ts +10 -0
  371. package/src/sdk/open-api.js +8 -0
  372. package/src/sdk/open-api.js.map +1 -0
  373. package/src/sdk/py.d.ts +14 -0
  374. package/src/sdk/py.js +10 -0
  375. package/src/sdk/py.js.map +1 -0
  376. package/src/sdk/terraform.d.ts +6 -0
  377. package/src/sdk/terraform.js +7 -0
  378. package/src/sdk/terraform.js.map +1 -0
  379. package/src/sdk/ts.d.ts +33 -0
  380. package/src/sdk/ts.js +35 -0
  381. package/src/sdk/ts.js.map +1 -0
  382. package/{sdk → src/sdk}/utils/ast.d.ts +1 -2
  383. package/src/sdk/utils/ast.js +6 -0
  384. package/src/sdk/utils/ast.js.map +1 -0
  385. package/{sdk → src/sdk}/utils/format.d.ts +1 -1
  386. package/src/sdk/utils/format.js +6 -0
  387. package/src/sdk/utils/format.js.map +1 -0
  388. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  389. package/src/sdk/utils/test.js +6 -0
  390. package/src/sdk/utils/test.js.map +1 -0
  391. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +19 -24
  392. package/src/smithy/project/files/build.Dockerfile.template +1 -4
  393. package/src/smithy/project/files/src/operations/echo.smithy.template +1 -0
  394. package/src/smithy/project/generator.d.ts +3 -3
  395. package/src/smithy/project/generator.js +64 -57
  396. package/src/smithy/project/generator.js.map +1 -1
  397. package/src/smithy/project/schema.d.js +6 -0
  398. package/src/smithy/project/schema.d.js.map +1 -0
  399. package/src/smithy/project/schema.d.ts +1 -0
  400. package/src/smithy/project/schema.json +5 -0
  401. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  402. package/src/smithy/react-connection/generator.d.ts +3 -3
  403. package/src/smithy/react-connection/generator.js +39 -47
  404. package/src/smithy/react-connection/generator.js.map +1 -1
  405. package/src/smithy/react-connection/schema.d.js +6 -0
  406. package/src/smithy/react-connection/schema.d.js.map +1 -0
  407. package/src/smithy/react-connection/schema.d.ts +1 -0
  408. package/src/smithy/react-connection/schema.json +5 -0
  409. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +409 -106
  410. package/src/smithy/ts/api/generator.d.ts +3 -3
  411. package/src/smithy/ts/api/generator.js +127 -106
  412. package/src/smithy/ts/api/generator.js.map +1 -1
  413. package/src/smithy/ts/api/schema.d.js +6 -0
  414. package/src/smithy/ts/api/schema.d.js.map +1 -0
  415. package/src/smithy/ts/api/schema.d.ts +1 -0
  416. package/src/smithy/ts/api/schema.json +5 -0
  417. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  418. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  419. package/src/terraform/project/generator.d.ts +3 -3
  420. package/src/terraform/project/generator.js +156 -104
  421. package/src/terraform/project/generator.js.map +1 -1
  422. package/src/terraform/project/schema.d.js +9 -0
  423. package/src/terraform/project/schema.d.js.map +1 -0
  424. package/src/terraform/project/schema.d.ts +1 -0
  425. package/src/terraform/project/schema.json +5 -0
  426. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +499 -110
  427. package/src/trpc/backend/files/src/procedures/echo.ts.template +1 -1
  428. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  429. package/src/trpc/backend/generator.d.ts +4 -4
  430. package/src/trpc/backend/generator.js +97 -85
  431. package/src/trpc/backend/generator.js.map +1 -1
  432. package/src/trpc/backend/schema.d.js +6 -0
  433. package/src/trpc/backend/schema.d.js.map +1 -0
  434. package/src/trpc/backend/schema.d.ts +3 -2
  435. package/src/trpc/backend/schema.json +5 -0
  436. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  437. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  438. package/src/trpc/react/generator.d.ts +4 -4
  439. package/src/trpc/react/generator.js +63 -58
  440. package/src/trpc/react/generator.js.map +1 -1
  441. package/src/trpc/react/schema.d.js +6 -0
  442. package/src/trpc/react/schema.d.js.map +1 -0
  443. package/src/trpc/react/schema.d.ts +1 -0
  444. package/src/trpc/react/schema.json +5 -0
  445. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +656 -18
  446. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +256 -0
  447. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  448. package/src/ts/agent/a2a-connection/generator.d.ts +3 -3
  449. package/src/ts/agent/a2a-connection/generator.js +63 -56
  450. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  451. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  452. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  453. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  454. package/src/ts/agent/a2a-connection/schema.json +5 -0
  455. package/src/ts/agent/files/common/agent.ts.template +6 -2
  456. package/src/ts/agent/files/http/router.ts.template +1 -1
  457. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +220 -0
  458. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  459. package/src/ts/agent/gateway-connection/generator.d.ts +10 -0
  460. package/src/ts/agent/gateway-connection/generator.js +114 -0
  461. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  462. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  463. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  464. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  465. package/src/ts/agent/gateway-connection/schema.json +31 -0
  466. package/src/ts/agent/generator.d.ts +3 -3
  467. package/src/ts/agent/generator.js +188 -144
  468. package/src/ts/agent/generator.js.map +1 -1
  469. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +192 -111
  470. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +22 -0
  471. package/src/ts/agent/mcp-connection/generator.d.ts +3 -3
  472. package/src/ts/agent/mcp-connection/generator.js +53 -60
  473. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  474. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  475. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  476. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  477. package/src/ts/agent/mcp-connection/schema.json +5 -0
  478. package/src/ts/agent/react-connection/generator.d.ts +4 -4
  479. package/src/ts/agent/react-connection/generator.js +86 -80
  480. package/src/ts/agent/react-connection/generator.js.map +1 -1
  481. package/src/ts/agent/react-connection/local-dev.d.ts +13 -0
  482. package/src/ts/agent/react-connection/local-dev.js +17 -0
  483. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  484. package/src/ts/agent/react-connection/schema.d.js +8 -0
  485. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  486. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  487. package/src/ts/agent/react-connection/schema.json +5 -0
  488. package/src/ts/agent/schema.d.js +6 -0
  489. package/src/ts/agent/schema.d.js.map +1 -0
  490. package/src/ts/agent/schema.d.ts +1 -0
  491. package/src/ts/agent/schema.json +5 -0
  492. package/src/ts/api/generator.d.ts +3 -3
  493. package/src/ts/api/generator.js +16 -16
  494. package/src/ts/api/generator.js.map +1 -1
  495. package/src/ts/api/schema.d.js +6 -0
  496. package/src/ts/api/schema.d.js.map +1 -0
  497. package/src/ts/api/schema.d.ts +3 -1
  498. package/src/ts/api/schema.json +5 -0
  499. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +15 -16
  500. package/src/ts/astro-docs/generator.d.ts +3 -3
  501. package/src/ts/astro-docs/generator.js +69 -54
  502. package/src/ts/astro-docs/generator.js.map +1 -1
  503. package/src/ts/astro-docs/schema.d.js +6 -0
  504. package/src/ts/astro-docs/schema.d.js.map +1 -0
  505. package/src/ts/astro-docs/schema.d.ts +2 -2
  506. package/src/ts/astro-docs/schema.json +3 -3
  507. package/src/ts/docs/generator.d.ts +3 -3
  508. package/src/ts/docs/generator.js +10 -10
  509. package/src/ts/docs/generator.js.map +1 -1
  510. package/src/ts/docs/schema.d.js +6 -0
  511. package/src/ts/docs/schema.d.js.map +1 -0
  512. package/src/ts/docs/schema.d.ts +1 -4
  513. package/src/ts/docs/schema.json +3 -3
  514. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +1390 -0
  515. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
  516. package/src/ts/dynamodb/agent-connection/generator.d.ts +10 -0
  517. package/src/ts/dynamodb/agent-connection/generator.js +30 -0
  518. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -0
  519. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  520. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  521. package/src/ts/dynamodb/agent-connection/schema.d.ts +15 -0
  522. package/src/ts/dynamodb/agent-connection/schema.json +27 -0
  523. package/src/ts/dynamodb/files/config.json.template +24 -0
  524. package/src/ts/dynamodb/files/src/client.ts.template +61 -0
  525. package/src/ts/dynamodb/files/src/entities/example.ts.template +47 -0
  526. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -0
  527. package/src/ts/dynamodb/files/src/index.ts.template +2 -0
  528. package/src/ts/dynamodb/generator.d.ts +10 -0
  529. package/src/ts/dynamodb/generator.js +116 -0
  530. package/src/ts/dynamodb/generator.js.map +1 -0
  531. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
  532. package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  533. package/src/ts/dynamodb/mcp-server-connection/generator.js +30 -0
  534. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -0
  535. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  536. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  537. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  538. package/src/ts/dynamodb/mcp-server-connection/schema.json +27 -0
  539. package/src/ts/dynamodb/schema.d.js +6 -0
  540. package/src/ts/dynamodb/schema.d.js.map +1 -0
  541. package/src/ts/dynamodb/schema.d.ts +16 -0
  542. package/src/ts/dynamodb/schema.json +75 -0
  543. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +23 -0
  544. package/src/ts/dynamodb/smithy-connection/generator.d.ts +10 -0
  545. package/src/ts/dynamodb/smithy-connection/generator.js +28 -0
  546. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -0
  547. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  548. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  549. package/src/ts/dynamodb/smithy-connection/schema.d.ts +13 -0
  550. package/src/ts/dynamodb/smithy-connection/schema.json +23 -0
  551. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +23 -0
  552. package/src/ts/dynamodb/trpc-connection/generator.d.ts +10 -0
  553. package/src/ts/dynamodb/trpc-connection/generator.js +28 -0
  554. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -0
  555. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  556. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  557. package/src/ts/dynamodb/trpc-connection/schema.d.ts +13 -0
  558. package/src/ts/dynamodb/trpc-connection/schema.json +23 -0
  559. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  560. package/src/ts/lambda-function/generator.d.ts +3 -3
  561. package/src/ts/lambda-function/generator.js +59 -56
  562. package/src/ts/lambda-function/generator.js.map +1 -1
  563. package/src/ts/lambda-function/io.js +83 -52
  564. package/src/ts/lambda-function/io.js.map +1 -1
  565. package/src/ts/lambda-function/schema.d.js +6 -0
  566. package/src/ts/lambda-function/schema.d.js.map +1 -0
  567. package/src/ts/lambda-function/schema.d.ts +1 -0
  568. package/src/ts/lambda-function/schema.json +5 -0
  569. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +53 -99
  570. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +24 -0
  571. package/src/ts/lib/biome.d.ts +7 -0
  572. package/src/ts/lib/biome.js +58 -0
  573. package/src/ts/lib/biome.js.map +1 -0
  574. package/src/ts/lib/generator.d.ts +3 -3
  575. package/src/ts/lib/generator.js +96 -96
  576. package/src/ts/lib/generator.js.map +1 -1
  577. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  578. package/src/ts/lib/schema.d.js +6 -0
  579. package/src/ts/lib/schema.d.js.map +1 -0
  580. package/src/ts/lib/schema.d.ts +1 -1
  581. package/src/ts/lib/schema.json +5 -0
  582. package/src/ts/lib/ts-project-utils.d.ts +12 -2
  583. package/src/ts/lib/ts-project-utils.js +80 -65
  584. package/src/ts/lib/ts-project-utils.js.map +1 -1
  585. package/src/ts/lib/types.js +5 -2
  586. package/src/ts/lib/types.js.map +1 -1
  587. package/src/ts/lib/vitest.d.ts +2 -2
  588. package/src/ts/lib/vitest.js +29 -26
  589. package/src/ts/lib/vitest.js.map +1 -1
  590. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +83 -13
  591. package/src/ts/mcp-server/generator.d.ts +3 -3
  592. package/src/ts/mcp-server/generator.js +164 -120
  593. package/src/ts/mcp-server/generator.js.map +1 -1
  594. package/src/ts/mcp-server/schema.d.js +6 -0
  595. package/src/ts/mcp-server/schema.d.js.map +1 -0
  596. package/src/ts/mcp-server/schema.d.ts +1 -0
  597. package/src/ts/mcp-server/schema.json +5 -0
  598. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +46 -26
  599. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  600. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  601. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  602. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  603. package/src/ts/nx-generator/generator.d.ts +2 -2
  604. package/src/ts/nx-generator/generator.js +111 -74
  605. package/src/ts/nx-generator/generator.js.map +1 -1
  606. package/src/ts/nx-generator/schema.d.js +6 -0
  607. package/src/ts/nx-generator/schema.d.js.map +1 -0
  608. package/src/ts/nx-generator/schema.d.ts +1 -0
  609. package/src/ts/nx-generator/schema.json +5 -0
  610. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +30 -18
  611. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  612. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  613. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  614. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  615. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  616. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +3 -3
  617. package/src/ts/nx-plugin/generator.d.ts +3 -3
  618. package/src/ts/nx-plugin/generator.js +60 -51
  619. package/src/ts/nx-plugin/generator.js.map +1 -1
  620. package/src/ts/nx-plugin/schema.d.js +9 -0
  621. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  622. package/src/ts/nx-plugin/schema.json +5 -0
  623. package/src/ts/nx-plugin/utils.d.ts +1 -1
  624. package/src/ts/nx-plugin/utils.js +32 -38
  625. package/src/ts/nx-plugin/utils.js.map +1 -1
  626. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +312 -482
  627. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +6 -6
  628. package/src/ts/rdb/agent-connection/generator.d.ts +3 -3
  629. package/src/ts/rdb/agent-connection/generator.js +38 -39
  630. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  631. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  632. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  633. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  634. package/src/ts/rdb/agent-connection/schema.json +5 -0
  635. package/src/ts/rdb/files/config.json.template +14 -0
  636. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  637. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +7 -9
  638. package/src/ts/rdb/files/src/index.ts.template +0 -1
  639. package/src/ts/rdb/files/src/migration-handler.ts.template +1 -28
  640. package/src/ts/rdb/files/src/prisma.ts.template +28 -23
  641. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  642. package/src/ts/rdb/generator.d.ts +3 -7
  643. package/src/ts/rdb/generator.js +158 -130
  644. package/src/ts/rdb/generator.js.map +1 -1
  645. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +6 -6
  646. package/src/ts/rdb/mcp-server-connection/generator.d.ts +3 -3
  647. package/src/ts/rdb/mcp-server-connection/generator.js +36 -37
  648. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  649. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  650. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  651. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  652. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  653. package/src/ts/rdb/schema.d.js +6 -0
  654. package/src/ts/rdb/schema.d.js.map +1 -0
  655. package/src/ts/rdb/schema.d.ts +1 -0
  656. package/src/ts/rdb/schema.json +5 -0
  657. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
  658. package/src/ts/rdb/smithy-connection/generator.d.ts +3 -3
  659. package/src/ts/rdb/smithy-connection/generator.js +46 -43
  660. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  661. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  662. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  663. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  664. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  665. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +3 -3
  666. package/src/ts/rdb/trpc-connection/generator.d.ts +3 -3
  667. package/src/ts/rdb/trpc-connection/generator.js +36 -31
  668. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  669. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  670. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  671. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  672. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  673. package/src/ts/rdb/utils.d.ts +1 -1
  674. package/src/ts/rdb/utils.js +9 -11
  675. package/src/ts/rdb/utils.js.map +1 -1
  676. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +1 -16
  677. package/src/ts/react-website/agui/generator.d.ts +1 -1
  678. package/src/ts/react-website/agui/generator.js +69 -62
  679. package/src/ts/react-website/agui/generator.js.map +1 -1
  680. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +626 -612
  681. package/src/ts/react-website/app/generator.d.ts +4 -4
  682. package/src/ts/react-website/app/generator.js +217 -192
  683. package/src/ts/react-website/app/generator.js.map +1 -1
  684. package/src/ts/react-website/app/schema.d.js +6 -0
  685. package/src/ts/react-website/app/schema.d.js.map +1 -0
  686. package/src/ts/react-website/app/schema.d.ts +1 -1
  687. package/src/ts/react-website/app/schema.json +11 -6
  688. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +129 -18
  689. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +36 -10
  690. package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
  691. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  692. package/src/ts/react-website/cognito-auth/generator.d.ts +4 -4
  693. package/src/ts/react-website/cognito-auth/generator.js +64 -63
  694. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  695. package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +8 -6
  696. package/src/ts/react-website/cognito-auth/grit/cognito-auth-wrapper.grit +1 -1
  697. package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
  698. package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
  699. package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
  700. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  701. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  702. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  703. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  704. package/src/ts/react-website/cognito-auth/utils.d.ts +1 -1
  705. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  706. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  707. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  708. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  709. package/src/ts/react-website/runtime-config/generator.d.ts +3 -3
  710. package/src/ts/react-website/runtime-config/generator.js +29 -31
  711. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  712. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  713. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  714. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  715. package/src/ts/react-website/runtime-config/schema.json +5 -0
  716. package/src/ts/sync/generator.d.ts +3 -3
  717. package/src/ts/sync/generator.js +60 -59
  718. package/src/ts/sync/generator.js.map +1 -1
  719. package/src/ts/website/app/generator.d.ts +3 -3
  720. package/src/ts/website/app/generator.js +10 -10
  721. package/src/ts/website/app/generator.js.map +1 -1
  722. package/src/ts/website/app/schema.d.js +6 -0
  723. package/src/ts/website/app/schema.d.js.map +1 -0
  724. package/src/ts/website/app/schema.d.ts +1 -1
  725. package/src/ts/website/app/schema.json +11 -6
  726. package/src/ts/website/auth/generator.d.ts +4 -4
  727. package/src/ts/website/auth/generator.js +11 -10
  728. package/src/ts/website/auth/generator.js.map +1 -1
  729. package/src/ts/website/auth/schema.d.js +6 -0
  730. package/src/ts/website/auth/schema.d.js.map +1 -0
  731. package/src/ts/website/auth/schema.d.ts +1 -0
  732. package/src/ts/website/auth/schema.json +5 -0
  733. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  734. package/src/utils/agent-chat/agent-chat.js +29 -0
  735. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  736. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  737. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  738. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  739. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  740. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  741. package/src/utils/agent-connection/agent-connection.d.ts +117 -25
  742. package/src/utils/agent-connection/agent-connection.js +411 -103
  743. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  744. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  745. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  746. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  747. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  748. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  749. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +22 -32
  750. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  751. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  752. package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +36 -0
  753. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  754. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  755. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  756. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  757. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  758. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  759. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +99 -0
  760. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  761. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  762. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  763. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +5 -18
  764. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  765. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +66 -0
  766. package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
  767. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  768. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  769. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +11 -3
  770. package/src/utils/agent-core-constructs/agent-core-constructs.js +86 -38
  771. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  772. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +4 -0
  773. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +50 -0
  774. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +487 -0
  775. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  776. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +449 -0
  777. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  778. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +80 -12
  779. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  780. package/src/utils/api-constructs/api-constructs.d.ts +2 -2
  781. package/src/utils/api-constructs/api-constructs.js +30 -31
  782. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  783. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +3 -0
  784. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +23 -6
  785. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +58 -0
  786. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  787. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +51 -15
  788. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  789. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -8
  790. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +94 -4
  791. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  792. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  793. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  794. package/src/utils/api-constructs/open-api-metadata.d.ts +2 -2
  795. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  796. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  797. package/src/utils/ast/website.d.ts +5 -1
  798. package/src/utils/ast/website.js +18 -20
  799. package/src/utils/ast/website.js.map +1 -1
  800. package/src/utils/ast.d.ts +33 -1
  801. package/src/utils/ast.js +130 -70
  802. package/src/utils/ast.js.map +1 -1
  803. package/src/utils/bundle/bundle.d.ts +1 -1
  804. package/src/utils/bundle/bundle.js +50 -47
  805. package/src/utils/bundle/bundle.js.map +1 -1
  806. package/src/utils/commands.js +47 -26
  807. package/src/utils/commands.js.map +1 -1
  808. package/src/utils/config/index.d.ts +5 -5
  809. package/src/utils/config/index.js +5 -4
  810. package/src/utils/config/index.js.map +1 -1
  811. package/src/utils/config/utils.d.ts +13 -3
  812. package/src/utils/config/utils.js +65 -43
  813. package/src/utils/config/utils.js.map +1 -1
  814. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +1 -1
  815. package/src/utils/connection/open-api/react.d.ts +6 -6
  816. package/src/utils/connection/open-api/react.js +81 -77
  817. package/src/utils/connection/open-api/react.js.map +1 -1
  818. package/src/utils/containers.d.ts +1 -1
  819. package/src/utils/containers.js +22 -23
  820. package/src/utils/containers.js.map +1 -1
  821. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +18 -0
  822. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +48 -0
  823. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -0
  824. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +43 -0
  825. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +105 -0
  826. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +72 -0
  827. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +155 -0
  828. package/src/utils/files/common/scripts/src/dynamodb/create-local-table.ts.template +195 -0
  829. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  830. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +106 -0
  831. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
  832. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  833. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  834. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  835. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +117 -0
  836. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +2 -2
  837. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  838. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
  839. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  840. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  841. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  842. package/src/utils/format.d.ts +45 -2
  843. package/src/utils/format.js +323 -81
  844. package/src/utils/format.js.map +1 -1
  845. package/src/utils/fs.d.ts +1 -1
  846. package/src/utils/fs.js +14 -13
  847. package/src/utils/fs.js.map +1 -1
  848. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  849. package/src/utils/function-constructs/function-constructs.d.ts +2 -2
  850. package/src/utils/function-constructs/function-constructs.js +21 -26
  851. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  852. package/src/utils/generators.d.ts +4 -0
  853. package/src/utils/generators.js +18 -20
  854. package/src/utils/generators.js.map +1 -1
  855. package/src/utils/git.d.ts +1 -1
  856. package/src/utils/git.js +19 -34
  857. package/src/utils/git.js.map +1 -1
  858. package/src/utils/iac-providers.js +5 -5
  859. package/src/utils/iac-providers.js.map +1 -1
  860. package/src/utils/iac.d.ts +1 -1
  861. package/src/utils/iac.js +12 -14
  862. package/src/utils/iac.js.map +1 -1
  863. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +123 -14
  864. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
  865. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +106 -6
  866. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
  867. package/src/utils/identity-constructs/identity-constructs.d.ts +2 -2
  868. package/src/utils/identity-constructs/identity-constructs.js +24 -28
  869. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  870. package/src/utils/install.d.ts +32 -0
  871. package/src/utils/install.js +56 -0
  872. package/src/utils/install.js.map +1 -0
  873. package/src/utils/js.d.ts +4 -0
  874. package/src/utils/js.js +27 -20
  875. package/src/utils/js.js.map +1 -1
  876. package/src/utils/mcp.d.ts +25 -0
  877. package/src/utils/mcp.js +74 -0
  878. package/src/utils/mcp.js.map +1 -0
  879. package/src/utils/metrics.d.ts +9 -3
  880. package/src/utils/metrics.js +61 -46
  881. package/src/utils/metrics.js.map +1 -1
  882. package/src/utils/mock-project-graph.js +8 -12
  883. package/src/utils/mock-project-graph.js.map +1 -1
  884. package/src/utils/names.d.ts +22 -0
  885. package/src/utils/names.js +44 -48
  886. package/src/utils/names.js.map +1 -1
  887. package/src/utils/npm-scope.d.ts +1 -1
  888. package/src/utils/npm-scope.js +9 -17
  889. package/src/utils/npm-scope.js.map +1 -1
  890. package/src/utils/nx.d.ts +25 -4
  891. package/src/utils/nx.js +144 -75
  892. package/src/utils/nx.js.map +1 -1
  893. package/src/utils/nxlv-python.d.ts +1 -1
  894. package/src/utils/nxlv-python.js +27 -15
  895. package/src/utils/nxlv-python.js.map +1 -1
  896. package/src/utils/object.js +5 -11
  897. package/src/utils/object.js.map +1 -1
  898. package/src/utils/paths.d.ts +1 -1
  899. package/src/utils/paths.js +11 -15
  900. package/src/utils/paths.js.map +1 -1
  901. package/src/utils/pkg-manager.js +4 -9
  902. package/src/utils/pkg-manager.js.map +1 -1
  903. package/src/utils/pnpm-workspace.d.ts +1 -1
  904. package/src/utils/pnpm-workspace.js +22 -22
  905. package/src/utils/pnpm-workspace.js.map +1 -1
  906. package/src/utils/port.d.ts +31 -3
  907. package/src/utils/port.js +72 -12
  908. package/src/utils/port.js.map +1 -1
  909. package/src/utils/py.d.ts +16 -3
  910. package/src/utils/py.js +72 -47
  911. package/src/utils/py.js.map +1 -1
  912. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +12 -2
  913. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +35 -16
  914. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +42 -48
  915. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +31 -16
  916. package/src/utils/rdb-constructs/rdb-constructs.d.ts +5 -4
  917. package/src/utils/rdb-constructs/rdb-constructs.js +31 -41
  918. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  919. package/src/utils/shared-constructs-constants.d.ts +1 -0
  920. package/src/utils/shared-constructs-constants.js +16 -15
  921. package/src/utils/shared-constructs-constants.js.map +1 -1
  922. package/src/utils/shared-constructs.d.ts +2 -2
  923. package/src/utils/shared-constructs.js +57 -54
  924. package/src/utils/shared-constructs.js.map +1 -1
  925. package/src/utils/shared-dynamodb-scripts.d.ts +11 -0
  926. package/src/utils/shared-dynamodb-scripts.js +25 -0
  927. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  928. package/src/utils/shared-infra-config.d.ts +1 -1
  929. package/src/utils/shared-infra-config.js +30 -31
  930. package/src/utils/shared-infra-config.js.map +1 -1
  931. package/src/utils/shared-infra-scripts.d.ts +11 -0
  932. package/src/utils/shared-infra-scripts.js +40 -0
  933. package/src/utils/shared-infra-scripts.js.map +1 -0
  934. package/src/utils/shared-rdb-scripts.d.ts +16 -0
  935. package/src/utils/shared-rdb-scripts.js +28 -0
  936. package/src/utils/shared-rdb-scripts.js.map +1 -0
  937. package/src/utils/shared-scripts.d.ts +2 -5
  938. package/src/utils/shared-scripts.js +12 -38
  939. package/src/utils/shared-scripts.js.map +1 -1
  940. package/src/utils/shared-shadcn.d.ts +1 -1
  941. package/src/utils/shared-shadcn.js +64 -72
  942. package/src/utils/shared-shadcn.js.map +1 -1
  943. package/src/utils/test.d.ts +13 -1
  944. package/src/utils/test.js +35 -23
  945. package/src/utils/test.js.map +1 -1
  946. package/src/utils/toml.d.ts +1 -1
  947. package/src/utils/toml.js +10 -14
  948. package/src/utils/toml.js.map +1 -1
  949. package/src/utils/versions.d.ts +116 -84
  950. package/src/utils/versions.js +124 -102
  951. package/src/utils/versions.js.map +1 -1
  952. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +73 -5
  953. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
  954. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +68 -19
  955. package/src/utils/website-constructs/website-constructs.d.ts +2 -2
  956. package/src/utils/website-constructs/website-constructs.js +31 -30
  957. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  958. package/bin/aws-nx-mcp.js +0 -17
  959. package/bin/aws-nx-mcp.js.map +0 -1
  960. package/sdk/connection.d.ts +0 -6
  961. package/sdk/connection.js +0 -10
  962. package/sdk/connection.js.map +0 -1
  963. package/sdk/open-api.d.ts +0 -10
  964. package/sdk/open-api.js +0 -15
  965. package/sdk/open-api.js.map +0 -1
  966. package/sdk/py.d.ts +0 -14
  967. package/sdk/py.js +0 -18
  968. package/sdk/py.js.map +0 -1
  969. package/sdk/terraform.d.ts +0 -6
  970. package/sdk/terraform.js +0 -11
  971. package/sdk/terraform.js.map +0 -1
  972. package/sdk/ts.d.ts +0 -29
  973. package/sdk/ts.js +0 -47
  974. package/sdk/ts.js.map +0 -1
  975. package/sdk/utils/ast.js +0 -12
  976. package/sdk/utils/ast.js.map +0 -1
  977. package/sdk/utils/format.js +0 -10
  978. package/sdk/utils/format.js.map +0 -1
  979. package/sdk/utils/test.js +0 -10
  980. package/sdk/utils/test.js.map +0 -1
  981. package/src/connection/agent-serve-local.js +0 -48
  982. package/src/connection/agent-serve-local.js.map +0 -1
  983. package/src/connection/serve-local.d.ts +0 -15
  984. package/src/connection/serve-local.js +0 -41
  985. package/src/connection/serve-local.js.map +0 -1
  986. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  987. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  988. package/src/py/agent/react-connection/serve-local.js +0 -30
  989. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  990. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  991. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  992. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  993. package/src/ts/agent/react-connection/serve-local.d.ts +0 -13
  994. package/src/ts/agent/react-connection/serve-local.js +0 -19
  995. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  996. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  997. package/src/ts/lib/eslint.d.ts +0 -14
  998. package/src/ts/lib/eslint.js +0 -90
  999. package/src/ts/lib/eslint.js.map +0 -1
  1000. package/src/ts/lib/grit/eslint-dependency-checks-warn.grit +0 -1
  1001. package/src/ts/rdb/files/scripts/docker-pull.ts.template +0 -15
  1002. package/src/ts/rdb/files/scripts/docker-start.ts.template +0 -84
  1003. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1004. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1005. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1006. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1007. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1008. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1009. /package/{bin → src/bin}/aws-nx-mcp.d.ts +0 -0
  1010. /package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +0 -0
  1011. /package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +0 -0
  1012. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1013. /package/src/utils/files/common/scripts/src/{infra-deploy.ts.template → infra/infra-deploy.ts.template} +0 -0
  1014. /package/src/utils/files/common/scripts/src/{infra-destroy.ts.template → infra/infra-destroy.ts.template} +0 -0
  1015. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1016. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +0 -0
  1017. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
@@ -22,144 +22,6 @@ datasource db {
22
22
  "
23
23
  `;
24
24
 
25
- exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/scripts/docker-pull.ts 1`] = `
26
- "import { spawnSync } from 'child_process';
27
-
28
- const ENGINE = 'docker';
29
- const image = process.argv[2];
30
-
31
- const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
32
- stdio: 'ignore',
33
- });
34
-
35
- if (inspect.status !== 0) {
36
- const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
37
- if (pull.status !== 0) {
38
- process.exit(pull.status ?? 1);
39
- }
40
- }
41
- "
42
- `;
43
-
44
- exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/scripts/docker-start.ts 1`] = `
45
- "import { spawn, spawnSync } from 'child_process';
46
-
47
- const ENGINE = 'docker';
48
-
49
- const [containerName, image, hostPort, dbName, dbPassword] =
50
- process.argv.slice(2);
51
-
52
- const containerExists = (): boolean =>
53
- spawnSync(ENGINE, ['container', 'inspect', containerName], {
54
- stdio: 'ignore',
55
- }).status === 0;
56
-
57
- const isRunning = (): boolean => {
58
- const result = spawnSync(
59
- ENGINE,
60
- ['container', 'inspect', '-f', '{{.State.Running}}', containerName],
61
- { encoding: 'utf-8' },
62
- );
63
- return result.status === 0 && result.stdout.trim() === 'true';
64
- };
65
-
66
- if (containerExists()) {
67
- if (!isRunning()) {
68
- const start = spawnSync(ENGINE, ['start', containerName], {
69
- stdio: 'inherit',
70
- });
71
- if (start.status !== 0) process.exit(start.status ?? 1);
72
- }
73
- } else {
74
- const runArgs = [
75
- 'run',
76
- '--name',
77
- containerName,
78
- '-e',
79
- \`MYSQL_DATABASE=\${dbName}\`,
80
- '-e',
81
- \`MYSQL_ROOT_PASSWORD=\${dbPassword}\`,
82
- '-p',
83
- \`\${hostPort}:3306\`,
84
- '-v',
85
- \`\${containerName}-data:/var/lib/mysql\`,
86
- '-d',
87
- image,
88
- ];
89
- const create = spawnSync(ENGINE, runArgs, { stdio: 'inherit' });
90
- if (create.status !== 0) process.exit(create.status ?? 1);
91
- }
92
-
93
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
94
- stdio: ['ignore', 'inherit', 'inherit'],
95
- });
96
-
97
- let exiting = false;
98
-
99
- const cleanup = () => {
100
- if (exiting) return;
101
- exiting = true;
102
- spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
103
- logs.kill();
104
- process.exit(0);
105
- };
106
-
107
- process.on('SIGTERM', cleanup);
108
- process.on('SIGINT', cleanup);
109
- process.on('SIGHUP', cleanup);
110
-
111
- logs.on('exit', (code) => {
112
- if (!exiting) process.exit(code ?? 0);
113
- });
114
- "
115
- `;
116
-
117
- exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/scripts/wait-for-db.ts 1`] = `
118
- "import { createConnection, Connection } from 'mariadb';
119
-
120
- const noop = () => undefined;
121
-
122
- const [portArg, dbArg, userArg, passwordArg] = process.argv.slice(2);
123
- const timeoutAt = Date.now() + 60000;
124
-
125
- while (Date.now() < timeoutAt) {
126
- let conn: Connection | undefined;
127
- try {
128
- conn = await createConnection({
129
- host: 'localhost',
130
- port: parseInt(portArg),
131
- user: userArg,
132
- password: passwordArg,
133
- database: dbArg,
134
- connectTimeout: 500,
135
- allowPublicKeyRetrieval: true,
136
- });
137
- await conn.end();
138
- console.log('Database is ready.');
139
- process.exit(0);
140
- } catch {
141
- console.log('Database is not ready.');
142
- await conn?.end().catch(noop);
143
- }
144
- await new Promise((r) => setTimeout(r, 200));
145
- }
146
-
147
- throw new Error(\`Timed out waiting for mysql on port \${portArg}\`);
148
- "
149
- `;
150
-
151
- exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/constants.ts 1`] = `
152
- "export const DB_PACKAGE_NAME = 'Db';
153
-
154
- // Local development connection details (used when SERVE_LOCAL=true, see serve-local Nx target)
155
- export const LOCAL_DB_PORT = 3306;
156
- export const LOCAL_DB_HOST = 'localhost';
157
- export const LOCAL_DB_NAME = 'database_name';
158
- export const LOCAL_DB_USER = 'root';
159
- export const LOCAL_DB_PASSWORD = 'password';
160
- "
161
- `;
162
-
163
25
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/create-db-user-handler.ts 1`] = `
164
26
  "import type { CloudFormationCustomResourceEvent } from 'aws-lambda';
165
27
  import { randomBytes } from 'node:crypto';
@@ -206,7 +68,7 @@ const ensureDatabaseUser = async (dbUser: string): Promise<void> => {
206
68
  [
207
69
  \`CREATE USER IF NOT EXISTS \${quotedUser}@\${quotedHost} IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'\`,
208
70
  \`ALTER USER \${quotedUser}@\${quotedHost} IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS' REQUIRE SSL\`,
209
- \`GRANT ALL PRIVILEGES ON \${quotedDbName}.* TO \${quotedUser}@\${quotedHost}\`,
71
+ \`GRANT SELECT, INSERT, UPDATE, DELETE ON \${quotedDbName}.* TO \${quotedUser}@\${quotedHost}\`,
210
72
  ].join(';\\n'),
211
73
  );
212
74
  } finally {
@@ -237,8 +99,7 @@ export const handler = async (
237
99
  `;
238
100
 
239
101
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/index.ts 1`] = `
240
- "export { DB_PACKAGE_NAME } from './constants.js';
241
- export { getPrisma } from './prisma.js';
102
+ "export { getPrisma } from './prisma.js';
242
103
  "
243
104
  `;
244
105
 
@@ -277,26 +138,30 @@ exports[`ts#rdb generator > should add mysql prisma dependencies when engine is
277
138
  "import { PrismaMariaDb } from '@prisma/adapter-mariadb';
278
139
  import { Signer } from '@aws-sdk/rds-signer';
279
140
  import { Prisma, PrismaClient } from '../generated/prisma/client.js';
280
- import {
281
- DB_PACKAGE_NAME,
282
- LOCAL_DB_HOST,
283
- LOCAL_DB_NAME,
284
- LOCAL_DB_PASSWORD,
285
- LOCAL_DB_PORT,
286
- LOCAL_DB_USER,
287
- } from './constants.js';
141
+ import { readFileSync } from 'fs';
142
+ import { join, dirname } from 'path';
143
+ import { fileURLToPath } from 'url';
288
144
  import { getDatabaseConfig } from './utils.js';
289
145
 
146
+ // Generated: must match runtimeConfigKey in config.json
147
+ const runtimeConfigKey = 'Db';
148
+
149
+ const __dirname = dirname(fileURLToPath(import.meta.url));
150
+ // config.json is only present in local dev (not included in the deployed bundle); guard with LOCAL_DEV check
151
+ const localDev = () =>
152
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).localDev;
153
+
290
154
  export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
291
155
  log: LogOpts[] = ['warn', 'error'] as LogOpts[],
292
156
  ): Promise<PrismaClient<LogOpts>> => {
293
- if (process.env.SERVE_LOCAL === 'true') {
157
+ if (process.env.LOCAL_DEV === 'true') {
158
+ const { host, port, dbName, dbUser, dbPassword } = localDev();
294
159
  const adapter = new PrismaMariaDb({
295
- host: LOCAL_DB_HOST,
296
- port: LOCAL_DB_PORT,
297
- database: LOCAL_DB_NAME,
298
- user: LOCAL_DB_USER,
299
- password: LOCAL_DB_PASSWORD,
160
+ host,
161
+ port,
162
+ database: dbName,
163
+ user: dbUser,
164
+ password: dbPassword,
300
165
  allowPublicKeyRetrieval: true,
301
166
  });
302
167
  return new PrismaClient({
@@ -306,7 +171,7 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
306
171
  }
307
172
 
308
173
  const { hostname, port, database, dbUser, region } =
309
- await getDatabaseConfig(DB_PACKAGE_NAME);
174
+ await getDatabaseConfig(runtimeConfigKey);
310
175
  const iamAuthToken = await new Signer({
311
176
  hostname,
312
177
  port,
@@ -431,6 +296,9 @@ const transientErrorPatterns = [
431
296
  'ECONNREFUSED',
432
297
  'ENOTFOUND',
433
298
  'P1000', // Prisma: authentication failed
299
+ 'P1001', // Prisma: can't reach database server
300
+ 'P1002', // Prisma: database server reached but timed out
301
+ 'P1010', // Prisma: user denied access (IAM auth grant not yet propagated)
434
302
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
435
303
  ];
436
304
 
@@ -663,6 +531,21 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
663
531
  * @default true
664
532
  */
665
533
  readonly enableKeyRotation?: boolean;
534
+
535
+ /**
536
+ * Whether to export Aurora engine logs to CloudWatch Logs.
537
+ * See https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html
538
+ *
539
+ * @default false
540
+ */
541
+ readonly enableCloudwatchLogs?: boolean;
542
+
543
+ /**
544
+ * Whether to enable Performance Insights on the Aurora writer instance.
545
+ *
546
+ * @default true
547
+ */
548
+ readonly enablePerformanceInsights?: boolean;
666
549
  }
667
550
 
668
551
  /**
@@ -692,6 +575,8 @@ export abstract class AuroraDatabase extends Construct {
692
575
  deletionProtection = true,
693
576
  removalPolicy = RemovalPolicy.RETAIN,
694
577
  enableKeyRotation = true,
578
+ enableCloudwatchLogs = false,
579
+ enablePerformanceInsights = true,
695
580
  engine,
696
581
  engineVersion,
697
582
  ...clusterProps
@@ -707,12 +592,24 @@ export abstract class AuroraDatabase extends Construct {
707
592
  vpc,
708
593
  vpcSubnets,
709
594
  engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
710
- writer: writer ?? ClusterInstance.serverlessV2('writer'),
595
+ writer:
596
+ writer ??
597
+ ClusterInstance.serverlessV2('writer', {
598
+ enablePerformanceInsights,
599
+ performanceInsightEncryptionKey: enablePerformanceInsights
600
+ ? key
601
+ : undefined,
602
+ }),
711
603
  credentials: Credentials.fromGeneratedSecret(adminUser, {
712
604
  encryptionKey: key,
713
605
  }),
714
606
  iamAuthentication: true,
715
607
  monitoringInterval: Duration.seconds(5),
608
+ cloudwatchLogsExports: enableCloudwatchLogs
609
+ ? engine.type === 'mysql'
610
+ ? ['audit', 'error', 'general', 'slowquery']
611
+ : ['postgresql']
612
+ : undefined,
716
613
  defaultDatabaseName: databaseName,
717
614
  storageEncrypted: true,
718
615
  storageEncryptionKey: key,
@@ -809,32 +706,19 @@ export abstract class AuroraDatabase extends Construct {
809
706
  timeout: Duration.minutes(5),
810
707
  tracing: Tracing.ACTIVE,
811
708
  vpc,
812
- environment:
813
- engine.type === 'mysql'
814
- ? {
815
- DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
816
- }
817
- : {
818
- HOSTNAME: databaseHostname,
819
- DATABASE: databaseName,
820
- PORT: databasePort.toString(),
821
- DBUSER: this.dbUser,
822
- },
709
+ environment: {
710
+ DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
711
+ },
823
712
  architecture: Architecture.ARM_64,
824
713
  });
825
714
 
826
- if (engine.type === 'mysql') {
827
- this.cluster.connections.allowDefaultPortFrom(migrationHandler);
828
- this.grantSecretRead(migrationHandler);
829
- } else {
830
- this.allowDefaultPortFrom(migrationHandler);
831
- this.grantConnect(migrationHandler);
832
- }
715
+ this.cluster.connections.allowDefaultPortFrom(migrationHandler);
716
+ this.grantSecretRead(migrationHandler);
833
717
 
834
- const trigger = new Trigger(this, 'MigrationTrigger', {
718
+ const migrationTrigger = new Trigger(this, 'MigrationTrigger', {
835
719
  handler: migrationHandler,
836
720
  });
837
- trigger.node.addDependency(createDbUserResource);
721
+ migrationTrigger.node.addDependency(createDbUserResource);
838
722
 
839
723
  new CfnOutput(this, 'ClusterEndpoint', {
840
724
  value: this.cluster.clusterEndpoint.hostname,
@@ -874,17 +758,14 @@ export abstract class AuroraDatabase extends Construct {
874
758
 
875
759
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL 2`] = `
876
760
  "import { defineConfig } from 'prisma/config';
761
+ import { readFileSync } from 'fs';
877
762
 
878
763
  const getDatabaseUrl = async () => {
879
- if (process.env.SERVE_LOCAL === 'true') {
880
- const {
881
- LOCAL_DB_HOST,
882
- LOCAL_DB_NAME,
883
- LOCAL_DB_PASSWORD,
884
- LOCAL_DB_PORT,
885
- LOCAL_DB_USER,
886
- } = await import('./src/constants.js');
887
- return \`mysql://\${LOCAL_DB_USER}:\${LOCAL_DB_PASSWORD}@\${LOCAL_DB_HOST}:\${LOCAL_DB_PORT}/\${LOCAL_DB_NAME}\`;
764
+ if (process.env.LOCAL_DEV === 'true') {
765
+ const { host, port, dbName, dbUser, dbPassword } = JSON.parse(
766
+ readFileSync('config.json', 'utf-8'),
767
+ ).localDev;
768
+ return \`mysql://\${dbUser}:\${dbPassword}@\${host}:\${port}/\${dbName}\`;
888
769
  }
889
770
  return process.env.DATABASE_URL;
890
771
  };
@@ -911,15 +792,15 @@ terraform {
911
792
  required_providers {
912
793
  aws = {
913
794
  source = "hashicorp/aws"
914
- version = "~> 6.33"
795
+ version = "6.52.0"
915
796
  }
916
797
  null = {
917
798
  source = "hashicorp/null"
918
- version = ">= 3.0"
799
+ version = "3.3.0"
919
800
  }
920
801
  random = {
921
802
  source = "hashicorp/random"
922
- version = ">= 3.0"
803
+ version = "3.9.0"
923
804
  }
924
805
  }
925
806
  }
@@ -1063,10 +944,19 @@ variable "tags" {
1063
944
  default = {}
1064
945
  }
1065
946
 
947
+ # Suffix appended to physical resource names so that multiple deployments
948
+ # (e.g. separate environments in the same account and region) don't collide.
949
+ resource "random_string" "suffix" {
950
+ length = 8
951
+ special = false
952
+ upper = false
953
+ }
954
+
1066
955
  locals {
1067
956
  default_port = var.engine == "aurora-mysql" ? 3306 : 5432
1068
957
  default_engine_version = var.engine == "aurora-mysql" ? "8.0.mysql_aurora.3.12.0" : "17.7"
1069
958
  parameter_group_family = var.engine == "aurora-mysql" ? "aurora-mysql8.0" : "aurora-postgresql\${split(".", coalesce(var.engine_version, local.default_engine_version))[0]}"
959
+ cluster_name = "\${var.name}-aurora-\${random_string.suffix.result}"
1070
960
  }
1071
961
 
1072
962
  resource "aws_rds_cluster_parameter_group" "database" {
@@ -1164,7 +1054,7 @@ resource "aws_security_group" "database" {
1164
1054
  }
1165
1055
 
1166
1056
  resource "aws_db_subnet_group" "database" {
1167
- name = "\${var.name}-aurora"
1057
+ name = local.cluster_name
1168
1058
  subnet_ids = var.subnet_ids
1169
1059
 
1170
1060
  tags = merge(var.tags, {
@@ -1204,7 +1094,7 @@ resource "aws_secretsmanager_secret_version" "credentials" {
1204
1094
  resource "aws_rds_cluster" "database" {
1205
1095
  #checkov:skip=CKV2_AWS_27:Query logging can be enabled with enable_cloudwatch_logs; this module defaults to CDK-equivalent behavior unless logging is requested
1206
1096
  #checkov:skip=CKV_AWS_139:Deletion protection is enabled but checkov is unable to detect it correctly
1207
- cluster_identifier = "\${var.name}-aurora"
1097
+ cluster_identifier = local.cluster_name
1208
1098
  engine = var.engine
1209
1099
  engine_version = coalesce(var.engine_version, local.default_engine_version)
1210
1100
  database_name = var.database_name
@@ -1218,7 +1108,7 @@ resource "aws_rds_cluster" "database" {
1218
1108
  kms_key_id = aws_kms_key.database.arn
1219
1109
  deletion_protection = var.deletion_protection
1220
1110
  skip_final_snapshot = var.skip_final_snapshot
1221
- final_snapshot_identifier = var.skip_final_snapshot ? null : "\${var.name}-aurora-final-snapshot"
1111
+ final_snapshot_identifier = var.skip_final_snapshot ? null : "\${local.cluster_name}-final-snapshot"
1222
1112
  iam_database_authentication_enabled = true
1223
1113
  monitoring_interval = 5
1224
1114
  monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn
@@ -1238,7 +1128,7 @@ resource "aws_rds_cluster" "database" {
1238
1128
  resource "aws_rds_cluster_instance" "database" {
1239
1129
  count = var.instance_count
1240
1130
 
1241
- identifier = "\${var.name}-aurora-\${count.index + 1}"
1131
+ identifier = "\${local.cluster_name}-\${count.index + 1}"
1242
1132
  cluster_identifier = aws_rds_cluster.database.id
1243
1133
  instance_class = "db.serverless"
1244
1134
  engine = aws_rds_cluster.database.engine
@@ -1292,7 +1182,7 @@ resource "aws_vpc_security_group_ingress_rule" "rotation_to_database" {
1292
1182
  resource "aws_cloudformation_stack" "credentials_rotation" {
1293
1183
  #checkov:skip=CKV_AWS_124:SNS event notifications are not required for the credentials rotation stack
1294
1184
  count = var.enable_credential_rotation ? 1 : 0
1295
- name = "\${var.name}-aurora-credentials-rotation"
1185
+ name = "\${local.cluster_name}-credentials-rotation"
1296
1186
 
1297
1187
  capabilities = ["CAPABILITY_IAM", "CAPABILITY_AUTO_EXPAND"]
1298
1188
 
@@ -1306,7 +1196,7 @@ resource "aws_cloudformation_stack" "credentials_rotation" {
1306
1196
  SecretId = aws_secretsmanager_secret.credentials.arn
1307
1197
  HostedRotationLambda = {
1308
1198
  RotationType = var.engine == "aurora-mysql" ? "MySQLSingleUser" : "PostgreSQLSingleUser"
1309
- RotationLambdaName = "\${var.name}-aurora-credentials-rotation"
1199
+ RotationLambdaName = "\${local.cluster_name}-credentials-rotation"
1310
1200
  VpcSecurityGroupIds = aws_security_group.rotation[0].id
1311
1201
  VpcSubnetIds = join(",", var.lambda_subnet_ids)
1312
1202
  }
@@ -1386,7 +1276,7 @@ resource "aws_security_group" "proxy" {
1386
1276
  resource "aws_db_proxy" "aurora" {
1387
1277
  count = var.enable_rds_proxy ? 1 : 0
1388
1278
 
1389
- name = "\${var.name}-proxy"
1279
+ name = "\${var.name}-proxy-\${random_string.suffix.result}"
1390
1280
  default_auth_scheme = "IAM_AUTH"
1391
1281
  engine_family = var.engine == "aurora-mysql" ? "MYSQL" : "POSTGRESQL"
1392
1282
  role_arn = aws_iam_role.proxy[0].arn
@@ -1435,9 +1325,9 @@ resource "null_resource" "proxy_target_ready" {
1435
1325
  deadline=$((start_time + 600))
1436
1326
  while true; do
1437
1327
  target_state=$(aws rds describe-db-proxy-targets \\
1438
- --region \${data.aws_region.current.region} \\
1439
- --db-proxy-name \${self.triggers.db_proxy_name} \\
1440
- --target-group-name \${self.triggers.target_group_name} \\
1328
+ --region "$AWS_REGION" \\
1329
+ --db-proxy-name "$DB_PROXY_NAME" \\
1330
+ --target-group-name "$TARGET_GROUP_NAME" \\
1441
1331
  --query "Targets[?Type=='RDS_INSTANCE'] | [0].TargetHealth.State" \\
1442
1332
  --output text)
1443
1333
 
@@ -1447,13 +1337,19 @@ resource "null_resource" "proxy_target_ready" {
1447
1337
 
1448
1338
  current_time=$(date +%s)
1449
1339
  if [ "$current_time" -ge "$deadline" ]; then
1450
- echo "RDS Proxy target \${self.triggers.db_cluster_identifier} did not become AVAILABLE within 10 minutes. Last state: $target_state"
1340
+ echo "RDS Proxy target $DB_CLUSTER_IDENTIFIER did not become AVAILABLE within 10 minutes. Last state: $target_state"
1451
1341
  exit 1
1452
1342
  fi
1453
1343
 
1454
1344
  sleep 10
1455
1345
  done
1456
1346
  EOT
1347
+ environment = {
1348
+ AWS_REGION = data.aws_region.current.region
1349
+ DB_PROXY_NAME = self.triggers.db_proxy_name
1350
+ TARGET_GROUP_NAME = self.triggers.target_group_name
1351
+ DB_CLUSTER_IDENTIFIER = self.triggers.db_cluster_identifier
1352
+ }
1457
1353
  }
1458
1354
 
1459
1355
  depends_on = [
@@ -1532,7 +1428,7 @@ resource "aws_iam_role_policy_attachment" "backup" {
1532
1428
  resource "aws_backup_vault" "database" {
1533
1429
  count = var.enable_backup ? 1 : 0
1534
1430
 
1535
- name = "\${var.name}-aurora-backup"
1431
+ name = "\${local.cluster_name}-backup"
1536
1432
  kms_key_arn = aws_kms_key.database.arn
1537
1433
  tags = var.tags
1538
1434
  }
@@ -1540,7 +1436,7 @@ resource "aws_backup_vault" "database" {
1540
1436
  resource "aws_backup_plan" "database" {
1541
1437
  count = var.enable_backup ? 1 : 0
1542
1438
 
1543
- name = "\${var.name}-aurora-backup"
1439
+ name = "\${local.cluster_name}-backup"
1544
1440
 
1545
1441
  rule {
1546
1442
  rule_name = "daily-backup"
@@ -1654,19 +1550,19 @@ exports[`ts#rdb generator > should generate terraform modules when iac is Terraf
1654
1550
  required_providers {
1655
1551
  archive = {
1656
1552
  source = "hashicorp/archive"
1657
- version = "~> 2.5"
1553
+ version = "2.8.0"
1658
1554
  }
1659
1555
  aws = {
1660
1556
  source = "hashicorp/aws"
1661
- version = "~> 6.33"
1557
+ version = "6.52.0"
1662
1558
  }
1663
1559
  null = {
1664
1560
  source = "hashicorp/null"
1665
- version = ">= 3.0"
1561
+ version = "3.3.0"
1666
1562
  }
1667
1563
  random = {
1668
1564
  source = "hashicorp/random"
1669
- version = ">= 3.0"
1565
+ version = "3.9.0"
1670
1566
  }
1671
1567
  }
1672
1568
  }
@@ -1791,10 +1687,12 @@ resource "random_string" "suffix" {
1791
1687
  }
1792
1688
 
1793
1689
  locals {
1794
- create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
1795
- migration_function_name = "db-migration-\${random_string.suffix.result}"
1690
+ config = jsondecode(file("\${path.module}/../../../../../../../packages/db/config.json"))
1691
+ runtime_config_key = local.config.runtimeConfigKey
1692
+ create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
1693
+ migration_function_name = "db-migration-\${random_string.suffix.result}"
1796
1694
  create_db_user_function_name = "db-create-db-user-\${random_string.suffix.result}"
1797
- database_runtime_user = "db_\${random_string.suffix.result}"
1695
+ database_runtime_user = "db_\${random_string.suffix.result}"
1798
1696
  }
1799
1697
 
1800
1698
  module "aurora" {
@@ -1860,7 +1758,7 @@ module "add_rdb_to_runtime_config" {
1860
1758
  source = "../../../core/runtime-config/entry"
1861
1759
 
1862
1760
  namespace = "database"
1863
- key = "Db"
1761
+ key = local.runtime_config_key
1864
1762
  value = {
1865
1763
  hostname = module.aurora.cluster_endpoint
1866
1764
  port = module.aurora.cluster_port
@@ -1873,9 +1771,8 @@ module "add_rdb_to_runtime_config" {
1873
1771
 
1874
1772
  resource "aws_ecr_repository" "migration_handler" {
1875
1773
  #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
1876
- #checkov:skip=CKV_AWS_51:Mutable tags are intentional; the migration handler is always pushed as latest and redeployment is gated on docker_digest changes in null_resource.docker_publish
1877
1774
  name = "db-migration-\${random_string.suffix.result}"
1878
- image_tag_mutability = "MUTABLE"
1775
+ image_tag_mutability = "IMMUTABLE"
1879
1776
  force_delete = true
1880
1777
 
1881
1778
  image_scanning_configuration {
@@ -1926,19 +1823,31 @@ data "external" "docker_digest" {
1926
1823
  program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.docker_image_tag} --format '{{.Id}}')'\\"}' "]
1927
1824
  }
1928
1825
 
1826
+ locals {
1827
+ # Content-based, immutable image tag derived from the local image digest
1828
+ image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
1829
+ }
1830
+
1929
1831
  resource "null_resource" "docker_publish" {
1930
1832
  triggers = {
1931
1833
  docker_digest = data.external.docker_digest.result.digest
1932
1834
  repository_url = aws_ecr_repository.migration_handler.repository_url
1933
1835
  docker_image_tag = var.docker_image_tag
1836
+ image_tag = local.image_tag
1934
1837
  }
1935
1838
 
1936
1839
  provisioner "local-exec" {
1937
1840
  command = <<-EOT
1938
- aws ecr get-login-password --region \${data.aws_region.current.region} | docker login --username AWS --password-stdin \${self.triggers.repository_url}
1939
- docker tag \${self.triggers.docker_image_tag} \${self.triggers.repository_url}:latest
1940
- docker push \${self.triggers.repository_url}:latest
1841
+ aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
1842
+ docker tag "$DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
1843
+ docker push "$REPOSITORY_URL:$IMAGE_TAG"
1941
1844
  EOT
1845
+ environment = {
1846
+ AWS_REGION = data.aws_region.current.region
1847
+ REPOSITORY_URL = self.triggers.repository_url
1848
+ DOCKER_IMAGE_TAG = self.triggers.docker_image_tag
1849
+ IMAGE_TAG = self.triggers.image_tag
1850
+ }
1942
1851
  }
1943
1852
 
1944
1853
  depends_on = [aws_ecr_repository_policy.migration_handler]
@@ -1987,11 +1896,16 @@ resource "aws_iam_role_policy" "migration_handler_access" {
1987
1896
  {
1988
1897
  Effect = "Allow"
1989
1898
  Action = [
1990
- "rds-db:connect"
1899
+ "secretsmanager:GetSecretValue"
1991
1900
  ]
1992
- Resource = [
1993
- "arn:aws:rds-db:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:dbuser:\${var.enable_rds_proxy ? module.aurora.proxy_resource_id : module.aurora.cluster_resource_id}/\${local.database_runtime_user}"
1901
+ Resource = [module.aurora.secret_arn]
1902
+ },
1903
+ {
1904
+ Effect = "Allow"
1905
+ Action = [
1906
+ "kms:Decrypt"
1994
1907
  ]
1908
+ Resource = [module.aurora.kms_key_arn]
1995
1909
  }
1996
1910
  ]
1997
1911
  })
@@ -2080,7 +1994,7 @@ resource "aws_security_group" "migration_handler" {
2080
1994
 
2081
1995
  resource "aws_vpc_security_group_egress_rule" "migration_handler_to_database" {
2082
1996
  security_group_id = aws_security_group.migration_handler.id
2083
- referenced_security_group_id = module.aurora.security_group_id
1997
+ referenced_security_group_id = module.aurora.database_security_group_id
2084
1998
  from_port = module.aurora.cluster_port
2085
1999
  to_port = module.aurora.cluster_port
2086
2000
  ip_protocol = "tcp"
@@ -2122,7 +2036,7 @@ resource "aws_vpc_security_group_egress_rule" "create_db_user_https" {
2122
2036
  }
2123
2037
 
2124
2038
  resource "aws_vpc_security_group_ingress_rule" "migration_handler_to_database" {
2125
- security_group_id = module.aurora.security_group_id
2039
+ security_group_id = module.aurora.database_security_group_id
2126
2040
  referenced_security_group_id = aws_security_group.migration_handler.id
2127
2041
  from_port = module.aurora.cluster_port
2128
2042
  to_port = module.aurora.cluster_port
@@ -2196,10 +2110,10 @@ resource "null_resource" "create_db_user_trigger" {
2196
2110
  command = <<-EOT
2197
2111
  output_file=$(mktemp)
2198
2112
  response=$(aws lambda invoke \\
2199
- --region \${data.aws_region.current.region} \\
2200
- --function-name \${self.triggers.function_name} \\
2113
+ --region "$AWS_REGION" \\
2114
+ --function-name "$FUNCTION_NAME" \\
2201
2115
  --cli-binary-format raw-in-base64-out \\
2202
- --payload '{"RequestType":"Create","PhysicalResourceId":"db-user:\${self.triggers.db_user}"}' \\
2116
+ --payload "{\\"RequestType\\":\\"Create\\",\\"PhysicalResourceId\\":\\"db-user:$DB_USER\\"}" \\
2203
2117
  "$output_file")
2204
2118
  cat "$output_file"
2205
2119
  echo "$response"
@@ -2209,6 +2123,11 @@ resource "null_resource" "create_db_user_trigger" {
2209
2123
  fi
2210
2124
  rm -f "$output_file"
2211
2125
  EOT
2126
+ environment = {
2127
+ AWS_REGION = data.aws_region.current.region
2128
+ FUNCTION_NAME = self.triggers.function_name
2129
+ DB_USER = self.triggers.db_user
2130
+ }
2212
2131
  }
2213
2132
 
2214
2133
  depends_on = [aws_lambda_function.create_db_user, module.aurora]
@@ -2222,7 +2141,7 @@ resource "aws_lambda_function" "migration_handler" {
2222
2141
  package_type = "Image"
2223
2142
  function_name = local.migration_function_name
2224
2143
  role = aws_iam_role.migration_handler.arn
2225
- image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:latest"
2144
+ image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:\${local.image_tag}"
2226
2145
  memory_size = 1024
2227
2146
  timeout = 300
2228
2147
  architectures = ["arm64"]
@@ -2238,10 +2157,7 @@ resource "aws_lambda_function" "migration_handler" {
2238
2157
 
2239
2158
  environment {
2240
2159
  variables = {
2241
- HOSTNAME = module.aurora.cluster_endpoint
2242
- DATABASE = module.aurora.database_name
2243
- PORT = tostring(module.aurora.cluster_port)
2244
- DBUSER = local.database_runtime_user
2160
+ DATABASE_SECRET_ARN = module.aurora.secret_arn
2245
2161
  }
2246
2162
  }
2247
2163
 
@@ -2271,8 +2187,8 @@ resource "null_resource" "migration_trigger" {
2271
2187
  command = <<-EOT
2272
2188
  output_file=$(mktemp)
2273
2189
  response=$(aws lambda invoke \\
2274
- --region \${data.aws_region.current.region} \\
2275
- --function-name \${self.triggers.function_name} \\
2190
+ --region "$AWS_REGION" \\
2191
+ --function-name "$FUNCTION_NAME" \\
2276
2192
  --cli-binary-format raw-in-base64-out \\
2277
2193
  "$output_file")
2278
2194
  cat "$output_file"
@@ -2283,6 +2199,10 @@ resource "null_resource" "migration_trigger" {
2283
2199
  fi
2284
2200
  rm -f "$output_file"
2285
2201
  EOT
2202
+ environment = {
2203
+ AWS_REGION = data.aws_region.current.region
2204
+ FUNCTION_NAME = self.triggers.function_name
2205
+ }
2286
2206
  }
2287
2207
 
2288
2208
  depends_on = [
@@ -2361,15 +2281,15 @@ terraform {
2361
2281
  required_providers {
2362
2282
  aws = {
2363
2283
  source = "hashicorp/aws"
2364
- version = "~> 6.33"
2284
+ version = "6.52.0"
2365
2285
  }
2366
2286
  null = {
2367
2287
  source = "hashicorp/null"
2368
- version = ">= 3.0"
2288
+ version = "3.3.0"
2369
2289
  }
2370
2290
  random = {
2371
2291
  source = "hashicorp/random"
2372
- version = ">= 3.0"
2292
+ version = "3.9.0"
2373
2293
  }
2374
2294
  }
2375
2295
  }
@@ -2513,10 +2433,19 @@ variable "tags" {
2513
2433
  default = {}
2514
2434
  }
2515
2435
 
2436
+ # Suffix appended to physical resource names so that multiple deployments
2437
+ # (e.g. separate environments in the same account and region) don't collide.
2438
+ resource "random_string" "suffix" {
2439
+ length = 8
2440
+ special = false
2441
+ upper = false
2442
+ }
2443
+
2516
2444
  locals {
2517
2445
  default_port = var.engine == "aurora-mysql" ? 3306 : 5432
2518
2446
  default_engine_version = var.engine == "aurora-mysql" ? "8.0.mysql_aurora.3.12.0" : "17.7"
2519
2447
  parameter_group_family = var.engine == "aurora-mysql" ? "aurora-mysql8.0" : "aurora-postgresql\${split(".", coalesce(var.engine_version, local.default_engine_version))[0]}"
2448
+ cluster_name = "\${var.name}-aurora-\${random_string.suffix.result}"
2520
2449
  }
2521
2450
 
2522
2451
  resource "aws_rds_cluster_parameter_group" "database" {
@@ -2614,7 +2543,7 @@ resource "aws_security_group" "database" {
2614
2543
  }
2615
2544
 
2616
2545
  resource "aws_db_subnet_group" "database" {
2617
- name = "\${var.name}-aurora"
2546
+ name = local.cluster_name
2618
2547
  subnet_ids = var.subnet_ids
2619
2548
 
2620
2549
  tags = merge(var.tags, {
@@ -2654,7 +2583,7 @@ resource "aws_secretsmanager_secret_version" "credentials" {
2654
2583
  resource "aws_rds_cluster" "database" {
2655
2584
  #checkov:skip=CKV2_AWS_27:Query logging can be enabled with enable_cloudwatch_logs; this module defaults to CDK-equivalent behavior unless logging is requested
2656
2585
  #checkov:skip=CKV_AWS_139:Deletion protection is enabled but checkov is unable to detect it correctly
2657
- cluster_identifier = "\${var.name}-aurora"
2586
+ cluster_identifier = local.cluster_name
2658
2587
  engine = var.engine
2659
2588
  engine_version = coalesce(var.engine_version, local.default_engine_version)
2660
2589
  database_name = var.database_name
@@ -2668,7 +2597,7 @@ resource "aws_rds_cluster" "database" {
2668
2597
  kms_key_id = aws_kms_key.database.arn
2669
2598
  deletion_protection = var.deletion_protection
2670
2599
  skip_final_snapshot = var.skip_final_snapshot
2671
- final_snapshot_identifier = var.skip_final_snapshot ? null : "\${var.name}-aurora-final-snapshot"
2600
+ final_snapshot_identifier = var.skip_final_snapshot ? null : "\${local.cluster_name}-final-snapshot"
2672
2601
  iam_database_authentication_enabled = true
2673
2602
  monitoring_interval = 5
2674
2603
  monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn
@@ -2688,7 +2617,7 @@ resource "aws_rds_cluster" "database" {
2688
2617
  resource "aws_rds_cluster_instance" "database" {
2689
2618
  count = var.instance_count
2690
2619
 
2691
- identifier = "\${var.name}-aurora-\${count.index + 1}"
2620
+ identifier = "\${local.cluster_name}-\${count.index + 1}"
2692
2621
  cluster_identifier = aws_rds_cluster.database.id
2693
2622
  instance_class = "db.serverless"
2694
2623
  engine = aws_rds_cluster.database.engine
@@ -2742,7 +2671,7 @@ resource "aws_vpc_security_group_ingress_rule" "rotation_to_database" {
2742
2671
  resource "aws_cloudformation_stack" "credentials_rotation" {
2743
2672
  #checkov:skip=CKV_AWS_124:SNS event notifications are not required for the credentials rotation stack
2744
2673
  count = var.enable_credential_rotation ? 1 : 0
2745
- name = "\${var.name}-aurora-credentials-rotation"
2674
+ name = "\${local.cluster_name}-credentials-rotation"
2746
2675
 
2747
2676
  capabilities = ["CAPABILITY_IAM", "CAPABILITY_AUTO_EXPAND"]
2748
2677
 
@@ -2756,7 +2685,7 @@ resource "aws_cloudformation_stack" "credentials_rotation" {
2756
2685
  SecretId = aws_secretsmanager_secret.credentials.arn
2757
2686
  HostedRotationLambda = {
2758
2687
  RotationType = var.engine == "aurora-mysql" ? "MySQLSingleUser" : "PostgreSQLSingleUser"
2759
- RotationLambdaName = "\${var.name}-aurora-credentials-rotation"
2688
+ RotationLambdaName = "\${local.cluster_name}-credentials-rotation"
2760
2689
  VpcSecurityGroupIds = aws_security_group.rotation[0].id
2761
2690
  VpcSubnetIds = join(",", var.lambda_subnet_ids)
2762
2691
  }
@@ -2836,7 +2765,7 @@ resource "aws_security_group" "proxy" {
2836
2765
  resource "aws_db_proxy" "aurora" {
2837
2766
  count = var.enable_rds_proxy ? 1 : 0
2838
2767
 
2839
- name = "\${var.name}-proxy"
2768
+ name = "\${var.name}-proxy-\${random_string.suffix.result}"
2840
2769
  default_auth_scheme = "IAM_AUTH"
2841
2770
  engine_family = var.engine == "aurora-mysql" ? "MYSQL" : "POSTGRESQL"
2842
2771
  role_arn = aws_iam_role.proxy[0].arn
@@ -2885,9 +2814,9 @@ resource "null_resource" "proxy_target_ready" {
2885
2814
  deadline=$((start_time + 600))
2886
2815
  while true; do
2887
2816
  target_state=$(aws rds describe-db-proxy-targets \\
2888
- --region \${data.aws_region.current.region} \\
2889
- --db-proxy-name \${self.triggers.db_proxy_name} \\
2890
- --target-group-name \${self.triggers.target_group_name} \\
2817
+ --region "$AWS_REGION" \\
2818
+ --db-proxy-name "$DB_PROXY_NAME" \\
2819
+ --target-group-name "$TARGET_GROUP_NAME" \\
2891
2820
  --query "Targets[?Type=='RDS_INSTANCE'] | [0].TargetHealth.State" \\
2892
2821
  --output text)
2893
2822
 
@@ -2897,13 +2826,19 @@ resource "null_resource" "proxy_target_ready" {
2897
2826
 
2898
2827
  current_time=$(date +%s)
2899
2828
  if [ "$current_time" -ge "$deadline" ]; then
2900
- echo "RDS Proxy target \${self.triggers.db_cluster_identifier} did not become AVAILABLE within 10 minutes. Last state: $target_state"
2829
+ echo "RDS Proxy target $DB_CLUSTER_IDENTIFIER did not become AVAILABLE within 10 minutes. Last state: $target_state"
2901
2830
  exit 1
2902
2831
  fi
2903
2832
 
2904
2833
  sleep 10
2905
2834
  done
2906
2835
  EOT
2836
+ environment = {
2837
+ AWS_REGION = data.aws_region.current.region
2838
+ DB_PROXY_NAME = self.triggers.db_proxy_name
2839
+ TARGET_GROUP_NAME = self.triggers.target_group_name
2840
+ DB_CLUSTER_IDENTIFIER = self.triggers.db_cluster_identifier
2841
+ }
2907
2842
  }
2908
2843
 
2909
2844
  depends_on = [
@@ -2982,7 +2917,7 @@ resource "aws_iam_role_policy_attachment" "backup" {
2982
2917
  resource "aws_backup_vault" "database" {
2983
2918
  count = var.enable_backup ? 1 : 0
2984
2919
 
2985
- name = "\${var.name}-aurora-backup"
2920
+ name = "\${local.cluster_name}-backup"
2986
2921
  kms_key_arn = aws_kms_key.database.arn
2987
2922
  tags = var.tags
2988
2923
  }
@@ -2990,7 +2925,7 @@ resource "aws_backup_vault" "database" {
2990
2925
  resource "aws_backup_plan" "database" {
2991
2926
  count = var.enable_backup ? 1 : 0
2992
2927
 
2993
- name = "\${var.name}-aurora-backup"
2928
+ name = "\${local.cluster_name}-backup"
2994
2929
 
2995
2930
  rule {
2996
2931
  rule_name = "daily-backup"
@@ -3104,19 +3039,19 @@ exports[`ts#rdb generator > should generate terraform modules with MySQL engine
3104
3039
  required_providers {
3105
3040
  archive = {
3106
3041
  source = "hashicorp/archive"
3107
- version = "~> 2.5"
3042
+ version = "2.8.0"
3108
3043
  }
3109
3044
  aws = {
3110
3045
  source = "hashicorp/aws"
3111
- version = "~> 6.33"
3046
+ version = "6.52.0"
3112
3047
  }
3113
3048
  null = {
3114
3049
  source = "hashicorp/null"
3115
- version = ">= 3.0"
3050
+ version = "3.3.0"
3116
3051
  }
3117
3052
  random = {
3118
3053
  source = "hashicorp/random"
3119
- version = ">= 3.0"
3054
+ version = "3.9.0"
3120
3055
  }
3121
3056
  }
3122
3057
  }
@@ -3241,10 +3176,12 @@ resource "random_string" "suffix" {
3241
3176
  }
3242
3177
 
3243
3178
  locals {
3244
- create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
3245
- migration_function_name = "db-migration-\${random_string.suffix.result}"
3179
+ config = jsondecode(file("\${path.module}/../../../../../../../packages/db/config.json"))
3180
+ runtime_config_key = local.config.runtimeConfigKey
3181
+ create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
3182
+ migration_function_name = "db-migration-\${random_string.suffix.result}"
3246
3183
  create_db_user_function_name = "db-create-db-user-\${random_string.suffix.result}"
3247
- database_runtime_user = "db_\${random_string.suffix.result}"
3184
+ database_runtime_user = "db_\${random_string.suffix.result}"
3248
3185
  }
3249
3186
 
3250
3187
  module "aurora" {
@@ -3310,7 +3247,7 @@ module "add_rdb_to_runtime_config" {
3310
3247
  source = "../../../core/runtime-config/entry"
3311
3248
 
3312
3249
  namespace = "database"
3313
- key = "Db"
3250
+ key = local.runtime_config_key
3314
3251
  value = {
3315
3252
  hostname = module.aurora.cluster_endpoint
3316
3253
  port = module.aurora.cluster_port
@@ -3323,9 +3260,8 @@ module "add_rdb_to_runtime_config" {
3323
3260
 
3324
3261
  resource "aws_ecr_repository" "migration_handler" {
3325
3262
  #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
3326
- #checkov:skip=CKV_AWS_51:Mutable tags are intentional; the migration handler is always pushed as latest and redeployment is gated on docker_digest changes in null_resource.docker_publish
3327
3263
  name = "db-migration-\${random_string.suffix.result}"
3328
- image_tag_mutability = "MUTABLE"
3264
+ image_tag_mutability = "IMMUTABLE"
3329
3265
  force_delete = true
3330
3266
 
3331
3267
  image_scanning_configuration {
@@ -3376,19 +3312,31 @@ data "external" "docker_digest" {
3376
3312
  program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.docker_image_tag} --format '{{.Id}}')'\\"}' "]
3377
3313
  }
3378
3314
 
3315
+ locals {
3316
+ # Content-based, immutable image tag derived from the local image digest
3317
+ image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
3318
+ }
3319
+
3379
3320
  resource "null_resource" "docker_publish" {
3380
3321
  triggers = {
3381
3322
  docker_digest = data.external.docker_digest.result.digest
3382
3323
  repository_url = aws_ecr_repository.migration_handler.repository_url
3383
3324
  docker_image_tag = var.docker_image_tag
3325
+ image_tag = local.image_tag
3384
3326
  }
3385
3327
 
3386
3328
  provisioner "local-exec" {
3387
3329
  command = <<-EOT
3388
- aws ecr get-login-password --region \${data.aws_region.current.region} | docker login --username AWS --password-stdin \${self.triggers.repository_url}
3389
- docker tag \${self.triggers.docker_image_tag} \${self.triggers.repository_url}:latest
3390
- docker push \${self.triggers.repository_url}:latest
3330
+ aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
3331
+ docker tag "$DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
3332
+ docker push "$REPOSITORY_URL:$IMAGE_TAG"
3391
3333
  EOT
3334
+ environment = {
3335
+ AWS_REGION = data.aws_region.current.region
3336
+ REPOSITORY_URL = self.triggers.repository_url
3337
+ DOCKER_IMAGE_TAG = self.triggers.docker_image_tag
3338
+ IMAGE_TAG = self.triggers.image_tag
3339
+ }
3392
3340
  }
3393
3341
 
3394
3342
  depends_on = [aws_ecr_repository_policy.migration_handler]
@@ -3651,10 +3599,10 @@ resource "null_resource" "create_db_user_trigger" {
3651
3599
  command = <<-EOT
3652
3600
  output_file=$(mktemp)
3653
3601
  response=$(aws lambda invoke \\
3654
- --region \${data.aws_region.current.region} \\
3655
- --function-name \${self.triggers.function_name} \\
3602
+ --region "$AWS_REGION" \\
3603
+ --function-name "$FUNCTION_NAME" \\
3656
3604
  --cli-binary-format raw-in-base64-out \\
3657
- --payload '{"RequestType":"Create","PhysicalResourceId":"db-user:\${self.triggers.db_user}"}' \\
3605
+ --payload "{\\"RequestType\\":\\"Create\\",\\"PhysicalResourceId\\":\\"db-user:$DB_USER\\"}" \\
3658
3606
  "$output_file")
3659
3607
  cat "$output_file"
3660
3608
  echo "$response"
@@ -3664,6 +3612,11 @@ resource "null_resource" "create_db_user_trigger" {
3664
3612
  fi
3665
3613
  rm -f "$output_file"
3666
3614
  EOT
3615
+ environment = {
3616
+ AWS_REGION = data.aws_region.current.region
3617
+ FUNCTION_NAME = self.triggers.function_name
3618
+ DB_USER = self.triggers.db_user
3619
+ }
3667
3620
  }
3668
3621
 
3669
3622
  depends_on = [aws_lambda_function.create_db_user, module.aurora]
@@ -3677,7 +3630,7 @@ resource "aws_lambda_function" "migration_handler" {
3677
3630
  package_type = "Image"
3678
3631
  function_name = local.migration_function_name
3679
3632
  role = aws_iam_role.migration_handler.arn
3680
- image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:latest"
3633
+ image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:\${local.image_tag}"
3681
3634
  memory_size = 1024
3682
3635
  timeout = 300
3683
3636
  architectures = ["arm64"]
@@ -3722,8 +3675,8 @@ resource "null_resource" "migration_trigger" {
3722
3675
  command = <<-EOT
3723
3676
  output_file=$(mktemp)
3724
3677
  response=$(aws lambda invoke \\
3725
- --region \${data.aws_region.current.region} \\
3726
- --function-name \${self.triggers.function_name} \\
3678
+ --region "$AWS_REGION" \\
3679
+ --function-name "$FUNCTION_NAME" \\
3727
3680
  --cli-binary-format raw-in-base64-out \\
3728
3681
  "$output_file")
3729
3682
  cat "$output_file"
@@ -3734,6 +3687,10 @@ resource "null_resource" "migration_trigger" {
3734
3687
  fi
3735
3688
  rm -f "$output_file"
3736
3689
  EOT
3690
+ environment = {
3691
+ AWS_REGION = data.aws_region.current.region
3692
+ FUNCTION_NAME = self.triggers.function_name
3693
+ }
3737
3694
  }
3738
3695
 
3739
3696
  depends_on = [
@@ -3824,148 +3781,6 @@ datasource db {
3824
3781
  "
3825
3782
  `;
3826
3783
 
3827
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/scripts/docker-pull.ts 1`] = `
3828
- "import { spawnSync } from 'child_process';
3829
-
3830
- const ENGINE = 'docker';
3831
- const image = process.argv[2];
3832
-
3833
- const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
3834
- stdio: 'ignore',
3835
- });
3836
-
3837
- if (inspect.status !== 0) {
3838
- const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
3839
- if (pull.status !== 0) {
3840
- process.exit(pull.status ?? 1);
3841
- }
3842
- }
3843
- "
3844
- `;
3845
-
3846
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/scripts/docker-start.ts 1`] = `
3847
- "import { spawn, spawnSync } from 'child_process';
3848
-
3849
- const ENGINE = 'docker';
3850
-
3851
- const [containerName, image, hostPort, dbName, dbUser, dbPassword] =
3852
- process.argv.slice(2);
3853
-
3854
- const containerExists = (): boolean =>
3855
- spawnSync(ENGINE, ['container', 'inspect', containerName], {
3856
- stdio: 'ignore',
3857
- }).status === 0;
3858
-
3859
- const isRunning = (): boolean => {
3860
- const result = spawnSync(
3861
- ENGINE,
3862
- ['container', 'inspect', '-f', '{{.State.Running}}', containerName],
3863
- { encoding: 'utf-8' },
3864
- );
3865
- return result.status === 0 && result.stdout.trim() === 'true';
3866
- };
3867
-
3868
- if (containerExists()) {
3869
- if (!isRunning()) {
3870
- const start = spawnSync(ENGINE, ['start', containerName], {
3871
- stdio: 'inherit',
3872
- });
3873
- if (start.status !== 0) process.exit(start.status ?? 1);
3874
- }
3875
- } else {
3876
- const runArgs = [
3877
- 'run',
3878
- '--name',
3879
- containerName,
3880
- '-e',
3881
- \`POSTGRES_DB=\${dbName}\`,
3882
- '-e',
3883
- \`POSTGRES_USER=\${dbUser}\`,
3884
- '-e',
3885
- \`POSTGRES_PASSWORD=\${dbPassword}\`,
3886
- '-e',
3887
- \`PGDATA=/var/lib/postgresql/17/docker\`,
3888
- '-p',
3889
- \`\${hostPort}:5432\`,
3890
- '-v',
3891
- \`\${containerName}-data:/var/lib/postgresql\`,
3892
- '-d',
3893
- image,
3894
- ];
3895
- const create = spawnSync(ENGINE, runArgs, { stdio: 'inherit' });
3896
- if (create.status !== 0) process.exit(create.status ?? 1);
3897
- }
3898
-
3899
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
3900
- stdio: ['ignore', 'inherit', 'inherit'],
3901
- });
3902
-
3903
- let exiting = false;
3904
-
3905
- const cleanup = () => {
3906
- if (exiting) return;
3907
- exiting = true;
3908
- spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
3909
- logs.kill();
3910
- process.exit(0);
3911
- };
3912
-
3913
- process.on('SIGTERM', cleanup);
3914
- process.on('SIGINT', cleanup);
3915
- process.on('SIGHUP', cleanup);
3916
-
3917
- logs.on('exit', (code) => {
3918
- if (!exiting) process.exit(code ?? 0);
3919
- });
3920
- "
3921
- `;
3922
-
3923
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/scripts/wait-for-db.ts 1`] = `
3924
- "import { Client } from 'pg';
3925
-
3926
- const noop = () => undefined;
3927
-
3928
- const [portArg, dbArg, userArg, passwordArg] = process.argv.slice(2);
3929
- const timeoutAt = Date.now() + 60000;
3930
-
3931
- while (Date.now() < timeoutAt) {
3932
- const client = new Client({
3933
- host: 'localhost',
3934
- port: parseInt(portArg),
3935
- user: userArg,
3936
- password: passwordArg,
3937
- database: dbArg,
3938
- connectionTimeoutMillis: 500,
3939
- });
3940
- client.on('error', noop);
3941
- try {
3942
- await client.connect();
3943
- await client.end();
3944
- console.log('Database is ready.');
3945
- process.exit(0);
3946
- } catch {
3947
- console.log('Database is not ready.');
3948
- await client.end().catch(noop);
3949
- }
3950
- await new Promise((r) => setTimeout(r, 200));
3951
- }
3952
-
3953
- throw new Error(\`Timed out waiting for postgres on port \${portArg}\`);
3954
- "
3955
- `;
3956
-
3957
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/constants.ts 1`] = `
3958
- "export const DB_PACKAGE_NAME = 'Db';
3959
-
3960
- // Local development connection details (used when SERVE_LOCAL=true, see serve-local Nx target)
3961
- export const LOCAL_DB_PORT = 5432;
3962
- export const LOCAL_DB_HOST = 'localhost';
3963
- export const LOCAL_DB_NAME = 'database_name';
3964
- export const LOCAL_DB_USER = 'dbadmin';
3965
- export const LOCAL_DB_PASSWORD = 'password';
3966
- "
3967
- `;
3968
-
3969
3784
  exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/create-db-user-handler.ts 1`] = `
3970
3785
  "import type { CloudFormationCustomResourceEvent } from 'aws-lambda';
3971
3786
  import { randomBytes } from 'node:crypto';
@@ -4015,14 +3830,12 @@ const ensureDatabaseUser = async (dbUser: string): Promise<void> => {
4015
3830
 
4016
3831
  await client.query(
4017
3832
  \`ALTER ROLE \${quotedDbUser} WITH LOGIN;
4018
- GRANT ALL PRIVILEGES ON DATABASE \${quotedDbName} TO \${quotedDbUser};
4019
- GRANT USAGE, CREATE ON SCHEMA public TO \${quotedDbUser};
4020
- GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \${quotedDbUser};
4021
- GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \${quotedDbUser};
4022
- GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO \${quotedDbUser};
4023
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO \${quotedDbUser};
4024
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO \${quotedDbUser};
4025
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO \${quotedDbUser};
3833
+ GRANT CONNECT ON DATABASE \${quotedDbName} TO \${quotedDbUser};
3834
+ GRANT USAGE ON SCHEMA public TO \${quotedDbUser};
3835
+ GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \${quotedDbUser};
3836
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO \${quotedDbUser};
3837
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO \${quotedDbUser};
3838
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO \${quotedDbUser};
4026
3839
  GRANT rds_iam TO \${quotedDbUser};\`,
4027
3840
  );
4028
3841
 
@@ -4057,36 +3870,23 @@ export const handler = async (
4057
3870
  `;
4058
3871
 
4059
3872
  exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/index.ts 1`] = `
4060
- "export { DB_PACKAGE_NAME } from './constants.js';
4061
- export { getPrisma } from './prisma.js';
3873
+ "export { getPrisma } from './prisma.js';
4062
3874
  "
4063
3875
  `;
4064
3876
 
4065
3877
  exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/migration-handler.ts 1`] = `
4066
3878
  "import { execFile } from 'node:child_process';
4067
3879
  import { promisify } from 'node:util';
4068
- import { Signer } from '@aws-sdk/rds-signer';
4069
- import { withConnectionRetry } from './utils.js';
3880
+ import { getDatabaseSecret, withConnectionRetry } from './utils.js';
4070
3881
 
4071
3882
  const buildDatabaseUrl = async (): Promise<string> => {
4072
- const hostname = process.env.HOSTNAME!;
4073
- const port = process.env.PORT!;
4074
- const database = process.env.DATABASE!;
4075
- const dbUser = process.env.DBUSER!;
4076
- const region = process.env.AWS_REGION!;
4077
-
4078
- const iamAuthToken = await new Signer({
4079
- hostname,
4080
- port: Number(port),
4081
- region,
4082
- username: dbUser,
4083
- }).getAuthToken();
3883
+ const { host, port, dbname, username, password } = await getDatabaseSecret();
4084
3884
 
4085
3885
  return (
4086
- \`postgresql://\${encodeURIComponent(dbUser)}\` +
4087
- \`:\${encodeURIComponent(iamAuthToken)}\` +
4088
- \`@\${hostname}:\${port}/\${database}\` +
4089
- \`?sslaccept=strict\` // \`sslaccept\` is the correct parameter here for postgresql. The Prisma CLI Rust engine does not use the standard libpq \`sslmode\` option.
3886
+ \`postgresql://\${encodeURIComponent(username)}\` +
3887
+ \`:\${encodeURIComponent(password)}\` +
3888
+ \`@\${host}:\${port}/\${dbname}\` +
3889
+ \`?sslaccept=strict\`
4090
3890
  );
4091
3891
  };
4092
3892
 
@@ -4110,16 +3910,19 @@ exports[`ts#rdb generator > should generate the aurora shared construct > packag
4110
3910
  import { Signer } from '@aws-sdk/rds-signer';
4111
3911
  import { Prisma, PrismaClient } from '../generated/prisma/client.js';
4112
3912
  import { Pool } from 'pg';
4113
- import {
4114
- DB_PACKAGE_NAME,
4115
- LOCAL_DB_HOST,
4116
- LOCAL_DB_NAME,
4117
- LOCAL_DB_PASSWORD,
4118
- LOCAL_DB_PORT,
4119
- LOCAL_DB_USER,
4120
- } from './constants.js';
3913
+ import { readFileSync } from 'fs';
3914
+ import { join, dirname } from 'path';
3915
+ import { fileURLToPath } from 'url';
4121
3916
  import { getDatabaseConfig } from './utils.js';
4122
3917
 
3918
+ // Generated: must match runtimeConfigKey in config.json
3919
+ const runtimeConfigKey = 'Db';
3920
+
3921
+ const __dirname = dirname(fileURLToPath(import.meta.url));
3922
+ // config.json is only present in local dev (not included in the deployed bundle); guard with LOCAL_DEV check
3923
+ const localDev = () =>
3924
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).localDev;
3925
+
4123
3926
  let prismaClient: PrismaClient<Prisma.LogLevel> | undefined;
4124
3927
 
4125
3928
  export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
@@ -4127,14 +3930,15 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
4127
3930
  ): Promise<PrismaClient<LogOpts>> => {
4128
3931
  if (prismaClient) return prismaClient;
4129
3932
 
4130
- if (process.env.SERVE_LOCAL === 'true') {
3933
+ if (process.env.LOCAL_DEV === 'true') {
3934
+ const { host, port, dbName, dbUser, dbPassword } = localDev();
4131
3935
  const adapter = new PrismaPg(
4132
3936
  new Pool({
4133
- host: LOCAL_DB_HOST,
4134
- port: LOCAL_DB_PORT,
4135
- database: LOCAL_DB_NAME,
4136
- user: LOCAL_DB_USER,
4137
- password: LOCAL_DB_PASSWORD,
3937
+ host,
3938
+ port,
3939
+ database: dbName,
3940
+ user: dbUser,
3941
+ password: dbPassword,
4138
3942
  allowExitOnIdle: true,
4139
3943
  }),
4140
3944
  );
@@ -4146,7 +3950,7 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
4146
3950
  }
4147
3951
 
4148
3952
  const { hostname, port, database, dbUser, region } =
4149
- await getDatabaseConfig(DB_PACKAGE_NAME);
3953
+ await getDatabaseConfig(runtimeConfigKey);
4150
3954
  const adapter = new PrismaPg(
4151
3955
  new Pool({
4152
3956
  host: hostname,
@@ -4276,6 +4080,9 @@ const transientErrorPatterns = [
4276
4080
  'ECONNREFUSED',
4277
4081
  'ENOTFOUND',
4278
4082
  'P1000', // Prisma: authentication failed
4083
+ 'P1001', // Prisma: can't reach database server
4084
+ 'P1002', // Prisma: database server reached but timed out
4085
+ 'P1010', // Prisma: user denied access (IAM auth grant not yet propagated)
4279
4086
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
4280
4087
  ];
4281
4088
 
@@ -4508,6 +4315,21 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
4508
4315
  * @default true
4509
4316
  */
4510
4317
  readonly enableKeyRotation?: boolean;
4318
+
4319
+ /**
4320
+ * Whether to export Aurora engine logs to CloudWatch Logs.
4321
+ * See https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html
4322
+ *
4323
+ * @default false
4324
+ */
4325
+ readonly enableCloudwatchLogs?: boolean;
4326
+
4327
+ /**
4328
+ * Whether to enable Performance Insights on the Aurora writer instance.
4329
+ *
4330
+ * @default true
4331
+ */
4332
+ readonly enablePerformanceInsights?: boolean;
4511
4333
  }
4512
4334
 
4513
4335
  /**
@@ -4537,6 +4359,8 @@ export abstract class AuroraDatabase extends Construct {
4537
4359
  deletionProtection = true,
4538
4360
  removalPolicy = RemovalPolicy.RETAIN,
4539
4361
  enableKeyRotation = true,
4362
+ enableCloudwatchLogs = false,
4363
+ enablePerformanceInsights = true,
4540
4364
  engine,
4541
4365
  engineVersion,
4542
4366
  ...clusterProps
@@ -4552,12 +4376,24 @@ export abstract class AuroraDatabase extends Construct {
4552
4376
  vpc,
4553
4377
  vpcSubnets,
4554
4378
  engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
4555
- writer: writer ?? ClusterInstance.serverlessV2('writer'),
4379
+ writer:
4380
+ writer ??
4381
+ ClusterInstance.serverlessV2('writer', {
4382
+ enablePerformanceInsights,
4383
+ performanceInsightEncryptionKey: enablePerformanceInsights
4384
+ ? key
4385
+ : undefined,
4386
+ }),
4556
4387
  credentials: Credentials.fromGeneratedSecret(adminUser, {
4557
4388
  encryptionKey: key,
4558
4389
  }),
4559
4390
  iamAuthentication: true,
4560
4391
  monitoringInterval: Duration.seconds(5),
4392
+ cloudwatchLogsExports: enableCloudwatchLogs
4393
+ ? engine.type === 'mysql'
4394
+ ? ['audit', 'error', 'general', 'slowquery']
4395
+ : ['postgresql']
4396
+ : undefined,
4561
4397
  defaultDatabaseName: databaseName,
4562
4398
  storageEncrypted: true,
4563
4399
  storageEncryptionKey: key,
@@ -4654,32 +4490,19 @@ export abstract class AuroraDatabase extends Construct {
4654
4490
  timeout: Duration.minutes(5),
4655
4491
  tracing: Tracing.ACTIVE,
4656
4492
  vpc,
4657
- environment:
4658
- engine.type === 'mysql'
4659
- ? {
4660
- DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
4661
- }
4662
- : {
4663
- HOSTNAME: databaseHostname,
4664
- DATABASE: databaseName,
4665
- PORT: databasePort.toString(),
4666
- DBUSER: this.dbUser,
4667
- },
4493
+ environment: {
4494
+ DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
4495
+ },
4668
4496
  architecture: Architecture.ARM_64,
4669
4497
  });
4670
4498
 
4671
- if (engine.type === 'mysql') {
4672
- this.cluster.connections.allowDefaultPortFrom(migrationHandler);
4673
- this.grantSecretRead(migrationHandler);
4674
- } else {
4675
- this.allowDefaultPortFrom(migrationHandler);
4676
- this.grantConnect(migrationHandler);
4677
- }
4499
+ this.cluster.connections.allowDefaultPortFrom(migrationHandler);
4500
+ this.grantSecretRead(migrationHandler);
4678
4501
 
4679
- const trigger = new Trigger(this, 'MigrationTrigger', {
4502
+ const migrationTrigger = new Trigger(this, 'MigrationTrigger', {
4680
4503
  handler: migrationHandler,
4681
4504
  });
4682
- trigger.node.addDependency(createDbUserResource);
4505
+ migrationTrigger.node.addDependency(createDbUserResource);
4683
4506
 
4684
4507
  new CfnOutput(this, 'ClusterEndpoint', {
4685
4508
  value: this.cluster.clusterEndpoint.hostname,
@@ -4720,8 +4543,8 @@ export abstract class AuroraDatabase extends Construct {
4720
4543
  exports[`ts#rdb generator > should generate the aurora shared construct 2`] = `
4721
4544
  "import * as path from 'path';
4722
4545
  import * as url from 'url';
4546
+ import { readFileSync } from 'fs';
4723
4547
  import { Construct } from 'constructs';
4724
- import { DB_PACKAGE_NAME } from ':proj/db';
4725
4548
  import {
4726
4549
  AuroraDatabase,
4727
4550
  AuroraDatabaseEngines,
@@ -4729,6 +4552,16 @@ import {
4729
4552
  } from '../../core/rdb/aurora.js';
4730
4553
  import { findWorkspaceRoot } from '../../core/workspace.js';
4731
4554
 
4555
+ const { runtimeConfigKey } = JSON.parse(
4556
+ readFileSync(
4557
+ path.join(
4558
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4559
+ 'packages/db/config.json',
4560
+ ),
4561
+ 'utf-8',
4562
+ ),
4563
+ ) as { runtimeConfigKey: string };
4564
+
4732
4565
  export type DbProps = Omit<
4733
4566
  AuroraDatabaseProps,
4734
4567
  | 'databaseName'
@@ -4748,7 +4581,7 @@ export class Db extends AuroraDatabase {
4748
4581
  ...props,
4749
4582
  databaseName: 'database_name',
4750
4583
  adminUser: 'databaseUser',
4751
- runtimeConfigKey: DB_PACKAGE_NAME,
4584
+ runtimeConfigKey,
4752
4585
  migrationBundleDir: path.join(
4753
4586
  findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4754
4587
  'dist/packages/db/bundle/migration',
@@ -4766,17 +4599,14 @@ export class Db extends AuroraDatabase {
4766
4599
 
4767
4600
  exports[`ts#rdb generator > should generate the aurora shared construct 3`] = `
4768
4601
  "import { defineConfig } from 'prisma/config';
4602
+ import { readFileSync } from 'fs';
4769
4603
 
4770
4604
  const getDatabaseUrl = async () => {
4771
- if (process.env.SERVE_LOCAL === 'true') {
4772
- const {
4773
- LOCAL_DB_HOST,
4774
- LOCAL_DB_NAME,
4775
- LOCAL_DB_PASSWORD,
4776
- LOCAL_DB_PORT,
4777
- LOCAL_DB_USER,
4778
- } = await import('./src/constants.js');
4779
- return \`postgresql://\${LOCAL_DB_USER}:\${LOCAL_DB_PASSWORD}@\${LOCAL_DB_HOST}:\${LOCAL_DB_PORT}/\${LOCAL_DB_NAME}\`;
4605
+ if (process.env.LOCAL_DEV === 'true') {
4606
+ const { host, port, dbName, dbUser, dbPassword } = JSON.parse(
4607
+ readFileSync('config.json', 'utf-8'),
4608
+ ).localDev;
4609
+ return \`postgresql://\${dbUser}:\${dbPassword}@\${host}:\${port}/\${dbName}\`;
4780
4610
  }
4781
4611
  return process.env.DATABASE_URL;
4782
4612
  };