@aws/nx-plugin 1.0.0-rc.4 → 1.0.0-rc.40
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 +5449 -4980
- package/README.md +7 -7
- package/executors.json +9 -0
- package/generators.json +101 -2
- package/package.json +35 -17
- package/src/agentcore-gateway/attach-upstream.d.ts +33 -0
- package/src/agentcore-gateway/attach-upstream.js +38 -0
- package/src/agentcore-gateway/attach-upstream.js.map +1 -0
- package/src/agentcore-gateway/files/cedar/policies/README.md +52 -0
- package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +11 -0
- package/src/agentcore-gateway/files/project/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 +101 -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 +25 -0
- package/src/agentcore-gateway/generator.js +149 -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 +59 -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/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 +70 -0
- package/src/bin/aws-nx-mcp.js +14 -0
- package/src/bin/aws-nx-mcp.js.map +1 -0
- package/src/connection/{agent-serve-local.d.ts → agent-local-dev.d.ts} +7 -7
- package/src/connection/agent-local-dev.js +42 -0
- package/src/connection/agent-local-dev.js.map +1 -0
- package/src/connection/agent-runtime-config.d.ts +1 -1
- package/src/connection/agent-runtime-config.js +9 -14
- package/src/connection/agent-runtime-config.js.map +1 -1
- package/src/connection/generator.d.ts +7 -14
- package/src/connection/generator.js +167 -194
- package/src/connection/generator.js.map +1 -1
- package/src/connection/local-dev.d.ts +15 -0
- package/src/connection/local-dev.js +37 -0
- package/src/connection/local-dev.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 +107 -0
- package/src/connection/supported-connections.js +151 -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 +55 -85
- 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 +3 -3
- package/src/infra/app/generator.js +142 -122
- 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 +18 -0
- package/src/init/generator.js +35 -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/license/__snapshots__/config.spec.ts.snap +23 -0
- package/src/license/config-types.d.ts +18 -1
- package/src/license/config-types.js +8 -2
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +65 -7
- package/src/license/config.js +442 -109
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/check.d.ts +16 -0
- package/src/license/dependency-check/check.js +116 -0
- package/src/license/dependency-check/check.js.map +1 -0
- package/src/license/dependency-check/collectors/collector.d.ts +21 -0
- package/src/license/dependency-check/collectors/collector.js +46 -0
- package/src/license/dependency-check/collectors/collector.js.map +1 -0
- package/src/license/dependency-check/collectors/npm-collector.d.ts +10 -0
- package/src/license/dependency-check/collectors/npm-collector.js +68 -0
- package/src/license/dependency-check/collectors/npm-collector.js.map +1 -0
- package/src/license/dependency-check/collectors/python-collector.d.ts +23 -0
- package/src/license/dependency-check/collectors/python-collector.js +114 -0
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -0
- package/src/license/dependency-check/evaluator.d.ts +9 -0
- package/src/license/dependency-check/evaluator.js +94 -0
- package/src/license/dependency-check/evaluator.js.map +1 -0
- package/src/license/dependency-check/executor-schema.json +6 -0
- package/src/license/dependency-check/executor.d.ts +9 -0
- package/src/license/dependency-check/executor.js +51 -0
- package/src/license/dependency-check/executor.js.map +1 -0
- package/src/license/dependency-check/pre-approved.d.ts +6 -0
- package/src/license/dependency-check/pre-approved.js +1893 -0
- package/src/license/dependency-check/pre-approved.js.map +1 -0
- package/src/license/dependency-check/types.d.ts +45 -0
- package/src/license/dependency-check/types.js +6 -0
- package/src/license/dependency-check/types.js.map +1 -0
- package/src/license/generator.d.ts +3 -3
- package/src/license/generator.js +126 -30
- package/src/license/generator.js.map +1 -1
- package/src/license/index.d.ts +8 -0
- package/src/license/index.js +7 -0
- package/src/license/index.js.map +1 -0
- package/src/license/known-exceptions.d.ts +7 -0
- package/src/license/known-exceptions.js +39 -0
- package/src/license/known-exceptions.js.map +1 -0
- package/src/license/schema.d.js +6 -0
- package/src/license/schema.d.js.map +1 -0
- package/src/license/schema.d.ts +7 -0
- package/src/license/schema.json +11 -0
- package/src/license/sync/generator.d.ts +2 -2
- package/src/license/sync/generator.js +100 -125
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.d.ts +3 -3
- 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/generator-info.d.ts +5 -1
- package/src/mcp-server/generator-info.js +149 -165
- package/src/mcp-server/generator-info.js.map +1 -1
- package/src/mcp-server/guide-pipeline.d.ts +1 -1
- package/src/mcp-server/guide-pipeline.js +199 -206
- package/src/mcp-server/guide-pipeline.js.map +1 -1
- package/src/mcp-server/guide-render.js +10 -25
- package/src/mcp-server/guide-render.js.map +1 -1
- package/src/mcp-server/index.js +6 -10
- package/src/mcp-server/index.js.map +1 -1
- package/src/mcp-server/mdx-ast.js +42 -56
- 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.js +9 -7
- package/src/mcp-server/schema.js.map +1 -1
- package/src/mcp-server/server.js +22 -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.d.ts +1 -1
- 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 +3 -3
- package/src/mcp-server/tools/general-guidance.js +47 -25
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.d.ts +2 -2
- package/src/mcp-server/tools/generator-guide.js +29 -37
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/mcp-server/tools/list-generators.d.ts +2 -2
- package/src/mcp-server/tools/list-generators.js +19 -25
- package/src/mcp-server/tools/list-generators.js.map +1 -1
- 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 +101 -25
- package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
- package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
- package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
- package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
- package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
- package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
- package/src/open-api/ts-client/generator.d.ts +3 -3
- package/src/open-api/ts-client/generator.js +41 -26
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-client/schema.d.js +6 -0
- package/src/open-api/ts-client/schema.d.js.map +1 -0
- package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
- package/src/open-api/ts-hooks/generator.d.ts +3 -3
- 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 +84 -14
- package/src/open-api/ts-hooks/schema.d.js +6 -0
- package/src/open-api/ts-hooks/schema.d.js.map +1 -0
- package/src/open-api/ts-metadata/generator.d.ts +3 -3
- 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 +3 -5
- 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 +8 -4
- package/src/open-api/utils/codegen-data.js +494 -674
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.d.ts +5 -1
- package/src/open-api/utils/normalise.js +437 -246
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.d.ts +2 -2
- package/src/open-api/utils/parse.js +11 -13
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/parser.d.ts +55 -0
- package/src/open-api/utils/parser.js +787 -0
- package/src/open-api/utils/parser.js.map +1 -0
- package/src/open-api/utils/refs.d.ts +1 -1
- package/src/open-api/utils/refs.js +12 -22
- package/src/open-api/utils/refs.js.map +1 -1
- package/src/open-api/utils/types.d.ts +18 -0
- package/src/open-api/utils/types.js +5 -2
- package/src/open-api/utils/types.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +106 -28
- package/src/preset/generator.d.ts +4 -4
- package/src/preset/generator.js +64 -147
- 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 +5 -2
- package/src/preset/schema.json +11 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +320 -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} +182 -314
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +189 -0
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +30 -0
- package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +28 -0
- package/src/py/agent/a2a-connection/generator.d.ts +3 -3
- package/src/py/agent/a2a-connection/generator.js +113 -85
- 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 +1 -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 +10 -0
- package/src/py/agent/gateway-connection/generator.js +119 -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 +3 -3
- package/src/py/agent/generator.js +290 -179
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +153 -89
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +30 -0
- package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +30 -0
- package/src/py/agent/mcp-connection/generator.d.ts +3 -3
- package/src/py/agent/mcp-connection/generator.js +65 -126
- 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 +11 -19
- package/src/py/agent/react-connection/generator.d.ts +4 -4
- package/src/py/agent/react-connection/generator.js +55 -59
- 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} +6 -6
- 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 +2 -1
- package/src/py/agent/schema.json +6 -1
- package/src/py/api/generator.d.ts +3 -3
- 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 +1526 -0
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
- package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/agent-connection/generator.js +39 -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 +23 -0
- package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +37 -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 +10 -0
- package/src/py/dynamodb/generator.js +110 -0
- package/src/py/dynamodb/generator.js.map +1 -0
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
- package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +39 -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 +75 -0
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +212 -4678
- 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 +3 -3
- package/src/py/fast-api/generator.js +90 -87
- 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 +4 -4
- package/src/py/fast-api/react/generator.js +25 -25
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.d.ts +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 +5 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/py/lambda-function/generator.d.ts +3 -3
- package/src/py/lambda-function/generator.js +60 -59
- 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 +208 -19
- package/src/py/mcp-server/files/deploy/Dockerfile.template +1 -1
- package/src/py/mcp-server/generator.d.ts +3 -3
- package/src/py/mcp-server/generator.js +162 -124
- 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 +5 -0
- package/src/py/project/generator.d.ts +17 -4
- package/src/py/project/generator.js +205 -127
- 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 +2038 -0
- package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +104 -0
- package/src/py/rdb/agent-connection/generator.d.ts +10 -0
- package/src/py/rdb/agent-connection/generator.js +46 -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 +44 -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 +54 -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 +10 -0
- package/src/py/rdb/files/Dockerfile.migration.template +10 -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 +6 -0
- package/src/py/rdb/generator.js +274 -0
- package/src/py/rdb/generator.js.map +1 -0
- package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +101 -0
- package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
- package/src/py/rdb/mcp-server-connection/generator.js +46 -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 +77 -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 +16 -0
- package/src/sdk/py.js +11 -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 +33 -0
- package/src/sdk/ts.js +35 -0
- package/src/sdk/ts.js.map +1 -0
- package/{sdk → src/sdk}/utils/ast.d.ts +1 -2
- package/src/sdk/utils/ast.js +6 -0
- package/src/sdk/utils/ast.js.map +1 -0
- package/{sdk → src/sdk}/utils/format.d.ts +1 -1
- 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 +19 -24
- package/src/smithy/project/files/build.Dockerfile.template +1 -4
- package/src/smithy/project/files/src/operations/echo.smithy.template +1 -0
- package/src/smithy/project/generator.d.ts +3 -3
- package/src/smithy/project/generator.js +64 -57
- 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 +1 -0
- package/src/smithy/project/schema.json +5 -0
- package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/smithy/react-connection/generator.d.ts +3 -3
- package/src/smithy/react-connection/generator.js +39 -47
- 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 +809 -122
- 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 +3 -3
- package/src/smithy/ts/api/generator.js +128 -105
- 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 +5 -0
- 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 +3 -3
- package/src/terraform/project/generator.js +156 -104
- 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 +1099 -134
- 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 +4 -4
- package/src/trpc/backend/generator.js +98 -84
- 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 +3 -2
- package/src/trpc/backend/schema.json +5 -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 +4 -4
- package/src/trpc/react/generator.js +63 -58
- 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 +781 -22
- package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +256 -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 +3 -3
- package/src/ts/agent/a2a-connection/generator.js +64 -55
- 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 +1 -1
- package/src/ts/agent/files/common/agent.ts.template +6 -2
- package/src/ts/agent/files/deploy/Dockerfile.template +4 -1
- 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 +220 -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 +10 -0
- package/src/ts/agent/gateway-connection/generator.js +116 -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 +3 -3
- package/src/ts/agent/generator.js +203 -144
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +192 -111
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +22 -0
- package/src/ts/agent/mcp-connection/generator.d.ts +3 -3
- package/src/ts/agent/mcp-connection/generator.js +54 -59
- 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/generator.d.ts +4 -4
- package/src/ts/agent/react-connection/generator.js +86 -80
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/local-dev.d.ts +13 -0
- package/src/ts/agent/react-connection/local-dev.js +17 -0
- package/src/ts/agent/react-connection/local-dev.js.map +1 -0
- package/src/ts/agent/react-connection/schema.d.js +8 -0
- package/src/ts/agent/react-connection/schema.d.js.map +1 -0
- package/src/ts/agent/react-connection/schema.d.ts +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 +1 -0
- package/src/ts/agent/schema.json +5 -0
- package/src/ts/api/generator.d.ts +3 -3
- 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 +3 -1
- package/src/ts/api/schema.json +5 -0
- package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +15 -16
- package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +3 -2
- package/src/ts/astro-docs/generator.d.ts +3 -3
- package/src/ts/astro-docs/generator.js +71 -54
- 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/docs/generator.d.ts +3 -3
- 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 -512
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/dynamodb/agent-connection/generator.d.ts +3 -3
- package/src/ts/dynamodb/agent-connection/generator.js +21 -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 +3 -3
- package/src/ts/dynamodb/generator.js +73 -63
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +3 -3
- package/src/ts/dynamodb/mcp-server-connection/generator.js +21 -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 +25 -2
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/dynamodb/smithy-connection/generator.d.ts +3 -3
- package/src/ts/dynamodb/smithy-connection/generator.js +20 -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 +3 -3
- package/src/ts/dynamodb/trpc-connection/generator.d.ts +3 -3
- package/src/ts/dynamodb/trpc-connection/generator.js +20 -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 +4 -4
- package/src/ts/lambda-function/generator.d.ts +3 -3
- package/src/ts/lambda-function/generator.js +59 -56
- 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 +53 -99
- package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +24 -0
- package/src/ts/lib/biome.d.ts +7 -0
- package/src/ts/lib/biome.js +58 -0
- package/src/ts/lib/biome.js.map +1 -0
- package/src/ts/lib/generator.d.ts +3 -3
- package/src/ts/lib/generator.js +107 -108
- 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 +12 -2
- package/src/ts/lib/ts-project-utils.js +90 -67
- 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 +2 -2
- package/src/ts/lib/vitest.js +29 -26
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +208 -42
- package/src/ts/mcp-server/files/Dockerfile.template +4 -1
- package/src/ts/mcp-server/generator.d.ts +3 -3
- package/src/ts/mcp-server/generator.js +181 -136
- 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 +5 -0
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +46 -26
- 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 +2 -2
- package/src/ts/nx-generator/generator.js +113 -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-plugin/__snapshots__/generator.spec.ts.snap +30 -18
- 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 +3 -3
- package/src/ts/nx-plugin/generator.d.ts +3 -3
- package/src/ts/nx-plugin/generator.js +61 -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 +1 -1
- package/src/ts/nx-plugin/utils.js +36 -39
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +455 -646
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/agent-connection/generator.d.ts +3 -3
- package/src/ts/rdb/agent-connection/generator.js +38 -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 +8 -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 +2 -29
- 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 +3 -7
- package/src/ts/rdb/generator.js +173 -131
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/mcp-server-connection/generator.d.ts +3 -3
- package/src/ts/rdb/mcp-server-connection/generator.js +36 -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 +6 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/rdb/smithy-connection/generator.d.ts +3 -3
- package/src/ts/rdb/smithy-connection/generator.js +46 -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 +3 -3
- package/src/ts/rdb/trpc-connection/generator.d.ts +3 -3
- package/src/ts/rdb/trpc-connection/generator.js +36 -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.d.ts +1 -1
- 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 +1 -16
- package/src/ts/react-website/agui/generator.d.ts +1 -1
- package/src/ts/react-website/agui/generator.js +69 -62
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +628 -614
- package/src/ts/react-website/app/generator.d.ts +4 -4
- package/src/ts/react-website/app/generator.js +217 -192
- 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 +11 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +129 -18
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +36 -10
- 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 +4 -4
- package/src/ts/react-website/cognito-auth/generator.js +64 -63
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +8 -6
- package/src/ts/react-website/cognito-auth/grit/cognito-auth-wrapper.grit +1 -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.d.ts +1 -1
- package/src/ts/react-website/cognito-auth/utils.js +34 -32
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
- package/src/ts/react-website/runtime-config/generator.d.ts +3 -3
- package/src/ts/react-website/runtime-config/generator.js +29 -31
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/react-website/runtime-config/schema.d.js +6 -0
- package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
- package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
- package/src/ts/react-website/runtime-config/schema.json +5 -0
- package/src/ts/sync/generator.d.ts +3 -3
- package/src/ts/sync/generator.js +60 -59
- package/src/ts/sync/generator.js.map +1 -1
- package/src/ts/website/app/generator.d.ts +3 -3
- 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 +4 -4
- 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/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 +117 -25
- package/src/utils/agent-connection/agent-connection.js +414 -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 +22 -32
- 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 +36 -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 +5 -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 +11 -3
- package/src/utils/agent-core-constructs/agent-core-constructs.js +93 -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 +31 -4
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +50 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +487 -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 +32 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +449 -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 +151 -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 +2 -2
- package/src/utils/api-constructs/api-constructs.js +36 -31
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +8 -8
- package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +11 -8
- 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 +54 -18
- package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
- package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +101 -12
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +194 -8
- package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
- package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
- package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
- package/src/utils/api-constructs/open-api-metadata.d.ts +2 -2
- 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.d.ts +5 -1
- package/src/utils/ast/website.js +18 -20
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.d.ts +33 -1
- package/src/utils/ast.js +146 -70
- 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 +1 -1
- package/src/utils/bundle/bundle.js +50 -47
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +10 -3
- package/src/utils/commands.js +60 -26
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +5 -5
- package/src/utils/config/index.js +5 -4
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.d.ts +13 -3
- package/src/utils/config/utils.js +65 -43
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +1 -1
- package/src/utils/connection/open-api/react.d.ts +6 -6
- package/src/utils/connection/open-api/react.js +81 -77
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.d.ts +1 -1
- package/src/utils/containers.js +22 -23
- package/src/utils/containers.js.map +1 -1
- package/src/utils/docker.d.ts +44 -0
- package/src/utils/docker.js +81 -0
- package/src/utils/docker.js.map +1 -0
- package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +3 -3
- 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/index.ts.template +4 -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 +106 -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 +117 -0
- package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
- package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +2 -2
- 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 +45 -2
- package/src/utils/format.js +323 -81
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.d.ts +1 -1
- package/src/utils/fs.js +14 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
- package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
- package/src/utils/function-constructs/function-constructs.d.ts +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.d.ts +4 -0
- package/src/utils/generators.js +18 -20
- package/src/utils/generators.js.map +1 -1
- package/src/utils/git.d.ts +1 -1
- package/src/utils/git.js +19 -34
- package/src/utils/git.js.map +1 -1
- package/src/utils/iac-providers.js +5 -5
- package/src/utils/iac-providers.js.map +1 -1
- package/src/utils/iac.d.ts +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 +125 -16
- 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 +106 -6
- package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
- package/src/utils/identity-constructs/identity-constructs.d.ts +2 -2
- package/src/utils/identity-constructs/identity-constructs.js +28 -28
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/init.d.ts +53 -0
- package/src/utils/init.js +252 -0
- package/src/utils/init.js.map +1 -0
- package/src/utils/install.d.ts +32 -0
- package/src/utils/install.js +56 -0
- package/src/utils/install.js.map +1 -0
- package/src/utils/js.d.ts +4 -0
- package/src/utils/js.js +27 -20
- package/src/utils/js.js.map +1 -1
- package/src/utils/mcp.d.ts +1 -1
- package/src/utils/mcp.js +34 -41
- package/src/utils/mcp.js.map +1 -1
- package/src/utils/metrics.d.ts +9 -3
- package/src/utils/metrics.js +61 -46
- package/src/utils/metrics.js.map +1 -1
- 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 +28 -0
- package/src/utils/module-format.js +28 -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 +1 -1
- package/src/utils/npm-scope.js +9 -17
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/nx.d.ts +39 -4
- package/src/utils/nx.js +169 -75
- package/src/utils/nx.js.map +1 -1
- package/src/utils/nxlv-python.d.ts +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.d.ts +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 -1
- package/src/utils/pnpm-workspace.js +22 -22
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/port.d.ts +29 -7
- package/src/utils/port.js +67 -28
- package/src/utils/port.js.map +1 -1
- package/src/utils/py.d.ts +16 -3
- package/src/utils/py.js +72 -47
- 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 +97 -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 +36 -48
- package/src/utils/rdb-constructs/rdb-constructs.d.ts +16 -5
- package/src/utils/rdb-constructs/rdb-constructs.js +38 -41
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +1 -0
- package/src/utils/shared-constructs-constants.js +16 -15
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +2 -2
- package/src/utils/shared-constructs.js +60 -67
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +11 -0
- package/src/utils/shared-dynamodb-scripts.js +25 -0
- package/src/utils/shared-dynamodb-scripts.js.map +1 -0
- package/src/utils/shared-infra-config.d.ts +1 -1
- 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 +11 -0
- package/src/utils/shared-infra-scripts.js +42 -0
- package/src/utils/shared-infra-scripts.js.map +1 -0
- package/src/utils/shared-rdb-scripts.d.ts +16 -0
- package/src/utils/shared-rdb-scripts.js +32 -0
- package/src/utils/shared-rdb-scripts.js.map +1 -0
- package/src/utils/shared-scripts.d.ts +2 -5
- package/src/utils/shared-scripts.js +12 -38
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +1 -1
- package/src/utils/shared-shadcn.js +65 -71
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/test.d.ts +15 -1
- package/src/utils/test.js +41 -23
- package/src/utils/test.js.map +1 -1
- package/src/utils/toml.d.ts +1 -1
- package/src/utils/toml.js +10 -14
- package/src/utils/toml.js.map +1 -1
- package/src/utils/versions.d.ts +150 -97
- package/src/utils/versions.js +157 -115
- 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 +75 -7
- 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 +68 -19
- package/src/utils/website-constructs/website-constructs.d.ts +2 -2
- package/src/utils/website-constructs/website-constructs.js +38 -30
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- 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/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.js +0 -48
- package/src/connection/agent-serve-local.js.map +0 -1
- package/src/connection/serve-local.d.ts +0 -15
- 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.d.ts +0 -13
- package/src/ts/agent/react-connection/serve-local.js +0 -19
- package/src/ts/agent/react-connection/serve-local.js.map +0 -1
- package/src/ts/agent/scripts/http/chat.ts.template +0 -35
- package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
- package/src/ts/dynamodb/files/scripts/start-container.ts.template +0 -81
- package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
- package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
- package/src/ts/lib/eslint.d.ts +0 -14
- package/src/ts/lib/eslint.js +0 -90
- package/src/ts/lib/eslint.js.map +0 -1
- package/src/ts/lib/grit/eslint-dependency-checks-warn.grit +0 -1
- package/src/ts/rdb/files/scripts/docker-pull.ts.template +0 -15
- package/src/ts/rdb/files/scripts/docker-start.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/{bin → src/bin}/aws-nx-mcp.d.ts +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
|
@@ -1,35 +1,6 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`tsSmithyApiGenerator > should configure git
|
|
4
|
-
"import baseConfig from '../../eslint.config.mjs';
|
|
5
|
-
|
|
6
|
-
export default [
|
|
7
|
-
...baseConfig,
|
|
8
|
-
{
|
|
9
|
-
files: ['**/*.json'],
|
|
10
|
-
rules: {
|
|
11
|
-
'@nx/dependency-checks': [
|
|
12
|
-
'warn',
|
|
13
|
-
{
|
|
14
|
-
ignoredFiles: [
|
|
15
|
-
'{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}',
|
|
16
|
-
'{projectRoot}/vitest.config.{js,ts,mjs,mts}',
|
|
17
|
-
],
|
|
18
|
-
},
|
|
19
|
-
],
|
|
20
|
-
},
|
|
21
|
-
languageOptions: {
|
|
22
|
-
parser: await import('jsonc-eslint-parser'),
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
ignores: ['**/out-tsc', '**/generated'],
|
|
27
|
-
},
|
|
28
|
-
];
|
|
29
|
-
"
|
|
30
|
-
`;
|
|
31
|
-
|
|
32
|
-
exports[`tsSmithyApiGenerator > should configure git and eslint ignores for generated code > gitignore 1`] = `"src/generated"`;
|
|
3
|
+
exports[`tsSmithyApiGenerator > should configure git ignores for generated code > gitignore 1`] = `"src/generated"`;
|
|
33
4
|
|
|
34
5
|
exports[`tsSmithyApiGenerator > should generate smithy ts api with Cognito auth > cognito-auth-infra.ts 1`] = `
|
|
35
6
|
"import { Construct } from 'constructs';
|
|
@@ -156,6 +127,9 @@ export class TestApi<
|
|
|
156
127
|
authorizer: new CognitoUserPoolsAuthorizer(scope, 'TestApiAuthorizer', {
|
|
157
128
|
cognitoUserPools: [props.identity.userPool],
|
|
158
129
|
}),
|
|
130
|
+
// Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
|
|
131
|
+
// and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
|
|
132
|
+
authorizationScopes: ['openid', 'aws.cognito.signin.user.admin'],
|
|
159
133
|
},
|
|
160
134
|
deployOptions: {
|
|
161
135
|
tracingEnabled: true,
|
|
@@ -429,11 +403,11 @@ terraform {
|
|
|
429
403
|
required_providers {
|
|
430
404
|
aws = {
|
|
431
405
|
source = "hashicorp/aws"
|
|
432
|
-
version = "
|
|
406
|
+
version = "6.54.0"
|
|
433
407
|
}
|
|
434
408
|
random = {
|
|
435
409
|
source = "hashicorp/random"
|
|
436
|
-
version = "
|
|
410
|
+
version = "3.9.0"
|
|
437
411
|
}
|
|
438
412
|
}
|
|
439
413
|
}
|
|
@@ -503,8 +477,6 @@ data "aws_caller_identity" "current" {}
|
|
|
503
477
|
|
|
504
478
|
# Resources
|
|
505
479
|
|
|
506
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
507
|
-
|
|
508
480
|
# REST API Gateway
|
|
509
481
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
510
482
|
name = var.api_name
|
|
@@ -521,10 +493,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
521
493
|
tags = var.tags
|
|
522
494
|
}
|
|
523
495
|
|
|
524
|
-
# Note: Deployment and
|
|
525
|
-
# after all methods and integrations are defined
|
|
526
|
-
|
|
527
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
496
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
497
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
528
498
|
|
|
529
499
|
# Gateway Response for CORS (4XX errors)
|
|
530
500
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -682,9 +652,7 @@ output "waf_web_acl_arn" {
|
|
|
682
652
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
683
653
|
}
|
|
684
654
|
|
|
685
|
-
# Note: Stage and
|
|
686
|
-
|
|
687
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement"
|
|
655
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module"
|
|
688
656
|
`;
|
|
689
657
|
|
|
690
658
|
exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform provider and None auth > none-auth-terraform.tf 1`] = `
|
|
@@ -694,7 +662,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
|
|
|
694
662
|
required_providers {
|
|
695
663
|
aws = {
|
|
696
664
|
source = "hashicorp/aws"
|
|
697
|
-
version = "
|
|
665
|
+
version = "6.54.0"
|
|
698
666
|
}
|
|
699
667
|
}
|
|
700
668
|
}
|
|
@@ -716,11 +684,47 @@ variable "additional_iam_policy_statements" {
|
|
|
716
684
|
default = []
|
|
717
685
|
}
|
|
718
686
|
|
|
687
|
+
variable "appconfig_application_id" {
|
|
688
|
+
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."
|
|
689
|
+
type = string
|
|
690
|
+
default = null
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
variable "appconfig_application_arn" {
|
|
694
|
+
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."
|
|
695
|
+
type = string
|
|
696
|
+
default = null
|
|
697
|
+
}
|
|
698
|
+
|
|
719
699
|
variable "asset_bucket_name" {
|
|
720
700
|
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."
|
|
721
701
|
type = string
|
|
722
702
|
}
|
|
723
703
|
|
|
704
|
+
# VPC Configuration (optional)
|
|
705
|
+
variable "enable_vpc" {
|
|
706
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
707
|
+
type = bool
|
|
708
|
+
default = false
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
variable "vpc_id" {
|
|
712
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
713
|
+
type = string
|
|
714
|
+
default = null
|
|
715
|
+
|
|
716
|
+
validation {
|
|
717
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
718
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
variable "subnet_ids" {
|
|
723
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
724
|
+
type = list(string)
|
|
725
|
+
default = null
|
|
726
|
+
}
|
|
727
|
+
|
|
724
728
|
# CORS Configuration (passed to core module)
|
|
725
729
|
|
|
726
730
|
variable "cors_allow_headers" {
|
|
@@ -783,6 +787,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
783
787
|
}
|
|
784
788
|
|
|
785
789
|
# Use the core REST API module
|
|
790
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
791
|
+
module "account" {
|
|
792
|
+
source = "../../../core/api/api-gateway-account"
|
|
793
|
+
}
|
|
794
|
+
|
|
786
795
|
module "rest_api" {
|
|
787
796
|
source = "../../../core/api/rest-api"
|
|
788
797
|
|
|
@@ -812,9 +821,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
812
821
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
813
822
|
}
|
|
814
823
|
|
|
824
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
825
|
+
resource "aws_security_group" "api_lambda" {
|
|
826
|
+
count = var.enable_vpc ? 1 : 0
|
|
827
|
+
|
|
828
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
829
|
+
name_prefix = "test-api-lambda-"
|
|
830
|
+
description = "Security group for the TestApi API Lambda function"
|
|
831
|
+
vpc_id = var.vpc_id
|
|
832
|
+
tags = var.tags
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
836
|
+
count = var.enable_vpc ? 1 : 0
|
|
837
|
+
|
|
838
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
839
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
840
|
+
from_port = 443
|
|
841
|
+
to_port = 443
|
|
842
|
+
ip_protocol = "tcp"
|
|
843
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
844
|
+
}
|
|
845
|
+
|
|
815
846
|
# Lambda function
|
|
816
847
|
resource "aws_lambda_function" "api_lambda" {
|
|
817
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
848
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
818
849
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
819
850
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
820
851
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -836,13 +867,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
836
867
|
mode = "Active"
|
|
837
868
|
}
|
|
838
869
|
|
|
870
|
+
dynamic "vpc_config" {
|
|
871
|
+
for_each = var.enable_vpc ? [1] : []
|
|
872
|
+
content {
|
|
873
|
+
subnet_ids = var.subnet_ids
|
|
874
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
839
878
|
|
|
840
879
|
environment {
|
|
841
880
|
variables = merge({
|
|
842
|
-
}, var.
|
|
881
|
+
}, var.appconfig_application_id != null ? {
|
|
882
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
883
|
+
} : {}, var.env)
|
|
843
884
|
}
|
|
844
885
|
|
|
845
886
|
tags = var.tags
|
|
887
|
+
|
|
888
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
846
889
|
}
|
|
847
890
|
|
|
848
891
|
# IAM role for Lambda execution
|
|
@@ -877,18 +920,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
877
920
|
role = aws_iam_role.lambda_execution_role.name
|
|
878
921
|
}
|
|
879
922
|
|
|
923
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
924
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
925
|
+
count = var.enable_vpc ? 1 : 0
|
|
926
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
927
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
928
|
+
}
|
|
929
|
+
|
|
880
930
|
# Additional IAM policies for Lambda (if provided)
|
|
881
931
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
882
|
-
count = length(
|
|
932
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
883
933
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
884
934
|
role = aws_iam_role.lambda_execution_role.id
|
|
885
935
|
|
|
886
936
|
policy = jsonencode({
|
|
887
937
|
Version = "2012-10-17"
|
|
888
|
-
Statement =
|
|
938
|
+
Statement = local.lambda_policy_statements
|
|
889
939
|
})
|
|
890
940
|
}
|
|
891
941
|
|
|
942
|
+
locals {
|
|
943
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
944
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
945
|
+
{
|
|
946
|
+
Effect = "Allow"
|
|
947
|
+
Action = [
|
|
948
|
+
"appconfig:StartConfigurationSession",
|
|
949
|
+
"appconfig:GetLatestConfiguration"
|
|
950
|
+
]
|
|
951
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
952
|
+
}
|
|
953
|
+
] : [], var.additional_iam_policy_statements)
|
|
954
|
+
}
|
|
955
|
+
|
|
892
956
|
# CloudWatch Log Group for Lambda
|
|
893
957
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
894
958
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -1108,11 +1172,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
1108
1172
|
]
|
|
1109
1173
|
}
|
|
1110
1174
|
|
|
1175
|
+
# KMS key for encrypting access logs at rest
|
|
1176
|
+
resource "aws_kms_key" "access_logs" {
|
|
1177
|
+
description = "TestApi API access log encryption"
|
|
1178
|
+
deletion_window_in_days = 7
|
|
1179
|
+
enable_key_rotation = true
|
|
1180
|
+
|
|
1181
|
+
policy = jsonencode({
|
|
1182
|
+
Version = "2012-10-17"
|
|
1183
|
+
Statement = [
|
|
1184
|
+
{
|
|
1185
|
+
Sid = "Enable IAM User Permissions"
|
|
1186
|
+
Effect = "Allow"
|
|
1187
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
1188
|
+
Action = "kms:*"
|
|
1189
|
+
Resource = "*"
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
Sid = "Allow CloudWatch Logs"
|
|
1193
|
+
Effect = "Allow"
|
|
1194
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
1195
|
+
Action = [
|
|
1196
|
+
"kms:Encrypt",
|
|
1197
|
+
"kms:Decrypt",
|
|
1198
|
+
"kms:ReEncrypt*",
|
|
1199
|
+
"kms:GenerateDataKey*",
|
|
1200
|
+
"kms:DescribeKey"
|
|
1201
|
+
]
|
|
1202
|
+
Resource = "*"
|
|
1203
|
+
Condition = {
|
|
1204
|
+
ArnEquals = {
|
|
1205
|
+
"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"
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
]
|
|
1210
|
+
})
|
|
1211
|
+
|
|
1212
|
+
tags = var.tags
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
resource "aws_kms_alias" "access_logs" {
|
|
1216
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
1217
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
# Access logs for the API Gateway stage
|
|
1221
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
1222
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
1223
|
+
retention_in_days = 365
|
|
1224
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
1225
|
+
tags = var.tags
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1111
1228
|
# API Gateway stage
|
|
1112
1229
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
1113
1230
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
1114
|
-
#checkov:skip=
|
|
1115
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
1231
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
1116
1232
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
1117
1233
|
#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
|
|
1118
1234
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -1120,9 +1236,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
1120
1236
|
stage_name = "prod"
|
|
1121
1237
|
xray_tracing_enabled = true
|
|
1122
1238
|
|
|
1239
|
+
access_log_settings {
|
|
1240
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
1241
|
+
format = jsonencode({
|
|
1242
|
+
requestId = "$context.requestId"
|
|
1243
|
+
ip = "$context.identity.sourceIp"
|
|
1244
|
+
caller = "$context.identity.caller"
|
|
1245
|
+
user = "$context.identity.user"
|
|
1246
|
+
requestTime = "$context.requestTime"
|
|
1247
|
+
httpMethod = "$context.httpMethod"
|
|
1248
|
+
resourcePath = "$context.resourcePath"
|
|
1249
|
+
status = "$context.status"
|
|
1250
|
+
protocol = "$context.protocol"
|
|
1251
|
+
responseLength = "$context.responseLength"
|
|
1252
|
+
})
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1123
1255
|
tags = var.tags
|
|
1124
1256
|
|
|
1125
|
-
|
|
1257
|
+
# Ensure the account-level role is configured before the stage is created
|
|
1258
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
# Default throttling applied to all resource paths and methods
|
|
1262
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
1263
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
1264
|
+
rest_api_id = module.rest_api.api_id
|
|
1265
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
1266
|
+
method_path = "*/*"
|
|
1267
|
+
|
|
1268
|
+
settings {
|
|
1269
|
+
throttling_rate_limit = 10000
|
|
1270
|
+
throttling_burst_limit = 5000
|
|
1271
|
+
}
|
|
1126
1272
|
}
|
|
1127
1273
|
|
|
1128
1274
|
# API Gateway Resource Policy
|
|
@@ -1261,6 +1407,11 @@ output "lambda_execution_role_name" {
|
|
|
1261
1407
|
value = aws_iam_role.lambda_execution_role.name
|
|
1262
1408
|
}
|
|
1263
1409
|
|
|
1410
|
+
output "security_group_id" {
|
|
1411
|
+
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."
|
|
1412
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1264
1415
|
# Integration Outputs
|
|
1265
1416
|
output "integration_id" {
|
|
1266
1417
|
description = "ID of the Lambda integration"
|
|
@@ -1333,42 +1484,38 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1333
1484
|
},
|
|
1334
1485
|
"compile": {
|
|
1335
1486
|
"executor": "nx:run-commands",
|
|
1487
|
+
"dependsOn": ["copy-ssdk"],
|
|
1336
1488
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/tsc"],
|
|
1337
1489
|
"options": {
|
|
1338
1490
|
"command": "tsc --build tsconfig.lib.json",
|
|
1339
1491
|
"cwd": "{projectRoot}"
|
|
1340
|
-
}
|
|
1341
|
-
"dependsOn": ["copy-ssdk"]
|
|
1492
|
+
}
|
|
1342
1493
|
},
|
|
1343
1494
|
"lint": {
|
|
1344
|
-
"executor": "
|
|
1495
|
+
"executor": "nx:run-commands",
|
|
1345
1496
|
"cache": true,
|
|
1346
|
-
"inputs": ["
|
|
1497
|
+
"inputs": ["biome"],
|
|
1498
|
+
"options": {
|
|
1499
|
+
"command": "biome lint {projectRoot}"
|
|
1500
|
+
},
|
|
1347
1501
|
"configurations": {
|
|
1348
1502
|
"fix": {
|
|
1349
|
-
"
|
|
1503
|
+
"command": "biome check --write {projectRoot}"
|
|
1350
1504
|
},
|
|
1351
1505
|
"skip-lint": {
|
|
1352
|
-
"
|
|
1506
|
+
"command": "node -e \\"\\""
|
|
1353
1507
|
}
|
|
1354
1508
|
}
|
|
1355
1509
|
},
|
|
1356
|
-
"test": {
|
|
1357
|
-
"executor": "@nx/vitest:test",
|
|
1358
|
-
"outputs": ["{options.reportsDirectory}"],
|
|
1359
|
-
"options": {
|
|
1360
|
-
"reportsDirectory": "{workspaceRoot}/coverage/{projectRoot}"
|
|
1361
|
-
}
|
|
1362
|
-
},
|
|
1363
1510
|
"bundle": {
|
|
1511
|
+
"executor": "nx:run-commands",
|
|
1512
|
+
"dependsOn": ["compile"],
|
|
1364
1513
|
"cache": true,
|
|
1365
1514
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/bundle"],
|
|
1366
|
-
"executor": "nx:run-commands",
|
|
1367
1515
|
"options": {
|
|
1368
1516
|
"command": "rolldown -c rolldown.config.ts",
|
|
1369
1517
|
"cwd": "{projectRoot}"
|
|
1370
|
-
}
|
|
1371
|
-
"dependsOn": ["compile"]
|
|
1518
|
+
}
|
|
1372
1519
|
},
|
|
1373
1520
|
"copy-ssdk": {
|
|
1374
1521
|
"cache": true,
|
|
@@ -1391,31 +1538,31 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1391
1538
|
},
|
|
1392
1539
|
"watch-copy-ssdk": {
|
|
1393
1540
|
"executor": "nx:run-commands",
|
|
1541
|
+
"continuous": true,
|
|
1394
1542
|
"options": {
|
|
1395
|
-
"command": "nx watch --projects=@proj/test-api-model --
|
|
1396
|
-
}
|
|
1397
|
-
"continuous": true
|
|
1543
|
+
"command": "nx watch --projects=@proj/test-api-model --includeDependencies -- nx run @proj/test-api:copy-ssdk"
|
|
1544
|
+
}
|
|
1398
1545
|
},
|
|
1399
1546
|
"serve": {
|
|
1400
1547
|
"executor": "nx:run-commands",
|
|
1548
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1549
|
+
"continuous": true,
|
|
1401
1550
|
"options": {
|
|
1402
1551
|
"command": "tsx --watch src/local-server.ts",
|
|
1403
1552
|
"cwd": "{projectRoot}"
|
|
1404
|
-
}
|
|
1405
|
-
"continuous": true,
|
|
1406
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1553
|
+
}
|
|
1407
1554
|
},
|
|
1408
|
-
"
|
|
1555
|
+
"dev": {
|
|
1409
1556
|
"executor": "nx:run-commands",
|
|
1557
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1558
|
+
"continuous": true,
|
|
1410
1559
|
"options": {
|
|
1411
1560
|
"command": "tsx --watch src/local-server.ts",
|
|
1412
1561
|
"cwd": "{projectRoot}",
|
|
1413
1562
|
"env": {
|
|
1414
|
-
"
|
|
1563
|
+
"LOCAL_DEV": "true"
|
|
1415
1564
|
}
|
|
1416
|
-
}
|
|
1417
|
-
"continuous": true,
|
|
1418
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1565
|
+
}
|
|
1419
1566
|
}
|
|
1420
1567
|
}
|
|
1421
1568
|
}
|
|
@@ -1708,11 +1855,11 @@ terraform {
|
|
|
1708
1855
|
required_providers {
|
|
1709
1856
|
aws = {
|
|
1710
1857
|
source = "hashicorp/aws"
|
|
1711
|
-
version = "
|
|
1858
|
+
version = "6.54.0"
|
|
1712
1859
|
}
|
|
1713
1860
|
random = {
|
|
1714
1861
|
source = "hashicorp/random"
|
|
1715
|
-
version = "
|
|
1862
|
+
version = "3.9.0"
|
|
1716
1863
|
}
|
|
1717
1864
|
}
|
|
1718
1865
|
}
|
|
@@ -1782,8 +1929,6 @@ data "aws_caller_identity" "current" {}
|
|
|
1782
1929
|
|
|
1783
1930
|
# Resources
|
|
1784
1931
|
|
|
1785
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
1786
|
-
|
|
1787
1932
|
# REST API Gateway
|
|
1788
1933
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
1789
1934
|
name = var.api_name
|
|
@@ -1800,10 +1945,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
1800
1945
|
tags = var.tags
|
|
1801
1946
|
}
|
|
1802
1947
|
|
|
1803
|
-
# Note: Deployment and
|
|
1804
|
-
# after all methods and integrations are defined
|
|
1805
|
-
|
|
1806
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
1948
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
1949
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
1807
1950
|
|
|
1808
1951
|
# Gateway Response for CORS (4XX errors)
|
|
1809
1952
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -1961,16 +2104,14 @@ output "waf_web_acl_arn" {
|
|
|
1961
2104
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
1962
2105
|
}
|
|
1963
2106
|
|
|
1964
|
-
# Note: Stage and
|
|
1965
|
-
|
|
1966
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
2107
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
1967
2108
|
"test-api.tf": "terraform {
|
|
1968
2109
|
required_version = ">= 1.0"
|
|
1969
2110
|
|
|
1970
2111
|
required_providers {
|
|
1971
2112
|
aws = {
|
|
1972
2113
|
source = "hashicorp/aws"
|
|
1973
|
-
version = "
|
|
2114
|
+
version = "6.54.0"
|
|
1974
2115
|
}
|
|
1975
2116
|
}
|
|
1976
2117
|
}
|
|
@@ -2002,11 +2143,47 @@ variable "additional_iam_policy_statements" {
|
|
|
2002
2143
|
default = []
|
|
2003
2144
|
}
|
|
2004
2145
|
|
|
2146
|
+
variable "appconfig_application_id" {
|
|
2147
|
+
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."
|
|
2148
|
+
type = string
|
|
2149
|
+
default = null
|
|
2150
|
+
}
|
|
2151
|
+
|
|
2152
|
+
variable "appconfig_application_arn" {
|
|
2153
|
+
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."
|
|
2154
|
+
type = string
|
|
2155
|
+
default = null
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2005
2158
|
variable "asset_bucket_name" {
|
|
2006
2159
|
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."
|
|
2007
2160
|
type = string
|
|
2008
2161
|
}
|
|
2009
2162
|
|
|
2163
|
+
# VPC Configuration (optional)
|
|
2164
|
+
variable "enable_vpc" {
|
|
2165
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
2166
|
+
type = bool
|
|
2167
|
+
default = false
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
variable "vpc_id" {
|
|
2171
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
2172
|
+
type = string
|
|
2173
|
+
default = null
|
|
2174
|
+
|
|
2175
|
+
validation {
|
|
2176
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
2177
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2180
|
+
|
|
2181
|
+
variable "subnet_ids" {
|
|
2182
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
2183
|
+
type = list(string)
|
|
2184
|
+
default = null
|
|
2185
|
+
}
|
|
2186
|
+
|
|
2010
2187
|
# CORS Configuration (passed to core module)
|
|
2011
2188
|
|
|
2012
2189
|
variable "cors_allow_headers" {
|
|
@@ -2069,6 +2246,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2069
2246
|
}
|
|
2070
2247
|
|
|
2071
2248
|
# Use the core REST API module
|
|
2249
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
2250
|
+
module "account" {
|
|
2251
|
+
source = "../../../core/api/api-gateway-account"
|
|
2252
|
+
}
|
|
2253
|
+
|
|
2072
2254
|
module "rest_api" {
|
|
2073
2255
|
source = "../../../core/api/rest-api"
|
|
2074
2256
|
|
|
@@ -2098,9 +2280,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
2098
2280
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
2099
2281
|
}
|
|
2100
2282
|
|
|
2283
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
2284
|
+
resource "aws_security_group" "api_lambda" {
|
|
2285
|
+
count = var.enable_vpc ? 1 : 0
|
|
2286
|
+
|
|
2287
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
2288
|
+
name_prefix = "test-api-lambda-"
|
|
2289
|
+
description = "Security group for the TestApi API Lambda function"
|
|
2290
|
+
vpc_id = var.vpc_id
|
|
2291
|
+
tags = var.tags
|
|
2292
|
+
}
|
|
2293
|
+
|
|
2294
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
2295
|
+
count = var.enable_vpc ? 1 : 0
|
|
2296
|
+
|
|
2297
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
2298
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
2299
|
+
from_port = 443
|
|
2300
|
+
to_port = 443
|
|
2301
|
+
ip_protocol = "tcp"
|
|
2302
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
2303
|
+
}
|
|
2304
|
+
|
|
2101
2305
|
# Lambda function
|
|
2102
2306
|
resource "aws_lambda_function" "api_lambda" {
|
|
2103
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
2307
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
2104
2308
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
2105
2309
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
2106
2310
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -2122,13 +2326,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2122
2326
|
mode = "Active"
|
|
2123
2327
|
}
|
|
2124
2328
|
|
|
2329
|
+
dynamic "vpc_config" {
|
|
2330
|
+
for_each = var.enable_vpc ? [1] : []
|
|
2331
|
+
content {
|
|
2332
|
+
subnet_ids = var.subnet_ids
|
|
2333
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
2334
|
+
}
|
|
2335
|
+
}
|
|
2336
|
+
|
|
2125
2337
|
|
|
2126
2338
|
environment {
|
|
2127
2339
|
variables = merge({
|
|
2128
|
-
}, var.
|
|
2340
|
+
}, var.appconfig_application_id != null ? {
|
|
2341
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
2342
|
+
} : {}, var.env)
|
|
2129
2343
|
}
|
|
2130
2344
|
|
|
2131
2345
|
tags = var.tags
|
|
2346
|
+
|
|
2347
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
2132
2348
|
}
|
|
2133
2349
|
|
|
2134
2350
|
# IAM role for Lambda execution
|
|
@@ -2163,18 +2379,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
2163
2379
|
role = aws_iam_role.lambda_execution_role.name
|
|
2164
2380
|
}
|
|
2165
2381
|
|
|
2382
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
2383
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
2384
|
+
count = var.enable_vpc ? 1 : 0
|
|
2385
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
2386
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
2387
|
+
}
|
|
2388
|
+
|
|
2166
2389
|
# Additional IAM policies for Lambda (if provided)
|
|
2167
2390
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
2168
|
-
count = length(
|
|
2391
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
2169
2392
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
2170
2393
|
role = aws_iam_role.lambda_execution_role.id
|
|
2171
2394
|
|
|
2172
2395
|
policy = jsonencode({
|
|
2173
2396
|
Version = "2012-10-17"
|
|
2174
|
-
Statement =
|
|
2397
|
+
Statement = local.lambda_policy_statements
|
|
2175
2398
|
})
|
|
2176
2399
|
}
|
|
2177
2400
|
|
|
2401
|
+
locals {
|
|
2402
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
2403
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
2404
|
+
{
|
|
2405
|
+
Effect = "Allow"
|
|
2406
|
+
Action = [
|
|
2407
|
+
"appconfig:StartConfigurationSession",
|
|
2408
|
+
"appconfig:GetLatestConfiguration"
|
|
2409
|
+
]
|
|
2410
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
2411
|
+
}
|
|
2412
|
+
] : [], var.additional_iam_policy_statements)
|
|
2413
|
+
}
|
|
2414
|
+
|
|
2178
2415
|
# CloudWatch Log Group for Lambda
|
|
2179
2416
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
2180
2417
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -2223,6 +2460,9 @@ resource "aws_api_gateway_method" "proxy_method" {
|
|
|
2223
2460
|
|
|
2224
2461
|
authorization = "COGNITO_USER_POOLS"
|
|
2225
2462
|
authorizer_id = aws_api_gateway_authorizer.cognito_authorizer.id
|
|
2463
|
+
# Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
|
|
2464
|
+
# and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
|
|
2465
|
+
authorization_scopes = ["openid", "aws.cognito.signin.user.admin"]
|
|
2226
2466
|
|
|
2227
2467
|
request_parameters = {
|
|
2228
2468
|
"method.request.path.proxy" = true
|
|
@@ -2309,11 +2549,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
2309
2549
|
]
|
|
2310
2550
|
}
|
|
2311
2551
|
|
|
2552
|
+
# KMS key for encrypting access logs at rest
|
|
2553
|
+
resource "aws_kms_key" "access_logs" {
|
|
2554
|
+
description = "TestApi API access log encryption"
|
|
2555
|
+
deletion_window_in_days = 7
|
|
2556
|
+
enable_key_rotation = true
|
|
2557
|
+
|
|
2558
|
+
policy = jsonencode({
|
|
2559
|
+
Version = "2012-10-17"
|
|
2560
|
+
Statement = [
|
|
2561
|
+
{
|
|
2562
|
+
Sid = "Enable IAM User Permissions"
|
|
2563
|
+
Effect = "Allow"
|
|
2564
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
2565
|
+
Action = "kms:*"
|
|
2566
|
+
Resource = "*"
|
|
2567
|
+
},
|
|
2568
|
+
{
|
|
2569
|
+
Sid = "Allow CloudWatch Logs"
|
|
2570
|
+
Effect = "Allow"
|
|
2571
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
2572
|
+
Action = [
|
|
2573
|
+
"kms:Encrypt",
|
|
2574
|
+
"kms:Decrypt",
|
|
2575
|
+
"kms:ReEncrypt*",
|
|
2576
|
+
"kms:GenerateDataKey*",
|
|
2577
|
+
"kms:DescribeKey"
|
|
2578
|
+
]
|
|
2579
|
+
Resource = "*"
|
|
2580
|
+
Condition = {
|
|
2581
|
+
ArnEquals = {
|
|
2582
|
+
"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"
|
|
2583
|
+
}
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
]
|
|
2587
|
+
})
|
|
2588
|
+
|
|
2589
|
+
tags = var.tags
|
|
2590
|
+
}
|
|
2591
|
+
|
|
2592
|
+
resource "aws_kms_alias" "access_logs" {
|
|
2593
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
2594
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
2595
|
+
}
|
|
2596
|
+
|
|
2597
|
+
# Access logs for the API Gateway stage
|
|
2598
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
2599
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
2600
|
+
retention_in_days = 365
|
|
2601
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
2602
|
+
tags = var.tags
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2312
2605
|
# API Gateway stage
|
|
2313
2606
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
2314
2607
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
2315
|
-
#checkov:skip=
|
|
2316
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
2608
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
2317
2609
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
2318
2610
|
#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
|
|
2319
2611
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -2321,9 +2613,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
2321
2613
|
stage_name = "prod"
|
|
2322
2614
|
xray_tracing_enabled = true
|
|
2323
2615
|
|
|
2616
|
+
access_log_settings {
|
|
2617
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
2618
|
+
format = jsonencode({
|
|
2619
|
+
requestId = "$context.requestId"
|
|
2620
|
+
ip = "$context.identity.sourceIp"
|
|
2621
|
+
caller = "$context.identity.caller"
|
|
2622
|
+
user = "$context.identity.user"
|
|
2623
|
+
requestTime = "$context.requestTime"
|
|
2624
|
+
httpMethod = "$context.httpMethod"
|
|
2625
|
+
resourcePath = "$context.resourcePath"
|
|
2626
|
+
status = "$context.status"
|
|
2627
|
+
protocol = "$context.protocol"
|
|
2628
|
+
responseLength = "$context.responseLength"
|
|
2629
|
+
})
|
|
2630
|
+
}
|
|
2631
|
+
|
|
2324
2632
|
tags = var.tags
|
|
2325
2633
|
|
|
2326
|
-
|
|
2634
|
+
# Ensure the account-level role is configured before the stage is created
|
|
2635
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
2636
|
+
}
|
|
2637
|
+
|
|
2638
|
+
# Default throttling applied to all resource paths and methods
|
|
2639
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
2640
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
2641
|
+
rest_api_id = module.rest_api.api_id
|
|
2642
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
2643
|
+
method_path = "*/*"
|
|
2644
|
+
|
|
2645
|
+
settings {
|
|
2646
|
+
throttling_rate_limit = 10000
|
|
2647
|
+
throttling_burst_limit = 5000
|
|
2648
|
+
}
|
|
2327
2649
|
}
|
|
2328
2650
|
|
|
2329
2651
|
# API Gateway Resource Policy
|
|
@@ -2462,6 +2784,11 @@ output "lambda_execution_role_name" {
|
|
|
2462
2784
|
value = aws_iam_role.lambda_execution_role.name
|
|
2463
2785
|
}
|
|
2464
2786
|
|
|
2787
|
+
output "security_group_id" {
|
|
2788
|
+
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."
|
|
2789
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
2790
|
+
}
|
|
2791
|
+
|
|
2465
2792
|
# Integration Outputs
|
|
2466
2793
|
output "integration_id" {
|
|
2467
2794
|
description = "ID of the Lambda integration"
|
|
@@ -2503,11 +2830,11 @@ terraform {
|
|
|
2503
2830
|
required_providers {
|
|
2504
2831
|
aws = {
|
|
2505
2832
|
source = "hashicorp/aws"
|
|
2506
|
-
version = "
|
|
2833
|
+
version = "6.54.0"
|
|
2507
2834
|
}
|
|
2508
2835
|
random = {
|
|
2509
2836
|
source = "hashicorp/random"
|
|
2510
|
-
version = "
|
|
2837
|
+
version = "3.9.0"
|
|
2511
2838
|
}
|
|
2512
2839
|
}
|
|
2513
2840
|
}
|
|
@@ -2577,8 +2904,6 @@ data "aws_caller_identity" "current" {}
|
|
|
2577
2904
|
|
|
2578
2905
|
# Resources
|
|
2579
2906
|
|
|
2580
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
2581
|
-
|
|
2582
2907
|
# REST API Gateway
|
|
2583
2908
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
2584
2909
|
name = var.api_name
|
|
@@ -2595,10 +2920,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
2595
2920
|
tags = var.tags
|
|
2596
2921
|
}
|
|
2597
2922
|
|
|
2598
|
-
# Note: Deployment and
|
|
2599
|
-
# after all methods and integrations are defined
|
|
2600
|
-
|
|
2601
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
2923
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
2924
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
2602
2925
|
|
|
2603
2926
|
# Gateway Response for CORS (4XX errors)
|
|
2604
2927
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -2756,16 +3079,14 @@ output "waf_web_acl_arn" {
|
|
|
2756
3079
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
2757
3080
|
}
|
|
2758
3081
|
|
|
2759
|
-
# Note: Stage and
|
|
2760
|
-
|
|
2761
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
3082
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
2762
3083
|
"test-api.tf": "terraform {
|
|
2763
3084
|
required_version = ">= 1.0"
|
|
2764
3085
|
|
|
2765
3086
|
required_providers {
|
|
2766
3087
|
aws = {
|
|
2767
3088
|
source = "hashicorp/aws"
|
|
2768
|
-
version = "
|
|
3089
|
+
version = "6.54.0"
|
|
2769
3090
|
}
|
|
2770
3091
|
}
|
|
2771
3092
|
}
|
|
@@ -2787,11 +3108,47 @@ variable "additional_iam_policy_statements" {
|
|
|
2787
3108
|
default = []
|
|
2788
3109
|
}
|
|
2789
3110
|
|
|
3111
|
+
variable "appconfig_application_id" {
|
|
3112
|
+
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."
|
|
3113
|
+
type = string
|
|
3114
|
+
default = null
|
|
3115
|
+
}
|
|
3116
|
+
|
|
3117
|
+
variable "appconfig_application_arn" {
|
|
3118
|
+
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."
|
|
3119
|
+
type = string
|
|
3120
|
+
default = null
|
|
3121
|
+
}
|
|
3122
|
+
|
|
2790
3123
|
variable "asset_bucket_name" {
|
|
2791
3124
|
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."
|
|
2792
3125
|
type = string
|
|
2793
3126
|
}
|
|
2794
3127
|
|
|
3128
|
+
# VPC Configuration (optional)
|
|
3129
|
+
variable "enable_vpc" {
|
|
3130
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
3131
|
+
type = bool
|
|
3132
|
+
default = false
|
|
3133
|
+
}
|
|
3134
|
+
|
|
3135
|
+
variable "vpc_id" {
|
|
3136
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3137
|
+
type = string
|
|
3138
|
+
default = null
|
|
3139
|
+
|
|
3140
|
+
validation {
|
|
3141
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
3142
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
3143
|
+
}
|
|
3144
|
+
}
|
|
3145
|
+
|
|
3146
|
+
variable "subnet_ids" {
|
|
3147
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3148
|
+
type = list(string)
|
|
3149
|
+
default = null
|
|
3150
|
+
}
|
|
3151
|
+
|
|
2795
3152
|
# CORS Configuration (passed to core module)
|
|
2796
3153
|
|
|
2797
3154
|
variable "cors_allow_headers" {
|
|
@@ -2854,6 +3211,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2854
3211
|
}
|
|
2855
3212
|
|
|
2856
3213
|
# Use the core REST API module
|
|
3214
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3215
|
+
module "account" {
|
|
3216
|
+
source = "../../../core/api/api-gateway-account"
|
|
3217
|
+
}
|
|
3218
|
+
|
|
2857
3219
|
module "rest_api" {
|
|
2858
3220
|
source = "../../../core/api/rest-api"
|
|
2859
3221
|
|
|
@@ -2883,9 +3245,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
2883
3245
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
2884
3246
|
}
|
|
2885
3247
|
|
|
3248
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
3249
|
+
resource "aws_security_group" "api_lambda" {
|
|
3250
|
+
count = var.enable_vpc ? 1 : 0
|
|
3251
|
+
|
|
3252
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
3253
|
+
name_prefix = "test-api-lambda-"
|
|
3254
|
+
description = "Security group for the TestApi API Lambda function"
|
|
3255
|
+
vpc_id = var.vpc_id
|
|
3256
|
+
tags = var.tags
|
|
3257
|
+
}
|
|
3258
|
+
|
|
3259
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
3260
|
+
count = var.enable_vpc ? 1 : 0
|
|
3261
|
+
|
|
3262
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
3263
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
3264
|
+
from_port = 443
|
|
3265
|
+
to_port = 443
|
|
3266
|
+
ip_protocol = "tcp"
|
|
3267
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
3268
|
+
}
|
|
3269
|
+
|
|
2886
3270
|
# Lambda function
|
|
2887
3271
|
resource "aws_lambda_function" "api_lambda" {
|
|
2888
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
3272
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
2889
3273
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
2890
3274
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
2891
3275
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -2907,13 +3291,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2907
3291
|
mode = "Active"
|
|
2908
3292
|
}
|
|
2909
3293
|
|
|
3294
|
+
dynamic "vpc_config" {
|
|
3295
|
+
for_each = var.enable_vpc ? [1] : []
|
|
3296
|
+
content {
|
|
3297
|
+
subnet_ids = var.subnet_ids
|
|
3298
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
3299
|
+
}
|
|
3300
|
+
}
|
|
3301
|
+
|
|
2910
3302
|
|
|
2911
3303
|
environment {
|
|
2912
3304
|
variables = merge({
|
|
2913
|
-
}, var.
|
|
3305
|
+
}, var.appconfig_application_id != null ? {
|
|
3306
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
3307
|
+
} : {}, var.env)
|
|
2914
3308
|
}
|
|
2915
3309
|
|
|
2916
3310
|
tags = var.tags
|
|
3311
|
+
|
|
3312
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
2917
3313
|
}
|
|
2918
3314
|
|
|
2919
3315
|
# IAM role for Lambda execution
|
|
@@ -2948,18 +3344,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
2948
3344
|
role = aws_iam_role.lambda_execution_role.name
|
|
2949
3345
|
}
|
|
2950
3346
|
|
|
3347
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
3348
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
3349
|
+
count = var.enable_vpc ? 1 : 0
|
|
3350
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
3351
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
3352
|
+
}
|
|
3353
|
+
|
|
2951
3354
|
# Additional IAM policies for Lambda (if provided)
|
|
2952
3355
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
2953
|
-
count = length(
|
|
3356
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
2954
3357
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
2955
3358
|
role = aws_iam_role.lambda_execution_role.id
|
|
2956
3359
|
|
|
2957
3360
|
policy = jsonencode({
|
|
2958
3361
|
Version = "2012-10-17"
|
|
2959
|
-
Statement =
|
|
3362
|
+
Statement = local.lambda_policy_statements
|
|
2960
3363
|
})
|
|
2961
3364
|
}
|
|
2962
3365
|
|
|
3366
|
+
locals {
|
|
3367
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
3368
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
3369
|
+
{
|
|
3370
|
+
Effect = "Allow"
|
|
3371
|
+
Action = [
|
|
3372
|
+
"appconfig:StartConfigurationSession",
|
|
3373
|
+
"appconfig:GetLatestConfiguration"
|
|
3374
|
+
]
|
|
3375
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
3376
|
+
}
|
|
3377
|
+
] : [], var.additional_iam_policy_statements)
|
|
3378
|
+
}
|
|
3379
|
+
|
|
2963
3380
|
# CloudWatch Log Group for Lambda
|
|
2964
3381
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
2965
3382
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -3085,11 +3502,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3085
3502
|
]
|
|
3086
3503
|
}
|
|
3087
3504
|
|
|
3505
|
+
# KMS key for encrypting access logs at rest
|
|
3506
|
+
resource "aws_kms_key" "access_logs" {
|
|
3507
|
+
description = "TestApi API access log encryption"
|
|
3508
|
+
deletion_window_in_days = 7
|
|
3509
|
+
enable_key_rotation = true
|
|
3510
|
+
|
|
3511
|
+
policy = jsonencode({
|
|
3512
|
+
Version = "2012-10-17"
|
|
3513
|
+
Statement = [
|
|
3514
|
+
{
|
|
3515
|
+
Sid = "Enable IAM User Permissions"
|
|
3516
|
+
Effect = "Allow"
|
|
3517
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
3518
|
+
Action = "kms:*"
|
|
3519
|
+
Resource = "*"
|
|
3520
|
+
},
|
|
3521
|
+
{
|
|
3522
|
+
Sid = "Allow CloudWatch Logs"
|
|
3523
|
+
Effect = "Allow"
|
|
3524
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
3525
|
+
Action = [
|
|
3526
|
+
"kms:Encrypt",
|
|
3527
|
+
"kms:Decrypt",
|
|
3528
|
+
"kms:ReEncrypt*",
|
|
3529
|
+
"kms:GenerateDataKey*",
|
|
3530
|
+
"kms:DescribeKey"
|
|
3531
|
+
]
|
|
3532
|
+
Resource = "*"
|
|
3533
|
+
Condition = {
|
|
3534
|
+
ArnEquals = {
|
|
3535
|
+
"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"
|
|
3536
|
+
}
|
|
3537
|
+
}
|
|
3538
|
+
}
|
|
3539
|
+
]
|
|
3540
|
+
})
|
|
3541
|
+
|
|
3542
|
+
tags = var.tags
|
|
3543
|
+
}
|
|
3544
|
+
|
|
3545
|
+
resource "aws_kms_alias" "access_logs" {
|
|
3546
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
3547
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
3548
|
+
}
|
|
3549
|
+
|
|
3550
|
+
# Access logs for the API Gateway stage
|
|
3551
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
3552
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
3553
|
+
retention_in_days = 365
|
|
3554
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
3555
|
+
tags = var.tags
|
|
3556
|
+
}
|
|
3557
|
+
|
|
3088
3558
|
# API Gateway stage
|
|
3089
3559
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3090
3560
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3091
|
-
#checkov:skip=
|
|
3092
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
3561
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3093
3562
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3094
3563
|
#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
|
|
3095
3564
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3097,9 +3566,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3097
3566
|
stage_name = "prod"
|
|
3098
3567
|
xray_tracing_enabled = true
|
|
3099
3568
|
|
|
3569
|
+
access_log_settings {
|
|
3570
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
3571
|
+
format = jsonencode({
|
|
3572
|
+
requestId = "$context.requestId"
|
|
3573
|
+
ip = "$context.identity.sourceIp"
|
|
3574
|
+
caller = "$context.identity.caller"
|
|
3575
|
+
user = "$context.identity.user"
|
|
3576
|
+
requestTime = "$context.requestTime"
|
|
3577
|
+
httpMethod = "$context.httpMethod"
|
|
3578
|
+
resourcePath = "$context.resourcePath"
|
|
3579
|
+
status = "$context.status"
|
|
3580
|
+
protocol = "$context.protocol"
|
|
3581
|
+
responseLength = "$context.responseLength"
|
|
3582
|
+
})
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3100
3585
|
tags = var.tags
|
|
3101
3586
|
|
|
3102
|
-
|
|
3587
|
+
# Ensure the account-level role is configured before the stage is created
|
|
3588
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
3589
|
+
}
|
|
3590
|
+
|
|
3591
|
+
# Default throttling applied to all resource paths and methods
|
|
3592
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
3593
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
3594
|
+
rest_api_id = module.rest_api.api_id
|
|
3595
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
3596
|
+
method_path = "*/*"
|
|
3597
|
+
|
|
3598
|
+
settings {
|
|
3599
|
+
throttling_rate_limit = 10000
|
|
3600
|
+
throttling_burst_limit = 5000
|
|
3601
|
+
}
|
|
3103
3602
|
}
|
|
3104
3603
|
|
|
3105
3604
|
# API Gateway Resource Policy
|
|
@@ -3249,6 +3748,11 @@ output "lambda_execution_role_name" {
|
|
|
3249
3748
|
value = aws_iam_role.lambda_execution_role.name
|
|
3250
3749
|
}
|
|
3251
3750
|
|
|
3751
|
+
output "security_group_id" {
|
|
3752
|
+
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."
|
|
3753
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
3754
|
+
}
|
|
3755
|
+
|
|
3252
3756
|
# Integration Outputs
|
|
3253
3757
|
output "integration_id" {
|
|
3254
3758
|
description = "ID of the Lambda integration"
|
|
@@ -3286,7 +3790,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
|
|
|
3286
3790
|
required_providers {
|
|
3287
3791
|
aws = {
|
|
3288
3792
|
source = "hashicorp/aws"
|
|
3289
|
-
version = "
|
|
3793
|
+
version = "6.54.0"
|
|
3290
3794
|
}
|
|
3291
3795
|
}
|
|
3292
3796
|
}
|
|
@@ -3308,11 +3812,47 @@ variable "additional_iam_policy_statements" {
|
|
|
3308
3812
|
default = []
|
|
3309
3813
|
}
|
|
3310
3814
|
|
|
3815
|
+
variable "appconfig_application_id" {
|
|
3816
|
+
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."
|
|
3817
|
+
type = string
|
|
3818
|
+
default = null
|
|
3819
|
+
}
|
|
3820
|
+
|
|
3821
|
+
variable "appconfig_application_arn" {
|
|
3822
|
+
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."
|
|
3823
|
+
type = string
|
|
3824
|
+
default = null
|
|
3825
|
+
}
|
|
3826
|
+
|
|
3311
3827
|
variable "asset_bucket_name" {
|
|
3312
3828
|
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."
|
|
3313
3829
|
type = string
|
|
3314
3830
|
}
|
|
3315
3831
|
|
|
3832
|
+
# VPC Configuration (optional)
|
|
3833
|
+
variable "enable_vpc" {
|
|
3834
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
3835
|
+
type = bool
|
|
3836
|
+
default = false
|
|
3837
|
+
}
|
|
3838
|
+
|
|
3839
|
+
variable "vpc_id" {
|
|
3840
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3841
|
+
type = string
|
|
3842
|
+
default = null
|
|
3843
|
+
|
|
3844
|
+
validation {
|
|
3845
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
3846
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
3847
|
+
}
|
|
3848
|
+
}
|
|
3849
|
+
|
|
3850
|
+
variable "subnet_ids" {
|
|
3851
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3852
|
+
type = list(string)
|
|
3853
|
+
default = null
|
|
3854
|
+
}
|
|
3855
|
+
|
|
3316
3856
|
# CORS Configuration (passed to core module)
|
|
3317
3857
|
|
|
3318
3858
|
variable "cors_allow_headers" {
|
|
@@ -3375,6 +3915,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
3375
3915
|
}
|
|
3376
3916
|
|
|
3377
3917
|
# Use the core REST API module
|
|
3918
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3919
|
+
module "account" {
|
|
3920
|
+
source = "../../../core/api/api-gateway-account"
|
|
3921
|
+
}
|
|
3922
|
+
|
|
3378
3923
|
module "rest_api" {
|
|
3379
3924
|
source = "../../../core/api/rest-api"
|
|
3380
3925
|
|
|
@@ -3404,9 +3949,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
3404
3949
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
3405
3950
|
}
|
|
3406
3951
|
|
|
3952
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
3953
|
+
resource "aws_security_group" "api_lambda" {
|
|
3954
|
+
count = var.enable_vpc ? 1 : 0
|
|
3955
|
+
|
|
3956
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
3957
|
+
name_prefix = "custom-api-lambda-"
|
|
3958
|
+
description = "Security group for the CustomApi API Lambda function"
|
|
3959
|
+
vpc_id = var.vpc_id
|
|
3960
|
+
tags = var.tags
|
|
3961
|
+
}
|
|
3962
|
+
|
|
3963
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
3964
|
+
count = var.enable_vpc ? 1 : 0
|
|
3965
|
+
|
|
3966
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
3967
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
3968
|
+
from_port = 443
|
|
3969
|
+
to_port = 443
|
|
3970
|
+
ip_protocol = "tcp"
|
|
3971
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
3972
|
+
}
|
|
3973
|
+
|
|
3407
3974
|
# Lambda function
|
|
3408
3975
|
resource "aws_lambda_function" "api_lambda" {
|
|
3409
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
3976
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
3410
3977
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
3411
3978
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
3412
3979
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -3428,13 +3995,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
3428
3995
|
mode = "Active"
|
|
3429
3996
|
}
|
|
3430
3997
|
|
|
3998
|
+
dynamic "vpc_config" {
|
|
3999
|
+
for_each = var.enable_vpc ? [1] : []
|
|
4000
|
+
content {
|
|
4001
|
+
subnet_ids = var.subnet_ids
|
|
4002
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
4005
|
+
|
|
3431
4006
|
|
|
3432
4007
|
environment {
|
|
3433
4008
|
variables = merge({
|
|
3434
|
-
}, var.
|
|
4009
|
+
}, var.appconfig_application_id != null ? {
|
|
4010
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
4011
|
+
} : {}, var.env)
|
|
3435
4012
|
}
|
|
3436
4013
|
|
|
3437
4014
|
tags = var.tags
|
|
4015
|
+
|
|
4016
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
3438
4017
|
}
|
|
3439
4018
|
|
|
3440
4019
|
# IAM role for Lambda execution
|
|
@@ -3469,18 +4048,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
3469
4048
|
role = aws_iam_role.lambda_execution_role.name
|
|
3470
4049
|
}
|
|
3471
4050
|
|
|
4051
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
4052
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
4053
|
+
count = var.enable_vpc ? 1 : 0
|
|
4054
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
4055
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
4056
|
+
}
|
|
4057
|
+
|
|
3472
4058
|
# Additional IAM policies for Lambda (if provided)
|
|
3473
4059
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
3474
|
-
count = length(
|
|
4060
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
3475
4061
|
name = "CustomApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
3476
4062
|
role = aws_iam_role.lambda_execution_role.id
|
|
3477
4063
|
|
|
3478
4064
|
policy = jsonencode({
|
|
3479
4065
|
Version = "2012-10-17"
|
|
3480
|
-
Statement =
|
|
4066
|
+
Statement = local.lambda_policy_statements
|
|
3481
4067
|
})
|
|
3482
4068
|
}
|
|
3483
4069
|
|
|
4070
|
+
locals {
|
|
4071
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
4072
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
4073
|
+
{
|
|
4074
|
+
Effect = "Allow"
|
|
4075
|
+
Action = [
|
|
4076
|
+
"appconfig:StartConfigurationSession",
|
|
4077
|
+
"appconfig:GetLatestConfiguration"
|
|
4078
|
+
]
|
|
4079
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
4080
|
+
}
|
|
4081
|
+
] : [], var.additional_iam_policy_statements)
|
|
4082
|
+
}
|
|
4083
|
+
|
|
3484
4084
|
# CloudWatch Log Group for Lambda
|
|
3485
4085
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
3486
4086
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -3700,11 +4300,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3700
4300
|
]
|
|
3701
4301
|
}
|
|
3702
4302
|
|
|
4303
|
+
# KMS key for encrypting access logs at rest
|
|
4304
|
+
resource "aws_kms_key" "access_logs" {
|
|
4305
|
+
description = "CustomApi API access log encryption"
|
|
4306
|
+
deletion_window_in_days = 7
|
|
4307
|
+
enable_key_rotation = true
|
|
4308
|
+
|
|
4309
|
+
policy = jsonencode({
|
|
4310
|
+
Version = "2012-10-17"
|
|
4311
|
+
Statement = [
|
|
4312
|
+
{
|
|
4313
|
+
Sid = "Enable IAM User Permissions"
|
|
4314
|
+
Effect = "Allow"
|
|
4315
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
4316
|
+
Action = "kms:*"
|
|
4317
|
+
Resource = "*"
|
|
4318
|
+
},
|
|
4319
|
+
{
|
|
4320
|
+
Sid = "Allow CloudWatch Logs"
|
|
4321
|
+
Effect = "Allow"
|
|
4322
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
4323
|
+
Action = [
|
|
4324
|
+
"kms:Encrypt",
|
|
4325
|
+
"kms:Decrypt",
|
|
4326
|
+
"kms:ReEncrypt*",
|
|
4327
|
+
"kms:GenerateDataKey*",
|
|
4328
|
+
"kms:DescribeKey"
|
|
4329
|
+
]
|
|
4330
|
+
Resource = "*"
|
|
4331
|
+
Condition = {
|
|
4332
|
+
ArnEquals = {
|
|
4333
|
+
"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"
|
|
4334
|
+
}
|
|
4335
|
+
}
|
|
4336
|
+
}
|
|
4337
|
+
]
|
|
4338
|
+
})
|
|
4339
|
+
|
|
4340
|
+
tags = var.tags
|
|
4341
|
+
}
|
|
4342
|
+
|
|
4343
|
+
resource "aws_kms_alias" "access_logs" {
|
|
4344
|
+
name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
|
|
4345
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
4346
|
+
}
|
|
4347
|
+
|
|
4348
|
+
# Access logs for the API Gateway stage
|
|
4349
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
4350
|
+
name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
|
|
4351
|
+
retention_in_days = 365
|
|
4352
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
4353
|
+
tags = var.tags
|
|
4354
|
+
}
|
|
4355
|
+
|
|
3703
4356
|
# API Gateway stage
|
|
3704
4357
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3705
4358
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3706
|
-
#checkov:skip=
|
|
3707
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
4359
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3708
4360
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3709
4361
|
#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
|
|
3710
4362
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3712,9 +4364,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3712
4364
|
stage_name = "prod"
|
|
3713
4365
|
xray_tracing_enabled = true
|
|
3714
4366
|
|
|
4367
|
+
access_log_settings {
|
|
4368
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
4369
|
+
format = jsonencode({
|
|
4370
|
+
requestId = "$context.requestId"
|
|
4371
|
+
ip = "$context.identity.sourceIp"
|
|
4372
|
+
caller = "$context.identity.caller"
|
|
4373
|
+
user = "$context.identity.user"
|
|
4374
|
+
requestTime = "$context.requestTime"
|
|
4375
|
+
httpMethod = "$context.httpMethod"
|
|
4376
|
+
resourcePath = "$context.resourcePath"
|
|
4377
|
+
status = "$context.status"
|
|
4378
|
+
protocol = "$context.protocol"
|
|
4379
|
+
responseLength = "$context.responseLength"
|
|
4380
|
+
})
|
|
4381
|
+
}
|
|
4382
|
+
|
|
3715
4383
|
tags = var.tags
|
|
3716
4384
|
|
|
3717
|
-
|
|
4385
|
+
# Ensure the account-level role is configured before the stage is created
|
|
4386
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
4387
|
+
}
|
|
4388
|
+
|
|
4389
|
+
# Default throttling applied to all resource paths and methods
|
|
4390
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
4391
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
4392
|
+
rest_api_id = module.rest_api.api_id
|
|
4393
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
4394
|
+
method_path = "*/*"
|
|
4395
|
+
|
|
4396
|
+
settings {
|
|
4397
|
+
throttling_rate_limit = 10000
|
|
4398
|
+
throttling_burst_limit = 5000
|
|
4399
|
+
}
|
|
3718
4400
|
}
|
|
3719
4401
|
|
|
3720
4402
|
# API Gateway Resource Policy
|
|
@@ -3853,6 +4535,11 @@ output "lambda_execution_role_name" {
|
|
|
3853
4535
|
value = aws_iam_role.lambda_execution_role.name
|
|
3854
4536
|
}
|
|
3855
4537
|
|
|
4538
|
+
output "security_group_id" {
|
|
4539
|
+
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."
|
|
4540
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
4541
|
+
}
|
|
4542
|
+
|
|
3856
4543
|
# Integration Outputs
|
|
3857
4544
|
output "integration_id" {
|
|
3858
4545
|
description = "ID of the Lambda integration"
|