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