@aws/nx-plugin 1.0.0-rc.7 → 1.0.0-rc.71
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 +7044 -6135
- package/README.md +9 -7
- package/generators.json +152 -10
- package/migrations.json +161 -0
- package/package.json +41 -22
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +295 -0
- package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/agent-connection/generator.js +95 -0
- package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
- package/src/agentcore-gateway/agent-connection/schema.json +31 -0
- package/src/agentcore-gateway/attach-upstream.d.ts +49 -0
- package/src/agentcore-gateway/attach-upstream.js +59 -0
- package/src/agentcore-gateway/attach-upstream.js.map +1 -0
- package/src/agentcore-gateway/files/cedar/policies/README.md +61 -0
- package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +26 -0
- package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
- package/src/agentcore-gateway/files/project/mcp/local-dev.ts.template +134 -0
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
- package/src/agentcore-gateway/gateway-connection/generator.js +103 -0
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/gateway-connection/schema.d.ts +13 -0
- package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
- package/src/agentcore-gateway/generator.d.ts +89 -0
- package/src/agentcore-gateway/generator.js +212 -0
- package/src/agentcore-gateway/generator.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/mcp-connection/generator.js +61 -0
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/schema.d.ts +13 -0
- package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
- package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
- package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/react-connection/generator.js +119 -0
- package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
- package/src/agentcore-gateway/react-connection/schema.json +31 -0
- package/src/agentcore-gateway/schema.d.js +6 -0
- package/src/agentcore-gateway/schema.d.js.map +1 -0
- package/src/agentcore-gateway/schema.d.ts +17 -0
- package/src/agentcore-gateway/schema.json +72 -0
- package/src/agentcore-harness/__snapshots__/generator.spec.ts.snap +238 -0
- package/src/agentcore-harness/files/project/README.md.template +83 -0
- package/src/agentcore-harness/files/project/scripts/chat.ts.template +99 -0
- package/src/agentcore-harness/files/project/src/PROMPT.md.template +16 -0
- package/src/agentcore-harness/generator.d.ts +62 -0
- package/src/agentcore-harness/generator.js +158 -0
- package/src/agentcore-harness/generator.js.map +1 -0
- package/src/agentcore-harness/schema.d.js +8 -0
- package/src/agentcore-harness/schema.d.js.map +1 -0
- package/src/agentcore-harness/schema.d.ts +17 -0
- package/src/agentcore-harness/schema.json +53 -0
- package/src/connection/agent-local-dev.d.ts +49 -0
- package/src/connection/agent-local-dev.js +84 -0
- package/src/connection/agent-local-dev.js.map +1 -0
- package/src/connection/agent-runtime-config.js +9 -14
- package/src/connection/agent-runtime-config.js.map +1 -1
- package/src/connection/gateway-runtime-config.d.ts +19 -0
- package/src/connection/gateway-runtime-config.js +47 -0
- package/src/connection/gateway-runtime-config.js.map +1 -0
- package/src/connection/generator.d.ts +3 -10
- package/src/connection/generator.js +172 -194
- package/src/connection/generator.js.map +1 -1
- package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
- package/src/connection/local-dev.js +37 -0
- package/src/connection/local-dev.js.map +1 -0
- package/src/connection/scaffold-catalog.d.ts +267 -0
- package/src/connection/scaffold-catalog.js +347 -0
- package/src/connection/scaffold-catalog.js.map +1 -0
- package/src/connection/schema-resolver.d.ts +5 -0
- package/src/connection/schema-resolver.js +27 -0
- package/src/connection/schema-resolver.js.map +1 -0
- package/src/connection/schema.d.js +6 -0
- package/src/connection/schema.d.js.map +1 -0
- package/src/connection/schema.d.ts +1 -0
- package/src/connection/schema.json +5 -0
- package/src/connection/supported-connections.d.ts +116 -0
- package/src/connection/supported-connections.js +163 -0
- package/src/connection/supported-connections.js.map +1 -0
- package/src/index.js +2 -5
- package/src/index.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +119 -72
- package/src/infra/app/files/app/README.md.template +8 -4
- package/src/infra/app/files/app/src/main.ts.template +5 -1
- package/src/infra/app/files/app/src/stages/application-stage.ts.template +1 -1
- package/src/infra/app/generator.d.ts +43 -0
- package/src/infra/app/generator.js +195 -127
- package/src/infra/app/generator.js.map +1 -1
- package/src/infra/app/schema.d.js +6 -0
- package/src/infra/app/schema.d.js.map +1 -0
- package/src/infra/app/schema.d.ts +1 -1
- package/src/infra/app/schema.json +5 -0
- package/src/init/generator.d.ts +31 -0
- package/src/init/generator.js +46 -0
- package/src/init/generator.js.map +1 -0
- package/src/init/schema.d.js +6 -0
- package/src/init/schema.d.js.map +1 -0
- package/src/init/schema.d.ts +16 -0
- package/src/init/schema.json +35 -0
- package/src/internal/test-matrix/generator.d.ts +29 -0
- package/src/internal/test-matrix/generator.js +698 -0
- package/src/internal/test-matrix/generator.js.map +1 -0
- package/src/internal/test-matrix/schema.d.js +6 -0
- package/src/internal/test-matrix/schema.d.js.map +1 -0
- package/src/internal/test-matrix/schema.d.ts +12 -0
- package/src/internal/test-matrix/schema.json +21 -0
- package/src/license/config-types.js +5 -3
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +1 -1
- package/src/license/config.js +267 -242
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/check.js +51 -46
- package/src/license/dependency-check/check.js.map +1 -1
- package/src/license/dependency-check/collectors/collector.js +41 -71
- package/src/license/dependency-check/collectors/collector.js.map +1 -1
- package/src/license/dependency-check/collectors/npm-collector.js +34 -41
- package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
- package/src/license/dependency-check/collectors/python-collector.js +55 -62
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
- package/src/license/dependency-check/evaluator.js +40 -68
- package/src/license/dependency-check/evaluator.js.map +1 -1
- package/src/license/dependency-check/executor.js +30 -22
- package/src/license/dependency-check/executor.js.map +1 -1
- package/src/license/dependency-check/pre-approved.js +949 -336
- package/src/license/dependency-check/pre-approved.js.map +1 -1
- package/src/license/dependency-check/types.js +2 -3
- package/src/license/dependency-check/types.js.map +1 -1
- package/src/license/generator.js +65 -68
- package/src/license/generator.js.map +1 -1
- package/src/license/index.js +3 -9
- package/src/license/index.js.map +1 -1
- package/src/license/known-exceptions.d.ts +1 -1
- package/src/license/known-exceptions.js +19 -13
- package/src/license/known-exceptions.js.map +1 -1
- package/src/license/schema.d.js +6 -0
- package/src/license/schema.d.js.map +1 -0
- package/src/license/schema.d.ts +2 -0
- package/src/license/schema.json +5 -0
- package/src/license/sync/generator.js +94 -119
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.js +28 -35
- package/src/license/sync/project-file-sync.js.map +1 -1
- package/src/mcp-server/dev-server.d.ts +1 -0
- package/src/mcp-server/dev-server.js +18 -0
- package/src/mcp-server/dev-server.js.map +1 -0
- package/src/mcp-server/generator-info.js +149 -165
- package/src/mcp-server/generator-info.js.map +1 -1
- package/src/mcp-server/guide-pipeline.js +199 -206
- package/src/mcp-server/guide-pipeline.js.map +1 -1
- package/src/mcp-server/guide-render.js +10 -25
- package/src/mcp-server/guide-render.js.map +1 -1
- package/src/mcp-server/index.js +6 -10
- package/src/mcp-server/index.js.map +1 -1
- package/src/mcp-server/mdx-ast.js +39 -57
- package/src/mcp-server/mdx-ast.js.map +1 -1
- package/src/mcp-server/option-filter.js +33 -47
- package/src/mcp-server/option-filter.js.map +1 -1
- package/src/mcp-server/schema-registry.d.ts +9 -3
- package/src/mcp-server/schema-registry.js +41 -38
- package/src/mcp-server/schema-registry.js.map +1 -1
- package/src/mcp-server/schema.d.ts +1 -1
- package/src/mcp-server/schema.js +9 -7
- package/src/mcp-server/schema.js.map +1 -1
- package/src/mcp-server/server.js +24 -24
- package/src/mcp-server/server.js.map +1 -1
- package/src/mcp-server/tools/add-to-existing-project.d.ts +12 -0
- package/src/mcp-server/tools/add-to-existing-project.js +36 -0
- package/src/mcp-server/tools/add-to-existing-project.js.map +1 -0
- package/src/mcp-server/tools/create-workspace-command.js +23 -24
- package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
- package/src/mcp-server/tools/general-guidance.d.ts +1 -1
- package/src/mcp-server/tools/general-guidance.js +55 -32
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.js +29 -37
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/mcp-server/tools/list-generators.js +19 -25
- package/src/mcp-server/tools/list-generators.js.map +1 -1
- package/src/mcp-server/tools/upgrade-workspace.d.ts +11 -0
- package/src/mcp-server/tools/upgrade-workspace.js +32 -0
- package/src/mcp-server/tools/upgrade-workspace.js.map +1 -0
- package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/metadata.json +3 -0
- package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
- package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.js +329 -0
- package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
- package/src/migrations/latest/py-agent-a2a-lifespan-construction/metadata.json +3 -0
- package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.d.ts +6 -0
- package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.js +234 -0
- package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.js.map +1 -0
- package/src/migrations/latest/smithy-server-package-rename/metadata.json +3 -0
- package/src/migrations/latest/smithy-server-package-rename/migration.d.ts +6 -0
- package/src/migrations/latest/smithy-server-package-rename/migration.js +123 -0
- package/src/migrations/latest/smithy-server-package-rename/migration.js.map +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/build-system-prompt.ts.fixture +23 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/build-user-prompt.ts.fixture +96 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/config-path.ts.fixture +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/file-to-translate.ts.fixture +10 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/get-files-to-translate.ts.fixture +96 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/header.ts.fixture +15 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/log.ts.fixture +18 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/main-call.ts.fixture +6 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/main.ts.fixture +79 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/project-root.ts.fixture +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/run-with-concurrency.ts.fixture +57 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/scripts-dir.ts.fixture +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/files/translate-file-for-language.ts.fixture +61 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/already-migrated.grit +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/build-system-prompt.grit +6 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/build-user-prompt.grit +6 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/config-path.grit +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/file-to-translate.grit +11 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/get-files-to-translate.grit +7 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/log.grit +3 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/main-call.grit +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/main.grit +8 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/project-root.grit +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/run-with-concurrency.grit +6 -0
- package/src/migrations/latest/translate-script-whole-file-writes/grit/translate-file-for-language.grit +6 -0
- package/src/migrations/latest/translate-script-whole-file-writes/metadata.json +3 -0
- package/src/migrations/latest/translate-script-whole-file-writes/migration.d.ts +2 -0
- package/src/migrations/latest/translate-script-whole-file-writes/migration.js +103 -0
- package/src/migrations/latest/translate-script-whole-file-writes/migration.js.map +1 -0
- package/src/migrations/latest/translate-script-whole-file-writes/test-fixtures/released-script-first.ts.fixture +430 -0
- package/src/migrations/latest/translate-script-whole-file-writes/test-fixtures/released-script.ts.fixture +431 -0
- package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js +65 -0
- package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js +108 -0
- package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js +128 -0
- package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js +215 -0
- package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js +93 -0
- package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.d.ts +96 -0
- package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js +670 -0
- package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js +89 -0
- package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js +449 -0
- package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js +78 -0
- package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -0
- package/src/{smithy/project/files/build.Dockerfile.template → migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/rc57-service.Dockerfile.fixture} +1 -4
- package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
- package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js +217 -0
- package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/__snapshots__/migration.spec.ts.snap +149 -0
- package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js +195 -0
- package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/__snapshots__/migration.spec.ts.snap +57 -0
- package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js +77 -0
- package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/__snapshots__/migration.spec.ts.snap +48 -0
- package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js +91 -0
- package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js +412 -0
- package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js +33 -0
- package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js +83 -0
- package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/legacy-service.Dockerfile.fixture +95 -0
- package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js +154 -0
- package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js +71 -0
- package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js +57 -0
- package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -0
- package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
- package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
- package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +298 -74
- package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +748 -103
- package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +230 -37
- package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +249 -52
- package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5535 -0
- package/src/open-api/ts-client/__snapshots__/generator.fast-api-gaps.spec.ts.snap +736 -0
- package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +305 -71
- package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +298 -0
- package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +353 -82
- package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +176 -55
- package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +100 -24
- package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
- package/src/open-api/ts-client/__snapshots__/generator.spec-compliance.spec.ts.snap +1883 -0
- package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
- package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +200 -48
- package/src/open-api/ts-client/files/client.gen.ts.template +358 -24
- package/src/open-api/ts-client/files/types.gen.ts.template +6 -4
- package/src/open-api/ts-client/generator.js +41 -26
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-client/schema.d.js +6 -0
- package/src/open-api/ts-client/schema.d.js.map +1 -0
- package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +7 -2
- package/src/open-api/ts-hooks/generator.js +17 -21
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.spec.tsx +70 -0
- package/src/open-api/ts-hooks/schema.d.js +6 -0
- package/src/open-api/ts-hooks/schema.d.js.map +1 -0
- package/src/open-api/ts-metadata/generator.js +12 -20
- package/src/open-api/ts-metadata/generator.js.map +1 -1
- package/src/open-api/ts-metadata/schema.d.js +6 -0
- package/src/open-api/ts-metadata/schema.d.js.map +1 -0
- package/src/open-api/utils/codegen-data/languages.d.ts +0 -6
- package/src/open-api/utils/codegen-data/languages.js +59 -66
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data/types.d.ts +255 -10
- package/src/open-api/utils/codegen-data/types.js +54 -30
- package/src/open-api/utils/codegen-data/types.js.map +1 -1
- package/src/open-api/utils/codegen-data.d.ts +2 -2
- package/src/open-api/utils/codegen-data.js +494 -674
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.js +437 -246
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.js +8 -14
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/parser.d.ts +55 -0
- package/src/open-api/utils/parser.js +787 -0
- package/src/open-api/utils/parser.js.map +1 -0
- package/src/open-api/utils/refs.js +12 -22
- package/src/open-api/utils/refs.js.map +1 -1
- package/src/open-api/utils/types.d.ts +18 -0
- package/src/open-api/utils/types.js +5 -2
- package/src/open-api/utils/types.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +101 -20
- package/src/preset/generator.d.ts +14 -1
- package/src/preset/generator.js +76 -151
- package/src/preset/generator.js.map +1 -1
- package/src/preset/schema.d.js +6 -0
- package/src/preset/schema.d.js.map +1 -0
- package/src/preset/schema.d.ts +4 -1
- package/src/preset/schema.json +16 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +326 -0
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +738 -0
- package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.protocols.spec.ts.snap} +191 -315
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +231 -0
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +29 -0
- package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +29 -0
- package/src/py/agent/a2a-connection/generator.d.ts +24 -0
- package/src/py/agent/a2a-connection/generator.js +145 -88
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.js +8 -0
- package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
- package/src/py/agent/a2a-connection/schema.d.ts +1 -0
- package/src/py/agent/a2a-connection/schema.json +5 -0
- package/src/py/agent/files/deploy/Dockerfile.template +8 -1
- package/src/py/agent/files/langchain/a2a/main.py.template +94 -0
- package/src/py/agent/files/langchain/ag-ui/main.py.template +87 -0
- package/src/py/agent/files/langchain/common/agent.py.template +30 -0
- package/src/py/agent/files/{http → langchain/http}/init.py.template +17 -25
- package/src/py/agent/files/langchain/http/main.py.template +81 -0
- package/src/py/agent/files/{a2a → strands/a2a}/main.py.template +33 -15
- package/src/py/agent/files/strands/ag-ui/main.py.template +89 -0
- package/src/py/agent/files/{common → strands/common}/agent.py.template +2 -0
- package/src/py/agent/files/strands/http/init.py.template +97 -0
- package/src/py/agent/files/{http → strands/http}/main.py.template +4 -13
- package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +184 -0
- package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
- package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
- package/src/py/agent/gateway-connection/generator.d.ts +33 -0
- package/src/py/agent/gateway-connection/generator.js +153 -0
- package/src/py/agent/gateway-connection/generator.js.map +1 -0
- package/src/py/agent/gateway-connection/schema.d.js +6 -0
- package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
- package/src/py/agent/gateway-connection/schema.d.ts +13 -0
- package/src/py/agent/gateway-connection/schema.json +31 -0
- package/src/py/agent/generator.d.ts +154 -1
- package/src/py/agent/generator.js +396 -197
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +154 -89
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +31 -0
- package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +31 -0
- package/src/py/agent/mcp-connection/generator.d.ts +23 -0
- package/src/py/agent/mcp-connection/generator.js +103 -130
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.js +8 -0
- package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
- package/src/py/agent/mcp-connection/schema.d.ts +1 -0
- package/src/py/agent/mcp-connection/schema.json +5 -0
- package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +17 -19
- package/src/py/agent/react-connection/generator.d.ts +150 -1
- package/src/py/agent/react-connection/generator.js +105 -65
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +4 -4
- package/src/py/agent/react-connection/local-dev.js +36 -0
- package/src/py/agent/react-connection/local-dev.js.map +1 -0
- package/src/py/agent/react-connection/schema.d.js +8 -0
- package/src/py/agent/react-connection/schema.d.js.map +1 -0
- package/src/py/agent/react-connection/schema.d.ts +1 -0
- package/src/py/agent/react-connection/schema.json +5 -0
- package/src/py/agent/schema.d.js +6 -0
- package/src/py/agent/schema.d.js.map +1 -0
- package/src/py/agent/schema.d.ts +5 -1
- package/src/py/agent/schema.json +15 -1
- package/src/py/api/generator.js +12 -11
- package/src/py/api/generator.js.map +1 -1
- package/src/py/api/schema.d.js +6 -0
- package/src/py/api/schema.d.js.map +1 -0
- package/src/py/api/schema.d.ts +1 -0
- package/src/py/api/schema.json +5 -0
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1520 -0
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +63 -0
- package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/agent-connection/generator.js +45 -0
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
- package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
- package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
- package/src/py/dynamodb/agent-connection/schema.d.ts +15 -0
- package/src/py/dynamodb/agent-connection/schema.json +27 -0
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +32 -0
- package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +39 -0
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
- package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
- package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
- package/src/py/dynamodb/fast-api-connection/schema.d.ts +13 -0
- package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
- package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
- package/src/py/dynamodb/files/__name__/client.py.template +39 -0
- package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
- package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
- package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
- package/src/py/dynamodb/files/config.json.template +24 -0
- package/src/py/dynamodb/generator.d.ts +39 -0
- package/src/py/dynamodb/generator.js +130 -0
- package/src/py/dynamodb/generator.js.map +1 -0
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +63 -0
- package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +45 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
- package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
- package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/py/dynamodb/mcp-server-connection/schema.d.ts +15 -0
- package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
- package/src/py/dynamodb/schema.d.js +6 -0
- package/src/py/dynamodb/schema.d.js.map +1 -0
- package/src/py/dynamodb/schema.d.ts +16 -0
- package/src/py/dynamodb/schema.json +76 -0
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +240 -4693
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +5409 -0
- package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
- package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
- package/src/py/fast-api/generator.d.ts +72 -0
- package/src/py/fast-api/generator.js +134 -95
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +4 -3
- package/src/py/fast-api/react/generator.d.ts +16 -1
- package/src/py/fast-api/react/generator.js +38 -26
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.js +31 -29
- package/src/py/fast-api/react/open-api.js.map +1 -1
- package/src/py/fast-api/react/schema.d.js +6 -0
- package/src/py/fast-api/react/schema.d.js.map +1 -0
- package/src/py/fast-api/react/schema.d.ts +1 -0
- package/src/py/fast-api/react/schema.json +5 -0
- package/src/py/fast-api/schema.d.js +6 -0
- package/src/py/fast-api/schema.d.js.map +1 -0
- package/src/py/fast-api/schema.d.ts +1 -0
- package/src/py/fast-api/schema.json +6 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/py/lambda-function/generator.d.ts +21 -0
- package/src/py/lambda-function/generator.js +82 -62
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/lambda-function/schema.d.js +6 -0
- package/src/py/lambda-function/schema.d.js.map +1 -0
- package/src/py/lambda-function/schema.d.ts +1 -0
- package/src/py/lambda-function/schema.json +5 -0
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +221 -21
- package/src/py/mcp-server/files/deploy/Dockerfile.template +8 -1
- package/src/py/mcp-server/generator.d.ts +68 -0
- package/src/py/mcp-server/generator.js +204 -131
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js +6 -0
- package/src/py/mcp-server/schema.d.js.map +1 -0
- package/src/py/mcp-server/schema.d.ts +1 -0
- package/src/py/mcp-server/schema.json +6 -0
- package/src/py/project/generator.d.ts +27 -1
- package/src/py/project/generator.js +248 -130
- package/src/py/project/generator.js.map +1 -1
- package/src/py/project/schema.d.js +6 -0
- package/src/py/project/schema.d.js.map +1 -0
- package/src/py/project/schema.d.ts +1 -0
- package/src/py/project/schema.json +5 -0
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2070 -0
- package/src/py/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +123 -0
- package/src/py/rdb/agent-connection/generator.d.ts +10 -0
- package/src/py/rdb/agent-connection/generator.js +52 -0
- package/src/py/rdb/agent-connection/generator.js.map +1 -0
- package/src/py/rdb/agent-connection/schema.d.js +8 -0
- package/src/py/rdb/agent-connection/schema.d.js.map +1 -0
- package/src/py/rdb/agent-connection/schema.d.ts +15 -0
- package/src/py/rdb/agent-connection/schema.json +27 -0
- package/src/py/rdb/fast-api-connection/__snapshots__/generator.spec.ts.snap +51 -0
- package/src/py/rdb/fast-api-connection/files/__apiModuleName__/dependencies/__rdbNameSnake__.py.template +14 -0
- package/src/py/rdb/fast-api-connection/generator.d.ts +10 -0
- package/src/py/rdb/fast-api-connection/generator.js +56 -0
- package/src/py/rdb/fast-api-connection/generator.js.map +1 -0
- package/src/py/rdb/fast-api-connection/schema.d.js +8 -0
- package/src/py/rdb/fast-api-connection/schema.d.js.map +1 -0
- package/src/py/rdb/fast-api-connection/schema.d.ts +13 -0
- package/src/py/rdb/fast-api-connection/schema.json +23 -0
- package/src/py/rdb/files/Dockerfile.create-db-user.template +14 -0
- package/src/py/rdb/files/Dockerfile.migration.template +14 -0
- package/src/py/rdb/files/__name__/__init__.py.template +3 -0
- package/src/py/rdb/files/__name__/connection.py.template +55 -0
- package/src/py/rdb/files/__name__/create_db_user_handler.py.template +97 -0
- package/src/py/rdb/files/__name__/migration_handler.py.template +36 -0
- package/src/py/rdb/files/__name__/models/__init__.py.template +3 -0
- package/src/py/rdb/files/__name__/models/example.py.template +8 -0
- package/src/py/rdb/files/__name__/utils.py.template +104 -0
- package/src/py/rdb/files/alembic.ini.template +38 -0
- package/src/py/rdb/files/config.json.template +14 -0
- package/src/py/rdb/files/migrations/env.py.template +80 -0
- package/src/py/rdb/files/migrations/script.py.mako.template +28 -0
- package/src/py/rdb/generator.d.ts +103 -0
- package/src/py/rdb/generator.js +328 -0
- package/src/py/rdb/generator.js.map +1 -0
- package/src/py/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +119 -0
- package/src/py/rdb/mcp-server-connection/generator.d.ts +10 -0
- package/src/py/rdb/mcp-server-connection/generator.js +52 -0
- package/src/py/rdb/mcp-server-connection/generator.js.map +1 -0
- package/src/py/rdb/mcp-server-connection/schema.d.js +8 -0
- package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/py/rdb/mcp-server-connection/schema.d.ts +15 -0
- package/src/py/rdb/mcp-server-connection/schema.json +27 -0
- package/src/py/rdb/schema.d.js +6 -0
- package/src/py/rdb/schema.d.js.map +1 -0
- package/src/py/rdb/schema.d.ts +16 -0
- package/src/py/rdb/schema.json +78 -0
- package/src/py/rdb/utils.d.ts +6 -0
- package/src/py/rdb/utils.js +16 -0
- package/src/py/rdb/utils.js.map +1 -0
- package/src/sdk/agentcore-gateway.d.ts +6 -0
- package/src/sdk/agentcore-gateway.js +7 -0
- package/src/sdk/agentcore-gateway.js.map +1 -0
- package/src/sdk/connection.d.ts +6 -0
- package/src/sdk/connection.js +6 -0
- package/src/sdk/connection.js.map +1 -0
- package/src/sdk/license.d.ts +8 -0
- package/src/sdk/license.js +7 -0
- package/src/sdk/license.js.map +1 -0
- package/src/sdk/open-api.d.ts +10 -0
- package/src/sdk/open-api.js +8 -0
- package/src/sdk/open-api.js.map +1 -0
- package/src/sdk/py.d.ts +18 -0
- package/src/sdk/py.js +12 -0
- package/src/sdk/py.js.map +1 -0
- package/src/sdk/terraform.d.ts +6 -0
- package/src/sdk/terraform.js +7 -0
- package/src/sdk/terraform.js.map +1 -0
- package/src/sdk/ts.d.ts +39 -0
- package/src/sdk/ts.js +41 -0
- package/src/sdk/ts.js.map +1 -0
- package/{sdk/utils/format.d.ts → src/sdk/utils/ast.d.ts} +1 -1
- package/src/sdk/utils/ast.js +6 -0
- package/src/sdk/utils/ast.js.map +1 -0
- package/{sdk/utils/ast.d.ts → src/sdk/utils/format.d.ts} +1 -2
- package/src/sdk/utils/format.js +6 -0
- package/src/sdk/utils/format.js.map +1 -0
- package/{sdk → src/sdk}/utils/test.d.ts +1 -1
- package/src/sdk/utils/test.js +6 -0
- package/src/sdk/utils/test.js.map +1 -0
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +245 -242
- package/src/smithy/project/files/{smithy-build.json.template → service/smithy-build.json.template} +5 -5
- package/src/smithy/project/files/{src → service/src}/operations/echo.smithy.template +1 -0
- package/src/smithy/project/files/shapes/smithy-build.json.template +7 -0
- package/src/smithy/project/files/shapes/src/main.smithy.template +11 -0
- package/src/smithy/project/files/ssdk-bundle/ssdk.rolldown.config.mjs.template +52 -0
- package/src/smithy/project/generator.d.ts +90 -0
- package/src/smithy/project/generator.js +223 -56
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/project/schema.d.js +6 -0
- package/src/smithy/project/schema.d.js.map +1 -0
- package/src/smithy/project/schema.d.ts +2 -0
- package/src/smithy/project/schema.json +28 -1
- package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/smithy/react-connection/generator.d.ts +15 -0
- package/src/smithy/react-connection/generator.js +54 -48
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/react-connection/schema.d.js +6 -0
- package/src/smithy/react-connection/schema.d.js.map +1 -0
- package/src/smithy/react-connection/schema.d.ts +1 -0
- package/src/smithy/react-connection/schema.json +5 -0
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +871 -109
- package/src/smithy/ts/api/files/handler.ts.template +3 -3
- package/src/smithy/ts/api/files/local-server.ts.template +3 -3
- package/src/smithy/ts/api/files/operations/echo.ts.template +2 -2
- package/src/smithy/ts/api/files/service.ts.template +3 -3
- package/src/smithy/ts/api/generator.d.ts +88 -0
- package/src/smithy/ts/api/generator.js +187 -114
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.d.js +6 -0
- package/src/smithy/ts/api/schema.d.js.map +1 -0
- package/src/smithy/ts/api/schema.d.ts +1 -0
- package/src/smithy/ts/api/schema.json +6 -0
- package/src/terraform/project/files/application/scripts/bootstrap.ts.template +40 -1
- package/src/terraform/project/files/application/src/main.tf.template +6 -1
- package/src/terraform/project/files/application/src/providers.tf.template +1 -1
- package/src/terraform/project/generator.d.ts +50 -0
- package/src/terraform/project/generator.js +212 -111
- package/src/terraform/project/generator.js.map +1 -1
- package/src/terraform/project/schema.d.js +9 -0
- package/src/terraform/project/schema.d.js.map +1 -0
- package/src/terraform/project/schema.d.ts +1 -0
- package/src/terraform/project/schema.json +5 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +1182 -184
- package/src/trpc/backend/files/src/client/index.ts.template +1 -1
- package/src/trpc/backend/files/src/handler.ts.template +1 -1
- package/src/trpc/backend/files/src/index.ts.template +5 -5
- package/src/trpc/backend/files/src/init.ts.template +1 -1
- package/src/trpc/backend/files/src/local-server.ts.template +1 -1
- package/src/trpc/backend/files/src/middleware/index.ts.template +7 -7
- package/src/trpc/backend/files/src/procedures/echo.ts.template +3 -3
- package/src/trpc/backend/files/src/router.ts.template +2 -2
- package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
- package/src/trpc/backend/files/src/schema/index.ts.template +1 -1
- package/src/trpc/backend/generator.d.ts +90 -1
- package/src/trpc/backend/generator.js +177 -100
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.js +6 -0
- package/src/trpc/backend/schema.d.js.map +1 -0
- package/src/trpc/backend/schema.d.ts +1 -0
- package/src/trpc/backend/schema.json +6 -0
- package/src/trpc/react/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
- package/src/trpc/react/generator.d.ts +38 -1
- package/src/trpc/react/generator.js +105 -63
- package/src/trpc/react/generator.js.map +1 -1
- package/src/trpc/react/schema.d.js +6 -0
- package/src/trpc/react/schema.d.js.map +1 -0
- package/src/trpc/react/schema.d.ts +1 -0
- package/src/trpc/react/schema.json +5 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1452 -25
- package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +258 -0
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
- package/src/ts/agent/a2a-connection/generator.d.ts +46 -0
- package/src/ts/agent/a2a-connection/generator.js +110 -63
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.js +8 -0
- package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
- package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
- package/src/ts/agent/a2a-connection/schema.json +5 -0
- package/src/ts/agent/files/a2a/index.ts.template +1 -1
- package/src/ts/agent/files/ag-ui/index.ts.template +36 -11
- package/src/ts/agent/files/common/agent.ts.template +15 -2
- package/src/ts/agent/files/common/session.ts.template +43 -0
- package/src/ts/agent/files/deploy/Dockerfile.template +13 -2
- package/src/ts/agent/files/http/client.ts.template +2 -2
- package/src/ts/agent/files/http/index.ts.template +2 -2
- package/src/ts/agent/files/http/router.ts.template +5 -5
- package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +222 -0
- package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
- package/src/ts/agent/gateway-connection/generator.d.ts +47 -0
- package/src/ts/agent/gateway-connection/generator.js +144 -0
- package/src/ts/agent/gateway-connection/generator.js.map +1 -0
- package/src/ts/agent/gateway-connection/schema.d.js +6 -0
- package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
- package/src/ts/agent/gateway-connection/schema.d.ts +13 -0
- package/src/ts/agent/gateway-connection/schema.json +31 -0
- package/src/ts/agent/generator.d.ts +205 -0
- package/src/ts/agent/generator.js +339 -156
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +194 -113
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +23 -0
- package/src/ts/agent/mcp-connection/generator.d.ts +37 -0
- package/src/ts/agent/mcp-connection/generator.js +88 -65
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.js +8 -0
- package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
- package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
- package/src/ts/agent/mcp-connection/schema.json +5 -0
- package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
- package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
- package/src/ts/agent/react-connection/generator.d.ts +202 -1
- package/src/ts/agent/react-connection/generator.js +158 -99
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +2 -2
- package/src/ts/agent/react-connection/local-dev.js +17 -0
- package/src/ts/agent/react-connection/local-dev.js.map +1 -0
- package/src/ts/agent/react-connection/schema.d.js +8 -0
- package/src/ts/agent/react-connection/schema.d.js.map +1 -0
- package/src/ts/agent/react-connection/schema.d.ts +1 -0
- package/src/ts/agent/react-connection/schema.json +5 -0
- package/src/ts/agent/schema.d.js +6 -0
- package/src/ts/agent/schema.d.js.map +1 -0
- package/src/ts/agent/schema.d.ts +4 -0
- package/src/ts/agent/schema.json +14 -0
- package/src/ts/api/generator.js +16 -16
- package/src/ts/api/generator.js.map +1 -1
- package/src/ts/api/schema.d.js +6 -0
- package/src/ts/api/schema.d.js.map +1 -0
- package/src/ts/api/schema.d.ts +1 -0
- package/src/ts/api/schema.json +5 -0
- package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +28 -14
- package/src/ts/astro-docs/files/base/src/content/docs/en/index.mdx.template +2 -2
- package/src/ts/astro-docs/files/base/src/content.config.ts.template +4 -4
- package/src/ts/astro-docs/files/translation/scripts/translate.ts.template +272 -150
- package/src/ts/astro-docs/generator.d.ts +38 -0
- package/src/ts/astro-docs/generator.js +126 -61
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/astro-docs/schema.d.js +6 -0
- package/src/ts/astro-docs/schema.d.js.map +1 -0
- package/src/ts/astro-docs/schema.d.ts +2 -2
- package/src/ts/astro-docs/schema.json +3 -3
- package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +982 -0
- package/src/ts/dcr-proxy/generator.d.ts +34 -0
- package/src/ts/dcr-proxy/generator.js +115 -0
- package/src/ts/dcr-proxy/generator.js.map +1 -0
- package/src/ts/dcr-proxy/schema.d.js +6 -0
- package/src/ts/dcr-proxy/schema.d.js.map +1 -0
- package/src/ts/dcr-proxy/schema.d.ts +13 -0
- package/src/ts/dcr-proxy/schema.json +44 -0
- package/src/ts/docs/generator.js +10 -10
- package/src/ts/docs/generator.js.map +1 -1
- package/src/ts/docs/schema.d.js +6 -0
- package/src/ts/docs/schema.d.js.map +1 -0
- package/src/ts/docs/schema.d.ts +1 -4
- package/src/ts/docs/schema.json +3 -3
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +400 -518
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +23 -5
- package/src/ts/dynamodb/agent-connection/generator.js +27 -23
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/agent-connection/schema.json +5 -0
- package/src/ts/dynamodb/files/config.json.template +24 -0
- package/src/ts/dynamodb/files/src/client.ts.template +30 -11
- package/src/ts/dynamodb/files/src/entities/example.ts.template +1 -1
- package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -1
- package/src/ts/dynamodb/files/src/index.ts.template +2 -11
- package/src/ts/dynamodb/generator.d.ts +41 -0
- package/src/ts/dynamodb/generator.js +106 -64
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +23 -5
- package/src/ts/dynamodb/mcp-server-connection/generator.js +27 -23
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
- package/src/ts/dynamodb/schema.d.js +6 -0
- package/src/ts/dynamodb/schema.d.js.map +1 -0
- package/src/ts/dynamodb/schema.d.ts +2 -0
- package/src/ts/dynamodb/schema.json +26 -2
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +12 -3
- package/src/ts/dynamodb/smithy-connection/generator.js +22 -22
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
- package/src/ts/dynamodb/trpc-connection/generator.js +22 -22
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
- package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +8 -6
- package/src/ts/lambda-function/files/handler/__lambdaFunctionKebabCase__.ts.template +2 -1
- package/src/ts/lambda-function/generator.d.ts +38 -0
- package/src/ts/lambda-function/generator.js +98 -65
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lambda-function/io.js +83 -52
- package/src/ts/lambda-function/io.js.map +1 -1
- package/src/ts/lambda-function/schema.d.js +6 -0
- package/src/ts/lambda-function/schema.d.js.map +1 -0
- package/src/ts/lambda-function/schema.d.ts +1 -0
- package/src/ts/lambda-function/schema.json +5 -0
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +83 -45
- package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +1 -1
- package/src/ts/lib/biome.js +71 -35
- package/src/ts/lib/biome.js.map +1 -1
- package/src/ts/lib/generator.d.ts +7 -0
- package/src/ts/lib/generator.js +115 -103
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
- package/src/ts/lib/schema.d.js +6 -0
- package/src/ts/lib/schema.d.js.map +1 -0
- package/src/ts/lib/schema.d.ts +1 -1
- package/src/ts/lib/schema.json +5 -0
- package/src/ts/lib/ts-project-utils.d.ts +13 -1
- package/src/ts/lib/ts-project-utils.js +96 -71
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/types.d.ts +6 -0
- package/src/ts/lib/types.js +5 -2
- package/src/ts/lib/types.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +10 -1
- package/src/ts/lib/vitest.js +54 -26
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +221 -44
- package/src/ts/mcp-server/files/Dockerfile.template +13 -2
- package/src/ts/mcp-server/generator.d.ts +110 -0
- package/src/ts/mcp-server/generator.js +231 -148
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.js +6 -0
- package/src/ts/mcp-server/schema.d.js.map +1 -0
- package/src/ts/mcp-server/schema.d.ts +1 -0
- package/src/ts/mcp-server/schema.json +6 -0
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +28 -13
- package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
- package/src/ts/nx-generator/files/common/schema.json.template +5 -0
- package/src/ts/nx-generator/files/local/generator.spec.ts.template +1 -1
- package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
- package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +6 -7
- package/src/ts/nx-generator/generator.d.ts +3 -0
- package/src/ts/nx-generator/generator.js +124 -73
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-generator/schema.d.js +6 -0
- package/src/ts/nx-generator/schema.d.js.map +1 -0
- package/src/ts/nx-generator/schema.d.ts +1 -0
- package/src/ts/nx-generator/schema.json +5 -0
- package/src/ts/nx-migration/files/migration.spec.ts.template +26 -0
- package/src/ts/nx-migration/files/migration.ts.template +65 -0
- package/src/ts/nx-migration/files/prompt.md.template +46 -0
- package/src/ts/nx-migration/generator.d.ts +27 -0
- package/src/ts/nx-migration/generator.js +147 -0
- package/src/ts/nx-migration/generator.js.map +1 -0
- package/src/ts/nx-migration/schema.d.js +6 -0
- package/src/ts/nx-migration/schema.d.js.map +1 -0
- package/src/ts/nx-migration/schema.d.ts +13 -0
- package/src/ts/nx-migration/schema.json +63 -0
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +36 -25
- package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +5 -6
- package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
- package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
- package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
- package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
- package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
- package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +4 -4
- package/src/ts/nx-plugin/generator.d.ts +3 -0
- package/src/ts/nx-plugin/generator.js +67 -50
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/schema.d.js +9 -0
- package/src/ts/nx-plugin/schema.d.js.map +1 -0
- package/src/ts/nx-plugin/schema.json +5 -0
- package/src/ts/nx-plugin/utils.d.ts +27 -2
- package/src/ts/nx-plugin/utils.js +66 -51
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +553 -644
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +16 -6
- package/src/ts/rdb/agent-connection/generator.js +44 -39
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/agent-connection/schema.d.js +8 -0
- package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
- package/src/ts/rdb/agent-connection/schema.json +5 -0
- package/src/ts/rdb/files/Dockerfile.template +19 -1
- package/src/ts/rdb/files/config.json.template +14 -0
- package/src/ts/rdb/files/prisma.config.ts.template +6 -5
- package/src/ts/rdb/files/src/create-db-user-handler.ts.template +9 -11
- package/src/ts/rdb/files/src/index.ts.template +1 -2
- package/src/ts/rdb/files/src/migration-handler.ts.template +5 -30
- package/src/ts/rdb/files/src/prisma.ts.template +33 -25
- package/src/ts/rdb/files/src/utils.ts.template +3 -0
- package/src/ts/rdb/generator.d.ts +117 -4
- package/src/ts/rdb/generator.js +257 -138
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +16 -6
- package/src/ts/rdb/mcp-server-connection/generator.js +42 -37
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
- package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
- package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
- package/src/ts/rdb/schema.d.js +6 -0
- package/src/ts/rdb/schema.d.js.map +1 -0
- package/src/ts/rdb/schema.d.ts +1 -0
- package/src/ts/rdb/schema.json +7 -1
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +18 -9
- package/src/ts/rdb/smithy-connection/generator.js +48 -43
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
- package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
- package/src/ts/rdb/smithy-connection/schema.json +5 -0
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +12 -3
- package/src/ts/rdb/trpc-connection/generator.js +37 -31
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
- package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
- package/src/ts/rdb/trpc-connection/schema.json +5 -0
- package/src/ts/rdb/utils.js +9 -11
- package/src/ts/rdb/utils.js.map +1 -1
- package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +17 -16
- package/src/ts/react-website/agui/generator.d.ts +97 -0
- package/src/ts/react-website/agui/generator.js +114 -67
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +1391 -644
- package/src/ts/react-website/app/files/app/common/README.md.template +1 -1
- package/src/ts/react-website/app/generator.d.ts +142 -2
- package/src/ts/react-website/app/generator.js +333 -209
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.d.js +6 -0
- package/src/ts/react-website/app/schema.d.js.map +1 -0
- package/src/ts/react-website/app/schema.d.ts +1 -1
- package/src/ts/react-website/app/schema.json +12 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +161 -26
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +48 -12
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
- package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
- package/src/ts/react-website/cognito-auth/generator.d.ts +25 -1
- package/src/ts/react-website/cognito-auth/generator.js +79 -64
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +3 -1
- package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
- package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
- package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
- package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
- package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
- package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
- package/src/ts/react-website/cognito-auth/schema.json +5 -0
- package/src/ts/react-website/cognito-auth/utils.js +34 -32
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
- package/src/ts/react-website/runtime-config/generator.js +29 -31
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/react-website/runtime-config/schema.d.js +6 -0
- package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
- package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
- package/src/ts/react-website/runtime-config/schema.json +5 -0
- package/src/ts/sync/generator.js +137 -60
- package/src/ts/sync/generator.js.map +1 -1
- package/src/ts/website/app/generator.js +10 -10
- package/src/ts/website/app/generator.js.map +1 -1
- package/src/ts/website/app/schema.d.js +6 -0
- package/src/ts/website/app/schema.d.js.map +1 -0
- package/src/ts/website/app/schema.d.ts +1 -1
- package/src/ts/website/app/schema.json +11 -6
- package/src/ts/website/auth/generator.d.ts +1 -1
- package/src/ts/website/auth/generator.js +11 -10
- package/src/ts/website/auth/generator.js.map +1 -1
- package/src/ts/website/auth/schema.d.js +6 -0
- package/src/ts/website/auth/schema.d.js.map +1 -0
- package/src/ts/website/auth/schema.d.ts +1 -0
- package/src/ts/website/auth/schema.json +5 -0
- package/src/utils/__snapshots__/shared-constructs.spec.ts.snap +21 -0
- package/src/utils/add-dependencies.d.ts +38 -0
- package/src/utils/add-dependencies.js +83 -0
- package/src/utils/add-dependencies.js.map +1 -0
- package/src/utils/agent-chat/agent-chat.d.ts +31 -0
- package/src/utils/agent-chat/agent-chat.js +31 -0
- package/src/utils/agent-chat/agent-chat.js.map +1 -0
- package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
- package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
- package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
- package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
- package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
- package/src/utils/agent-connection/agent-connection.d.ts +139 -26
- package/src/utils/agent-connection/agent-connection.js +500 -103
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
- package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
- package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
- package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
- package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
- package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +33 -33
- package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
- package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
- package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +47 -0
- package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +29 -0
- package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +1 -1
- package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
- package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
- package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
- package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
- package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
- package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
- package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +105 -0
- package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
- package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
- package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
- package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +6 -18
- package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +2 -2
- package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
- package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +111 -0
- package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
- package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +2 -2
- package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
- package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +79 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +212 -38
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +170 -6
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +87 -0
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.ts.template +366 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +624 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +212 -1
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +521 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-harness/__nameKebabCase__/__nameKebabCase__.tf.template +282 -0
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +159 -13
- package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
- package/src/utils/api-constructs/api-constructs.d.ts +30 -2
- package/src/utils/api-constructs/api-constructs.js +82 -32
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +20 -15
- package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +24 -16
- package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +26 -9
- package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +70 -0
- package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
- package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +56 -17
- package/src/utils/api-constructs/files/cdk/core/api/trpc/trpc-utils.ts.template +1 -1
- package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +101 -12
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +194 -8
- package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
- package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
- package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
- package/src/utils/api-constructs/open-api-metadata.js +22 -22
- package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
- package/src/utils/ast/website.js +18 -20
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.d.ts +9 -0
- package/src/utils/ast.js +125 -86
- package/src/utils/ast.js.map +1 -1
- package/src/utils/base-tsconfig.d.ts +30 -0
- package/src/utils/base-tsconfig.js +32 -0
- package/src/utils/base-tsconfig.js.map +1 -0
- package/src/utils/bundle/bundle.d.ts +6 -1
- package/src/utils/bundle/bundle.js +58 -48
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +14 -3
- package/src/utils/commands.js +83 -28
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +18 -2
- package/src/utils/config/index.js +5 -4
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.d.ts +8 -2
- package/src/utils/config/utils.js +56 -59
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +16 -3
- package/src/utils/connection/open-api/react.d.ts +31 -5
- package/src/utils/connection/open-api/react.js +106 -76
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.js +22 -23
- package/src/utils/containers.js.map +1 -1
- package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +38 -0
- package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js +93 -0
- package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -0
- package/src/utils/dcr-proxy-constructs/files/cdk/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.ts.template +227 -0
- package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorization-server-metadata.ts.template +39 -0
- package/src/utils/dcr-proxy-constructs/files/project/src/handlers/authorize.ts.template +26 -0
- package/src/utils/dcr-proxy-constructs/files/project/src/handlers/mcp-proxy.ts.template +89 -0
- package/src/utils/dcr-proxy-constructs/files/project/src/handlers/protected-resource-metadata.ts.template +13 -0
- package/src/utils/dcr-proxy-constructs/files/project/src/handlers/register.ts.template +70 -0
- package/src/utils/dcr-proxy-constructs/files/project/src/handlers/token.ts.template +75 -0
- package/src/utils/dcr-proxy-constructs/files/terraform/app/dcr-proxies/__nameKebabCase__/__nameKebabCase__.tf.template +410 -0
- package/src/utils/declared-dependencies.d.ts +140 -0
- package/src/utils/declared-dependencies.js +64 -0
- package/src/utils/declared-dependencies.js.map +1 -0
- package/src/utils/dependencies.d.ts +18 -0
- package/src/utils/dependencies.js +206 -0
- package/src/utils/dependencies.js.map +1 -0
- package/src/utils/docker.d.ts +89 -0
- package/src/utils/docker.js +125 -0
- package/src/utils/docker.js.map +1 -0
- package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +1 -1
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js +39 -41
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
- package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +18 -5
- package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +1 -1
- package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +24 -17
- package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
- package/src/utils/files/common/constructs/src/core/cloudfront.ts.template +14 -0
- package/src/utils/files/common/constructs/src/core/index.ts.template +5 -4
- package/src/utils/files/common/constructs/src/index.ts.template +2 -2
- package/src/utils/files/common/infra-config/src/index.ts.template +3 -3
- package/src/utils/files/common/infra-config/src/resolve-stage.ts.template +2 -2
- package/src/utils/files/common/infra-config/src/stages.config.ts.template +1 -1
- package/src/{ts/dynamodb/files/scripts → utils/files/common/scripts/src/dynamodb}/create-local-table.ts.template +65 -31
- package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
- package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +103 -0
- package/src/utils/files/common/scripts/src/infra/infra-deploy.ts.template +2 -0
- package/src/utils/files/common/scripts/src/infra/infra-destroy.ts.template +2 -0
- package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +6 -3
- package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +3 -3
- package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
- package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
- package/src/utils/files/common/scripts/src/rdb/shared/pull-image.ts.template +16 -0
- package/src/utils/files/common/scripts/src/rdb/shared/start-container.ts.template +115 -0
- package/src/utils/files/common/shadcn/readme/README.md.template +3 -3
- package/src/utils/files/common/shadcn/src/index.ts.template +2 -2
- package/src/utils/files/shadcn/components.json.template +1 -1
- package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +63 -72
- package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
- package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +12 -6
- package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
- package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +9 -4
- package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
- package/src/utils/format.d.ts +39 -4
- package/src/utils/format.js +318 -198
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.d.ts +24 -5
- package/src/utils/fs.js +40 -15
- package/src/utils/fs.js.map +1 -1
- package/src/utils/function-constructs/files/cdk/app/lambda-functions/__nameKebabCase__.ts.template +1 -1
- package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
- package/src/utils/function-constructs/function-constructs.js +22 -25
- package/src/utils/function-constructs/function-constructs.js.map +1 -1
- package/src/utils/generators.js +18 -20
- package/src/utils/generators.js.map +1 -1
- package/src/utils/git.js +19 -34
- package/src/utils/git.js.map +1 -1
- package/src/utils/iac-providers.js +5 -5
- package/src/utils/iac-providers.js.map +1 -1
- package/src/utils/iac.js +12 -14
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +153 -24
- package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +28 -9
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +129 -12
- package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
- package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
- package/src/utils/identity-constructs/identity-constructs.js +52 -31
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/init.d.ts +72 -0
- package/src/utils/init.js +300 -0
- package/src/utils/init.js.map +1 -0
- package/src/utils/install.d.ts +32 -0
- package/src/utils/install.js +58 -0
- package/src/utils/install.js.map +1 -0
- package/src/utils/js.js +27 -20
- package/src/utils/js.js.map +1 -1
- package/src/utils/mcp.d.ts +9 -0
- package/src/utils/mcp.js +42 -41
- package/src/utils/mcp.js.map +1 -1
- package/src/utils/metrics.d.ts +7 -1
- package/src/utils/metrics.js +61 -46
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/migration-manifest.d.ts +58 -0
- package/src/utils/migration-manifest.js +76 -0
- package/src/utils/migration-manifest.js.map +1 -0
- package/src/utils/migration-versions.d.ts +145 -0
- package/src/utils/migration-versions.js +250 -0
- package/src/utils/migration-versions.js.map +1 -0
- package/src/utils/mock-project-graph.js +8 -12
- package/src/utils/mock-project-graph.js.map +1 -1
- package/src/utils/module-format.d.ts +25 -0
- package/src/utils/module-format.js +45 -0
- package/src/utils/module-format.js.map +1 -0
- package/src/utils/names.d.ts +22 -0
- package/src/utils/names.js +44 -48
- package/src/utils/names.js.map +1 -1
- package/src/utils/npm-scope.d.ts +0 -4
- package/src/utils/npm-scope.js +7 -20
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/nx.d.ts +74 -3
- package/src/utils/nx.js +196 -75
- package/src/utils/nx.js.map +1 -1
- package/src/utils/nxlv-python.js +27 -15
- package/src/utils/nxlv-python.js.map +1 -1
- package/src/utils/object.js +5 -11
- package/src/utils/object.js.map +1 -1
- package/src/utils/paths.js +11 -15
- package/src/utils/paths.js.map +1 -1
- package/src/utils/pkg-manager.js +4 -9
- package/src/utils/pkg-manager.js.map +1 -1
- package/src/utils/pnpm-workspace.d.ts +1 -12
- package/src/utils/pnpm-workspace.js +16 -43
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/port.d.ts +28 -6
- package/src/utils/port.js +67 -28
- package/src/utils/port.js.map +1 -1
- package/src/utils/project-package-json.d.ts +39 -0
- package/src/utils/project-package-json.js +119 -0
- package/src/utils/project-package-json.js.map +1 -0
- package/src/utils/py.d.ts +17 -3
- package/src/utils/py.js +73 -48
- package/src/utils/py.js.map +1 -1
- package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +72 -18
- package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +112 -88
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +127 -53
- package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +60 -53
- package/src/utils/rdb-constructs/rdb-constructs.d.ts +12 -1
- package/src/utils/rdb-constructs/rdb-constructs.js +38 -41
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/ruff.d.ts +59 -0
- package/src/utils/ruff.js +140 -0
- package/src/utils/ruff.js.map +1 -0
- package/src/utils/shared-constructs-constants.d.ts +46 -4
- package/src/utils/shared-constructs-constants.js +50 -15
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +4 -1
- package/src/utils/shared-constructs.js +62 -67
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +18 -0
- package/src/utils/shared-dynamodb-scripts.js +35 -0
- package/src/utils/shared-dynamodb-scripts.js.map +1 -0
- package/src/utils/shared-infra-config.js +31 -30
- package/src/utils/shared-infra-config.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +26 -0
- package/src/utils/shared-infra-scripts.js +58 -0
- package/src/utils/shared-infra-scripts.js.map +1 -0
- package/src/utils/shared-rdb-scripts.d.ts +27 -0
- package/src/utils/shared-rdb-scripts.js +59 -0
- package/src/utils/shared-rdb-scripts.js.map +1 -0
- package/src/utils/shared-scripts.d.ts +1 -4
- package/src/utils/shared-scripts.js +12 -38
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +26 -1
- package/src/utils/shared-shadcn.js +93 -67
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/smithy.d.ts +59 -0
- package/src/utils/smithy.js +73 -0
- package/src/utils/smithy.js.map +1 -0
- package/src/utils/test-git.d.ts +39 -0
- package/src/utils/test-git.js +117 -0
- package/src/utils/test-git.js.map +1 -0
- package/src/utils/test.d.ts +10 -0
- package/src/utils/test.js +44 -25
- package/src/utils/test.js.map +1 -1
- package/src/utils/toml.d.ts +5 -0
- package/src/utils/toml.js +17 -15
- package/src/utils/toml.js.map +1 -1
- package/src/utils/version-upgrade-migration/migration.d.ts +14 -0
- package/src/utils/version-upgrade-migration/migration.js +16 -0
- package/src/utils/version-upgrade-migration/migration.js.map +1 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.d.ts +45 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js +50 -0
- package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +76 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +146 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -0
- package/src/utils/version-upgrade-migration/register.d.ts +29 -0
- package/src/utils/version-upgrade-migration/register.js +42 -0
- package/src/utils/version-upgrade-migration/register.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js +352 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.d.ts +13 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js +33 -0
- package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.d.ts +10 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +518 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.d.ts +14 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js +40 -0
- package/src/utils/version-upgrade-migration/vended-upgrade.js.map +1 -0
- package/src/utils/versions.d.ts +240 -108
- package/src/utils/versions.js +265 -121
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/app/static-websites/__websiteNameKebabCase__.ts.template +2 -2
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +207 -41
- package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
- package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +145 -93
- package/src/utils/website-constructs/website-constructs.d.ts +11 -0
- package/src/utils/website-constructs/website-constructs.js +49 -30
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/bin/aws-nx-mcp.d.ts +0 -2
- package/bin/aws-nx-mcp.js +0 -17
- package/bin/aws-nx-mcp.js.map +0 -1
- package/sdk/connection.d.ts +0 -6
- package/sdk/connection.js +0 -10
- package/sdk/connection.js.map +0 -1
- package/sdk/license.d.ts +0 -8
- package/sdk/license.js +0 -13
- package/sdk/license.js.map +0 -1
- package/sdk/open-api.d.ts +0 -10
- package/sdk/open-api.js +0 -15
- package/sdk/open-api.js.map +0 -1
- package/sdk/py.d.ts +0 -14
- package/sdk/py.js +0 -18
- package/sdk/py.js.map +0 -1
- package/sdk/terraform.d.ts +0 -6
- package/sdk/terraform.js +0 -11
- package/sdk/terraform.js.map +0 -1
- package/sdk/ts.d.ts +0 -29
- package/sdk/ts.js +0 -47
- package/sdk/ts.js.map +0 -1
- package/sdk/utils/ast.js +0 -12
- package/sdk/utils/ast.js.map +0 -1
- package/sdk/utils/format.js +0 -10
- package/sdk/utils/format.js.map +0 -1
- package/sdk/utils/test.js +0 -10
- package/sdk/utils/test.js.map +0 -1
- package/src/connection/agent-serve-local.d.ts +0 -33
- package/src/connection/agent-serve-local.js +0 -48
- package/src/connection/agent-serve-local.js.map +0 -1
- package/src/connection/serve-local.js +0 -41
- package/src/connection/serve-local.js.map +0 -1
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
- package/src/py/agent/files/ag-ui/main.py.template +0 -37
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
- package/src/py/agent/react-connection/serve-local.js +0 -30
- package/src/py/agent/react-connection/serve-local.js.map +0 -1
- package/src/py/agent/scripts/http/chat.ts.template +0 -38
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
- package/src/ts/agent/react-connection/serve-local.js +0 -19
- package/src/ts/agent/react-connection/serve-local.js.map +0 -1
- package/src/ts/agent/scripts/http/chat.ts.template +0 -35
- package/src/ts/dynamodb/files/scripts/pull-image.ts.template +0 -15
- package/src/ts/dynamodb/files/scripts/start-container.ts.template +0 -81
- package/src/ts/dynamodb/files/src/constants.ts.template +0 -9
- package/src/ts/dynamodb/files/src/gsi.ts.template +0 -14
- package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
- package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
- package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
- package/src/ts/rdb/files/src/constants.ts.template +0 -8
- package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
- package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
- package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
- package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
- package/src/utils/files/common/scripts/src/infra-deploy.ts.template +0 -2
- package/src/utils/files/common/scripts/src/infra-destroy.ts.template +0 -2
- package/src/utils/files/terraform/scripts/reset-runtime-config.ts.template +0 -25
- /package/src/py/agent/files/{common → strands/common}/__init__.py.template +0 -0
- /package/src/smithy/project/files/{src → service/src}/main.smithy.template +0 -0
- /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
- /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
- /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
IntegrationBuilder,
|
|
33
33
|
RestApiIntegration,
|
|
34
34
|
} from '../../core/api/utils.js';
|
|
35
|
+
import { findCloudFrontDomainNames } from '../../core/cloudfront.js';
|
|
35
36
|
import { AddCorsPreflightAspect, RestApi } from '../../core/api/rest-api.js';
|
|
36
37
|
import {
|
|
37
38
|
OPERATION_DETAILS,
|
|
@@ -86,7 +87,7 @@ export class TestApi<
|
|
|
86
87
|
return IntegrationBuilder.rest({
|
|
87
88
|
pattern: 'isolated',
|
|
88
89
|
operations: OPERATION_DETAILS,
|
|
89
|
-
defaultIntegrationOptions:
|
|
90
|
+
defaultIntegrationOptions: {
|
|
90
91
|
runtime: Runtime.NODEJS_LATEST,
|
|
91
92
|
handler: 'index.handler',
|
|
92
93
|
code: Code.fromAsset(
|
|
@@ -99,7 +100,7 @@ export class TestApi<
|
|
|
99
100
|
),
|
|
100
101
|
timeout: Duration.seconds(30),
|
|
101
102
|
tracing: Tracing.ACTIVE,
|
|
102
|
-
},
|
|
103
|
+
} as FunctionProps,
|
|
103
104
|
buildDefaultIntegration: (op, props: FunctionProps) => {
|
|
104
105
|
const handler = new Function(scope, \`TestApi\${op}Handler\`, props);
|
|
105
106
|
handler.addEnvironment(
|
|
@@ -127,6 +128,9 @@ export class TestApi<
|
|
|
127
128
|
authorizer: new CognitoUserPoolsAuthorizer(scope, 'TestApiAuthorizer', {
|
|
128
129
|
cognitoUserPools: [props.identity.userPool],
|
|
129
130
|
}),
|
|
131
|
+
// Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
|
|
132
|
+
// and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
|
|
133
|
+
authorizationScopes: ['openid', 'aws.cognito.signin.user.admin'],
|
|
130
134
|
},
|
|
131
135
|
deployOptions: {
|
|
132
136
|
tracingEnabled: true,
|
|
@@ -153,7 +157,9 @@ export class TestApi<
|
|
|
153
157
|
*
|
|
154
158
|
* Configures the provided CloudFront distribution domains or origin strings
|
|
155
159
|
* as the only permitted CORS origins in API Gateway preflight responses and the
|
|
156
|
-
* AWS Lambda integrations.
|
|
160
|
+
* AWS Lambda integrations. Any custom domain names (aliases) configured on a
|
|
161
|
+
* CloudFront distribution are included automatically alongside its default
|
|
162
|
+
* \`*.cloudfront.net\` domain.
|
|
157
163
|
*
|
|
158
164
|
* @param origins - The origin strings, CloudFront distributions, or objects containing a CloudFront distribution to grant CORS from
|
|
159
165
|
*/
|
|
@@ -164,12 +170,14 @@ export class TestApi<
|
|
|
164
170
|
| { cloudFrontDistribution: Distribution }
|
|
165
171
|
)[]
|
|
166
172
|
) {
|
|
167
|
-
const allowedOrigins = origins.
|
|
173
|
+
const allowedOrigins = origins.flatMap((origin) =>
|
|
168
174
|
typeof origin === 'string'
|
|
169
|
-
? origin
|
|
170
|
-
:
|
|
171
|
-
|
|
172
|
-
|
|
175
|
+
? [origin]
|
|
176
|
+
: findCloudFrontDomainNames(
|
|
177
|
+
'cloudFrontDistribution' in origin
|
|
178
|
+
? origin.cloudFrontDistribution
|
|
179
|
+
: origin,
|
|
180
|
+
).map((domain) => \`https://\${domain}\`),
|
|
173
181
|
);
|
|
174
182
|
|
|
175
183
|
this.allowedOrigins = allowedOrigins;
|
|
@@ -218,6 +226,7 @@ import {
|
|
|
218
226
|
IntegrationBuilder,
|
|
219
227
|
RestApiIntegration,
|
|
220
228
|
} from '../../core/api/utils.js';
|
|
229
|
+
import { findCloudFrontDomainNames } from '../../core/cloudfront.js';
|
|
221
230
|
import { AddCorsPreflightAspect, RestApi } from '../../core/api/rest-api.js';
|
|
222
231
|
import {
|
|
223
232
|
OPERATION_DETAILS,
|
|
@@ -266,7 +275,7 @@ export class TestApi<
|
|
|
266
275
|
return IntegrationBuilder.rest({
|
|
267
276
|
pattern: 'isolated',
|
|
268
277
|
operations: OPERATION_DETAILS,
|
|
269
|
-
defaultIntegrationOptions:
|
|
278
|
+
defaultIntegrationOptions: {
|
|
270
279
|
runtime: Runtime.NODEJS_LATEST,
|
|
271
280
|
handler: 'index.handler',
|
|
272
281
|
code: Code.fromAsset(
|
|
@@ -279,7 +288,7 @@ export class TestApi<
|
|
|
279
288
|
),
|
|
280
289
|
timeout: Duration.seconds(30),
|
|
281
290
|
tracing: Tracing.ACTIVE,
|
|
282
|
-
},
|
|
291
|
+
} as FunctionProps,
|
|
283
292
|
buildDefaultIntegration: (op, props: FunctionProps) => {
|
|
284
293
|
const handler = new Function(scope, \`TestApi\${op}Handler\`, props);
|
|
285
294
|
handler.addEnvironment(
|
|
@@ -330,7 +339,9 @@ export class TestApi<
|
|
|
330
339
|
*
|
|
331
340
|
* Configures the provided CloudFront distribution domains or origin strings
|
|
332
341
|
* as the only permitted CORS origins in API Gateway preflight responses and the
|
|
333
|
-
* AWS Lambda integrations.
|
|
342
|
+
* AWS Lambda integrations. Any custom domain names (aliases) configured on a
|
|
343
|
+
* CloudFront distribution are included automatically alongside its default
|
|
344
|
+
* \`*.cloudfront.net\` domain.
|
|
334
345
|
*
|
|
335
346
|
* @param origins - The origin strings, CloudFront distributions, or objects containing a CloudFront distribution to grant CORS from
|
|
336
347
|
*/
|
|
@@ -341,12 +352,14 @@ export class TestApi<
|
|
|
341
352
|
| { cloudFrontDistribution: Distribution }
|
|
342
353
|
)[]
|
|
343
354
|
) {
|
|
344
|
-
const allowedOrigins = origins.
|
|
355
|
+
const allowedOrigins = origins.flatMap((origin) =>
|
|
345
356
|
typeof origin === 'string'
|
|
346
|
-
? origin
|
|
347
|
-
:
|
|
348
|
-
|
|
349
|
-
|
|
357
|
+
? [origin]
|
|
358
|
+
: findCloudFrontDomainNames(
|
|
359
|
+
'cloudFrontDistribution' in origin
|
|
360
|
+
? origin.cloudFrontDistribution
|
|
361
|
+
: origin,
|
|
362
|
+
).map((domain) => \`https://\${domain}\`),
|
|
350
363
|
);
|
|
351
364
|
|
|
352
365
|
this.allowedOrigins = allowedOrigins;
|
|
@@ -400,11 +413,11 @@ terraform {
|
|
|
400
413
|
required_providers {
|
|
401
414
|
aws = {
|
|
402
415
|
source = "hashicorp/aws"
|
|
403
|
-
version = "
|
|
416
|
+
version = "6.60.0"
|
|
404
417
|
}
|
|
405
418
|
random = {
|
|
406
419
|
source = "hashicorp/random"
|
|
407
|
-
version = "
|
|
420
|
+
version = "3.9.0"
|
|
408
421
|
}
|
|
409
422
|
}
|
|
410
423
|
}
|
|
@@ -474,8 +487,6 @@ data "aws_caller_identity" "current" {}
|
|
|
474
487
|
|
|
475
488
|
# Resources
|
|
476
489
|
|
|
477
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
478
|
-
|
|
479
490
|
# REST API Gateway
|
|
480
491
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
481
492
|
name = var.api_name
|
|
@@ -492,10 +503,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
492
503
|
tags = var.tags
|
|
493
504
|
}
|
|
494
505
|
|
|
495
|
-
# Note: Deployment and
|
|
496
|
-
# after all methods and integrations are defined
|
|
497
|
-
|
|
498
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
506
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
507
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
499
508
|
|
|
500
509
|
# Gateway Response for CORS (4XX errors)
|
|
501
510
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -653,9 +662,7 @@ output "waf_web_acl_arn" {
|
|
|
653
662
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
654
663
|
}
|
|
655
664
|
|
|
656
|
-
# Note: Stage and
|
|
657
|
-
|
|
658
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement"
|
|
665
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module"
|
|
659
666
|
`;
|
|
660
667
|
|
|
661
668
|
exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform provider and None auth > none-auth-terraform.tf 1`] = `
|
|
@@ -665,7 +672,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
|
|
|
665
672
|
required_providers {
|
|
666
673
|
aws = {
|
|
667
674
|
source = "hashicorp/aws"
|
|
668
|
-
version = "
|
|
675
|
+
version = "6.60.0"
|
|
669
676
|
}
|
|
670
677
|
}
|
|
671
678
|
}
|
|
@@ -687,11 +694,47 @@ variable "additional_iam_policy_statements" {
|
|
|
687
694
|
default = []
|
|
688
695
|
}
|
|
689
696
|
|
|
697
|
+
variable "appconfig_application_id" {
|
|
698
|
+
description = "ID of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_id\`). When set, the Lambda functions receive \`RUNTIME_CONFIG_APP_ID\` and read access to the application."
|
|
699
|
+
type = string
|
|
700
|
+
default = null
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
variable "appconfig_application_arn" {
|
|
704
|
+
description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the Lambda functions."
|
|
705
|
+
type = string
|
|
706
|
+
default = null
|
|
707
|
+
}
|
|
708
|
+
|
|
690
709
|
variable "asset_bucket_name" {
|
|
691
710
|
description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
|
|
692
711
|
type = string
|
|
693
712
|
}
|
|
694
713
|
|
|
714
|
+
# VPC Configuration (optional)
|
|
715
|
+
variable "enable_vpc" {
|
|
716
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
717
|
+
type = bool
|
|
718
|
+
default = false
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
variable "vpc_id" {
|
|
722
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
723
|
+
type = string
|
|
724
|
+
default = null
|
|
725
|
+
|
|
726
|
+
validation {
|
|
727
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
728
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
variable "subnet_ids" {
|
|
733
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
734
|
+
type = list(string)
|
|
735
|
+
default = null
|
|
736
|
+
}
|
|
737
|
+
|
|
695
738
|
# CORS Configuration (passed to core module)
|
|
696
739
|
|
|
697
740
|
variable "cors_allow_headers" {
|
|
@@ -754,6 +797,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
754
797
|
}
|
|
755
798
|
|
|
756
799
|
# Use the core REST API module
|
|
800
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
801
|
+
module "account" {
|
|
802
|
+
source = "../../../core/api/api-gateway-account"
|
|
803
|
+
}
|
|
804
|
+
|
|
757
805
|
module "rest_api" {
|
|
758
806
|
source = "../../../core/api/rest-api"
|
|
759
807
|
|
|
@@ -783,9 +831,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
783
831
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
784
832
|
}
|
|
785
833
|
|
|
834
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
835
|
+
resource "aws_security_group" "api_lambda" {
|
|
836
|
+
count = var.enable_vpc ? 1 : 0
|
|
837
|
+
|
|
838
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
839
|
+
name_prefix = "test-api-lambda-"
|
|
840
|
+
description = "Security group for the TestApi API Lambda function"
|
|
841
|
+
vpc_id = var.vpc_id
|
|
842
|
+
tags = var.tags
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
846
|
+
count = var.enable_vpc ? 1 : 0
|
|
847
|
+
|
|
848
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
849
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
850
|
+
from_port = 443
|
|
851
|
+
to_port = 443
|
|
852
|
+
ip_protocol = "tcp"
|
|
853
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
854
|
+
}
|
|
855
|
+
|
|
786
856
|
# Lambda function
|
|
787
857
|
resource "aws_lambda_function" "api_lambda" {
|
|
788
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
858
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
789
859
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
790
860
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
791
861
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -807,13 +877,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
807
877
|
mode = "Active"
|
|
808
878
|
}
|
|
809
879
|
|
|
880
|
+
dynamic "vpc_config" {
|
|
881
|
+
for_each = var.enable_vpc ? [1] : []
|
|
882
|
+
content {
|
|
883
|
+
subnet_ids = var.subnet_ids
|
|
884
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
|
|
810
888
|
|
|
811
889
|
environment {
|
|
812
890
|
variables = merge({
|
|
813
|
-
}, var.
|
|
891
|
+
}, var.appconfig_application_id != null ? {
|
|
892
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
893
|
+
} : {}, var.env)
|
|
814
894
|
}
|
|
815
895
|
|
|
816
896
|
tags = var.tags
|
|
897
|
+
|
|
898
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
817
899
|
}
|
|
818
900
|
|
|
819
901
|
# IAM role for Lambda execution
|
|
@@ -848,18 +930,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
848
930
|
role = aws_iam_role.lambda_execution_role.name
|
|
849
931
|
}
|
|
850
932
|
|
|
933
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
934
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
935
|
+
count = var.enable_vpc ? 1 : 0
|
|
936
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
937
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
938
|
+
}
|
|
939
|
+
|
|
851
940
|
# Additional IAM policies for Lambda (if provided)
|
|
852
941
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
853
|
-
count = length(
|
|
942
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
854
943
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
855
944
|
role = aws_iam_role.lambda_execution_role.id
|
|
856
945
|
|
|
857
946
|
policy = jsonencode({
|
|
858
947
|
Version = "2012-10-17"
|
|
859
|
-
Statement =
|
|
948
|
+
Statement = local.lambda_policy_statements
|
|
860
949
|
})
|
|
861
950
|
}
|
|
862
951
|
|
|
952
|
+
locals {
|
|
953
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
954
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
955
|
+
{
|
|
956
|
+
Effect = "Allow"
|
|
957
|
+
Action = [
|
|
958
|
+
"appconfig:StartConfigurationSession",
|
|
959
|
+
"appconfig:GetLatestConfiguration"
|
|
960
|
+
]
|
|
961
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
962
|
+
}
|
|
963
|
+
] : [], var.additional_iam_policy_statements)
|
|
964
|
+
}
|
|
965
|
+
|
|
863
966
|
# CloudWatch Log Group for Lambda
|
|
864
967
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
865
968
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -1079,11 +1182,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
1079
1182
|
]
|
|
1080
1183
|
}
|
|
1081
1184
|
|
|
1185
|
+
# KMS key for encrypting access logs at rest
|
|
1186
|
+
resource "aws_kms_key" "access_logs" {
|
|
1187
|
+
description = "TestApi API access log encryption"
|
|
1188
|
+
deletion_window_in_days = 7
|
|
1189
|
+
enable_key_rotation = true
|
|
1190
|
+
|
|
1191
|
+
policy = jsonencode({
|
|
1192
|
+
Version = "2012-10-17"
|
|
1193
|
+
Statement = [
|
|
1194
|
+
{
|
|
1195
|
+
Sid = "Enable IAM User Permissions"
|
|
1196
|
+
Effect = "Allow"
|
|
1197
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
1198
|
+
Action = "kms:*"
|
|
1199
|
+
Resource = "*"
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
Sid = "Allow CloudWatch Logs"
|
|
1203
|
+
Effect = "Allow"
|
|
1204
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
1205
|
+
Action = [
|
|
1206
|
+
"kms:Encrypt",
|
|
1207
|
+
"kms:Decrypt",
|
|
1208
|
+
"kms:ReEncrypt*",
|
|
1209
|
+
"kms:GenerateDataKey*",
|
|
1210
|
+
"kms:DescribeKey"
|
|
1211
|
+
]
|
|
1212
|
+
Resource = "*"
|
|
1213
|
+
Condition = {
|
|
1214
|
+
ArnEquals = {
|
|
1215
|
+
"kms:EncryptionContext:aws:logs:arn" = "arn:aws:logs:\${data.aws_region.current.region}:\${data.aws_caller_identity.current.account_id}:log-group:/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
]
|
|
1220
|
+
})
|
|
1221
|
+
|
|
1222
|
+
tags = var.tags
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
resource "aws_kms_alias" "access_logs" {
|
|
1226
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
1227
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
# Access logs for the API Gateway stage
|
|
1231
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
1232
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
1233
|
+
retention_in_days = 365
|
|
1234
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
1235
|
+
tags = var.tags
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1082
1238
|
# API Gateway stage
|
|
1083
1239
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
1084
1240
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
1085
|
-
#checkov:skip=
|
|
1086
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
1241
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
1087
1242
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
1088
1243
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
1089
1244
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -1091,9 +1246,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
1091
1246
|
stage_name = "prod"
|
|
1092
1247
|
xray_tracing_enabled = true
|
|
1093
1248
|
|
|
1249
|
+
access_log_settings {
|
|
1250
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
1251
|
+
format = jsonencode({
|
|
1252
|
+
requestId = "$context.requestId"
|
|
1253
|
+
ip = "$context.identity.sourceIp"
|
|
1254
|
+
caller = "$context.identity.caller"
|
|
1255
|
+
user = "$context.identity.user"
|
|
1256
|
+
requestTime = "$context.requestTime"
|
|
1257
|
+
httpMethod = "$context.httpMethod"
|
|
1258
|
+
resourcePath = "$context.resourcePath"
|
|
1259
|
+
status = "$context.status"
|
|
1260
|
+
protocol = "$context.protocol"
|
|
1261
|
+
responseLength = "$context.responseLength"
|
|
1262
|
+
})
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1094
1265
|
tags = var.tags
|
|
1095
1266
|
|
|
1096
|
-
|
|
1267
|
+
# Ensure the account-level role is configured before the stage is created
|
|
1268
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
# Default throttling applied to all resource paths and methods
|
|
1272
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
1273
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
1274
|
+
rest_api_id = module.rest_api.api_id
|
|
1275
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
1276
|
+
method_path = "*/*"
|
|
1277
|
+
|
|
1278
|
+
settings {
|
|
1279
|
+
throttling_rate_limit = 10000
|
|
1280
|
+
throttling_burst_limit = 5000
|
|
1281
|
+
}
|
|
1097
1282
|
}
|
|
1098
1283
|
|
|
1099
1284
|
# API Gateway Resource Policy
|
|
@@ -1232,6 +1417,11 @@ output "lambda_execution_role_name" {
|
|
|
1232
1417
|
value = aws_iam_role.lambda_execution_role.name
|
|
1233
1418
|
}
|
|
1234
1419
|
|
|
1420
|
+
output "security_group_id" {
|
|
1421
|
+
description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
|
|
1422
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1235
1425
|
# Integration Outputs
|
|
1236
1426
|
output "integration_id" {
|
|
1237
1427
|
description = "ID of the Lambda integration"
|
|
@@ -1296,6 +1486,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1296
1486
|
"apiName": "test-api",
|
|
1297
1487
|
"auth": "custom",
|
|
1298
1488
|
"modelProject": "@proj/test-api-model",
|
|
1489
|
+
"iac": "cdk",
|
|
1299
1490
|
"ports": [3001]
|
|
1300
1491
|
},
|
|
1301
1492
|
"targets": {
|
|
@@ -1304,17 +1495,34 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1304
1495
|
},
|
|
1305
1496
|
"compile": {
|
|
1306
1497
|
"executor": "nx:run-commands",
|
|
1498
|
+
"dependsOn": ["copy-ssdk"],
|
|
1307
1499
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/tsc"],
|
|
1308
1500
|
"options": {
|
|
1309
1501
|
"command": "tsc --build tsconfig.lib.json",
|
|
1310
1502
|
"cwd": "{projectRoot}"
|
|
1503
|
+
}
|
|
1504
|
+
},
|
|
1505
|
+
"format": {
|
|
1506
|
+
"executor": "nx:run-commands",
|
|
1507
|
+
"cache": true,
|
|
1508
|
+
"inputs": ["biome"],
|
|
1509
|
+
"options": {
|
|
1510
|
+
"command": "biome format {projectRoot}"
|
|
1311
1511
|
},
|
|
1312
|
-
"
|
|
1512
|
+
"configurations": {
|
|
1513
|
+
"fix": {
|
|
1514
|
+
"command": "biome format --write {projectRoot}"
|
|
1515
|
+
},
|
|
1516
|
+
"skip-lint": {
|
|
1517
|
+
"command": "node -e \\"\\""
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1313
1520
|
},
|
|
1314
1521
|
"lint": {
|
|
1315
1522
|
"executor": "nx:run-commands",
|
|
1316
1523
|
"cache": true,
|
|
1317
1524
|
"inputs": ["biome"],
|
|
1525
|
+
"dependsOn": ["format"],
|
|
1318
1526
|
"options": {
|
|
1319
1527
|
"command": "biome lint {projectRoot}"
|
|
1320
1528
|
},
|
|
@@ -1327,22 +1535,15 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1327
1535
|
}
|
|
1328
1536
|
}
|
|
1329
1537
|
},
|
|
1330
|
-
"test": {
|
|
1331
|
-
"executor": "@nx/vitest:test",
|
|
1332
|
-
"outputs": ["{options.reportsDirectory}"],
|
|
1333
|
-
"options": {
|
|
1334
|
-
"reportsDirectory": "{workspaceRoot}/coverage/{projectRoot}"
|
|
1335
|
-
}
|
|
1336
|
-
},
|
|
1337
1538
|
"bundle": {
|
|
1539
|
+
"executor": "nx:run-commands",
|
|
1540
|
+
"dependsOn": ["compile"],
|
|
1338
1541
|
"cache": true,
|
|
1339
1542
|
"outputs": ["{workspaceRoot}/dist/{projectRoot}/bundle"],
|
|
1340
|
-
"executor": "nx:run-commands",
|
|
1341
1543
|
"options": {
|
|
1342
1544
|
"command": "rolldown -c rolldown.config.ts",
|
|
1343
1545
|
"cwd": "{projectRoot}"
|
|
1344
|
-
}
|
|
1345
|
-
"dependsOn": ["compile"]
|
|
1546
|
+
}
|
|
1346
1547
|
},
|
|
1347
1548
|
"copy-ssdk": {
|
|
1348
1549
|
"cache": true,
|
|
@@ -1365,31 +1566,31 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1365
1566
|
},
|
|
1366
1567
|
"watch-copy-ssdk": {
|
|
1367
1568
|
"executor": "nx:run-commands",
|
|
1569
|
+
"continuous": true,
|
|
1368
1570
|
"options": {
|
|
1369
|
-
"command": "nx watch --projects=@proj/test-api-model --
|
|
1370
|
-
}
|
|
1371
|
-
"continuous": true
|
|
1571
|
+
"command": "nx watch --projects=@proj/test-api-model --includeDependencies -- nx run @proj/test-api:copy-ssdk"
|
|
1572
|
+
}
|
|
1372
1573
|
},
|
|
1373
1574
|
"serve": {
|
|
1374
1575
|
"executor": "nx:run-commands",
|
|
1576
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1577
|
+
"continuous": true,
|
|
1375
1578
|
"options": {
|
|
1376
1579
|
"command": "tsx --watch src/local-server.ts",
|
|
1377
1580
|
"cwd": "{projectRoot}"
|
|
1378
|
-
}
|
|
1379
|
-
"continuous": true,
|
|
1380
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1581
|
+
}
|
|
1381
1582
|
},
|
|
1382
|
-
"
|
|
1583
|
+
"dev": {
|
|
1383
1584
|
"executor": "nx:run-commands",
|
|
1585
|
+
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"],
|
|
1586
|
+
"continuous": true,
|
|
1384
1587
|
"options": {
|
|
1385
1588
|
"command": "tsx --watch src/local-server.ts",
|
|
1386
1589
|
"cwd": "{projectRoot}",
|
|
1387
1590
|
"env": {
|
|
1388
|
-
"
|
|
1591
|
+
"LOCAL_DEV": "true"
|
|
1389
1592
|
}
|
|
1390
|
-
}
|
|
1391
|
-
"continuous": true,
|
|
1392
|
-
"dependsOn": ["copy-ssdk", "watch-copy-ssdk"]
|
|
1593
|
+
}
|
|
1393
1594
|
}
|
|
1394
1595
|
}
|
|
1395
1596
|
}
|
|
@@ -1427,7 +1628,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1427
1628
|
"import {
|
|
1428
1629
|
convertEvent,
|
|
1429
1630
|
convertVersion1Response,
|
|
1430
|
-
} from '@
|
|
1631
|
+
} from '@smithy/server-apigateway';
|
|
1431
1632
|
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
1432
1633
|
import middy from '@middy/core';
|
|
1433
1634
|
import { Tracer } from '@aws-lambda-powertools/tracer';
|
|
@@ -1492,7 +1693,7 @@ export const handler = middy<APIGatewayProxyEvent, APIGatewayProxyResult>()
|
|
|
1492
1693
|
|
|
1493
1694
|
exports[`tsSmithyApiGenerator > should generate smithy ts api with default options > local-server.ts 1`] = `
|
|
1494
1695
|
"import { IncomingMessage, ServerResponse, createServer } from 'http';
|
|
1495
|
-
import { convertRequest, writeResponse } from '@
|
|
1696
|
+
import { convertRequest, writeResponse } from '@smithy/server-node';
|
|
1496
1697
|
import { Logger } from '@aws-lambda-powertools/logger';
|
|
1497
1698
|
import { Metrics } from '@aws-lambda-powertools/metrics';
|
|
1498
1699
|
import { Tracer } from '@aws-lambda-powertools/tracer';
|
|
@@ -1543,22 +1744,43 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
1543
1744
|
"projectType": "library",
|
|
1544
1745
|
"metadata": {
|
|
1545
1746
|
"generator": "smithy#project",
|
|
1747
|
+
"smithyType": "service",
|
|
1748
|
+
"namespace": "proj",
|
|
1546
1749
|
"apiName": "test-api-model",
|
|
1547
1750
|
"backendProject": "@proj/test-api"
|
|
1548
1751
|
},
|
|
1549
1752
|
"targets": {
|
|
1550
1753
|
"build": {
|
|
1551
|
-
"dependsOn": ["compile"]
|
|
1754
|
+
"dependsOn": ["compile", "generate-ssdk"]
|
|
1552
1755
|
},
|
|
1553
1756
|
"compile": {
|
|
1554
1757
|
"cache": true,
|
|
1555
|
-
"outputs": [
|
|
1758
|
+
"outputs": [
|
|
1759
|
+
"{workspaceRoot}/dist/{projectRoot}/smithy",
|
|
1760
|
+
"{workspaceRoot}/dist/{projectRoot}/build/openapi"
|
|
1761
|
+
],
|
|
1556
1762
|
"executor": "nx:run-commands",
|
|
1557
1763
|
"options": {
|
|
1558
1764
|
"commands": [
|
|
1559
1765
|
"rimraf dist/{projectRoot}/build",
|
|
1766
|
+
"rimraf dist/{projectRoot}/smithy",
|
|
1560
1767
|
"make-dir dist/{projectRoot}/build",
|
|
1561
|
-
"
|
|
1768
|
+
"npx -y mise@2026.8.3 exec smithy@1.72.1 -- smithy build -c {projectRoot}/smithy-build.json --output dist/{projectRoot}/smithy",
|
|
1769
|
+
"cpy \\"dist/{projectRoot}/smithy/source/openapi/*.openapi.json\\" dist/{projectRoot}/build/openapi --flat --rename=openapi.json"
|
|
1770
|
+
],
|
|
1771
|
+
"parallel": false,
|
|
1772
|
+
"cwd": "{workspaceRoot}"
|
|
1773
|
+
}
|
|
1774
|
+
},
|
|
1775
|
+
"generate-ssdk": {
|
|
1776
|
+
"cache": true,
|
|
1777
|
+
"outputs": ["{workspaceRoot}/dist/{projectRoot}/build/ssdk"],
|
|
1778
|
+
"executor": "nx:run-commands",
|
|
1779
|
+
"dependsOn": ["compile"],
|
|
1780
|
+
"options": {
|
|
1781
|
+
"commands": [
|
|
1782
|
+
"npm install --prefix dist/{projectRoot}/smithy/source/typescript-ssdk-codegen --include=dev --ignore-scripts --no-audit --no-fund",
|
|
1783
|
+
"rolldown -c {projectRoot}/ssdk.rolldown.config.mjs"
|
|
1562
1784
|
],
|
|
1563
1785
|
"parallel": false,
|
|
1564
1786
|
"cwd": "{workspaceRoot}"
|
|
@@ -1585,7 +1807,7 @@ exports[`tsSmithyApiGenerator > should handle kebab-case API names correctly > k
|
|
|
1585
1807
|
"import {
|
|
1586
1808
|
convertEvent,
|
|
1587
1809
|
convertVersion1Response,
|
|
1588
|
-
} from '@
|
|
1810
|
+
} from '@smithy/server-apigateway';
|
|
1589
1811
|
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
|
|
1590
1812
|
import middy from '@middy/core';
|
|
1591
1813
|
import { Tracer } from '@aws-lambda-powertools/tracer';
|
|
@@ -1682,11 +1904,11 @@ terraform {
|
|
|
1682
1904
|
required_providers {
|
|
1683
1905
|
aws = {
|
|
1684
1906
|
source = "hashicorp/aws"
|
|
1685
|
-
version = "
|
|
1907
|
+
version = "6.60.0"
|
|
1686
1908
|
}
|
|
1687
1909
|
random = {
|
|
1688
1910
|
source = "hashicorp/random"
|
|
1689
|
-
version = "
|
|
1911
|
+
version = "3.9.0"
|
|
1690
1912
|
}
|
|
1691
1913
|
}
|
|
1692
1914
|
}
|
|
@@ -1756,8 +1978,6 @@ data "aws_caller_identity" "current" {}
|
|
|
1756
1978
|
|
|
1757
1979
|
# Resources
|
|
1758
1980
|
|
|
1759
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
1760
|
-
|
|
1761
1981
|
# REST API Gateway
|
|
1762
1982
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
1763
1983
|
name = var.api_name
|
|
@@ -1774,10 +1994,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
1774
1994
|
tags = var.tags
|
|
1775
1995
|
}
|
|
1776
1996
|
|
|
1777
|
-
# Note: Deployment and
|
|
1778
|
-
# after all methods and integrations are defined
|
|
1779
|
-
|
|
1780
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
1997
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
1998
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
1781
1999
|
|
|
1782
2000
|
# Gateway Response for CORS (4XX errors)
|
|
1783
2001
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -1935,16 +2153,14 @@ output "waf_web_acl_arn" {
|
|
|
1935
2153
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
1936
2154
|
}
|
|
1937
2155
|
|
|
1938
|
-
# Note: Stage and
|
|
1939
|
-
|
|
1940
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
2156
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
1941
2157
|
"test-api.tf": "terraform {
|
|
1942
2158
|
required_version = ">= 1.0"
|
|
1943
2159
|
|
|
1944
2160
|
required_providers {
|
|
1945
2161
|
aws = {
|
|
1946
2162
|
source = "hashicorp/aws"
|
|
1947
|
-
version = "
|
|
2163
|
+
version = "6.60.0"
|
|
1948
2164
|
}
|
|
1949
2165
|
}
|
|
1950
2166
|
}
|
|
@@ -1976,11 +2192,47 @@ variable "additional_iam_policy_statements" {
|
|
|
1976
2192
|
default = []
|
|
1977
2193
|
}
|
|
1978
2194
|
|
|
2195
|
+
variable "appconfig_application_id" {
|
|
2196
|
+
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."
|
|
2197
|
+
type = string
|
|
2198
|
+
default = null
|
|
2199
|
+
}
|
|
2200
|
+
|
|
2201
|
+
variable "appconfig_application_arn" {
|
|
2202
|
+
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."
|
|
2203
|
+
type = string
|
|
2204
|
+
default = null
|
|
2205
|
+
}
|
|
2206
|
+
|
|
1979
2207
|
variable "asset_bucket_name" {
|
|
1980
2208
|
description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
|
|
1981
2209
|
type = string
|
|
1982
2210
|
}
|
|
1983
2211
|
|
|
2212
|
+
# VPC Configuration (optional)
|
|
2213
|
+
variable "enable_vpc" {
|
|
2214
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
2215
|
+
type = bool
|
|
2216
|
+
default = false
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
variable "vpc_id" {
|
|
2220
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
2221
|
+
type = string
|
|
2222
|
+
default = null
|
|
2223
|
+
|
|
2224
|
+
validation {
|
|
2225
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
2226
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
variable "subnet_ids" {
|
|
2231
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
2232
|
+
type = list(string)
|
|
2233
|
+
default = null
|
|
2234
|
+
}
|
|
2235
|
+
|
|
1984
2236
|
# CORS Configuration (passed to core module)
|
|
1985
2237
|
|
|
1986
2238
|
variable "cors_allow_headers" {
|
|
@@ -2043,6 +2295,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2043
2295
|
}
|
|
2044
2296
|
|
|
2045
2297
|
# Use the core REST API module
|
|
2298
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
2299
|
+
module "account" {
|
|
2300
|
+
source = "../../../core/api/api-gateway-account"
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2046
2303
|
module "rest_api" {
|
|
2047
2304
|
source = "../../../core/api/rest-api"
|
|
2048
2305
|
|
|
@@ -2072,9 +2329,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
2072
2329
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
2073
2330
|
}
|
|
2074
2331
|
|
|
2332
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
2333
|
+
resource "aws_security_group" "api_lambda" {
|
|
2334
|
+
count = var.enable_vpc ? 1 : 0
|
|
2335
|
+
|
|
2336
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
2337
|
+
name_prefix = "test-api-lambda-"
|
|
2338
|
+
description = "Security group for the TestApi API Lambda function"
|
|
2339
|
+
vpc_id = var.vpc_id
|
|
2340
|
+
tags = var.tags
|
|
2341
|
+
}
|
|
2342
|
+
|
|
2343
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
2344
|
+
count = var.enable_vpc ? 1 : 0
|
|
2345
|
+
|
|
2346
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
2347
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
2348
|
+
from_port = 443
|
|
2349
|
+
to_port = 443
|
|
2350
|
+
ip_protocol = "tcp"
|
|
2351
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
2352
|
+
}
|
|
2353
|
+
|
|
2075
2354
|
# Lambda function
|
|
2076
2355
|
resource "aws_lambda_function" "api_lambda" {
|
|
2077
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
2356
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
2078
2357
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
2079
2358
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
2080
2359
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -2096,13 +2375,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2096
2375
|
mode = "Active"
|
|
2097
2376
|
}
|
|
2098
2377
|
|
|
2378
|
+
dynamic "vpc_config" {
|
|
2379
|
+
for_each = var.enable_vpc ? [1] : []
|
|
2380
|
+
content {
|
|
2381
|
+
subnet_ids = var.subnet_ids
|
|
2382
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
2383
|
+
}
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2099
2386
|
|
|
2100
2387
|
environment {
|
|
2101
2388
|
variables = merge({
|
|
2102
|
-
}, var.
|
|
2389
|
+
}, var.appconfig_application_id != null ? {
|
|
2390
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
2391
|
+
} : {}, var.env)
|
|
2103
2392
|
}
|
|
2104
2393
|
|
|
2105
2394
|
tags = var.tags
|
|
2395
|
+
|
|
2396
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
2106
2397
|
}
|
|
2107
2398
|
|
|
2108
2399
|
# IAM role for Lambda execution
|
|
@@ -2137,18 +2428,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
2137
2428
|
role = aws_iam_role.lambda_execution_role.name
|
|
2138
2429
|
}
|
|
2139
2430
|
|
|
2431
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
2432
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
2433
|
+
count = var.enable_vpc ? 1 : 0
|
|
2434
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
2435
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2140
2438
|
# Additional IAM policies for Lambda (if provided)
|
|
2141
2439
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
2142
|
-
count = length(
|
|
2440
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
2143
2441
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
2144
2442
|
role = aws_iam_role.lambda_execution_role.id
|
|
2145
2443
|
|
|
2146
2444
|
policy = jsonencode({
|
|
2147
2445
|
Version = "2012-10-17"
|
|
2148
|
-
Statement =
|
|
2446
|
+
Statement = local.lambda_policy_statements
|
|
2149
2447
|
})
|
|
2150
2448
|
}
|
|
2151
2449
|
|
|
2450
|
+
locals {
|
|
2451
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
2452
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
2453
|
+
{
|
|
2454
|
+
Effect = "Allow"
|
|
2455
|
+
Action = [
|
|
2456
|
+
"appconfig:StartConfigurationSession",
|
|
2457
|
+
"appconfig:GetLatestConfiguration"
|
|
2458
|
+
]
|
|
2459
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
2460
|
+
}
|
|
2461
|
+
] : [], var.additional_iam_policy_statements)
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2152
2464
|
# CloudWatch Log Group for Lambda
|
|
2153
2465
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
2154
2466
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -2197,6 +2509,9 @@ resource "aws_api_gateway_method" "proxy_method" {
|
|
|
2197
2509
|
|
|
2198
2510
|
authorization = "COGNITO_USER_POOLS"
|
|
2199
2511
|
authorizer_id = aws_api_gateway_authorizer.cognito_authorizer.id
|
|
2512
|
+
# Accept access tokens from both sign-in flows: 'openid' (Cognito hosted UI)
|
|
2513
|
+
# and 'aws.cognito.signin.user.admin' (Cognito admin/SRP auth APIs).
|
|
2514
|
+
authorization_scopes = ["openid", "aws.cognito.signin.user.admin"]
|
|
2200
2515
|
|
|
2201
2516
|
request_parameters = {
|
|
2202
2517
|
"method.request.path.proxy" = true
|
|
@@ -2283,11 +2598,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
2283
2598
|
]
|
|
2284
2599
|
}
|
|
2285
2600
|
|
|
2601
|
+
# KMS key for encrypting access logs at rest
|
|
2602
|
+
resource "aws_kms_key" "access_logs" {
|
|
2603
|
+
description = "TestApi API access log encryption"
|
|
2604
|
+
deletion_window_in_days = 7
|
|
2605
|
+
enable_key_rotation = true
|
|
2606
|
+
|
|
2607
|
+
policy = jsonencode({
|
|
2608
|
+
Version = "2012-10-17"
|
|
2609
|
+
Statement = [
|
|
2610
|
+
{
|
|
2611
|
+
Sid = "Enable IAM User Permissions"
|
|
2612
|
+
Effect = "Allow"
|
|
2613
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
2614
|
+
Action = "kms:*"
|
|
2615
|
+
Resource = "*"
|
|
2616
|
+
},
|
|
2617
|
+
{
|
|
2618
|
+
Sid = "Allow CloudWatch Logs"
|
|
2619
|
+
Effect = "Allow"
|
|
2620
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
2621
|
+
Action = [
|
|
2622
|
+
"kms:Encrypt",
|
|
2623
|
+
"kms:Decrypt",
|
|
2624
|
+
"kms:ReEncrypt*",
|
|
2625
|
+
"kms:GenerateDataKey*",
|
|
2626
|
+
"kms:DescribeKey"
|
|
2627
|
+
]
|
|
2628
|
+
Resource = "*"
|
|
2629
|
+
Condition = {
|
|
2630
|
+
ArnEquals = {
|
|
2631
|
+
"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"
|
|
2632
|
+
}
|
|
2633
|
+
}
|
|
2634
|
+
}
|
|
2635
|
+
]
|
|
2636
|
+
})
|
|
2637
|
+
|
|
2638
|
+
tags = var.tags
|
|
2639
|
+
}
|
|
2640
|
+
|
|
2641
|
+
resource "aws_kms_alias" "access_logs" {
|
|
2642
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
2643
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
2644
|
+
}
|
|
2645
|
+
|
|
2646
|
+
# Access logs for the API Gateway stage
|
|
2647
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
2648
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
2649
|
+
retention_in_days = 365
|
|
2650
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
2651
|
+
tags = var.tags
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2286
2654
|
# API Gateway stage
|
|
2287
2655
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
2288
2656
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
2289
|
-
#checkov:skip=
|
|
2290
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
2657
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
2291
2658
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
2292
2659
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
2293
2660
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -2295,9 +2662,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
2295
2662
|
stage_name = "prod"
|
|
2296
2663
|
xray_tracing_enabled = true
|
|
2297
2664
|
|
|
2665
|
+
access_log_settings {
|
|
2666
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
2667
|
+
format = jsonencode({
|
|
2668
|
+
requestId = "$context.requestId"
|
|
2669
|
+
ip = "$context.identity.sourceIp"
|
|
2670
|
+
caller = "$context.identity.caller"
|
|
2671
|
+
user = "$context.identity.user"
|
|
2672
|
+
requestTime = "$context.requestTime"
|
|
2673
|
+
httpMethod = "$context.httpMethod"
|
|
2674
|
+
resourcePath = "$context.resourcePath"
|
|
2675
|
+
status = "$context.status"
|
|
2676
|
+
protocol = "$context.protocol"
|
|
2677
|
+
responseLength = "$context.responseLength"
|
|
2678
|
+
})
|
|
2679
|
+
}
|
|
2680
|
+
|
|
2298
2681
|
tags = var.tags
|
|
2299
2682
|
|
|
2300
|
-
|
|
2683
|
+
# Ensure the account-level role is configured before the stage is created
|
|
2684
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2687
|
+
# Default throttling applied to all resource paths and methods
|
|
2688
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
2689
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
2690
|
+
rest_api_id = module.rest_api.api_id
|
|
2691
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
2692
|
+
method_path = "*/*"
|
|
2693
|
+
|
|
2694
|
+
settings {
|
|
2695
|
+
throttling_rate_limit = 10000
|
|
2696
|
+
throttling_burst_limit = 5000
|
|
2697
|
+
}
|
|
2301
2698
|
}
|
|
2302
2699
|
|
|
2303
2700
|
# API Gateway Resource Policy
|
|
@@ -2436,6 +2833,11 @@ output "lambda_execution_role_name" {
|
|
|
2436
2833
|
value = aws_iam_role.lambda_execution_role.name
|
|
2437
2834
|
}
|
|
2438
2835
|
|
|
2836
|
+
output "security_group_id" {
|
|
2837
|
+
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."
|
|
2838
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
2839
|
+
}
|
|
2840
|
+
|
|
2439
2841
|
# Integration Outputs
|
|
2440
2842
|
output "integration_id" {
|
|
2441
2843
|
description = "ID of the Lambda integration"
|
|
@@ -2477,11 +2879,11 @@ terraform {
|
|
|
2477
2879
|
required_providers {
|
|
2478
2880
|
aws = {
|
|
2479
2881
|
source = "hashicorp/aws"
|
|
2480
|
-
version = "
|
|
2882
|
+
version = "6.60.0"
|
|
2481
2883
|
}
|
|
2482
2884
|
random = {
|
|
2483
2885
|
source = "hashicorp/random"
|
|
2484
|
-
version = "
|
|
2886
|
+
version = "3.9.0"
|
|
2485
2887
|
}
|
|
2486
2888
|
}
|
|
2487
2889
|
}
|
|
@@ -2551,8 +2953,6 @@ data "aws_caller_identity" "current" {}
|
|
|
2551
2953
|
|
|
2552
2954
|
# Resources
|
|
2553
2955
|
|
|
2554
|
-
# Note: CloudWatch logging removed due to account-level CloudWatch Logs role ARN requirement
|
|
2555
|
-
|
|
2556
2956
|
# REST API Gateway
|
|
2557
2957
|
resource "aws_api_gateway_rest_api" "rest_api" {
|
|
2558
2958
|
name = var.api_name
|
|
@@ -2569,10 +2969,8 @@ resource "aws_api_gateway_rest_api" "rest_api" {
|
|
|
2569
2969
|
tags = var.tags
|
|
2570
2970
|
}
|
|
2571
2971
|
|
|
2572
|
-
# Note: Deployment and
|
|
2573
|
-
# after all methods and integrations are defined
|
|
2574
|
-
|
|
2575
|
-
# Note: CloudWatch Log Group removed due to account-level CloudWatch Logs role ARN requirement
|
|
2972
|
+
# Note: Deployment, stage and access logging are created in the consuming module
|
|
2973
|
+
# (e.g., foo-api.tf) after all methods and integrations are defined
|
|
2576
2974
|
|
|
2577
2975
|
# Gateway Response for CORS (4XX errors)
|
|
2578
2976
|
resource "aws_api_gateway_gateway_response" "cors_4xx" {
|
|
@@ -2730,16 +3128,14 @@ output "waf_web_acl_arn" {
|
|
|
2730
3128
|
value = var.enable_waf ? aws_wafv2_web_acl.api_waf[0].arn : null
|
|
2731
3129
|
}
|
|
2732
3130
|
|
|
2733
|
-
# Note: Stage and
|
|
2734
|
-
|
|
2735
|
-
# Note: CloudWatch log group outputs removed due to account-level CloudWatch Logs role ARN requirement",
|
|
3131
|
+
# Note: Stage, deployment and access log outputs are provided by the consuming module",
|
|
2736
3132
|
"test-api.tf": "terraform {
|
|
2737
3133
|
required_version = ">= 1.0"
|
|
2738
3134
|
|
|
2739
3135
|
required_providers {
|
|
2740
3136
|
aws = {
|
|
2741
3137
|
source = "hashicorp/aws"
|
|
2742
|
-
version = "
|
|
3138
|
+
version = "6.60.0"
|
|
2743
3139
|
}
|
|
2744
3140
|
}
|
|
2745
3141
|
}
|
|
@@ -2761,11 +3157,47 @@ variable "additional_iam_policy_statements" {
|
|
|
2761
3157
|
default = []
|
|
2762
3158
|
}
|
|
2763
3159
|
|
|
3160
|
+
variable "appconfig_application_id" {
|
|
3161
|
+
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."
|
|
3162
|
+
type = string
|
|
3163
|
+
default = null
|
|
3164
|
+
}
|
|
3165
|
+
|
|
3166
|
+
variable "appconfig_application_arn" {
|
|
3167
|
+
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."
|
|
3168
|
+
type = string
|
|
3169
|
+
default = null
|
|
3170
|
+
}
|
|
3171
|
+
|
|
2764
3172
|
variable "asset_bucket_name" {
|
|
2765
3173
|
description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
|
|
2766
3174
|
type = string
|
|
2767
3175
|
}
|
|
2768
3176
|
|
|
3177
|
+
# VPC Configuration (optional)
|
|
3178
|
+
variable "enable_vpc" {
|
|
3179
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
3180
|
+
type = bool
|
|
3181
|
+
default = false
|
|
3182
|
+
}
|
|
3183
|
+
|
|
3184
|
+
variable "vpc_id" {
|
|
3185
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3186
|
+
type = string
|
|
3187
|
+
default = null
|
|
3188
|
+
|
|
3189
|
+
validation {
|
|
3190
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
3191
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
3192
|
+
}
|
|
3193
|
+
}
|
|
3194
|
+
|
|
3195
|
+
variable "subnet_ids" {
|
|
3196
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3197
|
+
type = list(string)
|
|
3198
|
+
default = null
|
|
3199
|
+
}
|
|
3200
|
+
|
|
2769
3201
|
# CORS Configuration (passed to core module)
|
|
2770
3202
|
|
|
2771
3203
|
variable "cors_allow_headers" {
|
|
@@ -2828,6 +3260,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
2828
3260
|
}
|
|
2829
3261
|
|
|
2830
3262
|
# Use the core REST API module
|
|
3263
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3264
|
+
module "account" {
|
|
3265
|
+
source = "../../../core/api/api-gateway-account"
|
|
3266
|
+
}
|
|
3267
|
+
|
|
2831
3268
|
module "rest_api" {
|
|
2832
3269
|
source = "../../../core/api/rest-api"
|
|
2833
3270
|
|
|
@@ -2857,9 +3294,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
2857
3294
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
2858
3295
|
}
|
|
2859
3296
|
|
|
3297
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
3298
|
+
resource "aws_security_group" "api_lambda" {
|
|
3299
|
+
count = var.enable_vpc ? 1 : 0
|
|
3300
|
+
|
|
3301
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
3302
|
+
name_prefix = "test-api-lambda-"
|
|
3303
|
+
description = "Security group for the TestApi API Lambda function"
|
|
3304
|
+
vpc_id = var.vpc_id
|
|
3305
|
+
tags = var.tags
|
|
3306
|
+
}
|
|
3307
|
+
|
|
3308
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
3309
|
+
count = var.enable_vpc ? 1 : 0
|
|
3310
|
+
|
|
3311
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
3312
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
3313
|
+
from_port = 443
|
|
3314
|
+
to_port = 443
|
|
3315
|
+
ip_protocol = "tcp"
|
|
3316
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
3317
|
+
}
|
|
3318
|
+
|
|
2860
3319
|
# Lambda function
|
|
2861
3320
|
resource "aws_lambda_function" "api_lambda" {
|
|
2862
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
3321
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
2863
3322
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
2864
3323
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
2865
3324
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -2881,13 +3340,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2881
3340
|
mode = "Active"
|
|
2882
3341
|
}
|
|
2883
3342
|
|
|
3343
|
+
dynamic "vpc_config" {
|
|
3344
|
+
for_each = var.enable_vpc ? [1] : []
|
|
3345
|
+
content {
|
|
3346
|
+
subnet_ids = var.subnet_ids
|
|
3347
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
3348
|
+
}
|
|
3349
|
+
}
|
|
3350
|
+
|
|
2884
3351
|
|
|
2885
3352
|
environment {
|
|
2886
3353
|
variables = merge({
|
|
2887
|
-
}, var.
|
|
3354
|
+
}, var.appconfig_application_id != null ? {
|
|
3355
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
3356
|
+
} : {}, var.env)
|
|
2888
3357
|
}
|
|
2889
3358
|
|
|
2890
3359
|
tags = var.tags
|
|
3360
|
+
|
|
3361
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
2891
3362
|
}
|
|
2892
3363
|
|
|
2893
3364
|
# IAM role for Lambda execution
|
|
@@ -2922,18 +3393,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
2922
3393
|
role = aws_iam_role.lambda_execution_role.name
|
|
2923
3394
|
}
|
|
2924
3395
|
|
|
3396
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
3397
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
3398
|
+
count = var.enable_vpc ? 1 : 0
|
|
3399
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
3400
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
3401
|
+
}
|
|
3402
|
+
|
|
2925
3403
|
# Additional IAM policies for Lambda (if provided)
|
|
2926
3404
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
2927
|
-
count = length(
|
|
3405
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
2928
3406
|
name = "TestApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
2929
3407
|
role = aws_iam_role.lambda_execution_role.id
|
|
2930
3408
|
|
|
2931
3409
|
policy = jsonencode({
|
|
2932
3410
|
Version = "2012-10-17"
|
|
2933
|
-
Statement =
|
|
3411
|
+
Statement = local.lambda_policy_statements
|
|
2934
3412
|
})
|
|
2935
3413
|
}
|
|
2936
3414
|
|
|
3415
|
+
locals {
|
|
3416
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
3417
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
3418
|
+
{
|
|
3419
|
+
Effect = "Allow"
|
|
3420
|
+
Action = [
|
|
3421
|
+
"appconfig:StartConfigurationSession",
|
|
3422
|
+
"appconfig:GetLatestConfiguration"
|
|
3423
|
+
]
|
|
3424
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
3425
|
+
}
|
|
3426
|
+
] : [], var.additional_iam_policy_statements)
|
|
3427
|
+
}
|
|
3428
|
+
|
|
2937
3429
|
# CloudWatch Log Group for Lambda
|
|
2938
3430
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
2939
3431
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -3059,11 +3551,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3059
3551
|
]
|
|
3060
3552
|
}
|
|
3061
3553
|
|
|
3554
|
+
# KMS key for encrypting access logs at rest
|
|
3555
|
+
resource "aws_kms_key" "access_logs" {
|
|
3556
|
+
description = "TestApi API access log encryption"
|
|
3557
|
+
deletion_window_in_days = 7
|
|
3558
|
+
enable_key_rotation = true
|
|
3559
|
+
|
|
3560
|
+
policy = jsonencode({
|
|
3561
|
+
Version = "2012-10-17"
|
|
3562
|
+
Statement = [
|
|
3563
|
+
{
|
|
3564
|
+
Sid = "Enable IAM User Permissions"
|
|
3565
|
+
Effect = "Allow"
|
|
3566
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
3567
|
+
Action = "kms:*"
|
|
3568
|
+
Resource = "*"
|
|
3569
|
+
},
|
|
3570
|
+
{
|
|
3571
|
+
Sid = "Allow CloudWatch Logs"
|
|
3572
|
+
Effect = "Allow"
|
|
3573
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
3574
|
+
Action = [
|
|
3575
|
+
"kms:Encrypt",
|
|
3576
|
+
"kms:Decrypt",
|
|
3577
|
+
"kms:ReEncrypt*",
|
|
3578
|
+
"kms:GenerateDataKey*",
|
|
3579
|
+
"kms:DescribeKey"
|
|
3580
|
+
]
|
|
3581
|
+
Resource = "*"
|
|
3582
|
+
Condition = {
|
|
3583
|
+
ArnEquals = {
|
|
3584
|
+
"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"
|
|
3585
|
+
}
|
|
3586
|
+
}
|
|
3587
|
+
}
|
|
3588
|
+
]
|
|
3589
|
+
})
|
|
3590
|
+
|
|
3591
|
+
tags = var.tags
|
|
3592
|
+
}
|
|
3593
|
+
|
|
3594
|
+
resource "aws_kms_alias" "access_logs" {
|
|
3595
|
+
name = "alias/test-api-\${random_string.suffix.result}-access-logs"
|
|
3596
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
3597
|
+
}
|
|
3598
|
+
|
|
3599
|
+
# Access logs for the API Gateway stage
|
|
3600
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
3601
|
+
name = "/aws/apigateway/test-api-\${random_string.suffix.result}/access"
|
|
3602
|
+
retention_in_days = 365
|
|
3603
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
3604
|
+
tags = var.tags
|
|
3605
|
+
}
|
|
3606
|
+
|
|
3062
3607
|
# API Gateway stage
|
|
3063
3608
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3064
3609
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3065
|
-
#checkov:skip=
|
|
3066
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
3610
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3067
3611
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3068
3612
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
3069
3613
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3071,9 +3615,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3071
3615
|
stage_name = "prod"
|
|
3072
3616
|
xray_tracing_enabled = true
|
|
3073
3617
|
|
|
3618
|
+
access_log_settings {
|
|
3619
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
3620
|
+
format = jsonencode({
|
|
3621
|
+
requestId = "$context.requestId"
|
|
3622
|
+
ip = "$context.identity.sourceIp"
|
|
3623
|
+
caller = "$context.identity.caller"
|
|
3624
|
+
user = "$context.identity.user"
|
|
3625
|
+
requestTime = "$context.requestTime"
|
|
3626
|
+
httpMethod = "$context.httpMethod"
|
|
3627
|
+
resourcePath = "$context.resourcePath"
|
|
3628
|
+
status = "$context.status"
|
|
3629
|
+
protocol = "$context.protocol"
|
|
3630
|
+
responseLength = "$context.responseLength"
|
|
3631
|
+
})
|
|
3632
|
+
}
|
|
3633
|
+
|
|
3074
3634
|
tags = var.tags
|
|
3075
3635
|
|
|
3076
|
-
|
|
3636
|
+
# Ensure the account-level role is configured before the stage is created
|
|
3637
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
3638
|
+
}
|
|
3639
|
+
|
|
3640
|
+
# Default throttling applied to all resource paths and methods
|
|
3641
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
3642
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
3643
|
+
rest_api_id = module.rest_api.api_id
|
|
3644
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
3645
|
+
method_path = "*/*"
|
|
3646
|
+
|
|
3647
|
+
settings {
|
|
3648
|
+
throttling_rate_limit = 10000
|
|
3649
|
+
throttling_burst_limit = 5000
|
|
3650
|
+
}
|
|
3077
3651
|
}
|
|
3078
3652
|
|
|
3079
3653
|
# API Gateway Resource Policy
|
|
@@ -3223,6 +3797,11 @@ output "lambda_execution_role_name" {
|
|
|
3223
3797
|
value = aws_iam_role.lambda_execution_role.name
|
|
3224
3798
|
}
|
|
3225
3799
|
|
|
3800
|
+
output "security_group_id" {
|
|
3801
|
+
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."
|
|
3802
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3226
3805
|
# Integration Outputs
|
|
3227
3806
|
output "integration_id" {
|
|
3228
3807
|
description = "ID of the Lambda integration"
|
|
@@ -3260,7 +3839,7 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
|
|
|
3260
3839
|
required_providers {
|
|
3261
3840
|
aws = {
|
|
3262
3841
|
source = "hashicorp/aws"
|
|
3263
|
-
version = "
|
|
3842
|
+
version = "6.60.0"
|
|
3264
3843
|
}
|
|
3265
3844
|
}
|
|
3266
3845
|
}
|
|
@@ -3282,11 +3861,47 @@ variable "additional_iam_policy_statements" {
|
|
|
3282
3861
|
default = []
|
|
3283
3862
|
}
|
|
3284
3863
|
|
|
3864
|
+
variable "appconfig_application_id" {
|
|
3865
|
+
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."
|
|
3866
|
+
type = string
|
|
3867
|
+
default = null
|
|
3868
|
+
}
|
|
3869
|
+
|
|
3870
|
+
variable "appconfig_application_arn" {
|
|
3871
|
+
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."
|
|
3872
|
+
type = string
|
|
3873
|
+
default = null
|
|
3874
|
+
}
|
|
3875
|
+
|
|
3285
3876
|
variable "asset_bucket_name" {
|
|
3286
3877
|
description = "Name of the shared asset S3 bucket used to stage the Lambda deployment zip. Instantiate the \`core/asset-bucket\` module once per deployment and pass its \`bucket_name\` output here."
|
|
3287
3878
|
type = string
|
|
3288
3879
|
}
|
|
3289
3880
|
|
|
3881
|
+
# VPC Configuration (optional)
|
|
3882
|
+
variable "enable_vpc" {
|
|
3883
|
+
description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
|
|
3884
|
+
type = bool
|
|
3885
|
+
default = false
|
|
3886
|
+
}
|
|
3887
|
+
|
|
3888
|
+
variable "vpc_id" {
|
|
3889
|
+
description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3890
|
+
type = string
|
|
3891
|
+
default = null
|
|
3892
|
+
|
|
3893
|
+
validation {
|
|
3894
|
+
condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
|
|
3895
|
+
error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
|
|
3896
|
+
}
|
|
3897
|
+
}
|
|
3898
|
+
|
|
3899
|
+
variable "subnet_ids" {
|
|
3900
|
+
description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
|
|
3901
|
+
type = list(string)
|
|
3902
|
+
default = null
|
|
3903
|
+
}
|
|
3904
|
+
|
|
3290
3905
|
# CORS Configuration (passed to core module)
|
|
3291
3906
|
|
|
3292
3907
|
variable "cors_allow_headers" {
|
|
@@ -3349,6 +3964,11 @@ resource "aws_s3_object" "lambda_zip" {
|
|
|
3349
3964
|
}
|
|
3350
3965
|
|
|
3351
3966
|
# Use the core REST API module
|
|
3967
|
+
# Account-level CloudWatch role required for REST API access logging
|
|
3968
|
+
module "account" {
|
|
3969
|
+
source = "../../../core/api/api-gateway-account"
|
|
3970
|
+
}
|
|
3971
|
+
|
|
3352
3972
|
module "rest_api" {
|
|
3353
3973
|
source = "../../../core/api/rest-api"
|
|
3354
3974
|
|
|
@@ -3378,9 +3998,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
|
|
|
3378
3998
|
depends_on = [aws_api_gateway_stage.api_stage]
|
|
3379
3999
|
}
|
|
3380
4000
|
|
|
4001
|
+
# Security group for the API Lambda function, used when deployed into a VPC
|
|
4002
|
+
resource "aws_security_group" "api_lambda" {
|
|
4003
|
+
count = var.enable_vpc ? 1 : 0
|
|
4004
|
+
|
|
4005
|
+
#checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
|
|
4006
|
+
name_prefix = "custom-api-lambda-"
|
|
4007
|
+
description = "Security group for the CustomApi API Lambda function"
|
|
4008
|
+
vpc_id = var.vpc_id
|
|
4009
|
+
tags = var.tags
|
|
4010
|
+
}
|
|
4011
|
+
|
|
4012
|
+
resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
|
|
4013
|
+
count = var.enable_vpc ? 1 : 0
|
|
4014
|
+
|
|
4015
|
+
security_group_id = aws_security_group.api_lambda[0].id
|
|
4016
|
+
cidr_ipv4 = "0.0.0.0/0"
|
|
4017
|
+
from_port = 443
|
|
4018
|
+
to_port = 443
|
|
4019
|
+
ip_protocol = "tcp"
|
|
4020
|
+
description = "Allow outbound HTTPS to AWS service endpoints"
|
|
4021
|
+
}
|
|
4022
|
+
|
|
3381
4023
|
# Lambda function
|
|
3382
4024
|
resource "aws_lambda_function" "api_lambda" {
|
|
3383
|
-
#checkov:skip=CKV_AWS_117:Lambda function
|
|
4025
|
+
#checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
|
|
3384
4026
|
#checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
|
|
3385
4027
|
#checkov:skip=CKV_AWS_272:Code signing not required for this use case
|
|
3386
4028
|
#checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
|
|
@@ -3402,13 +4044,25 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
3402
4044
|
mode = "Active"
|
|
3403
4045
|
}
|
|
3404
4046
|
|
|
4047
|
+
dynamic "vpc_config" {
|
|
4048
|
+
for_each = var.enable_vpc ? [1] : []
|
|
4049
|
+
content {
|
|
4050
|
+
subnet_ids = var.subnet_ids
|
|
4051
|
+
security_group_ids = [aws_security_group.api_lambda[0].id]
|
|
4052
|
+
}
|
|
4053
|
+
}
|
|
4054
|
+
|
|
3405
4055
|
|
|
3406
4056
|
environment {
|
|
3407
4057
|
variables = merge({
|
|
3408
|
-
}, var.
|
|
4058
|
+
}, var.appconfig_application_id != null ? {
|
|
4059
|
+
RUNTIME_CONFIG_APP_ID = var.appconfig_application_id
|
|
4060
|
+
} : {}, var.env)
|
|
3409
4061
|
}
|
|
3410
4062
|
|
|
3411
4063
|
tags = var.tags
|
|
4064
|
+
|
|
4065
|
+
depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
|
|
3412
4066
|
}
|
|
3413
4067
|
|
|
3414
4068
|
# IAM role for Lambda execution
|
|
@@ -3443,18 +4097,39 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
|
|
|
3443
4097
|
role = aws_iam_role.lambda_execution_role.name
|
|
3444
4098
|
}
|
|
3445
4099
|
|
|
4100
|
+
# Attach VPC access policy to Lambda role when deployed into a VPC
|
|
4101
|
+
resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
|
|
4102
|
+
count = var.enable_vpc ? 1 : 0
|
|
4103
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
4104
|
+
role = aws_iam_role.lambda_execution_role.name
|
|
4105
|
+
}
|
|
4106
|
+
|
|
3446
4107
|
# Additional IAM policies for Lambda (if provided)
|
|
3447
4108
|
resource "aws_iam_role_policy" "lambda_additional_policies" {
|
|
3448
|
-
count = length(
|
|
4109
|
+
count = length(local.lambda_policy_statements) > 0 ? 1 : 0
|
|
3449
4110
|
name = "CustomApiHandler-additional-policies-\${random_string.suffix.result}"
|
|
3450
4111
|
role = aws_iam_role.lambda_execution_role.id
|
|
3451
4112
|
|
|
3452
4113
|
policy = jsonencode({
|
|
3453
4114
|
Version = "2012-10-17"
|
|
3454
|
-
Statement =
|
|
4115
|
+
Statement = local.lambda_policy_statements
|
|
3455
4116
|
})
|
|
3456
4117
|
}
|
|
3457
4118
|
|
|
4119
|
+
locals {
|
|
4120
|
+
# Grant read access to the runtime-config AppConfig application when wired
|
|
4121
|
+
lambda_policy_statements = concat(var.appconfig_application_arn != null ? [
|
|
4122
|
+
{
|
|
4123
|
+
Effect = "Allow"
|
|
4124
|
+
Action = [
|
|
4125
|
+
"appconfig:StartConfigurationSession",
|
|
4126
|
+
"appconfig:GetLatestConfiguration"
|
|
4127
|
+
]
|
|
4128
|
+
Resource = ["\${var.appconfig_application_arn}/*"]
|
|
4129
|
+
}
|
|
4130
|
+
] : [], var.additional_iam_policy_statements)
|
|
4131
|
+
}
|
|
4132
|
+
|
|
3458
4133
|
# CloudWatch Log Group for Lambda
|
|
3459
4134
|
resource "aws_cloudwatch_log_group" "lambda_logs" {
|
|
3460
4135
|
#checkov:skip=CKV_AWS_158:Using default CloudWatch log encryption
|
|
@@ -3674,11 +4349,63 @@ resource "aws_api_gateway_deployment" "api_deployment" {
|
|
|
3674
4349
|
]
|
|
3675
4350
|
}
|
|
3676
4351
|
|
|
4352
|
+
# KMS key for encrypting access logs at rest
|
|
4353
|
+
resource "aws_kms_key" "access_logs" {
|
|
4354
|
+
description = "CustomApi API access log encryption"
|
|
4355
|
+
deletion_window_in_days = 7
|
|
4356
|
+
enable_key_rotation = true
|
|
4357
|
+
|
|
4358
|
+
policy = jsonencode({
|
|
4359
|
+
Version = "2012-10-17"
|
|
4360
|
+
Statement = [
|
|
4361
|
+
{
|
|
4362
|
+
Sid = "Enable IAM User Permissions"
|
|
4363
|
+
Effect = "Allow"
|
|
4364
|
+
Principal = { AWS = "arn:aws:iam::\${data.aws_caller_identity.current.account_id}:root" }
|
|
4365
|
+
Action = "kms:*"
|
|
4366
|
+
Resource = "*"
|
|
4367
|
+
},
|
|
4368
|
+
{
|
|
4369
|
+
Sid = "Allow CloudWatch Logs"
|
|
4370
|
+
Effect = "Allow"
|
|
4371
|
+
Principal = { Service = "logs.\${data.aws_region.current.region}.amazonaws.com" }
|
|
4372
|
+
Action = [
|
|
4373
|
+
"kms:Encrypt",
|
|
4374
|
+
"kms:Decrypt",
|
|
4375
|
+
"kms:ReEncrypt*",
|
|
4376
|
+
"kms:GenerateDataKey*",
|
|
4377
|
+
"kms:DescribeKey"
|
|
4378
|
+
]
|
|
4379
|
+
Resource = "*"
|
|
4380
|
+
Condition = {
|
|
4381
|
+
ArnEquals = {
|
|
4382
|
+
"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"
|
|
4383
|
+
}
|
|
4384
|
+
}
|
|
4385
|
+
}
|
|
4386
|
+
]
|
|
4387
|
+
})
|
|
4388
|
+
|
|
4389
|
+
tags = var.tags
|
|
4390
|
+
}
|
|
4391
|
+
|
|
4392
|
+
resource "aws_kms_alias" "access_logs" {
|
|
4393
|
+
name = "alias/custom-api-\${random_string.suffix.result}-access-logs"
|
|
4394
|
+
target_key_id = aws_kms_key.access_logs.key_id
|
|
4395
|
+
}
|
|
4396
|
+
|
|
4397
|
+
# Access logs for the API Gateway stage
|
|
4398
|
+
resource "aws_cloudwatch_log_group" "access_logs" {
|
|
4399
|
+
name = "/aws/apigateway/custom-api-\${random_string.suffix.result}/access"
|
|
4400
|
+
retention_in_days = 365
|
|
4401
|
+
kms_key_id = aws_kms_key.access_logs.arn
|
|
4402
|
+
tags = var.tags
|
|
4403
|
+
}
|
|
4404
|
+
|
|
3677
4405
|
# API Gateway stage
|
|
3678
4406
|
resource "aws_api_gateway_stage" "api_stage" {
|
|
3679
4407
|
#checkov:skip=CKV_AWS_120:API Gateway caching not required for this use case
|
|
3680
|
-
#checkov:skip=
|
|
3681
|
-
#checkov:skip=CKV2_AWS_4:API Gateway logging level not applicable as access logging is disabled
|
|
4408
|
+
#checkov:skip=CKV2_AWS_4:Access logging is enabled below; verbose execution logging is intentionally not enabled
|
|
3682
4409
|
#checkov:skip=CKV2_AWS_51:Client certificate authentication not required for this use case
|
|
3683
4410
|
#checkov:skip=CKV2_AWS_77:WAFv2 Web ACL is attached via aws_wafv2_web_acl_association when var.enable_waf is true (default) and includes AWSManagedRulesKnownBadInputsRuleSet for Log4j protection; Checkov does not track the association across modules
|
|
3684
4411
|
deployment_id = aws_api_gateway_deployment.api_deployment.id
|
|
@@ -3686,9 +4413,39 @@ resource "aws_api_gateway_stage" "api_stage" {
|
|
|
3686
4413
|
stage_name = "prod"
|
|
3687
4414
|
xray_tracing_enabled = true
|
|
3688
4415
|
|
|
4416
|
+
access_log_settings {
|
|
4417
|
+
destination_arn = aws_cloudwatch_log_group.access_logs.arn
|
|
4418
|
+
format = jsonencode({
|
|
4419
|
+
requestId = "$context.requestId"
|
|
4420
|
+
ip = "$context.identity.sourceIp"
|
|
4421
|
+
caller = "$context.identity.caller"
|
|
4422
|
+
user = "$context.identity.user"
|
|
4423
|
+
requestTime = "$context.requestTime"
|
|
4424
|
+
httpMethod = "$context.httpMethod"
|
|
4425
|
+
resourcePath = "$context.resourcePath"
|
|
4426
|
+
status = "$context.status"
|
|
4427
|
+
protocol = "$context.protocol"
|
|
4428
|
+
responseLength = "$context.responseLength"
|
|
4429
|
+
})
|
|
4430
|
+
}
|
|
4431
|
+
|
|
3689
4432
|
tags = var.tags
|
|
3690
4433
|
|
|
3691
|
-
|
|
4434
|
+
# Ensure the account-level role is configured before the stage is created
|
|
4435
|
+
depends_on = [aws_api_gateway_deployment.api_deployment, module.account]
|
|
4436
|
+
}
|
|
4437
|
+
|
|
4438
|
+
# Default throttling applied to all resource paths and methods
|
|
4439
|
+
resource "aws_api_gateway_method_settings" "throttling" {
|
|
4440
|
+
#checkov:skip=CKV_AWS_225:API Gateway caching not required for this use case
|
|
4441
|
+
rest_api_id = module.rest_api.api_id
|
|
4442
|
+
stage_name = aws_api_gateway_stage.api_stage.stage_name
|
|
4443
|
+
method_path = "*/*"
|
|
4444
|
+
|
|
4445
|
+
settings {
|
|
4446
|
+
throttling_rate_limit = 10000
|
|
4447
|
+
throttling_burst_limit = 5000
|
|
4448
|
+
}
|
|
3692
4449
|
}
|
|
3693
4450
|
|
|
3694
4451
|
# API Gateway Resource Policy
|
|
@@ -3827,6 +4584,11 @@ output "lambda_execution_role_name" {
|
|
|
3827
4584
|
value = aws_iam_role.lambda_execution_role.name
|
|
3828
4585
|
}
|
|
3829
4586
|
|
|
4587
|
+
output "security_group_id" {
|
|
4588
|
+
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."
|
|
4589
|
+
value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
|
|
4590
|
+
}
|
|
4591
|
+
|
|
3830
4592
|
# Integration Outputs
|
|
3831
4593
|
output "integration_id" {
|
|
3832
4594
|
description = "ID of the Lambda integration"
|