@aws/nx-plugin 1.0.0-rc.6 → 1.0.0-rc.60
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 +7104 -6167
- package/README.md +8 -7
- package/generators.json +145 -10
- package/migrations.json +111 -0
- package/package.json +41 -22
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +273 -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/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 +3 -10
- 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.js +2 -5
- package/src/index.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +91 -72
- package/src/infra/app/files/app/src/main.ts.template +1 -1
- package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
- package/src/infra/app/generator.d.ts +43 -0
- package/src/infra/app/generator.js +179 -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 +698 -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.js +5 -3
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +1 -1
- package/src/license/config.js +267 -242
- package/src/license/config.js.map +1 -1
- 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 +55 -62
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
- package/src/license/dependency-check/evaluator.js +40 -68
- 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.js +949 -336
- package/src/license/dependency-check/pre-approved.js.map +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.js +65 -68
- package/src/license/generator.js.map +1 -1
- package/src/license/index.js +3 -9
- package/src/license/index.js.map +1 -1
- package/src/license/known-exceptions.d.ts +1 -1
- package/src/license/known-exceptions.js +19 -13
- 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.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.js +149 -165
- package/src/mcp-server/generator-info.js.map +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 +1 -1
- package/src/mcp-server/tools/general-guidance.js +53 -31
- package/src/mcp-server/tools/general-guidance.js.map +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.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/gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
- package/src/migrations/latest/gateway-agent-targets/metadata.json +3 -0
- package/src/migrations/latest/gateway-agent-targets/migration.d.ts +6 -0
- package/src/migrations/latest/gateway-agent-targets/migration.js +217 -0
- package/src/migrations/latest/gateway-agent-targets/migration.js.map +1 -0
- package/src/migrations/latest/gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
- package/src/migrations/latest/gateway-cognito-passthrough/metadata.json +3 -0
- package/src/migrations/latest/gateway-cognito-passthrough/migration.d.ts +6 -0
- package/src/migrations/latest/gateway-cognito-passthrough/migration.js +195 -0
- package/src/migrations/latest/gateway-cognito-passthrough/migration.js.map +1 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/metadata.json +3 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.d.ts +6 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js +78 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +1 -0
- package/src/migrations/latest/strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
- package/src/migrations/latest/strip-pip-from-python-images/metadata.json +3 -0
- package/src/migrations/latest/strip-pip-from-python-images/migration.d.ts +6 -0
- package/src/migrations/latest/strip-pip-from-python-images/migration.js +91 -0
- package/src/migrations/latest/strip-pip-from-python-images/migration.js.map +1 -0
- package/src/migrations/latest/waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
- package/src/migrations/latest/waf-log-group-removal/metadata.json +3 -0
- package/src/migrations/latest/waf-log-group-removal/migration.d.ts +6 -0
- package/src/migrations/latest/waf-log-group-removal/migration.js +77 -0
- package/src/migrations/latest/waf-log-group-removal/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js +65 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js +108 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js +215 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js +93 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.d.ts +96 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js +670 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js +89 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js +449 -0
- package/src/migrations/v1.0.0-rc.57/ts-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.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.js +17 -21
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.spec.tsx +70 -0
- 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.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 +0 -6
- 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 +2 -2
- 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.js +437 -246
- package/src/open-api/utils/normalise.js.map +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.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 +99 -20
- package/src/preset/generator.d.ts +14 -1
- 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 +4 -1
- package/src/preset/schema.json +16 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +334 -0
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +734 -0
- package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.protocols.spec.ts.snap} +191 -315
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +190 -0
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +31 -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 +24 -0
- package/src/py/agent/a2a-connection/generator.js +145 -88
- 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 +1 -0
- package/src/py/agent/a2a-connection/schema.json +5 -0
- package/src/py/agent/files/a2a-langchain/main.py.template +89 -0
- package/src/py/agent/files/ag-ui-langchain/main.py.template +83 -0
- package/src/py/agent/files/common/agent.py.template +2 -0
- package/src/py/agent/files/common-langchain/agent.py.template +30 -0
- package/src/py/agent/files/deploy/Dockerfile.template +8 -1
- package/src/py/agent/files/http/init.py.template +7 -25
- package/src/py/agent/files/http/main.py.template +3 -4
- package/src/py/agent/files/http-langchain/main.py.template +84 -0
- 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 +146 -1
- package/src/py/agent/generator.js +406 -197
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +154 -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 +23 -0
- 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 +1 -0
- 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 +150 -1
- 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} +4 -4
- 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 +1 -0
- 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 +5 -1
- package/src/py/agent/schema.json +15 -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 +1 -0
- package/src/py/api/schema.json +5 -0
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1520 -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 +68 -0
- 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 +16 -1
- 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 +1 -0
- 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/generator.d.ts +21 -0
- package/src/py/lambda-function/generator.js +82 -62
- 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 +1 -0
- package/src/py/lambda-function/schema.json +5 -0
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +221 -21
- package/src/py/mcp-server/files/deploy/Dockerfile.template +8 -1
- package/src/py/mcp-server/generator.d.ts +60 -0
- package/src/py/mcp-server/generator.js +204 -131
- 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 +1 -0
- package/src/py/mcp-server/schema.json +6 -0
- package/src/py/project/generator.d.ts +27 -1
- 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 +5 -0
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2070 -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__/__init__.py.template +3 -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/config.json.template +14 -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 +95 -0
- package/src/py/rdb/generator.js +328 -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/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/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/{sdk/utils/ast.d.ts → src/sdk/utils/format.d.ts} +1 -2
- 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 +132 -32
- package/src/smithy/project/files/{build.Dockerfile.template → service/build.Dockerfile.template} +3 -6
- package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
- package/src/smithy/project/files/shapes/build.Dockerfile.template +33 -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/generator.d.ts +32 -0
- package/src/smithy/project/generator.js +101 -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 +15 -0
- 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 +847 -104
- package/src/smithy/ts/api/files/handler.ts.template +2 -2
- package/src/smithy/ts/api/files/local-server.ts.template +2 -2
- 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 +84 -0
- 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 +1 -0
- 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 +50 -0
- 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 +90 -1
- 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 +1 -0
- 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 +38 -1
- 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 +1452 -25
- 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 +46 -0
- package/src/ts/agent/a2a-connection/generator.js +110 -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 +1 -0
- package/src/ts/agent/a2a-connection/schema.json +5 -0
- package/src/ts/agent/files/a2a/index.ts.template +1 -1
- package/src/ts/agent/files/ag-ui/index.ts.template +36 -11
- 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/deploy/Dockerfile.template +13 -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 +197 -0
- package/src/ts/agent/generator.js +339 -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 +37 -0
- 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 +1 -0
- 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 +202 -1
- 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/{serve-local.d.ts → local-dev.d.ts} +2 -2
- 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 +1 -0
- 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 +4 -0
- package/src/ts/agent/schema.json +14 -0
- 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 +1 -0
- package/src/ts/api/schema.json +5 -0
- package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +14 -14
- package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +3 -2
- package/src/ts/astro-docs/generator.d.ts +38 -0
- 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.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 +400 -518
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
- 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 +1 -0
- 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 +41 -0
- package/src/ts/dynamodb/generator.js +106 -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.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 +1 -0
- 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 +2 -0
- 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.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.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 +38 -0
- 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 +1 -0
- package/src/ts/lambda-function/schema.json +5 -0
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -45
- package/src/ts/lib/biome.js +71 -35
- package/src/ts/lib/biome.js.map +1 -1
- package/src/ts/lib/generator.d.ts +7 -0
- 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 +13 -1
- 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 +10 -1
- package/src/ts/lib/vitest.js +42 -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 +13 -2
- package/src/ts/mcp-server/generator.d.ts +102 -0
- package/src/ts/mcp-server/generator.js +231 -148
- 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 +1 -0
- package/src/ts/mcp-server/schema.json +6 -0
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +27 -12
- 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.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 -73
- 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 +141 -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 +3 -0
- 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 +551 -642
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
- 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 +1 -0
- package/src/ts/rdb/agent-connection/schema.json +5 -0
- package/src/ts/rdb/files/Dockerfile.template +19 -1
- package/src/ts/rdb/files/config.json.template +14 -0
- 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/index.ts.template +1 -2
- 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 +109 -4
- package/src/ts/rdb/generator.js +257 -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.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 +1 -0
- 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 +1 -0
- package/src/ts/rdb/schema.json +7 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
- 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.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 +1381 -634
- package/src/ts/react-website/app/generator.d.ts +142 -2
- package/src/ts/react-website/app/generator.js +330 -206
- 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 +1 -1
- package/src/ts/react-website/app/schema.json +12 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +161 -26
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +48 -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 +25 -1
- 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 +1 -0
- 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.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.js +137 -60
- package/src/ts/sync/generator.js.map +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 +1 -1
- package/src/ts/website/app/schema.json +11 -6
- package/src/ts/website/auth/generator.d.ts +1 -1
- 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 +1 -0
- 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 +139 -26
- package/src/utils/agent-connection/agent-connection.js +500 -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 +33 -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 +99 -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-mcp/agentcore_mcp_transport.py.template +34 -0
- package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +6 -18
- 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 +66 -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/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 +54 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +153 -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 +170 -6
- 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/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 +212 -1
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +505 -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/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 +30 -2
- 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.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 +9 -0
- package/src/utils/ast.js +125 -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 +57 -47
- 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 +18 -2
- package/src/utils/config/index.js +5 -4
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.d.ts +8 -2
- 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 +87 -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 +1 -1
- 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 +1 -1
- package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +24 -17
- package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
- 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 +327 -127
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.d.ts +16 -5
- package/src/utils/fs.js +29 -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.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.js +12 -14
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +153 -24
- 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 +129 -12
- package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
- package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
- 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 +7 -1
- 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 +116 -0
- package/src/utils/migration-versions.js +186 -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 +74 -3
- 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.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 +17 -3
- 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 +12 -1
- 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 +4 -1
- 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/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 +304 -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 +206 -106
- package/src/utils/versions.js +238 -119
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +2 -2
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +207 -41
- package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
- package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +145 -93
- package/src/utils/website-constructs/website-constructs.d.ts +11 -0
- 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/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
- 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.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/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/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +0 -0
- /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -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} +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
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
IntegrationBuilder,
|
|
33
33
|
RestApiIntegration,
|
|
34
34
|
} from '../../core/api/utils.js';
|
|
35
|
+
import { findCloudFrontDomainNames } from '../../core/cloudfront.js';
|
|
35
36
|
import { AddCorsPreflightAspect, RestApi } from '../../core/api/rest-api.js';
|
|
36
37
|
import {
|
|
37
38
|
OPERATION_DETAILS,
|
|
@@ -86,7 +87,7 @@ export class TestApi<
|
|
|
86
87
|
return IntegrationBuilder.rest({
|
|
87
88
|
pattern: 'isolated',
|
|
88
89
|
operations: OPERATION_DETAILS,
|
|
89
|
-
defaultIntegrationOptions:
|
|
90
|
+
defaultIntegrationOptions: {
|
|
90
91
|
runtime: Runtime.NODEJS_LATEST,
|
|
91
92
|
handler: 'index.handler',
|
|
92
93
|
code: Code.fromAsset(
|
|
@@ -99,7 +100,7 @@ export class TestApi<
|
|
|
99
100
|
),
|
|
100
101
|
timeout: Duration.seconds(30),
|
|
101
102
|
tracing: Tracing.ACTIVE,
|
|
102
|
-
},
|
|
103
|
+
} as FunctionProps,
|
|
103
104
|
buildDefaultIntegration: (op, props: FunctionProps) => {
|
|
104
105
|
const handler = new Function(scope, \`TestApi\${op}Handler\`, props);
|
|
105
106
|
handler.addEnvironment(
|
|
@@ -127,6 +128,9 @@ export class TestApi<
|
|
|
127
128
|
authorizer: new CognitoUserPoolsAuthorizer(scope, 'TestApiAuthorizer', {
|
|
128
129
|
cognitoUserPools: [props.identity.userPool],
|
|
129
130
|
}),
|
|
131
|
+
// Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
|
|
132
|
+
// and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
|
|
133
|
+
authorizationScopes: ['openid', 'aws.cognito.signin.user.admin'],
|
|
130
134
|
},
|
|
131
135
|
deployOptions: {
|
|
132
136
|
tracingEnabled: true,
|
|
@@ -153,7 +157,9 @@ export class TestApi<
|
|
|
153
157
|
*
|
|
154
158
|
* Configures the provided CloudFront distribution domains or origin strings
|
|
155
159
|
* as the only permitted CORS origins in API Gateway preflight responses and the
|
|
156
|
-
* AWS Lambda integrations.
|
|
160
|
+
* AWS Lambda integrations. Any custom domain names (aliases) configured on a
|
|
161
|
+
* CloudFront distribution are included automatically alongside its default
|
|
162
|
+
* \`*.cloudfront.net\` domain.
|
|
157
163
|
*
|
|
158
164
|
* @param origins - The origin strings, CloudFront distributions, or objects containing a CloudFront distribution to grant CORS from
|
|
159
165
|
*/
|
|
@@ -164,12 +170,14 @@ export class TestApi<
|
|
|
164
170
|
| { cloudFrontDistribution: Distribution }
|
|
165
171
|
)[]
|
|
166
172
|
) {
|
|
167
|
-
const allowedOrigins = origins.
|
|
173
|
+
const allowedOrigins = origins.flatMap((origin) =>
|
|
168
174
|
typeof origin === 'string'
|
|
169
|
-
? origin
|
|
170
|
-
:
|
|
171
|
-
|
|
172
|
-
|
|
175
|
+
? [origin]
|
|
176
|
+
: findCloudFrontDomainNames(
|
|
177
|
+
'cloudFrontDistribution' in origin
|
|
178
|
+
? origin.cloudFrontDistribution
|
|
179
|
+
: origin,
|
|
180
|
+
).map((domain) => \`https://\${domain}\`),
|
|
173
181
|
);
|
|
174
182
|
|
|
175
183
|
this.allowedOrigins = allowedOrigins;
|
|
@@ -218,6 +226,7 @@ import {
|
|
|
218
226
|
IntegrationBuilder,
|
|
219
227
|
RestApiIntegration,
|
|
220
228
|
} from '../../core/api/utils.js';
|
|
229
|
+
import { findCloudFrontDomainNames } from '../../core/cloudfront.js';
|
|
221
230
|
import { AddCorsPreflightAspect, RestApi } from '../../core/api/rest-api.js';
|
|
222
231
|
import {
|
|
223
232
|
OPERATION_DETAILS,
|
|
@@ -266,7 +275,7 @@ export class TestApi<
|
|
|
266
275
|
return IntegrationBuilder.rest({
|
|
267
276
|
pattern: 'isolated',
|
|
268
277
|
operations: OPERATION_DETAILS,
|
|
269
|
-
defaultIntegrationOptions:
|
|
278
|
+
defaultIntegrationOptions: {
|
|
270
279
|
runtime: Runtime.NODEJS_LATEST,
|
|
271
280
|
handler: 'index.handler',
|
|
272
281
|
code: Code.fromAsset(
|
|
@@ -279,7 +288,7 @@ export class TestApi<
|
|
|
279
288
|
),
|
|
280
289
|
timeout: Duration.seconds(30),
|
|
281
290
|
tracing: Tracing.ACTIVE,
|
|
282
|
-
},
|
|
291
|
+
} as FunctionProps,
|
|
283
292
|
buildDefaultIntegration: (op, props: FunctionProps) => {
|
|
284
293
|
const handler = new Function(scope, \`TestApi\${op}Handler\`, props);
|
|
285
294
|
handler.addEnvironment(
|
|
@@ -330,7 +339,9 @@ export class TestApi<
|
|
|
330
339
|
*
|
|
331
340
|
* Configures the provided CloudFront distribution domains or origin strings
|
|
332
341
|
* as the only permitted CORS origins in API Gateway preflight responses and the
|
|
333
|
-
* AWS Lambda integrations.
|
|
342
|
+
* AWS Lambda integrations. Any custom domain names (aliases) configured on a
|
|
343
|
+
* CloudFront distribution are included automatically alongside its default
|
|
344
|
+
* \`*.cloudfront.net\` domain.
|
|
334
345
|
*
|
|
335
346
|
* @param origins - The origin strings, CloudFront distributions, or objects containing a CloudFront distribution to grant CORS from
|
|
336
347
|
*/
|
|
@@ -341,12 +352,14 @@ export class TestApi<
|
|
|
341
352
|
| { cloudFrontDistribution: Distribution }
|
|
342
353
|
)[]
|
|
343
354
|
) {
|
|
344
|
-
const allowedOrigins = origins.
|
|
355
|
+
const allowedOrigins = origins.flatMap((origin) =>
|
|
345
356
|
typeof origin === 'string'
|
|
346
|
-
? origin
|
|
347
|
-
:
|
|
348
|
-
|
|
349
|
-
|
|
357
|
+
? [origin]
|
|
358
|
+
: findCloudFrontDomainNames(
|
|
359
|
+
'cloudFrontDistribution' in origin
|
|
360
|
+
? origin.cloudFrontDistribution
|
|
361
|
+
: origin,
|
|
362
|
+
).map((domain) => \`https://\${domain}\`),
|
|
350
363
|
);
|
|
351
364
|
|
|
352
365
|
this.allowedOrigins = allowedOrigins;
|
|
@@ -400,11 +413,11 @@ terraform {
|
|
|
400
413
|
required_providers {
|
|
401
414
|
aws = {
|
|
402
415
|
source = "hashicorp/aws"
|
|
403
|
-
version = "
|
|
416
|
+
version = "6.57.1"
|
|
404
417
|
}
|
|
405
418
|
random = {
|
|
406
419
|
source = "hashicorp/random"
|
|
407
|
-
version = "
|
|
420
|
+
version = "3.9.0"
|
|
408
421
|
}
|
|
409
422
|
}
|
|
410
423
|
}
|
|
@@ -474,8 +487,6 @@ data "aws_caller_identity" "current" {}
|
|
|
474
487
|
|
|
475
488
|
# Resources
|
|
476
489
|
|
|
477
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
478
|
-
|
|
479
490
|
# REST API Gateway
|
|
480
491
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
481
492
|
name = var.api_name
|
|
@@ -492,10 +503,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
492
503
|
tags = var.tags
|
|
493
504
|
}
|
|
494
505
|
|
|
495
|
-
# Note: Deployment and
|
|
496
|
-
# after all methods and integrations are defined
|
|
497
|
-
|
|
498
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
506
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
507
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
499
508
|
|
|
500
509
|
# Gateway Response for CORS (4XX errors)
|
|
501
510
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -653,9 +662,7 @@ output "waf_web_acl_arn" {
|
|
|
653
662
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
654
663
|
}
|
|
655
664
|
|
|
656
|
-
# Note: Stage and
|
|
657
|
-
|
|
658
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement"
|
|
665
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module"
|
|
659
666
|
`;
|
|
660
667
|
|
|
661
668
|
exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform provider and None auth > none-auth-terraform.tf 1`] = `
|
|
@@ -665,7 +672,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
|
|
|
665
672
|
required_providers {
|
|
666
673
|
aws = {
|
|
667
674
|
source = "hashicorp/aws"
|
|
668
|
-
version = "
|
|
675
|
+
version = "6.57.1"
|
|
669
676
|
}
|
|
670
677
|
}
|
|
671
678
|
}
|
|
@@ -687,11 +694,47 @@ variable "additional_iam_policy_statements" {
|
|
|
687
694
|
default = []
|
|
688
695
|
}
|
|
689
696
|
|
|
697
|
+
variable "appconfig_application_id" {
|
|
698
|
+
description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
|
|
699
|
+
type = string
|
|
700
|
+
default = null
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
variable "appconfig_application_arn" {
|
|
704
|
+
description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
|
|
705
|
+
type = string
|
|
706
|
+
default = null
|
|
707
|
+
}
|
|
708
|
+
|
|
690
709
|
variable "asset_bucket_name" {
|
|
691
710
|
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."
|
|
692
711
|
type = string
|
|
693
712
|
}
|
|
694
713
|
|
|
714
|
+
# VPC Configuration (optional)
|
|
715
|
+
variable "enable_vpc" {
|
|
716
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
717
|
+
type = bool
|
|
718
|
+
default = false
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
variable "vpc_id" {
|
|
722
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
723
|
+
type = string
|
|
724
|
+
default = null
|
|
725
|
+
|
|
726
|
+
validation {
|
|
727
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
728
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
variable "subnet_ids" {
|
|
733
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
734
|
+
type = list(string)
|
|
735
|
+
default = null
|
|
736
|
+
}
|
|
737
|
+
|
|
695
738
|
# CORS Configuration (passed to core module)
|
|
696
739
|
|
|
697
740
|
variable "cors_allow_headers" {
|
|
@@ -754,6 +797,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
754
797
|
}
|
|
755
798
|
|
|
756
799
|
# Use the core REST API module
|
|
800
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
801
|
+
module "account" {
|
|
802
|
+
source = "../../../core/api/api-gateway-account"
|
|
803
|
+
}
|
|
804
|
+
|
|
757
805
|
module "rest_api" {
|
|
758
806
|
source = "../../../core/api/rest-api"
|
|
759
807
|
|
|
@@ -783,9 +831,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
783
831
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
784
832
|
}
|
|
785
833
|
|
|
834
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
835
|
+
resource "aws_security_group" "api_lambda" {
|
|
836
|
+
count = var.enable_vpc ? 1 : 0
|
|
837
|
+
|
|
838
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
839
|
+
name_prefix = "test-api-lambda-"
|
|
840
|
+
description = "Security group for the TestApi API Lambda function"
|
|
841
|
+
vpc_id = var.vpc_id
|
|
842
|
+
tags = var.tags
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
846
|
+
count = var.enable_vpc ? 1 : 0
|
|
847
|
+
|
|
848
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
849
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
850
|
+
from_port = 443
|
|
851
|
+
to_port = 443
|
|
852
|
+
ip_protocol = "tcp"
|
|
853
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
854
|
+
}
|
|
855
|
+
|
|
786
856
|
# Lambda function
|
|
787
857
|
resource "aws_lambda_function" "api_lambda" {
|
|
788
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
858
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
789
859
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
790
860
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
791
861
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -807,13 +877,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
807
877
|
mode = "Active"
|
|
808
878
|
}
|
|
809
879
|
|
|
880
|
+
dynamic "vpc_config" {
|
|
881
|
+
for_each = var.enable_vpc ? [1] : []
|
|
882
|
+
content {
|
|
883
|
+
subnet_ids = var.subnet_ids
|
|
884
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
|
|
810
888
|
|
|
811
889
|
environment {
|
|
812
890
|
variables = merge({
|
|
813
|
-
}, var.
|
|
891
|
+
}, var.appconfig_application_id != null ? {
|
|
892
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
893
|
+
} : {}, var.env)
|
|
814
894
|
}
|
|
815
895
|
|
|
816
896
|
tags = var.tags
|
|
897
|
+
|
|
898
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
817
899
|
}
|
|
818
900
|
|
|
819
901
|
# IAM role for Lambda execution
|
|
@@ -848,18 +930,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
848
930
|
role = aws_iam_role.lambda_execution_role.name
|
|
849
931
|
}
|
|
850
932
|
|
|
933
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
934
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
935
|
+
count = var.enable_vpc ? 1 : 0
|
|
936
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
937
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
938
|
+
}
|
|
939
|
+
|
|
851
940
|
# Additional IAM policies for Lambda (if provided)
|
|
852
941
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
853
|
-
count = length(
|
|
942
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
854
943
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
855
944
|
role = aws_iam_role.lambda_execution_role.id
|
|
856
945
|
|
|
857
946
|
policy = jsonencode({
|
|
858
947
|
Version = "2012-10-17"
|
|
859
|
-
Statement =
|
|
948
|
+
Statement = local.lambda_policy_statements
|
|
860
949
|
})
|
|
861
950
|
}
|
|
862
951
|
|
|
952
|
+
locals {
|
|
953
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
954
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
955
|
+
{
|
|
956
|
+
Effect = "Allow"
|
|
957
|
+
Action = [
|
|
958
|
+
"appconfig:StartConfigurationSession",
|
|
959
|
+
"appconfig:GetLatestConfiguration"
|
|
960
|
+
]
|
|
961
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
962
|
+
}
|
|
963
|
+
] : [], var.additional_iam_policy_statements)
|
|
964
|
+
}
|
|
965
|
+
|
|
863
966
|
# CloudWatch Log Group for Lambda
|
|
864
967
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
865
968
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -1079,11 +1182,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
1079
1182
|
]
|
|
1080
1183
|
}
|
|
1081
1184
|
|
|
1185
|
+
# KMS key for encrypting access logs at rest
|
|
1186
|
+
resource "aws_kms_key" "access_logs" {
|
|
1187
|
+
description = "TestApi API access log encryption"
|
|
1188
|
+
deletion_window_in_days = 7
|
|
1189
|
+
enable_key_rotation = true
|
|
1190
|
+
|
|
1191
|
+
policy = jsonencode({
|
|
1192
|
+
Version = "2012-10-17"
|
|
1193
|
+
Statement = [
|
|
1194
|
+
{
|
|
1195
|
+
Sid = "Enable IAM User Permissions"
|
|
1196
|
+
Effect = "Allow"
|
|
1197
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
1198
|
+
Action = "kms:*"
|
|
1199
|
+
Resource = "*"
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
Sid = "Allow CloudWatch Logs"
|
|
1203
|
+
Effect = "Allow"
|
|
1204
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
1205
|
+
Action = [
|
|
1206
|
+
"kms:Encrypt",
|
|
1207
|
+
"kms:Decrypt",
|
|
1208
|
+
"kms:ReEncrypt*",
|
|
1209
|
+
"kms:GenerateDataKey*",
|
|
1210
|
+
"kms:DescribeKey"
|
|
1211
|
+
]
|
|
1212
|
+
Resource = "*"
|
|
1213
|
+
Condition = {
|
|
1214
|
+
ArnEquals = {
|
|
1215
|
+
"kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
]
|
|
1220
|
+
})
|
|
1221
|
+
|
|
1222
|
+
tags = var.tags
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
resource "aws_kms_alias" "access_logs" {
|
|
1226
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
1227
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
# Access logs for the API Gateway stage
|
|
1231
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
1232
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
1233
|
+
retention_in_days = 365
|
|
1234
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
1235
|
+
tags = var.tags
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1082
1238
|
# API Gateway stage
|
|
1083
1239
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
1084
1240
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
1085
|
-
#checkov:skip=
|
|
1086
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
1241
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
1087
1242
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
1088
1243
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
1089
1244
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -1091,9 +1246,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
1091
1246
|
stage_name = "prod"
|
|
1092
1247
|
xray_tracing_enabled = true
|
|
1093
1248
|
|
|
1249
|
+
access_log_settings {
|
|
1250
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
1251
|
+
format = jsonencode({
|
|
1252
|
+
requestId = "$context.requestId"
|
|
1253
|
+
ip = "$context.identity.sourceIp"
|
|
1254
|
+
caller = "$context.identity.caller"
|
|
1255
|
+
user = "$context.identity.user"
|
|
1256
|
+
requestTime = "$context.requestTime"
|
|
1257
|
+
httpMethod = "$context.httpMethod"
|
|
1258
|
+
resourcePath = "$context.resourcePath"
|
|
1259
|
+
status = "$context.status"
|
|
1260
|
+
protocol = "$context.protocol"
|
|
1261
|
+
responseLength = "$context.responseLength"
|
|
1262
|
+
})
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1094
1265
|
tags = var.tags
|
|
1095
1266
|
|
|
1096
|
-
|
|
1267
|
+
# Ensure the account-level role is configured before the stage is created
|
|
1268
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
# Default throttling applied to all resource paths and methods
|
|
1272
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
1273
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
1274
|
+
rest_api_id = module.rest_api.api_id
|
|
1275
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
1276
|
+
method_path = "*/*"
|
|
1277
|
+
|
|
1278
|
+
settings {
|
|
1279
|
+
throttling_rate_limit = 10000
|
|
1280
|
+
throttling_burst_limit = 5000
|
|
1281
|
+
}
|
|
1097
1282
|
}
|
|
1098
1283
|
|
|
1099
1284
|
# API Gateway Resource Policy
|
|
@@ -1232,6 +1417,11 @@ output "lambda_execution_role_name" {
|
|
|
1232
1417
|
value = aws_iam_role.lambda_execution_role.name
|
|
1233
1418
|
}
|
|
1234
1419
|
|
|
1420
|
+
output "security_group_id" {
|
|
1421
|
+
description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
|
|
1422
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1235
1425
|
# Integration Outputs
|
|
1236
1426
|
output "integration_id" {
|
|
1237
1427
|
description = "ID of the Lambda integration"
|
|
@@ -1296,6 +1486,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1296
1486
|
"apiName": "test-api",
|
|
1297
1487
|
"auth": "custom",
|
|
1298
1488
|
"modelProject": "@proj/test-api-model",
|
|
1489
|
+
"iac": "cdk",
|
|
1299
1490
|
"ports": [3001]
|
|
1300
1491
|
},
|
|
1301
1492
|
"targets": {
|
|
@@ -1304,17 +1495,34 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1304
1495
|
},
|
|
1305
1496
|
"compile": {
|
|
1306
1497
|
"executor": "nx:run-commands",
|
|
1498
|
+
"dependsOn": ["copy-ssdk"],
|
|
1307
1499
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/tsc"],
|
|
1308
1500
|
"options": {
|
|
1309
1501
|
"command": "tsc --build tsconfig.lib.json",
|
|
1310
1502
|
"cwd": "{projectRoot}"
|
|
1503
|
+
}
|
|
1504
|
+
},
|
|
1505
|
+
"format": {
|
|
1506
|
+
"executor": "nx:run-commands",
|
|
1507
|
+
"cache": true,
|
|
1508
|
+
"inputs": ["biome"],
|
|
1509
|
+
"options": {
|
|
1510
|
+
"command": "biome format {projectRoot}"
|
|
1311
1511
|
},
|
|
1312
|
-
"
|
|
1512
|
+
"configurations": {
|
|
1513
|
+
"fix": {
|
|
1514
|
+
"command": "biome format --write {projectRoot}"
|
|
1515
|
+
},
|
|
1516
|
+
"skip-lint": {
|
|
1517
|
+
"command": "node -e \\"\\""
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1313
1520
|
},
|
|
1314
1521
|
"lint": {
|
|
1315
1522
|
"executor": "nx:run-commands",
|
|
1316
1523
|
"cache": true,
|
|
1317
1524
|
"inputs": ["biome"],
|
|
1525
|
+
"dependsOn": ["format"],
|
|
1318
1526
|
"options": {
|
|
1319
1527
|
"command": "biome lint {projectRoot}"
|
|
1320
1528
|
},
|
|
@@ -1327,22 +1535,15 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1327
1535
|
}
|
|
1328
1536
|
}
|
|
1329
1537
|
},
|
|
1330
|
-
"test": {
|
|
1331
|
-
"executor": "@nx/vitest:test",
|
|
1332
|
-
"outputs": ["{options.reportsDirectory}"],
|
|
1333
|
-
"options": {
|
|
1334
|
-
"reportsDirectory": "{workspaceRoot}/coverage/{projectRoot}"
|
|
1335
|
-
}
|
|
1336
|
-
},
|
|
1337
1538
|
"bundle": {
|
|
1539
|
+
"executor": "nx:run-commands",
|
|
1540
|
+
"dependsOn": ["compile"],
|
|
1338
1541
|
"cache": true,
|
|
1339
1542
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/bundle"],
|
|
1340
|
-
"executor": "nx:run-commands",
|
|
1341
1543
|
"options": {
|
|
1342
1544
|
"command": "rolldown -c rolldown.config.ts",
|
|
1343
1545
|
"cwd": "{projectRoot}"
|
|
1344
|
-
}
|
|
1345
|
-
"dependsOn": ["compile"]
|
|
1546
|
+
}
|
|
1346
1547
|
},
|
|
1347
1548
|
"copy-ssdk": {
|
|
1348
1549
|
"cache": true,
|
|
@@ -1365,31 +1566,31 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1365
1566
|
},
|
|
1366
1567
|
"watch-copy-ssdk": {
|
|
1367
1568
|
"executor": "nx:run-commands",
|
|
1569
|
+
"continuous": true,
|
|
1368
1570
|
"options": {
|
|
1369
|
-
"command": "nx watch --projects=@proj/test-api-model --
|
|
1370
|
-
}
|
|
1371
|
-
"continuous": true
|
|
1571
|
+
"command": "nx watch --projects=@proj/test-api-model --includeDependencies -- nx run @proj/test-api:copy-ssdk"
|
|
1572
|
+
}
|
|
1372
1573
|
},
|
|
1373
1574
|
"serve": {
|
|
1374
1575
|
"executor": "nx:run-commands",
|
|
1576
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1577
|
+
"continuous": true,
|
|
1375
1578
|
"options": {
|
|
1376
1579
|
"command": "tsx --watch src/local-server.ts",
|
|
1377
1580
|
"cwd": "{projectRoot}"
|
|
1378
|
-
}
|
|
1379
|
-
"continuous": true,
|
|
1380
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1581
|
+
}
|
|
1381
1582
|
},
|
|
1382
|
-
"
|
|
1583
|
+
"dev": {
|
|
1383
1584
|
"executor": "nx:run-commands",
|
|
1585
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1586
|
+
"continuous": true,
|
|
1384
1587
|
"options": {
|
|
1385
1588
|
"command": "tsx --watch src/local-server.ts",
|
|
1386
1589
|
"cwd": "{projectRoot}",
|
|
1387
1590
|
"env": {
|
|
1388
|
-
"
|
|
1591
|
+
"LOCAL_DEV": "true"
|
|
1389
1592
|
}
|
|
1390
|
-
}
|
|
1391
|
-
"continuous": true,
|
|
1392
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1593
|
+
}
|
|
1393
1594
|
}
|
|
1394
1595
|
}
|
|
1395
1596
|
}
|
|
@@ -1543,6 +1744,8 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1543
1744
|
"projectType": "library",
|
|
1544
1745
|
"metadata": {
|
|
1545
1746
|
"generator": "smithy#project",
|
|
1747
|
+
"smithyType": "service",
|
|
1748
|
+
"namespace": "proj",
|
|
1546
1749
|
"apiName": "test-api-model",
|
|
1547
1750
|
"backendProject": "@proj/test-api"
|
|
1548
1751
|
},
|
|
@@ -1558,7 +1761,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1558
1761
|
"commands": [
|
|
1559
1762
|
"rimraf dist/{projectRoot}/build",
|
|
1560
1763
|
"make-dir dist/{projectRoot}/build",
|
|
1561
|
-
"docker build -f {projectRoot}/build.Dockerfile --target export --output type=local,dest=dist/{projectRoot}/build {projectRoot}"
|
|
1764
|
+
"docker build -f {projectRoot}/build.Dockerfile --build-context workspace=. --target export --output type=local,dest=dist/{projectRoot}/build {projectRoot}"
|
|
1562
1765
|
],
|
|
1563
1766
|
"parallel": false,
|
|
1564
1767
|
"cwd": "{workspaceRoot}"
|
|
@@ -1682,11 +1885,11 @@ terraform {
|
|
|
1682
1885
|
required_providers {
|
|
1683
1886
|
aws = {
|
|
1684
1887
|
source = "hashicorp/aws"
|
|
1685
|
-
version = "
|
|
1888
|
+
version = "6.57.1"
|
|
1686
1889
|
}
|
|
1687
1890
|
random = {
|
|
1688
1891
|
source = "hashicorp/random"
|
|
1689
|
-
version = "
|
|
1892
|
+
version = "3.9.0"
|
|
1690
1893
|
}
|
|
1691
1894
|
}
|
|
1692
1895
|
}
|
|
@@ -1756,8 +1959,6 @@ data "aws_caller_identity" "current" {}
|
|
|
1756
1959
|
|
|
1757
1960
|
# Resources
|
|
1758
1961
|
|
|
1759
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
1760
|
-
|
|
1761
1962
|
# REST API Gateway
|
|
1762
1963
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
1763
1964
|
name = var.api_name
|
|
@@ -1774,10 +1975,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
1774
1975
|
tags = var.tags
|
|
1775
1976
|
}
|
|
1776
1977
|
|
|
1777
|
-
# Note: Deployment and
|
|
1778
|
-
# after all methods and integrations are defined
|
|
1779
|
-
|
|
1780
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
1978
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
1979
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
1781
1980
|
|
|
1782
1981
|
# Gateway Response for CORS (4XX errors)
|
|
1783
1982
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -1935,16 +2134,14 @@ output "waf_web_acl_arn" {
|
|
|
1935
2134
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
1936
2135
|
}
|
|
1937
2136
|
|
|
1938
|
-
# Note: Stage and
|
|
1939
|
-
|
|
1940
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
2137
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
1941
2138
|
"test-api.tf": "terraform {
|
|
1942
2139
|
required_version = ">= 1.0"
|
|
1943
2140
|
|
|
1944
2141
|
required_providers {
|
|
1945
2142
|
aws = {
|
|
1946
2143
|
source = "hashicorp/aws"
|
|
1947
|
-
version = "
|
|
2144
|
+
version = "6.57.1"
|
|
1948
2145
|
}
|
|
1949
2146
|
}
|
|
1950
2147
|
}
|
|
@@ -1976,11 +2173,47 @@ variable "additional_iam_policy_statements" {
|
|
|
1976
2173
|
default = []
|
|
1977
2174
|
}
|
|
1978
2175
|
|
|
2176
|
+
variable "appconfig_application_id" {
|
|
2177
|
+
description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
|
|
2178
|
+
type = string
|
|
2179
|
+
default = null
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
variable "appconfig_application_arn" {
|
|
2183
|
+
description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
|
|
2184
|
+
type = string
|
|
2185
|
+
default = null
|
|
2186
|
+
}
|
|
2187
|
+
|
|
1979
2188
|
variable "asset_bucket_name" {
|
|
1980
2189
|
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."
|
|
1981
2190
|
type = string
|
|
1982
2191
|
}
|
|
1983
2192
|
|
|
2193
|
+
# VPC Configuration (optional)
|
|
2194
|
+
variable "enable_vpc" {
|
|
2195
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
2196
|
+
type = bool
|
|
2197
|
+
default = false
|
|
2198
|
+
}
|
|
2199
|
+
|
|
2200
|
+
variable "vpc_id" {
|
|
2201
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
2202
|
+
type = string
|
|
2203
|
+
default = null
|
|
2204
|
+
|
|
2205
|
+
validation {
|
|
2206
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
2207
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
2208
|
+
}
|
|
2209
|
+
}
|
|
2210
|
+
|
|
2211
|
+
variable "subnet_ids" {
|
|
2212
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
2213
|
+
type = list(string)
|
|
2214
|
+
default = null
|
|
2215
|
+
}
|
|
2216
|
+
|
|
1984
2217
|
# CORS Configuration (passed to core module)
|
|
1985
2218
|
|
|
1986
2219
|
variable "cors_allow_headers" {
|
|
@@ -2043,6 +2276,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2043
2276
|
}
|
|
2044
2277
|
|
|
2045
2278
|
# Use the core REST API module
|
|
2279
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
2280
|
+
module "account" {
|
|
2281
|
+
source = "../../../core/api/api-gateway-account"
|
|
2282
|
+
}
|
|
2283
|
+
|
|
2046
2284
|
module "rest_api" {
|
|
2047
2285
|
source = "../../../core/api/rest-api"
|
|
2048
2286
|
|
|
@@ -2072,9 +2310,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
2072
2310
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
2073
2311
|
}
|
|
2074
2312
|
|
|
2313
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
2314
|
+
resource "aws_security_group" "api_lambda" {
|
|
2315
|
+
count = var.enable_vpc ? 1 : 0
|
|
2316
|
+
|
|
2317
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
2318
|
+
name_prefix = "test-api-lambda-"
|
|
2319
|
+
description = "Security group for the TestApi API Lambda function"
|
|
2320
|
+
vpc_id = var.vpc_id
|
|
2321
|
+
tags = var.tags
|
|
2322
|
+
}
|
|
2323
|
+
|
|
2324
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
2325
|
+
count = var.enable_vpc ? 1 : 0
|
|
2326
|
+
|
|
2327
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
2328
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
2329
|
+
from_port = 443
|
|
2330
|
+
to_port = 443
|
|
2331
|
+
ip_protocol = "tcp"
|
|
2332
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
2333
|
+
}
|
|
2334
|
+
|
|
2075
2335
|
# Lambda function
|
|
2076
2336
|
resource "aws_lambda_function" "api_lambda" {
|
|
2077
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
2337
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
2078
2338
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
2079
2339
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
2080
2340
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -2096,13 +2356,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2096
2356
|
mode = "Active"
|
|
2097
2357
|
}
|
|
2098
2358
|
|
|
2359
|
+
dynamic "vpc_config" {
|
|
2360
|
+
for_each = var.enable_vpc ? [1] : []
|
|
2361
|
+
content {
|
|
2362
|
+
subnet_ids = var.subnet_ids
|
|
2363
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
2364
|
+
}
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2099
2367
|
|
|
2100
2368
|
environment {
|
|
2101
2369
|
variables = merge({
|
|
2102
|
-
}, var.
|
|
2370
|
+
}, var.appconfig_application_id != null ? {
|
|
2371
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
2372
|
+
} : {}, var.env)
|
|
2103
2373
|
}
|
|
2104
2374
|
|
|
2105
2375
|
tags = var.tags
|
|
2376
|
+
|
|
2377
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
2106
2378
|
}
|
|
2107
2379
|
|
|
2108
2380
|
# IAM role for Lambda execution
|
|
@@ -2137,18 +2409,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
2137
2409
|
role = aws_iam_role.lambda_execution_role.name
|
|
2138
2410
|
}
|
|
2139
2411
|
|
|
2412
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
2413
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
2414
|
+
count = var.enable_vpc ? 1 : 0
|
|
2415
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
2416
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
2417
|
+
}
|
|
2418
|
+
|
|
2140
2419
|
# Additional IAM policies for Lambda (if provided)
|
|
2141
2420
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
2142
|
-
count = length(
|
|
2421
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
2143
2422
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
2144
2423
|
role = aws_iam_role.lambda_execution_role.id
|
|
2145
2424
|
|
|
2146
2425
|
policy = jsonencode({
|
|
2147
2426
|
Version = "2012-10-17"
|
|
2148
|
-
Statement =
|
|
2427
|
+
Statement = local.lambda_policy_statements
|
|
2149
2428
|
})
|
|
2150
2429
|
}
|
|
2151
2430
|
|
|
2431
|
+
locals {
|
|
2432
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
2433
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
2434
|
+
{
|
|
2435
|
+
Effect = "Allow"
|
|
2436
|
+
Action = [
|
|
2437
|
+
"appconfig:StartConfigurationSession",
|
|
2438
|
+
"appconfig:GetLatestConfiguration"
|
|
2439
|
+
]
|
|
2440
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
2441
|
+
}
|
|
2442
|
+
] : [], var.additional_iam_policy_statements)
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2152
2445
|
# CloudWatch Log Group for Lambda
|
|
2153
2446
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
2154
2447
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -2197,6 +2490,9 @@ resource "aws_api_gateway_method" "proxy_method" {
|
|
|
2197
2490
|
|
|
2198
2491
|
authorization = "COGNITO_USER_POOLS"
|
|
2199
2492
|
authorizer_id = aws_api_gateway_authorizer.cognito_authorizer.id
|
|
2493
|
+
# Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
|
|
2494
|
+
# and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
|
|
2495
|
+
authorization_scopes = ["openid", "aws.cognito.signin.user.admin"]
|
|
2200
2496
|
|
|
2201
2497
|
request_parameters = {
|
|
2202
2498
|
"method.request.path.proxy" = true
|
|
@@ -2283,11 +2579,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
2283
2579
|
]
|
|
2284
2580
|
}
|
|
2285
2581
|
|
|
2582
|
+
# KMS key for encrypting access logs at rest
|
|
2583
|
+
resource "aws_kms_key" "access_logs" {
|
|
2584
|
+
description = "TestApi API access log encryption"
|
|
2585
|
+
deletion_window_in_days = 7
|
|
2586
|
+
enable_key_rotation = true
|
|
2587
|
+
|
|
2588
|
+
policy = jsonencode({
|
|
2589
|
+
Version = "2012-10-17"
|
|
2590
|
+
Statement = [
|
|
2591
|
+
{
|
|
2592
|
+
Sid = "Enable IAM User Permissions"
|
|
2593
|
+
Effect = "Allow"
|
|
2594
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
2595
|
+
Action = "kms:*"
|
|
2596
|
+
Resource = "*"
|
|
2597
|
+
},
|
|
2598
|
+
{
|
|
2599
|
+
Sid = "Allow CloudWatch Logs"
|
|
2600
|
+
Effect = "Allow"
|
|
2601
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
2602
|
+
Action = [
|
|
2603
|
+
"kms:Encrypt",
|
|
2604
|
+
"kms:Decrypt",
|
|
2605
|
+
"kms:ReEncrypt*",
|
|
2606
|
+
"kms:GenerateDataKey*",
|
|
2607
|
+
"kms:DescribeKey"
|
|
2608
|
+
]
|
|
2609
|
+
Resource = "*"
|
|
2610
|
+
Condition = {
|
|
2611
|
+
ArnEquals = {
|
|
2612
|
+
"kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
2613
|
+
}
|
|
2614
|
+
}
|
|
2615
|
+
}
|
|
2616
|
+
]
|
|
2617
|
+
})
|
|
2618
|
+
|
|
2619
|
+
tags = var.tags
|
|
2620
|
+
}
|
|
2621
|
+
|
|
2622
|
+
resource "aws_kms_alias" "access_logs" {
|
|
2623
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
2624
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
2625
|
+
}
|
|
2626
|
+
|
|
2627
|
+
# Access logs for the API Gateway stage
|
|
2628
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
2629
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
2630
|
+
retention_in_days = 365
|
|
2631
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
2632
|
+
tags = var.tags
|
|
2633
|
+
}
|
|
2634
|
+
|
|
2286
2635
|
# API Gateway stage
|
|
2287
2636
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
2288
2637
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
2289
|
-
#checkov:skip=
|
|
2290
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
2638
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
2291
2639
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
2292
2640
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
2293
2641
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -2295,9 +2643,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
2295
2643
|
stage_name = "prod"
|
|
2296
2644
|
xray_tracing_enabled = true
|
|
2297
2645
|
|
|
2646
|
+
access_log_settings {
|
|
2647
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
2648
|
+
format = jsonencode({
|
|
2649
|
+
requestId = "$context.requestId"
|
|
2650
|
+
ip = "$context.identity.sourceIp"
|
|
2651
|
+
caller = "$context.identity.caller"
|
|
2652
|
+
user = "$context.identity.user"
|
|
2653
|
+
requestTime = "$context.requestTime"
|
|
2654
|
+
httpMethod = "$context.httpMethod"
|
|
2655
|
+
resourcePath = "$context.resourcePath"
|
|
2656
|
+
status = "$context.status"
|
|
2657
|
+
protocol = "$context.protocol"
|
|
2658
|
+
responseLength = "$context.responseLength"
|
|
2659
|
+
})
|
|
2660
|
+
}
|
|
2661
|
+
|
|
2298
2662
|
tags = var.tags
|
|
2299
2663
|
|
|
2300
|
-
|
|
2664
|
+
# Ensure the account-level role is configured before the stage is created
|
|
2665
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
2666
|
+
}
|
|
2667
|
+
|
|
2668
|
+
# Default throttling applied to all resource paths and methods
|
|
2669
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
2670
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
2671
|
+
rest_api_id = module.rest_api.api_id
|
|
2672
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
2673
|
+
method_path = "*/*"
|
|
2674
|
+
|
|
2675
|
+
settings {
|
|
2676
|
+
throttling_rate_limit = 10000
|
|
2677
|
+
throttling_burst_limit = 5000
|
|
2678
|
+
}
|
|
2301
2679
|
}
|
|
2302
2680
|
|
|
2303
2681
|
# API Gateway Resource Policy
|
|
@@ -2436,6 +2814,11 @@ output "lambda_execution_role_name" {
|
|
|
2436
2814
|
value = aws_iam_role.lambda_execution_role.name
|
|
2437
2815
|
}
|
|
2438
2816
|
|
|
2817
|
+
output "security_group_id" {
|
|
2818
|
+
description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
|
|
2819
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
2820
|
+
}
|
|
2821
|
+
|
|
2439
2822
|
# Integration Outputs
|
|
2440
2823
|
output "integration_id" {
|
|
2441
2824
|
description = "ID of the Lambda integration"
|
|
@@ -2477,11 +2860,11 @@ terraform {
|
|
|
2477
2860
|
required_providers {
|
|
2478
2861
|
aws = {
|
|
2479
2862
|
source = "hashicorp/aws"
|
|
2480
|
-
version = "
|
|
2863
|
+
version = "6.57.1"
|
|
2481
2864
|
}
|
|
2482
2865
|
random = {
|
|
2483
2866
|
source = "hashicorp/random"
|
|
2484
|
-
version = "
|
|
2867
|
+
version = "3.9.0"
|
|
2485
2868
|
}
|
|
2486
2869
|
}
|
|
2487
2870
|
}
|
|
@@ -2551,8 +2934,6 @@ data "aws_caller_identity" "current" {}
|
|
|
2551
2934
|
|
|
2552
2935
|
# Resources
|
|
2553
2936
|
|
|
2554
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
2555
|
-
|
|
2556
2937
|
# REST API Gateway
|
|
2557
2938
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
2558
2939
|
name = var.api_name
|
|
@@ -2569,10 +2950,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
2569
2950
|
tags = var.tags
|
|
2570
2951
|
}
|
|
2571
2952
|
|
|
2572
|
-
# Note: Deployment and
|
|
2573
|
-
# after all methods and integrations are defined
|
|
2574
|
-
|
|
2575
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
2953
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
2954
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
2576
2955
|
|
|
2577
2956
|
# Gateway Response for CORS (4XX errors)
|
|
2578
2957
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -2730,16 +3109,14 @@ output "waf_web_acl_arn" {
|
|
|
2730
3109
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
2731
3110
|
}
|
|
2732
3111
|
|
|
2733
|
-
# Note: Stage and
|
|
2734
|
-
|
|
2735
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
3112
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
2736
3113
|
"test-api.tf": "terraform {
|
|
2737
3114
|
required_version = ">= 1.0"
|
|
2738
3115
|
|
|
2739
3116
|
required_providers {
|
|
2740
3117
|
aws = {
|
|
2741
3118
|
source = "hashicorp/aws"
|
|
2742
|
-
version = "
|
|
3119
|
+
version = "6.57.1"
|
|
2743
3120
|
}
|
|
2744
3121
|
}
|
|
2745
3122
|
}
|
|
@@ -2761,11 +3138,47 @@ variable "additional_iam_policy_statements" {
|
|
|
2761
3138
|
default = []
|
|
2762
3139
|
}
|
|
2763
3140
|
|
|
3141
|
+
variable "appconfig_application_id" {
|
|
3142
|
+
description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
|
|
3143
|
+
type = string
|
|
3144
|
+
default = null
|
|
3145
|
+
}
|
|
3146
|
+
|
|
3147
|
+
variable "appconfig_application_arn" {
|
|
3148
|
+
description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
|
|
3149
|
+
type = string
|
|
3150
|
+
default = null
|
|
3151
|
+
}
|
|
3152
|
+
|
|
2764
3153
|
variable "asset_bucket_name" {
|
|
2765
3154
|
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."
|
|
2766
3155
|
type = string
|
|
2767
3156
|
}
|
|
2768
3157
|
|
|
3158
|
+
# VPC Configuration (optional)
|
|
3159
|
+
variable "enable_vpc" {
|
|
3160
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
3161
|
+
type = bool
|
|
3162
|
+
default = false
|
|
3163
|
+
}
|
|
3164
|
+
|
|
3165
|
+
variable "vpc_id" {
|
|
3166
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3167
|
+
type = string
|
|
3168
|
+
default = null
|
|
3169
|
+
|
|
3170
|
+
validation {
|
|
3171
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
3172
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
3173
|
+
}
|
|
3174
|
+
}
|
|
3175
|
+
|
|
3176
|
+
variable "subnet_ids" {
|
|
3177
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3178
|
+
type = list(string)
|
|
3179
|
+
default = null
|
|
3180
|
+
}
|
|
3181
|
+
|
|
2769
3182
|
# CORS Configuration (passed to core module)
|
|
2770
3183
|
|
|
2771
3184
|
variable "cors_allow_headers" {
|
|
@@ -2828,6 +3241,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2828
3241
|
}
|
|
2829
3242
|
|
|
2830
3243
|
# Use the core REST API module
|
|
3244
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3245
|
+
module "account" {
|
|
3246
|
+
source = "../../../core/api/api-gateway-account"
|
|
3247
|
+
}
|
|
3248
|
+
|
|
2831
3249
|
module "rest_api" {
|
|
2832
3250
|
source = "../../../core/api/rest-api"
|
|
2833
3251
|
|
|
@@ -2857,9 +3275,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
2857
3275
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
2858
3276
|
}
|
|
2859
3277
|
|
|
3278
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
3279
|
+
resource "aws_security_group" "api_lambda" {
|
|
3280
|
+
count = var.enable_vpc ? 1 : 0
|
|
3281
|
+
|
|
3282
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
3283
|
+
name_prefix = "test-api-lambda-"
|
|
3284
|
+
description = "Security group for the TestApi API Lambda function"
|
|
3285
|
+
vpc_id = var.vpc_id
|
|
3286
|
+
tags = var.tags
|
|
3287
|
+
}
|
|
3288
|
+
|
|
3289
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
3290
|
+
count = var.enable_vpc ? 1 : 0
|
|
3291
|
+
|
|
3292
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
3293
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
3294
|
+
from_port = 443
|
|
3295
|
+
to_port = 443
|
|
3296
|
+
ip_protocol = "tcp"
|
|
3297
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
3298
|
+
}
|
|
3299
|
+
|
|
2860
3300
|
# Lambda function
|
|
2861
3301
|
resource "aws_lambda_function" "api_lambda" {
|
|
2862
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
3302
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
2863
3303
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
2864
3304
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
2865
3305
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -2881,13 +3321,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2881
3321
|
mode = "Active"
|
|
2882
3322
|
}
|
|
2883
3323
|
|
|
3324
|
+
dynamic "vpc_config" {
|
|
3325
|
+
for_each = var.enable_vpc ? [1] : []
|
|
3326
|
+
content {
|
|
3327
|
+
subnet_ids = var.subnet_ids
|
|
3328
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
3329
|
+
}
|
|
3330
|
+
}
|
|
3331
|
+
|
|
2884
3332
|
|
|
2885
3333
|
environment {
|
|
2886
3334
|
variables = merge({
|
|
2887
|
-
}, var.
|
|
3335
|
+
}, var.appconfig_application_id != null ? {
|
|
3336
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
3337
|
+
} : {}, var.env)
|
|
2888
3338
|
}
|
|
2889
3339
|
|
|
2890
3340
|
tags = var.tags
|
|
3341
|
+
|
|
3342
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
2891
3343
|
}
|
|
2892
3344
|
|
|
2893
3345
|
# IAM role for Lambda execution
|
|
@@ -2922,18 +3374,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
2922
3374
|
role = aws_iam_role.lambda_execution_role.name
|
|
2923
3375
|
}
|
|
2924
3376
|
|
|
3377
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
3378
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
3379
|
+
count = var.enable_vpc ? 1 : 0
|
|
3380
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
3381
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
3382
|
+
}
|
|
3383
|
+
|
|
2925
3384
|
# Additional IAM policies for Lambda (if provided)
|
|
2926
3385
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
2927
|
-
count = length(
|
|
3386
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
2928
3387
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
2929
3388
|
role = aws_iam_role.lambda_execution_role.id
|
|
2930
3389
|
|
|
2931
3390
|
policy = jsonencode({
|
|
2932
3391
|
Version = "2012-10-17"
|
|
2933
|
-
Statement =
|
|
3392
|
+
Statement = local.lambda_policy_statements
|
|
2934
3393
|
})
|
|
2935
3394
|
}
|
|
2936
3395
|
|
|
3396
|
+
locals {
|
|
3397
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
3398
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
3399
|
+
{
|
|
3400
|
+
Effect = "Allow"
|
|
3401
|
+
Action = [
|
|
3402
|
+
"appconfig:StartConfigurationSession",
|
|
3403
|
+
"appconfig:GetLatestConfiguration"
|
|
3404
|
+
]
|
|
3405
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
3406
|
+
}
|
|
3407
|
+
] : [], var.additional_iam_policy_statements)
|
|
3408
|
+
}
|
|
3409
|
+
|
|
2937
3410
|
# CloudWatch Log Group for Lambda
|
|
2938
3411
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
2939
3412
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -3059,11 +3532,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3059
3532
|
]
|
|
3060
3533
|
}
|
|
3061
3534
|
|
|
3535
|
+
# KMS key for encrypting access logs at rest
|
|
3536
|
+
resource "aws_kms_key" "access_logs" {
|
|
3537
|
+
description = "TestApi API access log encryption"
|
|
3538
|
+
deletion_window_in_days = 7
|
|
3539
|
+
enable_key_rotation = true
|
|
3540
|
+
|
|
3541
|
+
policy = jsonencode({
|
|
3542
|
+
Version = "2012-10-17"
|
|
3543
|
+
Statement = [
|
|
3544
|
+
{
|
|
3545
|
+
Sid = "Enable IAM User Permissions"
|
|
3546
|
+
Effect = "Allow"
|
|
3547
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
3548
|
+
Action = "kms:*"
|
|
3549
|
+
Resource = "*"
|
|
3550
|
+
},
|
|
3551
|
+
{
|
|
3552
|
+
Sid = "Allow CloudWatch Logs"
|
|
3553
|
+
Effect = "Allow"
|
|
3554
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
3555
|
+
Action = [
|
|
3556
|
+
"kms:Encrypt",
|
|
3557
|
+
"kms:Decrypt",
|
|
3558
|
+
"kms:ReEncrypt*",
|
|
3559
|
+
"kms:GenerateDataKey*",
|
|
3560
|
+
"kms:DescribeKey"
|
|
3561
|
+
]
|
|
3562
|
+
Resource = "*"
|
|
3563
|
+
Condition = {
|
|
3564
|
+
ArnEquals = {
|
|
3565
|
+
"kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
3566
|
+
}
|
|
3567
|
+
}
|
|
3568
|
+
}
|
|
3569
|
+
]
|
|
3570
|
+
})
|
|
3571
|
+
|
|
3572
|
+
tags = var.tags
|
|
3573
|
+
}
|
|
3574
|
+
|
|
3575
|
+
resource "aws_kms_alias" "access_logs" {
|
|
3576
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
3577
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
3578
|
+
}
|
|
3579
|
+
|
|
3580
|
+
# Access logs for the API Gateway stage
|
|
3581
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
3582
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
3583
|
+
retention_in_days = 365
|
|
3584
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
3585
|
+
tags = var.tags
|
|
3586
|
+
}
|
|
3587
|
+
|
|
3062
3588
|
# API Gateway stage
|
|
3063
3589
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3064
3590
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3065
|
-
#checkov:skip=
|
|
3066
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
3591
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3067
3592
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3068
3593
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
3069
3594
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3071,9 +3596,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3071
3596
|
stage_name = "prod"
|
|
3072
3597
|
xray_tracing_enabled = true
|
|
3073
3598
|
|
|
3599
|
+
access_log_settings {
|
|
3600
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
3601
|
+
format = jsonencode({
|
|
3602
|
+
requestId = "$context.requestId"
|
|
3603
|
+
ip = "$context.identity.sourceIp"
|
|
3604
|
+
caller = "$context.identity.caller"
|
|
3605
|
+
user = "$context.identity.user"
|
|
3606
|
+
requestTime = "$context.requestTime"
|
|
3607
|
+
httpMethod = "$context.httpMethod"
|
|
3608
|
+
resourcePath = "$context.resourcePath"
|
|
3609
|
+
status = "$context.status"
|
|
3610
|
+
protocol = "$context.protocol"
|
|
3611
|
+
responseLength = "$context.responseLength"
|
|
3612
|
+
})
|
|
3613
|
+
}
|
|
3614
|
+
|
|
3074
3615
|
tags = var.tags
|
|
3075
3616
|
|
|
3076
|
-
|
|
3617
|
+
# Ensure the account-level role is configured before the stage is created
|
|
3618
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
3619
|
+
}
|
|
3620
|
+
|
|
3621
|
+
# Default throttling applied to all resource paths and methods
|
|
3622
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
3623
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
3624
|
+
rest_api_id = module.rest_api.api_id
|
|
3625
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
3626
|
+
method_path = "*/*"
|
|
3627
|
+
|
|
3628
|
+
settings {
|
|
3629
|
+
throttling_rate_limit = 10000
|
|
3630
|
+
throttling_burst_limit = 5000
|
|
3631
|
+
}
|
|
3077
3632
|
}
|
|
3078
3633
|
|
|
3079
3634
|
# API Gateway Resource Policy
|
|
@@ -3223,6 +3778,11 @@ output "lambda_execution_role_name" {
|
|
|
3223
3778
|
value = aws_iam_role.lambda_execution_role.name
|
|
3224
3779
|
}
|
|
3225
3780
|
|
|
3781
|
+
output "security_group_id" {
|
|
3782
|
+
description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
|
|
3783
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
3784
|
+
}
|
|
3785
|
+
|
|
3226
3786
|
# Integration Outputs
|
|
3227
3787
|
output "integration_id" {
|
|
3228
3788
|
description = "ID of the Lambda integration"
|
|
@@ -3260,7 +3820,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
|
|
|
3260
3820
|
required_providers {
|
|
3261
3821
|
aws = {
|
|
3262
3822
|
source = "hashicorp/aws"
|
|
3263
|
-
version = "
|
|
3823
|
+
version = "6.57.1"
|
|
3264
3824
|
}
|
|
3265
3825
|
}
|
|
3266
3826
|
}
|
|
@@ -3282,11 +3842,47 @@ variable "additional_iam_policy_statements" {
|
|
|
3282
3842
|
default = []
|
|
3283
3843
|
}
|
|
3284
3844
|
|
|
3845
|
+
variable "appconfig_application_id" {
|
|
3846
|
+
description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
|
|
3847
|
+
type = string
|
|
3848
|
+
default = null
|
|
3849
|
+
}
|
|
3850
|
+
|
|
3851
|
+
variable "appconfig_application_arn" {
|
|
3852
|
+
description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
|
|
3853
|
+
type = string
|
|
3854
|
+
default = null
|
|
3855
|
+
}
|
|
3856
|
+
|
|
3285
3857
|
variable "asset_bucket_name" {
|
|
3286
3858
|
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."
|
|
3287
3859
|
type = string
|
|
3288
3860
|
}
|
|
3289
3861
|
|
|
3862
|
+
# VPC Configuration (optional)
|
|
3863
|
+
variable "enable_vpc" {
|
|
3864
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
3865
|
+
type = bool
|
|
3866
|
+
default = false
|
|
3867
|
+
}
|
|
3868
|
+
|
|
3869
|
+
variable "vpc_id" {
|
|
3870
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3871
|
+
type = string
|
|
3872
|
+
default = null
|
|
3873
|
+
|
|
3874
|
+
validation {
|
|
3875
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
3876
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
3877
|
+
}
|
|
3878
|
+
}
|
|
3879
|
+
|
|
3880
|
+
variable "subnet_ids" {
|
|
3881
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3882
|
+
type = list(string)
|
|
3883
|
+
default = null
|
|
3884
|
+
}
|
|
3885
|
+
|
|
3290
3886
|
# CORS Configuration (passed to core module)
|
|
3291
3887
|
|
|
3292
3888
|
variable "cors_allow_headers" {
|
|
@@ -3349,6 +3945,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
3349
3945
|
}
|
|
3350
3946
|
|
|
3351
3947
|
# Use the core REST API module
|
|
3948
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3949
|
+
module "account" {
|
|
3950
|
+
source = "../../../core/api/api-gateway-account"
|
|
3951
|
+
}
|
|
3952
|
+
|
|
3352
3953
|
module "rest_api" {
|
|
3353
3954
|
source = "../../../core/api/rest-api"
|
|
3354
3955
|
|
|
@@ -3378,9 +3979,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
3378
3979
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
3379
3980
|
}
|
|
3380
3981
|
|
|
3982
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
3983
|
+
resource "aws_security_group" "api_lambda" {
|
|
3984
|
+
count = var.enable_vpc ? 1 : 0
|
|
3985
|
+
|
|
3986
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
3987
|
+
name_prefix = "custom-api-lambda-"
|
|
3988
|
+
description = "Security group for the CustomApi API Lambda function"
|
|
3989
|
+
vpc_id = var.vpc_id
|
|
3990
|
+
tags = var.tags
|
|
3991
|
+
}
|
|
3992
|
+
|
|
3993
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
3994
|
+
count = var.enable_vpc ? 1 : 0
|
|
3995
|
+
|
|
3996
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
3997
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
3998
|
+
from_port = 443
|
|
3999
|
+
to_port = 443
|
|
4000
|
+
ip_protocol = "tcp"
|
|
4001
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
4002
|
+
}
|
|
4003
|
+
|
|
3381
4004
|
# Lambda function
|
|
3382
4005
|
resource "aws_lambda_function" "api_lambda" {
|
|
3383
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
4006
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
3384
4007
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
3385
4008
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
3386
4009
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -3402,13 +4025,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
3402
4025
|
mode = "Active"
|
|
3403
4026
|
}
|
|
3404
4027
|
|
|
4028
|
+
dynamic "vpc_config" {
|
|
4029
|
+
for_each = var.enable_vpc ? [1] : []
|
|
4030
|
+
content {
|
|
4031
|
+
subnet_ids = var.subnet_ids
|
|
4032
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
4033
|
+
}
|
|
4034
|
+
}
|
|
4035
|
+
|
|
3405
4036
|
|
|
3406
4037
|
environment {
|
|
3407
4038
|
variables = merge({
|
|
3408
|
-
}, var.
|
|
4039
|
+
}, var.appconfig_application_id != null ? {
|
|
4040
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
4041
|
+
} : {}, var.env)
|
|
3409
4042
|
}
|
|
3410
4043
|
|
|
3411
4044
|
tags = var.tags
|
|
4045
|
+
|
|
4046
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
3412
4047
|
}
|
|
3413
4048
|
|
|
3414
4049
|
# IAM role for Lambda execution
|
|
@@ -3443,18 +4078,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
3443
4078
|
role = aws_iam_role.lambda_execution_role.name
|
|
3444
4079
|
}
|
|
3445
4080
|
|
|
4081
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
4082
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
4083
|
+
count = var.enable_vpc ? 1 : 0
|
|
4084
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
4085
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
4086
|
+
}
|
|
4087
|
+
|
|
3446
4088
|
# Additional IAM policies for Lambda (if provided)
|
|
3447
4089
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
3448
|
-
count = length(
|
|
4090
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
3449
4091
|
name = "CustomApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
3450
4092
|
role = aws_iam_role.lambda_execution_role.id
|
|
3451
4093
|
|
|
3452
4094
|
policy = jsonencode({
|
|
3453
4095
|
Version = "2012-10-17"
|
|
3454
|
-
Statement =
|
|
4096
|
+
Statement = local.lambda_policy_statements
|
|
3455
4097
|
})
|
|
3456
4098
|
}
|
|
3457
4099
|
|
|
4100
|
+
locals {
|
|
4101
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
4102
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
4103
|
+
{
|
|
4104
|
+
Effect = "Allow"
|
|
4105
|
+
Action = [
|
|
4106
|
+
"appconfig:StartConfigurationSession",
|
|
4107
|
+
"appconfig:GetLatestConfiguration"
|
|
4108
|
+
]
|
|
4109
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
4110
|
+
}
|
|
4111
|
+
] : [], var.additional_iam_policy_statements)
|
|
4112
|
+
}
|
|
4113
|
+
|
|
3458
4114
|
# CloudWatch Log Group for Lambda
|
|
3459
4115
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
3460
4116
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -3674,11 +4330,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3674
4330
|
]
|
|
3675
4331
|
}
|
|
3676
4332
|
|
|
4333
|
+
# KMS key for encrypting access logs at rest
|
|
4334
|
+
resource "aws_kms_key" "access_logs" {
|
|
4335
|
+
description = "CustomApi API access log encryption"
|
|
4336
|
+
deletion_window_in_days = 7
|
|
4337
|
+
enable_key_rotation = true
|
|
4338
|
+
|
|
4339
|
+
policy = jsonencode({
|
|
4340
|
+
Version = "2012-10-17"
|
|
4341
|
+
Statement = [
|
|
4342
|
+
{
|
|
4343
|
+
Sid = "Enable IAM User Permissions"
|
|
4344
|
+
Effect = "Allow"
|
|
4345
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
4346
|
+
Action = "kms:*"
|
|
4347
|
+
Resource = "*"
|
|
4348
|
+
},
|
|
4349
|
+
{
|
|
4350
|
+
Sid = "Allow CloudWatch Logs"
|
|
4351
|
+
Effect = "Allow"
|
|
4352
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
4353
|
+
Action = [
|
|
4354
|
+
"kms:Encrypt",
|
|
4355
|
+
"kms:Decrypt",
|
|
4356
|
+
"kms:ReEncrypt*",
|
|
4357
|
+
"kms:GenerateDataKey*",
|
|
4358
|
+
"kms:DescribeKey"
|
|
4359
|
+
]
|
|
4360
|
+
Resource = "*"
|
|
4361
|
+
Condition = {
|
|
4362
|
+
ArnEquals = {
|
|
4363
|
+
"kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
|
|
4364
|
+
}
|
|
4365
|
+
}
|
|
4366
|
+
}
|
|
4367
|
+
]
|
|
4368
|
+
})
|
|
4369
|
+
|
|
4370
|
+
tags = var.tags
|
|
4371
|
+
}
|
|
4372
|
+
|
|
4373
|
+
resource "aws_kms_alias" "access_logs" {
|
|
4374
|
+
name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
|
|
4375
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
4376
|
+
}
|
|
4377
|
+
|
|
4378
|
+
# Access logs for the API Gateway stage
|
|
4379
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
4380
|
+
name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
|
|
4381
|
+
retention_in_days = 365
|
|
4382
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
4383
|
+
tags = var.tags
|
|
4384
|
+
}
|
|
4385
|
+
|
|
3677
4386
|
# API Gateway stage
|
|
3678
4387
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3679
4388
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3680
|
-
#checkov:skip=
|
|
3681
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
4389
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3682
4390
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3683
4391
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
3684
4392
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3686,9 +4394,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3686
4394
|
stage_name = "prod"
|
|
3687
4395
|
xray_tracing_enabled = true
|
|
3688
4396
|
|
|
4397
|
+
access_log_settings {
|
|
4398
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
4399
|
+
format = jsonencode({
|
|
4400
|
+
requestId = "$context.requestId"
|
|
4401
|
+
ip = "$context.identity.sourceIp"
|
|
4402
|
+
caller = "$context.identity.caller"
|
|
4403
|
+
user = "$context.identity.user"
|
|
4404
|
+
requestTime = "$context.requestTime"
|
|
4405
|
+
httpMethod = "$context.httpMethod"
|
|
4406
|
+
resourcePath = "$context.resourcePath"
|
|
4407
|
+
status = "$context.status"
|
|
4408
|
+
protocol = "$context.protocol"
|
|
4409
|
+
responseLength = "$context.responseLength"
|
|
4410
|
+
})
|
|
4411
|
+
}
|
|
4412
|
+
|
|
3689
4413
|
tags = var.tags
|
|
3690
4414
|
|
|
3691
|
-
|
|
4415
|
+
# Ensure the account-level role is configured before the stage is created
|
|
4416
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
4417
|
+
}
|
|
4418
|
+
|
|
4419
|
+
# Default throttling applied to all resource paths and methods
|
|
4420
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
4421
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
4422
|
+
rest_api_id = module.rest_api.api_id
|
|
4423
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
4424
|
+
method_path = "*/*"
|
|
4425
|
+
|
|
4426
|
+
settings {
|
|
4427
|
+
throttling_rate_limit = 10000
|
|
4428
|
+
throttling_burst_limit = 5000
|
|
4429
|
+
}
|
|
3692
4430
|
}
|
|
3693
4431
|
|
|
3694
4432
|
# API Gateway Resource Policy
|
|
@@ -3827,6 +4565,11 @@ output "lambda_execution_role_name" {
|
|
|
3827
4565
|
value = aws_iam_role.lambda_execution_role.name
|
|
3828
4566
|
}
|
|
3829
4567
|
|
|
4568
|
+
output "security_group_id" {
|
|
4569
|
+
description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
|
|
4570
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
4571
|
+
}
|
|
4572
|
+
|
|
3830
4573
|
# Integration Outputs
|
|
3831
4574
|
output "integration_id" {
|
|
3832
4575
|
description = "ID of the Lambda integration"
|