@aws/nx-plugin 1.0.0-rc.9 → 1.0.0-rc.90

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 (1592) hide show
  1. package/LICENSE-THIRD-PARTY +13999 -17963
  2. package/README.md +30 -110
  3. package/executors.json +5 -0
  4. package/generators.json +170 -10
  5. package/migrations.json +364 -0
  6. package/package.json +40 -21
  7. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +344 -0
  8. package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
  9. package/src/agentcore-gateway/agent-connection/generator.js +95 -0
  10. package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
  11. package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
  12. package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
  13. package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
  14. package/src/agentcore-gateway/agent-connection/schema.json +31 -0
  15. package/src/agentcore-gateway/attach-upstream.d.ts +49 -0
  16. package/src/agentcore-gateway/attach-upstream.js +59 -0
  17. package/src/agentcore-gateway/attach-upstream.js.map +1 -0
  18. package/src/agentcore-gateway/files/cedar/policies/README.md +61 -0
  19. package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +26 -0
  20. package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
  21. package/src/agentcore-gateway/files/project/mcp/local-dev.ts.template +134 -0
  22. package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
  23. package/src/agentcore-gateway/gateway-connection/generator.js +103 -0
  24. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
  25. package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
  26. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
  27. package/src/agentcore-gateway/gateway-connection/schema.d.ts +13 -0
  28. package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
  29. package/src/agentcore-gateway/generator.d.ts +90 -0
  30. package/src/agentcore-gateway/generator.js +202 -0
  31. package/src/agentcore-gateway/generator.js.map +1 -0
  32. package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
  33. package/src/agentcore-gateway/mcp-connection/generator.js +61 -0
  34. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
  35. package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
  36. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
  37. package/src/agentcore-gateway/mcp-connection/schema.d.ts +13 -0
  38. package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
  39. package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
  40. package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
  41. package/src/agentcore-gateway/react-connection/generator.js +119 -0
  42. package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
  43. package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
  44. package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
  45. package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
  46. package/src/agentcore-gateway/react-connection/schema.json +31 -0
  47. package/src/agentcore-gateway/schema.d.js +6 -0
  48. package/src/agentcore-gateway/schema.d.js.map +1 -0
  49. package/src/agentcore-gateway/schema.d.ts +17 -0
  50. package/src/agentcore-gateway/schema.json +72 -0
  51. package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +237 -0
  52. package/src/agentcore-harness/files/project/README.md.template +82 -0
  53. package/src/agentcore-harness/files/project/scripts/chat.ts.template +99 -0
  54. package/src/agentcore-harness/files/project/src/PROMPT.md.template +16 -0
  55. package/src/agentcore-harness/generator.d.ts +62 -0
  56. package/src/agentcore-harness/generator.js +158 -0
  57. package/src/agentcore-harness/generator.js.map +1 -0
  58. package/src/agentcore-harness/schema.d.js +8 -0
  59. package/src/agentcore-harness/schema.d.js.map +1 -0
  60. package/src/agentcore-harness/schema.d.ts +17 -0
  61. package/src/agentcore-harness/schema.json +53 -0
  62. package/src/connection/agent-local-dev.d.ts +49 -0
  63. package/src/connection/agent-local-dev.js +84 -0
  64. package/src/connection/agent-local-dev.js.map +1 -0
  65. package/src/connection/agent-runtime-config.js +9 -14
  66. package/src/connection/agent-runtime-config.js.map +1 -1
  67. package/src/connection/gateway-runtime-config.d.ts +19 -0
  68. package/src/connection/gateway-runtime-config.js +47 -0
  69. package/src/connection/gateway-runtime-config.js.map +1 -0
  70. package/src/connection/generator.d.ts +4 -11
  71. package/src/connection/generator.js +172 -194
  72. package/src/connection/generator.js.map +1 -1
  73. package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
  74. package/src/connection/local-dev.js +37 -0
  75. package/src/connection/local-dev.js.map +1 -0
  76. package/src/connection/scaffold-catalog.d.ts +267 -0
  77. package/src/connection/scaffold-catalog.js +347 -0
  78. package/src/connection/scaffold-catalog.js.map +1 -0
  79. package/src/connection/schema-resolver.d.ts +5 -0
  80. package/src/connection/schema-resolver.js +27 -0
  81. package/src/connection/schema-resolver.js.map +1 -0
  82. package/src/connection/schema.d.js +6 -0
  83. package/src/connection/schema.d.js.map +1 -0
  84. package/src/connection/schema.d.ts +1 -0
  85. package/src/connection/schema.json +5 -0
  86. package/src/connection/supported-connections.d.ts +116 -0
  87. package/src/connection/supported-connections.js +163 -0
  88. package/src/connection/supported-connections.js.map +1 -0
  89. package/src/index.d.ts +1 -1
  90. package/src/index.js +2 -5
  91. package/src/index.js.map +1 -1
  92. package/src/infra/app/__snapshots__/generator.spec.ts.snap +172 -87
  93. package/src/infra/app/files/app/README.md.template +22 -4
  94. package/src/infra/app/files/app/src/main.ts.template +5 -1
  95. package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
  96. package/src/infra/app/generator.d.ts +44 -1
  97. package/src/infra/app/generator.js +209 -128
  98. package/src/infra/app/generator.js.map +1 -1
  99. package/src/infra/app/schema.d.js +6 -0
  100. package/src/infra/app/schema.d.js.map +1 -0
  101. package/src/infra/app/schema.d.ts +1 -1
  102. package/src/infra/app/schema.json +5 -0
  103. package/src/init/generator.d.ts +31 -0
  104. package/src/init/generator.js +46 -0
  105. package/src/init/generator.js.map +1 -0
  106. package/src/init/schema.d.js +6 -0
  107. package/src/init/schema.d.js.map +1 -0
  108. package/src/init/schema.d.ts +16 -0
  109. package/src/init/schema.json +35 -0
  110. package/src/internal/test-matrix/generator.d.ts +29 -0
  111. package/src/internal/test-matrix/generator.js +729 -0
  112. package/src/internal/test-matrix/generator.js.map +1 -0
  113. package/src/internal/test-matrix/schema.d.js +6 -0
  114. package/src/internal/test-matrix/schema.d.js.map +1 -0
  115. package/src/internal/test-matrix/schema.d.ts +12 -0
  116. package/src/internal/test-matrix/schema.json +21 -0
  117. package/src/license/config-types.d.ts +2 -2
  118. package/src/license/config-types.js +5 -3
  119. package/src/license/config-types.js.map +1 -1
  120. package/src/license/config.d.ts +12 -3
  121. package/src/license/config.js +295 -242
  122. package/src/license/config.js.map +1 -1
  123. package/src/license/dependency-check/check.d.ts +2 -2
  124. package/src/license/dependency-check/check.js +51 -46
  125. package/src/license/dependency-check/check.js.map +1 -1
  126. package/src/license/dependency-check/collectors/collector.js +41 -71
  127. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  128. package/src/license/dependency-check/collectors/npm-collector.js +34 -41
  129. package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
  130. package/src/license/dependency-check/collectors/python-collector.js +61 -62
  131. package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
  132. package/src/license/dependency-check/evaluator.d.ts +1 -1
  133. package/src/license/dependency-check/evaluator.js +91 -74
  134. package/src/license/dependency-check/evaluator.js.map +1 -1
  135. package/src/license/dependency-check/executor.js +30 -22
  136. package/src/license/dependency-check/executor.js.map +1 -1
  137. package/src/license/dependency-check/pre-approved.d.ts +1 -1
  138. package/src/license/dependency-check/pre-approved.js +949 -336
  139. package/src/license/dependency-check/pre-approved.js.map +1 -1
  140. package/src/license/dependency-check/types.d.ts +1 -1
  141. package/src/license/dependency-check/types.js +2 -3
  142. package/src/license/dependency-check/types.js.map +1 -1
  143. package/src/license/generator.d.ts +1 -1
  144. package/src/license/generator.js +60 -77
  145. package/src/license/generator.js.map +1 -1
  146. package/src/license/index.d.ts +4 -4
  147. package/src/license/index.js +3 -9
  148. package/src/license/index.js.map +1 -1
  149. package/src/license/known-exceptions.d.ts +2 -3
  150. package/src/license/known-exceptions.js +12 -28
  151. package/src/license/known-exceptions.js.map +1 -1
  152. package/src/license/schema.d.js +6 -0
  153. package/src/license/schema.d.js.map +1 -0
  154. package/src/license/schema.d.ts +2 -0
  155. package/src/license/schema.json +5 -0
  156. package/src/license/sync/generator.js +94 -119
  157. package/src/license/sync/generator.js.map +1 -1
  158. package/src/license/sync/project-file-sync.d.ts +1 -1
  159. package/src/license/sync/project-file-sync.js +28 -35
  160. package/src/license/sync/project-file-sync.js.map +1 -1
  161. package/src/mcp-server/dev-server.d.ts +1 -0
  162. package/src/mcp-server/dev-server.js +18 -0
  163. package/src/mcp-server/dev-server.js.map +1 -0
  164. package/src/mcp-server/generator-info.d.ts +8 -3
  165. package/src/mcp-server/generator-info.js +155 -167
  166. package/src/mcp-server/generator-info.js.map +1 -1
  167. package/src/mcp-server/guide-pipeline.d.ts +1 -1
  168. package/src/mcp-server/guide-pipeline.js +199 -206
  169. package/src/mcp-server/guide-pipeline.js.map +1 -1
  170. package/src/mcp-server/guide-render.js +10 -25
  171. package/src/mcp-server/guide-render.js.map +1 -1
  172. package/src/mcp-server/index.js +6 -10
  173. package/src/mcp-server/index.js.map +1 -1
  174. package/src/mcp-server/mdx-ast.js +39 -57
  175. package/src/mcp-server/mdx-ast.js.map +1 -1
  176. package/src/mcp-server/option-filter.js +33 -47
  177. package/src/mcp-server/option-filter.js.map +1 -1
  178. package/src/mcp-server/schema-registry.d.ts +9 -3
  179. package/src/mcp-server/schema-registry.js +41 -38
  180. package/src/mcp-server/schema-registry.js.map +1 -1
  181. package/src/mcp-server/schema.d.ts +1 -1
  182. package/src/mcp-server/schema.js +9 -7
  183. package/src/mcp-server/schema.js.map +1 -1
  184. package/src/mcp-server/server.js +24 -24
  185. package/src/mcp-server/server.js.map +1 -1
  186. package/src/mcp-server/tools/add-to-existing-project.d.ts +12 -0
  187. package/src/mcp-server/tools/add-to-existing-project.js +36 -0
  188. package/src/mcp-server/tools/add-to-existing-project.js.map +1 -0
  189. package/src/mcp-server/tools/create-workspace-command.js +23 -24
  190. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  191. package/src/mcp-server/tools/general-guidance.d.ts +2 -2
  192. package/src/mcp-server/tools/general-guidance.js +55 -32
  193. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  194. package/src/mcp-server/tools/generator-guide.d.ts +1 -1
  195. package/src/mcp-server/tools/generator-guide.js +29 -37
  196. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  197. package/src/mcp-server/tools/list-generators.d.ts +1 -1
  198. package/src/mcp-server/tools/list-generators.js +19 -25
  199. package/src/mcp-server/tools/list-generators.js.map +1 -1
  200. package/src/mcp-server/tools/upgrade-workspace.d.ts +11 -0
  201. package/src/mcp-server/tools/upgrade-workspace.js +32 -0
  202. package/src/mcp-server/tools/upgrade-workspace.js.map +1 -0
  203. package/src/migrations/latest/add-assemble-target/metadata.json +3 -0
  204. package/src/migrations/latest/add-assemble-target/migration.d.ts +6 -0
  205. package/src/migrations/latest/add-assemble-target/migration.js +241 -0
  206. package/src/migrations/latest/add-assemble-target/migration.js.map +1 -0
  207. package/src/migrations/latest/add-destroy-sandbox-target/metadata.json +3 -0
  208. package/src/migrations/latest/add-destroy-sandbox-target/migration.d.ts +6 -0
  209. package/src/migrations/latest/add-destroy-sandbox-target/migration.js +150 -0
  210. package/src/migrations/latest/add-destroy-sandbox-target/migration.js.map +1 -0
  211. package/src/migrations/latest/declare-cacheable-target-inputs/metadata.json +3 -0
  212. package/src/migrations/latest/declare-cacheable-target-inputs/migration.d.ts +6 -0
  213. package/src/migrations/latest/declare-cacheable-target-inputs/migration.js +94 -0
  214. package/src/migrations/latest/declare-cacheable-target-inputs/migration.js.map +1 -0
  215. package/src/migrations/latest/dev-target-depends-on-pull-image/metadata.json +3 -0
  216. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.d.ts +6 -0
  217. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.js +67 -0
  218. package/src/migrations/latest/dev-target-depends-on-pull-image/migration.js.map +1 -0
  219. package/src/migrations/latest/docker-target-cache-soundness/metadata.json +3 -0
  220. package/src/migrations/latest/docker-target-cache-soundness/migration.d.ts +6 -0
  221. package/src/migrations/latest/docker-target-cache-soundness/migration.js +95 -0
  222. package/src/migrations/latest/docker-target-cache-soundness/migration.js.map +1 -0
  223. package/src/migrations/latest/nx-parallel-default/metadata.json +3 -0
  224. package/src/migrations/latest/nx-parallel-default/migration.d.ts +14 -0
  225. package/src/migrations/latest/nx-parallel-default/migration.js +29 -0
  226. package/src/migrations/latest/nx-parallel-default/migration.js.map +1 -0
  227. package/src/migrations/latest/open-api-codegen-executor/metadata.json +3 -0
  228. package/src/migrations/latest/open-api-codegen-executor/migration.d.ts +6 -0
  229. package/src/migrations/latest/open-api-codegen-executor/migration.js +100 -0
  230. package/src/migrations/latest/open-api-codegen-executor/migration.js.map +1 -0
  231. package/src/migrations/latest/python-test-input-scoping/metadata.json +3 -0
  232. package/src/migrations/latest/python-test-input-scoping/migration.d.ts +6 -0
  233. package/src/migrations/latest/python-test-input-scoping/migration.js +142 -0
  234. package/src/migrations/latest/python-test-input-scoping/migration.js.map +1 -0
  235. package/src/migrations/latest/python-version-drop-exact-patch/metadata.json +3 -0
  236. package/src/migrations/latest/python-version-drop-exact-patch/migration.d.ts +6 -0
  237. package/src/migrations/latest/python-version-drop-exact-patch/migration.js +43 -0
  238. package/src/migrations/latest/python-version-drop-exact-patch/migration.js.map +1 -0
  239. package/src/migrations/latest/react-website-nx-react-express-override/metadata.json +3 -0
  240. package/src/migrations/latest/react-website-nx-react-express-override/migration.d.ts +31 -0
  241. package/src/migrations/latest/react-website-nx-react-express-override/migration.js +74 -0
  242. package/src/migrations/latest/react-website-nx-react-express-override/migration.js.map +1 -0
  243. package/src/migrations/latest/terraform-fmt-check/metadata.json +3 -0
  244. package/src/migrations/latest/terraform-fmt-check/migration.d.ts +6 -0
  245. package/src/migrations/latest/terraform-fmt-check/migration.js +165 -0
  246. package/src/migrations/latest/terraform-fmt-check/migration.js.map +1 -0
  247. package/src/migrations/latest/terraform-provider-plugin-cache/metadata.json +3 -0
  248. package/src/migrations/latest/terraform-provider-plugin-cache/migration.d.ts +6 -0
  249. package/src/migrations/latest/terraform-provider-plugin-cache/migration.js +164 -0
  250. package/src/migrations/latest/terraform-provider-plugin-cache/migration.js.map +1 -0
  251. package/src/migrations/latest/terraform-rdb-proxy-iam-connect-grant/__snapshots__/migration.spec.ts.snap +23 -0
  252. package/src/migrations/latest/terraform-rdb-proxy-iam-connect-grant/metadata.json +3 -0
  253. package/src/migrations/latest/terraform-rdb-proxy-iam-connect-grant/migration.d.ts +6 -0
  254. package/src/migrations/latest/terraform-rdb-proxy-iam-connect-grant/migration.js +88 -0
  255. package/src/migrations/latest/terraform-rdb-proxy-iam-connect-grant/migration.js.map +1 -0
  256. package/src/migrations/latest/vitest-coverage-output-dir/metadata.json +3 -0
  257. package/src/migrations/latest/vitest-coverage-output-dir/migration.d.ts +6 -0
  258. package/src/migrations/latest/vitest-coverage-output-dir/migration.js +177 -0
  259. package/src/migrations/latest/vitest-coverage-output-dir/migration.js.map +1 -0
  260. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/metadata.json +3 -0
  261. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.d.ts +6 -0
  262. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js +65 -0
  263. package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js.map +1 -0
  264. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/metadata.json +3 -0
  265. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.d.ts +6 -0
  266. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js +108 -0
  267. package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js.map +1 -0
  268. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
  269. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
  270. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
  271. package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
  272. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/metadata.json +3 -0
  273. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
  274. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js +215 -0
  275. package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
  276. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
  277. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
  278. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js +93 -0
  279. package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  280. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/metadata.json +3 -0
  281. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.d.ts +96 -0
  282. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js +670 -0
  283. package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js.map +1 -0
  284. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/metadata.json +3 -0
  285. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  286. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js +89 -0
  287. package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  288. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/metadata.json +3 -0
  289. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.d.ts +6 -0
  290. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js +449 -0
  291. package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js.map +1 -0
  292. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/metadata.json +3 -0
  293. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.d.ts +6 -0
  294. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js +78 -0
  295. package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -0
  296. 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
  297. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
  298. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/metadata.json +3 -0
  299. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.d.ts +6 -0
  300. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js +217 -0
  301. package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -0
  302. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
  303. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/metadata.json +3 -0
  304. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.d.ts +6 -0
  305. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js +195 -0
  306. package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -0
  307. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
  308. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/metadata.json +3 -0
  309. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.d.ts +6 -0
  310. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js +77 -0
  311. package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -0
  312. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
  313. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/metadata.json +3 -0
  314. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.d.ts +6 -0
  315. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js +91 -0
  316. package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -0
  317. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/metadata.json +3 -0
  318. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.d.ts +6 -0
  319. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js +412 -0
  320. package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -0
  321. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/metadata.json +3 -0
  322. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.d.ts +6 -0
  323. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js +33 -0
  324. package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -0
  325. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/metadata.json +3 -0
  326. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.d.ts +6 -0
  327. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js +83 -0
  328. package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -0
  329. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/legacy-service.Dockerfile.fixture +95 -0
  330. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/metadata.json +3 -0
  331. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.d.ts +6 -0
  332. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js +154 -0
  333. package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -0
  334. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/metadata.json +3 -0
  335. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.d.ts +6 -0
  336. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js +71 -0
  337. package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -0
  338. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/metadata.json +3 -0
  339. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.d.ts +6 -0
  340. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js +57 -0
  341. package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -0
  342. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/metadata.json +3 -0
  343. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.d.ts +6 -0
  344. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js +123 -0
  345. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js.map +1 -0
  346. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/build-system-prompt.ts.fixture +23 -0
  347. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/build-user-prompt.ts.fixture +96 -0
  348. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/config-path.ts.fixture +1 -0
  349. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/file-to-translate.ts.fixture +10 -0
  350. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/get-files-to-translate.ts.fixture +96 -0
  351. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/header.ts.fixture +15 -0
  352. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/log.ts.fixture +18 -0
  353. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/main-call.ts.fixture +6 -0
  354. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/main.ts.fixture +79 -0
  355. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/project-root.ts.fixture +1 -0
  356. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/run-with-concurrency.ts.fixture +57 -0
  357. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/scripts-dir.ts.fixture +1 -0
  358. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/files/translate-file-for-language.ts.fixture +61 -0
  359. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/already-migrated.grit +1 -0
  360. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/build-system-prompt.grit +6 -0
  361. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/build-user-prompt.grit +6 -0
  362. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/config-path.grit +1 -0
  363. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/file-to-translate.grit +11 -0
  364. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/get-files-to-translate.grit +7 -0
  365. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/log.grit +3 -0
  366. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/main-call.grit +1 -0
  367. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/main.grit +8 -0
  368. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/project-root.grit +1 -0
  369. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/run-with-concurrency.grit +6 -0
  370. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/grit/translate-file-for-language.grit +6 -0
  371. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/metadata.json +3 -0
  372. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.d.ts +2 -0
  373. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js +103 -0
  374. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js.map +1 -0
  375. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/test-fixtures/released-script-first.ts.fixture +430 -0
  376. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/test-fixtures/released-script.ts.fixture +431 -0
  377. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/metadata.json +3 -0
  378. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.d.ts +6 -0
  379. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js +246 -0
  380. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js.map +1 -0
  381. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/metadata.json +3 -0
  382. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
  383. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js +329 -0
  384. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
  385. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/metadata.json +3 -0
  386. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.d.ts +2 -0
  387. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js +308 -0
  388. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js.map +1 -0
  389. package/src/migrations/v1.0.0-rc.73/0001-remove-mcp-inspector-license-exceptions/metadata.json +3 -0
  390. package/{sdk/utils/ast.d.ts → src/migrations/v1.0.0-rc.73/0001-remove-mcp-inspector-license-exceptions/migration.d.ts} +2 -2
  391. package/src/migrations/v1.0.0-rc.73/0001-remove-mcp-inspector-license-exceptions/migration.js +38 -0
  392. package/src/migrations/v1.0.0-rc.73/0001-remove-mcp-inspector-license-exceptions/migration.js.map +1 -0
  393. package/src/migrations/v1.0.0-rc.73/0002-apt-security-updates-in-container-images/__snapshots__/migration.spec.ts.snap +90 -0
  394. package/src/migrations/v1.0.0-rc.73/0002-apt-security-updates-in-container-images/metadata.json +3 -0
  395. package/src/migrations/v1.0.0-rc.73/0002-apt-security-updates-in-container-images/migration.d.ts +6 -0
  396. package/src/migrations/v1.0.0-rc.73/0002-apt-security-updates-in-container-images/migration.js +90 -0
  397. package/src/migrations/v1.0.0-rc.73/0002-apt-security-updates-in-container-images/migration.js.map +1 -0
  398. package/src/migrations/v1.0.0-rc.74/0001-py-agent-session-id-middleware-extraction/metadata.json +3 -0
  399. package/src/migrations/v1.0.0-rc.74/0001-py-agent-session-id-middleware-extraction/migration.d.ts +2 -0
  400. package/src/migrations/v1.0.0-rc.74/0001-py-agent-session-id-middleware-extraction/migration.js +118 -0
  401. package/src/migrations/v1.0.0-rc.74/0001-py-agent-session-id-middleware-extraction/migration.js.map +1 -0
  402. package/src/migrations/v1.0.0-rc.75/0001-ts-agent-session-id-middleware-extraction/metadata.json +3 -0
  403. package/src/migrations/v1.0.0-rc.75/0001-ts-agent-session-id-middleware-extraction/migration.d.ts +2 -0
  404. package/src/migrations/v1.0.0-rc.75/0001-ts-agent-session-id-middleware-extraction/migration.js +136 -0
  405. package/src/migrations/v1.0.0-rc.75/0001-ts-agent-session-id-middleware-extraction/migration.js.map +1 -0
  406. package/src/migrations/v1.0.0-rc.77/0001-dynamodb-configurable-encryption/__snapshots__/migration.spec.ts.snap +429 -0
  407. package/src/migrations/v1.0.0-rc.77/0001-dynamodb-configurable-encryption/metadata.json +3 -0
  408. package/src/migrations/v1.0.0-rc.77/0001-dynamodb-configurable-encryption/migration.d.ts +6 -0
  409. package/src/migrations/v1.0.0-rc.77/0001-dynamodb-configurable-encryption/migration.js +325 -0
  410. package/src/migrations/v1.0.0-rc.77/0001-dynamodb-configurable-encryption/migration.js.map +1 -0
  411. package/src/migrations/v1.0.0-rc.77/0002-user-identity-configurable-mfa/metadata.json +3 -0
  412. package/src/migrations/v1.0.0-rc.77/0002-user-identity-configurable-mfa/migration.d.ts +6 -0
  413. package/src/migrations/v1.0.0-rc.77/0002-user-identity-configurable-mfa/migration.js +362 -0
  414. package/src/migrations/v1.0.0-rc.77/0002-user-identity-configurable-mfa/migration.js.map +1 -0
  415. package/src/migrations/v1.0.0-rc.78/0001-static-website-configurable-waf-encryption/metadata.json +3 -0
  416. package/src/migrations/v1.0.0-rc.78/0001-static-website-configurable-waf-encryption/migration.d.ts +6 -0
  417. package/src/migrations/v1.0.0-rc.78/0001-static-website-configurable-waf-encryption/migration.js +418 -0
  418. package/src/migrations/v1.0.0-rc.78/0001-static-website-configurable-waf-encryption/migration.js.map +1 -0
  419. package/src/migrations/v1.0.0-rc.79/0001-py-agent-ag-ui-hooks/metadata.json +3 -0
  420. package/src/migrations/v1.0.0-rc.79/0001-py-agent-ag-ui-hooks/migration.d.ts +6 -0
  421. package/src/migrations/v1.0.0-rc.79/0001-py-agent-ag-ui-hooks/migration.js +113 -0
  422. package/src/migrations/v1.0.0-rc.79/0001-py-agent-ag-ui-hooks/migration.js.map +1 -0
  423. package/src/migrations/v1.0.0-rc.82/0001-terraform-load-runtime-config-src-path/metadata.json +3 -0
  424. package/src/migrations/v1.0.0-rc.82/0001-terraform-load-runtime-config-src-path/migration.d.ts +6 -0
  425. package/src/migrations/v1.0.0-rc.82/0001-terraform-load-runtime-config-src-path/migration.js +48 -0
  426. package/src/migrations/v1.0.0-rc.82/0001-terraform-load-runtime-config-src-path/migration.js.map +1 -0
  427. package/src/migrations/v1.0.0-rc.82/0002-runtime-config-namespace-defaults/metadata.json +3 -0
  428. package/src/migrations/v1.0.0-rc.82/0002-runtime-config-namespace-defaults/migration.d.ts +6 -0
  429. package/src/migrations/v1.0.0-rc.82/0002-runtime-config-namespace-defaults/migration.js +131 -0
  430. package/src/migrations/v1.0.0-rc.82/0002-runtime-config-namespace-defaults/migration.js.map +1 -0
  431. package/src/migrations/v1.0.0-rc.83/0001-dynamodb-terraform-app-module-outputs/metadata.json +3 -0
  432. package/src/migrations/v1.0.0-rc.83/0001-dynamodb-terraform-app-module-outputs/migration.d.ts +6 -0
  433. package/src/migrations/v1.0.0-rc.83/0001-dynamodb-terraform-app-module-outputs/migration.js +69 -0
  434. package/src/migrations/v1.0.0-rc.83/0001-dynamodb-terraform-app-module-outputs/migration.js.map +1 -0
  435. package/src/migrations/v1.0.0-rc.83/0002-terraform-data-resource-destroy-protection/__snapshots__/migration.spec.ts.snap +75 -0
  436. package/src/migrations/v1.0.0-rc.83/0002-terraform-data-resource-destroy-protection/metadata.json +3 -0
  437. package/src/migrations/v1.0.0-rc.83/0002-terraform-data-resource-destroy-protection/migration.d.ts +6 -0
  438. package/src/migrations/v1.0.0-rc.83/0002-terraform-data-resource-destroy-protection/migration.js +78 -0
  439. package/src/migrations/v1.0.0-rc.83/0002-terraform-data-resource-destroy-protection/migration.js.map +1 -0
  440. package/src/migrations/v1.0.0-rc.83/0003-terraform-gateway-cedar-render-root-ejs/metadata.json +3 -0
  441. package/src/migrations/v1.0.0-rc.83/0003-terraform-gateway-cedar-render-root-ejs/migration.d.ts +6 -0
  442. package/src/migrations/v1.0.0-rc.83/0003-terraform-gateway-cedar-render-root-ejs/migration.js +38 -0
  443. package/src/migrations/v1.0.0-rc.83/0003-terraform-gateway-cedar-render-root-ejs/migration.js.map +1 -0
  444. package/src/migrations/v1.0.0-rc.84/0001-rdb-terraform-aurora-app-module-defaults/__snapshots__/migration.spec.ts.snap +54 -0
  445. package/src/migrations/v1.0.0-rc.84/0001-rdb-terraform-aurora-app-module-defaults/metadata.json +3 -0
  446. package/src/migrations/v1.0.0-rc.84/0001-rdb-terraform-aurora-app-module-defaults/migration.d.ts +6 -0
  447. package/src/migrations/v1.0.0-rc.84/0001-rdb-terraform-aurora-app-module-defaults/migration.js +86 -0
  448. package/src/migrations/v1.0.0-rc.84/0001-rdb-terraform-aurora-app-module-defaults/migration.js.map +1 -0
  449. package/src/migrations/v1.0.0-rc.84/0002-agentcore-harness-no-tools-by-default/__snapshots__/migration.spec.ts.snap +79 -0
  450. package/src/migrations/v1.0.0-rc.84/0002-agentcore-harness-no-tools-by-default/metadata.json +3 -0
  451. package/src/migrations/v1.0.0-rc.84/0002-agentcore-harness-no-tools-by-default/migration.d.ts +6 -0
  452. package/src/migrations/v1.0.0-rc.84/0002-agentcore-harness-no-tools-by-default/migration.js +87 -0
  453. package/src/migrations/v1.0.0-rc.84/0002-agentcore-harness-no-tools-by-default/migration.js.map +1 -0
  454. package/src/migrations/v1.0.0-rc.84/0003-terraform-declare-used-providers/metadata.json +3 -0
  455. package/src/migrations/v1.0.0-rc.84/0003-terraform-declare-used-providers/migration.d.ts +6 -0
  456. package/src/migrations/v1.0.0-rc.84/0003-terraform-declare-used-providers/migration.js +147 -0
  457. package/src/migrations/v1.0.0-rc.84/0003-terraform-declare-used-providers/migration.js.map +1 -0
  458. package/src/migrations/v1.0.0-rc.84/0004-waf-log-group-cmk-encryption/__snapshots__/migration.spec.ts.snap +286 -0
  459. package/src/migrations/v1.0.0-rc.84/0004-waf-log-group-cmk-encryption/metadata.json +3 -0
  460. package/src/migrations/v1.0.0-rc.84/0004-waf-log-group-cmk-encryption/migration.d.ts +6 -0
  461. package/src/migrations/v1.0.0-rc.84/0004-waf-log-group-cmk-encryption/migration.js +238 -0
  462. package/src/migrations/v1.0.0-rc.84/0004-waf-log-group-cmk-encryption/migration.js.map +1 -0
  463. package/src/migrations/v1.0.0-rc.84/0005-terraform-harness-vpc-role-and-memory-grant/__snapshots__/migration.spec.ts.snap +521 -0
  464. package/src/migrations/v1.0.0-rc.84/0005-terraform-harness-vpc-role-and-memory-grant/metadata.json +3 -0
  465. package/src/migrations/v1.0.0-rc.84/0005-terraform-harness-vpc-role-and-memory-grant/migration.d.ts +6 -0
  466. package/src/migrations/v1.0.0-rc.84/0005-terraform-harness-vpc-role-and-memory-grant/migration.js +504 -0
  467. package/src/migrations/v1.0.0-rc.84/0005-terraform-harness-vpc-role-and-memory-grant/migration.js.map +1 -0
  468. package/src/migrations/v1.0.0-rc.85/0001-terraform-project-checkov-target-and-bootstrap-destroy/metadata.json +3 -0
  469. package/src/migrations/v1.0.0-rc.85/0001-terraform-project-checkov-target-and-bootstrap-destroy/migration.d.ts +6 -0
  470. package/src/migrations/v1.0.0-rc.85/0001-terraform-project-checkov-target-and-bootstrap-destroy/migration.js +146 -0
  471. package/src/migrations/v1.0.0-rc.85/0001-terraform-project-checkov-target-and-bootstrap-destroy/migration.js.map +1 -0
  472. package/src/open-api/codegen/executor-schema.d.js +6 -0
  473. package/src/open-api/codegen/executor-schema.d.js.map +1 -0
  474. package/src/open-api/codegen/executor-schema.d.ts +18 -0
  475. package/src/open-api/codegen/executor-schema.json +33 -0
  476. package/src/open-api/codegen/executor.d.ts +18 -0
  477. package/src/open-api/codegen/executor.js +56 -0
  478. package/src/open-api/codegen/executor.js.map +1 -0
  479. package/src/open-api/json-metadata/generator.d.ts +24 -0
  480. package/src/open-api/json-metadata/generator.js +37 -0
  481. package/src/open-api/json-metadata/generator.js.map +1 -0
  482. package/src/open-api/json-metadata/schema.d.js +6 -0
  483. package/src/open-api/json-metadata/schema.d.js.map +1 -0
  484. package/src/open-api/json-metadata/schema.d.ts +9 -0
  485. package/src/open-api/json-metadata/schema.json +20 -0
  486. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
  487. package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
  488. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +298 -74
  489. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +748 -103
  490. package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +230 -37
  491. package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +249 -52
  492. package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5535 -0
  493. package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
  494. package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +305 -71
  495. package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +298 -0
  496. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +353 -82
  497. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +176 -55
  498. package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +100 -24
  499. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
  500. package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
  501. package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
  502. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
  503. package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
  504. package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
  505. package/src/open-api/ts-client/generator.d.ts +1 -1
  506. package/src/open-api/ts-client/generator.js +41 -26
  507. package/src/open-api/ts-client/generator.js.map +1 -1
  508. package/src/open-api/ts-client/schema.d.js +6 -0
  509. package/src/open-api/ts-client/schema.d.js.map +1 -0
  510. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
  511. package/src/open-api/ts-hooks/generator.d.ts +1 -1
  512. package/src/open-api/ts-hooks/generator.js +17 -21
  513. package/src/open-api/ts-hooks/generator.js.map +1 -1
  514. package/src/open-api/ts-hooks/generator.spec.tsx +76 -6
  515. package/src/open-api/ts-hooks/schema.d.js +6 -0
  516. package/src/open-api/ts-hooks/schema.d.js.map +1 -0
  517. package/src/open-api/ts-metadata/generator.d.ts +1 -1
  518. package/src/open-api/ts-metadata/generator.js +12 -20
  519. package/src/open-api/ts-metadata/generator.js.map +1 -1
  520. package/src/open-api/ts-metadata/schema.d.js +6 -0
  521. package/src/open-api/ts-metadata/schema.d.js.map +1 -0
  522. package/src/open-api/utils/codegen-data/languages.d.ts +1 -7
  523. package/src/open-api/utils/codegen-data/languages.js +59 -66
  524. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  525. package/src/open-api/utils/codegen-data/types.d.ts +255 -10
  526. package/src/open-api/utils/codegen-data/types.js +54 -30
  527. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  528. package/src/open-api/utils/codegen-data.d.ts +4 -4
  529. package/src/open-api/utils/codegen-data.js +494 -674
  530. package/src/open-api/utils/codegen-data.js.map +1 -1
  531. package/src/open-api/utils/normalise.d.ts +1 -1
  532. package/src/open-api/utils/normalise.js +437 -246
  533. package/src/open-api/utils/normalise.js.map +1 -1
  534. package/src/open-api/utils/parse.d.ts +1 -1
  535. package/src/open-api/utils/parse.js +8 -14
  536. package/src/open-api/utils/parse.js.map +1 -1
  537. package/src/open-api/utils/parser.d.ts +55 -0
  538. package/src/open-api/utils/parser.js +787 -0
  539. package/src/open-api/utils/parser.js.map +1 -0
  540. package/src/open-api/utils/refs.d.ts +1 -1
  541. package/src/open-api/utils/refs.js +12 -22
  542. package/src/open-api/utils/refs.js.map +1 -1
  543. package/src/open-api/utils/types.d.ts +18 -0
  544. package/src/open-api/utils/types.js +5 -2
  545. package/src/open-api/utils/types.js.map +1 -1
  546. package/src/preset/__snapshots__/generator.spec.ts.snap +104 -21
  547. package/src/preset/generator.d.ts +15 -2
  548. package/src/preset/generator.js +76 -151
  549. package/src/preset/generator.js.map +1 -1
  550. package/src/preset/schema.d.js +6 -0
  551. package/src/preset/schema.d.js.map +1 -0
  552. package/src/preset/schema.d.ts +6 -3
  553. package/src/preset/schema.json +16 -5
  554. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +931 -0
  555. package/src/py/agent/__snapshots__/generator.core.spec.ts.snap +186 -0
  556. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +771 -0
  557. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1322 -0
  558. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +231 -0
  559. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +29 -0
  560. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +29 -0
  561. package/src/py/agent/a2a-connection/generator.d.ts +25 -1
  562. package/src/py/agent/a2a-connection/generator.js +146 -95
  563. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  564. package/src/py/agent/a2a-connection/schema.d.js +8 -0
  565. package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
  566. package/src/py/agent/a2a-connection/schema.d.ts +2 -1
  567. package/src/py/agent/a2a-connection/schema.json +5 -0
  568. package/src/py/agent/files/deploy/Dockerfile.template +15 -1
  569. package/src/py/agent/files/langchain/a2a/main.py.template +83 -0
  570. package/src/py/agent/files/langchain/ag-ui/main.py.template +76 -0
  571. package/src/py/agent/files/langchain/common/agent.py.template +30 -0
  572. package/src/py/agent/files/langchain/common/middleware/__init__.py.template +0 -0
  573. package/src/py/agent/files/langchain/common/middleware/session_id_middleware.py.template +17 -0
  574. package/src/py/agent/files/langchain/common/session.py.template +61 -0
  575. package/src/py/agent/files/{http → langchain/http}/init.py.template +17 -25
  576. package/src/py/agent/files/langchain/http/main.py.template +69 -0
  577. package/src/py/agent/files/strands/a2a/main.py.template +61 -0
  578. package/src/py/agent/files/strands/ag-ui/main.py.template +86 -0
  579. package/src/py/agent/files/strands/common/__init__.py.template +0 -0
  580. package/src/py/agent/files/{common → strands/common}/agent.py.template +13 -2
  581. package/src/py/agent/files/strands/common/middleware/__init__.py.template +0 -0
  582. package/src/py/agent/files/strands/common/middleware/session_id_middleware.py.template +17 -0
  583. package/src/py/agent/files/strands/common/session.py.template +36 -0
  584. package/src/py/agent/files/strands/http/init.py.template +97 -0
  585. package/src/py/agent/files/{http → strands/http}/main.py.template +5 -29
  586. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
  587. package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
  588. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  589. package/src/py/agent/gateway-connection/generator.d.ts +33 -0
  590. package/src/py/agent/gateway-connection/generator.js +153 -0
  591. package/src/py/agent/gateway-connection/generator.js.map +1 -0
  592. package/src/py/agent/gateway-connection/schema.d.js +6 -0
  593. package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
  594. package/src/py/agent/gateway-connection/schema.d.ts +13 -0
  595. package/src/py/agent/gateway-connection/schema.json +31 -0
  596. package/src/py/agent/generator.d.ts +165 -2
  597. package/src/py/agent/generator.js +445 -199
  598. package/src/py/agent/generator.js.map +1 -1
  599. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +155 -92
  600. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +31 -0
  601. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +31 -0
  602. package/src/py/agent/mcp-connection/generator.d.ts +24 -1
  603. package/src/py/agent/mcp-connection/generator.js +103 -130
  604. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  605. package/src/py/agent/mcp-connection/schema.d.js +8 -0
  606. package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
  607. package/src/py/agent/mcp-connection/schema.d.ts +2 -1
  608. package/src/py/agent/mcp-connection/schema.json +5 -0
  609. package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +17 -19
  610. package/src/py/agent/react-connection/generator.d.ts +152 -3
  611. package/src/py/agent/react-connection/generator.js +114 -65
  612. package/src/py/agent/react-connection/generator.js.map +1 -1
  613. package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +5 -5
  614. package/src/py/agent/react-connection/local-dev.js +36 -0
  615. package/src/py/agent/react-connection/local-dev.js.map +1 -0
  616. package/src/py/agent/react-connection/schema.d.js +8 -0
  617. package/src/py/agent/react-connection/schema.d.js.map +1 -0
  618. package/src/py/agent/react-connection/schema.d.ts +2 -1
  619. package/src/py/agent/react-connection/schema.json +5 -0
  620. package/src/py/agent/schema.d.js +6 -0
  621. package/src/py/agent/schema.d.js.map +1 -0
  622. package/src/py/agent/schema.d.ts +6 -2
  623. package/src/py/agent/schema.json +15 -1
  624. package/src/py/api/generator.d.ts +1 -1
  625. package/src/py/api/generator.js +12 -11
  626. package/src/py/api/generator.js.map +1 -1
  627. package/src/py/api/schema.d.js +6 -0
  628. package/src/py/api/schema.d.js.map +1 -0
  629. package/src/py/api/schema.d.ts +2 -1
  630. package/src/py/api/schema.json +5 -0
  631. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1592 -0
  632. package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +63 -0
  633. package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
  634. package/src/py/dynamodb/agent-connection/generator.js +45 -0
  635. package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
  636. package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
  637. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
  638. package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
  639. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  640. package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +32 -0
  641. package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
  642. package/src/py/dynamodb/fast-api-connection/generator.js +39 -0
  643. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
  644. package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
  645. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
  646. package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
  647. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  648. package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
  649. package/src/py/dynamodb/files/__name__/client.py.template +39 -0
  650. package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
  651. package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
  652. package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
  653. package/src/py/dynamodb/files/config.json.template +24 -0
  654. package/src/py/dynamodb/generator.d.ts +39 -0
  655. package/src/py/dynamodb/generator.js +130 -0
  656. package/src/py/dynamodb/generator.js.map +1 -0
  657. package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +63 -0
  658. package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
  659. package/src/py/dynamodb/mcp-server-connection/generator.js +45 -0
  660. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
  661. package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
  662. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  663. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
  664. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  665. package/src/py/dynamodb/schema.d.js +6 -0
  666. package/src/py/dynamodb/schema.d.js.map +1 -0
  667. package/src/py/dynamodb/schema.d.ts +16 -0
  668. package/src/py/dynamodb/schema.json +76 -0
  669. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +240 -4693
  670. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +6661 -0
  671. package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
  672. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  673. package/src/py/fast-api/generator.d.ts +73 -1
  674. package/src/py/fast-api/generator.js +126 -92
  675. package/src/py/fast-api/generator.js.map +1 -1
  676. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
  677. package/src/py/fast-api/react/generator.d.ts +17 -2
  678. package/src/py/fast-api/react/generator.js +38 -26
  679. package/src/py/fast-api/react/generator.js.map +1 -1
  680. package/src/py/fast-api/react/open-api.js +44 -33
  681. package/src/py/fast-api/react/open-api.js.map +1 -1
  682. package/src/py/fast-api/react/schema.d.js +6 -0
  683. package/src/py/fast-api/react/schema.d.js.map +1 -0
  684. package/src/py/fast-api/react/schema.d.ts +1 -0
  685. package/src/py/fast-api/react/schema.json +5 -0
  686. package/src/py/fast-api/schema.d.js +6 -0
  687. package/src/py/fast-api/schema.d.js.map +1 -0
  688. package/src/py/fast-api/schema.d.ts +2 -1
  689. package/src/py/fast-api/schema.json +6 -0
  690. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +12 -4
  691. package/src/py/lambda-function/files/handler/__lambdaFunctionSnakeCase__.py.template +1 -1
  692. package/src/py/lambda-function/generator.d.ts +28 -1
  693. package/src/py/lambda-function/generator.js +88 -61
  694. package/src/py/lambda-function/generator.js.map +1 -1
  695. package/src/py/lambda-function/schema.d.js +6 -0
  696. package/src/py/lambda-function/schema.d.js.map +1 -0
  697. package/src/py/lambda-function/schema.d.ts +3 -2
  698. package/src/py/lambda-function/schema.json +6 -1
  699. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +225 -21
  700. package/src/py/mcp-server/files/deploy/Dockerfile.template +15 -1
  701. package/src/py/mcp-server/generator.d.ts +69 -1
  702. package/src/py/mcp-server/generator.js +211 -137
  703. package/src/py/mcp-server/generator.js.map +1 -1
  704. package/src/py/mcp-server/schema.d.js +6 -0
  705. package/src/py/mcp-server/schema.d.js.map +1 -0
  706. package/src/py/mcp-server/schema.d.ts +2 -1
  707. package/src/py/mcp-server/schema.json +6 -0
  708. package/src/py/project/generator.d.ts +37 -2
  709. package/src/py/project/generator.js +246 -90
  710. package/src/py/project/generator.js.map +1 -1
  711. package/src/py/project/schema.d.js +6 -0
  712. package/src/py/project/schema.d.js.map +1 -0
  713. package/src/py/project/schema.d.ts +1 -0
  714. package/src/py/project/schema.json +6 -0
  715. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2113 -0
  716. package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +123 -0
  717. package/src/py/rdb/agent-connection/generator.d.ts +10 -0
  718. package/src/py/rdb/agent-connection/generator.js +52 -0
  719. package/src/py/rdb/agent-connection/generator.js.map +1 -0
  720. package/src/py/rdb/agent-connection/schema.d.js +8 -0
  721. package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
  722. package/src/py/rdb/agent-connection/schema.d.ts +15 -0
  723. package/src/py/rdb/agent-connection/schema.json +27 -0
  724. package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +51 -0
  725. package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
  726. package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
  727. package/src/py/rdb/fast-api-connection/generator.js +56 -0
  728. package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
  729. package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
  730. package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
  731. package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
  732. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  733. package/src/py/rdb/files/Dockerfile.create-db-user.template +14 -0
  734. package/src/py/rdb/files/Dockerfile.migration.template +14 -0
  735. package/src/py/rdb/files/__name__/connection.py.template +55 -0
  736. package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
  737. package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
  738. package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
  739. package/src/py/rdb/files/__name__/models/example.py.template +8 -0
  740. package/src/py/rdb/files/__name__/utils.py.template +120 -0
  741. package/src/py/rdb/files/alembic.ini.template +38 -0
  742. package/src/py/rdb/files/migrations/env.py.template +80 -0
  743. package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
  744. package/src/py/rdb/generator.d.ts +103 -0
  745. package/src/py/rdb/generator.js +368 -0
  746. package/src/py/rdb/generator.js.map +1 -0
  747. package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +119 -0
  748. package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
  749. package/src/py/rdb/mcp-server-connection/generator.js +52 -0
  750. package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
  751. package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
  752. package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
  753. package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
  754. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  755. package/src/py/rdb/schema.d.js +6 -0
  756. package/src/py/rdb/schema.d.js.map +1 -0
  757. package/src/py/rdb/schema.d.ts +16 -0
  758. package/src/py/rdb/schema.json +78 -0
  759. package/src/py/rdb/utils.d.ts +6 -0
  760. package/src/py/rdb/utils.js +16 -0
  761. package/src/py/rdb/utils.js.map +1 -0
  762. package/src/sdk/agentcore-gateway.d.ts +6 -0
  763. package/src/sdk/agentcore-gateway.js +7 -0
  764. package/src/sdk/agentcore-gateway.js.map +1 -0
  765. package/src/sdk/agentcore-harness.d.ts +6 -0
  766. package/src/sdk/agentcore-harness.js +7 -0
  767. package/src/sdk/agentcore-harness.js.map +1 -0
  768. package/src/sdk/connection.d.ts +6 -0
  769. package/src/sdk/connection.js +6 -0
  770. package/src/sdk/connection.js.map +1 -0
  771. package/src/sdk/license.d.ts +8 -0
  772. package/src/sdk/license.js +7 -0
  773. package/src/sdk/license.js.map +1 -0
  774. package/src/sdk/open-api.d.ts +12 -0
  775. package/src/sdk/open-api.js +9 -0
  776. package/src/sdk/open-api.js.map +1 -0
  777. package/src/sdk/py.d.ts +18 -0
  778. package/src/sdk/py.js +12 -0
  779. package/src/sdk/py.js.map +1 -0
  780. package/src/sdk/smithy.d.ts +6 -0
  781. package/src/sdk/smithy.js +7 -0
  782. package/src/sdk/smithy.js.map +1 -0
  783. package/src/sdk/terraform.d.ts +6 -0
  784. package/src/sdk/terraform.js +7 -0
  785. package/src/sdk/terraform.js.map +1 -0
  786. package/src/sdk/ts.d.ts +39 -0
  787. package/src/sdk/ts.js +41 -0
  788. package/src/sdk/ts.js.map +1 -0
  789. package/{sdk/utils/format.d.ts → src/sdk/utils/ast.d.ts} +1 -1
  790. package/src/sdk/utils/ast.js +6 -0
  791. package/src/sdk/utils/ast.js.map +1 -0
  792. package/src/sdk/utils/format.d.ts +5 -0
  793. package/src/sdk/utils/format.js +6 -0
  794. package/src/sdk/utils/format.js.map +1 -0
  795. package/{sdk → src/sdk}/utils/test.d.ts +1 -1
  796. package/src/sdk/utils/test.js +6 -0
  797. package/src/sdk/utils/test.js.map +1 -0
  798. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +244 -226
  799. package/src/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +5 -5
  800. package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
  801. package/src/smithy/project/files/shapes/smithy-build.json.template +7 -0
  802. package/src/smithy/project/files/shapes/src/main.smithy.template +11 -0
  803. package/src/smithy/project/files/ssdk-bundle/ssdk.rolldown.config.mjs.template +52 -0
  804. package/src/smithy/project/generator.d.ts +91 -1
  805. package/src/smithy/project/generator.js +220 -45
  806. package/src/smithy/project/generator.js.map +1 -1
  807. package/src/smithy/project/schema.d.js +6 -0
  808. package/src/smithy/project/schema.d.js.map +1 -0
  809. package/src/smithy/project/schema.d.ts +2 -0
  810. package/src/smithy/project/schema.json +28 -1
  811. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
  812. package/src/smithy/react-connection/generator.d.ts +16 -1
  813. package/src/smithy/react-connection/generator.js +54 -48
  814. package/src/smithy/react-connection/generator.js.map +1 -1
  815. package/src/smithy/react-connection/schema.d.js +6 -0
  816. package/src/smithy/react-connection/schema.d.js.map +1 -0
  817. package/src/smithy/react-connection/schema.d.ts +1 -0
  818. package/src/smithy/react-connection/schema.json +5 -0
  819. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +2618 -550
  820. package/src/smithy/ts/api/files/handler.ts.template +3 -3
  821. package/src/smithy/ts/api/files/local-server.ts.template +3 -3
  822. package/src/smithy/ts/api/files/operations/echo.ts.template +2 -2
  823. package/src/smithy/ts/api/files/service.ts.template +3 -3
  824. package/src/smithy/ts/api/generator.d.ts +89 -1
  825. package/src/smithy/ts/api/generator.js +185 -119
  826. package/src/smithy/ts/api/generator.js.map +1 -1
  827. package/src/smithy/ts/api/schema.d.js +6 -0
  828. package/src/smithy/ts/api/schema.d.js.map +1 -0
  829. package/src/smithy/ts/api/schema.d.ts +2 -1
  830. package/src/smithy/ts/api/schema.json +6 -0
  831. package/src/terraform/project/files/application/bootstrap/providers.tf.template +11 -0
  832. package/src/terraform/project/files/application/scripts/bootstrap-destroy.ts.template +111 -0
  833. package/src/terraform/project/files/application/scripts/bootstrap.ts.template +40 -1
  834. package/src/terraform/project/files/application/scripts/env.ts.template +11 -0
  835. package/src/terraform/project/files/application/scripts/init.ts.template +2 -1
  836. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  837. package/src/terraform/project/files/application/src/providers.tf.template +9 -3
  838. package/src/terraform/project/files/checkov/checkov.yml.template +8 -0
  839. package/src/terraform/project/files/library/src/main.tf.template +9 -0
  840. package/src/terraform/project/generator.d.ts +62 -2
  841. package/src/terraform/project/generator.js +340 -117
  842. package/src/terraform/project/generator.js.map +1 -1
  843. package/src/terraform/project/schema.d.js +9 -0
  844. package/src/terraform/project/schema.d.js.map +1 -0
  845. package/src/terraform/project/schema.d.ts +1 -0
  846. package/src/terraform/project/schema.json +5 -0
  847. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +2957 -725
  848. package/src/trpc/backend/files/src/client/index.ts.template +1 -1
  849. package/src/trpc/backend/files/src/handler.ts.template +1 -1
  850. package/src/trpc/backend/files/src/index.ts.template +5 -5
  851. package/src/trpc/backend/files/src/init.ts.template +1 -1
  852. package/src/trpc/backend/files/src/local-server.ts.template +1 -1
  853. package/src/trpc/backend/files/src/middleware/index.ts.template +7 -7
  854. package/src/trpc/backend/files/src/procedures/echo.ts.template +3 -3
  855. package/src/trpc/backend/files/src/router.ts.template +2 -2
  856. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  857. package/src/trpc/backend/files/src/schema/index.ts.template +1 -1
  858. package/src/trpc/backend/files-operations/scripts/generate-operations.ts.template +40 -0
  859. package/src/trpc/backend/generator.d.ts +91 -2
  860. package/src/trpc/backend/generator.js +186 -100
  861. package/src/trpc/backend/generator.js.map +1 -1
  862. package/src/trpc/backend/schema.d.js +6 -0
  863. package/src/trpc/backend/schema.d.js.map +1 -0
  864. package/src/trpc/backend/schema.d.ts +2 -1
  865. package/src/trpc/backend/schema.json +6 -0
  866. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
  867. package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
  868. package/src/trpc/react/generator.d.ts +39 -2
  869. package/src/trpc/react/generator.js +105 -63
  870. package/src/trpc/react/generator.js.map +1 -1
  871. package/src/trpc/react/schema.d.js +6 -0
  872. package/src/trpc/react/schema.d.js.map +1 -0
  873. package/src/trpc/react/schema.d.ts +1 -0
  874. package/src/trpc/react/schema.json +5 -0
  875. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1490 -31
  876. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +258 -0
  877. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
  878. package/src/ts/agent/a2a-connection/generator.d.ts +47 -1
  879. package/src/ts/agent/a2a-connection/generator.js +112 -63
  880. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  881. package/src/ts/agent/a2a-connection/schema.d.js +8 -0
  882. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
  883. package/src/ts/agent/a2a-connection/schema.d.ts +2 -1
  884. package/src/ts/agent/a2a-connection/schema.json +5 -0
  885. package/src/ts/agent/files/a2a/index.ts.template +5 -12
  886. package/src/ts/agent/files/ag-ui/index.ts.template +29 -14
  887. package/src/ts/agent/files/common/agent.ts.template +11 -2
  888. package/src/ts/agent/files/common/session.ts.template +43 -0
  889. package/src/ts/agent/files/common-express/middleware/session-id-middleware.ts.template +16 -0
  890. package/src/ts/agent/files/deploy/Dockerfile.template +20 -2
  891. package/src/ts/agent/files/http/client.ts.template +2 -2
  892. package/src/ts/agent/files/http/index.ts.template +2 -2
  893. package/src/ts/agent/files/http/router.ts.template +5 -5
  894. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +222 -0
  895. package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
  896. package/src/ts/agent/gateway-connection/generator.d.ts +47 -0
  897. package/src/ts/agent/gateway-connection/generator.js +144 -0
  898. package/src/ts/agent/gateway-connection/generator.js.map +1 -0
  899. package/src/ts/agent/gateway-connection/schema.d.js +6 -0
  900. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
  901. package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
  902. package/src/ts/agent/gateway-connection/schema.json +31 -0
  903. package/src/ts/agent/generator.d.ts +206 -1
  904. package/src/ts/agent/generator.js +342 -159
  905. package/src/ts/agent/generator.js.map +1 -1
  906. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +194 -114
  907. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +23 -0
  908. package/src/ts/agent/mcp-connection/generator.d.ts +38 -1
  909. package/src/ts/agent/mcp-connection/generator.js +88 -65
  910. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  911. package/src/ts/agent/mcp-connection/schema.d.js +8 -0
  912. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
  913. package/src/ts/agent/mcp-connection/schema.d.ts +2 -1
  914. package/src/ts/agent/mcp-connection/schema.json +5 -0
  915. package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
  916. package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
  917. package/src/ts/agent/react-connection/generator.d.ts +204 -3
  918. package/src/ts/agent/react-connection/generator.js +158 -99
  919. package/src/ts/agent/react-connection/generator.js.map +1 -1
  920. package/src/ts/agent/react-connection/local-dev.d.ts +13 -0
  921. package/src/ts/agent/react-connection/local-dev.js +17 -0
  922. package/src/ts/agent/react-connection/local-dev.js.map +1 -0
  923. package/src/ts/agent/react-connection/schema.d.js +8 -0
  924. package/src/ts/agent/react-connection/schema.d.js.map +1 -0
  925. package/src/ts/agent/react-connection/schema.d.ts +2 -1
  926. package/src/ts/agent/react-connection/schema.json +5 -0
  927. package/src/ts/agent/schema.d.js +6 -0
  928. package/src/ts/agent/schema.d.js.map +1 -0
  929. package/src/ts/agent/schema.d.ts +5 -1
  930. package/src/ts/agent/schema.json +14 -0
  931. package/src/ts/api/generator.d.ts +1 -1
  932. package/src/ts/api/generator.js +16 -16
  933. package/src/ts/api/generator.js.map +1 -1
  934. package/src/ts/api/schema.d.js +6 -0
  935. package/src/ts/api/schema.d.js.map +1 -0
  936. package/src/ts/api/schema.d.ts +2 -1
  937. package/src/ts/api/schema.json +5 -0
  938. package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +22 -8
  939. package/src/ts/astro-docs/files/base/src/content/docs/en/index.mdx.template +2 -2
  940. package/src/ts/astro-docs/files/base/src/content.config.ts.template +4 -4
  941. package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +272 -150
  942. package/src/ts/astro-docs/generator.d.ts +41 -1
  943. package/src/ts/astro-docs/generator.js +133 -59
  944. package/src/ts/astro-docs/generator.js.map +1 -1
  945. package/src/ts/astro-docs/schema.d.js +6 -0
  946. package/src/ts/astro-docs/schema.d.js.map +1 -0
  947. package/src/ts/astro-docs/schema.d.ts +2 -2
  948. package/src/ts/astro-docs/schema.json +3 -3
  949. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +986 -0
  950. package/src/ts/dcr-proxy/generator.d.ts +34 -0
  951. package/src/ts/dcr-proxy/generator.js +115 -0
  952. package/src/ts/dcr-proxy/generator.js.map +1 -0
  953. package/src/ts/dcr-proxy/schema.d.js +6 -0
  954. package/src/ts/dcr-proxy/schema.d.js.map +1 -0
  955. package/src/ts/dcr-proxy/schema.d.ts +13 -0
  956. package/src/ts/dcr-proxy/schema.json +44 -0
  957. package/src/ts/docs/generator.d.ts +1 -1
  958. package/src/ts/docs/generator.js +10 -10
  959. package/src/ts/docs/generator.js.map +1 -1
  960. package/src/ts/docs/schema.d.js +6 -0
  961. package/src/ts/docs/schema.d.js.map +1 -0
  962. package/src/ts/docs/schema.d.ts +1 -4
  963. package/src/ts/docs/schema.json +3 -3
  964. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +481 -527
  965. package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
  966. package/src/ts/dynamodb/agent-connection/generator.d.ts +1 -1
  967. package/src/ts/dynamodb/agent-connection/generator.js +27 -23
  968. package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
  969. package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
  970. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
  971. package/src/ts/dynamodb/agent-connection/schema.d.ts +2 -1
  972. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  973. package/src/ts/dynamodb/files/config.json.template +24 -0
  974. package/src/ts/dynamodb/files/src/client.ts.template +30 -11
  975. package/src/ts/dynamodb/files/src/entities/example.ts.template +1 -1
  976. package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -1
  977. package/src/ts/dynamodb/files/src/index.ts.template +2 -11
  978. package/src/ts/dynamodb/generator.d.ts +42 -1
  979. package/src/ts/dynamodb/generator.js +110 -64
  980. package/src/ts/dynamodb/generator.js.map +1 -1
  981. package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +23 -5
  982. package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +1 -1
  983. package/src/ts/dynamodb/mcp-server-connection/generator.js +27 -23
  984. package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
  985. package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
  986. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
  987. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +2 -1
  988. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  989. package/src/ts/dynamodb/schema.d.js +6 -0
  990. package/src/ts/dynamodb/schema.d.js.map +1 -0
  991. package/src/ts/dynamodb/schema.d.ts +3 -1
  992. package/src/ts/dynamodb/schema.json +26 -2
  993. package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
  994. package/src/ts/dynamodb/smithy-connection/generator.d.ts +1 -1
  995. package/src/ts/dynamodb/smithy-connection/generator.js +22 -22
  996. package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
  997. package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
  998. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
  999. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  1000. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  1001. package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  1002. package/src/ts/dynamodb/trpc-connection/generator.d.ts +1 -1
  1003. package/src/ts/dynamodb/trpc-connection/generator.js +22 -22
  1004. package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
  1005. package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
  1006. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
  1007. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  1008. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  1009. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +19 -9
  1010. package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
  1011. package/src/ts/lambda-function/generator.d.ts +39 -1
  1012. package/src/ts/lambda-function/generator.js +98 -65
  1013. package/src/ts/lambda-function/generator.js.map +1 -1
  1014. package/src/ts/lambda-function/io.js +83 -52
  1015. package/src/ts/lambda-function/io.js.map +1 -1
  1016. package/src/ts/lambda-function/schema.d.js +6 -0
  1017. package/src/ts/lambda-function/schema.d.js.map +1 -0
  1018. package/src/ts/lambda-function/schema.d.ts +2 -1
  1019. package/src/ts/lambda-function/schema.json +5 -0
  1020. package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -36
  1021. package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +2 -2
  1022. package/src/ts/lib/biome.d.ts +1 -1
  1023. package/src/ts/lib/biome.js +71 -38
  1024. package/src/ts/lib/biome.js.map +1 -1
  1025. package/src/ts/lib/generator.d.ts +24 -1
  1026. package/src/ts/lib/generator.js +128 -94
  1027. package/src/ts/lib/generator.js.map +1 -1
  1028. package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
  1029. package/src/ts/lib/schema.d.js +6 -0
  1030. package/src/ts/lib/schema.d.js.map +1 -0
  1031. package/src/ts/lib/schema.d.ts +1 -1
  1032. package/src/ts/lib/schema.json +5 -0
  1033. package/src/ts/lib/ts-project-utils.d.ts +4 -2
  1034. package/src/ts/lib/ts-project-utils.js +85 -74
  1035. package/src/ts/lib/ts-project-utils.js.map +1 -1
  1036. package/src/ts/lib/types.d.ts +6 -0
  1037. package/src/ts/lib/types.js +5 -2
  1038. package/src/ts/lib/types.js.map +1 -1
  1039. package/src/ts/lib/vitest.d.ts +22 -2
  1040. package/src/ts/lib/vitest.js +83 -26
  1041. package/src/ts/lib/vitest.js.map +1 -1
  1042. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +225 -44
  1043. package/src/ts/mcp-server/files/Dockerfile.template +20 -2
  1044. package/src/ts/mcp-server/generator.d.ts +111 -1
  1045. package/src/ts/mcp-server/generator.js +234 -168
  1046. package/src/ts/mcp-server/generator.js.map +1 -1
  1047. package/src/ts/mcp-server/schema.d.js +6 -0
  1048. package/src/ts/mcp-server/schema.d.js.map +1 -0
  1049. package/src/ts/mcp-server/schema.d.ts +2 -1
  1050. package/src/ts/mcp-server/schema.json +6 -0
  1051. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +28 -13
  1052. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  1053. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  1054. package/src/ts/nx-generator/files/local/generator.spec.ts.template +1 -1
  1055. package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
  1056. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
  1057. package/src/ts/nx-generator/generator.d.ts +3 -0
  1058. package/src/ts/nx-generator/generator.js +122 -75
  1059. package/src/ts/nx-generator/generator.js.map +1 -1
  1060. package/src/ts/nx-generator/schema.d.js +6 -0
  1061. package/src/ts/nx-generator/schema.d.js.map +1 -0
  1062. package/src/ts/nx-generator/schema.d.ts +1 -0
  1063. package/src/ts/nx-generator/schema.json +5 -0
  1064. package/src/ts/nx-migration/files/migration.spec.ts.template +26 -0
  1065. package/src/ts/nx-migration/files/migration.ts.template +65 -0
  1066. package/src/ts/nx-migration/files/prompt.md.template +46 -0
  1067. package/src/ts/nx-migration/generator.d.ts +27 -0
  1068. package/src/ts/nx-migration/generator.js +147 -0
  1069. package/src/ts/nx-migration/generator.js.map +1 -0
  1070. package/src/ts/nx-migration/schema.d.js +6 -0
  1071. package/src/ts/nx-migration/schema.d.js.map +1 -0
  1072. package/src/ts/nx-migration/schema.d.ts +13 -0
  1073. package/src/ts/nx-migration/schema.json +63 -0
  1074. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +36 -25
  1075. package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
  1076. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
  1077. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
  1078. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
  1079. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
  1080. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
  1081. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +4 -4
  1082. package/src/ts/nx-plugin/generator.d.ts +4 -1
  1083. package/src/ts/nx-plugin/generator.js +64 -48
  1084. package/src/ts/nx-plugin/generator.js.map +1 -1
  1085. package/src/ts/nx-plugin/schema.d.js +9 -0
  1086. package/src/ts/nx-plugin/schema.d.js.map +1 -0
  1087. package/src/ts/nx-plugin/schema.json +5 -0
  1088. package/src/ts/nx-plugin/utils.d.ts +27 -2
  1089. package/src/ts/nx-plugin/utils.js +66 -57
  1090. package/src/ts/nx-plugin/utils.js.map +1 -1
  1091. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +711 -877
  1092. package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
  1093. package/src/ts/rdb/agent-connection/generator.d.ts +1 -1
  1094. package/src/ts/rdb/agent-connection/generator.js +44 -39
  1095. package/src/ts/rdb/agent-connection/generator.js.map +1 -1
  1096. package/src/ts/rdb/agent-connection/schema.d.js +8 -0
  1097. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
  1098. package/src/ts/rdb/agent-connection/schema.d.ts +2 -1
  1099. package/src/ts/rdb/agent-connection/schema.json +5 -0
  1100. package/src/ts/rdb/files/Dockerfile.template +19 -1
  1101. package/src/ts/rdb/files/prisma.config.ts.template +6 -5
  1102. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +9 -11
  1103. package/src/ts/rdb/files/src/migration-handler.ts.template +5 -30
  1104. package/src/ts/rdb/files/src/prisma.ts.template +33 -25
  1105. package/src/ts/rdb/files/src/utils.ts.template +31 -1
  1106. package/src/ts/rdb/generator.d.ts +118 -5
  1107. package/src/ts/rdb/generator.js +272 -127
  1108. package/src/ts/rdb/generator.js.map +1 -1
  1109. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +16 -6
  1110. package/src/ts/rdb/mcp-server-connection/generator.d.ts +1 -1
  1111. package/src/ts/rdb/mcp-server-connection/generator.js +42 -37
  1112. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
  1113. package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
  1114. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
  1115. package/src/ts/rdb/mcp-server-connection/schema.d.ts +2 -1
  1116. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  1117. package/src/ts/rdb/schema.d.js +6 -0
  1118. package/src/ts/rdb/schema.d.js.map +1 -0
  1119. package/src/ts/rdb/schema.d.ts +2 -1
  1120. package/src/ts/rdb/schema.json +7 -1
  1121. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +18 -9
  1122. package/src/ts/rdb/smithy-connection/generator.d.ts +1 -1
  1123. package/src/ts/rdb/smithy-connection/generator.js +48 -43
  1124. package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
  1125. package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
  1126. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
  1127. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  1128. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  1129. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
  1130. package/src/ts/rdb/trpc-connection/generator.d.ts +1 -1
  1131. package/src/ts/rdb/trpc-connection/generator.js +37 -31
  1132. package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
  1133. package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
  1134. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
  1135. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  1136. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  1137. package/src/ts/rdb/utils.js +9 -11
  1138. package/src/ts/rdb/utils.js.map +1 -1
  1139. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +17 -16
  1140. package/src/ts/react-website/agui/generator.d.ts +97 -0
  1141. package/src/ts/react-website/agui/generator.js +114 -67
  1142. package/src/ts/react-website/agui/generator.js.map +1 -1
  1143. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +1705 -717
  1144. package/src/ts/react-website/app/files/app/common/README.md.template +1 -1
  1145. package/src/ts/react-website/app/generator.d.ts +146 -3
  1146. package/src/ts/react-website/app/generator.js +363 -209
  1147. package/src/ts/react-website/app/generator.js.map +1 -1
  1148. package/src/ts/react-website/app/schema.d.js +6 -0
  1149. package/src/ts/react-website/app/schema.d.js.map +1 -0
  1150. package/src/ts/react-website/app/schema.d.ts +3 -3
  1151. package/src/ts/react-website/app/schema.json +12 -6
  1152. package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +225 -31
  1153. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +78 -12
  1154. package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
  1155. package/src/ts/react-website/cognito-auth/generator.d.ts +26 -2
  1156. package/src/ts/react-website/cognito-auth/generator.js +79 -61
  1157. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  1158. package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
  1159. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
  1160. package/src/ts/react-website/cognito-auth/schema.d.ts +2 -1
  1161. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  1162. package/src/ts/react-website/cognito-auth/utils.js +34 -32
  1163. package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
  1164. package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
  1165. package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
  1166. package/src/ts/react-website/runtime-config/generator.d.ts +1 -1
  1167. package/src/ts/react-website/runtime-config/generator.js +29 -31
  1168. package/src/ts/react-website/runtime-config/generator.js.map +1 -1
  1169. package/src/ts/react-website/runtime-config/schema.d.js +6 -0
  1170. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
  1171. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  1172. package/src/ts/react-website/runtime-config/schema.json +5 -0
  1173. package/src/ts/sync/generator.d.ts +1 -1
  1174. package/src/ts/sync/generator.js +154 -60
  1175. package/src/ts/sync/generator.js.map +1 -1
  1176. package/src/ts/website/app/generator.d.ts +1 -1
  1177. package/src/ts/website/app/generator.js +10 -10
  1178. package/src/ts/website/app/generator.js.map +1 -1
  1179. package/src/ts/website/app/schema.d.js +6 -0
  1180. package/src/ts/website/app/schema.d.js.map +1 -0
  1181. package/src/ts/website/app/schema.d.ts +3 -3
  1182. package/src/ts/website/app/schema.json +11 -6
  1183. package/src/ts/website/auth/generator.d.ts +2 -2
  1184. package/src/ts/website/auth/generator.js +11 -10
  1185. package/src/ts/website/auth/generator.js.map +1 -1
  1186. package/src/ts/website/auth/schema.d.js +6 -0
  1187. package/src/ts/website/auth/schema.d.js.map +1 -0
  1188. package/src/ts/website/auth/schema.d.ts +2 -1
  1189. package/src/ts/website/auth/schema.json +5 -0
  1190. package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +21 -0
  1191. package/src/utils/add-dependencies.d.ts +38 -0
  1192. package/src/utils/add-dependencies.js +83 -0
  1193. package/src/utils/add-dependencies.js.map +1 -0
  1194. package/src/utils/agent-chat/agent-chat.d.ts +31 -0
  1195. package/src/utils/agent-chat/agent-chat.js +31 -0
  1196. package/src/utils/agent-chat/agent-chat.js.map +1 -0
  1197. package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
  1198. package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
  1199. package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
  1200. package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
  1201. package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
  1202. package/src/utils/agent-connection/agent-connection.d.ts +149 -26
  1203. package/src/utils/agent-connection/agent-connection.js +510 -108
  1204. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  1205. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  1206. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  1207. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  1208. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  1209. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  1210. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +35 -33
  1211. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  1212. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  1213. package/src/utils/agent-connection/files/{core-runtime-config/model-errors.ts.template → core-strands/base/model-errors-strands.ts.template} +26 -15
  1214. package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +29 -0
  1215. 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
  1216. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  1217. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  1218. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  1219. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  1220. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  1221. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  1222. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +105 -0
  1223. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  1224. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  1225. package/src/utils/agent-connection/files/py-core-langchain/s3/s3_checkpoint_saver_langchain.py.template +360 -0
  1226. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  1227. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +4 -18
  1228. package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +2 -2
  1229. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  1230. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +111 -0
  1231. package/src/utils/agent-connection/files/py-core-strands/base/tool_errors_strands.py.template +24 -0
  1232. 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
  1233. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  1234. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  1235. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +88 -2
  1236. package/src/utils/agent-core-constructs/agent-core-constructs.js +227 -30
  1237. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  1238. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +273 -9
  1239. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +87 -0
  1240. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +404 -0
  1241. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +624 -0
  1242. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
  1243. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +288 -1
  1244. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +576 -0
  1245. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
  1246. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +516 -0
  1247. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +163 -13
  1248. package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
  1249. package/src/utils/api-constructs/api-constructs.d.ts +31 -3
  1250. package/src/utils/api-constructs/api-constructs.js +96 -32
  1251. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  1252. package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +24 -19
  1253. package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +28 -20
  1254. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +26 -9
  1255. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +70 -0
  1256. package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
  1257. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +56 -17
  1258. package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
  1259. package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
  1260. package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +356 -19
  1261. package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +635 -14
  1262. package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
  1263. package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
  1264. package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +65 -18
  1265. package/src/utils/api-constructs/open-api-metadata.d.ts +21 -4
  1266. package/src/utils/api-constructs/open-api-metadata.js +74 -39
  1267. package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
  1268. package/src/utils/api-constructs/trpc-operations-metadata.d.ts +21 -0
  1269. package/src/utils/api-constructs/trpc-operations-metadata.js +61 -0
  1270. package/src/utils/api-constructs/trpc-operations-metadata.js.map +1 -0
  1271. package/src/utils/ast/website.js +17 -19
  1272. package/src/utils/ast/website.js.map +1 -1
  1273. package/src/utils/ast.d.ts +47 -0
  1274. package/src/utils/ast.js +185 -96
  1275. package/src/utils/ast.js.map +1 -1
  1276. package/src/utils/base-tsconfig.d.ts +30 -0
  1277. package/src/utils/base-tsconfig.js +32 -0
  1278. package/src/utils/base-tsconfig.js.map +1 -0
  1279. package/src/utils/bundle/bundle.d.ts +6 -1
  1280. package/src/utils/bundle/bundle.js +70 -48
  1281. package/src/utils/bundle/bundle.js.map +1 -1
  1282. package/src/utils/commands.d.ts +14 -3
  1283. package/src/utils/commands.js +83 -28
  1284. package/src/utils/commands.js.map +1 -1
  1285. package/src/utils/config/index.d.ts +22 -6
  1286. package/src/utils/config/index.js +5 -4
  1287. package/src/utils/config/index.js.map +1 -1
  1288. package/src/utils/config/utils.d.ts +9 -3
  1289. package/src/utils/config/utils.js +56 -59
  1290. package/src/utils/config/utils.js.map +1 -1
  1291. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +16 -3
  1292. package/src/utils/connection/open-api/react.d.ts +31 -5
  1293. package/src/utils/connection/open-api/react.js +106 -86
  1294. package/src/utils/connection/open-api/react.js.map +1 -1
  1295. package/src/utils/containers.js +22 -23
  1296. package/src/utils/containers.js.map +1 -1
  1297. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +38 -0
  1298. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +95 -0
  1299. package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -0
  1300. package/src/utils/dcr-proxy-constructs/files/cdk/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.ts.template +227 -0
  1301. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorization-server-metadata.ts.template +39 -0
  1302. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorize.ts.template +26 -0
  1303. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/mcp-proxy.ts.template +89 -0
  1304. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/protected-resource-metadata.ts.template +13 -0
  1305. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/register.ts.template +70 -0
  1306. package/src/utils/dcr-proxy-constructs/files/project/src/handlers/token.ts.template +75 -0
  1307. package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +414 -0
  1308. package/src/utils/declared-dependencies.d.ts +140 -0
  1309. package/src/utils/declared-dependencies.js +64 -0
  1310. package/src/utils/declared-dependencies.js.map +1 -0
  1311. package/src/utils/dependencies.d.ts +18 -0
  1312. package/src/utils/dependencies.js +206 -0
  1313. package/src/utils/dependencies.js.map +1 -0
  1314. package/src/utils/docker.d.ts +101 -0
  1315. package/src/utils/docker.js +135 -0
  1316. package/src/utils/docker.js.map +1 -0
  1317. package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +2 -2
  1318. package/src/utils/dynamodb-constructs/dynamodb-constructs.js +39 -33
  1319. package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
  1320. package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +18 -5
  1321. package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +24 -4
  1322. package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +66 -18
  1323. package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +46 -6
  1324. package/src/utils/files/common/constructs/src/core/cloudfront.ts.template +14 -0
  1325. package/src/utils/files/common/constructs/src/core/index.ts.template +5 -4
  1326. package/src/utils/files/common/constructs/src/index.ts.template +2 -2
  1327. package/src/utils/files/common/infra-config/src/index.ts.template +3 -3
  1328. package/src/utils/files/common/infra-config/src/resolve-stage.ts.template +2 -2
  1329. package/src/utils/files/common/infra-config/src/stages.config.ts.template +1 -1
  1330. package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/create-local-table.ts.template +65 -31
  1331. package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
  1332. package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/start-container.ts.template +29 -22
  1333. package/src/utils/files/common/scripts/src/infra/infra-deploy.ts.template +2 -0
  1334. package/src/utils/files/common/scripts/src/infra/infra-destroy.ts.template +2 -0
  1335. package/src/utils/files/common/scripts/src/infra/stage-credentials/cdk-command.ts.template +25 -0
  1336. package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +3 -3
  1337. package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
  1338. package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
  1339. package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
  1340. package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +100 -0
  1341. package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
  1342. package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
  1343. package/src/utils/files/shadcn/components.json.template +1 -1
  1344. package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +63 -72
  1345. package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +3 -3
  1346. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +13 -7
  1347. package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
  1348. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
  1349. package/src/utils/files/terraform/src/metrics/providers.tf.template +12 -0
  1350. package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
  1351. package/src/utils/format.d.ts +44 -4
  1352. package/src/utils/format.js +323 -198
  1353. package/src/utils/format.js.map +1 -1
  1354. package/src/utils/fs.d.ts +24 -5
  1355. package/src/utils/fs.js +40 -15
  1356. package/src/utils/fs.js.map +1 -1
  1357. package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
  1358. package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +6 -2
  1359. package/src/utils/function-constructs/function-constructs.d.ts +1 -1
  1360. package/src/utils/function-constructs/function-constructs.js +24 -27
  1361. package/src/utils/function-constructs/function-constructs.js.map +1 -1
  1362. package/src/utils/generators.d.ts +33 -0
  1363. package/src/utils/generators.js +33 -20
  1364. package/src/utils/generators.js.map +1 -1
  1365. package/src/utils/git.js +19 -34
  1366. package/src/utils/git.js.map +1 -1
  1367. package/src/utils/iac-providers.js +5 -5
  1368. package/src/utils/iac-providers.js.map +1 -1
  1369. package/src/utils/iac.d.ts +2 -2
  1370. package/src/utils/iac.js +12 -14
  1371. package/src/utils/iac.js.map +1 -1
  1372. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +218 -30
  1373. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +32 -9
  1374. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +226 -25
  1375. package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +33 -0
  1376. package/src/utils/identity-constructs/identity-constructs.d.ts +11 -1
  1377. package/src/utils/identity-constructs/identity-constructs.js +52 -31
  1378. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  1379. package/src/utils/init.d.ts +73 -0
  1380. package/src/utils/init.js +300 -0
  1381. package/src/utils/init.js.map +1 -0
  1382. package/src/utils/install.d.ts +32 -0
  1383. package/src/utils/install.js +58 -0
  1384. package/src/utils/install.js.map +1 -0
  1385. package/src/utils/js.js +27 -20
  1386. package/src/utils/js.js.map +1 -1
  1387. package/src/utils/lambda-runtime-resolution.d.ts +53 -0
  1388. package/src/utils/lambda-runtime-resolution.js +83 -0
  1389. package/src/utils/lambda-runtime-resolution.js.map +1 -0
  1390. package/src/utils/mcp.d.ts +9 -0
  1391. package/src/utils/mcp.js +42 -41
  1392. package/src/utils/mcp.js.map +1 -1
  1393. package/src/utils/metrics.d.ts +1 -1
  1394. package/src/utils/metrics.js +30 -45
  1395. package/src/utils/metrics.js.map +1 -1
  1396. package/src/utils/migration-manifest.d.ts +58 -0
  1397. package/src/utils/migration-manifest.js +76 -0
  1398. package/src/utils/migration-manifest.js.map +1 -0
  1399. package/src/utils/migration-versions.d.ts +145 -0
  1400. package/src/utils/migration-versions.js +250 -0
  1401. package/src/utils/migration-versions.js.map +1 -0
  1402. package/src/utils/mock-project-graph.js +12 -13
  1403. package/src/utils/mock-project-graph.js.map +1 -1
  1404. package/src/utils/module-format.d.ts +25 -0
  1405. package/src/utils/module-format.js +45 -0
  1406. package/src/utils/module-format.js.map +1 -0
  1407. package/src/utils/names.d.ts +22 -0
  1408. package/src/utils/names.js +44 -48
  1409. package/src/utils/names.js.map +1 -1
  1410. package/src/utils/npm-scope.d.ts +0 -4
  1411. package/src/utils/npm-scope.js +7 -20
  1412. package/src/utils/npm-scope.js.map +1 -1
  1413. package/src/utils/nx.d.ts +91 -6
  1414. package/src/utils/nx.js +186 -74
  1415. package/src/utils/nx.js.map +1 -1
  1416. package/src/utils/nxlv-python.js +27 -15
  1417. package/src/utils/nxlv-python.js.map +1 -1
  1418. package/src/utils/object.js +5 -11
  1419. package/src/utils/object.js.map +1 -1
  1420. package/src/utils/open-api-codegen-target.d.ts +28 -0
  1421. package/src/utils/open-api-codegen-target.js +31 -0
  1422. package/src/utils/open-api-codegen-target.js.map +1 -0
  1423. package/src/utils/paths.js +11 -15
  1424. package/src/utils/paths.js.map +1 -1
  1425. package/src/utils/pkg-manager.d.ts +1 -1
  1426. package/src/utils/pkg-manager.js +4 -9
  1427. package/src/utils/pkg-manager.js.map +1 -1
  1428. package/src/utils/pnpm-workspace.d.ts +1 -12
  1429. package/src/utils/pnpm-workspace.js +16 -43
  1430. package/src/utils/pnpm-workspace.js.map +1 -1
  1431. package/src/utils/port.d.ts +6 -5
  1432. package/src/utils/port.js +31 -39
  1433. package/src/utils/port.js.map +1 -1
  1434. package/src/utils/project-package-json.d.ts +39 -0
  1435. package/src/utils/project-package-json.js +119 -0
  1436. package/src/utils/project-package-json.js.map +1 -0
  1437. package/src/utils/py.d.ts +18 -4
  1438. package/src/utils/py.js +64 -46
  1439. package/src/utils/py.js.map +1 -1
  1440. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +72 -18
  1441. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +130 -88
  1442. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +132 -66
  1443. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +78 -162
  1444. package/src/utils/rdb-constructs/rdb-constructs.d.ts +26 -3
  1445. package/src/utils/rdb-constructs/rdb-constructs.js +61 -33
  1446. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  1447. package/src/utils/ruff.d.ts +59 -0
  1448. package/src/utils/ruff.js +140 -0
  1449. package/src/utils/ruff.js.map +1 -0
  1450. package/src/utils/shared-constructs-constants.d.ts +68 -4
  1451. package/src/utils/shared-constructs-constants.js +68 -15
  1452. package/src/utils/shared-constructs-constants.js.map +1 -1
  1453. package/src/utils/shared-constructs.d.ts +5 -2
  1454. package/src/utils/shared-constructs.js +62 -67
  1455. package/src/utils/shared-constructs.js.map +1 -1
  1456. package/src/utils/shared-dynamodb-scripts.d.ts +18 -0
  1457. package/src/utils/shared-dynamodb-scripts.js +35 -0
  1458. package/src/utils/shared-dynamodb-scripts.js.map +1 -0
  1459. package/src/utils/shared-infra-config.js +31 -30
  1460. package/src/utils/shared-infra-config.js.map +1 -1
  1461. package/src/utils/shared-infra-scripts.d.ts +26 -0
  1462. package/src/utils/shared-infra-scripts.js +58 -0
  1463. package/src/utils/shared-infra-scripts.js.map +1 -0
  1464. package/src/utils/shared-rdb-scripts.d.ts +27 -0
  1465. package/src/utils/shared-rdb-scripts.js +59 -0
  1466. package/src/utils/shared-rdb-scripts.js.map +1 -0
  1467. package/src/utils/shared-scripts.d.ts +1 -4
  1468. package/src/utils/shared-scripts.js +12 -38
  1469. package/src/utils/shared-scripts.js.map +1 -1
  1470. package/src/utils/shared-shadcn.d.ts +26 -1
  1471. package/src/utils/shared-shadcn.js +93 -67
  1472. package/src/utils/shared-shadcn.js.map +1 -1
  1473. package/src/utils/smithy.d.ts +59 -0
  1474. package/src/utils/smithy.js +73 -0
  1475. package/src/utils/smithy.js.map +1 -0
  1476. package/src/utils/test-git.d.ts +39 -0
  1477. package/src/utils/test-git.js +117 -0
  1478. package/src/utils/test-git.js.map +1 -0
  1479. package/src/utils/test.d.ts +10 -0
  1480. package/src/utils/test.js +44 -25
  1481. package/src/utils/test.js.map +1 -1
  1482. package/src/utils/toml.d.ts +5 -0
  1483. package/src/utils/toml.js +17 -15
  1484. package/src/utils/toml.js.map +1 -1
  1485. package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
  1486. package/src/utils/version-upgrade-migration/migration.js +16 -0
  1487. package/src/utils/version-upgrade-migration/migration.js.map +1 -0
  1488. package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
  1489. package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
  1490. package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
  1491. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +76 -0
  1492. package/src/utils/version-upgrade-migration/owned-dependencies.js +146 -0
  1493. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
  1494. package/src/utils/version-upgrade-migration/register.d.ts +29 -0
  1495. package/src/utils/version-upgrade-migration/register.js +42 -0
  1496. package/src/utils/version-upgrade-migration/register.js.map +1 -0
  1497. package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
  1498. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +352 -0
  1499. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
  1500. package/src/utils/version-upgrade-migration/sync-lambda-runtimes.d.ts +28 -0
  1501. package/src/utils/version-upgrade-migration/sync-lambda-runtimes.js +148 -0
  1502. package/src/utils/version-upgrade-migration/sync-lambda-runtimes.js.map +1 -0
  1503. package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
  1504. package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
  1505. package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
  1506. package/src/utils/version-upgrade-migration/sync-python-language-version.d.ts +31 -0
  1507. package/src/utils/version-upgrade-migration/sync-python-language-version.js +110 -0
  1508. package/src/utils/version-upgrade-migration/sync-python-language-version.js.map +1 -0
  1509. package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
  1510. package/src/utils/version-upgrade-migration/sync-vended-versions.js +547 -0
  1511. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
  1512. package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
  1513. package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
  1514. package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
  1515. package/src/utils/versions.d.ts +300 -108
  1516. package/src/utils/versions.js +317 -121
  1517. package/src/utils/versions.js.map +1 -1
  1518. package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +12 -3
  1519. package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +252 -49
  1520. package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +56 -1
  1521. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +205 -107
  1522. package/src/utils/website-constructs/website-constructs.d.ts +12 -1
  1523. package/src/utils/website-constructs/website-constructs.js +49 -30
  1524. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  1525. package/bin/aws-nx-mcp.d.ts +0 -2
  1526. package/bin/aws-nx-mcp.js +0 -17
  1527. package/bin/aws-nx-mcp.js.map +0 -1
  1528. package/sdk/connection.d.ts +0 -6
  1529. package/sdk/connection.js +0 -10
  1530. package/sdk/connection.js.map +0 -1
  1531. package/sdk/license.d.ts +0 -8
  1532. package/sdk/license.js +0 -13
  1533. package/sdk/license.js.map +0 -1
  1534. package/sdk/open-api.d.ts +0 -10
  1535. package/sdk/open-api.js +0 -15
  1536. package/sdk/open-api.js.map +0 -1
  1537. package/sdk/py.d.ts +0 -14
  1538. package/sdk/py.js +0 -18
  1539. package/sdk/py.js.map +0 -1
  1540. package/sdk/terraform.d.ts +0 -6
  1541. package/sdk/terraform.js +0 -11
  1542. package/sdk/terraform.js.map +0 -1
  1543. package/sdk/ts.d.ts +0 -29
  1544. package/sdk/ts.js +0 -47
  1545. package/sdk/ts.js.map +0 -1
  1546. package/sdk/utils/ast.js +0 -12
  1547. package/sdk/utils/ast.js.map +0 -1
  1548. package/sdk/utils/format.js +0 -10
  1549. package/sdk/utils/format.js.map +0 -1
  1550. package/sdk/utils/test.js +0 -10
  1551. package/sdk/utils/test.js.map +0 -1
  1552. package/src/connection/agent-serve-local.d.ts +0 -33
  1553. package/src/connection/agent-serve-local.js +0 -48
  1554. package/src/connection/agent-serve-local.js.map +0 -1
  1555. package/src/connection/serve-local.js +0 -41
  1556. package/src/connection/serve-local.js.map +0 -1
  1557. package/src/py/agent/__snapshots__/generator.spec.ts.snap +0 -771
  1558. package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
  1559. package/src/py/agent/files/a2a/main.py.template +0 -54
  1560. package/src/py/agent/files/ag-ui/main.py.template +0 -37
  1561. package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
  1562. package/src/py/agent/react-connection/serve-local.js +0 -30
  1563. package/src/py/agent/react-connection/serve-local.js.map +0 -1
  1564. package/src/py/agent/scripts/http/chat.ts.template +0 -38
  1565. package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
  1566. package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
  1567. package/src/ts/agent/react-connection/serve-local.d.ts +0 -13
  1568. package/src/ts/agent/react-connection/serve-local.js +0 -19
  1569. package/src/ts/agent/react-connection/serve-local.js.map +0 -1
  1570. package/src/ts/agent/scripts/http/chat.ts.template +0 -35
  1571. package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
  1572. package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
  1573. package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
  1574. package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
  1575. package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
  1576. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  1577. package/src/ts/rdb/files/src/constants.ts.template +0 -8
  1578. package/src/ts/rdb/files/src/index.ts.template +0 -2
  1579. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  1580. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  1581. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  1582. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  1583. package/src/utils/files/common/scripts/src/infra-deploy.ts.template +0 -2
  1584. package/src/utils/files/common/scripts/src/infra-destroy.ts.template +0 -2
  1585. package/src/utils/files/common/scripts/src/stage-credentials/cdk-command.ts.template +0 -18
  1586. package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
  1587. /package/src/py/agent/files/{common → langchain/common}/__init__.py.template +0 -0
  1588. /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -0
  1589. /package/src/utils/agent-connection/files/{py-core-runtime-config/model_errors.py.template → py-core-strands/base/model_errors_strands.py.template} +0 -0
  1590. /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
  1591. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
  1592. /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
@@ -0,0 +1,2113 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`py#rdb generator > should generate MySQL dependencies and templates 1`] = `
4
+ "import ssl
5
+ from collections.abc import AsyncGenerator
6
+ from contextlib import asynccontextmanager
7
+
8
+ import boto3
9
+ from sqlalchemy import event
10
+ from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
11
+
12
+ from .utils import build_database_url, get_database_config, get_local_dev_config, is_local_dev
13
+
14
+ # Generated: must match runtimeConfigKey in config.json
15
+ _runtime_config_key = "Db"
16
+
17
+ _engine = None
18
+
19
+
20
+ def get_engine():
21
+ global _engine
22
+ if _engine is not None:
23
+ return _engine
24
+ if is_local_dev():
25
+ cfg = get_local_dev_config()
26
+ url = build_database_url(cfg["dbUser"], cfg["host"], cfg["port"], cfg["dbName"])
27
+ ssl_args: dict = {}
28
+ else:
29
+ config = get_database_config(_runtime_config_key)
30
+ url = build_database_url(
31
+ config["dbUser"],
32
+ config["hostname"],
33
+ config["port"],
34
+ config["database"],
35
+ )
36
+ ssl_args = {"ssl": ssl.create_default_context()}
37
+ _engine = create_async_engine(url, connect_args=ssl_args)
38
+
39
+ @event.listens_for(_engine.sync_engine, "do_connect")
40
+ def provide_password(_dialect, _connection_record, _cargs, connection_params):
41
+ if is_local_dev():
42
+ connection_params["password"] = get_local_dev_config()["dbPassword"]
43
+ else:
44
+ config = get_database_config(_runtime_config_key)
45
+ connection_params["password"] = boto3.client(
46
+ "rds",
47
+ region_name=config["region"],
48
+ ).generate_db_auth_token(
49
+ DBHostname=config["hostname"],
50
+ Port=config["port"],
51
+ DBUsername=config["dbUser"],
52
+ )
53
+
54
+ return _engine
55
+
56
+
57
+ @asynccontextmanager
58
+ async def session_context() -> AsyncGenerator[AsyncSession]:
59
+ async with AsyncSession(get_engine()) as session:
60
+ yield session
61
+ "
62
+ `;
63
+
64
+ exports[`py#rdb generator > should generate MySQL dependencies and templates 2`] = `
65
+ "import asyncio
66
+ import ssl
67
+
68
+ from alembic import command
69
+ from alembic.config import Config
70
+ from sqlalchemy.ext.asyncio import create_async_engine
71
+ from sqlalchemy.pool import NullPool
72
+
73
+ from .utils import build_database_url, get_database_secret, with_connection_retry
74
+
75
+
76
+ def _apply_migrations(sync_conn, alembic_cfg: Config) -> None:
77
+ alembic_cfg.attributes["connection"] = sync_conn
78
+ command.upgrade(alembic_cfg, "head")
79
+
80
+
81
+ async def _run_migrations() -> None:
82
+ secret = get_database_secret()
83
+ database_url = build_database_url(
84
+ secret["username"],
85
+ secret["host"],
86
+ secret["port"],
87
+ secret["dbname"],
88
+ password=secret["password"],
89
+ )
90
+ alembic_cfg = Config("alembic.ini")
91
+ engine = create_async_engine(
92
+ database_url,
93
+ poolclass=NullPool,
94
+ connect_args={"ssl": ssl.create_default_context()},
95
+ )
96
+ try:
97
+ async with engine.begin() as conn:
98
+ await conn.run_sync(lambda c: _apply_migrations(c, alembic_cfg))
99
+ finally:
100
+ await engine.dispose()
101
+
102
+
103
+ def handler(_event, _context):
104
+ with_connection_retry(lambda: asyncio.run(_run_migrations()))
105
+ "
106
+ `;
107
+
108
+ exports[`py#rdb generator > should generate MySQL dependencies and templates 3`] = `
109
+ "import asyncio
110
+ import secrets
111
+ import ssl
112
+ from typing import Any
113
+
114
+ import aiomysql
115
+
116
+ from .utils import get_database_secret, with_connection_retry
117
+
118
+
119
+ async def _ensure_database_user(db_user: str) -> None:
120
+ secret = get_database_secret()
121
+ conn = await aiomysql.connect(
122
+ host=secret["host"],
123
+ port=int(secret["port"]),
124
+ db=secret["dbname"],
125
+ user=secret["username"],
126
+ password=secret["password"],
127
+ ssl=ssl.create_default_context(),
128
+ )
129
+ try:
130
+ async with conn.cursor() as cursor:
131
+ await cursor.execute(
132
+ "CREATE USER IF NOT EXISTS %s@'%%' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'",
133
+ (db_user,),
134
+ )
135
+ await cursor.execute(
136
+ "ALTER USER %s@'%%' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS' REQUIRE SSL",
137
+ (db_user,),
138
+ )
139
+ await cursor.execute(
140
+ f"GRANT SELECT, INSERT, UPDATE, DELETE ON \`{secret['dbname']}\`.* TO %s@'%%'",
141
+ (db_user,),
142
+ )
143
+ await conn.commit()
144
+ finally:
145
+ conn.close()
146
+
147
+
148
+ _PHYSICAL_RESOURCE_ID_PREFIX = "db-user:"
149
+
150
+
151
+ def _resolve_db_user(physical_resource_id: str | None) -> str:
152
+ if physical_resource_id and physical_resource_id.startswith(_PHYSICAL_RESOURCE_ID_PREFIX):
153
+ return physical_resource_id[len(_PHYSICAL_RESOURCE_ID_PREFIX) :]
154
+ return f"db_{secrets.token_hex(8)}"
155
+
156
+
157
+ def handler(event: dict[str, Any], _context: Any) -> dict[str, Any]:
158
+ db_user = _resolve_db_user(event.get("PhysicalResourceId"))
159
+
160
+ if event.get("RequestType") != "Delete":
161
+ with_connection_retry(lambda: asyncio.run(_ensure_database_user(db_user)))
162
+
163
+ return {
164
+ "PhysicalResourceId": f"{_PHYSICAL_RESOURCE_ID_PREFIX}{db_user}",
165
+ "Data": {"dbUser": db_user},
166
+ }
167
+ "
168
+ `;
169
+
170
+ exports[`py#rdb generator > should generate MySQL dependencies and templates 4`] = `
171
+ "FROM public.ecr.aws/lambda/python:3.14
172
+
173
+ # Patch OS packages beyond the base image's pinned release so the image is
174
+ # free of known HIGH/CRITICAL vulnerabilities
175
+ RUN microdnf upgrade -y --releasever latest && microdnf clean all
176
+
177
+ WORKDIR \${LAMBDA_TASK_ROOT}
178
+
179
+ COPY . .
180
+
181
+ ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /etc/pki/ca-trust/source/anchors/global-bundle.pem
182
+ RUN update-ca-trust
183
+
184
+ CMD ["proj_db.migration_handler.handler"]
185
+ "
186
+ `;
187
+
188
+ exports[`py#rdb generator > should generate MySQL dependencies and templates 5`] = `
189
+ "FROM public.ecr.aws/lambda/python:3.14
190
+
191
+ # Patch OS packages beyond the base image's pinned release so the image is
192
+ # free of known HIGH/CRITICAL vulnerabilities
193
+ RUN microdnf upgrade -y --releasever latest && microdnf clean all
194
+
195
+ WORKDIR \${LAMBDA_TASK_ROOT}
196
+
197
+ COPY . .
198
+
199
+ ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /etc/pki/ca-trust/source/anchors/global-bundle.pem
200
+ RUN update-ca-trust
201
+
202
+ CMD ["proj_db.create_db_user_handler.handler"]
203
+ "
204
+ `;
205
+
206
+ exports[`py#rdb generator > should generate Terraform modules 1`] = `
207
+ "terraform {
208
+ required_version = ">= 1.0"
209
+
210
+ required_providers {
211
+ archive = {
212
+ source = "hashicorp/archive"
213
+ version = "2.8.0"
214
+ }
215
+ aws = {
216
+ source = "hashicorp/aws"
217
+ version = "6.62.0"
218
+ }
219
+ external = {
220
+ source = "hashicorp/external"
221
+ version = "2.4.1"
222
+ }
223
+ null = {
224
+ source = "hashicorp/null"
225
+ version = "3.3.1"
226
+ }
227
+ random = {
228
+ source = "hashicorp/random"
229
+ version = "3.9.0"
230
+ }
231
+ }
232
+ }
233
+
234
+ variable "vpc_id" {
235
+ description = "VPC where the Aurora cluster will be deployed."
236
+ type = string
237
+ }
238
+
239
+ variable "database_subnet_ids" {
240
+ description = "Subnet IDs for the Aurora cluster and RDS Proxy. Private isolated subnets are fine — no outbound egress required."
241
+ type = list(string)
242
+ }
243
+
244
+ variable "lambda_subnet_ids" {
245
+ description = "Subnet IDs for the create-db-user and migration Lambda functions. Must have outbound egress to AWS service endpoints (e.g. Secrets Manager) — use private subnets with a NAT gateway."
246
+ type = list(string)
247
+ }
248
+
249
+ variable "engine_version" {
250
+ description = "Aurora engine version."
251
+ type = string
252
+ default = null
253
+ }
254
+
255
+ variable "port" {
256
+ description = "Database port for the selected Aurora engine."
257
+ type = number
258
+ default = null
259
+ }
260
+
261
+ variable "serverless_min_capacity" {
262
+ description = "Minimum Aurora Serverless v2 ACUs."
263
+ type = number
264
+ default = 0.5
265
+ }
266
+
267
+ variable "serverless_max_capacity" {
268
+ description = "Maximum Aurora Serverless v2 ACUs."
269
+ type = number
270
+ default = 4
271
+ }
272
+
273
+ variable "instance_count" {
274
+ description = "Number of Aurora instances to create."
275
+ type = number
276
+ default = 1
277
+ }
278
+
279
+ variable "deletion_protection" {
280
+ description = "Whether deletion protection is enabled."
281
+ type = bool
282
+ default = true
283
+ }
284
+
285
+ variable "skip_final_snapshot" {
286
+ description = "Whether to skip the final snapshot on deletion."
287
+ type = bool
288
+ default = false
289
+ }
290
+
291
+ variable "enable_rds_proxy" {
292
+ description = "Whether to provision an RDS Proxy in front of the Aurora cluster."
293
+ type = bool
294
+ default = true
295
+ }
296
+
297
+ variable "enable_cloudwatch_logs" {
298
+ 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."
299
+ type = bool
300
+ default = true
301
+ }
302
+
303
+ variable "enable_performance_insights" {
304
+ description = "Whether to enable Performance Insights on Aurora cluster instances."
305
+ type = bool
306
+ default = true
307
+ }
308
+
309
+ variable "performance_insights_retention_period" {
310
+ description = "Retention period, in days, for Performance Insights data when enabled."
311
+ type = number
312
+ default = 7
313
+ }
314
+
315
+ variable "enable_backup" {
316
+ description = "Whether to provision an AWS Backup plan for the Aurora cluster."
317
+ type = bool
318
+ default = false
319
+ }
320
+
321
+ variable "enable_key_rotation" {
322
+ description = "Whether to enable automatic key rotation on the KMS key used to encrypt the Aurora cluster and its credentials secret."
323
+ type = bool
324
+ default = true
325
+ }
326
+
327
+ variable "tags" {
328
+ description = "Tags to apply to all resources."
329
+ type = map(string)
330
+ default = {}
331
+ }
332
+
333
+ variable "migration_docker_image_tag" {
334
+ description = "Docker image tag for the migration handler. Defaults to the tag built by the Nx docker target."
335
+ type = string
336
+ default = "proj-db-migration:latest"
337
+ }
338
+
339
+ variable "create_db_user_docker_image_tag" {
340
+ description = "Docker image tag for the Python create-db-user handler. Defaults to the tag built by the Nx docker target."
341
+ type = string
342
+ default = "proj-db-create-db-user:latest"
343
+ }
344
+
345
+
346
+ data "aws_region" "current" {}
347
+ data "aws_caller_identity" "current" {}
348
+
349
+ resource "random_string" "suffix" {
350
+ length = 8
351
+ special = false
352
+ upper = false
353
+ }
354
+
355
+ locals {
356
+ config = jsondecode(file("\${path.module}/../../../../../../../packages/db/config.json"))
357
+ runtime_config_key = local.config.runtimeConfigKey
358
+ migration_function_name = "db-migration-\${random_string.suffix.result}"
359
+ create_db_user_function_name = "db-create-db-user-\${random_string.suffix.result}"
360
+ database_runtime_user = "db_\${random_string.suffix.result}"
361
+ }
362
+
363
+ module "aurora" {
364
+ source = "../../../core/rdb/aurora"
365
+ #checkov:skip=CKV_AWS_139:Deletion protection is enabled but checkov is unable to detect it correctly
366
+ name = "db"
367
+ vpc_id = var.vpc_id
368
+ subnet_ids = var.database_subnet_ids
369
+ engine = "aurora-postgresql"
370
+ engine_version = var.engine_version
371
+ database_name = "database_name"
372
+ admin_user = "databaseUser"
373
+ port = var.port
374
+ serverless_min_capacity = var.serverless_min_capacity
375
+ serverless_max_capacity = var.serverless_max_capacity
376
+ instance_count = var.instance_count
377
+ deletion_protection = var.deletion_protection
378
+ skip_final_snapshot = var.skip_final_snapshot
379
+ enable_rds_proxy = var.enable_rds_proxy
380
+ enable_cloudwatch_logs = var.enable_cloudwatch_logs
381
+ enable_performance_insights = var.enable_performance_insights
382
+ performance_insights_retention_period = var.performance_insights_retention_period
383
+ enable_backup = var.enable_backup
384
+ enable_key_rotation = var.enable_key_rotation
385
+ tags = var.tags
386
+ }
387
+
388
+ resource "aws_iam_role_policy" "proxy_db_user_connect" {
389
+ count = var.enable_rds_proxy ? 1 : 0
390
+
391
+ role = module.aurora.proxy_role_name
392
+
393
+ policy = jsonencode({
394
+ Version = "2012-10-17"
395
+ Statement = [
396
+ {
397
+ Effect = "Allow"
398
+ Action = ["rds-db:connect"]
399
+ Resource = [
400
+ "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}"
401
+ ]
402
+ }
403
+ ]
404
+ })
405
+ }
406
+
407
+
408
+ module "add_rdb_to_runtime_config" {
409
+ source = "../../../core/runtime-config/entry"
410
+
411
+ namespace = "database"
412
+ key = local.runtime_config_key
413
+ value = {
414
+ hostname = module.aurora.cluster_endpoint
415
+ port = module.aurora.cluster_port
416
+ database = module.aurora.database_name
417
+ adminUser = module.aurora.admin_user
418
+ dbUser = local.database_runtime_user
419
+ region = data.aws_region.current.region
420
+ }
421
+ }
422
+
423
+ resource "aws_ecr_repository" "migration_handler" {
424
+ #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
425
+ name = "db-migration-\${random_string.suffix.result}"
426
+ image_tag_mutability = "IMMUTABLE"
427
+ force_delete = true
428
+
429
+ image_scanning_configuration {
430
+ scan_on_push = true
431
+ }
432
+
433
+ tags = var.tags
434
+ }
435
+
436
+ resource "aws_ecr_repository_policy" "migration_handler" {
437
+ repository = aws_ecr_repository.migration_handler.name
438
+
439
+ policy = jsonencode({
440
+ Version = "2012-10-17"
441
+ Statement = [
442
+ {
443
+ Sid = "AllowPushPull"
444
+ Effect = "Allow"
445
+ Principal = {
446
+ AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root"
447
+ }
448
+ Action = [
449
+ "ecr:BatchCheckLayerAvailability",
450
+ "ecr:CompleteLayerUpload",
451
+ "ecr:GetDownloadUrlForLayer",
452
+ "ecr:InitiateLayerUpload",
453
+ "ecr:PutImage",
454
+ "ecr:UploadLayerPart"
455
+ ]
456
+ },
457
+ {
458
+ Sid = "AllowLambdaPull"
459
+ Effect = "Allow"
460
+ Principal = {
461
+ Service = "lambda.amazonaws.com"
462
+ }
463
+ Action = [
464
+ "ecr:BatchCheckLayerAvailability",
465
+ "ecr:BatchGetImage",
466
+ "ecr:GetDownloadUrlForLayer"
467
+ ]
468
+ }
469
+ ]
470
+ })
471
+ }
472
+
473
+ data "external" "docker_digest" {
474
+ program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.migration_docker_image_tag} --format '{{.Id}}')'\\"}' "]
475
+ }
476
+
477
+ locals {
478
+ # Content-based, immutable image tag derived from the local image digest
479
+ image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
480
+ }
481
+ data "external" "create_db_user_docker_digest" {
482
+ program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.create_db_user_docker_image_tag} --format '{{.Id}}')'\\"}' "]
483
+ }
484
+
485
+ locals {
486
+ create_db_user_image_tag = replace(data.external.create_db_user_docker_digest.result.digest, "sha256:", "")
487
+ }
488
+
489
+ resource "null_resource" "docker_publish" {
490
+ triggers = {
491
+ docker_digest = data.external.docker_digest.result.digest
492
+ repository_url = aws_ecr_repository.migration_handler.repository_url
493
+ migration_docker_image_tag = var.migration_docker_image_tag
494
+ image_tag = local.image_tag
495
+ create_db_user_docker_digest = data.external.create_db_user_docker_digest.result.digest
496
+ create_db_user_docker_image_tag = var.create_db_user_docker_image_tag
497
+ create_db_user_image_tag = local.create_db_user_image_tag
498
+ }
499
+
500
+ provisioner "local-exec" {
501
+ command = <<-EOT
502
+ aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
503
+ docker tag "$MIGRATION_DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
504
+ docker push "$REPOSITORY_URL:$IMAGE_TAG"
505
+ docker tag "$CREATE_DB_USER_DOCKER_IMAGE_TAG" "$REPOSITORY_URL:create-db-user-$CREATE_DB_USER_IMAGE_TAG"
506
+ docker push "$REPOSITORY_URL:create-db-user-$CREATE_DB_USER_IMAGE_TAG"
507
+ EOT
508
+ environment = {
509
+ AWS_REGION = data.aws_region.current.region
510
+ REPOSITORY_URL = self.triggers.repository_url
511
+ MIGRATION_DOCKER_IMAGE_TAG = self.triggers.migration_docker_image_tag
512
+ IMAGE_TAG = self.triggers.image_tag
513
+ CREATE_DB_USER_DOCKER_IMAGE_TAG = self.triggers.create_db_user_docker_image_tag
514
+ CREATE_DB_USER_IMAGE_TAG = self.triggers.create_db_user_image_tag
515
+ }
516
+ }
517
+
518
+ depends_on = [aws_ecr_repository_policy.migration_handler]
519
+ }
520
+
521
+ resource "aws_iam_role" "migration_handler" {
522
+ name = "DbMigrationHandlerRole-\${random_string.suffix.result}"
523
+
524
+ assume_role_policy = jsonencode({
525
+ Version = "2012-10-17"
526
+ Statement = [
527
+ {
528
+ Effect = "Allow"
529
+ Principal = {
530
+ Service = "lambda.amazonaws.com"
531
+ }
532
+ Action = "sts:AssumeRole"
533
+ }
534
+ ]
535
+ })
536
+
537
+ tags = var.tags
538
+ }
539
+
540
+ resource "aws_iam_role_policy_attachment" "migration_handler_basic_execution" {
541
+ role = aws_iam_role.migration_handler.name
542
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
543
+ }
544
+
545
+ resource "aws_iam_role_policy_attachment" "migration_handler_vpc_access" {
546
+ role = aws_iam_role.migration_handler.name
547
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
548
+ }
549
+
550
+ resource "aws_iam_role_policy_attachment" "migration_handler_xray" {
551
+ role = aws_iam_role.migration_handler.name
552
+ policy_arn = "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess"
553
+ }
554
+
555
+ resource "aws_iam_role_policy" "migration_handler_access" {
556
+ role = aws_iam_role.migration_handler.name
557
+
558
+ policy = jsonencode({
559
+ Version = "2012-10-17"
560
+ Statement = [
561
+ {
562
+ Effect = "Allow"
563
+ Action = [
564
+ "secretsmanager:GetSecretValue"
565
+ ]
566
+ Resource = [module.aurora.secret_arn]
567
+ },
568
+ {
569
+ Effect = "Allow"
570
+ Action = [
571
+ "kms:Decrypt"
572
+ ]
573
+ Resource = [module.aurora.kms_key_arn]
574
+ }
575
+ ]
576
+ })
577
+ }
578
+
579
+ resource "aws_iam_role" "create_db_user" {
580
+ name = "DbCreateDbUserRole-\${random_string.suffix.result}"
581
+
582
+ assume_role_policy = jsonencode({
583
+ Version = "2012-10-17"
584
+ Statement = [
585
+ {
586
+ Effect = "Allow"
587
+ Principal = {
588
+ Service = "lambda.amazonaws.com"
589
+ }
590
+ Action = "sts:AssumeRole"
591
+ }
592
+ ]
593
+ })
594
+
595
+ tags = var.tags
596
+ }
597
+
598
+ resource "aws_iam_role_policy_attachment" "create_db_user_basic_execution" {
599
+ role = aws_iam_role.create_db_user.name
600
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
601
+ }
602
+
603
+ resource "aws_iam_role_policy_attachment" "create_db_user_vpc_access" {
604
+ role = aws_iam_role.create_db_user.name
605
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
606
+ }
607
+
608
+ resource "aws_iam_role_policy_attachment" "create_db_user_xray" {
609
+ role = aws_iam_role.create_db_user.name
610
+ policy_arn = "arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess"
611
+ }
612
+
613
+ resource "aws_iam_role_policy" "create_db_user_secret_access" {
614
+ role = aws_iam_role.create_db_user.name
615
+
616
+ policy = jsonencode({
617
+ Version = "2012-10-17"
618
+ Statement = [
619
+ {
620
+ Effect = "Allow"
621
+ Action = [
622
+ "secretsmanager:GetSecretValue"
623
+ ]
624
+ Resource = [module.aurora.secret_arn]
625
+ },
626
+ {
627
+ Effect = "Allow"
628
+ Action = [
629
+ "kms:Decrypt"
630
+ ]
631
+ Resource = [module.aurora.kms_key_arn]
632
+ }
633
+ ]
634
+ })
635
+ }
636
+
637
+ resource "aws_cloudwatch_log_group" "migration_handler" {
638
+ #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
639
+ #checkov:skip=CKV_AWS_338:Log retention set to forever
640
+ #checkov:skip=CKV_AWS_66:Log retention set to forever
641
+ name = "/aws/lambda/\${local.migration_function_name}"
642
+ tags = var.tags
643
+ }
644
+
645
+ resource "aws_cloudwatch_log_group" "create_db_user" {
646
+ #checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
647
+ #checkov:skip=CKV_AWS_338:Log retention set to forever
648
+ #checkov:skip=CKV_AWS_66:Log retention set to forever
649
+ name = "/aws/lambda/\${local.create_db_user_function_name}"
650
+ tags = var.tags
651
+ }
652
+
653
+ resource "aws_security_group" "migration_handler" {
654
+ name_prefix = "db-migration-"
655
+ description = "Security group for the migration Lambda function"
656
+ vpc_id = var.vpc_id
657
+ tags = var.tags
658
+ }
659
+
660
+ resource "aws_vpc_security_group_egress_rule" "migration_handler_to_database" {
661
+ security_group_id = aws_security_group.migration_handler.id
662
+ referenced_security_group_id = module.aurora.database_security_group_id
663
+ from_port = module.aurora.cluster_port
664
+ to_port = module.aurora.cluster_port
665
+ ip_protocol = "tcp"
666
+ description = "Allow outbound traffic to Aurora on database port"
667
+ }
668
+
669
+ resource "aws_vpc_security_group_egress_rule" "migration_handler_https" {
670
+ security_group_id = aws_security_group.migration_handler.id
671
+ cidr_ipv4 = "0.0.0.0/0"
672
+ from_port = 443
673
+ to_port = 443
674
+ ip_protocol = "tcp"
675
+ description = "Allow outbound HTTPS to AWS service endpoints"
676
+ }
677
+
678
+ resource "aws_security_group" "create_db_user" {
679
+ name_prefix = "db-create-db-user-"
680
+ description = "Security group for the create-db-user Lambda function"
681
+ vpc_id = var.vpc_id
682
+ tags = var.tags
683
+ }
684
+
685
+ resource "aws_vpc_security_group_egress_rule" "create_db_user_to_database" {
686
+ security_group_id = aws_security_group.create_db_user.id
687
+ referenced_security_group_id = module.aurora.database_security_group_id
688
+ from_port = module.aurora.cluster_port
689
+ to_port = module.aurora.cluster_port
690
+ ip_protocol = "tcp"
691
+ description = "Allow outbound traffic to Aurora on database port"
692
+ }
693
+
694
+ resource "aws_vpc_security_group_egress_rule" "create_db_user_https" {
695
+ security_group_id = aws_security_group.create_db_user.id
696
+ cidr_ipv4 = "0.0.0.0/0"
697
+ from_port = 443
698
+ to_port = 443
699
+ ip_protocol = "tcp"
700
+ description = "Allow outbound HTTPS to AWS service endpoints"
701
+ }
702
+
703
+ resource "aws_vpc_security_group_ingress_rule" "migration_handler_to_database" {
704
+ security_group_id = module.aurora.database_security_group_id
705
+ referenced_security_group_id = aws_security_group.migration_handler.id
706
+ from_port = module.aurora.cluster_port
707
+ to_port = module.aurora.cluster_port
708
+ ip_protocol = "tcp"
709
+ description = "Allow inbound traffic from migration Lambda on database port"
710
+ }
711
+
712
+ resource "aws_vpc_security_group_ingress_rule" "create_db_user_to_database" {
713
+ security_group_id = module.aurora.database_security_group_id
714
+ referenced_security_group_id = aws_security_group.create_db_user.id
715
+ from_port = module.aurora.cluster_port
716
+ to_port = module.aurora.cluster_port
717
+ ip_protocol = "tcp"
718
+ description = "Allow inbound traffic from create-db-user Lambda on database port"
719
+ }
720
+
721
+ resource "aws_lambda_function" "create_db_user" {
722
+ #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for the create-db-user handler
723
+ #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for the create-db-user handler
724
+ #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
725
+ #checkov:skip=CKV_AWS_272:Code signing not configured as deployment packages are built and deployed within the same pipeline
726
+ package_type = "Image"
727
+ image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:create-db-user-\${local.create_db_user_image_tag}"
728
+ function_name = local.create_db_user_function_name
729
+ role = aws_iam_role.create_db_user.arn
730
+ timeout = 300
731
+ architectures = ["arm64"]
732
+
733
+ image_config {
734
+ command = ["proj_db.create_db_user_handler.handler"]
735
+ }
736
+
737
+ tracing_config {
738
+ mode = "Active"
739
+ }
740
+
741
+ vpc_config {
742
+ subnet_ids = var.lambda_subnet_ids
743
+ security_group_ids = [aws_security_group.create_db_user.id]
744
+ }
745
+
746
+ environment {
747
+ variables = {
748
+ DATABASE_SECRET_ARN = module.aurora.secret_arn
749
+ DATABASE_HOST = module.aurora.writer_endpoint
750
+ DATABASE_PORT = module.aurora.cluster_port
751
+ DATABASE_NAME = module.aurora.database_name
752
+ }
753
+ }
754
+
755
+ tags = var.tags
756
+
757
+ depends_on = [
758
+ null_resource.docker_publish,
759
+ aws_iam_role_policy_attachment.create_db_user_basic_execution,
760
+ aws_iam_role_policy_attachment.create_db_user_vpc_access,
761
+ aws_iam_role_policy_attachment.create_db_user_xray,
762
+ aws_iam_role_policy.create_db_user_secret_access,
763
+ aws_cloudwatch_log_group.create_db_user,
764
+ aws_vpc_security_group_ingress_rule.create_db_user_to_database
765
+ ]
766
+ }
767
+
768
+ resource "null_resource" "create_db_user_trigger" {
769
+ triggers = {
770
+ cluster_arn = module.aurora.cluster_arn
771
+ function_name = aws_lambda_function.create_db_user.function_name
772
+ db_user = local.database_runtime_user
773
+ bundle_hash = data.external.create_db_user_docker_digest.result.digest
774
+ }
775
+
776
+ provisioner "local-exec" {
777
+ command = <<-EOT
778
+ output_file=$(mktemp)
779
+ response=$(aws lambda invoke \\
780
+ --region "$AWS_REGION" \\
781
+ --function-name "$FUNCTION_NAME" \\
782
+ --cli-binary-format raw-in-base64-out \\
783
+ --payload "{\\"RequestType\\":\\"Create\\",\\"PhysicalResourceId\\":\\"db-user:$DB_USER\\"}" \\
784
+ "$output_file")
785
+ cat "$output_file"
786
+ echo "$response"
787
+ if echo "$response" | grep -q '"FunctionError"'; then
788
+ rm -f "$output_file"
789
+ exit 1
790
+ fi
791
+ rm -f "$output_file"
792
+ EOT
793
+ environment = {
794
+ AWS_REGION = data.aws_region.current.region
795
+ FUNCTION_NAME = self.triggers.function_name
796
+ DB_USER = self.triggers.db_user
797
+ }
798
+ }
799
+
800
+ depends_on = [aws_lambda_function.create_db_user, module.aurora]
801
+ }
802
+
803
+ resource "aws_lambda_function" "migration_handler" {
804
+ #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for the migration handler
805
+ #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for the migration handler
806
+ #checkov:skip=CKV_AWS_173:Lambda environment variables encrypted by managed key
807
+ #checkov:skip=CKV_AWS_272:Code signing does not apply to container image Lambda functions
808
+ package_type = "Image"
809
+ function_name = local.migration_function_name
810
+ role = aws_iam_role.migration_handler.arn
811
+ image_uri = "\${aws_ecr_repository.migration_handler.repository_url}:\${local.image_tag}"
812
+ memory_size = 1024
813
+ timeout = 300
814
+ architectures = ["arm64"]
815
+
816
+ tracing_config {
817
+ mode = "Active"
818
+ }
819
+
820
+ vpc_config {
821
+ subnet_ids = var.lambda_subnet_ids
822
+ security_group_ids = [aws_security_group.migration_handler.id]
823
+ }
824
+
825
+ environment {
826
+ variables = {
827
+ DATABASE_SECRET_ARN = module.aurora.secret_arn
828
+ DATABASE_HOST = module.aurora.writer_endpoint
829
+ DATABASE_PORT = module.aurora.cluster_port
830
+ DATABASE_NAME = module.aurora.database_name
831
+ }
832
+ }
833
+
834
+ tags = var.tags
835
+
836
+ depends_on = [
837
+ null_resource.docker_publish,
838
+ aws_iam_role_policy_attachment.migration_handler_basic_execution,
839
+ aws_iam_role_policy_attachment.migration_handler_vpc_access,
840
+ aws_iam_role_policy_attachment.migration_handler_xray,
841
+ aws_iam_role_policy.migration_handler_access,
842
+ aws_cloudwatch_log_group.migration_handler,
843
+ aws_vpc_security_group_ingress_rule.migration_handler_to_database
844
+ ]
845
+ }
846
+
847
+ resource "null_resource" "migration_trigger" {
848
+ triggers = {
849
+ docker_digest = data.external.docker_digest.result.digest
850
+ cluster_arn = module.aurora.cluster_arn
851
+ database_ready = module.aurora.database_ready
852
+ function_name = aws_lambda_function.migration_handler.function_name
853
+ }
854
+
855
+ provisioner "local-exec" {
856
+ command = <<-EOT
857
+ output_file=$(mktemp)
858
+ response=$(aws lambda invoke \\
859
+ --region "$AWS_REGION" \\
860
+ --function-name "$FUNCTION_NAME" \\
861
+ --cli-binary-format raw-in-base64-out \\
862
+ "$output_file")
863
+ cat "$output_file"
864
+ echo "$response"
865
+ if echo "$response" | grep -q '"FunctionError"'; then
866
+ rm -f "$output_file"
867
+ exit 1
868
+ fi
869
+ rm -f "$output_file"
870
+ EOT
871
+ environment = {
872
+ AWS_REGION = data.aws_region.current.region
873
+ FUNCTION_NAME = self.triggers.function_name
874
+ }
875
+ }
876
+
877
+ depends_on = [
878
+ aws_lambda_function.migration_handler,
879
+ module.aurora,
880
+ null_resource.create_db_user_trigger,
881
+ aws_iam_role_policy.proxy_db_user_connect
882
+ ]
883
+ }
884
+
885
+ output "security_group_id" {
886
+ description = "Security group ID to allow inbound connections to the database (proxy SG if RDS Proxy is enabled, otherwise DB SG)."
887
+ value = module.aurora.security_group_id
888
+ }
889
+
890
+ output "database_security_group_id" {
891
+ description = "Security group ID of the Aurora cluster directly, used for direct DB access rules (e.g. when RDS Proxy is disabled)."
892
+ value = module.aurora.database_security_group_id
893
+ }
894
+
895
+ output "cluster_resource_id" {
896
+ description = "Resource ID of the Aurora cluster, used for IAM rds-db:connect policies."
897
+ value = module.aurora.cluster_resource_id
898
+ }
899
+
900
+ output "proxy_resource_id" {
901
+ description = "Resource identifier of the RDS Proxy (prx-XXXX), used for IAM rds-db:connect policies when connecting through the proxy. Null if RDS Proxy is disabled."
902
+ value = module.aurora.proxy_resource_id
903
+ }
904
+
905
+ output "connect_resource_id" {
906
+ 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."
907
+ value = module.aurora.connect_resource_id
908
+ }
909
+
910
+ output "kms_key_arn" {
911
+ description = "ARN of the KMS key protecting Aurora and the admin credentials secret, used to grant decrypt access alongside secret_arn."
912
+ value = module.aurora.kms_key_arn
913
+ }
914
+
915
+ output "cluster_arn" {
916
+ description = "ARN of the Aurora cluster."
917
+ value = module.aurora.cluster_arn
918
+ }
919
+
920
+ output "cluster_endpoint" {
921
+ description = "Writer endpoint of the Aurora cluster."
922
+ value = module.aurora.cluster_endpoint
923
+ }
924
+
925
+ output "reader_endpoint" {
926
+ description = "Reader endpoint of the Aurora cluster."
927
+ value = module.aurora.reader_endpoint
928
+ }
929
+
930
+ output "cluster_port" {
931
+ description = "Port exposed by the Aurora cluster."
932
+ value = module.aurora.cluster_port
933
+ }
934
+
935
+ output "secret_arn" {
936
+ description = "ARN of the generated admin credentials secret."
937
+ value = module.aurora.secret_arn
938
+ }
939
+
940
+ output "database_runtime_user" {
941
+ description = "Application database user created for IAM-authenticated access."
942
+ value = local.database_runtime_user
943
+ }
944
+ "
945
+ `;
946
+
947
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/migrations/env.py 1`] = `
948
+ "import asyncio
949
+ import json
950
+ import os
951
+ from logging.config import fileConfig
952
+
953
+ from alembic import context
954
+ from sqlalchemy import URL
955
+ from sqlalchemy.ext.asyncio import create_async_engine
956
+ from sqlmodel import SQLModel
957
+
958
+ # Import all models to register them in SQLModel.metadata
959
+ from proj_db.models import * # noqa: F403
960
+
961
+ config = context.config
962
+
963
+ if config.config_file_name is not None:
964
+ fileConfig(config.config_file_name)
965
+
966
+ target_metadata = SQLModel.metadata
967
+
968
+
969
+ def _get_local_url():
970
+ if os.environ.get("LOCAL_DEV") == "true":
971
+ config_path = os.path.join(os.path.dirname(__file__), "..", "config.json")
972
+ with open(config_path) as f:
973
+ cfg = json.load(f)["localDev"]
974
+ engine = cfg["dbEngine"]
975
+ driver = "mysql+aiomysql" if engine == "mysql" else "postgresql+asyncpg"
976
+ return URL.create(
977
+ driver,
978
+ username=cfg["dbUser"],
979
+ password=cfg["dbPassword"],
980
+ host=cfg["host"],
981
+ port=cfg["port"],
982
+ database=cfg["dbName"],
983
+ )
984
+
985
+ raise RuntimeError("Run alembic via nx run <project>:alembic")
986
+
987
+
988
+ # Generates SQL script without a live DB connection (alembic upgrade head --sql)
989
+ def run_migrations_offline() -> None:
990
+ context.configure(
991
+ url=_get_local_url(),
992
+ target_metadata=target_metadata,
993
+ literal_binds=True,
994
+ dialect_opts={"paramstyle": "named"},
995
+ )
996
+ with context.begin_transaction():
997
+ context.run_migrations()
998
+
999
+
1000
+ def _run_migrations_sync(sync_conn) -> None:
1001
+ context.configure(connection=sync_conn, target_metadata=target_metadata)
1002
+ with context.begin_transaction():
1003
+ context.run_migrations()
1004
+
1005
+
1006
+ # Runs migrations against a live DB connection
1007
+ def run_migrations_online() -> None:
1008
+ supplied_connection = config.attributes.get("connection")
1009
+ # Connection injected by migration_handler.py (Lambda)
1010
+ if supplied_connection is not None:
1011
+ _run_migrations_sync(supplied_connection)
1012
+ return
1013
+
1014
+ # Local alembic commands run via nx run <project>:alembic
1015
+ async def _run_async() -> None:
1016
+ engine = create_async_engine(_get_local_url())
1017
+ async with engine.begin() as conn:
1018
+ await conn.run_sync(_run_migrations_sync)
1019
+ await engine.dispose()
1020
+
1021
+ asyncio.run(_run_async())
1022
+
1023
+
1024
+ if context.is_offline_mode():
1025
+ run_migrations_offline()
1026
+ else:
1027
+ run_migrations_online()
1028
+ "
1029
+ `;
1030
+
1031
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/migrations/script.py.mako 1`] = `
1032
+ """"\${message}
1033
+
1034
+ Revision ID: \${up_revision}
1035
+ Revises: \${down_revision | comma,n}
1036
+ Create Date: \${create_date}
1037
+
1038
+ """
1039
+ from typing import Sequence, Union
1040
+
1041
+ from alembic import op
1042
+ import sqlalchemy as sa
1043
+ \${imports if imports else ""}
1044
+
1045
+ # revision identifiers, used by Alembic.
1046
+ revision: str = \${repr(up_revision)}
1047
+ down_revision: Union[str, Sequence[str], None] = \${repr(down_revision)}
1048
+ branch_labels: Union[str, Sequence[str], None] = \${repr(branch_labels)}
1049
+ depends_on: Union[str, Sequence[str], None] = \${repr(depends_on)}
1050
+
1051
+
1052
+ def upgrade() -> None:
1053
+ """Upgrade schema."""
1054
+ \${upgrades if upgrades else "pass"}
1055
+
1056
+
1057
+ def downgrade() -> None:
1058
+ """Downgrade schema."""
1059
+ \${downgrades if downgrades else "pass"}
1060
+ "
1061
+ `;
1062
+
1063
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/migrations/versions/.gitkeep 1`] = `""`;
1064
+
1065
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/__init__.py 1`] = `
1066
+ """"Automatically generated by Nx."""
1067
+
1068
+ from .connection import get_engine, is_local_dev, session_context
1069
+
1070
+ __all__ = ["get_engine", "is_local_dev", "session_context"]
1071
+ "
1072
+ `;
1073
+
1074
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/connection.py 1`] = `
1075
+ "import ssl
1076
+ from collections.abc import AsyncGenerator
1077
+ from contextlib import asynccontextmanager
1078
+
1079
+ import boto3
1080
+ from sqlalchemy import event
1081
+ from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
1082
+
1083
+ from .utils import build_database_url, get_database_config, get_local_dev_config, is_local_dev
1084
+
1085
+ # Generated: must match runtimeConfigKey in config.json
1086
+ _runtime_config_key = "Db"
1087
+
1088
+ _engine = None
1089
+
1090
+
1091
+ def get_engine():
1092
+ global _engine
1093
+ if _engine is not None:
1094
+ return _engine
1095
+ if is_local_dev():
1096
+ cfg = get_local_dev_config()
1097
+ url = build_database_url(cfg["dbUser"], cfg["host"], cfg["port"], cfg["dbName"])
1098
+ ssl_args: dict = {}
1099
+ else:
1100
+ config = get_database_config(_runtime_config_key)
1101
+ url = build_database_url(
1102
+ config["dbUser"],
1103
+ config["hostname"],
1104
+ config["port"],
1105
+ config["database"],
1106
+ )
1107
+ ssl_args = {"ssl": ssl.create_default_context()}
1108
+ _engine = create_async_engine(url, connect_args=ssl_args)
1109
+
1110
+ @event.listens_for(_engine.sync_engine, "do_connect")
1111
+ def provide_password(_dialect, _connection_record, _cargs, connection_params):
1112
+ if is_local_dev():
1113
+ connection_params["password"] = get_local_dev_config()["dbPassword"]
1114
+ else:
1115
+ config = get_database_config(_runtime_config_key)
1116
+ connection_params["password"] = boto3.client(
1117
+ "rds",
1118
+ region_name=config["region"],
1119
+ ).generate_db_auth_token(
1120
+ DBHostname=config["hostname"],
1121
+ Port=config["port"],
1122
+ DBUsername=config["dbUser"],
1123
+ )
1124
+
1125
+ return _engine
1126
+
1127
+
1128
+ @asynccontextmanager
1129
+ async def session_context() -> AsyncGenerator[AsyncSession]:
1130
+ async with AsyncSession(get_engine()) as session:
1131
+ yield session
1132
+ "
1133
+ `;
1134
+
1135
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/create_db_user_handler.py 1`] = `
1136
+ "import asyncio
1137
+ import secrets
1138
+ import ssl
1139
+ from typing import Any
1140
+
1141
+ import asyncpg
1142
+
1143
+ from .utils import get_database_secret, with_connection_retry
1144
+
1145
+
1146
+ async def _ensure_database_user(db_user: str) -> None:
1147
+ secret = get_database_secret()
1148
+ conn = await asyncpg.connect(
1149
+ host=secret["host"],
1150
+ port=int(secret["port"]),
1151
+ database=secret["dbname"],
1152
+ user=secret["username"],
1153
+ password=secret["password"],
1154
+ ssl=ssl.create_default_context(),
1155
+ )
1156
+ try:
1157
+ quoted = await conn.fetchrow(
1158
+ "SELECT quote_ident($1) AS role_q, quote_ident($2) AS db_q",
1159
+ db_user,
1160
+ secret["dbname"],
1161
+ )
1162
+ role_q, db_q = quoted["role_q"], quoted["db_q"]
1163
+ row = await conn.fetchrow("SELECT 1 FROM pg_roles WHERE rolname = $1", db_user)
1164
+ if row is None:
1165
+ await conn.execute(f"CREATE ROLE {role_q} WITH LOGIN")
1166
+ await conn.execute(f"""
1167
+ ALTER ROLE {role_q} WITH LOGIN;
1168
+ GRANT CONNECT ON DATABASE {db_q} TO {role_q};
1169
+ GRANT USAGE ON SCHEMA public TO {role_q};
1170
+ GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO {role_q};
1171
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO {role_q};
1172
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public
1173
+ GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO {role_q};
1174
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public
1175
+ GRANT USAGE, SELECT ON SEQUENCES TO {role_q};
1176
+ GRANT rds_iam TO {role_q};
1177
+ """)
1178
+ finally:
1179
+ await conn.close()
1180
+
1181
+
1182
+ _PHYSICAL_RESOURCE_ID_PREFIX = "db-user:"
1183
+
1184
+
1185
+ def _resolve_db_user(physical_resource_id: str | None) -> str:
1186
+ if physical_resource_id and physical_resource_id.startswith(_PHYSICAL_RESOURCE_ID_PREFIX):
1187
+ return physical_resource_id[len(_PHYSICAL_RESOURCE_ID_PREFIX) :]
1188
+ return f"db_{secrets.token_hex(8)}"
1189
+
1190
+
1191
+ def handler(event: dict[str, Any], _context: Any) -> dict[str, Any]:
1192
+ db_user = _resolve_db_user(event.get("PhysicalResourceId"))
1193
+
1194
+ if event.get("RequestType") != "Delete":
1195
+ with_connection_retry(lambda: asyncio.run(_ensure_database_user(db_user)))
1196
+
1197
+ return {
1198
+ "PhysicalResourceId": f"{_PHYSICAL_RESOURCE_ID_PREFIX}{db_user}",
1199
+ "Data": {"dbUser": db_user},
1200
+ }
1201
+ "
1202
+ `;
1203
+
1204
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/migration_handler.py 1`] = `
1205
+ "import asyncio
1206
+ import ssl
1207
+
1208
+ from alembic import command
1209
+ from alembic.config import Config
1210
+ from sqlalchemy.ext.asyncio import create_async_engine
1211
+ from sqlalchemy.pool import NullPool
1212
+
1213
+ from .utils import build_database_url, get_database_secret, with_connection_retry
1214
+
1215
+
1216
+ def _apply_migrations(sync_conn, alembic_cfg: Config) -> None:
1217
+ alembic_cfg.attributes["connection"] = sync_conn
1218
+ command.upgrade(alembic_cfg, "head")
1219
+
1220
+
1221
+ async def _run_migrations() -> None:
1222
+ secret = get_database_secret()
1223
+ database_url = build_database_url(
1224
+ secret["username"],
1225
+ secret["host"],
1226
+ secret["port"],
1227
+ secret["dbname"],
1228
+ password=secret["password"],
1229
+ )
1230
+ alembic_cfg = Config("alembic.ini")
1231
+ engine = create_async_engine(
1232
+ database_url,
1233
+ poolclass=NullPool,
1234
+ connect_args={"ssl": ssl.create_default_context()},
1235
+ )
1236
+ try:
1237
+ async with engine.begin() as conn:
1238
+ await conn.run_sync(lambda c: _apply_migrations(c, alembic_cfg))
1239
+ finally:
1240
+ await engine.dispose()
1241
+
1242
+
1243
+ def handler(_event, _context):
1244
+ with_connection_retry(lambda: asyncio.run(_run_migrations()))
1245
+ "
1246
+ `;
1247
+
1248
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/models/__init__.py 1`] = `
1249
+ "from .example import ExampleModel
1250
+
1251
+ __all__ = ["ExampleModel"]
1252
+ "
1253
+ `;
1254
+
1255
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/models/example.py 1`] = `
1256
+ "from sqlalchemy import Column, String
1257
+ from sqlmodel import Field, SQLModel
1258
+
1259
+
1260
+ class ExampleModel(SQLModel, table=True):
1261
+ id: int | None = Field(default=None, primary_key=True)
1262
+ name: str = Field(sa_column=Column(String(255), nullable=False))
1263
+ description: str | None = Field(default=None, sa_column=Column(String(255), nullable=True))
1264
+ "
1265
+ `;
1266
+
1267
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic > packages/db/proj_db/utils.py 1`] = `
1268
+ "import json
1269
+ import os
1270
+ import time
1271
+ from collections.abc import Callable
1272
+ from typing import Any
1273
+
1274
+ import boto3
1275
+ from aws_lambda_powertools.utilities.parameters import AppConfigProvider
1276
+ from sqlalchemy import URL
1277
+
1278
+ DatabaseConfig = dict[str, Any]
1279
+ DatabaseSecret = dict[str, Any]
1280
+
1281
+
1282
+ def build_database_url(
1283
+ username: str,
1284
+ host: str,
1285
+ port: int,
1286
+ database: str,
1287
+ password: str | None = None,
1288
+ ) -> URL:
1289
+ return URL.create(
1290
+ drivername="postgresql+asyncpg",
1291
+ username=username,
1292
+ password=password,
1293
+ host=host,
1294
+ port=port,
1295
+ database=database,
1296
+ )
1297
+
1298
+
1299
+ def is_local_dev() -> bool:
1300
+ return os.environ.get("LOCAL_DEV") == "true"
1301
+
1302
+
1303
+ def get_local_dev_config() -> dict:
1304
+ config_path = os.path.join(os.path.dirname(__file__), "..", "config.json")
1305
+ with open(config_path) as f:
1306
+ return json.load(f)["localDev"]
1307
+
1308
+
1309
+ def get_database_secret() -> DatabaseSecret:
1310
+ """Read the admin credentials secret.
1311
+
1312
+ RDS-managed secrets hold only \`username\` and \`password\`, so the host, port
1313
+ and database name are taken from the environment when the secret omits them.
1314
+ """
1315
+ secret_arn = os.environ.get("DATABASE_SECRET_ARN")
1316
+ if not secret_arn:
1317
+ raise ValueError("Missing required environment variable DATABASE_SECRET_ARN.")
1318
+ client = boto3.client("secretsmanager")
1319
+ response = client.get_secret_value(SecretId=secret_arn)
1320
+ secret = json.loads(response["SecretString"])
1321
+
1322
+ for key, env_var in (("host", "DATABASE_HOST"), ("port", "DATABASE_PORT"), ("dbname", "DATABASE_NAME")):
1323
+ value = os.environ.get(env_var)
1324
+ if value:
1325
+ secret[key] = value
1326
+ if secret.get(key) is None:
1327
+ raise ValueError(f"Database secret is missing {key} and no override was provided in {env_var}.")
1328
+
1329
+ return secret
1330
+
1331
+
1332
+ _database_config: dict[str, DatabaseConfig] = {}
1333
+
1334
+
1335
+ def get_database_config(runtime_config_key: str) -> DatabaseConfig:
1336
+ if runtime_config_key not in _database_config:
1337
+ app_id = os.environ.get("RUNTIME_CONFIG_APP_ID")
1338
+ if not app_id:
1339
+ raise ValueError("Missing required environment variable RUNTIME_CONFIG_APP_ID.")
1340
+ provider = AppConfigProvider(application=app_id, environment="default")
1341
+ config = provider.get("database", transform="json")
1342
+ if not isinstance(config, dict):
1343
+ raise ValueError("Unexpected RuntimeConfig format: expected JSON object.")
1344
+ db_config = config.get(runtime_config_key)
1345
+ if not db_config:
1346
+ raise ValueError(f"RuntimeConfig is missing database.{runtime_config_key}.")
1347
+ _database_config[runtime_config_key] = db_config
1348
+ return _database_config[runtime_config_key]
1349
+
1350
+
1351
+ _TRANSIENT_ERROR_PATTERNS = [
1352
+ "timeout",
1353
+ "connection refused",
1354
+ "could not connect",
1355
+ "connection reset",
1356
+ "connection timed out",
1357
+ "operationalerror",
1358
+ "password authentication failed",
1359
+ "access denied",
1360
+ "temporary failure",
1361
+ ]
1362
+
1363
+
1364
+ def is_transient_connection_error(error: Exception) -> bool:
1365
+ error_str = str(error).lower()
1366
+ return any(p in error_str for p in _TRANSIENT_ERROR_PATTERNS)
1367
+
1368
+
1369
+ def with_connection_retry[T](
1370
+ fn: Callable[[], T],
1371
+ max_attempts: int = 6,
1372
+ delay_seconds: float = 10.0,
1373
+ ) -> T:
1374
+ for attempt in range(1, max_attempts + 1):
1375
+ try:
1376
+ return fn()
1377
+ except Exception as e:
1378
+ if attempt == max_attempts or not is_transient_connection_error(e):
1379
+ raise
1380
+ wait = delay_seconds * attempt
1381
+ print(f"Transient connection error (attempt {attempt}/{max_attempts}), retrying in {wait:.0f}s: {e}")
1382
+ time.sleep(wait)
1383
+ raise RuntimeError("unreachable")
1384
+ "
1385
+ `;
1386
+
1387
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 1`] = `
1388
+ "[alembic]
1389
+ script_location = migrations
1390
+ file_template = %%(year)d%%(month).2d%%(day).2d_%%(hour).2d%%(minute).2d_%%(rev)s_%%(slug)s
1391
+ prepend_sys_path = .
1392
+
1393
+ [loggers]
1394
+ keys = root,sqlalchemy,alembic
1395
+
1396
+ [handlers]
1397
+ keys = console
1398
+
1399
+ [formatters]
1400
+ keys = generic
1401
+
1402
+ [logger_root]
1403
+ level = WARN
1404
+ handlers = console
1405
+ qualname =
1406
+
1407
+ [logger_sqlalchemy]
1408
+ level = WARN
1409
+ handlers =
1410
+ qualname = sqlalchemy.engine
1411
+
1412
+ [logger_alembic]
1413
+ level = INFO
1414
+ handlers =
1415
+ qualname = alembic
1416
+
1417
+ [handler_console]
1418
+ class = StreamHandler
1419
+ args = (sys.stderr,)
1420
+ level = NOTSET
1421
+ formatter = generic
1422
+
1423
+ [formatter_generic]
1424
+ format = %(levelname)-5.5s [%(name)s] %(message)s
1425
+ datefmt = %H:%M:%S
1426
+ "
1427
+ `;
1428
+
1429
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 2`] = `
1430
+ "FROM public.ecr.aws/lambda/python:3.14
1431
+
1432
+ # Patch OS packages beyond the base image's pinned release so the image is
1433
+ # free of known HIGH/CRITICAL vulnerabilities
1434
+ RUN microdnf upgrade -y --releasever latest && microdnf clean all
1435
+
1436
+ WORKDIR \${LAMBDA_TASK_ROOT}
1437
+
1438
+ COPY . .
1439
+
1440
+ ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /etc/pki/ca-trust/source/anchors/global-bundle.pem
1441
+ RUN update-ca-trust
1442
+
1443
+ CMD ["proj_db.migration_handler.handler"]
1444
+ "
1445
+ `;
1446
+
1447
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 3`] = `
1448
+ "FROM public.ecr.aws/lambda/python:3.14
1449
+
1450
+ # Patch OS packages beyond the base image's pinned release so the image is
1451
+ # free of known HIGH/CRITICAL vulnerabilities
1452
+ RUN microdnf upgrade -y --releasever latest && microdnf clean all
1453
+
1454
+ WORKDIR \${LAMBDA_TASK_ROOT}
1455
+
1456
+ COPY . .
1457
+
1458
+ ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /etc/pki/ca-trust/source/anchors/global-bundle.pem
1459
+ RUN update-ca-trust
1460
+
1461
+ CMD ["proj_db.create_db_user_handler.handler"]
1462
+ "
1463
+ `;
1464
+
1465
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 4`] = `
1466
+ "{
1467
+ "runtimeConfigKey": "Db",
1468
+ "localDev": {
1469
+ "containerEngine": "docker",
1470
+ "containerName": "proj-database_name",
1471
+ "image": "public.ecr.aws/docker/library/postgres:17.7",
1472
+ "port": 5432,
1473
+ "host": "localhost",
1474
+ "dbName": "database_name",
1475
+ "dbUser": "dbadmin",
1476
+ "dbPassword": "password",
1477
+ "dbEngine": "postgres"
1478
+ }
1479
+ }
1480
+ "
1481
+ `;
1482
+
1483
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 5`] = `
1484
+ "[tool.coverage.run]
1485
+ branch = true
1486
+ source = [ "proj_db" ]
1487
+
1488
+ [tool.coverage.report]
1489
+ exclude_lines = [ "if TYPE_CHECKING:" ]
1490
+ show_missing = true
1491
+
1492
+ [tool.pytest.ini_options]
1493
+ addopts = """
1494
+ --cov
1495
+ --cov-report html:'../../coverage/packages/db/html'
1496
+ --cov-report xml:'../../coverage/packages/db/coverage.xml'
1497
+ --html='../../reports/packages/db/unittests/html/index.html'
1498
+ --junitxml='../../reports/packages/db/unittests/junit.xml'
1499
+ """
1500
+
1501
+ [tool.hatch.build.targets.wheel]
1502
+ packages = [ "proj_db" ]
1503
+
1504
+ [tool.hatch.metadata]
1505
+ allow-direct-references = true
1506
+
1507
+ [tool.ruff]
1508
+ exclude = [ ".ruff_cache", ".svn", ".tox", ".venv", "dist" ]
1509
+ line-length = 120
1510
+ indent-width = 4
1511
+
1512
+ [tool.ruff.lint]
1513
+ select = [ "E", "F", "UP", "B", "SIM", "I" ]
1514
+ ignore = [ ]
1515
+ fixable = [ "ALL" ]
1516
+ unfixable = [ ]
1517
+
1518
+ [project]
1519
+ name = "proj-db"
1520
+ version = "1.0.0"
1521
+ description = "Automatically generated by Nx."
1522
+ requires-python = ">=3.14"
1523
+ readme = "README.md"
1524
+ dependencies = [
1525
+ "sqlmodel==0.0.39",
1526
+ "alembic==1.19.1",
1527
+ "greenlet==3.5.5",
1528
+ "asyncpg==0.31.0",
1529
+ "boto3==1.43.82",
1530
+ "aws-lambda-powertools==3.34.0"
1531
+ ]
1532
+
1533
+ [build-system]
1534
+ requires = [ "hatchling" ]
1535
+ build-backend = "hatchling.build"
1536
+ "
1537
+ `;
1538
+
1539
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 6`] = `
1540
+ "import * as path from 'path';
1541
+ import * as url from 'url';
1542
+ import { readFileSync } from 'fs';
1543
+ import { Construct } from 'constructs';
1544
+ import { Platform } from 'aws-cdk-lib/aws-ecr-assets';
1545
+ import {
1546
+ DockerImageCode,
1547
+ DockerImageFunction,
1548
+ Function,
1549
+ FunctionOptions,
1550
+ } from 'aws-cdk-lib/aws-lambda';
1551
+ import {
1552
+ AuroraDatabase,
1553
+ AuroraDatabaseEngines,
1554
+ AuroraDatabaseProps,
1555
+ } from '../../core/rdb/aurora.js';
1556
+ import { findWorkspaceRoot } from '../../core/workspace.js';
1557
+
1558
+ const { runtimeConfigKey } = JSON.parse(
1559
+ readFileSync(
1560
+ path.join(
1561
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
1562
+ 'packages/db/config.json',
1563
+ ),
1564
+ 'utf-8',
1565
+ ),
1566
+ ) as { runtimeConfigKey: string };
1567
+
1568
+ const migrationBundleDir = path.join(
1569
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
1570
+ 'dist/packages/db/docker/migration',
1571
+ );
1572
+
1573
+ const createDbUserBundleDir = path.join(
1574
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
1575
+ 'dist/packages/db/docker/create-db-user',
1576
+ );
1577
+
1578
+ export type DbProps = Omit<
1579
+ AuroraDatabaseProps,
1580
+ 'databaseName' | 'adminUser' | 'runtimeConfigKey' | 'engine'
1581
+ >;
1582
+
1583
+ /**
1584
+ * CDK construct that provisions an Aurora Serverless v2 cluster.
1585
+ */
1586
+ export class Db extends AuroraDatabase {
1587
+ constructor(scope: Construct, id: string, props: DbProps) {
1588
+ super(scope, id, {
1589
+ ...props,
1590
+ databaseName: 'database_name',
1591
+ adminUser: 'databaseUser',
1592
+ runtimeConfigKey,
1593
+ engine: AuroraDatabaseEngines.postgres({}),
1594
+ });
1595
+ }
1596
+
1597
+ protected override createDbUserHandler(baseProps: FunctionOptions): Function {
1598
+ return new DockerImageFunction(this, 'CreateDbUserHandler', {
1599
+ ...baseProps,
1600
+ code: DockerImageCode.fromImageAsset(createDbUserBundleDir, {
1601
+ platform: Platform.LINUX_ARM64,
1602
+ }),
1603
+ });
1604
+ }
1605
+
1606
+ protected override createMigrationHandler(
1607
+ baseProps: FunctionOptions,
1608
+ ): Function {
1609
+ return new DockerImageFunction(this, 'MigrationHandler', {
1610
+ ...baseProps,
1611
+ code: DockerImageCode.fromImageAsset(migrationBundleDir, {
1612
+ platform: Platform.LINUX_ARM64,
1613
+ }),
1614
+ });
1615
+ }
1616
+ }
1617
+ "
1618
+ `;
1619
+
1620
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 7`] = `
1621
+ "import asyncio
1622
+ import secrets
1623
+ import ssl
1624
+ from typing import Any
1625
+
1626
+ import asyncpg
1627
+
1628
+ from .utils import get_database_secret, with_connection_retry
1629
+
1630
+
1631
+ async def _ensure_database_user(db_user: str) -> None:
1632
+ secret = get_database_secret()
1633
+ conn = await asyncpg.connect(
1634
+ host=secret["host"],
1635
+ port=int(secret["port"]),
1636
+ database=secret["dbname"],
1637
+ user=secret["username"],
1638
+ password=secret["password"],
1639
+ ssl=ssl.create_default_context(),
1640
+ )
1641
+ try:
1642
+ quoted = await conn.fetchrow(
1643
+ "SELECT quote_ident($1) AS role_q, quote_ident($2) AS db_q",
1644
+ db_user,
1645
+ secret["dbname"],
1646
+ )
1647
+ role_q, db_q = quoted["role_q"], quoted["db_q"]
1648
+ row = await conn.fetchrow("SELECT 1 FROM pg_roles WHERE rolname = $1", db_user)
1649
+ if row is None:
1650
+ await conn.execute(f"CREATE ROLE {role_q} WITH LOGIN")
1651
+ await conn.execute(f"""
1652
+ ALTER ROLE {role_q} WITH LOGIN;
1653
+ GRANT CONNECT ON DATABASE {db_q} TO {role_q};
1654
+ GRANT USAGE ON SCHEMA public TO {role_q};
1655
+ GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO {role_q};
1656
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO {role_q};
1657
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public
1658
+ GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO {role_q};
1659
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public
1660
+ GRANT USAGE, SELECT ON SEQUENCES TO {role_q};
1661
+ GRANT rds_iam TO {role_q};
1662
+ """)
1663
+ finally:
1664
+ await conn.close()
1665
+
1666
+
1667
+ _PHYSICAL_RESOURCE_ID_PREFIX = "db-user:"
1668
+
1669
+
1670
+ def _resolve_db_user(physical_resource_id: str | None) -> str:
1671
+ if physical_resource_id and physical_resource_id.startswith(_PHYSICAL_RESOURCE_ID_PREFIX):
1672
+ return physical_resource_id[len(_PHYSICAL_RESOURCE_ID_PREFIX) :]
1673
+ return f"db_{secrets.token_hex(8)}"
1674
+
1675
+
1676
+ def handler(event: dict[str, Any], _context: Any) -> dict[str, Any]:
1677
+ db_user = _resolve_db_user(event.get("PhysicalResourceId"))
1678
+
1679
+ if event.get("RequestType") != "Delete":
1680
+ with_connection_retry(lambda: asyncio.run(_ensure_database_user(db_user)))
1681
+
1682
+ return {
1683
+ "PhysicalResourceId": f"{_PHYSICAL_RESOURCE_ID_PREFIX}{db_user}",
1684
+ "Data": {"dbUser": db_user},
1685
+ }
1686
+ "
1687
+ `;
1688
+
1689
+ exports[`py#rdb generator > should generate a PostgreSQL SQLModel project with Alembic 8`] = `
1690
+ "import { CfnOutput, Duration, RemovalPolicy, Stack } from 'aws-cdk-lib';
1691
+ import { CustomResource } from 'aws-cdk-lib';
1692
+ import { IConnectable, IVpc, Port, SubnetType } from 'aws-cdk-lib/aws-ec2';
1693
+ import { IGrantable, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';
1694
+ import { Key } from 'aws-cdk-lib/aws-kms';
1695
+ import {
1696
+ Architecture,
1697
+ Function,
1698
+ FunctionOptions,
1699
+ Tracing,
1700
+ } from 'aws-cdk-lib/aws-lambda';
1701
+ import {
1702
+ AuroraMysqlEngineVersion,
1703
+ AuroraPostgresEngineVersion,
1704
+ ClusterInstance,
1705
+ Credentials,
1706
+ DatabaseCluster,
1707
+ DatabaseClusterEngine,
1708
+ DatabaseClusterProps,
1709
+ DatabaseProxy,
1710
+ DefaultAuthScheme,
1711
+ IClusterEngine,
1712
+ } from 'aws-cdk-lib/aws-rds';
1713
+ import { Provider } from 'aws-cdk-lib/custom-resources';
1714
+ import { Trigger } from 'aws-cdk-lib/triggers';
1715
+ import { Construct } from 'constructs';
1716
+ import { RuntimeConfig } from '../runtime-config.js';
1717
+
1718
+ export type AuroraDatabaseEngineVersion =
1719
+ | AuroraMysqlEngineVersion
1720
+ | AuroraPostgresEngineVersion;
1721
+
1722
+ export interface AuroraDatabaseEngine {
1723
+ /**
1724
+ * Discriminant identifying the engine type.
1725
+ */
1726
+ readonly type: 'mysql' | 'postgres';
1727
+
1728
+ /**
1729
+ * Default Aurora engine version used when one is not explicitly provided.
1730
+ */
1731
+ readonly defaultVersion: AuroraDatabaseEngineVersion;
1732
+
1733
+ /**
1734
+ * Builds the CDK cluster engine for the provided engine version.
1735
+ */
1736
+ clusterEngine(version: AuroraDatabaseEngineVersion): IClusterEngine;
1737
+ }
1738
+
1739
+ export class AuroraDatabaseEngines {
1740
+ public static mysql({
1741
+ defaultVersion = AuroraMysqlEngineVersion.VER_3_12_0,
1742
+ }: {
1743
+ defaultVersion?: AuroraMysqlEngineVersion;
1744
+ }): AuroraDatabaseEngine {
1745
+ return {
1746
+ type: 'mysql',
1747
+ defaultVersion,
1748
+ clusterEngine: (version) =>
1749
+ DatabaseClusterEngine.auroraMysql({
1750
+ version: version as AuroraMysqlEngineVersion,
1751
+ }),
1752
+ };
1753
+ }
1754
+
1755
+ public static postgres({
1756
+ defaultVersion = AuroraPostgresEngineVersion.VER_17_7,
1757
+ }: {
1758
+ defaultVersion?: AuroraPostgresEngineVersion;
1759
+ }): AuroraDatabaseEngine {
1760
+ return {
1761
+ type: 'postgres',
1762
+ defaultVersion,
1763
+ clusterEngine: (version) =>
1764
+ DatabaseClusterEngine.auroraPostgres({
1765
+ version: version as AuroraPostgresEngineVersion,
1766
+ }),
1767
+ };
1768
+ }
1769
+ }
1770
+
1771
+ type _AuroraDatabaseProps = Omit<
1772
+ DatabaseClusterProps,
1773
+ | 'credentials'
1774
+ | 'defaultDatabaseName'
1775
+ | 'engine'
1776
+ | 'iamAuthentication'
1777
+ | 'instanceProps'
1778
+ | 'writer'
1779
+ >;
1780
+
1781
+ export interface AuroraDatabaseProps extends _AuroraDatabaseProps {
1782
+ /**
1783
+ * VPC where the Aurora cluster will be deployed.
1784
+ */
1785
+ readonly vpc: IVpc;
1786
+
1787
+ /**
1788
+ * Aurora engine preset used to build the cluster.
1789
+ */
1790
+ readonly engine: AuroraDatabaseEngine;
1791
+
1792
+ /**
1793
+ * The engine version to deploy.
1794
+ *
1795
+ * @default - engine.defaultVersion
1796
+ */
1797
+ readonly engineVersion?: AuroraDatabaseEngineVersion;
1798
+
1799
+ /**
1800
+ * Admin username used when generating credentials.
1801
+ */
1802
+ readonly adminUser: string;
1803
+
1804
+ /**
1805
+ * The initial database created in the cluster.
1806
+ */
1807
+ readonly databaseName: string;
1808
+
1809
+ /**
1810
+ * RuntimeConfig key used under the \`database\` namespace.
1811
+ */
1812
+ readonly runtimeConfigKey: string;
1813
+
1814
+ /**
1815
+ * Writer instance for the Aurora cluster.
1816
+ */
1817
+ readonly writer?: DatabaseClusterProps['writer'];
1818
+
1819
+ /**
1820
+ * Whether to provision an RDS Proxy in front of the Aurora cluster.
1821
+ *
1822
+ * @default true
1823
+ */
1824
+ readonly enableRdsProxy?: boolean;
1825
+
1826
+ /**
1827
+ * Whether to enable automatic credential rotation for the admin secret.
1828
+ *
1829
+ * @default true
1830
+ */
1831
+ readonly enableCredentialRotation?: boolean;
1832
+
1833
+ /**
1834
+ * Whether to enable deletion protection on the Aurora cluster.
1835
+ *
1836
+ * @default true
1837
+ */
1838
+ readonly deletionProtection?: boolean;
1839
+
1840
+ /**
1841
+ * Removal policy applied to the Aurora cluster.
1842
+ *
1843
+ * @default RemovalPolicy.RETAIN
1844
+ */
1845
+ readonly removalPolicy?: RemovalPolicy;
1846
+
1847
+ /**
1848
+ * Whether to enable automatic key rotation on the KMS key used to encrypt the Aurora cluster and its credentials secret.
1849
+ *
1850
+ * @default true
1851
+ */
1852
+ readonly enableKeyRotation?: boolean;
1853
+
1854
+ /**
1855
+ * Whether to export Aurora engine logs to CloudWatch Logs.
1856
+ * See https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html
1857
+ *
1858
+ * PostgreSQL logs DDL statements only (log_statement=ddl); MySQL enables
1859
+ * Advanced Auditing scoped to connections and DDL (server_audit_events=CONNECT,QUERY_DDL).
1860
+ * Neither logs statement parameter values, to avoid leaking PII into log data.
1861
+ *
1862
+ * @default true
1863
+ */
1864
+ readonly enableCloudwatchLogs?: boolean;
1865
+
1866
+ /**
1867
+ * Whether to enable Performance Insights on the Aurora writer instance.
1868
+ *
1869
+ * @default true
1870
+ */
1871
+ readonly enablePerformanceInsights?: boolean;
1872
+
1873
+ /**
1874
+ * Minimum Aurora Serverless v2 ACUs.
1875
+ *
1876
+ * @default 0.5
1877
+ */
1878
+ readonly serverlessV2MinCapacity?: number;
1879
+
1880
+ /**
1881
+ * Maximum Aurora Serverless v2 ACUs.
1882
+ *
1883
+ * @default 4
1884
+ */
1885
+ readonly serverlessV2MaxCapacity?: number;
1886
+ }
1887
+
1888
+ /**
1889
+ * Reusable Aurora database construct that supports different Aurora engines
1890
+ * through typed engine presets.
1891
+ */
1892
+ export abstract class AuroraDatabase extends Construct {
1893
+ public readonly cluster: DatabaseCluster;
1894
+ public readonly proxy?: DatabaseProxy;
1895
+ private readonly adminUser: string;
1896
+ private readonly dbUser: string;
1897
+
1898
+ constructor(
1899
+ scope: Construct,
1900
+ id: string,
1901
+ {
1902
+ vpc,
1903
+ adminUser,
1904
+ databaseName,
1905
+ runtimeConfigKey,
1906
+ vpcSubnets,
1907
+ writer,
1908
+ enableRdsProxy = true,
1909
+ enableCredentialRotation = true,
1910
+ deletionProtection = true,
1911
+ removalPolicy = RemovalPolicy.RETAIN,
1912
+ enableKeyRotation = true,
1913
+ enableCloudwatchLogs = true,
1914
+ enablePerformanceInsights = true,
1915
+ serverlessV2MinCapacity = 0.5,
1916
+ serverlessV2MaxCapacity = 4,
1917
+ engine,
1918
+ engineVersion,
1919
+ ...clusterProps
1920
+ }: AuroraDatabaseProps,
1921
+ ) {
1922
+ super(scope, id);
1923
+
1924
+ this.adminUser = adminUser;
1925
+
1926
+ const key = new Key(this, 'EncryptionKey', { enableKeyRotation });
1927
+ this.cluster = new DatabaseCluster(this, 'DatabaseCluster', {
1928
+ ...clusterProps,
1929
+ vpc,
1930
+ vpcSubnets,
1931
+ engine: engine.clusterEngine(engineVersion ?? engine.defaultVersion),
1932
+ serverlessV2MinCapacity,
1933
+ serverlessV2MaxCapacity,
1934
+ writer:
1935
+ writer ??
1936
+ ClusterInstance.serverlessV2('writer', {
1937
+ enablePerformanceInsights,
1938
+ performanceInsightEncryptionKey: enablePerformanceInsights
1939
+ ? key
1940
+ : undefined,
1941
+ }),
1942
+ credentials: Credentials.fromGeneratedSecret(adminUser, {
1943
+ encryptionKey: key,
1944
+ }),
1945
+ iamAuthentication: true,
1946
+ monitoringInterval: Duration.seconds(5),
1947
+ cloudwatchLogsExports: enableCloudwatchLogs
1948
+ ? engine.type === 'mysql'
1949
+ ? ['audit', 'error']
1950
+ : ['postgresql']
1951
+ : undefined,
1952
+ parameters: enableCloudwatchLogs
1953
+ ? engine.type === 'mysql'
1954
+ ? {
1955
+ server_audit_logging: '1',
1956
+ server_audit_events: 'CONNECT,QUERY_DDL',
1957
+ }
1958
+ : // Only safe statement-at-a-time; a multi-statement batch mixing
1959
+ // DDL with DML (e.g. one \`psql -c "a;b;c"\` call) logs the whole
1960
+ // raw text verbatim, including any literal DML values.
1961
+ { log_statement: 'ddl' }
1962
+ : undefined,
1963
+ defaultDatabaseName: databaseName,
1964
+ storageEncrypted: true,
1965
+ storageEncryptionKey: key,
1966
+ deletionProtection,
1967
+ removalPolicy,
1968
+ });
1969
+
1970
+ if (enableCredentialRotation) {
1971
+ this.cluster.addRotationSingleUser({
1972
+ automaticallyAfter: Duration.days(30),
1973
+ vpcSubnets: {
1974
+ subnetType: SubnetType.PRIVATE_WITH_EGRESS,
1975
+ },
1976
+ });
1977
+ }
1978
+
1979
+ const proxyRole = enableRdsProxy
1980
+ ? new Role(this, 'DatabaseProxyRole', {
1981
+ assumedBy: new ServicePrincipal('rds.amazonaws.com'),
1982
+ })
1983
+ : undefined;
1984
+
1985
+ if (enableRdsProxy) {
1986
+ this.proxy = this.cluster.addProxy('DatabaseProxy', {
1987
+ vpc,
1988
+ vpcSubnets,
1989
+ defaultAuthScheme: DefaultAuthScheme.IAM_AUTH,
1990
+ role: proxyRole,
1991
+ });
1992
+ }
1993
+
1994
+ const databaseHostname =
1995
+ this.proxy?.endpoint ?? this.cluster.clusterEndpoint.hostname;
1996
+ const databasePort = this.cluster.clusterEndpoint.port;
1997
+
1998
+ const commonProps: FunctionOptions = {
1999
+ vpc,
2000
+ timeout: Duration.minutes(5),
2001
+ tracing: Tracing.ACTIVE,
2002
+ architecture: Architecture.ARM_64,
2003
+ };
2004
+
2005
+ const createDbUserHandler = this.createDbUserHandler({
2006
+ ...commonProps,
2007
+ vpcSubnets: {
2008
+ subnetType: SubnetType.PRIVATE_WITH_EGRESS,
2009
+ },
2010
+ });
2011
+ createDbUserHandler.addEnvironment(
2012
+ 'DATABASE_SECRET_ARN',
2013
+ this.cluster.secret!.secretArn,
2014
+ );
2015
+ this.cluster.connections.allowDefaultPortFrom(
2016
+ createDbUserHandler,
2017
+ 'Allow the create-db-user handler to connect to the database',
2018
+ );
2019
+ this.grantSecretRead(createDbUserHandler);
2020
+
2021
+ const createDbUserProvider = new Provider(this, 'CreateDbUserProvider', {
2022
+ onEventHandler: createDbUserHandler,
2023
+ });
2024
+
2025
+ const createDbUserResource = new CustomResource(
2026
+ this,
2027
+ 'CreateDbUserResource',
2028
+ {
2029
+ serviceToken: createDbUserProvider.serviceToken,
2030
+ properties: {
2031
+ clusterIdentifier: this.cluster.clusterIdentifier,
2032
+ },
2033
+ },
2034
+ );
2035
+ createDbUserResource.node.addDependency(this.cluster);
2036
+ this.dbUser = createDbUserResource.getAttString('dbUser');
2037
+ if (this.proxy && proxyRole) {
2038
+ this.cluster.grantConnect(proxyRole, this.dbUser);
2039
+ }
2040
+
2041
+ const rc = RuntimeConfig.ensure(this);
2042
+ rc.set('database', runtimeConfigKey, {
2043
+ hostname: databaseHostname,
2044
+ port: databasePort,
2045
+ database: databaseName,
2046
+ adminUser: this.adminUser,
2047
+ dbUser: this.dbUser,
2048
+ region: Stack.of(this).region,
2049
+ });
2050
+
2051
+ const migrationHandler = this.createMigrationHandler({
2052
+ ...commonProps,
2053
+ memorySize: 1024,
2054
+ });
2055
+ migrationHandler.addEnvironment(
2056
+ 'DATABASE_SECRET_ARN',
2057
+ this.cluster.secret!.secretArn,
2058
+ );
2059
+ this.cluster.connections.allowDefaultPortFrom(migrationHandler);
2060
+ this.grantSecretRead(migrationHandler);
2061
+
2062
+ const migrationTrigger = new Trigger(this, 'MigrationTrigger', {
2063
+ handler: migrationHandler,
2064
+ });
2065
+ migrationTrigger.node.addDependency(createDbUserResource);
2066
+
2067
+ new CfnOutput(this, 'ClusterEndpoint', {
2068
+ value: this.cluster.clusterEndpoint.hostname,
2069
+ });
2070
+
2071
+ if (this.proxy?.endpoint) {
2072
+ new CfnOutput(this, 'ProxyEndpoint', {
2073
+ value: this.proxy?.endpoint,
2074
+ });
2075
+ }
2076
+ }
2077
+
2078
+ /**
2079
+ * Creates the Lambda handler used to create or reconcile the application database user.
2080
+ */
2081
+ protected abstract createDbUserHandler(baseProps: FunctionOptions): Function;
2082
+
2083
+ /**
2084
+ * Creates the Lambda handler used to run database migrations.
2085
+ */
2086
+ protected abstract createMigrationHandler(
2087
+ baseProps: FunctionOptions,
2088
+ ): Function;
2089
+
2090
+ public allowDefaultPortFrom(other: IConnectable, description?: string): void {
2091
+ if (this.proxy) {
2092
+ this.proxy.connections.allowFrom(
2093
+ other,
2094
+ Port.tcp(this.cluster.clusterEndpoint.port),
2095
+ description,
2096
+ );
2097
+ } else {
2098
+ this.cluster.connections.allowDefaultPortFrom(other, description);
2099
+ }
2100
+ }
2101
+
2102
+ public grantSecretRead(grantee: IGrantable) {
2103
+ return this.cluster.secret!.grantRead(grantee);
2104
+ }
2105
+
2106
+ public grantConnect(grantee: IGrantable) {
2107
+ return this.proxy
2108
+ ? this.proxy.grantConnect(grantee, this.dbUser)
2109
+ : this.cluster.grantConnect(grantee, this.dbUser);
2110
+ }
2111
+ }
2112
+ "
2113
+ `;