@aws/nx-plugin 1.0.0-rc.22 → 1.0.0-rc.24
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 +2088 -971
- package/package.json +25 -10
- package/src/agentcore-gateway/attach-upstream.d.ts +7 -7
- package/src/agentcore-gateway/attach-upstream.js +19 -22
- package/src/agentcore-gateway/attach-upstream.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +3 -3
- package/src/agentcore-gateway/gateway-connection/generator.js +42 -45
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- 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/generator.js +89 -72
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +2 -2
- package/src/agentcore-gateway/mcp-connection/generator.js +24 -30
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- 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/schema.d.js +6 -0
- package/src/agentcore-gateway/schema.d.js.map +1 -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} +5 -5
- 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.js +9 -14
- package/src/connection/agent-runtime-config.js.map +1 -1
- package/src/connection/generator.js +262 -207
- package/src/connection/generator.js.map +1 -1
- package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
- package/src/connection/local-dev.js +37 -0
- package/src/connection/local-dev.js.map +1 -0
- package/src/connection/schema.d.js +6 -0
- package/src/connection/schema.d.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 +4 -26
- package/src/infra/app/generator.js +133 -123
- 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/license/config-types.js +5 -3
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +1 -1
- package/src/license/config.js +267 -242
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/check.js +51 -46
- package/src/license/dependency-check/check.js.map +1 -1
- package/src/license/dependency-check/collectors/collector.js +41 -71
- package/src/license/dependency-check/collectors/collector.js.map +1 -1
- package/src/license/dependency-check/collectors/npm-collector.js +34 -41
- package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
- package/src/license/dependency-check/collectors/python-collector.js +55 -62
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
- package/src/license/dependency-check/evaluator.js +40 -68
- package/src/license/dependency-check/evaluator.js.map +1 -1
- package/src/license/dependency-check/executor.js +30 -22
- package/src/license/dependency-check/executor.js.map +1 -1
- package/src/license/dependency-check/pre-approved.js +949 -336
- package/src/license/dependency-check/pre-approved.js.map +1 -1
- package/src/license/dependency-check/types.js +2 -3
- package/src/license/dependency-check/types.js.map +1 -1
- package/src/license/generator.js +55 -60
- package/src/license/generator.js.map +1 -1
- package/src/license/index.js +3 -9
- package/src/license/index.js.map +1 -1
- package/src/license/known-exceptions.js +14 -13
- package/src/license/known-exceptions.js.map +1 -1
- package/src/license/schema.d.js +6 -0
- package/src/license/schema.d.js.map +1 -0
- package/src/license/sync/generator.js +94 -119
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.js +28 -35
- package/src/license/sync/project-file-sync.js.map +1 -1
- package/src/mcp-server/generator-info.js +130 -160
- package/src/mcp-server/generator-info.js.map +1 -1
- package/src/mcp-server/guide-pipeline.js +184 -206
- package/src/mcp-server/guide-pipeline.js.map +1 -1
- package/src/mcp-server/guide-render.js +10 -25
- package/src/mcp-server/guide-render.js.map +1 -1
- package/src/mcp-server/index.js +6 -10
- package/src/mcp-server/index.js.map +1 -1
- package/src/mcp-server/mdx-ast.js +39 -57
- package/src/mcp-server/mdx-ast.js.map +1 -1
- package/src/mcp-server/option-filter.js +33 -47
- package/src/mcp-server/option-filter.js.map +1 -1
- package/src/mcp-server/schema-registry.js +27 -40
- 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 +20 -24
- package/src/mcp-server/server.js.map +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.js +28 -25
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.js +29 -37
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/mcp-server/tools/list-generators.js +19 -25
- package/src/mcp-server/tools/list-generators.js.map +1 -1
- package/src/open-api/ts-client/generator.js +16 -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/generator.js +13 -21
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-hooks/schema.d.js +6 -0
- package/src/open-api/ts-hooks/schema.d.js.map +1 -0
- package/src/open-api/ts-metadata/generator.js +12 -20
- package/src/open-api/ts-metadata/generator.js.map +1 -1
- package/src/open-api/ts-metadata/schema.d.js +6 -0
- package/src/open-api/ts-metadata/schema.d.js.map +1 -0
- package/src/open-api/utils/codegen-data/languages.js +42 -60
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data/types.js +31 -30
- package/src/open-api/utils/codegen-data/types.js.map +1 -1
- package/src/open-api/utils/codegen-data.js +253 -269
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.js +242 -241
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.js +8 -14
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/refs.js +12 -22
- package/src/open-api/utils/refs.js.map +1 -1
- 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 +31 -6
- package/src/preset/generator.d.ts +1 -1
- package/src/preset/generator.js +130 -112
- 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 +0 -1
- package/src/preset/schema.json +0 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +304 -0
- package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.frameworks.spec.ts.snap} +18 -845
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +535 -0
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +1 -2
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +1 -1
- package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +1 -1
- package/src/py/agent/a2a-connection/generator.js +70 -75
- 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/files/ag-ui-langchain/main.py.template +10 -0
- package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +6 -8
- package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +3 -3
- package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +3 -3
- package/src/py/agent/gateway-connection/generator.js +61 -58
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- 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/generator.js +227 -194
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +5 -12
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +1 -1
- package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +1 -1
- package/src/py/agent/mcp-connection/generator.js +53 -52
- 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/react-connection/__snapshots__/generator.spec.ts.snap +3 -2
- package/src/py/agent/react-connection/generator.js +51 -58
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +4 -4
- package/src/py/agent/react-connection/local-dev.js +36 -0
- package/src/py/agent/react-connection/local-dev.js.map +1 -0
- package/src/py/agent/react-connection/schema.d.js +8 -0
- package/src/py/agent/react-connection/schema.d.js.map +1 -0
- package/src/py/agent/schema.d.js +6 -0
- package/src/py/agent/schema.d.js.map +1 -0
- package/src/py/api/generator.js +12 -12
- 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/dynamodb/__snapshots__/generator.spec.ts.snap +68 -28
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/dynamodb/agent-connection/generator.js +27 -29
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- 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/fast-api-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/py/dynamodb/fast-api-connection/generator.js +26 -28
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- 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/files/__name__/client.py.template +5 -5
- package/src/py/dynamodb/files/__name__/entities/base.py.template +2 -2
- package/src/py/dynamodb/files/config.json.template +1 -1
- package/src/py/dynamodb/generator.js +63 -62
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/dynamodb/mcp-server-connection/generator.js +27 -29
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- 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/schema.d.js +6 -0
- package/src/py/dynamodb/schema.d.js.map +1 -0
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +45 -4632
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +4833 -0
- package/src/py/fast-api/generator.js +79 -85
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +3 -2
- package/src/py/fast-api/react/generator.js +22 -24
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.js +28 -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/schema.d.js +6 -0
- package/src/py/fast-api/schema.d.js.map +1 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/py/lambda-function/generator.js +57 -58
- 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/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/generator.js +149 -131
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js +6 -0
- package/src/py/mcp-server/schema.d.js.map +1 -0
- package/src/py/project/generator.d.ts +14 -1
- package/src/py/project/generator.js +137 -88
- 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/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/{sdk → src/sdk}/license.d.ts +4 -4
- 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 +14 -0
- package/src/sdk/py.js +10 -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 +2 -2
- package/src/sdk/utils/ast.js +7 -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 +2 -8
- package/src/smithy/project/files/build.Dockerfile.template +1 -4
- package/src/smithy/project/generator.js +44 -42
- 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/react-connection/generator.js +35 -46
- 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/ts/api/__snapshots__/generator.spec.ts.snap +395 -72
- package/src/smithy/ts/api/generator.js +121 -111
- 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/terraform/project/files/application/src/providers.tf.template +1 -1
- package/src/terraform/project/generator.js +141 -103
- 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/trpc/backend/__snapshots__/generator.spec.ts.snap +336 -92
- package/src/trpc/backend/generator.js +93 -86
- 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/react/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/trpc/react/generator.js +59 -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/ts/agent/__snapshots__/generator.spec.ts.snap +11 -11
- package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +1 -1
- package/src/ts/agent/a2a-connection/generator.js +58 -54
- 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/gateway-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +3 -3
- package/src/ts/agent/gateway-connection/generator.js +57 -52
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- 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/generator.js +165 -136
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +1 -1
- package/src/ts/agent/mcp-connection/generator.js +48 -46
- 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/react-connection/generator.js +79 -79
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +2 -2
- package/src/ts/agent/react-connection/local-dev.js +17 -0
- package/src/ts/agent/react-connection/local-dev.js.map +1 -0
- package/src/ts/agent/react-connection/schema.d.js +8 -0
- package/src/ts/agent/react-connection/schema.d.js.map +1 -0
- package/src/ts/agent/schema.d.js +6 -0
- package/src/ts/agent/schema.d.js.map +1 -0
- package/src/ts/api/generator.js +16 -18
- 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/astro-docs/__snapshots__/generator.spec.ts.snap +8 -8
- package/src/ts/astro-docs/generator.js +59 -48
- 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/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/dynamodb/__snapshots__/generator.spec.ts.snap +68 -30
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
- 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/files/config.json.template +1 -1
- package/src/ts/dynamodb/files/src/client.ts.template +7 -7
- package/src/ts/dynamodb/generator.js +64 -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.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/schema.d.js +6 -0
- package/src/ts/dynamodb/schema.d.js.map +1 -0
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +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/trpc-connection/__snapshots__/generator.spec.ts.snap +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/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/ts/lambda-function/generator.js +55 -55
- 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/lib/__snapshots__/generator.spec.ts.snap +23 -36
- package/src/ts/lib/biome.js +37 -37
- package/src/ts/lib/biome.js.map +1 -1
- package/src/ts/lib/generator.js +75 -77
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/schema.d.js +6 -0
- package/src/ts/lib/schema.d.js.map +1 -0
- package/src/ts/lib/ts-project-utils.js +65 -70
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/types.js +5 -2
- package/src/ts/lib/types.js.map +1 -1
- 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 +5 -5
- package/src/ts/mcp-server/generator.js +157 -138
- 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/nx-generator/__snapshots__/generator.spec.ts.snap +14 -9
- 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 +4 -4
- package/src/ts/nx-generator/generator.js +84 -83
- 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-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.js +49 -48
- 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/utils.js +32 -44
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +34 -30
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +6 -6
- 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/files/config.json.template +1 -1
- package/src/ts/rdb/files/prisma.config.ts.template +2 -2
- package/src/ts/rdb/files/src/prisma.ts.template +7 -7
- package/src/ts/rdb/files/src/utils.ts.template +3 -0
- package/src/ts/rdb/generator.js +130 -117
- 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.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/schema.d.js +6 -0
- package/src/ts/rdb/schema.d.js.map +1 -0
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +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/trpc-connection/__snapshots__/generator.spec.ts.snap +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/utils.js +9 -11
- package/src/ts/rdb/utils.js.map +1 -1
- package/src/ts/react-website/agui/generator.js +69 -61
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +179 -332
- package/src/ts/react-website/app/generator.js +197 -188
- 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.json +6 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +118 -4
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +27 -7
- package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
- package/src/ts/react-website/cognito-auth/generator.js +60 -60
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -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/utils.js +34 -32
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
- package/src/ts/react-website/runtime-config/generator.js +29 -31
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/react-website/runtime-config/schema.d.js +6 -0
- package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
- package/src/ts/sync/generator.js +60 -59
- package/src/ts/sync/generator.js.map +1 -1
- package/src/ts/website/app/generator.js +10 -10
- package/src/ts/website/app/generator.js.map +1 -1
- package/src/ts/website/app/schema.d.js +6 -0
- package/src/ts/website/app/schema.d.js.map +1 -0
- package/src/ts/website/app/schema.json +6 -6
- package/src/ts/website/auth/generator.js +11 -11
- 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/utils/agent-chat/agent-chat.d.ts +1 -1
- package/src/utils/agent-chat/agent-chat.js +11 -12
- package/src/utils/agent-chat/agent-chat.js.map +1 -1
- package/src/utils/agent-chat/files/a2a/chat.ts.template +1 -1
- package/src/utils/agent-chat/files/ag-ui/chat.ts.template +1 -1
- package/src/utils/agent-chat/files/http-py/chat.ts.template +1 -1
- package/src/utils/agent-chat/files/http-ts/chat.ts.template +1 -1
- package/src/utils/agent-connection/agent-connection.d.ts +9 -3
- package/src/utils/agent-connection/agent-connection.js +133 -147
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +1 -1
- package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +1 -1
- package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +1 -1
- package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +1 -1
- package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +53 -50
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +4 -4
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +5 -5
- package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +2 -2
- package/src/utils/api-constructs/api-constructs.js +30 -31
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +14 -6
- package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +58 -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 +28 -14
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -8
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +91 -4
- package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
- package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
- package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
- package/src/utils/api-constructs/open-api-metadata.js +22 -22
- package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
- package/src/utils/ast/website.js +17 -19
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.js +72 -97
- package/src/utils/ast.js.map +1 -1
- package/src/utils/bundle/bundle.js +50 -47
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.js +47 -26
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +2 -2
- package/src/utils/config/index.js +5 -4
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.js +48 -58
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +5 -5
- 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.js +22 -23
- package/src/utils/containers.js.map +1 -1
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js +32 -33
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
- package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +12 -2
- package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
- package/src/utils/files/common/scripts/src/dynamodb/create-local-table.ts.template +2 -2
- package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +1 -1
- package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +17 -2
- 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/{pull-image.ts.template → shared/pull-image.ts.template} +1 -1
- package/src/utils/files/common/scripts/src/rdb/{start-container.ts.template → shared/start-container.ts.template} +16 -1
- 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 +3 -3
- 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 +2 -2
- package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
- package/src/utils/format.js +153 -99
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.js +14 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
- package/src/utils/function-constructs/function-constructs.js +21 -26
- package/src/utils/function-constructs/function-constructs.js.map +1 -1
- package/src/utils/generators.js +18 -20
- package/src/utils/generators.js.map +1 -1
- package/src/utils/git.js +19 -34
- package/src/utils/git.js.map +1 -1
- package/src/utils/iac-providers.js +5 -5
- package/src/utils/iac-providers.js.map +1 -1
- package/src/utils/iac.js +12 -14
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +112 -2
- package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +19 -6
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +104 -2
- package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
- package/src/utils/identity-constructs/identity-constructs.js +24 -28
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/js.js +27 -20
- package/src/utils/js.js.map +1 -1
- package/src/utils/mcp.js +34 -41
- package/src/utils/mcp.js.map +1 -1
- package/src/utils/metrics.js +30 -45
- 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/names.d.ts +16 -0
- package/src/utils/names.js +39 -48
- package/src/utils/names.js.map +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 +18 -2
- package/src/utils/nx.js +111 -74
- package/src/utils/nx.js.map +1 -1
- package/src/utils/nxlv-python.js +27 -15
- package/src/utils/nxlv-python.js.map +1 -1
- package/src/utils/object.js +5 -11
- package/src/utils/object.js.map +1 -1
- package/src/utils/paths.js +11 -15
- package/src/utils/paths.js.map +1 -1
- package/src/utils/pkg-manager.js +4 -9
- package/src/utils/pkg-manager.js.map +1 -1
- package/src/utils/pnpm-workspace.js +22 -22
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/port.js +26 -36
- package/src/utils/port.js.map +1 -1
- package/src/utils/py.d.ts +14 -1
- package/src/utils/py.js +63 -45
- package/src/utils/py.js.map +1 -1
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +4 -4
- package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +3 -3
- package/src/utils/rdb-constructs/rdb-constructs.js +31 -33
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.js +16 -16
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.js +57 -54
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.js +16 -14
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-config.js +30 -31
- package/src/utils/shared-infra-config.js.map +1 -1
- package/src/utils/shared-infra-scripts.js +30 -25
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +8 -3
- package/src/utils/shared-rdb-scripts.js +21 -13
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-scripts.js +12 -17
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.js +64 -60
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/test.d.ts +8 -0
- package/src/utils/test.js +33 -25
- package/src/utils/test.js.map +1 -1
- package/src/utils/toml.js +7 -15
- package/src/utils/toml.js.map +1 -1
- package/src/utils/versions.d.ts +31 -4
- package/src/utils/versions.js +40 -23
- package/src/utils/versions.js.map +1 -1
- 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 +4 -4
- package/src/utils/website-constructs/website-constructs.js +31 -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/agentcore-gateway.d.ts +0 -6
- package/sdk/agentcore-gateway.js +0 -11
- package/sdk/agentcore-gateway.js.map +0 -1
- package/sdk/connection.d.ts +0 -6
- package/sdk/connection.js +0 -10
- package/sdk/connection.js.map +0 -1
- package/sdk/license.js +0 -14
- package/sdk/license.js.map +0 -1
- package/sdk/open-api.d.ts +0 -10
- package/sdk/open-api.js +0 -15
- package/sdk/open-api.js.map +0 -1
- package/sdk/py.d.ts +0 -14
- package/sdk/py.js +0 -18
- package/sdk/py.js.map +0 -1
- package/sdk/terraform.d.ts +0 -6
- package/sdk/terraform.js +0 -11
- package/sdk/terraform.js.map +0 -1
- package/sdk/ts.d.ts +0 -33
- package/sdk/ts.js +0 -53
- 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.js +0 -41
- package/src/connection/serve-local.js.map +0 -1
- package/src/py/agent/react-connection/serve-local.js +0 -38
- package/src/py/agent/react-connection/serve-local.js.map +0 -1
- 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/utils/files/common/scripts/src/rdb/wait-for-db.ts.template +0 -59
- /package/src/agentcore-gateway/files/project/{serve-local.ts.template → local-dev.ts.template} +0 -0
- /package/{bin → src/bin}/aws-nx-mcp.d.ts +0 -0
|
@@ -403,11 +403,11 @@ terraform {
|
|
|
403
403
|
required_providers {
|
|
404
404
|
aws = {
|
|
405
405
|
source = "hashicorp/aws"
|
|
406
|
-
version = "
|
|
406
|
+
version = "6.52.0"
|
|
407
407
|
}
|
|
408
408
|
random = {
|
|
409
409
|
source = "hashicorp/random"
|
|
410
|
-
version = "
|
|
410
|
+
version = "3.9.0"
|
|
411
411
|
}
|
|
412
412
|
}
|
|
413
413
|
}
|
|
@@ -477,8 +477,6 @@ data "aws_caller_identity" "current" {}
|
|
|
477
477
|
|
|
478
478
|
# Resources
|
|
479
479
|
|
|
480
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
481
|
-
|
|
482
480
|
# REST API Gateway
|
|
483
481
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
484
482
|
name = var.api_name
|
|
@@ -495,10 +493,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
495
493
|
tags = var.tags
|
|
496
494
|
}
|
|
497
495
|
|
|
498
|
-
# Note: Deployment and
|
|
499
|
-
# after all methods and integrations are defined
|
|
500
|
-
|
|
501
|
-
# 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
|
|
502
498
|
|
|
503
499
|
# Gateway Response for CORS (4XX errors)
|
|
504
500
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -656,9 +652,7 @@ output "waf_web_acl_arn" {
|
|
|
656
652
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
657
653
|
}
|
|
658
654
|
|
|
659
|
-
# Note: Stage and
|
|
660
|
-
|
|
661
|
-
# 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"
|
|
662
656
|
`;
|
|
663
657
|
|
|
664
658
|
exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform provider and None auth > none-auth-terraform.tf 1`] = `
|
|
@@ -668,7 +662,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
|
|
|
668
662
|
required_providers {
|
|
669
663
|
aws = {
|
|
670
664
|
source = "hashicorp/aws"
|
|
671
|
-
version = "
|
|
665
|
+
version = "6.52.0"
|
|
672
666
|
}
|
|
673
667
|
}
|
|
674
668
|
}
|
|
@@ -757,6 +751,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
757
751
|
}
|
|
758
752
|
|
|
759
753
|
# Use the core REST API module
|
|
754
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
755
|
+
module "account" {
|
|
756
|
+
source = "../../../core/api/api-gateway-account"
|
|
757
|
+
}
|
|
758
|
+
|
|
760
759
|
module "rest_api" {
|
|
761
760
|
source = "../../../core/api/rest-api"
|
|
762
761
|
|
|
@@ -1082,11 +1081,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
1082
1081
|
]
|
|
1083
1082
|
}
|
|
1084
1083
|
|
|
1084
|
+
# KMS key for encrypting access logs at rest
|
|
1085
|
+
resource "aws_kms_key" "access_logs" {
|
|
1086
|
+
description = "TestApi API access log encryption"
|
|
1087
|
+
deletion_window_in_days = 7
|
|
1088
|
+
enable_key_rotation = true
|
|
1089
|
+
|
|
1090
|
+
policy = jsonencode({
|
|
1091
|
+
Version = "2012-10-17"
|
|
1092
|
+
Statement = [
|
|
1093
|
+
{
|
|
1094
|
+
Sid = "Enable IAM User Permissions"
|
|
1095
|
+
Effect = "Allow"
|
|
1096
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
1097
|
+
Action = "kms:*"
|
|
1098
|
+
Resource = "*"
|
|
1099
|
+
},
|
|
1100
|
+
{
|
|
1101
|
+
Sid = "Allow CloudWatch Logs"
|
|
1102
|
+
Effect = "Allow"
|
|
1103
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
1104
|
+
Action = [
|
|
1105
|
+
"kms:Encrypt",
|
|
1106
|
+
"kms:Decrypt",
|
|
1107
|
+
"kms:ReEncrypt*",
|
|
1108
|
+
"kms:GenerateDataKey*",
|
|
1109
|
+
"kms:DescribeKey"
|
|
1110
|
+
]
|
|
1111
|
+
Resource = "*"
|
|
1112
|
+
Condition = {
|
|
1113
|
+
ArnEquals = {
|
|
1114
|
+
"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"
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
]
|
|
1119
|
+
})
|
|
1120
|
+
|
|
1121
|
+
tags = var.tags
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
resource "aws_kms_alias" "access_logs" {
|
|
1125
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
1126
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
# Access logs for the API Gateway stage
|
|
1130
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
1131
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
1132
|
+
retention_in_days = 365
|
|
1133
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
1134
|
+
tags = var.tags
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1085
1137
|
# API Gateway stage
|
|
1086
1138
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
1087
1139
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
1088
|
-
#checkov:skip=
|
|
1089
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
1140
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
1090
1141
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
1091
1142
|
#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
|
|
1092
1143
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -1094,9 +1145,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
1094
1145
|
stage_name = "prod"
|
|
1095
1146
|
xray_tracing_enabled = true
|
|
1096
1147
|
|
|
1148
|
+
access_log_settings {
|
|
1149
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
1150
|
+
format = jsonencode({
|
|
1151
|
+
requestId = "$context.requestId"
|
|
1152
|
+
ip = "$context.identity.sourceIp"
|
|
1153
|
+
caller = "$context.identity.caller"
|
|
1154
|
+
user = "$context.identity.user"
|
|
1155
|
+
requestTime = "$context.requestTime"
|
|
1156
|
+
httpMethod = "$context.httpMethod"
|
|
1157
|
+
resourcePath = "$context.resourcePath"
|
|
1158
|
+
status = "$context.status"
|
|
1159
|
+
protocol = "$context.protocol"
|
|
1160
|
+
responseLength = "$context.responseLength"
|
|
1161
|
+
})
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1097
1164
|
tags = var.tags
|
|
1098
1165
|
|
|
1099
|
-
|
|
1166
|
+
# Ensure the account-level role is configured before the stage is created
|
|
1167
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
# Default throttling applied to all resource paths and methods
|
|
1171
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
1172
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
1173
|
+
rest_api_id = module.rest_api.api_id
|
|
1174
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
1175
|
+
method_path = "*/*"
|
|
1176
|
+
|
|
1177
|
+
settings {
|
|
1178
|
+
throttling_rate_limit = 10000
|
|
1179
|
+
throttling_burst_limit = 5000
|
|
1180
|
+
}
|
|
1100
1181
|
}
|
|
1101
1182
|
|
|
1102
1183
|
# API Gateway Resource Policy
|
|
@@ -1307,12 +1388,12 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1307
1388
|
},
|
|
1308
1389
|
"compile": {
|
|
1309
1390
|
"executor": "nx:run-commands",
|
|
1391
|
+
"dependsOn": ["copy-ssdk"],
|
|
1310
1392
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/tsc"],
|
|
1311
1393
|
"options": {
|
|
1312
1394
|
"command": "tsc --build tsconfig.lib.json",
|
|
1313
1395
|
"cwd": "{projectRoot}"
|
|
1314
|
-
}
|
|
1315
|
-
"dependsOn": ["copy-ssdk"]
|
|
1396
|
+
}
|
|
1316
1397
|
},
|
|
1317
1398
|
"lint": {
|
|
1318
1399
|
"executor": "nx:run-commands",
|
|
@@ -1330,22 +1411,15 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1330
1411
|
}
|
|
1331
1412
|
}
|
|
1332
1413
|
},
|
|
1333
|
-
"test": {
|
|
1334
|
-
"executor": "@nx/vitest:test",
|
|
1335
|
-
"outputs": ["{options.reportsDirectory}"],
|
|
1336
|
-
"options": {
|
|
1337
|
-
"reportsDirectory": "{workspaceRoot}/coverage/{projectRoot}"
|
|
1338
|
-
}
|
|
1339
|
-
},
|
|
1340
1414
|
"bundle": {
|
|
1415
|
+
"executor": "nx:run-commands",
|
|
1416
|
+
"dependsOn": ["compile"],
|
|
1341
1417
|
"cache": true,
|
|
1342
1418
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/bundle"],
|
|
1343
|
-
"executor": "nx:run-commands",
|
|
1344
1419
|
"options": {
|
|
1345
1420
|
"command": "rolldown -c rolldown.config.ts",
|
|
1346
1421
|
"cwd": "{projectRoot}"
|
|
1347
|
-
}
|
|
1348
|
-
"dependsOn": ["compile"]
|
|
1422
|
+
}
|
|
1349
1423
|
},
|
|
1350
1424
|
"copy-ssdk": {
|
|
1351
1425
|
"cache": true,
|
|
@@ -1368,31 +1442,31 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1368
1442
|
},
|
|
1369
1443
|
"watch-copy-ssdk": {
|
|
1370
1444
|
"executor": "nx:run-commands",
|
|
1445
|
+
"continuous": true,
|
|
1371
1446
|
"options": {
|
|
1372
|
-
"command": "nx watch --projects=@proj/test-api-model --
|
|
1373
|
-
}
|
|
1374
|
-
"continuous": true
|
|
1447
|
+
"command": "nx watch --projects=@proj/test-api-model --includeDependencies -- nx run @proj/test-api:copy-ssdk"
|
|
1448
|
+
}
|
|
1375
1449
|
},
|
|
1376
1450
|
"serve": {
|
|
1377
1451
|
"executor": "nx:run-commands",
|
|
1452
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1453
|
+
"continuous": true,
|
|
1378
1454
|
"options": {
|
|
1379
1455
|
"command": "tsx --watch src/local-server.ts",
|
|
1380
1456
|
"cwd": "{projectRoot}"
|
|
1381
|
-
}
|
|
1382
|
-
"continuous": true,
|
|
1383
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1457
|
+
}
|
|
1384
1458
|
},
|
|
1385
|
-
"
|
|
1459
|
+
"dev": {
|
|
1386
1460
|
"executor": "nx:run-commands",
|
|
1461
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1462
|
+
"continuous": true,
|
|
1387
1463
|
"options": {
|
|
1388
1464
|
"command": "tsx --watch src/local-server.ts",
|
|
1389
1465
|
"cwd": "{projectRoot}",
|
|
1390
1466
|
"env": {
|
|
1391
|
-
"
|
|
1467
|
+
"LOCAL_DEV": "true"
|
|
1392
1468
|
}
|
|
1393
|
-
}
|
|
1394
|
-
"continuous": true,
|
|
1395
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1469
|
+
}
|
|
1396
1470
|
}
|
|
1397
1471
|
}
|
|
1398
1472
|
}
|
|
@@ -1685,11 +1759,11 @@ terraform {
|
|
|
1685
1759
|
required_providers {
|
|
1686
1760
|
aws = {
|
|
1687
1761
|
source = "hashicorp/aws"
|
|
1688
|
-
version = "
|
|
1762
|
+
version = "6.52.0"
|
|
1689
1763
|
}
|
|
1690
1764
|
random = {
|
|
1691
1765
|
source = "hashicorp/random"
|
|
1692
|
-
version = "
|
|
1766
|
+
version = "3.9.0"
|
|
1693
1767
|
}
|
|
1694
1768
|
}
|
|
1695
1769
|
}
|
|
@@ -1759,8 +1833,6 @@ data "aws_caller_identity" "current" {}
|
|
|
1759
1833
|
|
|
1760
1834
|
# Resources
|
|
1761
1835
|
|
|
1762
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
1763
|
-
|
|
1764
1836
|
# REST API Gateway
|
|
1765
1837
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
1766
1838
|
name = var.api_name
|
|
@@ -1777,10 +1849,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
1777
1849
|
tags = var.tags
|
|
1778
1850
|
}
|
|
1779
1851
|
|
|
1780
|
-
# Note: Deployment and
|
|
1781
|
-
# after all methods and integrations are defined
|
|
1782
|
-
|
|
1783
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
1852
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
1853
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
1784
1854
|
|
|
1785
1855
|
# Gateway Response for CORS (4XX errors)
|
|
1786
1856
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -1938,16 +2008,14 @@ output "waf_web_acl_arn" {
|
|
|
1938
2008
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
1939
2009
|
}
|
|
1940
2010
|
|
|
1941
|
-
# Note: Stage and
|
|
1942
|
-
|
|
1943
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
2011
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
1944
2012
|
"test-api.tf": "terraform {
|
|
1945
2013
|
required_version = ">= 1.0"
|
|
1946
2014
|
|
|
1947
2015
|
required_providers {
|
|
1948
2016
|
aws = {
|
|
1949
2017
|
source = "hashicorp/aws"
|
|
1950
|
-
version = "
|
|
2018
|
+
version = "6.52.0"
|
|
1951
2019
|
}
|
|
1952
2020
|
}
|
|
1953
2021
|
}
|
|
@@ -2046,6 +2114,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2046
2114
|
}
|
|
2047
2115
|
|
|
2048
2116
|
# Use the core REST API module
|
|
2117
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
2118
|
+
module "account" {
|
|
2119
|
+
source = "../../../core/api/api-gateway-account"
|
|
2120
|
+
}
|
|
2121
|
+
|
|
2049
2122
|
module "rest_api" {
|
|
2050
2123
|
source = "../../../core/api/rest-api"
|
|
2051
2124
|
|
|
@@ -2289,11 +2362,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
2289
2362
|
]
|
|
2290
2363
|
}
|
|
2291
2364
|
|
|
2365
|
+
# KMS key for encrypting access logs at rest
|
|
2366
|
+
resource "aws_kms_key" "access_logs" {
|
|
2367
|
+
description = "TestApi API access log encryption"
|
|
2368
|
+
deletion_window_in_days = 7
|
|
2369
|
+
enable_key_rotation = true
|
|
2370
|
+
|
|
2371
|
+
policy = jsonencode({
|
|
2372
|
+
Version = "2012-10-17"
|
|
2373
|
+
Statement = [
|
|
2374
|
+
{
|
|
2375
|
+
Sid = "Enable IAM User Permissions"
|
|
2376
|
+
Effect = "Allow"
|
|
2377
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
2378
|
+
Action = "kms:*"
|
|
2379
|
+
Resource = "*"
|
|
2380
|
+
},
|
|
2381
|
+
{
|
|
2382
|
+
Sid = "Allow CloudWatch Logs"
|
|
2383
|
+
Effect = "Allow"
|
|
2384
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
2385
|
+
Action = [
|
|
2386
|
+
"kms:Encrypt",
|
|
2387
|
+
"kms:Decrypt",
|
|
2388
|
+
"kms:ReEncrypt*",
|
|
2389
|
+
"kms:GenerateDataKey*",
|
|
2390
|
+
"kms:DescribeKey"
|
|
2391
|
+
]
|
|
2392
|
+
Resource = "*"
|
|
2393
|
+
Condition = {
|
|
2394
|
+
ArnEquals = {
|
|
2395
|
+
"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"
|
|
2396
|
+
}
|
|
2397
|
+
}
|
|
2398
|
+
}
|
|
2399
|
+
]
|
|
2400
|
+
})
|
|
2401
|
+
|
|
2402
|
+
tags = var.tags
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2405
|
+
resource "aws_kms_alias" "access_logs" {
|
|
2406
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
2407
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2410
|
+
# Access logs for the API Gateway stage
|
|
2411
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
2412
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
2413
|
+
retention_in_days = 365
|
|
2414
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
2415
|
+
tags = var.tags
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2292
2418
|
# API Gateway stage
|
|
2293
2419
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
2294
2420
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
2295
|
-
#checkov:skip=
|
|
2296
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
2421
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
2297
2422
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
2298
2423
|
#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
|
|
2299
2424
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -2301,9 +2426,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
2301
2426
|
stage_name = "prod"
|
|
2302
2427
|
xray_tracing_enabled = true
|
|
2303
2428
|
|
|
2429
|
+
access_log_settings {
|
|
2430
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
2431
|
+
format = jsonencode({
|
|
2432
|
+
requestId = "$context.requestId"
|
|
2433
|
+
ip = "$context.identity.sourceIp"
|
|
2434
|
+
caller = "$context.identity.caller"
|
|
2435
|
+
user = "$context.identity.user"
|
|
2436
|
+
requestTime = "$context.requestTime"
|
|
2437
|
+
httpMethod = "$context.httpMethod"
|
|
2438
|
+
resourcePath = "$context.resourcePath"
|
|
2439
|
+
status = "$context.status"
|
|
2440
|
+
protocol = "$context.protocol"
|
|
2441
|
+
responseLength = "$context.responseLength"
|
|
2442
|
+
})
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2304
2445
|
tags = var.tags
|
|
2305
2446
|
|
|
2306
|
-
|
|
2447
|
+
# Ensure the account-level role is configured before the stage is created
|
|
2448
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
2449
|
+
}
|
|
2450
|
+
|
|
2451
|
+
# Default throttling applied to all resource paths and methods
|
|
2452
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
2453
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
2454
|
+
rest_api_id = module.rest_api.api_id
|
|
2455
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
2456
|
+
method_path = "*/*"
|
|
2457
|
+
|
|
2458
|
+
settings {
|
|
2459
|
+
throttling_rate_limit = 10000
|
|
2460
|
+
throttling_burst_limit = 5000
|
|
2461
|
+
}
|
|
2307
2462
|
}
|
|
2308
2463
|
|
|
2309
2464
|
# API Gateway Resource Policy
|
|
@@ -2483,11 +2638,11 @@ terraform {
|
|
|
2483
2638
|
required_providers {
|
|
2484
2639
|
aws = {
|
|
2485
2640
|
source = "hashicorp/aws"
|
|
2486
|
-
version = "
|
|
2641
|
+
version = "6.52.0"
|
|
2487
2642
|
}
|
|
2488
2643
|
random = {
|
|
2489
2644
|
source = "hashicorp/random"
|
|
2490
|
-
version = "
|
|
2645
|
+
version = "3.9.0"
|
|
2491
2646
|
}
|
|
2492
2647
|
}
|
|
2493
2648
|
}
|
|
@@ -2557,8 +2712,6 @@ data "aws_caller_identity" "current" {}
|
|
|
2557
2712
|
|
|
2558
2713
|
# Resources
|
|
2559
2714
|
|
|
2560
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
2561
|
-
|
|
2562
2715
|
# REST API Gateway
|
|
2563
2716
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
2564
2717
|
name = var.api_name
|
|
@@ -2575,10 +2728,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
2575
2728
|
tags = var.tags
|
|
2576
2729
|
}
|
|
2577
2730
|
|
|
2578
|
-
# Note: Deployment and
|
|
2579
|
-
# after all methods and integrations are defined
|
|
2580
|
-
|
|
2581
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
2731
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
2732
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
2582
2733
|
|
|
2583
2734
|
# Gateway Response for CORS (4XX errors)
|
|
2584
2735
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -2736,16 +2887,14 @@ output "waf_web_acl_arn" {
|
|
|
2736
2887
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
2737
2888
|
}
|
|
2738
2889
|
|
|
2739
|
-
# Note: Stage and
|
|
2740
|
-
|
|
2741
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
2890
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
2742
2891
|
"test-api.tf": "terraform {
|
|
2743
2892
|
required_version = ">= 1.0"
|
|
2744
2893
|
|
|
2745
2894
|
required_providers {
|
|
2746
2895
|
aws = {
|
|
2747
2896
|
source = "hashicorp/aws"
|
|
2748
|
-
version = "
|
|
2897
|
+
version = "6.52.0"
|
|
2749
2898
|
}
|
|
2750
2899
|
}
|
|
2751
2900
|
}
|
|
@@ -2834,6 +2983,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2834
2983
|
}
|
|
2835
2984
|
|
|
2836
2985
|
# Use the core REST API module
|
|
2986
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
2987
|
+
module "account" {
|
|
2988
|
+
source = "../../../core/api/api-gateway-account"
|
|
2989
|
+
}
|
|
2990
|
+
|
|
2837
2991
|
module "rest_api" {
|
|
2838
2992
|
source = "../../../core/api/rest-api"
|
|
2839
2993
|
|
|
@@ -3065,11 +3219,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3065
3219
|
]
|
|
3066
3220
|
}
|
|
3067
3221
|
|
|
3222
|
+
# KMS key for encrypting access logs at rest
|
|
3223
|
+
resource "aws_kms_key" "access_logs" {
|
|
3224
|
+
description = "TestApi API access log encryption"
|
|
3225
|
+
deletion_window_in_days = 7
|
|
3226
|
+
enable_key_rotation = true
|
|
3227
|
+
|
|
3228
|
+
policy = jsonencode({
|
|
3229
|
+
Version = "2012-10-17"
|
|
3230
|
+
Statement = [
|
|
3231
|
+
{
|
|
3232
|
+
Sid = "Enable IAM User Permissions"
|
|
3233
|
+
Effect = "Allow"
|
|
3234
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
3235
|
+
Action = "kms:*"
|
|
3236
|
+
Resource = "*"
|
|
3237
|
+
},
|
|
3238
|
+
{
|
|
3239
|
+
Sid = "Allow CloudWatch Logs"
|
|
3240
|
+
Effect = "Allow"
|
|
3241
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
3242
|
+
Action = [
|
|
3243
|
+
"kms:Encrypt",
|
|
3244
|
+
"kms:Decrypt",
|
|
3245
|
+
"kms:ReEncrypt*",
|
|
3246
|
+
"kms:GenerateDataKey*",
|
|
3247
|
+
"kms:DescribeKey"
|
|
3248
|
+
]
|
|
3249
|
+
Resource = "*"
|
|
3250
|
+
Condition = {
|
|
3251
|
+
ArnEquals = {
|
|
3252
|
+
"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"
|
|
3253
|
+
}
|
|
3254
|
+
}
|
|
3255
|
+
}
|
|
3256
|
+
]
|
|
3257
|
+
})
|
|
3258
|
+
|
|
3259
|
+
tags = var.tags
|
|
3260
|
+
}
|
|
3261
|
+
|
|
3262
|
+
resource "aws_kms_alias" "access_logs" {
|
|
3263
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
3264
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
3265
|
+
}
|
|
3266
|
+
|
|
3267
|
+
# Access logs for the API Gateway stage
|
|
3268
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
3269
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
3270
|
+
retention_in_days = 365
|
|
3271
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
3272
|
+
tags = var.tags
|
|
3273
|
+
}
|
|
3274
|
+
|
|
3068
3275
|
# API Gateway stage
|
|
3069
3276
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3070
3277
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3071
|
-
#checkov:skip=
|
|
3072
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
3278
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3073
3279
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3074
3280
|
#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
|
|
3075
3281
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3077,9 +3283,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3077
3283
|
stage_name = "prod"
|
|
3078
3284
|
xray_tracing_enabled = true
|
|
3079
3285
|
|
|
3286
|
+
access_log_settings {
|
|
3287
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
3288
|
+
format = jsonencode({
|
|
3289
|
+
requestId = "$context.requestId"
|
|
3290
|
+
ip = "$context.identity.sourceIp"
|
|
3291
|
+
caller = "$context.identity.caller"
|
|
3292
|
+
user = "$context.identity.user"
|
|
3293
|
+
requestTime = "$context.requestTime"
|
|
3294
|
+
httpMethod = "$context.httpMethod"
|
|
3295
|
+
resourcePath = "$context.resourcePath"
|
|
3296
|
+
status = "$context.status"
|
|
3297
|
+
protocol = "$context.protocol"
|
|
3298
|
+
responseLength = "$context.responseLength"
|
|
3299
|
+
})
|
|
3300
|
+
}
|
|
3301
|
+
|
|
3080
3302
|
tags = var.tags
|
|
3081
3303
|
|
|
3082
|
-
|
|
3304
|
+
# Ensure the account-level role is configured before the stage is created
|
|
3305
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
3306
|
+
}
|
|
3307
|
+
|
|
3308
|
+
# Default throttling applied to all resource paths and methods
|
|
3309
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
3310
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
3311
|
+
rest_api_id = module.rest_api.api_id
|
|
3312
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
3313
|
+
method_path = "*/*"
|
|
3314
|
+
|
|
3315
|
+
settings {
|
|
3316
|
+
throttling_rate_limit = 10000
|
|
3317
|
+
throttling_burst_limit = 5000
|
|
3318
|
+
}
|
|
3083
3319
|
}
|
|
3084
3320
|
|
|
3085
3321
|
# API Gateway Resource Policy
|
|
@@ -3266,7 +3502,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
|
|
|
3266
3502
|
required_providers {
|
|
3267
3503
|
aws = {
|
|
3268
3504
|
source = "hashicorp/aws"
|
|
3269
|
-
version = "
|
|
3505
|
+
version = "6.52.0"
|
|
3270
3506
|
}
|
|
3271
3507
|
}
|
|
3272
3508
|
}
|
|
@@ -3355,6 +3591,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
3355
3591
|
}
|
|
3356
3592
|
|
|
3357
3593
|
# Use the core REST API module
|
|
3594
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3595
|
+
module "account" {
|
|
3596
|
+
source = "../../../core/api/api-gateway-account"
|
|
3597
|
+
}
|
|
3598
|
+
|
|
3358
3599
|
module "rest_api" {
|
|
3359
3600
|
source = "../../../core/api/rest-api"
|
|
3360
3601
|
|
|
@@ -3680,11 +3921,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3680
3921
|
]
|
|
3681
3922
|
}
|
|
3682
3923
|
|
|
3924
|
+
# KMS key for encrypting access logs at rest
|
|
3925
|
+
resource "aws_kms_key" "access_logs" {
|
|
3926
|
+
description = "CustomApi API access log encryption"
|
|
3927
|
+
deletion_window_in_days = 7
|
|
3928
|
+
enable_key_rotation = true
|
|
3929
|
+
|
|
3930
|
+
policy = jsonencode({
|
|
3931
|
+
Version = "2012-10-17"
|
|
3932
|
+
Statement = [
|
|
3933
|
+
{
|
|
3934
|
+
Sid = "Enable IAM User Permissions"
|
|
3935
|
+
Effect = "Allow"
|
|
3936
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
3937
|
+
Action = "kms:*"
|
|
3938
|
+
Resource = "*"
|
|
3939
|
+
},
|
|
3940
|
+
{
|
|
3941
|
+
Sid = "Allow CloudWatch Logs"
|
|
3942
|
+
Effect = "Allow"
|
|
3943
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
3944
|
+
Action = [
|
|
3945
|
+
"kms:Encrypt",
|
|
3946
|
+
"kms:Decrypt",
|
|
3947
|
+
"kms:ReEncrypt*",
|
|
3948
|
+
"kms:GenerateDataKey*",
|
|
3949
|
+
"kms:DescribeKey"
|
|
3950
|
+
]
|
|
3951
|
+
Resource = "*"
|
|
3952
|
+
Condition = {
|
|
3953
|
+
ArnEquals = {
|
|
3954
|
+
"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"
|
|
3955
|
+
}
|
|
3956
|
+
}
|
|
3957
|
+
}
|
|
3958
|
+
]
|
|
3959
|
+
})
|
|
3960
|
+
|
|
3961
|
+
tags = var.tags
|
|
3962
|
+
}
|
|
3963
|
+
|
|
3964
|
+
resource "aws_kms_alias" "access_logs" {
|
|
3965
|
+
name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
|
|
3966
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
3967
|
+
}
|
|
3968
|
+
|
|
3969
|
+
# Access logs for the API Gateway stage
|
|
3970
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
3971
|
+
name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
|
|
3972
|
+
retention_in_days = 365
|
|
3973
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
3974
|
+
tags = var.tags
|
|
3975
|
+
}
|
|
3976
|
+
|
|
3683
3977
|
# API Gateway stage
|
|
3684
3978
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3685
3979
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3686
|
-
#checkov:skip=
|
|
3687
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
3980
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3688
3981
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3689
3982
|
#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
|
|
3690
3983
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3692,9 +3985,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3692
3985
|
stage_name = "prod"
|
|
3693
3986
|
xray_tracing_enabled = true
|
|
3694
3987
|
|
|
3988
|
+
access_log_settings {
|
|
3989
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
3990
|
+
format = jsonencode({
|
|
3991
|
+
requestId = "$context.requestId"
|
|
3992
|
+
ip = "$context.identity.sourceIp"
|
|
3993
|
+
caller = "$context.identity.caller"
|
|
3994
|
+
user = "$context.identity.user"
|
|
3995
|
+
requestTime = "$context.requestTime"
|
|
3996
|
+
httpMethod = "$context.httpMethod"
|
|
3997
|
+
resourcePath = "$context.resourcePath"
|
|
3998
|
+
status = "$context.status"
|
|
3999
|
+
protocol = "$context.protocol"
|
|
4000
|
+
responseLength = "$context.responseLength"
|
|
4001
|
+
})
|
|
4002
|
+
}
|
|
4003
|
+
|
|
3695
4004
|
tags = var.tags
|
|
3696
4005
|
|
|
3697
|
-
|
|
4006
|
+
# Ensure the account-level role is configured before the stage is created
|
|
4007
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
4008
|
+
}
|
|
4009
|
+
|
|
4010
|
+
# Default throttling applied to all resource paths and methods
|
|
4011
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
4012
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
4013
|
+
rest_api_id = module.rest_api.api_id
|
|
4014
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
4015
|
+
method_path = "*/*"
|
|
4016
|
+
|
|
4017
|
+
settings {
|
|
4018
|
+
throttling_rate_limit = 10000
|
|
4019
|
+
throttling_burst_limit = 5000
|
|
4020
|
+
}
|
|
3698
4021
|
}
|
|
3699
4022
|
|
|
3700
4023
|
# API Gateway Resource Policy
|