@aws/nx-plugin 1.0.0-rc.8 → 1.0.0-rc.80

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 (1452) hide show
  1. package/LICENSE-THIRD-PARTY +6006 -4000
  2. package/README.md +16 -96
  3. package/generators.json +162 -10
  4. package/migrations.json +206 -0
  5. package/package.json +40 -21
  6. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +295 -0
  7. package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
  8. package/src/agentcore-gateway/agent-connection/generator.js +95 -0
  9. package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
  10. package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
  11. package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
  12. package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
  13. package/src/agentcore-gateway/agent-connection/schema.json +31 -0
  14. package/src/agentcore-gateway/attach-upstream.d.ts +49 -0
  15. package/src/agentcore-gateway/attach-upstream.js +59 -0
  16. package/src/agentcore-gateway/attach-upstream.js.map +1 -0
  17. package/src/agentcore-gateway/files/cedar/policies/README.md +61 -0
  18. package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +26 -0
  19. package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
  20. package/src/agentcore-gateway/files/project/mcp/local-dev.ts.template +134 -0
  21. package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
  22. package/src/agentcore-gateway/gateway-connection/generator.js +103 -0
  23. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
  24. package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
  25. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
  26. package/src/agentcore-gateway/gateway-connection/schema.d.ts +13 -0
  27. package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
  28. package/src/agentcore-gateway/generator.d.ts +89 -0
  29. package/src/agentcore-gateway/generator.js +212 -0
  30. package/src/agentcore-gateway/generator.js.map +1 -0
  31. package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
  32. package/src/agentcore-gateway/mcp-connection/generator.js +61 -0
  33. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
  34. package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
  35. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
  36. package/src/agentcore-gateway/mcp-connection/schema.d.ts +13 -0
  37. package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
  38. package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
  39. package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
  40. package/src/agentcore-gateway/react-connection/generator.js +119 -0
  41. package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
  42. package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
  43. package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
  44. package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
  45. package/src/agentcore-gateway/react-connection/schema.json +31 -0
  46. package/src/agentcore-gateway/schema.d.js +6 -0
  47. package/src/agentcore-gateway/schema.d.js.map +1 -0
  48. package/src/agentcore-gateway/schema.d.ts +17 -0
  49. package/src/agentcore-gateway/schema.json +72 -0
  50. package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +238 -0
  51. package/src/agentcore-harness/files/project/README.md.template +83 -0
  52. package/src/agentcore-harness/files/project/scripts/chat.ts.template +99 -0
  53. package/src/agentcore-harness/files/project/src/PROMPT.md.template +16 -0
  54. package/src/agentcore-harness/generator.d.ts +62 -0
  55. package/src/agentcore-harness/generator.js +158 -0
  56. package/src/agentcore-harness/generator.js.map +1 -0
  57. package/src/agentcore-harness/schema.d.js +8 -0
  58. package/src/agentcore-harness/schema.d.js.map +1 -0
  59. package/src/agentcore-harness/schema.d.ts +17 -0
  60. package/src/agentcore-harness/schema.json +53 -0
  61. package/src/connection/agent-local-dev.d.ts +49 -0
  62. package/src/connection/agent-local-dev.js +84 -0
  63. package/src/connection/agent-local-dev.js.map +1 -0
  64. package/src/connection/agent-runtime-config.js +9 -14
  65. package/src/connection/agent-runtime-config.js.map +1 -1
  66. package/src/connection/gateway-runtime-config.d.ts +19 -0
  67. package/src/connection/gateway-runtime-config.js +47 -0
  68. package/src/connection/gateway-runtime-config.js.map +1 -0
  69. package/src/connection/generator.d.ts +4 -11
  70. package/src/connection/generator.js +172 -194
  71. package/src/connection/generator.js.map +1 -1
  72. package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
  73. package/src/connection/local-dev.js +37 -0
  74. package/src/connection/local-dev.js.map +1 -0
  75. package/src/connection/scaffold-catalog.d.ts +267 -0
  76. package/src/connection/scaffold-catalog.js +347 -0
  77. package/src/connection/scaffold-catalog.js.map +1 -0
  78. package/src/connection/schema-resolver.d.ts +5 -0
  79. package/src/connection/schema-resolver.js +27 -0
  80. package/src/connection/schema-resolver.js.map +1 -0
  81. package/src/connection/schema.d.js +6 -0
  82. package/src/connection/schema.d.js.map +1 -0
  83. package/src/connection/schema.d.ts +1 -0
  84. package/src/connection/schema.json +5 -0
  85. package/src/connection/supported-connections.d.ts +116 -0
  86. package/src/connection/supported-connections.js +163 -0
  87. package/src/connection/supported-connections.js.map +1 -0
  88. package/src/index.d.ts +1 -1
  89. package/src/index.js +2 -5
  90. package/src/index.js.map +1 -1
  91. package/src/infra/app/__snapshots__/generator.spec.ts.snap +119 -72
  92. package/src/infra/app/files/app/README.md.template +8 -4
  93. package/src/infra/app/files/app/src/main.ts.template +5 -1
  94. package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
  95. package/src/infra/app/generator.d.ts +44 -1
  96. package/src/infra/app/generator.js +195 -127
  97. package/src/infra/app/generator.js.map +1 -1
  98. package/src/infra/app/schema.d.js +6 -0
  99. package/src/infra/app/schema.d.js.map +1 -0
  100. package/src/infra/app/schema.d.ts +1 -1
  101. package/src/infra/app/schema.json +5 -0
  102. package/src/init/generator.d.ts +31 -0
  103. package/src/init/generator.js +46 -0
  104. package/src/init/generator.js.map +1 -0
  105. package/src/init/schema.d.js +6 -0
  106. package/src/init/schema.d.js.map +1 -0
  107. package/src/init/schema.d.ts +16 -0
  108. package/src/init/schema.json +35 -0
  109. package/src/internal/test-matrix/generator.d.ts +29 -0
  110. package/src/internal/test-matrix/generator.js +713 -0
  111. package/src/internal/test-matrix/generator.js.map +1 -0
  112. package/src/internal/test-matrix/schema.d.js +6 -0
  113. package/src/internal/test-matrix/schema.d.js.map +1 -0
  114. package/src/internal/test-matrix/schema.d.ts +12 -0
  115. package/src/internal/test-matrix/schema.json +21 -0
  116. package/src/license/config-types.d.ts +2 -2
  117. package/src/license/config-types.js +5 -3
  118. package/src/license/config-types.js.map +1 -1
  119. package/src/license/config.d.ts +12 -3
  120. package/src/license/config.js +295 -242
  121. package/src/license/config.js.map +1 -1
  122. package/src/license/dependency-check/check.d.ts +2 -2
  123. package/src/license/dependency-check/check.js +51 -46
  124. package/src/license/dependency-check/check.js.map +1 -1
  125. package/src/license/dependency-check/collectors/collector.js +41 -71
  126. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  127. package/src/license/dependency-check/collectors/npm-collector.js +34 -41
  128. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
  129. package/src/license/dependency-check/collectors/python-collector.js +61 -62
  130. package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
  131. package/src/license/dependency-check/evaluator.d.ts +1 -1
  132. package/src/license/dependency-check/evaluator.js +91 -74
  133. package/src/license/dependency-check/evaluator.js.map +1 -1
  134. package/src/license/dependency-check/executor.js +30 -22
  135. package/src/license/dependency-check/executor.js.map +1 -1
  136. package/src/license/dependency-check/pre-approved.d.ts +1 -1
  137. package/src/license/dependency-check/pre-approved.js +949 -336
  138. package/src/license/dependency-check/pre-approved.js.map +1 -1
  139. package/src/license/dependency-check/types.d.ts +1 -1
  140. package/src/license/dependency-check/types.js +2 -3
  141. package/src/license/dependency-check/types.js.map +1 -1
  142. package/src/license/generator.d.ts +1 -1
  143. package/src/license/generator.js +60 -77
  144. package/src/license/generator.js.map +1 -1
  145. package/src/license/index.d.ts +4 -4
  146. package/src/license/index.js +3 -9
  147. package/src/license/index.js.map +1 -1
  148. package/src/license/known-exceptions.d.ts +2 -3
  149. package/src/license/known-exceptions.js +12 -28
  150. package/src/license/known-exceptions.js.map +1 -1
  151. package/src/license/schema.d.js +6 -0
  152. package/src/license/schema.d.js.map +1 -0
  153. package/src/license/schema.d.ts +2 -0
  154. package/src/license/schema.json +5 -0
  155. package/src/license/sync/generator.js +94 -119
  156. package/src/license/sync/generator.js.map +1 -1
  157. package/src/license/sync/project-file-sync.d.ts +1 -1
  158. package/src/license/sync/project-file-sync.js +28 -35
  159. package/src/license/sync/project-file-sync.js.map +1 -1
  160. package/src/mcp-server/dev-server.d.ts +1 -0
  161. package/src/mcp-server/dev-server.js +18 -0
  162. package/src/mcp-server/dev-server.js.map +1 -0
  163. package/src/mcp-server/generator-info.d.ts +3 -3
  164. package/src/mcp-server/generator-info.js +149 -165
  165. package/src/mcp-server/generator-info.js.map +1 -1
  166. package/src/mcp-server/guide-pipeline.d.ts +1 -1
  167. package/src/mcp-server/guide-pipeline.js +199 -206
  168. package/src/mcp-server/guide-pipeline.js.map +1 -1
  169. package/src/mcp-server/guide-render.js +10 -25
  170. package/src/mcp-server/guide-render.js.map +1 -1
  171. package/src/mcp-server/index.js +6 -10
  172. package/src/mcp-server/index.js.map +1 -1
  173. package/src/mcp-server/mdx-ast.js +39 -57
  174. package/src/mcp-server/mdx-ast.js.map +1 -1
  175. package/src/mcp-server/option-filter.js +33 -47
  176. package/src/mcp-server/option-filter.js.map +1 -1
  177. package/src/mcp-server/schema-registry.d.ts +9 -3
  178. package/src/mcp-server/schema-registry.js +41 -38
  179. package/src/mcp-server/schema-registry.js.map +1 -1
  180. package/src/mcp-server/schema.d.ts +1 -1
  181. package/src/mcp-server/schema.js +9 -7
  182. package/src/mcp-server/schema.js.map +1 -1
  183. package/src/mcp-server/server.js +24 -24
  184. package/src/mcp-server/server.js.map +1 -1
  185. package/src/mcp-server/tools/add-to-existing-project.d.ts +12 -0
  186. package/src/mcp-server/tools/add-to-existing-project.js +36 -0
  187. package/src/mcp-server/tools/add-to-existing-project.js.map +1 -0
  188. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  189. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  190. package/src/mcp-server/tools/general-guidance.d.ts +2 -2
  191. package/src/mcp-server/tools/general-guidance.js +55 -32
  192. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  193. package/src/mcp-server/tools/generator-guide.d.ts +1 -1
  194. package/src/mcp-server/tools/generator-guide.js +29 -37
  195. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  196. package/src/mcp-server/tools/list-generators.d.ts +1 -1
  197. package/src/mcp-server/tools/list-generators.js +19 -25
  198. package/src/mcp-server/tools/list-generators.js.map +1 -1
  199. package/src/mcp-server/tools/upgrade-workspace.d.ts +11 -0
  200. package/src/mcp-server/tools/upgrade-workspace.js +32 -0
  201. package/src/mcp-server/tools/upgrade-workspace.js.map +1 -0
  202. package/src/migrations/latest/apt-security-updates-in-container-images/__snapshots__/migration.spec.ts.snap +90 -0
  203. package/src/migrations/latest/apt-security-updates-in-container-images/metadata.json +3 -0
  204. package/src/migrations/latest/apt-security-updates-in-container-images/migration.d.ts +6 -0
  205. package/src/migrations/latest/apt-security-updates-in-container-images/migration.js +90 -0
  206. package/src/migrations/latest/apt-security-updates-in-container-images/migration.js.map +1 -0
  207. package/src/migrations/latest/dynamodb-configurable-encryption/__snapshots__/migration.spec.ts.snap +429 -0
  208. package/src/migrations/latest/dynamodb-configurable-encryption/metadata.json +3 -0
  209. package/src/migrations/latest/dynamodb-configurable-encryption/migration.d.ts +6 -0
  210. package/src/migrations/latest/dynamodb-configurable-encryption/migration.js +325 -0
  211. package/src/migrations/latest/dynamodb-configurable-encryption/migration.js.map +1 -0
  212. package/src/migrations/latest/py-agent-ag-ui-hooks/metadata.json +3 -0
  213. package/src/migrations/latest/py-agent-ag-ui-hooks/migration.d.ts +6 -0
  214. package/src/migrations/latest/py-agent-ag-ui-hooks/migration.js +113 -0
  215. package/src/migrations/latest/py-agent-ag-ui-hooks/migration.js.map +1 -0
  216. package/src/migrations/latest/py-agent-session-id-middleware-extraction/metadata.json +3 -0
  217. package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.d.ts +2 -0
  218. package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js +118 -0
  219. package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js.map +1 -0
  220. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/metadata.json +3 -0
  221. package/{sdk/utils/ast.d.ts → src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.d.ts} +2 -2
  222. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js +38 -0
  223. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js.map +1 -0
  224. package/src/migrations/latest/static-website-configurable-waf-encryption/metadata.json +3 -0
  225. package/src/migrations/latest/static-website-configurable-waf-encryption/migration.d.ts +6 -0
  226. package/src/migrations/latest/static-website-configurable-waf-encryption/migration.js +418 -0
  227. package/src/migrations/latest/static-website-configurable-waf-encryption/migration.js.map +1 -0
  228. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/metadata.json +3 -0
  229. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.d.ts +2 -0
  230. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.js +136 -0
  231. package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.js.map +1 -0
  232. package/src/migrations/latest/user-identity-configurable-mfa/metadata.json +3 -0
  233. package/src/migrations/latest/user-identity-configurable-mfa/migration.d.ts +6 -0
  234. package/src/migrations/latest/user-identity-configurable-mfa/migration.js +362 -0
  235. package/src/migrations/latest/user-identity-configurable-mfa/migration.js.map +1 -0
  236. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/metadata.json +3 -0
  237. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.d.ts +6 -0
  238. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js +65 -0
  239. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js.map +1 -0
  240. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/metadata.json +3 -0
  241. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.d.ts +6 -0
  242. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js +108 -0
  243. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js.map +1 -0
  244. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
  245. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
  246. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
  247. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
  248. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/metadata.json +3 -0
  249. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
  250. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js +215 -0
  251. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
  252. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
  253. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
  254. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js +93 -0
  255. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  256. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/metadata.json +3 -0
  257. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.d.ts +96 -0
  258. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js +670 -0
  259. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js.map +1 -0
  260. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/metadata.json +3 -0
  261. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  262. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js +89 -0
  263. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  264. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/metadata.json +3 -0
  265. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.d.ts +6 -0
  266. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js +449 -0
  267. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js.map +1 -0
  268. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/metadata.json +3 -0
  269. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.d.ts +6 -0
  270. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js +78 -0
  271. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -0
  272. package/src/{smithy/project/files/build.Dockerfile.template → migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/rc57-service.Dockerfile.fixture} +1 -4
  273. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
  274. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/metadata.json +3 -0
  275. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.d.ts +6 -0
  276. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js +217 -0
  277. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -0
  278. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
  279. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/metadata.json +3 -0
  280. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.d.ts +6 -0
  281. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js +195 -0
  282. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -0
  283. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
  284. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/metadata.json +3 -0
  285. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.d.ts +6 -0
  286. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js +77 -0
  287. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -0
  288. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
  289. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/metadata.json +3 -0
  290. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.d.ts +6 -0
  291. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js +91 -0
  292. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -0
  293. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/metadata.json +3 -0
  294. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.d.ts +6 -0
  295. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js +412 -0
  296. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -0
  297. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/metadata.json +3 -0
  298. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.d.ts +6 -0
  299. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js +33 -0
  300. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -0
  301. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/metadata.json +3 -0
  302. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.d.ts +6 -0
  303. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js +83 -0
  304. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -0
  305. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/legacy-service.Dockerfile.fixture +95 -0
  306. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/metadata.json +3 -0
  307. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.d.ts +6 -0
  308. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js +154 -0
  309. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -0
  310. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/metadata.json +3 -0
  311. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.d.ts +6 -0
  312. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js +71 -0
  313. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -0
  314. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/metadata.json +3 -0
  315. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.d.ts +6 -0
  316. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js +57 -0
  317. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -0
  318. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/metadata.json +3 -0
  319. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.d.ts +6 -0
  320. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js +123 -0
  321. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js.map +1 -0
  322. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/build-system-prompt.ts.fixture +23 -0
  323. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/build-user-prompt.ts.fixture +96 -0
  324. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/config-path.ts.fixture +1 -0
  325. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/file-to-translate.ts.fixture +10 -0
  326. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/get-files-to-translate.ts.fixture +96 -0
  327. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/header.ts.fixture +15 -0
  328. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/log.ts.fixture +18 -0
  329. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/main-call.ts.fixture +6 -0
  330. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/main.ts.fixture +79 -0
  331. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/project-root.ts.fixture +1 -0
  332. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/run-with-concurrency.ts.fixture +57 -0
  333. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/scripts-dir.ts.fixture +1 -0
  334. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/translate-file-for-language.ts.fixture +61 -0
  335. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/already-migrated.grit +1 -0
  336. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/build-system-prompt.grit +6 -0
  337. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/build-user-prompt.grit +6 -0
  338. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/config-path.grit +1 -0
  339. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/file-to-translate.grit +11 -0
  340. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/get-files-to-translate.grit +7 -0
  341. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/log.grit +3 -0
  342. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/main-call.grit +1 -0
  343. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/main.grit +8 -0
  344. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/project-root.grit +1 -0
  345. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/run-with-concurrency.grit +6 -0
  346. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/translate-file-for-language.grit +6 -0
  347. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/metadata.json +3 -0
  348. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.d.ts +2 -0
  349. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js +103 -0
  350. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js.map +1 -0
  351. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/test-fixtures/released-script-first.ts.fixture +430 -0
  352. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/test-fixtures/released-script.ts.fixture +431 -0
  353. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/metadata.json +3 -0
  354. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.d.ts +6 -0
  355. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js +246 -0
  356. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js.map +1 -0
  357. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/metadata.json +3 -0
  358. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
  359. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js +329 -0
  360. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
  361. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/metadata.json +3 -0
  362. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.d.ts +2 -0
  363. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js +308 -0
  364. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js.map +1 -0
  365. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  366. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  367. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +298 -74
  368. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +748 -103
  369. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +230 -37
  370. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +249 -52
  371. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5535 -0
  372. package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
  373. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +305 -71
  374. package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +298 -0
  375. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +353 -82
  376. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +176 -55
  377. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +100 -24
  378. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  379. package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
  380. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  381. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
  382. package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
  383. package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
  384. package/src/open-api/ts-client/generator.d.ts +1 -1
  385. package/src/open-api/ts-client/generator.js +41 -26
  386. package/src/open-api/ts-client/generator.js.map +1 -1
  387. package/src/open-api/ts-client/schema.d.js +6 -0
  388. package/src/open-api/ts-client/schema.d.js.map +1 -0
  389. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
  390. package/src/open-api/ts-hooks/generator.d.ts +1 -1
  391. package/src/open-api/ts-hooks/generator.js +17 -21
  392. package/src/open-api/ts-hooks/generator.js.map +1 -1
  393. package/src/open-api/ts-hooks/generator.spec.tsx +76 -6
  394. package/src/open-api/ts-hooks/schema.d.js +6 -0
  395. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  396. package/src/open-api/ts-metadata/generator.d.ts +1 -1
  397. package/src/open-api/ts-metadata/generator.js +12 -20
  398. package/src/open-api/ts-metadata/generator.js.map +1 -1
  399. package/src/open-api/ts-metadata/schema.d.js +6 -0
  400. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  401. package/src/open-api/utils/codegen-data/languages.d.ts +1 -7
  402. package/src/open-api/utils/codegen-data/languages.js +59 -66
  403. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  404. package/src/open-api/utils/codegen-data/types.d.ts +255 -10
  405. package/src/open-api/utils/codegen-data/types.js +54 -30
  406. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  407. package/src/open-api/utils/codegen-data.d.ts +4 -4
  408. package/src/open-api/utils/codegen-data.js +494 -674
  409. package/src/open-api/utils/codegen-data.js.map +1 -1
  410. package/src/open-api/utils/normalise.d.ts +1 -1
  411. package/src/open-api/utils/normalise.js +437 -246
  412. package/src/open-api/utils/normalise.js.map +1 -1
  413. package/src/open-api/utils/parse.d.ts +1 -1
  414. package/src/open-api/utils/parse.js +8 -14
  415. package/src/open-api/utils/parse.js.map +1 -1
  416. package/src/open-api/utils/parser.d.ts +55 -0
  417. package/src/open-api/utils/parser.js +787 -0
  418. package/src/open-api/utils/parser.js.map +1 -0
  419. package/src/open-api/utils/refs.d.ts +1 -1
  420. package/src/open-api/utils/refs.js +12 -22
  421. package/src/open-api/utils/refs.js.map +1 -1
  422. package/src/open-api/utils/types.d.ts +18 -0
  423. package/src/open-api/utils/types.js +5 -2
  424. package/src/open-api/utils/types.js.map +1 -1
  425. package/src/preset/__snapshots__/generator.spec.ts.snap +101 -20
  426. package/src/preset/generator.d.ts +15 -2
  427. package/src/preset/generator.js +76 -151
  428. package/src/preset/generator.js.map +1 -1
  429. package/src/preset/schema.d.js +6 -0
  430. package/src/preset/schema.d.js.map +1 -0
  431. package/src/preset/schema.d.ts +6 -3
  432. package/src/preset/schema.json +16 -5
  433. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +931 -0
  434. package/src/py/agent/__snapshots__/generator.core.spec.ts.snap +186 -0
  435. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +771 -0
  436. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1310 -0
  437. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +231 -0
  438. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +29 -0
  439. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +29 -0
  440. package/src/py/agent/a2a-connection/generator.d.ts +25 -1
  441. package/src/py/agent/a2a-connection/generator.js +146 -95
  442. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  443. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  444. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  445. package/src/py/agent/a2a-connection/schema.d.ts +2 -1
  446. package/src/py/agent/a2a-connection/schema.json +5 -0
  447. package/src/py/agent/files/deploy/Dockerfile.template +15 -1
  448. package/src/py/agent/files/langchain/a2a/main.py.template +83 -0
  449. package/src/py/agent/files/langchain/ag-ui/main.py.template +76 -0
  450. package/src/py/agent/files/langchain/common/agent.py.template +30 -0
  451. package/src/py/agent/files/langchain/common/middleware/__init__.py.template +0 -0
  452. package/src/py/agent/files/langchain/common/middleware/session_id_middleware.py.template +17 -0
  453. package/src/py/agent/files/langchain/common/session.py.template +61 -0
  454. package/src/py/agent/files/{http → langchain/http}/init.py.template +17 -25
  455. package/src/py/agent/files/langchain/http/main.py.template +69 -0
  456. package/src/py/agent/files/strands/a2a/main.py.template +61 -0
  457. package/src/py/agent/files/strands/ag-ui/main.py.template +86 -0
  458. package/src/py/agent/files/strands/common/__init__.py.template +0 -0
  459. package/src/py/agent/files/{common → strands/common}/agent.py.template +13 -0
  460. package/src/py/agent/files/strands/common/middleware/__init__.py.template +0 -0
  461. package/src/py/agent/files/strands/common/middleware/session_id_middleware.py.template +17 -0
  462. package/src/py/agent/files/strands/common/session.py.template +36 -0
  463. package/src/py/agent/files/strands/http/init.py.template +97 -0
  464. package/src/py/agent/files/{http → strands/http}/main.py.template +5 -29
  465. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  466. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  467. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  468. package/src/py/agent/gateway-connection/generator.d.ts +33 -0
  469. package/src/py/agent/gateway-connection/generator.js +153 -0
  470. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  471. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  472. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  473. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  474. package/src/py/agent/gateway-connection/schema.json +31 -0
  475. package/src/py/agent/generator.d.ts +165 -2
  476. package/src/py/agent/generator.js +446 -197
  477. package/src/py/agent/generator.js.map +1 -1
  478. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +156 -89
  479. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +31 -0
  480. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +31 -0
  481. package/src/py/agent/mcp-connection/generator.d.ts +24 -1
  482. package/src/py/agent/mcp-connection/generator.js +103 -130
  483. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  484. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  485. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  486. package/src/py/agent/mcp-connection/schema.d.ts +2 -1
  487. package/src/py/agent/mcp-connection/schema.json +5 -0
  488. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +17 -19
  489. package/src/py/agent/react-connection/generator.d.ts +152 -3
  490. package/src/py/agent/react-connection/generator.js +105 -65
  491. package/src/py/agent/react-connection/generator.js.map +1 -1
  492. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +5 -5
  493. package/src/py/agent/react-connection/local-dev.js +36 -0
  494. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  495. package/src/py/agent/react-connection/schema.d.js +8 -0
  496. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  497. package/src/py/agent/react-connection/schema.d.ts +2 -1
  498. package/src/py/agent/react-connection/schema.json +5 -0
  499. package/src/py/agent/schema.d.js +6 -0
  500. package/src/py/agent/schema.d.js.map +1 -0
  501. package/src/py/agent/schema.d.ts +6 -2
  502. package/src/py/agent/schema.json +15 -1
  503. package/src/py/api/generator.d.ts +1 -1
  504. package/src/py/api/generator.js +12 -11
  505. package/src/py/api/generator.js.map +1 -1
  506. package/src/py/api/schema.d.js +6 -0
  507. package/src/py/api/schema.d.js.map +1 -0
  508. package/src/py/api/schema.d.ts +2 -1
  509. package/src/py/api/schema.json +5 -0
  510. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1601 -0
  511. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +63 -0
  512. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  513. package/src/py/dynamodb/agent-connection/generator.js +45 -0
  514. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  515. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  516. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  517. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  518. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  519. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +32 -0
  520. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  521. package/src/py/dynamodb/fast-api-connection/generator.js +39 -0
  522. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  523. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  524. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  525. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  526. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  527. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  528. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  529. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  530. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  531. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  532. package/src/py/dynamodb/files/config.json.template +24 -0
  533. package/src/py/dynamodb/generator.d.ts +39 -0
  534. package/src/py/dynamodb/generator.js +130 -0
  535. package/src/py/dynamodb/generator.js.map +1 -0
  536. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +63 -0
  537. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  538. package/src/py/dynamodb/mcp-server-connection/generator.js +45 -0
  539. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  540. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  541. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  542. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  543. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  544. package/src/py/dynamodb/schema.d.js +6 -0
  545. package/src/py/dynamodb/schema.d.js.map +1 -0
  546. package/src/py/dynamodb/schema.d.ts +16 -0
  547. package/src/py/dynamodb/schema.json +76 -0
  548. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +240 -4693
  549. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +5409 -0
  550. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  551. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  552. package/src/py/fast-api/generator.d.ts +73 -1
  553. package/src/py/fast-api/generator.js +134 -95
  554. package/src/py/fast-api/generator.js.map +1 -1
  555. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  556. package/src/py/fast-api/react/generator.d.ts +17 -2
  557. package/src/py/fast-api/react/generator.js +38 -26
  558. package/src/py/fast-api/react/generator.js.map +1 -1
  559. package/src/py/fast-api/react/open-api.js +31 -29
  560. package/src/py/fast-api/react/open-api.js.map +1 -1
  561. package/src/py/fast-api/react/schema.d.js +6 -0
  562. package/src/py/fast-api/react/schema.d.js.map +1 -0
  563. package/src/py/fast-api/react/schema.d.ts +1 -0
  564. package/src/py/fast-api/react/schema.json +5 -0
  565. package/src/py/fast-api/schema.d.js +6 -0
  566. package/src/py/fast-api/schema.d.js.map +1 -0
  567. package/src/py/fast-api/schema.d.ts +2 -1
  568. package/src/py/fast-api/schema.json +6 -0
  569. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
  570. package/src/py/lambda-function/files/handler/__lambdaFunctionSnakeCase__.py.template +1 -1
  571. package/src/py/lambda-function/generator.d.ts +28 -1
  572. package/src/py/lambda-function/generator.js +88 -61
  573. package/src/py/lambda-function/generator.js.map +1 -1
  574. package/src/py/lambda-function/schema.d.js +6 -0
  575. package/src/py/lambda-function/schema.d.js.map +1 -0
  576. package/src/py/lambda-function/schema.d.ts +3 -2
  577. package/src/py/lambda-function/schema.json +6 -1
  578. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +221 -21
  579. package/src/py/mcp-server/files/deploy/Dockerfile.template +15 -1
  580. package/src/py/mcp-server/generator.d.ts +69 -1
  581. package/src/py/mcp-server/generator.js +209 -145
  582. package/src/py/mcp-server/generator.js.map +1 -1
  583. package/src/py/mcp-server/schema.d.js +6 -0
  584. package/src/py/mcp-server/schema.d.js.map +1 -0
  585. package/src/py/mcp-server/schema.d.ts +2 -1
  586. package/src/py/mcp-server/schema.json +6 -0
  587. package/src/py/project/generator.d.ts +28 -2
  588. package/src/py/project/generator.js +248 -130
  589. package/src/py/project/generator.js.map +1 -1
  590. package/src/py/project/schema.d.js +6 -0
  591. package/src/py/project/schema.d.js.map +1 -0
  592. package/src/py/project/schema.d.ts +1 -0
  593. package/src/py/project/schema.json +6 -0
  594. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2072 -0
  595. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +123 -0
  596. package/src/py/rdb/agent-connection/generator.d.ts +10 -0
  597. package/src/py/rdb/agent-connection/generator.js +52 -0
  598. package/src/py/rdb/agent-connection/generator.js.map +1 -0
  599. package/src/py/rdb/agent-connection/schema.d.js +8 -0
  600. package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
  601. package/src/py/rdb/agent-connection/schema.d.ts +15 -0
  602. package/src/py/rdb/agent-connection/schema.json +27 -0
  603. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +51 -0
  604. package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
  605. package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
  606. package/src/py/rdb/fast-api-connection/generator.js +56 -0
  607. package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
  608. package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
  609. package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
  610. package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
  611. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  612. package/src/py/rdb/files/Dockerfile.create-db-user.template +14 -0
  613. package/src/py/rdb/files/Dockerfile.migration.template +14 -0
  614. package/src/py/rdb/files/__name__/connection.py.template +55 -0
  615. package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
  616. package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
  617. package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
  618. package/src/py/rdb/files/__name__/models/example.py.template +8 -0
  619. package/src/py/rdb/files/__name__/utils.py.template +104 -0
  620. package/src/py/rdb/files/alembic.ini.template +38 -0
  621. package/src/py/rdb/files/migrations/env.py.template +80 -0
  622. package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
  623. package/src/py/rdb/generator.d.ts +103 -0
  624. package/src/py/rdb/generator.js +362 -0
  625. package/src/py/rdb/generator.js.map +1 -0
  626. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +119 -0
  627. package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
  628. package/src/py/rdb/mcp-server-connection/generator.js +52 -0
  629. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
  630. package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
  631. package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
  632. package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
  633. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  634. package/src/py/rdb/schema.d.js +6 -0
  635. package/src/py/rdb/schema.d.js.map +1 -0
  636. package/src/py/rdb/schema.d.ts +16 -0
  637. package/src/py/rdb/schema.json +78 -0
  638. package/src/py/rdb/utils.d.ts +6 -0
  639. package/src/py/rdb/utils.js +16 -0
  640. package/src/py/rdb/utils.js.map +1 -0
  641. package/src/sdk/agentcore-gateway.d.ts +6 -0
  642. package/src/sdk/agentcore-gateway.js +7 -0
  643. package/src/sdk/agentcore-gateway.js.map +1 -0
  644. package/src/sdk/agentcore-harness.d.ts +6 -0
  645. package/src/sdk/agentcore-harness.js +7 -0
  646. package/src/sdk/agentcore-harness.js.map +1 -0
  647. package/src/sdk/connection.d.ts +6 -0
  648. package/src/sdk/connection.js +6 -0
  649. package/src/sdk/connection.js.map +1 -0
  650. package/src/sdk/license.d.ts +8 -0
  651. package/src/sdk/license.js +7 -0
  652. package/src/sdk/license.js.map +1 -0
  653. package/src/sdk/open-api.d.ts +10 -0
  654. package/src/sdk/open-api.js +8 -0
  655. package/src/sdk/open-api.js.map +1 -0
  656. package/src/sdk/py.d.ts +18 -0
  657. package/src/sdk/py.js +12 -0
  658. package/src/sdk/py.js.map +1 -0
  659. package/src/sdk/smithy.d.ts +6 -0
  660. package/src/sdk/smithy.js +7 -0
  661. package/src/sdk/smithy.js.map +1 -0
  662. package/src/sdk/terraform.d.ts +6 -0
  663. package/src/sdk/terraform.js +7 -0
  664. package/src/sdk/terraform.js.map +1 -0
  665. package/src/sdk/ts.d.ts +39 -0
  666. package/src/sdk/ts.js +41 -0
  667. package/src/sdk/ts.js.map +1 -0
  668. package/{sdk/utils/format.d.ts → src/sdk/utils/ast.d.ts} +1 -1
  669. package/src/sdk/utils/ast.js +6 -0
  670. package/src/sdk/utils/ast.js.map +1 -0
  671. package/src/sdk/utils/format.d.ts +5 -0
  672. package/src/sdk/utils/format.js +6 -0
  673. package/src/sdk/utils/format.js.map +1 -0
  674. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  675. package/src/sdk/utils/test.js +6 -0
  676. package/src/sdk/utils/test.js.map +1 -0
  677. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +245 -242
  678. package/src/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +5 -5
  679. package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
  680. package/src/smithy/project/files/shapes/smithy-build.json.template +7 -0
  681. package/src/smithy/project/files/shapes/src/main.smithy.template +11 -0
  682. package/src/smithy/project/files/ssdk-bundle/ssdk.rolldown.config.mjs.template +52 -0
  683. package/src/smithy/project/generator.d.ts +91 -1
  684. package/src/smithy/project/generator.js +223 -56
  685. package/src/smithy/project/generator.js.map +1 -1
  686. package/src/smithy/project/schema.d.js +6 -0
  687. package/src/smithy/project/schema.d.js.map +1 -0
  688. package/src/smithy/project/schema.d.ts +2 -0
  689. package/src/smithy/project/schema.json +28 -1
  690. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  691. package/src/smithy/react-connection/generator.d.ts +16 -1
  692. package/src/smithy/react-connection/generator.js +54 -48
  693. package/src/smithy/react-connection/generator.js.map +1 -1
  694. package/src/smithy/react-connection/schema.d.js +6 -0
  695. package/src/smithy/react-connection/schema.d.js.map +1 -0
  696. package/src/smithy/react-connection/schema.d.ts +1 -0
  697. package/src/smithy/react-connection/schema.json +5 -0
  698. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +871 -109
  699. package/src/smithy/ts/api/files/handler.ts.template +3 -3
  700. package/src/smithy/ts/api/files/local-server.ts.template +3 -3
  701. package/src/smithy/ts/api/files/operations/echo.ts.template +2 -2
  702. package/src/smithy/ts/api/files/service.ts.template +3 -3
  703. package/src/smithy/ts/api/generator.d.ts +89 -1
  704. package/src/smithy/ts/api/generator.js +187 -114
  705. package/src/smithy/ts/api/generator.js.map +1 -1
  706. package/src/smithy/ts/api/schema.d.js +6 -0
  707. package/src/smithy/ts/api/schema.d.js.map +1 -0
  708. package/src/smithy/ts/api/schema.d.ts +2 -1
  709. package/src/smithy/ts/api/schema.json +6 -0
  710. package/src/terraform/project/files/application/scripts/bootstrap.ts.template +40 -1
  711. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  712. package/src/terraform/project/files/application/src/providers.tf.template +1 -1
  713. package/src/terraform/project/generator.d.ts +51 -1
  714. package/src/terraform/project/generator.js +212 -111
  715. package/src/terraform/project/generator.js.map +1 -1
  716. package/src/terraform/project/schema.d.js +9 -0
  717. package/src/terraform/project/schema.d.js.map +1 -0
  718. package/src/terraform/project/schema.d.ts +1 -0
  719. package/src/terraform/project/schema.json +5 -0
  720. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +1182 -184
  721. package/src/trpc/backend/files/src/client/index.ts.template +1 -1
  722. package/src/trpc/backend/files/src/handler.ts.template +1 -1
  723. package/src/trpc/backend/files/src/index.ts.template +5 -5
  724. package/src/trpc/backend/files/src/init.ts.template +1 -1
  725. package/src/trpc/backend/files/src/local-server.ts.template +1 -1
  726. package/src/trpc/backend/files/src/middleware/index.ts.template +7 -7
  727. package/src/trpc/backend/files/src/procedures/echo.ts.template +3 -3
  728. package/src/trpc/backend/files/src/router.ts.template +2 -2
  729. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  730. package/src/trpc/backend/files/src/schema/index.ts.template +1 -1
  731. package/src/trpc/backend/generator.d.ts +91 -2
  732. package/src/trpc/backend/generator.js +177 -100
  733. package/src/trpc/backend/generator.js.map +1 -1
  734. package/src/trpc/backend/schema.d.js +6 -0
  735. package/src/trpc/backend/schema.d.js.map +1 -0
  736. package/src/trpc/backend/schema.d.ts +2 -1
  737. package/src/trpc/backend/schema.json +6 -0
  738. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  739. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  740. package/src/trpc/react/generator.d.ts +39 -2
  741. package/src/trpc/react/generator.js +105 -63
  742. package/src/trpc/react/generator.js.map +1 -1
  743. package/src/trpc/react/schema.d.js +6 -0
  744. package/src/trpc/react/schema.d.js.map +1 -0
  745. package/src/trpc/react/schema.d.ts +1 -0
  746. package/src/trpc/react/schema.json +5 -0
  747. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1483 -28
  748. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +258 -0
  749. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  750. package/src/ts/agent/a2a-connection/generator.d.ts +47 -1
  751. package/src/ts/agent/a2a-connection/generator.js +112 -63
  752. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  753. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  754. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  755. package/src/ts/agent/a2a-connection/schema.d.ts +2 -1
  756. package/src/ts/agent/a2a-connection/schema.json +5 -0
  757. package/src/ts/agent/files/a2a/index.ts.template +5 -12
  758. package/src/ts/agent/files/ag-ui/index.ts.template +29 -14
  759. package/src/ts/agent/files/common/agent.ts.template +15 -2
  760. package/src/ts/agent/files/common/session.ts.template +43 -0
  761. package/src/ts/agent/files/common-express/middleware/session-id-middleware.ts.template +16 -0
  762. package/src/ts/agent/files/deploy/Dockerfile.template +20 -2
  763. package/src/ts/agent/files/http/client.ts.template +2 -2
  764. package/src/ts/agent/files/http/index.ts.template +2 -2
  765. package/src/ts/agent/files/http/router.ts.template +5 -5
  766. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +222 -0
  767. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  768. package/src/ts/agent/gateway-connection/generator.d.ts +47 -0
  769. package/src/ts/agent/gateway-connection/generator.js +144 -0
  770. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  771. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  772. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  773. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  774. package/src/ts/agent/gateway-connection/schema.json +31 -0
  775. package/src/ts/agent/generator.d.ts +206 -1
  776. package/src/ts/agent/generator.js +347 -156
  777. package/src/ts/agent/generator.js.map +1 -1
  778. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +194 -113
  779. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +23 -0
  780. package/src/ts/agent/mcp-connection/generator.d.ts +38 -1
  781. package/src/ts/agent/mcp-connection/generator.js +88 -65
  782. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  783. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  784. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  785. package/src/ts/agent/mcp-connection/schema.d.ts +2 -1
  786. package/src/ts/agent/mcp-connection/schema.json +5 -0
  787. package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
  788. package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
  789. package/src/ts/agent/react-connection/generator.d.ts +204 -3
  790. package/src/ts/agent/react-connection/generator.js +158 -99
  791. package/src/ts/agent/react-connection/generator.js.map +1 -1
  792. package/src/ts/agent/react-connection/local-dev.d.ts +13 -0
  793. package/src/ts/agent/react-connection/local-dev.js +17 -0
  794. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  795. package/src/ts/agent/react-connection/schema.d.js +8 -0
  796. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  797. package/src/ts/agent/react-connection/schema.d.ts +2 -1
  798. package/src/ts/agent/react-connection/schema.json +5 -0
  799. package/src/ts/agent/schema.d.js +6 -0
  800. package/src/ts/agent/schema.d.js.map +1 -0
  801. package/src/ts/agent/schema.d.ts +5 -1
  802. package/src/ts/agent/schema.json +14 -0
  803. package/src/ts/api/generator.d.ts +1 -1
  804. package/src/ts/api/generator.js +16 -16
  805. package/src/ts/api/generator.js.map +1 -1
  806. package/src/ts/api/schema.d.js +6 -0
  807. package/src/ts/api/schema.d.js.map +1 -0
  808. package/src/ts/api/schema.d.ts +2 -1
  809. package/src/ts/api/schema.json +5 -0
  810. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +28 -14
  811. package/src/ts/astro-docs/files/base/src/content/docs/en/index.mdx.template +2 -2
  812. package/src/ts/astro-docs/files/base/src/content.config.ts.template +4 -4
  813. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +272 -150
  814. package/src/ts/astro-docs/generator.d.ts +39 -1
  815. package/src/ts/astro-docs/generator.js +126 -61
  816. package/src/ts/astro-docs/generator.js.map +1 -1
  817. package/src/ts/astro-docs/schema.d.js +6 -0
  818. package/src/ts/astro-docs/schema.d.js.map +1 -0
  819. package/src/ts/astro-docs/schema.d.ts +2 -2
  820. package/src/ts/astro-docs/schema.json +3 -3
  821. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +982 -0
  822. package/src/ts/dcr-proxy/generator.d.ts +34 -0
  823. package/src/ts/dcr-proxy/generator.js +115 -0
  824. package/src/ts/dcr-proxy/generator.js.map +1 -0
  825. package/src/ts/dcr-proxy/schema.d.js +6 -0
  826. package/src/ts/dcr-proxy/schema.d.js.map +1 -0
  827. package/src/ts/dcr-proxy/schema.d.ts +13 -0
  828. package/src/ts/dcr-proxy/schema.json +44 -0
  829. package/src/ts/docs/generator.d.ts +1 -1
  830. package/src/ts/docs/generator.js +10 -10
  831. package/src/ts/docs/generator.js.map +1 -1
  832. package/src/ts/docs/schema.d.js +6 -0
  833. package/src/ts/docs/schema.d.js.map +1 -0
  834. package/src/ts/docs/schema.d.ts +1 -4
  835. package/src/ts/docs/schema.json +3 -3
  836. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +490 -527
  837. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
  838. package/src/ts/dynamodb/agent-connection/generator.d.ts +1 -1
  839. package/src/ts/dynamodb/agent-connection/generator.js +27 -23
  840. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  841. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  842. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  843. package/src/ts/dynamodb/agent-connection/schema.d.ts +2 -1
  844. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  845. package/src/ts/dynamodb/files/config.json.template +24 -0
  846. package/src/ts/dynamodb/files/src/client.ts.template +30 -11
  847. package/src/ts/dynamodb/files/src/entities/example.ts.template +1 -1
  848. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -1
  849. package/src/ts/dynamodb/files/src/index.ts.template +2 -11
  850. package/src/ts/dynamodb/generator.d.ts +42 -1
  851. package/src/ts/dynamodb/generator.js +107 -64
  852. package/src/ts/dynamodb/generator.js.map +1 -1
  853. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +23 -5
  854. package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +1 -1
  855. package/src/ts/dynamodb/mcp-server-connection/generator.js +27 -23
  856. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  857. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  858. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  859. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +2 -1
  860. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  861. package/src/ts/dynamodb/schema.d.js +6 -0
  862. package/src/ts/dynamodb/schema.d.js.map +1 -0
  863. package/src/ts/dynamodb/schema.d.ts +3 -1
  864. package/src/ts/dynamodb/schema.json +26 -2
  865. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
  866. package/src/ts/dynamodb/smithy-connection/generator.d.ts +1 -1
  867. package/src/ts/dynamodb/smithy-connection/generator.js +22 -22
  868. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  869. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  870. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  871. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  872. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  873. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  874. package/src/ts/dynamodb/trpc-connection/generator.d.ts +1 -1
  875. package/src/ts/dynamodb/trpc-connection/generator.js +22 -22
  876. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  877. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  878. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  879. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  880. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  881. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -6
  882. package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
  883. package/src/ts/lambda-function/generator.d.ts +39 -1
  884. package/src/ts/lambda-function/generator.js +98 -65
  885. package/src/ts/lambda-function/generator.js.map +1 -1
  886. package/src/ts/lambda-function/io.js +83 -52
  887. package/src/ts/lambda-function/io.js.map +1 -1
  888. package/src/ts/lambda-function/schema.d.js +6 -0
  889. package/src/ts/lambda-function/schema.d.js.map +1 -0
  890. package/src/ts/lambda-function/schema.d.ts +2 -1
  891. package/src/ts/lambda-function/schema.json +5 -0
  892. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -45
  893. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +1 -1
  894. package/src/ts/lib/biome.d.ts +1 -1
  895. package/src/ts/lib/biome.js +71 -35
  896. package/src/ts/lib/biome.js.map +1 -1
  897. package/src/ts/lib/generator.d.ts +8 -1
  898. package/src/ts/lib/generator.js +115 -103
  899. package/src/ts/lib/generator.js.map +1 -1
  900. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  901. package/src/ts/lib/schema.d.js +6 -0
  902. package/src/ts/lib/schema.d.js.map +1 -0
  903. package/src/ts/lib/schema.d.ts +1 -1
  904. package/src/ts/lib/schema.json +5 -0
  905. package/src/ts/lib/ts-project-utils.d.ts +14 -2
  906. package/src/ts/lib/ts-project-utils.js +96 -71
  907. package/src/ts/lib/ts-project-utils.js.map +1 -1
  908. package/src/ts/lib/types.d.ts +6 -0
  909. package/src/ts/lib/types.js +5 -2
  910. package/src/ts/lib/types.js.map +1 -1
  911. package/src/ts/lib/vitest.d.ts +11 -2
  912. package/src/ts/lib/vitest.js +54 -26
  913. package/src/ts/lib/vitest.js.map +1 -1
  914. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +221 -44
  915. package/src/ts/mcp-server/files/Dockerfile.template +20 -2
  916. package/src/ts/mcp-server/generator.d.ts +111 -1
  917. package/src/ts/mcp-server/generator.js +236 -162
  918. package/src/ts/mcp-server/generator.js.map +1 -1
  919. package/src/ts/mcp-server/schema.d.js +6 -0
  920. package/src/ts/mcp-server/schema.d.js.map +1 -0
  921. package/src/ts/mcp-server/schema.d.ts +2 -1
  922. package/src/ts/mcp-server/schema.json +6 -0
  923. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +28 -13
  924. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  925. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  926. package/src/ts/nx-generator/files/local/generator.spec.ts.template +1 -1
  927. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  928. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  929. package/src/ts/nx-generator/generator.d.ts +3 -0
  930. package/src/ts/nx-generator/generator.js +124 -72
  931. package/src/ts/nx-generator/generator.js.map +1 -1
  932. package/src/ts/nx-generator/schema.d.js +6 -0
  933. package/src/ts/nx-generator/schema.d.js.map +1 -0
  934. package/src/ts/nx-generator/schema.d.ts +1 -0
  935. package/src/ts/nx-generator/schema.json +5 -0
  936. package/src/ts/nx-migration/files/migration.spec.ts.template +26 -0
  937. package/src/ts/nx-migration/files/migration.ts.template +65 -0
  938. package/src/ts/nx-migration/files/prompt.md.template +46 -0
  939. package/src/ts/nx-migration/generator.d.ts +27 -0
  940. package/src/ts/nx-migration/generator.js +147 -0
  941. package/src/ts/nx-migration/generator.js.map +1 -0
  942. package/src/ts/nx-migration/schema.d.js +6 -0
  943. package/src/ts/nx-migration/schema.d.js.map +1 -0
  944. package/src/ts/nx-migration/schema.d.ts +13 -0
  945. package/src/ts/nx-migration/schema.json +63 -0
  946. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +36 -25
  947. package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
  948. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  949. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  950. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  951. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  952. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  953. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +4 -4
  954. package/src/ts/nx-plugin/generator.d.ts +4 -1
  955. package/src/ts/nx-plugin/generator.js +67 -50
  956. package/src/ts/nx-plugin/generator.js.map +1 -1
  957. package/src/ts/nx-plugin/schema.d.js +9 -0
  958. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  959. package/src/ts/nx-plugin/schema.json +5 -0
  960. package/src/ts/nx-plugin/utils.d.ts +27 -2
  961. package/src/ts/nx-plugin/utils.js +66 -51
  962. package/src/ts/nx-plugin/utils.js.map +1 -1
  963. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +555 -644
  964. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
  965. package/src/ts/rdb/agent-connection/generator.d.ts +1 -1
  966. package/src/ts/rdb/agent-connection/generator.js +44 -39
  967. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  968. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  969. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  970. package/src/ts/rdb/agent-connection/schema.d.ts +2 -1
  971. package/src/ts/rdb/agent-connection/schema.json +5 -0
  972. package/src/ts/rdb/files/Dockerfile.template +19 -1
  973. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  974. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +9 -11
  975. package/src/ts/rdb/files/src/migration-handler.ts.template +5 -30
  976. package/src/ts/rdb/files/src/prisma.ts.template +33 -25
  977. package/src/ts/rdb/files/src/utils.ts.template +3 -0
  978. package/src/ts/rdb/generator.d.ts +118 -5
  979. package/src/ts/rdb/generator.js +285 -138
  980. package/src/ts/rdb/generator.js.map +1 -1
  981. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +16 -6
  982. package/src/ts/rdb/mcp-server-connection/generator.d.ts +1 -1
  983. package/src/ts/rdb/mcp-server-connection/generator.js +42 -37
  984. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  985. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  986. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  987. package/src/ts/rdb/mcp-server-connection/schema.d.ts +2 -1
  988. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  989. package/src/ts/rdb/schema.d.js +6 -0
  990. package/src/ts/rdb/schema.d.js.map +1 -0
  991. package/src/ts/rdb/schema.d.ts +2 -1
  992. package/src/ts/rdb/schema.json +7 -1
  993. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +18 -9
  994. package/src/ts/rdb/smithy-connection/generator.d.ts +1 -1
  995. package/src/ts/rdb/smithy-connection/generator.js +48 -43
  996. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  997. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  998. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  999. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  1000. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  1001. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  1002. package/src/ts/rdb/trpc-connection/generator.d.ts +1 -1
  1003. package/src/ts/rdb/trpc-connection/generator.js +37 -31
  1004. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  1005. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  1006. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  1007. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  1008. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  1009. package/src/ts/rdb/utils.js +9 -11
  1010. package/src/ts/rdb/utils.js.map +1 -1
  1011. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +17 -16
  1012. package/src/ts/react-website/agui/generator.d.ts +97 -0
  1013. package/src/ts/react-website/agui/generator.js +114 -67
  1014. package/src/ts/react-website/agui/generator.js.map +1 -1
  1015. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +1648 -690
  1016. package/src/ts/react-website/app/files/app/common/README.md.template +1 -1
  1017. package/src/ts/react-website/app/generator.d.ts +143 -3
  1018. package/src/ts/react-website/app/generator.js +335 -209
  1019. package/src/ts/react-website/app/generator.js.map +1 -1
  1020. package/src/ts/react-website/app/schema.d.js +6 -0
  1021. package/src/ts/react-website/app/schema.d.js.map +1 -0
  1022. package/src/ts/react-website/app/schema.d.ts +3 -3
  1023. package/src/ts/react-website/app/schema.json +12 -6
  1024. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +198 -33
  1025. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +74 -12
  1026. package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
  1027. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  1028. package/src/ts/react-website/cognito-auth/generator.d.ts +26 -2
  1029. package/src/ts/react-website/cognito-auth/generator.js +79 -64
  1030. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  1031. package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +3 -1
  1032. package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
  1033. package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
  1034. package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
  1035. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  1036. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  1037. package/src/ts/react-website/cognito-auth/schema.d.ts +2 -1
  1038. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  1039. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  1040. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  1041. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  1042. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  1043. package/src/ts/react-website/runtime-config/generator.d.ts +1 -1
  1044. package/src/ts/react-website/runtime-config/generator.js +29 -31
  1045. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  1046. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  1047. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  1048. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  1049. package/src/ts/react-website/runtime-config/schema.json +5 -0
  1050. package/src/ts/sync/generator.d.ts +1 -1
  1051. package/src/ts/sync/generator.js +137 -60
  1052. package/src/ts/sync/generator.js.map +1 -1
  1053. package/src/ts/website/app/generator.d.ts +1 -1
  1054. package/src/ts/website/app/generator.js +10 -10
  1055. package/src/ts/website/app/generator.js.map +1 -1
  1056. package/src/ts/website/app/schema.d.js +6 -0
  1057. package/src/ts/website/app/schema.d.js.map +1 -0
  1058. package/src/ts/website/app/schema.d.ts +3 -3
  1059. package/src/ts/website/app/schema.json +11 -6
  1060. package/src/ts/website/auth/generator.d.ts +2 -2
  1061. package/src/ts/website/auth/generator.js +11 -10
  1062. package/src/ts/website/auth/generator.js.map +1 -1
  1063. package/src/ts/website/auth/schema.d.js +6 -0
  1064. package/src/ts/website/auth/schema.d.js.map +1 -0
  1065. package/src/ts/website/auth/schema.d.ts +2 -1
  1066. package/src/ts/website/auth/schema.json +5 -0
  1067. package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +21 -0
  1068. package/src/utils/add-dependencies.d.ts +38 -0
  1069. package/src/utils/add-dependencies.js +83 -0
  1070. package/src/utils/add-dependencies.js.map +1 -0
  1071. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  1072. package/src/utils/agent-chat/agent-chat.js +31 -0
  1073. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  1074. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  1075. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  1076. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  1077. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  1078. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  1079. package/src/utils/agent-connection/agent-connection.d.ts +149 -26
  1080. package/src/utils/agent-connection/agent-connection.js +511 -103
  1081. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  1082. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  1083. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  1084. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  1085. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  1086. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  1087. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +35 -33
  1088. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  1089. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  1090. package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +47 -0
  1091. package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +29 -0
  1092. package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +1 -1
  1093. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  1094. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  1095. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  1096. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  1097. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  1098. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  1099. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +105 -0
  1100. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  1101. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  1102. package/src/utils/agent-connection/files/py-core-langchain/s3/s3_checkpoint_saver_langchain.py.template +360 -0
  1103. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  1104. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +4 -18
  1105. package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +2 -2
  1106. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  1107. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +111 -0
  1108. package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
  1109. package/src/utils/agent-connection/files/py-core-strands/base/tool_errors_strands.py.template +24 -0
  1110. package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +2 -2
  1111. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  1112. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  1113. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +81 -2
  1114. package/src/utils/agent-core-constructs/agent-core-constructs.js +212 -38
  1115. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  1116. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +273 -9
  1117. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +87 -0
  1118. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +366 -0
  1119. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +624 -0
  1120. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  1121. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +281 -1
  1122. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +521 -0
  1123. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  1124. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +282 -0
  1125. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +159 -13
  1126. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  1127. package/src/utils/api-constructs/api-constructs.d.ts +31 -3
  1128. package/src/utils/api-constructs/api-constructs.js +82 -32
  1129. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  1130. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +20 -15
  1131. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +24 -16
  1132. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +26 -9
  1133. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +70 -0
  1134. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  1135. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +56 -17
  1136. package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
  1137. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  1138. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +101 -12
  1139. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +194 -8
  1140. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  1141. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  1142. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
  1143. package/src/utils/api-constructs/open-api-metadata.d.ts +1 -1
  1144. package/src/utils/api-constructs/open-api-metadata.js +22 -22
  1145. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  1146. package/src/utils/ast/website.js +18 -20
  1147. package/src/utils/ast/website.js.map +1 -1
  1148. package/src/utils/ast.d.ts +38 -0
  1149. package/src/utils/ast.js +162 -86
  1150. package/src/utils/ast.js.map +1 -1
  1151. package/src/utils/base-tsconfig.d.ts +30 -0
  1152. package/src/utils/base-tsconfig.js +32 -0
  1153. package/src/utils/base-tsconfig.js.map +1 -0
  1154. package/src/utils/bundle/bundle.d.ts +6 -1
  1155. package/src/utils/bundle/bundle.js +58 -48
  1156. package/src/utils/bundle/bundle.js.map +1 -1
  1157. package/src/utils/commands.d.ts +14 -3
  1158. package/src/utils/commands.js +83 -28
  1159. package/src/utils/commands.js.map +1 -1
  1160. package/src/utils/config/index.d.ts +22 -6
  1161. package/src/utils/config/index.js +5 -4
  1162. package/src/utils/config/index.js.map +1 -1
  1163. package/src/utils/config/utils.d.ts +9 -3
  1164. package/src/utils/config/utils.js +56 -59
  1165. package/src/utils/config/utils.js.map +1 -1
  1166. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +16 -3
  1167. package/src/utils/connection/open-api/react.d.ts +31 -5
  1168. package/src/utils/connection/open-api/react.js +106 -76
  1169. package/src/utils/connection/open-api/react.js.map +1 -1
  1170. package/src/utils/containers.js +22 -23
  1171. package/src/utils/containers.js.map +1 -1
  1172. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +38 -0
  1173. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +93 -0
  1174. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -0
  1175. package/src/utils/dcr-proxy-constructs/files/cdk/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.ts.template +227 -0
  1176. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorization-server-metadata.ts.template +39 -0
  1177. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorize.ts.template +26 -0
  1178. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/mcp-proxy.ts.template +89 -0
  1179. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/protected-resource-metadata.ts.template +13 -0
  1180. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/register.ts.template +70 -0
  1181. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/token.ts.template +75 -0
  1182. package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +410 -0
  1183. package/src/utils/declared-dependencies.d.ts +140 -0
  1184. package/src/utils/declared-dependencies.js +64 -0
  1185. package/src/utils/declared-dependencies.js.map +1 -0
  1186. package/src/utils/dependencies.d.ts +18 -0
  1187. package/src/utils/dependencies.js +206 -0
  1188. package/src/utils/dependencies.js.map +1 -0
  1189. package/src/utils/docker.d.ts +89 -0
  1190. package/src/utils/docker.js +125 -0
  1191. package/src/utils/docker.js.map +1 -0
  1192. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +2 -2
  1193. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +39 -41
  1194. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  1195. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +18 -5
  1196. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +24 -4
  1197. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +51 -18
  1198. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +40 -6
  1199. package/src/utils/files/common/constructs/src/core/cloudfront.ts.template +14 -0
  1200. package/src/utils/files/common/constructs/src/core/index.ts.template +5 -4
  1201. package/src/utils/files/common/constructs/src/index.ts.template +2 -2
  1202. package/src/utils/files/common/infra-config/src/index.ts.template +3 -3
  1203. package/src/utils/files/common/infra-config/src/resolve-stage.ts.template +2 -2
  1204. package/src/utils/files/common/infra-config/src/stages.config.ts.template +1 -1
  1205. package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/create-local-table.ts.template +65 -31
  1206. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  1207. package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +103 -0
  1208. package/src/utils/files/common/scripts/src/infra/infra-deploy.ts.template +2 -0
  1209. package/src/utils/files/common/scripts/src/infra/infra-destroy.ts.template +2 -0
  1210. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
  1211. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +3 -3
  1212. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  1213. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  1214. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  1215. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +115 -0
  1216. package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
  1217. package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
  1218. package/src/utils/files/shadcn/components.json.template +1 -1
  1219. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +63 -72
  1220. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
  1221. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
  1222. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  1223. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  1224. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  1225. package/src/utils/format.d.ts +39 -4
  1226. package/src/utils/format.js +318 -198
  1227. package/src/utils/format.js.map +1 -1
  1228. package/src/utils/fs.d.ts +24 -5
  1229. package/src/utils/fs.js +40 -15
  1230. package/src/utils/fs.js.map +1 -1
  1231. package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
  1232. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
  1233. package/src/utils/function-constructs/function-constructs.d.ts +1 -1
  1234. package/src/utils/function-constructs/function-constructs.js +22 -25
  1235. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  1236. package/src/utils/generators.js +18 -20
  1237. package/src/utils/generators.js.map +1 -1
  1238. package/src/utils/git.js +19 -34
  1239. package/src/utils/git.js.map +1 -1
  1240. package/src/utils/iac-providers.js +5 -5
  1241. package/src/utils/iac-providers.js.map +1 -1
  1242. package/src/utils/iac.d.ts +2 -2
  1243. package/src/utils/iac.js +12 -14
  1244. package/src/utils/iac.js.map +1 -1
  1245. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +193 -30
  1246. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
  1247. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +177 -25
  1248. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +33 -0
  1249. package/src/utils/identity-constructs/identity-constructs.d.ts +11 -1
  1250. package/src/utils/identity-constructs/identity-constructs.js +52 -31
  1251. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  1252. package/src/utils/init.d.ts +72 -0
  1253. package/src/utils/init.js +300 -0
  1254. package/src/utils/init.js.map +1 -0
  1255. package/src/utils/install.d.ts +32 -0
  1256. package/src/utils/install.js +58 -0
  1257. package/src/utils/install.js.map +1 -0
  1258. package/src/utils/js.js +27 -20
  1259. package/src/utils/js.js.map +1 -1
  1260. package/src/utils/mcp.d.ts +9 -0
  1261. package/src/utils/mcp.js +42 -41
  1262. package/src/utils/mcp.js.map +1 -1
  1263. package/src/utils/metrics.d.ts +8 -2
  1264. package/src/utils/metrics.js +61 -46
  1265. package/src/utils/metrics.js.map +1 -1
  1266. package/src/utils/migration-manifest.d.ts +58 -0
  1267. package/src/utils/migration-manifest.js +76 -0
  1268. package/src/utils/migration-manifest.js.map +1 -0
  1269. package/src/utils/migration-versions.d.ts +145 -0
  1270. package/src/utils/migration-versions.js +250 -0
  1271. package/src/utils/migration-versions.js.map +1 -0
  1272. package/src/utils/mock-project-graph.js +8 -12
  1273. package/src/utils/mock-project-graph.js.map +1 -1
  1274. package/src/utils/module-format.d.ts +25 -0
  1275. package/src/utils/module-format.js +45 -0
  1276. package/src/utils/module-format.js.map +1 -0
  1277. package/src/utils/names.d.ts +22 -0
  1278. package/src/utils/names.js +44 -48
  1279. package/src/utils/names.js.map +1 -1
  1280. package/src/utils/npm-scope.d.ts +0 -4
  1281. package/src/utils/npm-scope.js +7 -20
  1282. package/src/utils/npm-scope.js.map +1 -1
  1283. package/src/utils/nx.d.ts +77 -6
  1284. package/src/utils/nx.js +196 -75
  1285. package/src/utils/nx.js.map +1 -1
  1286. package/src/utils/nxlv-python.js +27 -15
  1287. package/src/utils/nxlv-python.js.map +1 -1
  1288. package/src/utils/object.js +5 -11
  1289. package/src/utils/object.js.map +1 -1
  1290. package/src/utils/paths.js +11 -15
  1291. package/src/utils/paths.js.map +1 -1
  1292. package/src/utils/pkg-manager.d.ts +1 -1
  1293. package/src/utils/pkg-manager.js +4 -9
  1294. package/src/utils/pkg-manager.js.map +1 -1
  1295. package/src/utils/pnpm-workspace.d.ts +1 -12
  1296. package/src/utils/pnpm-workspace.js +16 -43
  1297. package/src/utils/pnpm-workspace.js.map +1 -1
  1298. package/src/utils/port.d.ts +28 -6
  1299. package/src/utils/port.js +67 -28
  1300. package/src/utils/port.js.map +1 -1
  1301. package/src/utils/project-package-json.d.ts +39 -0
  1302. package/src/utils/project-package-json.js +119 -0
  1303. package/src/utils/project-package-json.js.map +1 -0
  1304. package/src/utils/py.d.ts +18 -4
  1305. package/src/utils/py.js +73 -48
  1306. package/src/utils/py.js.map +1 -1
  1307. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +72 -18
  1308. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +112 -88
  1309. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +127 -53
  1310. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +60 -53
  1311. package/src/utils/rdb-constructs/rdb-constructs.d.ts +14 -3
  1312. package/src/utils/rdb-constructs/rdb-constructs.js +38 -41
  1313. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  1314. package/src/utils/ruff.d.ts +59 -0
  1315. package/src/utils/ruff.js +140 -0
  1316. package/src/utils/ruff.js.map +1 -0
  1317. package/src/utils/shared-constructs-constants.d.ts +46 -4
  1318. package/src/utils/shared-constructs-constants.js +50 -15
  1319. package/src/utils/shared-constructs-constants.js.map +1 -1
  1320. package/src/utils/shared-constructs.d.ts +5 -2
  1321. package/src/utils/shared-constructs.js +62 -67
  1322. package/src/utils/shared-constructs.js.map +1 -1
  1323. package/src/utils/shared-dynamodb-scripts.d.ts +18 -0
  1324. package/src/utils/shared-dynamodb-scripts.js +35 -0
  1325. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  1326. package/src/utils/shared-infra-config.js +31 -30
  1327. package/src/utils/shared-infra-config.js.map +1 -1
  1328. package/src/utils/shared-infra-scripts.d.ts +26 -0
  1329. package/src/utils/shared-infra-scripts.js +58 -0
  1330. package/src/utils/shared-infra-scripts.js.map +1 -0
  1331. package/src/utils/shared-rdb-scripts.d.ts +27 -0
  1332. package/src/utils/shared-rdb-scripts.js +59 -0
  1333. package/src/utils/shared-rdb-scripts.js.map +1 -0
  1334. package/src/utils/shared-scripts.d.ts +1 -4
  1335. package/src/utils/shared-scripts.js +12 -38
  1336. package/src/utils/shared-scripts.js.map +1 -1
  1337. package/src/utils/shared-shadcn.d.ts +26 -1
  1338. package/src/utils/shared-shadcn.js +93 -67
  1339. package/src/utils/shared-shadcn.js.map +1 -1
  1340. package/src/utils/smithy.d.ts +59 -0
  1341. package/src/utils/smithy.js +73 -0
  1342. package/src/utils/smithy.js.map +1 -0
  1343. package/src/utils/test-git.d.ts +39 -0
  1344. package/src/utils/test-git.js +117 -0
  1345. package/src/utils/test-git.js.map +1 -0
  1346. package/src/utils/test.d.ts +10 -0
  1347. package/src/utils/test.js +44 -25
  1348. package/src/utils/test.js.map +1 -1
  1349. package/src/utils/toml.d.ts +5 -0
  1350. package/src/utils/toml.js +17 -15
  1351. package/src/utils/toml.js.map +1 -1
  1352. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  1353. package/src/utils/version-upgrade-migration/migration.js +16 -0
  1354. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  1355. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
  1356. package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
  1357. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  1358. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +76 -0
  1359. package/src/utils/version-upgrade-migration/owned-dependencies.js +146 -0
  1360. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  1361. package/src/utils/version-upgrade-migration/register.d.ts +29 -0
  1362. package/src/utils/version-upgrade-migration/register.js +42 -0
  1363. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  1364. package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
  1365. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +352 -0
  1366. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
  1367. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  1368. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  1369. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  1370. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  1371. package/src/utils/version-upgrade-migration/sync-vended-versions.js +518 -0
  1372. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  1373. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  1374. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  1375. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  1376. package/src/utils/versions.d.ts +243 -108
  1377. package/src/utils/versions.js +268 -121
  1378. package/src/utils/versions.js.map +1 -1
  1379. package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +12 -3
  1380. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +252 -49
  1381. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +56 -1
  1382. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +201 -107
  1383. package/src/utils/website-constructs/website-constructs.d.ts +12 -1
  1384. package/src/utils/website-constructs/website-constructs.js +49 -30
  1385. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  1386. package/bin/aws-nx-mcp.d.ts +0 -2
  1387. package/bin/aws-nx-mcp.js +0 -17
  1388. package/bin/aws-nx-mcp.js.map +0 -1
  1389. package/sdk/connection.d.ts +0 -6
  1390. package/sdk/connection.js +0 -10
  1391. package/sdk/connection.js.map +0 -1
  1392. package/sdk/license.d.ts +0 -8
  1393. package/sdk/license.js +0 -13
  1394. package/sdk/license.js.map +0 -1
  1395. package/sdk/open-api.d.ts +0 -10
  1396. package/sdk/open-api.js +0 -15
  1397. package/sdk/open-api.js.map +0 -1
  1398. package/sdk/py.d.ts +0 -14
  1399. package/sdk/py.js +0 -18
  1400. package/sdk/py.js.map +0 -1
  1401. package/sdk/terraform.d.ts +0 -6
  1402. package/sdk/terraform.js +0 -11
  1403. package/sdk/terraform.js.map +0 -1
  1404. package/sdk/ts.d.ts +0 -29
  1405. package/sdk/ts.js +0 -47
  1406. package/sdk/ts.js.map +0 -1
  1407. package/sdk/utils/ast.js +0 -12
  1408. package/sdk/utils/ast.js.map +0 -1
  1409. package/sdk/utils/format.js +0 -10
  1410. package/sdk/utils/format.js.map +0 -1
  1411. package/sdk/utils/test.js +0 -10
  1412. package/sdk/utils/test.js.map +0 -1
  1413. package/src/connection/agent-serve-local.d.ts +0 -33
  1414. package/src/connection/agent-serve-local.js +0 -48
  1415. package/src/connection/agent-serve-local.js.map +0 -1
  1416. package/src/connection/serve-local.js +0 -41
  1417. package/src/connection/serve-local.js.map +0 -1
  1418. package/src/py/agent/__snapshots__/generator.spec.ts.snap +0 -769
  1419. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  1420. package/src/py/agent/files/a2a/main.py.template +0 -54
  1421. package/src/py/agent/files/ag-ui/main.py.template +0 -37
  1422. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  1423. package/src/py/agent/react-connection/serve-local.js +0 -30
  1424. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  1425. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  1426. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  1427. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  1428. package/src/ts/agent/react-connection/serve-local.d.ts +0 -13
  1429. package/src/ts/agent/react-connection/serve-local.js +0 -19
  1430. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  1431. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  1432. package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
  1433. package/src/ts/dynamodb/files/scripts/start-container.ts.template +0 -81
  1434. package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
  1435. package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
  1436. package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
  1437. package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
  1438. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1439. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1440. package/src/ts/rdb/files/src/index.ts.template +0 -2
  1441. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1442. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1443. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1444. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1445. package/src/utils/files/common/scripts/src/infra-deploy.ts.template +0 -2
  1446. package/src/utils/files/common/scripts/src/infra-destroy.ts.template +0 -2
  1447. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
  1448. /package/src/py/agent/files/{common → langchain/common}/__init__.py.template +0 -0
  1449. /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -0
  1450. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1451. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1452. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
@@ -22,137 +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/pull-image.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/start-container.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 --rm --name \${containerName}\` +
76
- \` -e MYSQL_DATABASE=\${dbName}\` +
77
- \` -e MYSQL_ROOT_PASSWORD=\${dbPassword}\` +
78
- \` -p \${hostPort}:3306\` +
79
- \` -v \${containerName}-data:/var/lib/mysql\` +
80
- \` -d \${image}\`
81
- ).split(' ');
82
- const create = spawnSync(ENGINE, runArgs, { stdio: 'inherit' });
83
- if (create.status !== 0) process.exit(create.status ?? 1);
84
- }
85
-
86
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
87
- stdio: ['ignore', 'inherit', 'inherit'],
88
- });
89
-
90
- let exiting = false;
91
-
92
- const cleanup = () => {
93
- if (exiting) return;
94
- exiting = true;
95
- spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
96
- logs.kill();
97
- process.exit(0);
98
- };
99
-
100
- process.on('SIGTERM', cleanup);
101
- process.on('SIGINT', cleanup);
102
- process.on('SIGHUP', cleanup);
103
-
104
- logs.on('exit', (code) => {
105
- if (!exiting) process.exit(code ?? 0);
106
- });
107
- "
108
- `;
109
-
110
- exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/scripts/wait-for-db.ts 1`] = `
111
- "import { createConnection, Connection } from 'mariadb';
112
-
113
- const noop = () => undefined;
114
-
115
- const [portArg, dbArg, userArg, passwordArg] = process.argv.slice(2);
116
- const timeoutAt = Date.now() + 60000;
117
-
118
- while (Date.now() < timeoutAt) {
119
- let conn: Connection | undefined;
120
- try {
121
- conn = await createConnection({
122
- host: 'localhost',
123
- port: parseInt(portArg),
124
- user: userArg,
125
- password: passwordArg,
126
- database: dbArg,
127
- connectTimeout: 500,
128
- allowPublicKeyRetrieval: true,
129
- });
130
- await conn.end();
131
- console.log('Database is ready.');
132
- process.exit(0);
133
- } catch {
134
- console.log('Database is not ready.');
135
- await conn?.end().catch(noop);
136
- }
137
- await new Promise((r) => setTimeout(r, 200));
138
- }
139
-
140
- throw new Error(\`Timed out waiting for mysql on port \${portArg}\`);
141
- "
142
- `;
143
-
144
- exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/constants.ts 1`] = `
145
- "export const DB_PACKAGE_NAME = 'Db';
146
-
147
- // Local development connection details (used when SERVE_LOCAL=true, see serve-local Nx target)
148
- export const LOCAL_DB_PORT = 3306;
149
- export const LOCAL_DB_HOST = 'localhost';
150
- export const LOCAL_DB_NAME = 'database_name';
151
- export const LOCAL_DB_USER = 'root';
152
- export const LOCAL_DB_PASSWORD = 'password';
153
- "
154
- `;
155
-
156
25
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/create-db-user-handler.ts 1`] = `
157
26
  "import type { CloudFormationCustomResourceEvent } from 'aws-lambda';
158
27
  import { randomBytes } from 'node:crypto';
@@ -199,7 +68,7 @@ const ensureDatabaseUser = async (dbUser: string): Promise<void> => {
199
68
  [
200
69
  \`CREATE USER IF NOT EXISTS \${quotedUser}@\${quotedHost} IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'\`,
201
70
  \`ALTER USER \${quotedUser}@\${quotedHost} IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS' REQUIRE SSL\`,
202
- \`GRANT ALL PRIVILEGES ON \${quotedDbName}.* TO \${quotedUser}@\${quotedHost}\`,
71
+ \`GRANT SELECT, INSERT, UPDATE, DELETE ON \${quotedDbName}.* TO \${quotedUser}@\${quotedHost}\`,
203
72
  ].join(';\\n'),
204
73
  );
205
74
  } finally {
@@ -230,13 +99,14 @@ export const handler = async (
230
99
  `;
231
100
 
232
101
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/index.ts 1`] = `
233
- "export { DB_PACKAGE_NAME } from './constants.js';
234
- export { getPrisma } from './prisma.js';
102
+ "export * from './prisma.js';
103
+ // Export your library code here
235
104
  "
236
105
  `;
237
106
 
238
107
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL > packages/db/src/migration-handler.ts 1`] = `
239
108
  "import { execFile } from 'node:child_process';
109
+ import { join } from 'node:path';
240
110
  import { promisify } from 'node:util';
241
111
  import { getDatabaseSecret, withConnectionRetry } from './utils.js';
242
112
 
@@ -254,7 +124,8 @@ const buildDatabaseUrl = async (): Promise<string> => {
254
124
  export const handler = async () => {
255
125
  await withConnectionRetry(async () => {
256
126
  const databaseUrl = await buildDatabaseUrl();
257
- await promisify(execFile)('npx', ['prisma', 'migrate', 'deploy'], {
127
+ const prisma = join(__dirname, 'node_modules', '.bin', 'prisma');
128
+ await promisify(execFile)(prisma, ['migrate', 'deploy'], {
258
129
  cwd: __dirname,
259
130
  env: {
260
131
  ...process.env,
@@ -270,26 +141,30 @@ exports[`ts#rdb generator > should add mysql prisma dependencies when engine is
270
141
  "import { PrismaMariaDb } from '@prisma/adapter-mariadb';
271
142
  import { Signer } from '@aws-sdk/rds-signer';
272
143
  import { Prisma, PrismaClient } from '../generated/prisma/client.js';
273
- import {
274
- DB_PACKAGE_NAME,
275
- LOCAL_DB_HOST,
276
- LOCAL_DB_NAME,
277
- LOCAL_DB_PASSWORD,
278
- LOCAL_DB_PORT,
279
- LOCAL_DB_USER,
280
- } from './constants.js';
144
+ import { readFileSync } from 'fs';
145
+ import { join, dirname } from 'path';
146
+ import { fileURLToPath } from 'url';
281
147
  import { getDatabaseConfig } from './utils.js';
282
148
 
149
+ // Generated: must match runtimeConfigKey in config.json
150
+ const runtimeConfigKey = 'Db';
151
+
152
+ const __dirname = dirname(fileURLToPath(import.meta.url));
153
+ // config.json is only present in local dev (not included in the deployed bundle); guard with LOCAL_DEV check
154
+ const localDev = () =>
155
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).localDev;
156
+
283
157
  export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
284
158
  log: LogOpts[] = ['warn', 'error'] as LogOpts[],
285
159
  ): Promise<PrismaClient<LogOpts>> => {
286
- if (process.env.SERVE_LOCAL === 'true') {
160
+ if (process.env.LOCAL_DEV === 'true') {
161
+ const { host, port, dbName, dbUser, dbPassword } = localDev();
287
162
  const adapter = new PrismaMariaDb({
288
- host: LOCAL_DB_HOST,
289
- port: LOCAL_DB_PORT,
290
- database: LOCAL_DB_NAME,
291
- user: LOCAL_DB_USER,
292
- password: LOCAL_DB_PASSWORD,
163
+ host,
164
+ port,
165
+ database: dbName,
166
+ user: dbUser,
167
+ password: dbPassword,
293
168
  allowPublicKeyRetrieval: true,
294
169
  });
295
170
  return new PrismaClient({
@@ -299,7 +174,7 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
299
174
  }
300
175
 
301
176
  const { hostname, port, database, dbUser, region } =
302
- await getDatabaseConfig(DB_PACKAGE_NAME);
177
+ await getDatabaseConfig(runtimeConfigKey);
303
178
  const iamAuthToken = await new Signer({
304
179
  hostname,
305
180
  port,
@@ -424,6 +299,9 @@ const transientErrorPatterns = [
424
299
  'ECONNREFUSED',
425
300
  'ENOTFOUND',
426
301
  'P1000', // Prisma: authentication failed
302
+ 'P1001', // Prisma: can't reach database server
303
+ 'P1002', // Prisma: database server reached but timed out
304
+ 'P1010', // Prisma: user denied access (IAM auth grant not yet propagated)
427
305
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
428
306
  ];
429
307
 
@@ -484,14 +362,10 @@ import { CustomResource } from 'aws-cdk-lib';
484
362
  import { IConnectable, IVpc, Port, SubnetType } from 'aws-cdk-lib/aws-ec2';
485
363
  import { IGrantable, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
486
364
  import { Key } from 'aws-cdk-lib/aws-kms';
487
- import { Platform } from 'aws-cdk-lib/aws-ecr-assets';
488
365
  import {
489
366
  Architecture,
490
- Code,
491
- DockerImageCode,
492
- DockerImageFunction,
493
367
  Function,
494
- Runtime,
368
+ FunctionOptions,
495
369
  Tracing,
496
370
  } from 'aws-cdk-lib/aws-lambda';
497
371
  import {
@@ -607,16 +481,6 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
607
481
  */
608
482
  readonly runtimeConfigKey: string;
609
483
 
610
- /**
611
- * Migration bundle used to create a migration handler Lambda.
612
- */
613
- readonly migrationBundleDir: string;
614
-
615
- /**
616
- * Bundle used to create or reconcile the application database user.
617
- */
618
- readonly createDbUserBundleDir: string;
619
-
620
484
  /**
621
485
  * Writer instance for the Aurora cluster.
622
486
  */
@@ -656,6 +520,25 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
656
520
  * @default true
657
521
  */
658
522
  readonly enableKeyRotation?: boolean;
523
+
524
+ /**
525
+ * Whether to export Aurora engine logs to CloudWatch Logs.
526
+ * See https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html
527
+ *
528
+ * PostgreSQL logs DDL statements only (log_statement=ddl); MySQL enables
529
+ * Advanced Auditing scoped to connections and DDL (server_audit_events=CONNECT,QUERY_DDL).
530
+ * Neither logs statement parameter values, to avoid leaking PII into log data.
531
+ *
532
+ * @default true
533
+ */
534
+ readonly enableCloudwatchLogs?: boolean;
535
+
536
+ /**
537
+ * Whether to enable Performance Insights on the Aurora writer instance.
538
+ *
539
+ * @default true
540
+ */
541
+ readonly enablePerformanceInsights?: boolean;
659
542
  }
660
543
 
661
544
  /**
@@ -676,8 +559,6 @@ export abstract class AuroraDatabase extends Construct {
676
559
  adminUser,
677
560
  databaseName,
678
561
  runtimeConfigKey,
679
- migrationBundleDir,
680
- createDbUserBundleDir,
681
562
  vpcSubnets,
682
563
  writer,
683
564
  enableRdsProxy = true,
@@ -685,6 +566,8 @@ export abstract class AuroraDatabase extends Construct {
685
566
  deletionProtection = true,
686
567
  removalPolicy = RemovalPolicy.RETAIN,
687
568
  enableKeyRotation = true,
569
+ enableCloudwatchLogs = true,
570
+ enablePerformanceInsights = true,
688
571
  engine,
689
572
  engineVersion,
690
573
  ...clusterProps
@@ -700,12 +583,35 @@ export abstract class AuroraDatabase extends Construct {
700
583
  vpc,
701
584
  vpcSubnets,
702
585
  engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
703
- writer: writer ?? ClusterInstance.serverlessV2('writer'),
586
+ writer:
587
+ writer ??
588
+ ClusterInstance.serverlessV2('writer', {
589
+ enablePerformanceInsights,
590
+ performanceInsightEncryptionKey: enablePerformanceInsights
591
+ ? key
592
+ : undefined,
593
+ }),
704
594
  credentials: Credentials.fromGeneratedSecret(adminUser, {
705
595
  encryptionKey: key,
706
596
  }),
707
597
  iamAuthentication: true,
708
598
  monitoringInterval: Duration.seconds(5),
599
+ cloudwatchLogsExports: enableCloudwatchLogs
600
+ ? engine.type === 'mysql'
601
+ ? ['audit', 'error']
602
+ : ['postgresql']
603
+ : undefined,
604
+ parameters: enableCloudwatchLogs
605
+ ? engine.type === 'mysql'
606
+ ? {
607
+ server_audit_logging: '1',
608
+ server_audit_events: 'CONNECT,QUERY_DDL',
609
+ }
610
+ : // Only safe statement-at-a-time; a multi-statement batch mixing
611
+ // DDL with DML (e.g. one \`psql -c "a;b;c"\` call) logs the whole
612
+ // raw text verbatim, including any literal DML values.
613
+ { log_statement: 'ddl' }
614
+ : undefined,
709
615
  defaultDatabaseName: databaseName,
710
616
  storageEncrypted: true,
711
617
  storageEncryptionKey: key,
@@ -741,23 +647,23 @@ export abstract class AuroraDatabase extends Construct {
741
647
  this.proxy?.endpoint ?? this.cluster.clusterEndpoint.hostname;
742
648
  const databasePort = this.cluster.clusterEndpoint.port;
743
649
 
744
- const createDbUserHandler = new Function(this, 'CreateDbUserHandler', {
745
- code: Code.fromAsset(createDbUserBundleDir),
746
- handler: 'index.handler',
747
- runtime: Runtime.NODEJS_LATEST,
650
+ const commonProps: FunctionOptions = {
651
+ vpc,
748
652
  timeout: Duration.minutes(5),
749
653
  tracing: Tracing.ACTIVE,
750
- vpc,
654
+ architecture: Architecture.ARM_64,
655
+ };
656
+
657
+ const createDbUserHandler = this.createDbUserHandler({
658
+ ...commonProps,
751
659
  vpcSubnets: {
752
660
  subnetType: SubnetType.PRIVATE_WITH_EGRESS,
753
661
  },
754
- environment: {
755
- DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
756
- NODE_EXTRA_CA_CERTS: '/var/runtime/ca-cert.pem',
757
- },
758
- architecture: Architecture.ARM_64,
759
662
  });
760
-
663
+ createDbUserHandler.addEnvironment(
664
+ 'DATABASE_SECRET_ARN',
665
+ this.cluster.secret!.secretArn,
666
+ );
761
667
  this.cluster.connections.allowDefaultPortFrom(
762
668
  createDbUserHandler,
763
669
  'Allow the create-db-user handler to connect to the database',
@@ -794,40 +700,21 @@ export abstract class AuroraDatabase extends Construct {
794
700
  region: Stack.of(this).region,
795
701
  });
796
702
 
797
- const migrationHandler = new DockerImageFunction(this, 'MigrationHandler', {
798
- code: DockerImageCode.fromImageAsset(migrationBundleDir, {
799
- platform: Platform.LINUX_ARM64,
800
- }),
703
+ const migrationHandler = this.createMigrationHandler({
704
+ ...commonProps,
801
705
  memorySize: 1024,
802
- timeout: Duration.minutes(5),
803
- tracing: Tracing.ACTIVE,
804
- vpc,
805
- environment:
806
- engine.type === 'mysql'
807
- ? {
808
- DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
809
- }
810
- : {
811
- HOSTNAME: databaseHostname,
812
- DATABASE: databaseName,
813
- PORT: databasePort.toString(),
814
- DBUSER: this.dbUser,
815
- },
816
- architecture: Architecture.ARM_64,
817
706
  });
707
+ migrationHandler.addEnvironment(
708
+ 'DATABASE_SECRET_ARN',
709
+ this.cluster.secret!.secretArn,
710
+ );
711
+ this.cluster.connections.allowDefaultPortFrom(migrationHandler);
712
+ this.grantSecretRead(migrationHandler);
818
713
 
819
- if (engine.type === 'mysql') {
820
- this.cluster.connections.allowDefaultPortFrom(migrationHandler);
821
- this.grantSecretRead(migrationHandler);
822
- } else {
823
- this.allowDefaultPortFrom(migrationHandler);
824
- this.grantConnect(migrationHandler);
825
- }
826
-
827
- const trigger = new Trigger(this, 'MigrationTrigger', {
714
+ const migrationTrigger = new Trigger(this, 'MigrationTrigger', {
828
715
  handler: migrationHandler,
829
716
  });
830
- trigger.node.addDependency(createDbUserResource);
717
+ migrationTrigger.node.addDependency(createDbUserResource);
831
718
 
832
719
  new CfnOutput(this, 'ClusterEndpoint', {
833
720
  value: this.cluster.clusterEndpoint.hostname,
@@ -840,6 +727,18 @@ export abstract class AuroraDatabase extends Construct {
840
727
  }
841
728
  }
842
729
 
730
+ /**
731
+ * Creates the Lambda handler used to create or reconcile the application database user.
732
+ */
733
+ protected abstract createDbUserHandler(baseProps: FunctionOptions): Function;
734
+
735
+ /**
736
+ * Creates the Lambda handler used to run database migrations.
737
+ */
738
+ protected abstract createMigrationHandler(
739
+ baseProps: FunctionOptions,
740
+ ): Function;
741
+
843
742
  public allowDefaultPortFrom(other: IConnectable, description?: string): void {
844
743
  if (this.proxy) {
845
744
  this.proxy.connections.allowFrom(
@@ -867,17 +766,14 @@ export abstract class AuroraDatabase extends Construct {
867
766
 
868
767
  exports[`ts#rdb generator > should add mysql prisma dependencies when engine is MySQL 2`] = `
869
768
  "import { defineConfig } from 'prisma/config';
769
+ import { readFileSync } from 'fs';
870
770
 
871
771
  const getDatabaseUrl = async () => {
872
- if (process.env.SERVE_LOCAL === 'true') {
873
- const {
874
- LOCAL_DB_HOST,
875
- LOCAL_DB_NAME,
876
- LOCAL_DB_PASSWORD,
877
- LOCAL_DB_PORT,
878
- LOCAL_DB_USER,
879
- } = await import('./src/constants.js');
880
- return \`mysql://\${LOCAL_DB_USER}:\${LOCAL_DB_PASSWORD}@\${LOCAL_DB_HOST}:\${LOCAL_DB_PORT}/\${LOCAL_DB_NAME}\`;
772
+ if (process.env.LOCAL_DEV === 'true') {
773
+ const { host, port, dbName, dbUser, dbPassword } = JSON.parse(
774
+ readFileSync('config.json', 'utf-8'),
775
+ ).localDev;
776
+ return \`mysql://\${dbUser}:\${dbPassword}@\${host}:\${port}/\${dbName}\`;
881
777
  }
882
778
  return process.env.DATABASE_URL;
883
779
  };
@@ -904,15 +800,15 @@ terraform {
904
800
  required_providers {
905
801
  aws = {
906
802
  source = "hashicorp/aws"
907
- version = "~> 6.33"
803
+ version = "6.60.0"
908
804
  }
909
805
  null = {
910
806
  source = "hashicorp/null"
911
- version = ">= 3.0"
807
+ version = "3.3.1"
912
808
  }
913
809
  random = {
914
810
  source = "hashicorp/random"
915
- version = ">= 3.0"
811
+ version = "3.9.0"
916
812
  }
917
813
  }
918
814
  }
@@ -1021,9 +917,9 @@ variable "enable_credential_rotation" {
1021
917
  }
1022
918
 
1023
919
  variable "enable_cloudwatch_logs" {
1024
- description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL also enables verbose statement logging."
920
+ description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL logs DDL statements only (log_statement=ddl); MySQL enables Advanced Auditing scoped to connections and DDL (server_audit_events=CONNECT,QUERY_DDL). Neither logs statement parameter values, to avoid leaking PII into log data."
1025
921
  type = bool
1026
- default = false
922
+ default = true
1027
923
  }
1028
924
 
1029
925
  variable "enable_performance_insights" {
@@ -1056,10 +952,19 @@ variable "tags" {
1056
952
  default = {}
1057
953
  }
1058
954
 
955
+ # Suffix appended to physical resource names so that multiple deployments
956
+ # (e.g. separate environments in the same account and region) don't collide.
957
+ resource "random_string" "suffix" {
958
+ length = 8
959
+ special = false
960
+ upper = false
961
+ }
962
+
1059
963
  locals {
1060
964
  default_port = var.engine == "aurora-mysql" ? 3306 : 5432
1061
965
  default_engine_version = var.engine == "aurora-mysql" ? "8.0.mysql_aurora.3.12.0" : "17.7"
1062
966
  parameter_group_family = var.engine == "aurora-mysql" ? "aurora-mysql8.0" : "aurora-postgresql\${split(".", coalesce(var.engine_version, local.default_engine_version))[0]}"
967
+ cluster_name = "\${var.name}-aurora-\${random_string.suffix.result}"
1063
968
  }
1064
969
 
1065
970
  resource "aws_rds_cluster_parameter_group" "database" {
@@ -1069,11 +974,30 @@ resource "aws_rds_cluster_parameter_group" "database" {
1069
974
  family = local.parameter_group_family
1070
975
  description = "Parameter group for \${var.name} Aurora cluster"
1071
976
 
977
+ # Only safe statement-at-a-time; a multi-statement batch mixing DDL with
978
+ # DML (e.g. one \`psql -c "a;b;c"\` call) logs the whole raw text verbatim,
979
+ # including any literal DML values.
1072
980
  dynamic "parameter" {
1073
981
  for_each = var.engine == "aurora-postgresql" ? [1] : []
1074
982
  content {
1075
983
  name = "log_statement"
1076
- value = "all"
984
+ value = "ddl"
985
+ }
986
+ }
987
+
988
+ dynamic "parameter" {
989
+ for_each = var.engine == "aurora-mysql" ? [1] : []
990
+ content {
991
+ name = "server_audit_logging"
992
+ value = "1"
993
+ }
994
+ }
995
+
996
+ dynamic "parameter" {
997
+ for_each = var.engine == "aurora-mysql" ? [1] : []
998
+ content {
999
+ name = "server_audit_events"
1000
+ value = "CONNECT,QUERY_DDL"
1077
1001
  }
1078
1002
  }
1079
1003
 
@@ -1157,7 +1081,7 @@ resource "aws_security_group" "database" {
1157
1081
  }
1158
1082
 
1159
1083
  resource "aws_db_subnet_group" "database" {
1160
- name = "\${var.name}-aurora"
1084
+ name = local.cluster_name
1161
1085
  subnet_ids = var.subnet_ids
1162
1086
 
1163
1087
  tags = merge(var.tags, {
@@ -1195,9 +1119,9 @@ resource "aws_secretsmanager_secret_version" "credentials" {
1195
1119
  }
1196
1120
 
1197
1121
  resource "aws_rds_cluster" "database" {
1198
- #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
1122
+ #checkov:skip=CKV2_AWS_27:Query logging is enabled by default via enable_cloudwatch_logs; checkov cannot resolve the conditional count expression on aws_rds_cluster_parameter_group.database
1199
1123
  #checkov:skip=CKV_AWS_139:Deletion protection is enabled but checkov is unable to detect it correctly
1200
- cluster_identifier = "\${var.name}-aurora"
1124
+ cluster_identifier = local.cluster_name
1201
1125
  engine = var.engine
1202
1126
  engine_version = coalesce(var.engine_version, local.default_engine_version)
1203
1127
  database_name = var.database_name
@@ -1211,12 +1135,12 @@ resource "aws_rds_cluster" "database" {
1211
1135
  kms_key_id = aws_kms_key.database.arn
1212
1136
  deletion_protection = var.deletion_protection
1213
1137
  skip_final_snapshot = var.skip_final_snapshot
1214
- final_snapshot_identifier = var.skip_final_snapshot ? null : "\${var.name}-aurora-final-snapshot"
1138
+ final_snapshot_identifier = var.skip_final_snapshot ? null : "\${local.cluster_name}-final-snapshot"
1215
1139
  iam_database_authentication_enabled = true
1216
1140
  monitoring_interval = 5
1217
1141
  monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn
1218
1142
  copy_tags_to_snapshot = true
1219
- enabled_cloudwatch_logs_exports = var.enable_cloudwatch_logs ? (var.engine == "aurora-mysql" ? ["audit", "error", "general", "slowquery"] : ["postgresql"]) : null
1143
+ enabled_cloudwatch_logs_exports = var.enable_cloudwatch_logs ? (var.engine == "aurora-mysql" ? ["audit", "error"] : ["postgresql"]) : null
1220
1144
 
1221
1145
  serverlessv2_scaling_configuration {
1222
1146
  min_capacity = var.serverless_min_capacity
@@ -1231,7 +1155,7 @@ resource "aws_rds_cluster" "database" {
1231
1155
  resource "aws_rds_cluster_instance" "database" {
1232
1156
  count = var.instance_count
1233
1157
 
1234
- identifier = "\${var.name}-aurora-\${count.index + 1}"
1158
+ identifier = "\${local.cluster_name}-\${count.index + 1}"
1235
1159
  cluster_identifier = aws_rds_cluster.database.id
1236
1160
  instance_class = "db.serverless"
1237
1161
  engine = aws_rds_cluster.database.engine
@@ -1285,7 +1209,7 @@ resource "aws_vpc_security_group_ingress_rule" "rotation_to_database" {
1285
1209
  resource "aws_cloudformation_stack" "credentials_rotation" {
1286
1210
  #checkov:skip=CKV_AWS_124:SNS event notifications are not required for the credentials rotation stack
1287
1211
  count = var.enable_credential_rotation ? 1 : 0
1288
- name = "\${var.name}-aurora-credentials-rotation"
1212
+ name = "\${local.cluster_name}-credentials-rotation"
1289
1213
 
1290
1214
  capabilities = ["CAPABILITY_IAM", "CAPABILITY_AUTO_EXPAND"]
1291
1215
 
@@ -1299,7 +1223,7 @@ resource "aws_cloudformation_stack" "credentials_rotation" {
1299
1223
  SecretId = aws_secretsmanager_secret.credentials.arn
1300
1224
  HostedRotationLambda = {
1301
1225
  RotationType = var.engine == "aurora-mysql" ? "MySQLSingleUser" : "PostgreSQLSingleUser"
1302
- RotationLambdaName = "\${var.name}-aurora-credentials-rotation"
1226
+ RotationLambdaName = "\${local.cluster_name}-credentials-rotation"
1303
1227
  VpcSecurityGroupIds = aws_security_group.rotation[0].id
1304
1228
  VpcSubnetIds = join(",", var.lambda_subnet_ids)
1305
1229
  }
@@ -1342,27 +1266,6 @@ resource "aws_iam_role" "proxy" {
1342
1266
  })
1343
1267
  }
1344
1268
 
1345
- resource "aws_iam_role_policy" "proxy_secret_access" {
1346
- count = var.enable_rds_proxy ? 1 : 0
1347
- role = aws_iam_role.proxy[0].name
1348
-
1349
- policy = jsonencode({
1350
- Version = "2012-10-17"
1351
- Statement = [
1352
- {
1353
- Effect = "Allow"
1354
- Action = ["secretsmanager:GetSecretValue"]
1355
- Resource = [aws_secretsmanager_secret.credentials.arn]
1356
- },
1357
- {
1358
- Effect = "Allow"
1359
- Action = ["kms:Decrypt"]
1360
- Resource = [aws_kms_key.database.arn]
1361
- }
1362
- ]
1363
- })
1364
- }
1365
-
1366
1269
  resource "aws_security_group" "proxy" {
1367
1270
  #checkov:skip=CKV2_AWS_5:Security group is attached to aws_db_proxy.aurora; Checkov cannot resolve count-conditional cross-resource references
1368
1271
  count = var.enable_rds_proxy ? 1 : 0
@@ -1379,24 +1282,13 @@ resource "aws_security_group" "proxy" {
1379
1282
  resource "aws_db_proxy" "aurora" {
1380
1283
  count = var.enable_rds_proxy ? 1 : 0
1381
1284
 
1382
- name = "\${var.name}-proxy"
1285
+ name = "\${var.name}-proxy-\${random_string.suffix.result}"
1383
1286
  default_auth_scheme = "IAM_AUTH"
1384
1287
  engine_family = var.engine == "aurora-mysql" ? "MYSQL" : "POSTGRESQL"
1385
1288
  role_arn = aws_iam_role.proxy[0].arn
1386
1289
  vpc_subnet_ids = var.subnet_ids
1387
1290
  vpc_security_group_ids = [aws_security_group.proxy[0].id]
1388
1291
  require_tls = true
1389
-
1390
- auth {
1391
- auth_scheme = "SECRETS"
1392
- iam_auth = "REQUIRED"
1393
- secret_arn = aws_secretsmanager_secret.credentials.arn
1394
- }
1395
-
1396
- depends_on = [
1397
- aws_iam_role_policy.proxy_secret_access,
1398
- aws_secretsmanager_secret_version.credentials,
1399
- ]
1400
1292
  }
1401
1293
 
1402
1294
  resource "aws_db_proxy_default_target_group" "default" {
@@ -1428,9 +1320,9 @@ resource "null_resource" "proxy_target_ready" {
1428
1320
  deadline=$((start_time + 600))
1429
1321
  while true; do
1430
1322
  target_state=$(aws rds describe-db-proxy-targets \\
1431
- --region \${data.aws_region.current.region} \\
1432
- --db-proxy-name \${self.triggers.db_proxy_name} \\
1433
- --target-group-name \${self.triggers.target_group_name} \\
1323
+ --region "$AWS_REGION" \\
1324
+ --db-proxy-name "$DB_PROXY_NAME" \\
1325
+ --target-group-name "$TARGET_GROUP_NAME" \\
1434
1326
  --query "Targets[?Type=='RDS_INSTANCE'] | [0].TargetHealth.State" \\
1435
1327
  --output text)
1436
1328
 
@@ -1440,13 +1332,19 @@ resource "null_resource" "proxy_target_ready" {
1440
1332
 
1441
1333
  current_time=$(date +%s)
1442
1334
  if [ "$current_time" -ge "$deadline" ]; then
1443
- echo "RDS Proxy target \${self.triggers.db_cluster_identifier} did not become AVAILABLE within 10 minutes. Last state: $target_state"
1335
+ echo "RDS Proxy target $DB_CLUSTER_IDENTIFIER did not become AVAILABLE within 10 minutes. Last state: $target_state"
1444
1336
  exit 1
1445
1337
  fi
1446
1338
 
1447
1339
  sleep 10
1448
1340
  done
1449
1341
  EOT
1342
+ environment = {
1343
+ AWS_REGION = data.aws_region.current.region
1344
+ DB_PROXY_NAME = self.triggers.db_proxy_name
1345
+ TARGET_GROUP_NAME = self.triggers.target_group_name
1346
+ DB_CLUSTER_IDENTIFIER = self.triggers.db_cluster_identifier
1347
+ }
1450
1348
  }
1451
1349
 
1452
1350
  depends_on = [
@@ -1525,7 +1423,7 @@ resource "aws_iam_role_policy_attachment" "backup" {
1525
1423
  resource "aws_backup_vault" "database" {
1526
1424
  count = var.enable_backup ? 1 : 0
1527
1425
 
1528
- name = "\${var.name}-aurora-backup"
1426
+ name = "\${local.cluster_name}-backup"
1529
1427
  kms_key_arn = aws_kms_key.database.arn
1530
1428
  tags = var.tags
1531
1429
  }
@@ -1533,7 +1431,7 @@ resource "aws_backup_vault" "database" {
1533
1431
  resource "aws_backup_plan" "database" {
1534
1432
  count = var.enable_backup ? 1 : 0
1535
1433
 
1536
- name = "\${var.name}-aurora-backup"
1434
+ name = "\${local.cluster_name}-backup"
1537
1435
 
1538
1436
  rule {
1539
1437
  rule_name = "daily-backup"
@@ -1573,6 +1471,11 @@ output "proxy_resource_id" {
1573
1471
  value = var.enable_rds_proxy ? split(":", aws_db_proxy.aurora[0].arn)[6] : null
1574
1472
  }
1575
1473
 
1474
+ output "connect_resource_id" {
1475
+ description = "Resource ID to use in IAM rds-db:connect policies for the application database user. Resolves to the RDS Proxy resource ID when the proxy is enabled (the default), or the Aurora cluster resource ID when it is disabled — connecting through the proxy and connecting directly to the cluster are different IAM permission boundaries."
1476
+ value = var.enable_rds_proxy ? split(":", aws_db_proxy.aurora[0].arn)[6] : aws_rds_cluster.database.cluster_resource_id
1477
+ }
1478
+
1576
1479
  output "cluster_endpoint" {
1577
1480
  description = "Writer endpoint of the Aurora cluster or proxy."
1578
1481
  value = var.enable_rds_proxy ? aws_db_proxy.aurora[0].endpoint : aws_rds_cluster.database.endpoint
@@ -1647,19 +1550,19 @@ exports[`ts#rdb generator > should generate terraform modules when iac is Terraf
1647
1550
  required_providers {
1648
1551
  archive = {
1649
1552
  source = "hashicorp/archive"
1650
- version = "~> 2.5"
1553
+ version = "2.8.0"
1651
1554
  }
1652
1555
  aws = {
1653
1556
  source = "hashicorp/aws"
1654
- version = "~> 6.33"
1557
+ version = "6.60.0"
1655
1558
  }
1656
1559
  null = {
1657
1560
  source = "hashicorp/null"
1658
- version = ">= 3.0"
1561
+ version = "3.3.1"
1659
1562
  }
1660
1563
  random = {
1661
1564
  source = "hashicorp/random"
1662
- version = ">= 3.0"
1565
+ version = "3.9.0"
1663
1566
  }
1664
1567
  }
1665
1568
  }
@@ -1763,12 +1666,13 @@ variable "tags" {
1763
1666
  default = {}
1764
1667
  }
1765
1668
 
1766
- variable "docker_image_tag" {
1669
+ variable "migration_docker_image_tag" {
1767
1670
  description = "Docker image tag for the migration handler. Defaults to the tag built by the Nx docker target."
1768
1671
  type = string
1769
1672
  default = "proj-db-migration:latest"
1770
1673
  }
1771
1674
 
1675
+
1772
1676
  variable "asset_bucket_name" {
1773
1677
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
1774
1678
  type = string
@@ -1784,10 +1688,12 @@ resource "random_string" "suffix" {
1784
1688
  }
1785
1689
 
1786
1690
  locals {
1787
- create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
1788
- migration_function_name = "db-migration-\${random_string.suffix.result}"
1691
+ config = jsondecode(file("\${path.module}/../../../../../../../packages/db/config.json"))
1692
+ runtime_config_key = local.config.runtimeConfigKey
1693
+ create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
1694
+ migration_function_name = "db-migration-\${random_string.suffix.result}"
1789
1695
  create_db_user_function_name = "db-create-db-user-\${random_string.suffix.result}"
1790
- database_runtime_user = "db_\${random_string.suffix.result}"
1696
+ database_runtime_user = "db_\${random_string.suffix.result}"
1791
1697
  }
1792
1698
 
1793
1699
  module "aurora" {
@@ -1853,7 +1759,7 @@ module "add_rdb_to_runtime_config" {
1853
1759
  source = "../../../core/runtime-config/entry"
1854
1760
 
1855
1761
  namespace = "database"
1856
- key = "Db"
1762
+ key = local.runtime_config_key
1857
1763
  value = {
1858
1764
  hostname = module.aurora.cluster_endpoint
1859
1765
  port = module.aurora.cluster_port
@@ -1866,9 +1772,8 @@ module "add_rdb_to_runtime_config" {
1866
1772
 
1867
1773
  resource "aws_ecr_repository" "migration_handler" {
1868
1774
  #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
1869
- #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
1870
1775
  name = "db-migration-\${random_string.suffix.result}"
1871
- image_tag_mutability = "MUTABLE"
1776
+ image_tag_mutability = "IMMUTABLE"
1872
1777
  force_delete = true
1873
1778
 
1874
1779
  image_scanning_configuration {
@@ -1916,22 +1821,34 @@ resource "aws_ecr_repository_policy" "migration_handler" {
1916
1821
  }
1917
1822
 
1918
1823
  data "external" "docker_digest" {
1919
- program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.docker_image_tag} --format '{{.Id}}')'\\"}' "]
1824
+ program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.migration_docker_image_tag} --format '{{.Id}}')'\\"}' "]
1825
+ }
1826
+
1827
+ locals {
1828
+ # Content-based, immutable image tag derived from the local image digest
1829
+ image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
1920
1830
  }
1921
1831
 
1922
1832
  resource "null_resource" "docker_publish" {
1923
1833
  triggers = {
1924
1834
  docker_digest = data.external.docker_digest.result.digest
1925
1835
  repository_url = aws_ecr_repository.migration_handler.repository_url
1926
- docker_image_tag = var.docker_image_tag
1836
+ migration_docker_image_tag = var.migration_docker_image_tag
1837
+ image_tag = local.image_tag
1927
1838
  }
1928
1839
 
1929
1840
  provisioner "local-exec" {
1930
1841
  command = <<-EOT
1931
- aws ecr get-login-password --region \${data.aws_region.current.region} | docker login --username AWS --password-stdin \${self.triggers.repository_url}
1932
- docker tag \${self.triggers.docker_image_tag} \${self.triggers.repository_url}:latest
1933
- docker push \${self.triggers.repository_url}:latest
1842
+ aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
1843
+ docker tag "$MIGRATION_DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
1844
+ docker push "$REPOSITORY_URL:$IMAGE_TAG"
1934
1845
  EOT
1846
+ environment = {
1847
+ AWS_REGION = data.aws_region.current.region
1848
+ REPOSITORY_URL = self.triggers.repository_url
1849
+ MIGRATION_DOCKER_IMAGE_TAG = self.triggers.migration_docker_image_tag
1850
+ IMAGE_TAG = self.triggers.image_tag
1851
+ }
1935
1852
  }
1936
1853
 
1937
1854
  depends_on = [aws_ecr_repository_policy.migration_handler]
@@ -1980,11 +1897,16 @@ resource "aws_iam_role_policy" "migration_handler_access" {
1980
1897
  {
1981
1898
  Effect = "Allow"
1982
1899
  Action = [
1983
- "rds-db:connect"
1900
+ "secretsmanager:GetSecretValue"
1984
1901
  ]
1985
- Resource = [
1986
- "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}"
1902
+ Resource = [module.aurora.secret_arn]
1903
+ },
1904
+ {
1905
+ Effect = "Allow"
1906
+ Action = [
1907
+ "kms:Decrypt"
1987
1908
  ]
1909
+ Resource = [module.aurora.kms_key_arn]
1988
1910
  }
1989
1911
  ]
1990
1912
  })
@@ -2073,7 +1995,7 @@ resource "aws_security_group" "migration_handler" {
2073
1995
 
2074
1996
  resource "aws_vpc_security_group_egress_rule" "migration_handler_to_database" {
2075
1997
  security_group_id = aws_security_group.migration_handler.id
2076
- referenced_security_group_id = module.aurora.security_group_id
1998
+ referenced_security_group_id = module.aurora.database_security_group_id
2077
1999
  from_port = module.aurora.cluster_port
2078
2000
  to_port = module.aurora.cluster_port
2079
2001
  ip_protocol = "tcp"
@@ -2115,7 +2037,7 @@ resource "aws_vpc_security_group_egress_rule" "create_db_user_https" {
2115
2037
  }
2116
2038
 
2117
2039
  resource "aws_vpc_security_group_ingress_rule" "migration_handler_to_database" {
2118
- security_group_id = module.aurora.security_group_id
2040
+ security_group_id = module.aurora.database_security_group_id
2119
2041
  referenced_security_group_id = aws_security_group.migration_handler.id
2120
2042
  from_port = module.aurora.cluster_port
2121
2043
  to_port = module.aurora.cluster_port
@@ -2189,10 +2111,10 @@ resource "null_resource" "create_db_user_trigger" {
2189
2111
  command = <<-EOT
2190
2112
  output_file=$(mktemp)
2191
2113
  response=$(aws lambda invoke \\
2192
- --region \${data.aws_region.current.region} \\
2193
- --function-name \${self.triggers.function_name} \\
2114
+ --region "$AWS_REGION" \\
2115
+ --function-name "$FUNCTION_NAME" \\
2194
2116
  --cli-binary-format raw-in-base64-out \\
2195
- --payload '{"RequestType":"Create","PhysicalResourceId":"db-user:\${self.triggers.db_user}"}' \\
2117
+ --payload "{\\"RequestType\\":\\"Create\\",\\"PhysicalResourceId\\":\\"db-user:$DB_USER\\"}" \\
2196
2118
  "$output_file")
2197
2119
  cat "$output_file"
2198
2120
  echo "$response"
@@ -2202,6 +2124,11 @@ resource "null_resource" "create_db_user_trigger" {
2202
2124
  fi
2203
2125
  rm -f "$output_file"
2204
2126
  EOT
2127
+ environment = {
2128
+ AWS_REGION = data.aws_region.current.region
2129
+ FUNCTION_NAME = self.triggers.function_name
2130
+ DB_USER = self.triggers.db_user
2131
+ }
2205
2132
  }
2206
2133
 
2207
2134
  depends_on = [aws_lambda_function.create_db_user, module.aurora]
@@ -2215,7 +2142,7 @@ resource "aws_lambda_function" "migration_handler" {
2215
2142
  package_type = "Image"
2216
2143
  function_name = local.migration_function_name
2217
2144
  role = aws_iam_role.migration_handler.arn
2218
- image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:latest"
2145
+ image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:\${local.image_tag}"
2219
2146
  memory_size = 1024
2220
2147
  timeout = 300
2221
2148
  architectures = ["arm64"]
@@ -2231,10 +2158,7 @@ resource "aws_lambda_function" "migration_handler" {
2231
2158
 
2232
2159
  environment {
2233
2160
  variables = {
2234
- HOSTNAME = module.aurora.cluster_endpoint
2235
- DATABASE = module.aurora.database_name
2236
- PORT = tostring(module.aurora.cluster_port)
2237
- DBUSER = local.database_runtime_user
2161
+ DATABASE_SECRET_ARN = module.aurora.secret_arn
2238
2162
  }
2239
2163
  }
2240
2164
 
@@ -2264,8 +2188,8 @@ resource "null_resource" "migration_trigger" {
2264
2188
  command = <<-EOT
2265
2189
  output_file=$(mktemp)
2266
2190
  response=$(aws lambda invoke \\
2267
- --region \${data.aws_region.current.region} \\
2268
- --function-name \${self.triggers.function_name} \\
2191
+ --region "$AWS_REGION" \\
2192
+ --function-name "$FUNCTION_NAME" \\
2269
2193
  --cli-binary-format raw-in-base64-out \\
2270
2194
  "$output_file")
2271
2195
  cat "$output_file"
@@ -2276,6 +2200,10 @@ resource "null_resource" "migration_trigger" {
2276
2200
  fi
2277
2201
  rm -f "$output_file"
2278
2202
  EOT
2203
+ environment = {
2204
+ AWS_REGION = data.aws_region.current.region
2205
+ FUNCTION_NAME = self.triggers.function_name
2206
+ }
2279
2207
  }
2280
2208
 
2281
2209
  depends_on = [
@@ -2306,6 +2234,11 @@ output "proxy_resource_id" {
2306
2234
  value = module.aurora.proxy_resource_id
2307
2235
  }
2308
2236
 
2237
+ output "connect_resource_id" {
2238
+ description = "Resource ID to use in IAM rds-db:connect policies for the application database user. Resolves to the RDS Proxy resource ID when the proxy is enabled (the default), or the Aurora cluster resource ID when it is disabled — connecting through the proxy and connecting directly to the cluster are different IAM permission boundaries."
2239
+ value = module.aurora.connect_resource_id
2240
+ }
2241
+
2309
2242
  output "kms_key_arn" {
2310
2243
  description = "ARN of the KMS key protecting Aurora and the admin credentials secret, used to grant decrypt access alongside secret_arn."
2311
2244
  value = module.aurora.kms_key_arn
@@ -2340,7 +2273,6 @@ output "database_runtime_user" {
2340
2273
  description = "Application database user created for IAM-authenticated access."
2341
2274
  value = local.database_runtime_user
2342
2275
  }
2343
-
2344
2276
  "
2345
2277
  `;
2346
2278
 
@@ -2354,15 +2286,15 @@ terraform {
2354
2286
  required_providers {
2355
2287
  aws = {
2356
2288
  source = "hashicorp/aws"
2357
- version = "~> 6.33"
2289
+ version = "6.60.0"
2358
2290
  }
2359
2291
  null = {
2360
2292
  source = "hashicorp/null"
2361
- version = ">= 3.0"
2293
+ version = "3.3.1"
2362
2294
  }
2363
2295
  random = {
2364
2296
  source = "hashicorp/random"
2365
- version = ">= 3.0"
2297
+ version = "3.9.0"
2366
2298
  }
2367
2299
  }
2368
2300
  }
@@ -2471,9 +2403,9 @@ variable "enable_credential_rotation" {
2471
2403
  }
2472
2404
 
2473
2405
  variable "enable_cloudwatch_logs" {
2474
- description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL also enables verbose statement logging."
2406
+ description = "Whether to export Aurora engine logs to CloudWatch. PostgreSQL logs DDL statements only (log_statement=ddl); MySQL enables Advanced Auditing scoped to connections and DDL (server_audit_events=CONNECT,QUERY_DDL). Neither logs statement parameter values, to avoid leaking PII into log data."
2475
2407
  type = bool
2476
- default = false
2408
+ default = true
2477
2409
  }
2478
2410
 
2479
2411
  variable "enable_performance_insights" {
@@ -2506,10 +2438,19 @@ variable "tags" {
2506
2438
  default = {}
2507
2439
  }
2508
2440
 
2441
+ # Suffix appended to physical resource names so that multiple deployments
2442
+ # (e.g. separate environments in the same account and region) don't collide.
2443
+ resource "random_string" "suffix" {
2444
+ length = 8
2445
+ special = false
2446
+ upper = false
2447
+ }
2448
+
2509
2449
  locals {
2510
2450
  default_port = var.engine == "aurora-mysql" ? 3306 : 5432
2511
2451
  default_engine_version = var.engine == "aurora-mysql" ? "8.0.mysql_aurora.3.12.0" : "17.7"
2512
2452
  parameter_group_family = var.engine == "aurora-mysql" ? "aurora-mysql8.0" : "aurora-postgresql\${split(".", coalesce(var.engine_version, local.default_engine_version))[0]}"
2453
+ cluster_name = "\${var.name}-aurora-\${random_string.suffix.result}"
2513
2454
  }
2514
2455
 
2515
2456
  resource "aws_rds_cluster_parameter_group" "database" {
@@ -2519,11 +2460,30 @@ resource "aws_rds_cluster_parameter_group" "database" {
2519
2460
  family = local.parameter_group_family
2520
2461
  description = "Parameter group for \${var.name} Aurora cluster"
2521
2462
 
2463
+ # Only safe statement-at-a-time; a multi-statement batch mixing DDL with
2464
+ # DML (e.g. one \`psql -c "a;b;c"\` call) logs the whole raw text verbatim,
2465
+ # including any literal DML values.
2522
2466
  dynamic "parameter" {
2523
2467
  for_each = var.engine == "aurora-postgresql" ? [1] : []
2524
2468
  content {
2525
2469
  name = "log_statement"
2526
- value = "all"
2470
+ value = "ddl"
2471
+ }
2472
+ }
2473
+
2474
+ dynamic "parameter" {
2475
+ for_each = var.engine == "aurora-mysql" ? [1] : []
2476
+ content {
2477
+ name = "server_audit_logging"
2478
+ value = "1"
2479
+ }
2480
+ }
2481
+
2482
+ dynamic "parameter" {
2483
+ for_each = var.engine == "aurora-mysql" ? [1] : []
2484
+ content {
2485
+ name = "server_audit_events"
2486
+ value = "CONNECT,QUERY_DDL"
2527
2487
  }
2528
2488
  }
2529
2489
 
@@ -2607,7 +2567,7 @@ resource "aws_security_group" "database" {
2607
2567
  }
2608
2568
 
2609
2569
  resource "aws_db_subnet_group" "database" {
2610
- name = "\${var.name}-aurora"
2570
+ name = local.cluster_name
2611
2571
  subnet_ids = var.subnet_ids
2612
2572
 
2613
2573
  tags = merge(var.tags, {
@@ -2645,9 +2605,9 @@ resource "aws_secretsmanager_secret_version" "credentials" {
2645
2605
  }
2646
2606
 
2647
2607
  resource "aws_rds_cluster" "database" {
2648
- #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
2608
+ #checkov:skip=CKV2_AWS_27:Query logging is enabled by default via enable_cloudwatch_logs; checkov cannot resolve the conditional count expression on aws_rds_cluster_parameter_group.database
2649
2609
  #checkov:skip=CKV_AWS_139:Deletion protection is enabled but checkov is unable to detect it correctly
2650
- cluster_identifier = "\${var.name}-aurora"
2610
+ cluster_identifier = local.cluster_name
2651
2611
  engine = var.engine
2652
2612
  engine_version = coalesce(var.engine_version, local.default_engine_version)
2653
2613
  database_name = var.database_name
@@ -2661,12 +2621,12 @@ resource "aws_rds_cluster" "database" {
2661
2621
  kms_key_id = aws_kms_key.database.arn
2662
2622
  deletion_protection = var.deletion_protection
2663
2623
  skip_final_snapshot = var.skip_final_snapshot
2664
- final_snapshot_identifier = var.skip_final_snapshot ? null : "\${var.name}-aurora-final-snapshot"
2624
+ final_snapshot_identifier = var.skip_final_snapshot ? null : "\${local.cluster_name}-final-snapshot"
2665
2625
  iam_database_authentication_enabled = true
2666
2626
  monitoring_interval = 5
2667
2627
  monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn
2668
2628
  copy_tags_to_snapshot = true
2669
- enabled_cloudwatch_logs_exports = var.enable_cloudwatch_logs ? (var.engine == "aurora-mysql" ? ["audit", "error", "general", "slowquery"] : ["postgresql"]) : null
2629
+ enabled_cloudwatch_logs_exports = var.enable_cloudwatch_logs ? (var.engine == "aurora-mysql" ? ["audit", "error"] : ["postgresql"]) : null
2670
2630
 
2671
2631
  serverlessv2_scaling_configuration {
2672
2632
  min_capacity = var.serverless_min_capacity
@@ -2681,7 +2641,7 @@ resource "aws_rds_cluster" "database" {
2681
2641
  resource "aws_rds_cluster_instance" "database" {
2682
2642
  count = var.instance_count
2683
2643
 
2684
- identifier = "\${var.name}-aurora-\${count.index + 1}"
2644
+ identifier = "\${local.cluster_name}-\${count.index + 1}"
2685
2645
  cluster_identifier = aws_rds_cluster.database.id
2686
2646
  instance_class = "db.serverless"
2687
2647
  engine = aws_rds_cluster.database.engine
@@ -2735,7 +2695,7 @@ resource "aws_vpc_security_group_ingress_rule" "rotation_to_database" {
2735
2695
  resource "aws_cloudformation_stack" "credentials_rotation" {
2736
2696
  #checkov:skip=CKV_AWS_124:SNS event notifications are not required for the credentials rotation stack
2737
2697
  count = var.enable_credential_rotation ? 1 : 0
2738
- name = "\${var.name}-aurora-credentials-rotation"
2698
+ name = "\${local.cluster_name}-credentials-rotation"
2739
2699
 
2740
2700
  capabilities = ["CAPABILITY_IAM", "CAPABILITY_AUTO_EXPAND"]
2741
2701
 
@@ -2749,7 +2709,7 @@ resource "aws_cloudformation_stack" "credentials_rotation" {
2749
2709
  SecretId = aws_secretsmanager_secret.credentials.arn
2750
2710
  HostedRotationLambda = {
2751
2711
  RotationType = var.engine == "aurora-mysql" ? "MySQLSingleUser" : "PostgreSQLSingleUser"
2752
- RotationLambdaName = "\${var.name}-aurora-credentials-rotation"
2712
+ RotationLambdaName = "\${local.cluster_name}-credentials-rotation"
2753
2713
  VpcSecurityGroupIds = aws_security_group.rotation[0].id
2754
2714
  VpcSubnetIds = join(",", var.lambda_subnet_ids)
2755
2715
  }
@@ -2792,27 +2752,6 @@ resource "aws_iam_role" "proxy" {
2792
2752
  })
2793
2753
  }
2794
2754
 
2795
- resource "aws_iam_role_policy" "proxy_secret_access" {
2796
- count = var.enable_rds_proxy ? 1 : 0
2797
- role = aws_iam_role.proxy[0].name
2798
-
2799
- policy = jsonencode({
2800
- Version = "2012-10-17"
2801
- Statement = [
2802
- {
2803
- Effect = "Allow"
2804
- Action = ["secretsmanager:GetSecretValue"]
2805
- Resource = [aws_secretsmanager_secret.credentials.arn]
2806
- },
2807
- {
2808
- Effect = "Allow"
2809
- Action = ["kms:Decrypt"]
2810
- Resource = [aws_kms_key.database.arn]
2811
- }
2812
- ]
2813
- })
2814
- }
2815
-
2816
2755
  resource "aws_security_group" "proxy" {
2817
2756
  #checkov:skip=CKV2_AWS_5:Security group is attached to aws_db_proxy.aurora; Checkov cannot resolve count-conditional cross-resource references
2818
2757
  count = var.enable_rds_proxy ? 1 : 0
@@ -2829,24 +2768,13 @@ resource "aws_security_group" "proxy" {
2829
2768
  resource "aws_db_proxy" "aurora" {
2830
2769
  count = var.enable_rds_proxy ? 1 : 0
2831
2770
 
2832
- name = "\${var.name}-proxy"
2771
+ name = "\${var.name}-proxy-\${random_string.suffix.result}"
2833
2772
  default_auth_scheme = "IAM_AUTH"
2834
2773
  engine_family = var.engine == "aurora-mysql" ? "MYSQL" : "POSTGRESQL"
2835
2774
  role_arn = aws_iam_role.proxy[0].arn
2836
2775
  vpc_subnet_ids = var.subnet_ids
2837
2776
  vpc_security_group_ids = [aws_security_group.proxy[0].id]
2838
2777
  require_tls = true
2839
-
2840
- auth {
2841
- auth_scheme = "SECRETS"
2842
- iam_auth = "REQUIRED"
2843
- secret_arn = aws_secretsmanager_secret.credentials.arn
2844
- }
2845
-
2846
- depends_on = [
2847
- aws_iam_role_policy.proxy_secret_access,
2848
- aws_secretsmanager_secret_version.credentials,
2849
- ]
2850
2778
  }
2851
2779
 
2852
2780
  resource "aws_db_proxy_default_target_group" "default" {
@@ -2878,9 +2806,9 @@ resource "null_resource" "proxy_target_ready" {
2878
2806
  deadline=$((start_time + 600))
2879
2807
  while true; do
2880
2808
  target_state=$(aws rds describe-db-proxy-targets \\
2881
- --region \${data.aws_region.current.region} \\
2882
- --db-proxy-name \${self.triggers.db_proxy_name} \\
2883
- --target-group-name \${self.triggers.target_group_name} \\
2809
+ --region "$AWS_REGION" \\
2810
+ --db-proxy-name "$DB_PROXY_NAME" \\
2811
+ --target-group-name "$TARGET_GROUP_NAME" \\
2884
2812
  --query "Targets[?Type=='RDS_INSTANCE'] | [0].TargetHealth.State" \\
2885
2813
  --output text)
2886
2814
 
@@ -2890,13 +2818,19 @@ resource "null_resource" "proxy_target_ready" {
2890
2818
 
2891
2819
  current_time=$(date +%s)
2892
2820
  if [ "$current_time" -ge "$deadline" ]; then
2893
- echo "RDS Proxy target \${self.triggers.db_cluster_identifier} did not become AVAILABLE within 10 minutes. Last state: $target_state"
2821
+ echo "RDS Proxy target $DB_CLUSTER_IDENTIFIER did not become AVAILABLE within 10 minutes. Last state: $target_state"
2894
2822
  exit 1
2895
2823
  fi
2896
2824
 
2897
2825
  sleep 10
2898
2826
  done
2899
2827
  EOT
2828
+ environment = {
2829
+ AWS_REGION = data.aws_region.current.region
2830
+ DB_PROXY_NAME = self.triggers.db_proxy_name
2831
+ TARGET_GROUP_NAME = self.triggers.target_group_name
2832
+ DB_CLUSTER_IDENTIFIER = self.triggers.db_cluster_identifier
2833
+ }
2900
2834
  }
2901
2835
 
2902
2836
  depends_on = [
@@ -2975,7 +2909,7 @@ resource "aws_iam_role_policy_attachment" "backup" {
2975
2909
  resource "aws_backup_vault" "database" {
2976
2910
  count = var.enable_backup ? 1 : 0
2977
2911
 
2978
- name = "\${var.name}-aurora-backup"
2912
+ name = "\${local.cluster_name}-backup"
2979
2913
  kms_key_arn = aws_kms_key.database.arn
2980
2914
  tags = var.tags
2981
2915
  }
@@ -2983,7 +2917,7 @@ resource "aws_backup_vault" "database" {
2983
2917
  resource "aws_backup_plan" "database" {
2984
2918
  count = var.enable_backup ? 1 : 0
2985
2919
 
2986
- name = "\${var.name}-aurora-backup"
2920
+ name = "\${local.cluster_name}-backup"
2987
2921
 
2988
2922
  rule {
2989
2923
  rule_name = "daily-backup"
@@ -3023,6 +2957,11 @@ output "proxy_resource_id" {
3023
2957
  value = var.enable_rds_proxy ? split(":", aws_db_proxy.aurora[0].arn)[6] : null
3024
2958
  }
3025
2959
 
2960
+ output "connect_resource_id" {
2961
+ description = "Resource ID to use in IAM rds-db:connect policies for the application database user. Resolves to the RDS Proxy resource ID when the proxy is enabled (the default), or the Aurora cluster resource ID when it is disabled — connecting through the proxy and connecting directly to the cluster are different IAM permission boundaries."
2962
+ value = var.enable_rds_proxy ? split(":", aws_db_proxy.aurora[0].arn)[6] : aws_rds_cluster.database.cluster_resource_id
2963
+ }
2964
+
3026
2965
  output "cluster_endpoint" {
3027
2966
  description = "Writer endpoint of the Aurora cluster or proxy."
3028
2967
  value = var.enable_rds_proxy ? aws_db_proxy.aurora[0].endpoint : aws_rds_cluster.database.endpoint
@@ -3097,19 +3036,19 @@ exports[`ts#rdb generator > should generate terraform modules with MySQL engine
3097
3036
  required_providers {
3098
3037
  archive = {
3099
3038
  source = "hashicorp/archive"
3100
- version = "~> 2.5"
3039
+ version = "2.8.0"
3101
3040
  }
3102
3041
  aws = {
3103
3042
  source = "hashicorp/aws"
3104
- version = "~> 6.33"
3043
+ version = "6.60.0"
3105
3044
  }
3106
3045
  null = {
3107
3046
  source = "hashicorp/null"
3108
- version = ">= 3.0"
3047
+ version = "3.3.1"
3109
3048
  }
3110
3049
  random = {
3111
3050
  source = "hashicorp/random"
3112
- version = ">= 3.0"
3051
+ version = "3.9.0"
3113
3052
  }
3114
3053
  }
3115
3054
  }
@@ -3213,12 +3152,13 @@ variable "tags" {
3213
3152
  default = {}
3214
3153
  }
3215
3154
 
3216
- variable "docker_image_tag" {
3155
+ variable "migration_docker_image_tag" {
3217
3156
  description = "Docker image tag for the migration handler. Defaults to the tag built by the Nx docker target."
3218
3157
  type = string
3219
3158
  default = "proj-db-migration:latest"
3220
3159
  }
3221
3160
 
3161
+
3222
3162
  variable "asset_bucket_name" {
3223
3163
  description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
3224
3164
  type = string
@@ -3234,10 +3174,12 @@ resource "random_string" "suffix" {
3234
3174
  }
3235
3175
 
3236
3176
  locals {
3237
- create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
3238
- migration_function_name = "db-migration-\${random_string.suffix.result}"
3177
+ config = jsondecode(file("\${path.module}/../../../../../../../packages/db/config.json"))
3178
+ runtime_config_key = local.config.runtimeConfigKey
3179
+ create_db_user_bundle_path = "\${path.module}/../../../../../../../dist/packages/db/bundle/create-db-user"
3180
+ migration_function_name = "db-migration-\${random_string.suffix.result}"
3239
3181
  create_db_user_function_name = "db-create-db-user-\${random_string.suffix.result}"
3240
- database_runtime_user = "db_\${random_string.suffix.result}"
3182
+ database_runtime_user = "db_\${random_string.suffix.result}"
3241
3183
  }
3242
3184
 
3243
3185
  module "aurora" {
@@ -3276,10 +3218,17 @@ resource "aws_iam_role_policy" "proxy_db_user_connect" {
3276
3218
  Statement = [
3277
3219
  {
3278
3220
  Effect = "Allow"
3279
- Action = ["rds-db:connect"]
3280
- Resource = [
3281
- "arn:aws:rds-db:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:dbuser:\${module.aurora.cluster_resource_id}/\${local.database_runtime_user}"
3221
+ Action = [
3222
+ "secretsmanager:GetSecretValue"
3223
+ ]
3224
+ Resource = [module.aurora.secret_arn]
3225
+ },
3226
+ {
3227
+ Effect = "Allow"
3228
+ Action = [
3229
+ "kms:Decrypt"
3282
3230
  ]
3231
+ Resource = [module.aurora.kms_key_arn]
3283
3232
  }
3284
3233
  ]
3285
3234
  })
@@ -3303,7 +3252,7 @@ module "add_rdb_to_runtime_config" {
3303
3252
  source = "../../../core/runtime-config/entry"
3304
3253
 
3305
3254
  namespace = "database"
3306
- key = "Db"
3255
+ key = local.runtime_config_key
3307
3256
  value = {
3308
3257
  hostname = module.aurora.cluster_endpoint
3309
3258
  port = module.aurora.cluster_port
@@ -3316,9 +3265,8 @@ module "add_rdb_to_runtime_config" {
3316
3265
 
3317
3266
  resource "aws_ecr_repository" "migration_handler" {
3318
3267
  #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
3319
- #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
3320
3268
  name = "db-migration-\${random_string.suffix.result}"
3321
- image_tag_mutability = "MUTABLE"
3269
+ image_tag_mutability = "IMMUTABLE"
3322
3270
  force_delete = true
3323
3271
 
3324
3272
  image_scanning_configuration {
@@ -3366,22 +3314,34 @@ resource "aws_ecr_repository_policy" "migration_handler" {
3366
3314
  }
3367
3315
 
3368
3316
  data "external" "docker_digest" {
3369
- program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.docker_image_tag} --format '{{.Id}}')'\\"}' "]
3317
+ program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.migration_docker_image_tag} --format '{{.Id}}')'\\"}' "]
3318
+ }
3319
+
3320
+ locals {
3321
+ # Content-based, immutable image tag derived from the local image digest
3322
+ image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
3370
3323
  }
3371
3324
 
3372
3325
  resource "null_resource" "docker_publish" {
3373
3326
  triggers = {
3374
3327
  docker_digest = data.external.docker_digest.result.digest
3375
3328
  repository_url = aws_ecr_repository.migration_handler.repository_url
3376
- docker_image_tag = var.docker_image_tag
3329
+ migration_docker_image_tag = var.migration_docker_image_tag
3330
+ image_tag = local.image_tag
3377
3331
  }
3378
3332
 
3379
3333
  provisioner "local-exec" {
3380
3334
  command = <<-EOT
3381
- aws ecr get-login-password --region \${data.aws_region.current.region} | docker login --username AWS --password-stdin \${self.triggers.repository_url}
3382
- docker tag \${self.triggers.docker_image_tag} \${self.triggers.repository_url}:latest
3383
- docker push \${self.triggers.repository_url}:latest
3335
+ aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
3336
+ docker tag "$MIGRATION_DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
3337
+ docker push "$REPOSITORY_URL:$IMAGE_TAG"
3384
3338
  EOT
3339
+ environment = {
3340
+ AWS_REGION = data.aws_region.current.region
3341
+ REPOSITORY_URL = self.triggers.repository_url
3342
+ MIGRATION_DOCKER_IMAGE_TAG = self.triggers.migration_docker_image_tag
3343
+ IMAGE_TAG = self.triggers.image_tag
3344
+ }
3385
3345
  }
3386
3346
 
3387
3347
  depends_on = [aws_ecr_repository_policy.migration_handler]
@@ -3644,10 +3604,10 @@ resource "null_resource" "create_db_user_trigger" {
3644
3604
  command = <<-EOT
3645
3605
  output_file=$(mktemp)
3646
3606
  response=$(aws lambda invoke \\
3647
- --region \${data.aws_region.current.region} \\
3648
- --function-name \${self.triggers.function_name} \\
3607
+ --region "$AWS_REGION" \\
3608
+ --function-name "$FUNCTION_NAME" \\
3649
3609
  --cli-binary-format raw-in-base64-out \\
3650
- --payload '{"RequestType":"Create","PhysicalResourceId":"db-user:\${self.triggers.db_user}"}' \\
3610
+ --payload "{\\"RequestType\\":\\"Create\\",\\"PhysicalResourceId\\":\\"db-user:$DB_USER\\"}" \\
3651
3611
  "$output_file")
3652
3612
  cat "$output_file"
3653
3613
  echo "$response"
@@ -3657,6 +3617,11 @@ resource "null_resource" "create_db_user_trigger" {
3657
3617
  fi
3658
3618
  rm -f "$output_file"
3659
3619
  EOT
3620
+ environment = {
3621
+ AWS_REGION = data.aws_region.current.region
3622
+ FUNCTION_NAME = self.triggers.function_name
3623
+ DB_USER = self.triggers.db_user
3624
+ }
3660
3625
  }
3661
3626
 
3662
3627
  depends_on = [aws_lambda_function.create_db_user, module.aurora]
@@ -3670,7 +3635,7 @@ resource "aws_lambda_function" "migration_handler" {
3670
3635
  package_type = "Image"
3671
3636
  function_name = local.migration_function_name
3672
3637
  role = aws_iam_role.migration_handler.arn
3673
- image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:latest"
3638
+ image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:\${local.image_tag}"
3674
3639
  memory_size = 1024
3675
3640
  timeout = 300
3676
3641
  architectures = ["arm64"]
@@ -3715,8 +3680,8 @@ resource "null_resource" "migration_trigger" {
3715
3680
  command = <<-EOT
3716
3681
  output_file=$(mktemp)
3717
3682
  response=$(aws lambda invoke \\
3718
- --region \${data.aws_region.current.region} \\
3719
- --function-name \${self.triggers.function_name} \\
3683
+ --region "$AWS_REGION" \\
3684
+ --function-name "$FUNCTION_NAME" \\
3720
3685
  --cli-binary-format raw-in-base64-out \\
3721
3686
  "$output_file")
3722
3687
  cat "$output_file"
@@ -3727,6 +3692,10 @@ resource "null_resource" "migration_trigger" {
3727
3692
  fi
3728
3693
  rm -f "$output_file"
3729
3694
  EOT
3695
+ environment = {
3696
+ AWS_REGION = data.aws_region.current.region
3697
+ FUNCTION_NAME = self.triggers.function_name
3698
+ }
3730
3699
  }
3731
3700
 
3732
3701
  depends_on = [
@@ -3757,6 +3726,11 @@ output "proxy_resource_id" {
3757
3726
  value = module.aurora.proxy_resource_id
3758
3727
  }
3759
3728
 
3729
+ output "connect_resource_id" {
3730
+ description = "Resource ID to use in IAM rds-db:connect policies for the application database user. Resolves to the RDS Proxy resource ID when the proxy is enabled (the default), or the Aurora cluster resource ID when it is disabled — connecting through the proxy and connecting directly to the cluster are different IAM permission boundaries."
3731
+ value = module.aurora.connect_resource_id
3732
+ }
3733
+
3760
3734
  output "kms_key_arn" {
3761
3735
  description = "ARN of the KMS key protecting Aurora and the admin credentials secret, used to grant decrypt access alongside secret_arn."
3762
3736
  value = module.aurora.kms_key_arn
@@ -3791,7 +3765,6 @@ output "database_runtime_user" {
3791
3765
  description = "Application database user created for IAM-authenticated access."
3792
3766
  value = local.database_runtime_user
3793
3767
  }
3794
-
3795
3768
  "
3796
3769
  `;
3797
3770
 
@@ -3817,139 +3790,6 @@ datasource db {
3817
3790
  "
3818
3791
  `;
3819
3792
 
3820
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/scripts/pull-image.ts 1`] = `
3821
- "import { spawnSync } from 'child_process';
3822
-
3823
- const ENGINE = 'docker';
3824
- const image = process.argv[2];
3825
-
3826
- const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
3827
- stdio: 'ignore',
3828
- });
3829
-
3830
- if (inspect.status !== 0) {
3831
- const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
3832
- if (pull.status !== 0) {
3833
- process.exit(pull.status ?? 1);
3834
- }
3835
- }
3836
- "
3837
- `;
3838
-
3839
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/scripts/start-container.ts 1`] = `
3840
- "import { spawn, spawnSync } from 'child_process';
3841
-
3842
- const ENGINE = 'docker';
3843
-
3844
- const [containerName, image, hostPort, dbName, dbUser, dbPassword] =
3845
- process.argv.slice(2);
3846
-
3847
- const containerExists = (): boolean =>
3848
- spawnSync(ENGINE, ['container', 'inspect', containerName], {
3849
- stdio: 'ignore',
3850
- }).status === 0;
3851
-
3852
- const isRunning = (): boolean => {
3853
- const result = spawnSync(
3854
- ENGINE,
3855
- ['container', 'inspect', '-f', '{{.State.Running}}', containerName],
3856
- { encoding: 'utf-8' },
3857
- );
3858
- return result.status === 0 && result.stdout.trim() === 'true';
3859
- };
3860
-
3861
- if (containerExists()) {
3862
- if (!isRunning()) {
3863
- const start = spawnSync(ENGINE, ['start', containerName], {
3864
- stdio: 'inherit',
3865
- });
3866
- if (start.status !== 0) process.exit(start.status ?? 1);
3867
- }
3868
- } else {
3869
- const runArgs = (
3870
- \`run --rm --name \${containerName}\` +
3871
- \` -e POSTGRES_DB=\${dbName}\` +
3872
- \` -e POSTGRES_USER=\${dbUser}\` +
3873
- \` -e POSTGRES_PASSWORD=\${dbPassword}\` +
3874
- \` -e PGDATA=/var/lib/postgresql/17/docker\` +
3875
- \` -p \${hostPort}:5432\` +
3876
- \` -v \${containerName}-data:/var/lib/postgresql\` +
3877
- \` -d \${image}\`
3878
- ).split(' ');
3879
- const create = spawnSync(ENGINE, runArgs, { stdio: 'inherit' });
3880
- if (create.status !== 0) process.exit(create.status ?? 1);
3881
- }
3882
-
3883
- const logs = spawn(ENGINE, ['logs', '-f', containerName], {
3884
- stdio: ['ignore', 'inherit', 'inherit'],
3885
- });
3886
-
3887
- let exiting = false;
3888
-
3889
- const cleanup = () => {
3890
- if (exiting) return;
3891
- exiting = true;
3892
- spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
3893
- logs.kill();
3894
- process.exit(0);
3895
- };
3896
-
3897
- process.on('SIGTERM', cleanup);
3898
- process.on('SIGINT', cleanup);
3899
- process.on('SIGHUP', cleanup);
3900
-
3901
- logs.on('exit', (code) => {
3902
- if (!exiting) process.exit(code ?? 0);
3903
- });
3904
- "
3905
- `;
3906
-
3907
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/scripts/wait-for-db.ts 1`] = `
3908
- "import { Client } from 'pg';
3909
-
3910
- const noop = () => undefined;
3911
-
3912
- const [portArg, dbArg, userArg, passwordArg] = process.argv.slice(2);
3913
- const timeoutAt = Date.now() + 60000;
3914
-
3915
- while (Date.now() < timeoutAt) {
3916
- const client = new Client({
3917
- host: 'localhost',
3918
- port: parseInt(portArg),
3919
- user: userArg,
3920
- password: passwordArg,
3921
- database: dbArg,
3922
- connectionTimeoutMillis: 500,
3923
- });
3924
- client.on('error', noop);
3925
- try {
3926
- await client.connect();
3927
- await client.end();
3928
- console.log('Database is ready.');
3929
- process.exit(0);
3930
- } catch {
3931
- console.log('Database is not ready.');
3932
- await client.end().catch(noop);
3933
- }
3934
- await new Promise((r) => setTimeout(r, 200));
3935
- }
3936
-
3937
- throw new Error(\`Timed out waiting for postgres on port \${portArg}\`);
3938
- "
3939
- `;
3940
-
3941
- exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/constants.ts 1`] = `
3942
- "export const DB_PACKAGE_NAME = 'Db';
3943
-
3944
- // Local development connection details (used when SERVE_LOCAL=true, see serve-local Nx target)
3945
- export const LOCAL_DB_PORT = 5432;
3946
- export const LOCAL_DB_HOST = 'localhost';
3947
- export const LOCAL_DB_NAME = 'database_name';
3948
- export const LOCAL_DB_USER = 'dbadmin';
3949
- export const LOCAL_DB_PASSWORD = 'password';
3950
- "
3951
- `;
3952
-
3953
3793
  exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/create-db-user-handler.ts 1`] = `
3954
3794
  "import type { CloudFormationCustomResourceEvent } from 'aws-lambda';
3955
3795
  import { randomBytes } from 'node:crypto';
@@ -3999,14 +3839,12 @@ const ensureDatabaseUser = async (dbUser: string): Promise<void> => {
3999
3839
 
4000
3840
  await client.query(
4001
3841
  \`ALTER ROLE \${quotedDbUser} WITH LOGIN;
4002
- GRANT ALL PRIVILEGES ON DATABASE \${quotedDbName} TO \${quotedDbUser};
4003
- GRANT USAGE, CREATE ON SCHEMA public TO \${quotedDbUser};
4004
- GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \${quotedDbUser};
4005
- GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \${quotedDbUser};
4006
- GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO \${quotedDbUser};
4007
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO \${quotedDbUser};
4008
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO \${quotedDbUser};
4009
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO \${quotedDbUser};
3842
+ GRANT CONNECT ON DATABASE \${quotedDbName} TO \${quotedDbUser};
3843
+ GRANT USAGE ON SCHEMA public TO \${quotedDbUser};
3844
+ GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \${quotedDbUser};
3845
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO \${quotedDbUser};
3846
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO \${quotedDbUser};
3847
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO \${quotedDbUser};
4010
3848
  GRANT rds_iam TO \${quotedDbUser};\`,
4011
3849
  );
4012
3850
 
@@ -4041,43 +3879,33 @@ export const handler = async (
4041
3879
  `;
4042
3880
 
4043
3881
  exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/index.ts 1`] = `
4044
- "export { DB_PACKAGE_NAME } from './constants.js';
4045
- export { getPrisma } from './prisma.js';
3882
+ "export * from './prisma.js';
3883
+ // Export your library code here
4046
3884
  "
4047
3885
  `;
4048
3886
 
4049
3887
  exports[`ts#rdb generator > should generate the aurora shared construct > packages/db/src/migration-handler.ts 1`] = `
4050
3888
  "import { execFile } from 'node:child_process';
3889
+ import { join } from 'node:path';
4051
3890
  import { promisify } from 'node:util';
4052
- import { Signer } from '@aws-sdk/rds-signer';
4053
- import { withConnectionRetry } from './utils.js';
3891
+ import { getDatabaseSecret, withConnectionRetry } from './utils.js';
4054
3892
 
4055
3893
  const buildDatabaseUrl = async (): Promise<string> => {
4056
- const hostname = process.env.HOSTNAME!;
4057
- const port = process.env.PORT!;
4058
- const database = process.env.DATABASE!;
4059
- const dbUser = process.env.DBUSER!;
4060
- const region = process.env.AWS_REGION!;
4061
-
4062
- const iamAuthToken = await new Signer({
4063
- hostname,
4064
- port: Number(port),
4065
- region,
4066
- username: dbUser,
4067
- }).getAuthToken();
3894
+ const { host, port, dbname, username, password } = await getDatabaseSecret();
4068
3895
 
4069
3896
  return (
4070
- \`postgresql://\${encodeURIComponent(dbUser)}\` +
4071
- \`:\${encodeURIComponent(iamAuthToken)}\` +
4072
- \`@\${hostname}:\${port}/\${database}\` +
4073
- \`?sslaccept=strict\` // \`sslaccept\` is the correct parameter here for postgresql. The Prisma CLI Rust engine does not use the standard libpq \`sslmode\` option.
3897
+ \`postgresql://\${encodeURIComponent(username)}\` +
3898
+ \`:\${encodeURIComponent(password)}\` +
3899
+ \`@\${host}:\${port}/\${dbname}\` +
3900
+ \`?sslaccept=strict\`
4074
3901
  );
4075
3902
  };
4076
3903
 
4077
3904
  export const handler = async () => {
4078
3905
  await withConnectionRetry(async () => {
4079
3906
  const databaseUrl = await buildDatabaseUrl();
4080
- await promisify(execFile)('npx', ['prisma', 'migrate', 'deploy'], {
3907
+ const prisma = join(__dirname, 'node_modules', '.bin', 'prisma');
3908
+ await promisify(execFile)(prisma, ['migrate', 'deploy'], {
4081
3909
  cwd: __dirname,
4082
3910
  env: {
4083
3911
  ...process.env,
@@ -4094,16 +3922,19 @@ exports[`ts#rdb generator > should generate the aurora shared construct > packag
4094
3922
  import { Signer } from '@aws-sdk/rds-signer';
4095
3923
  import { Prisma, PrismaClient } from '../generated/prisma/client.js';
4096
3924
  import { Pool } from 'pg';
4097
- import {
4098
- DB_PACKAGE_NAME,
4099
- LOCAL_DB_HOST,
4100
- LOCAL_DB_NAME,
4101
- LOCAL_DB_PASSWORD,
4102
- LOCAL_DB_PORT,
4103
- LOCAL_DB_USER,
4104
- } from './constants.js';
3925
+ import { readFileSync } from 'fs';
3926
+ import { join, dirname } from 'path';
3927
+ import { fileURLToPath } from 'url';
4105
3928
  import { getDatabaseConfig } from './utils.js';
4106
3929
 
3930
+ // Generated: must match runtimeConfigKey in config.json
3931
+ const runtimeConfigKey = 'Db';
3932
+
3933
+ const __dirname = dirname(fileURLToPath(import.meta.url));
3934
+ // config.json is only present in local dev (not included in the deployed bundle); guard with LOCAL_DEV check
3935
+ const localDev = () =>
3936
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).localDev;
3937
+
4107
3938
  let prismaClient: PrismaClient<Prisma.LogLevel> | undefined;
4108
3939
 
4109
3940
  export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
@@ -4111,14 +3942,15 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
4111
3942
  ): Promise<PrismaClient<LogOpts>> => {
4112
3943
  if (prismaClient) return prismaClient;
4113
3944
 
4114
- if (process.env.SERVE_LOCAL === 'true') {
3945
+ if (process.env.LOCAL_DEV === 'true') {
3946
+ const { host, port, dbName, dbUser, dbPassword } = localDev();
4115
3947
  const adapter = new PrismaPg(
4116
3948
  new Pool({
4117
- host: LOCAL_DB_HOST,
4118
- port: LOCAL_DB_PORT,
4119
- database: LOCAL_DB_NAME,
4120
- user: LOCAL_DB_USER,
4121
- password: LOCAL_DB_PASSWORD,
3949
+ host,
3950
+ port,
3951
+ database: dbName,
3952
+ user: dbUser,
3953
+ password: dbPassword,
4122
3954
  allowExitOnIdle: true,
4123
3955
  }),
4124
3956
  );
@@ -4130,7 +3962,7 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
4130
3962
  }
4131
3963
 
4132
3964
  const { hostname, port, database, dbUser, region } =
4133
- await getDatabaseConfig(DB_PACKAGE_NAME);
3965
+ await getDatabaseConfig(runtimeConfigKey);
4134
3966
  const adapter = new PrismaPg(
4135
3967
  new Pool({
4136
3968
  host: hostname,
@@ -4260,6 +4092,9 @@ const transientErrorPatterns = [
4260
4092
  'ECONNREFUSED',
4261
4093
  'ENOTFOUND',
4262
4094
  'P1000', // Prisma: authentication failed
4095
+ 'P1001', // Prisma: can't reach database server
4096
+ 'P1002', // Prisma: database server reached but timed out
4097
+ 'P1010', // Prisma: user denied access (IAM auth grant not yet propagated)
4263
4098
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
4264
4099
  ];
4265
4100
 
@@ -4320,14 +4155,10 @@ import { CustomResource } from 'aws-cdk-lib';
4320
4155
  import { IConnectable, IVpc, Port, SubnetType } from 'aws-cdk-lib/aws-ec2';
4321
4156
  import { IGrantable, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
4322
4157
  import { Key } from 'aws-cdk-lib/aws-kms';
4323
- import { Platform } from 'aws-cdk-lib/aws-ecr-assets';
4324
4158
  import {
4325
4159
  Architecture,
4326
- Code,
4327
- DockerImageCode,
4328
- DockerImageFunction,
4329
4160
  Function,
4330
- Runtime,
4161
+ FunctionOptions,
4331
4162
  Tracing,
4332
4163
  } from 'aws-cdk-lib/aws-lambda';
4333
4164
  import {
@@ -4443,16 +4274,6 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
4443
4274
  */
4444
4275
  readonly runtimeConfigKey: string;
4445
4276
 
4446
- /**
4447
- * Migration bundle used to create a migration handler Lambda.
4448
- */
4449
- readonly migrationBundleDir: string;
4450
-
4451
- /**
4452
- * Bundle used to create or reconcile the application database user.
4453
- */
4454
- readonly createDbUserBundleDir: string;
4455
-
4456
4277
  /**
4457
4278
  * Writer instance for the Aurora cluster.
4458
4279
  */
@@ -4492,6 +4313,25 @@ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
4492
4313
  * @default true
4493
4314
  */
4494
4315
  readonly enableKeyRotation?: boolean;
4316
+
4317
+ /**
4318
+ * Whether to export Aurora engine logs to CloudWatch Logs.
4319
+ * See https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html
4320
+ *
4321
+ * PostgreSQL logs DDL statements only (log_statement=ddl); MySQL enables
4322
+ * Advanced Auditing scoped to connections and DDL (server_audit_events=CONNECT,QUERY_DDL).
4323
+ * Neither logs statement parameter values, to avoid leaking PII into log data.
4324
+ *
4325
+ * @default true
4326
+ */
4327
+ readonly enableCloudwatchLogs?: boolean;
4328
+
4329
+ /**
4330
+ * Whether to enable Performance Insights on the Aurora writer instance.
4331
+ *
4332
+ * @default true
4333
+ */
4334
+ readonly enablePerformanceInsights?: boolean;
4495
4335
  }
4496
4336
 
4497
4337
  /**
@@ -4512,8 +4352,6 @@ export abstract class AuroraDatabase extends Construct {
4512
4352
  adminUser,
4513
4353
  databaseName,
4514
4354
  runtimeConfigKey,
4515
- migrationBundleDir,
4516
- createDbUserBundleDir,
4517
4355
  vpcSubnets,
4518
4356
  writer,
4519
4357
  enableRdsProxy = true,
@@ -4521,6 +4359,8 @@ export abstract class AuroraDatabase extends Construct {
4521
4359
  deletionProtection = true,
4522
4360
  removalPolicy = RemovalPolicy.RETAIN,
4523
4361
  enableKeyRotation = true,
4362
+ enableCloudwatchLogs = true,
4363
+ enablePerformanceInsights = true,
4524
4364
  engine,
4525
4365
  engineVersion,
4526
4366
  ...clusterProps
@@ -4536,12 +4376,35 @@ export abstract class AuroraDatabase extends Construct {
4536
4376
  vpc,
4537
4377
  vpcSubnets,
4538
4378
  engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
4539
- writer: writer ?? ClusterInstance.serverlessV2('writer'),
4379
+ writer:
4380
+ writer ??
4381
+ ClusterInstance.serverlessV2('writer', {
4382
+ enablePerformanceInsights,
4383
+ performanceInsightEncryptionKey: enablePerformanceInsights
4384
+ ? key
4385
+ : undefined,
4386
+ }),
4540
4387
  credentials: Credentials.fromGeneratedSecret(adminUser, {
4541
4388
  encryptionKey: key,
4542
4389
  }),
4543
4390
  iamAuthentication: true,
4544
4391
  monitoringInterval: Duration.seconds(5),
4392
+ cloudwatchLogsExports: enableCloudwatchLogs
4393
+ ? engine.type === 'mysql'
4394
+ ? ['audit', 'error']
4395
+ : ['postgresql']
4396
+ : undefined,
4397
+ parameters: enableCloudwatchLogs
4398
+ ? engine.type === 'mysql'
4399
+ ? {
4400
+ server_audit_logging: '1',
4401
+ server_audit_events: 'CONNECT,QUERY_DDL',
4402
+ }
4403
+ : // Only safe statement-at-a-time; a multi-statement batch mixing
4404
+ // DDL with DML (e.g. one \`psql -c "a;b;c"\` call) logs the whole
4405
+ // raw text verbatim, including any literal DML values.
4406
+ { log_statement: 'ddl' }
4407
+ : undefined,
4545
4408
  defaultDatabaseName: databaseName,
4546
4409
  storageEncrypted: true,
4547
4410
  storageEncryptionKey: key,
@@ -4577,23 +4440,23 @@ export abstract class AuroraDatabase extends Construct {
4577
4440
  this.proxy?.endpoint ?? this.cluster.clusterEndpoint.hostname;
4578
4441
  const databasePort = this.cluster.clusterEndpoint.port;
4579
4442
 
4580
- const createDbUserHandler = new Function(this, 'CreateDbUserHandler', {
4581
- code: Code.fromAsset(createDbUserBundleDir),
4582
- handler: 'index.handler',
4583
- runtime: Runtime.NODEJS_LATEST,
4443
+ const commonProps: FunctionOptions = {
4444
+ vpc,
4584
4445
  timeout: Duration.minutes(5),
4585
4446
  tracing: Tracing.ACTIVE,
4586
- vpc,
4447
+ architecture: Architecture.ARM_64,
4448
+ };
4449
+
4450
+ const createDbUserHandler = this.createDbUserHandler({
4451
+ ...commonProps,
4587
4452
  vpcSubnets: {
4588
4453
  subnetType: SubnetType.PRIVATE_WITH_EGRESS,
4589
4454
  },
4590
- environment: {
4591
- DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
4592
- NODE_EXTRA_CA_CERTS: '/var/runtime/ca-cert.pem',
4593
- },
4594
- architecture: Architecture.ARM_64,
4595
4455
  });
4596
-
4456
+ createDbUserHandler.addEnvironment(
4457
+ 'DATABASE_SECRET_ARN',
4458
+ this.cluster.secret!.secretArn,
4459
+ );
4597
4460
  this.cluster.connections.allowDefaultPortFrom(
4598
4461
  createDbUserHandler,
4599
4462
  'Allow the create-db-user handler to connect to the database',
@@ -4630,40 +4493,21 @@ export abstract class AuroraDatabase extends Construct {
4630
4493
  region: Stack.of(this).region,
4631
4494
  });
4632
4495
 
4633
- const migrationHandler = new DockerImageFunction(this, 'MigrationHandler', {
4634
- code: DockerImageCode.fromImageAsset(migrationBundleDir, {
4635
- platform: Platform.LINUX_ARM64,
4636
- }),
4496
+ const migrationHandler = this.createMigrationHandler({
4497
+ ...commonProps,
4637
4498
  memorySize: 1024,
4638
- timeout: Duration.minutes(5),
4639
- tracing: Tracing.ACTIVE,
4640
- vpc,
4641
- environment:
4642
- engine.type === 'mysql'
4643
- ? {
4644
- DATABASE_SECRET_ARN: this.cluster.secret!.secretArn,
4645
- }
4646
- : {
4647
- HOSTNAME: databaseHostname,
4648
- DATABASE: databaseName,
4649
- PORT: databasePort.toString(),
4650
- DBUSER: this.dbUser,
4651
- },
4652
- architecture: Architecture.ARM_64,
4653
4499
  });
4500
+ migrationHandler.addEnvironment(
4501
+ 'DATABASE_SECRET_ARN',
4502
+ this.cluster.secret!.secretArn,
4503
+ );
4504
+ this.cluster.connections.allowDefaultPortFrom(migrationHandler);
4505
+ this.grantSecretRead(migrationHandler);
4654
4506
 
4655
- if (engine.type === 'mysql') {
4656
- this.cluster.connections.allowDefaultPortFrom(migrationHandler);
4657
- this.grantSecretRead(migrationHandler);
4658
- } else {
4659
- this.allowDefaultPortFrom(migrationHandler);
4660
- this.grantConnect(migrationHandler);
4661
- }
4662
-
4663
- const trigger = new Trigger(this, 'MigrationTrigger', {
4507
+ const migrationTrigger = new Trigger(this, 'MigrationTrigger', {
4664
4508
  handler: migrationHandler,
4665
4509
  });
4666
- trigger.node.addDependency(createDbUserResource);
4510
+ migrationTrigger.node.addDependency(createDbUserResource);
4667
4511
 
4668
4512
  new CfnOutput(this, 'ClusterEndpoint', {
4669
4513
  value: this.cluster.clusterEndpoint.hostname,
@@ -4676,6 +4520,18 @@ export abstract class AuroraDatabase extends Construct {
4676
4520
  }
4677
4521
  }
4678
4522
 
4523
+ /**
4524
+ * Creates the Lambda handler used to create or reconcile the application database user.
4525
+ */
4526
+ protected abstract createDbUserHandler(baseProps: FunctionOptions): Function;
4527
+
4528
+ /**
4529
+ * Creates the Lambda handler used to run database migrations.
4530
+ */
4531
+ protected abstract createMigrationHandler(
4532
+ baseProps: FunctionOptions,
4533
+ ): Function;
4534
+
4679
4535
  public allowDefaultPortFrom(other: IConnectable, description?: string): void {
4680
4536
  if (this.proxy) {
4681
4537
  this.proxy.connections.allowFrom(
@@ -4704,8 +4560,17 @@ export abstract class AuroraDatabase extends Construct {
4704
4560
  exports[`ts#rdb generator > should generate the aurora shared construct 2`] = `
4705
4561
  "import * as path from 'path';
4706
4562
  import * as url from 'url';
4563
+ import { readFileSync } from 'fs';
4707
4564
  import { Construct } from 'constructs';
4708
- import { DB_PACKAGE_NAME } from ':proj/db';
4565
+ import { Platform } from 'aws-cdk-lib/aws-ecr-assets';
4566
+ import {
4567
+ Code,
4568
+ DockerImageCode,
4569
+ DockerImageFunction,
4570
+ Function,
4571
+ FunctionOptions,
4572
+ Runtime,
4573
+ } from 'aws-cdk-lib/aws-lambda';
4709
4574
  import {
4710
4575
  AuroraDatabase,
4711
4576
  AuroraDatabaseEngines,
@@ -4713,14 +4578,29 @@ import {
4713
4578
  } from '../../core/rdb/aurora.js';
4714
4579
  import { findWorkspaceRoot } from '../../core/workspace.js';
4715
4580
 
4581
+ const { runtimeConfigKey } = JSON.parse(
4582
+ readFileSync(
4583
+ path.join(
4584
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4585
+ 'packages/db/config.json',
4586
+ ),
4587
+ 'utf-8',
4588
+ ),
4589
+ ) as { runtimeConfigKey: string };
4590
+
4591
+ const migrationBundleDir = path.join(
4592
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4593
+ 'dist/packages/db/bundle/migration',
4594
+ );
4595
+
4596
+ const createDbUserBundleDir = path.join(
4597
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4598
+ 'dist/packages/db/bundle/create-db-user',
4599
+ );
4600
+
4716
4601
  export type DbProps = Omit<
4717
4602
  AuroraDatabaseProps,
4718
- | 'databaseName'
4719
- | 'adminUser'
4720
- | 'createDbUserBundleDir'
4721
- | 'engine'
4722
- | 'runtimeConfigKey'
4723
- | 'migrationBundleDir'
4603
+ 'databaseName' | 'adminUser' | 'runtimeConfigKey' | 'engine'
4724
4604
  >;
4725
4605
 
4726
4606
  /**
@@ -4732,35 +4612,47 @@ export class Db extends AuroraDatabase {
4732
4612
  ...props,
4733
4613
  databaseName: 'database_name',
4734
4614
  adminUser: 'databaseUser',
4735
- runtimeConfigKey: DB_PACKAGE_NAME,
4736
- migrationBundleDir: path.join(
4737
- findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4738
- 'dist/packages/db/bundle/migration',
4739
- ),
4740
- createDbUserBundleDir: path.join(
4741
- findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
4742
- 'dist/packages/db/bundle/create-db-user',
4743
- ),
4615
+ runtimeConfigKey,
4744
4616
  engine: AuroraDatabaseEngines.postgres({}),
4745
4617
  });
4746
4618
  }
4619
+
4620
+ protected override createDbUserHandler(baseProps: FunctionOptions): Function {
4621
+ return new Function(this, 'CreateDbUserHandler', {
4622
+ ...baseProps,
4623
+ code: Code.fromAsset(createDbUserBundleDir),
4624
+ handler: 'index.handler',
4625
+ runtime: Runtime.NODEJS_LATEST,
4626
+ environment: {
4627
+ NODE_EXTRA_CA_CERTS: '/var/runtime/ca-cert.pem',
4628
+ },
4629
+ });
4630
+ }
4631
+
4632
+ protected override createMigrationHandler(
4633
+ baseProps: FunctionOptions,
4634
+ ): Function {
4635
+ return new DockerImageFunction(this, 'MigrationHandler', {
4636
+ ...baseProps,
4637
+ code: DockerImageCode.fromImageAsset(migrationBundleDir, {
4638
+ platform: Platform.LINUX_ARM64,
4639
+ }),
4640
+ });
4641
+ }
4747
4642
  }
4748
4643
  "
4749
4644
  `;
4750
4645
 
4751
4646
  exports[`ts#rdb generator > should generate the aurora shared construct 3`] = `
4752
4647
  "import { defineConfig } from 'prisma/config';
4648
+ import { readFileSync } from 'fs';
4753
4649
 
4754
4650
  const getDatabaseUrl = async () => {
4755
- if (process.env.SERVE_LOCAL === 'true') {
4756
- const {
4757
- LOCAL_DB_HOST,
4758
- LOCAL_DB_NAME,
4759
- LOCAL_DB_PASSWORD,
4760
- LOCAL_DB_PORT,
4761
- LOCAL_DB_USER,
4762
- } = await import('./src/constants.js');
4763
- return \`postgresql://\${LOCAL_DB_USER}:\${LOCAL_DB_PASSWORD}@\${LOCAL_DB_HOST}:\${LOCAL_DB_PORT}/\${LOCAL_DB_NAME}\`;
4651
+ if (process.env.LOCAL_DEV === 'true') {
4652
+ const { host, port, dbName, dbUser, dbPassword } = JSON.parse(
4653
+ readFileSync('config.json', 'utf-8'),
4654
+ ).localDev;
4655
+ return \`postgresql://\${dbUser}:\${dbPassword}@\${host}:\${port}/\${dbName}\`;
4764
4656
  }
4765
4657
  return process.env.DATABASE_URL;
4766
4658
  };
@@ -4780,9 +4672,27 @@ export default defineConfig({
4780
4672
  exports[`ts#rdb generator > should generate the aurora shared construct 4`] = `
4781
4673
  "FROM public.ecr.aws/lambda/nodejs:24
4782
4674
 
4675
+ # Upgrade npm to a version free of known HIGH/CRITICAL vulnerabilities
4676
+ RUN npm install -g npm@12.0.2
4677
+
4678
+ # Patch OS packages beyond the base image's pinned release, and drop the
4679
+ # runtime's convenience copy of the AWS SDK (the handler bundle inlines its
4680
+ # own dependencies), keeping the image free of known HIGH/CRITICAL
4681
+ # vulnerabilities
4682
+ RUN microdnf upgrade -y --releasever latest && microdnf clean all \\
4683
+ && rm -rf /var/runtime/node_modules/@aws-sdk
4684
+
4783
4685
  WORKDIR \${LAMBDA_TASK_ROOT}
4784
4686
 
4785
- RUN npm install prisma@7.8.0
4687
+ # npm blocks dependency install scripts by default; allow prisma's so its
4688
+ # postinstall downloads the schema-engine binary needed to run migrations.
4689
+ # npm is removed once prisma is installed — the handler runs prisma's own
4690
+ # binary directly, and npm's bundled dependencies would otherwise carry known
4691
+ # HIGH/CRITICAL vulnerabilities into the image.
4692
+ RUN printf 'allow-scripts[]=prisma\\nallow-scripts[]=@prisma/engines\\n' > .npmrc \\
4693
+ && npm install prisma@7.9.1 \\
4694
+ && rm .npmrc \\
4695
+ && npm uninstall -g npm
4786
4696
 
4787
4697
  COPY index.js ./index.js
4788
4698
  COPY prisma ./prisma
@@ -4806,7 +4716,7 @@ export default defineConfig([
4806
4716
  output: {
4807
4717
  file: '../../dist/packages/db/bundle/migration/index.js',
4808
4718
  format: 'cjs',
4809
- inlineDynamicImports: true,
4719
+ codeSplitting: false,
4810
4720
  },
4811
4721
  platform: 'node',
4812
4722
  },
@@ -4816,7 +4726,7 @@ export default defineConfig([
4816
4726
  output: {
4817
4727
  file: '../../dist/packages/db/bundle/create-db-user/index.js',
4818
4728
  format: 'cjs',
4819
- inlineDynamicImports: true,
4729
+ codeSplitting: false,
4820
4730
  },
4821
4731
  platform: 'node',
4822
4732
  },
@@ -4828,6 +4738,7 @@ exports[`ts#rdb generator > should generate the aurora shared construct 6`] = `
4828
4738
  "export * from './rdb/aurora.js';
4829
4739
  export * from './app.js';
4830
4740
  export * from './checkov.js';
4741
+ export * from './cloudfront.js';
4831
4742
  export * from './runtime-config.js';
4832
4743
  export * from './workspace.js';
4833
4744
  "