aws-cdk 0.0.0
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/CONTRIBUTING.md +276 -0
- package/LICENSE +202 -0
- package/NOTICE +16 -0
- package/README.md +1274 -0
- package/THIRD_PARTY_LICENSES +26821 -0
- package/bin/cdk +6 -0
- package/build-info.json +4 -0
- package/db.json.gz +0 -0
- package/generate.sh +25 -0
- package/images/garbage-collection.png +0 -0
- package/lib/api/aws-auth/account-cache.d.ts +39 -0
- package/lib/api/aws-auth/account-cache.js +102 -0
- package/lib/api/aws-auth/awscli-compatible.d.ts +42 -0
- package/lib/api/aws-auth/awscli-compatible.js +264 -0
- package/lib/api/aws-auth/cached.d.ts +11 -0
- package/lib/api/aws-auth/cached.js +26 -0
- package/lib/api/aws-auth/credential-plugins.d.ts +36 -0
- package/lib/api/aws-auth/credential-plugins.js +153 -0
- package/lib/api/aws-auth/index.d.ts +3 -0
- package/lib/api/aws-auth/index.js +20 -0
- package/lib/api/aws-auth/provider-caching.d.ts +13 -0
- package/lib/api/aws-auth/provider-caching.js +24 -0
- package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
- package/lib/api/aws-auth/sdk-logger.js +130 -0
- package/lib/api/aws-auth/sdk-provider.d.ts +207 -0
- package/lib/api/aws-auth/sdk-provider.js +359 -0
- package/lib/api/aws-auth/sdk.d.ts +223 -0
- package/lib/api/aws-auth/sdk.js +366 -0
- package/lib/api/aws-auth/tracing.d.ts +11 -0
- package/lib/api/aws-auth/tracing.js +61 -0
- package/lib/api/aws-auth/user-agent.d.ts +7 -0
- package/lib/api/aws-auth/user-agent.js +21 -0
- package/lib/api/aws-auth/util.d.ts +6 -0
- package/lib/api/aws-auth/util.js +23 -0
- package/lib/api/bootstrap/bootstrap-environment.d.ts +33 -0
- package/lib/api/bootstrap/bootstrap-environment.js +322 -0
- package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
- package/lib/api/bootstrap/bootstrap-props.js +14 -0
- package/lib/api/bootstrap/bootstrap-template.yaml +692 -0
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +37 -0
- package/lib/api/bootstrap/deploy-bootstrap.js +143 -0
- package/lib/api/bootstrap/index.d.ts +2 -0
- package/lib/api/bootstrap/index.js +19 -0
- package/lib/api/bootstrap/legacy-template.d.ts +2 -0
- package/lib/api/bootstrap/legacy-template.js +82 -0
- package/lib/api/context.d.ts +40 -0
- package/lib/api/context.js +82 -0
- package/lib/api/cxapp/cloud-assembly.d.ts +150 -0
- package/lib/api/cxapp/cloud-assembly.js +305 -0
- package/lib/api/cxapp/cloud-executable.d.ts +44 -0
- package/lib/api/cxapp/cloud-executable.js +90 -0
- package/lib/api/cxapp/environments.d.ts +9 -0
- package/lib/api/cxapp/environments.js +66 -0
- package/lib/api/cxapp/exec.d.ts +56 -0
- package/lib/api/cxapp/exec.js +275 -0
- package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
- package/lib/api/deployments/asset-manifest-builder.js +35 -0
- package/lib/api/deployments/asset-publishing.d.ts +77 -0
- package/lib/api/deployments/asset-publishing.js +163 -0
- package/lib/api/deployments/assets.d.ts +10 -0
- package/lib/api/deployments/assets.js +111 -0
- package/lib/api/deployments/checks.d.ts +8 -0
- package/lib/api/deployments/checks.js +73 -0
- package/lib/api/deployments/cloudformation.d.ts +235 -0
- package/lib/api/deployments/cloudformation.js +598 -0
- package/lib/api/deployments/deploy-stack.d.ts +177 -0
- package/lib/api/deployments/deploy-stack.js +484 -0
- package/lib/api/deployments/deployment-method.d.ts +24 -0
- package/lib/api/deployments/deployment-method.js +3 -0
- package/lib/api/deployments/deployment-result.d.ts +21 -0
- package/lib/api/deployments/deployment-result.js +10 -0
- package/lib/api/deployments/deployments.d.ts +340 -0
- package/lib/api/deployments/deployments.js +369 -0
- package/lib/api/deployments/hotswap-deployments.d.ts +14 -0
- package/lib/api/deployments/hotswap-deployments.js +357 -0
- package/lib/api/deployments/index.d.ts +6 -0
- package/lib/api/deployments/index.js +23 -0
- package/lib/api/deployments/nested-stack-helpers.d.ts +25 -0
- package/lib/api/deployments/nested-stack-helpers.js +88 -0
- package/lib/api/environment-access.d.ts +138 -0
- package/lib/api/environment-access.js +203 -0
- package/lib/api/environment-resources.d.ts +73 -0
- package/lib/api/environment-resources.js +208 -0
- package/lib/api/evaluate-cloudformation-template.d.ts +84 -0
- package/lib/api/evaluate-cloudformation-template.js +443 -0
- package/lib/api/garbage-collection/garbage-collector.d.ts +152 -0
- package/lib/api/garbage-collection/garbage-collector.js +607 -0
- package/lib/api/garbage-collection/progress-printer.d.ts +21 -0
- package/lib/api/garbage-collection/progress-printer.js +69 -0
- package/lib/api/garbage-collection/stack-refresh.d.ts +44 -0
- package/lib/api/garbage-collection/stack-refresh.js +154 -0
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +157 -0
- package/lib/api/hotswap/code-build-projects.d.ts +3 -0
- package/lib/api/hotswap/code-build-projects.js +55 -0
- package/lib/api/hotswap/common.d.ts +126 -0
- package/lib/api/hotswap/common.js +170 -0
- package/lib/api/hotswap/ecs-services.d.ts +3 -0
- package/lib/api/hotswap/ecs-services.js +140 -0
- package/lib/api/hotswap/lambda-functions.d.ts +3 -0
- package/lib/api/hotswap/lambda-functions.js +309 -0
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +9 -0
- package/lib/api/hotswap/s3-bucket-deployments.js +112 -0
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -0
- package/lib/api/hotswap/stepfunctions-state-machines.js +42 -0
- package/lib/api/index.d.ts +5 -0
- package/lib/api/index.js +22 -0
- package/lib/api/logs/find-cloudwatch-logs.d.ts +24 -0
- package/lib/api/logs/find-cloudwatch-logs.js +97 -0
- package/lib/api/logs/logs-monitor.d.ts +53 -0
- package/lib/api/logs/logs-monitor.js +169 -0
- package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
- package/lib/api/plugin/context-provider-plugin.js +7 -0
- package/lib/api/plugin/index.d.ts +3 -0
- package/lib/api/plugin/index.js +20 -0
- package/lib/api/plugin/mode.d.ts +4 -0
- package/lib/api/plugin/mode.js +9 -0
- package/lib/api/plugin/plugin.d.ts +63 -0
- package/lib/api/plugin/plugin.js +106 -0
- package/lib/api/settings.d.ts +29 -0
- package/lib/api/settings.js +141 -0
- package/lib/api/tags.d.ts +9 -0
- package/lib/api/tags.js +10 -0
- package/lib/api/toolkit-info.d.ts +51 -0
- package/lib/api/toolkit-info.js +156 -0
- package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +237 -0
- package/lib/api/util/cloudformation/stack-activity-monitor.js +550 -0
- package/lib/api/util/cloudformation/stack-event-poller.d.ts +63 -0
- package/lib/api/util/cloudformation/stack-event-poller.js +129 -0
- package/lib/api/util/cloudformation/stack-status.d.ts +42 -0
- package/lib/api/util/cloudformation/stack-status.js +88 -0
- package/lib/api/util/display.d.ts +13 -0
- package/lib/api/util/display.js +80 -0
- package/lib/api/util/placeholders.d.ts +10 -0
- package/lib/api/util/placeholders.js +24 -0
- package/lib/api/util/rwlock.d.ts +65 -0
- package/lib/api/util/rwlock.js +179 -0
- package/lib/api/util/string-manipulation.d.ts +10 -0
- package/lib/api/util/string-manipulation.js +33 -0
- package/lib/api/util/template-body-parameter.d.ts +21 -0
- package/lib/api/util/template-body-parameter.js +104 -0
- package/lib/cli/cdk-toolkit.d.ts +594 -0
- package/lib/cli/cdk-toolkit.js +1019 -0
- package/lib/cli/cli-config.d.ts +10 -0
- package/lib/cli/cli-config.js +406 -0
- package/lib/cli/cli.d.ts +4 -0
- package/lib/cli/cli.js +538 -0
- package/lib/cli/convert-to-user-input.d.ts +3 -0
- package/lib/cli/convert-to-user-input.js +434 -0
- package/lib/cli/parse-command-line-arguments.d.ts +1 -0
- package/lib/cli/parse-command-line-arguments.js +806 -0
- package/lib/cli/platform-warnings.d.ts +2 -0
- package/lib/cli/platform-warnings.js +45 -0
- package/lib/cli/user-configuration.d.ts +90 -0
- package/lib/cli/user-configuration.js +272 -0
- package/lib/cli/user-input.d.ts +1163 -0
- package/lib/cli/user-input.js +3 -0
- package/lib/cli/util/console-formatters.d.ts +18 -0
- package/lib/cli/util/console-formatters.js +42 -0
- package/lib/cli/util/npm.d.ts +1 -0
- package/lib/cli/util/npm.js +22 -0
- package/lib/cli/util/yargs-helpers.d.ts +22 -0
- package/lib/cli/util/yargs-helpers.js +49 -0
- package/lib/cli/version.d.ts +13 -0
- package/lib/cli/version.js +120 -0
- package/lib/commands/context.d.ts +35 -0
- package/lib/commands/context.js +156 -0
- package/lib/commands/docs.d.ts +13 -0
- package/lib/commands/docs.js +32 -0
- package/lib/commands/doctor.d.ts +1 -0
- package/lib/commands/doctor.js +69 -0
- package/lib/commands/migrate.d.ts +327 -0
- package/lib/commands/migrate.js +804 -0
- package/lib/context-providers/ami.d.ts +11 -0
- package/lib/context-providers/ami.js +50 -0
- package/lib/context-providers/availability-zones.d.ts +11 -0
- package/lib/context-providers/availability-zones.js +27 -0
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +11 -0
- package/lib/context-providers/endpoint-service-availability-zones.js +33 -0
- package/lib/context-providers/hosted-zones.d.ts +10 -0
- package/lib/context-providers/hosted-zones.js +67 -0
- package/lib/context-providers/index.d.ts +30 -0
- package/lib/context-providers/index.js +109 -0
- package/lib/context-providers/keys.d.ts +11 -0
- package/lib/context-providers/keys.js +52 -0
- package/lib/context-providers/load-balancers.d.ts +20 -0
- package/lib/context-providers/load-balancers.js +159 -0
- package/lib/context-providers/security-groups.d.ts +9 -0
- package/lib/context-providers/security-groups.js +70 -0
- package/lib/context-providers/ssm-parameters.d.ts +23 -0
- package/lib/context-providers/ssm-parameters.js +59 -0
- package/lib/context-providers/vpcs.d.ts +11 -0
- package/lib/context-providers/vpcs.js +288 -0
- package/lib/diff.d.ts +28 -0
- package/lib/diff.js +165 -0
- package/lib/import.d.ts +182 -0
- package/lib/import.js +335 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +348304 -0
- package/lib/index_bg.wasm +0 -0
- package/lib/init-hooks.d.ts +40 -0
- package/lib/init-hooks.js +64 -0
- package/lib/init-templates/.init-version.json +1 -0
- package/lib/init-templates/.no-packagejson-validator +0 -0
- package/lib/init-templates/.recommended-feature-flags.json +68 -0
- package/lib/init-templates/LICENSE +16 -0
- package/lib/init-templates/app/csharp/.template.gitignore +342 -0
- package/lib/init-templates/app/csharp/README.md +14 -0
- package/lib/init-templates/app/csharp/cdk.template.json +15 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +20 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +13 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +1 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs +44 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/app/fsharp/.template.gitignore +342 -0
- package/lib/init-templates/app/fsharp/README.md +18 -0
- package/lib/init-templates/app/fsharp/cdk.template.json +14 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +25 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +8 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs +11 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/app/go/%name%.template.go +70 -0
- package/lib/init-templates/app/go/%name%_test.template.go +26 -0
- package/lib/init-templates/app/go/.template.gitignore +19 -0
- package/lib/init-templates/app/go/README.md +12 -0
- package/lib/init-templates/app/go/cdk.template.json +13 -0
- package/lib/init-templates/app/go/go.template.mod +9 -0
- package/lib/init-templates/app/info.json +4 -0
- package/lib/init-templates/app/java/.template.gitignore +13 -0
- package/lib/init-templates/app/java/README.md +18 -0
- package/lib/init-templates/app/java/cdk.json +13 -0
- package/lib/init-templates/app/java/pom.xml +60 -0
- package/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +42 -0
- package/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +24 -0
- package/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java +26 -0
- package/lib/init-templates/app/javascript/.template.gitignore +5 -0
- package/lib/init-templates/app/javascript/.template.npmignore +3 -0
- package/lib/init-templates/app/javascript/README.md +12 -0
- package/lib/init-templates/app/javascript/bin/%name%.template.js +21 -0
- package/lib/init-templates/app/javascript/cdk.template.json +15 -0
- package/lib/init-templates/app/javascript/jest.config.js +3 -0
- package/lib/init-templates/app/javascript/lib/%name%-stack.template.js +23 -0
- package/lib/init-templates/app/javascript/package.json +20 -0
- package/lib/init-templates/app/javascript/test/%name%.test.template.js +17 -0
- package/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +19 -0
- package/lib/init-templates/app/python/%name.PythonModule%/__init__.py +0 -0
- package/lib/init-templates/app/python/.template.gitignore +10 -0
- package/lib/init-templates/app/python/README.template.md +58 -0
- package/lib/init-templates/app/python/app.template.py +28 -0
- package/lib/init-templates/app/python/cdk.template.json +15 -0
- package/lib/init-templates/app/python/requirements-dev.txt +1 -0
- package/lib/init-templates/app/python/requirements.txt +2 -0
- package/lib/init-templates/app/python/source.bat +13 -0
- package/lib/init-templates/app/python/tests/__init__.py +0 -0
- package/lib/init-templates/app/python/tests/unit/__init__.py +0 -0
- package/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py +15 -0
- package/lib/init-templates/app/typescript/.template.gitignore +8 -0
- package/lib/init-templates/app/typescript/.template.npmignore +6 -0
- package/lib/init-templates/app/typescript/README.md +14 -0
- package/lib/init-templates/app/typescript/bin/%name%.template.ts +20 -0
- package/lib/init-templates/app/typescript/cdk.template.json +17 -0
- package/lib/init-templates/app/typescript/jest.config.js +8 -0
- package/lib/init-templates/app/typescript/lib/%name%-stack.template.ts +16 -0
- package/lib/init-templates/app/typescript/package.json +26 -0
- package/lib/init-templates/app/typescript/test/%name%.test.template.ts +17 -0
- package/lib/init-templates/app/typescript/tsconfig.json +31 -0
- package/lib/init-templates/lib/info.json +4 -0
- package/lib/init-templates/lib/typescript/.template.gitignore +8 -0
- package/lib/init-templates/lib/typescript/.template.npmignore +6 -0
- package/lib/init-templates/lib/typescript/README.template.md +12 -0
- package/lib/init-templates/lib/typescript/jest.config.js +8 -0
- package/lib/init-templates/lib/typescript/lib/index.template.ts +21 -0
- package/lib/init-templates/lib/typescript/package.json +24 -0
- package/lib/init-templates/lib/typescript/test/%name%.test.template.ts +18 -0
- package/lib/init-templates/lib/typescript/tsconfig.json +31 -0
- package/lib/init-templates/sample-app/csharp/.template.gitignore +342 -0
- package/lib/init-templates/sample-app/csharp/README.template.md +19 -0
- package/lib/init-templates/sample-app/csharp/cdk.template.json +15 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +20 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +24 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +1 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs +15 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/sample-app/fsharp/.template.gitignore +342 -0
- package/lib/init-templates/sample-app/fsharp/README.template.md +20 -0
- package/lib/init-templates/sample-app/fsharp/cdk.template.json +14 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +25 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +14 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs +11 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/sample-app/go/%name%.template.go +73 -0
- package/lib/init-templates/sample-app/go/%name%_test.template.go +25 -0
- package/lib/init-templates/sample-app/go/.template.gitignore +19 -0
- package/lib/init-templates/sample-app/go/README.md +12 -0
- package/lib/init-templates/sample-app/go/cdk.template.json +13 -0
- package/lib/init-templates/sample-app/go/go.template.mod +9 -0
- package/lib/init-templates/sample-app/info.json +4 -0
- package/lib/init-templates/sample-app/java/.template.gitignore +13 -0
- package/lib/init-templates/sample-app/java/README.template.md +19 -0
- package/lib/init-templates/sample-app/java/cdk.json +13 -0
- package/lib/init-templates/sample-app/java/pom.xml +55 -0
- package/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +13 -0
- package/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +29 -0
- package/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java +27 -0
- package/lib/init-templates/sample-app/javascript/.template.gitignore +5 -0
- package/lib/init-templates/sample-app/javascript/.template.npmignore +3 -0
- package/lib/init-templates/sample-app/javascript/README.template.md +13 -0
- package/lib/init-templates/sample-app/javascript/bin/%name%.template.js +6 -0
- package/lib/init-templates/sample-app/javascript/cdk.template.json +15 -0
- package/lib/init-templates/sample-app/javascript/jest.config.js +3 -0
- package/lib/init-templates/sample-app/javascript/lib/%name%-stack.template.js +25 -0
- package/lib/init-templates/sample-app/javascript/package.json +20 -0
- package/lib/init-templates/sample-app/javascript/test/%name%.test.template.js +16 -0
- package/lib/init-templates/sample-app/javascript/tsconfig.json +34 -0
- package/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +26 -0
- package/lib/init-templates/sample-app/python/%name.PythonModule%/__init__.py +0 -0
- package/lib/init-templates/sample-app/python/.template.gitignore +22 -0
- package/lib/init-templates/sample-app/python/README.template.md +65 -0
- package/lib/init-templates/sample-app/python/app.template.py +11 -0
- package/lib/init-templates/sample-app/python/cdk.template.json +15 -0
- package/lib/init-templates/sample-app/python/requirements-dev.txt +1 -0
- package/lib/init-templates/sample-app/python/requirements.txt +2 -0
- package/lib/init-templates/sample-app/python/source.bat +13 -0
- package/lib/init-templates/sample-app/python/tests/__init__.py +0 -0
- package/lib/init-templates/sample-app/python/tests/unit/__init__.py +0 -0
- package/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py +21 -0
- package/lib/init-templates/sample-app/typescript/.template.gitignore +8 -0
- package/lib/init-templates/sample-app/typescript/.template.npmignore +6 -0
- package/lib/init-templates/sample-app/typescript/README.template.md +15 -0
- package/lib/init-templates/sample-app/typescript/bin/%name%.template.ts +6 -0
- package/lib/init-templates/sample-app/typescript/cdk.template.json +17 -0
- package/lib/init-templates/sample-app/typescript/jest.config.js +8 -0
- package/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts +19 -0
- package/lib/init-templates/sample-app/typescript/package.json +26 -0
- package/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts +17 -0
- package/lib/init-templates/sample-app/typescript/tsconfig.json +31 -0
- package/lib/init.d.ts +52 -0
- package/lib/init.js +430 -0
- package/lib/legacy-exports-source.d.ts +27 -0
- package/lib/legacy-exports-source.js +88 -0
- package/lib/legacy-exports.d.ts +10 -0
- package/lib/legacy-exports.js +28 -0
- package/lib/legacy-logging-source.d.ts +32 -0
- package/lib/legacy-logging-source.js +107 -0
- package/lib/list-stacks.d.ts +22 -0
- package/lib/list-stacks.js +23 -0
- package/lib/logging.d.ts +109 -0
- package/lib/logging.js +159 -0
- package/lib/migrator.d.ts +25 -0
- package/lib/migrator.js +67 -0
- package/lib/notices.d.ts +156 -0
- package/lib/notices.js +373 -0
- package/lib/os.d.ts +7 -0
- package/lib/os.js +92 -0
- package/lib/serialize.d.ts +27 -0
- package/lib/serialize.js +86 -0
- package/lib/toolkit/cli-io-host.d.ts +208 -0
- package/lib/toolkit/cli-io-host.js +282 -0
- package/lib/toolkit/error.d.ts +44 -0
- package/lib/toolkit/error.js +78 -0
- package/lib/tree.d.ts +31 -0
- package/lib/tree.js +40 -0
- package/lib/util/archive.d.ts +1 -0
- package/lib/util/archive.js +86 -0
- package/lib/util/arrays.d.ts +14 -0
- package/lib/util/arrays.js +36 -0
- package/lib/util/bool.d.ts +7 -0
- package/lib/util/bool.js +13 -0
- package/lib/util/bytes.d.ts +8 -0
- package/lib/util/bytes.js +21 -0
- package/lib/util/content-hash.d.ts +5 -0
- package/lib/util/content-hash.js +43 -0
- package/lib/util/directories.d.ts +23 -0
- package/lib/util/directories.js +57 -0
- package/lib/util/error.d.ts +9 -0
- package/lib/util/error.js +22 -0
- package/lib/util/index.d.ts +5 -0
- package/lib/util/index.js +22 -0
- package/lib/util/objects.d.ts +52 -0
- package/lib/util/objects.js +183 -0
- package/lib/util/parallel.d.ts +6 -0
- package/lib/util/parallel.js +44 -0
- package/lib/util/tables.d.ts +1 -0
- package/lib/util/tables.js +10 -0
- package/lib/util/type-brands.d.ts +39 -0
- package/lib/util/type-brands.js +38 -0
- package/lib/util/types.d.ts +27 -0
- package/lib/util/types.js +25 -0
- package/lib/util/validate-notification-arn.d.ts +4 -0
- package/lib/util/validate-notification-arn.js +10 -0
- package/lib/util/version-range.d.ts +2 -0
- package/lib/util/version-range.js +36 -0
- package/lib/util/work-graph-builder.d.ts +32 -0
- package/lib/util/work-graph-builder.js +167 -0
- package/lib/util/work-graph-types.d.ts +50 -0
- package/lib/util/work-graph-types.js +14 -0
- package/lib/util/work-graph.d.ts +70 -0
- package/lib/util/work-graph.js +344 -0
- package/lib/util/yaml-cfn.d.ts +15 -0
- package/lib/util/yaml-cfn.js +56 -0
- package/package.json +197 -0
- package/scripts/user-input-gen +2 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoadBalancerListenerContextProviderPlugin = exports.LoadBalancerContextProviderPlugin = void 0;
|
|
4
|
+
const cx_api_1 = require("@aws-cdk/cx-api");
|
|
5
|
+
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
6
|
+
const error_1 = require("../toolkit/error");
|
|
7
|
+
/**
|
|
8
|
+
* Provides load balancer context information.
|
|
9
|
+
*/
|
|
10
|
+
class LoadBalancerContextProviderPlugin {
|
|
11
|
+
constructor(aws) {
|
|
12
|
+
this.aws = aws;
|
|
13
|
+
}
|
|
14
|
+
async getValue(query) {
|
|
15
|
+
var _a;
|
|
16
|
+
if (!query.loadBalancerArn && !query.loadBalancerTags) {
|
|
17
|
+
throw new error_1.ContextProviderError('The load balancer lookup query must specify either `loadBalancerArn` or `loadBalancerTags`');
|
|
18
|
+
}
|
|
19
|
+
const loadBalancer = await (await LoadBalancerProvider.getClient(this.aws, query)).getLoadBalancer();
|
|
20
|
+
const ipAddressType = loadBalancer.IpAddressType === 'ipv4' ? cx_api_1.LoadBalancerIpAddressType.IPV4 : cx_api_1.LoadBalancerIpAddressType.DUAL_STACK;
|
|
21
|
+
return {
|
|
22
|
+
loadBalancerArn: loadBalancer.LoadBalancerArn,
|
|
23
|
+
loadBalancerCanonicalHostedZoneId: loadBalancer.CanonicalHostedZoneId,
|
|
24
|
+
loadBalancerDnsName: loadBalancer.DNSName,
|
|
25
|
+
vpcId: loadBalancer.VpcId,
|
|
26
|
+
securityGroupIds: (_a = loadBalancer.SecurityGroups) !== null && _a !== void 0 ? _a : [],
|
|
27
|
+
ipAddressType: ipAddressType,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.LoadBalancerContextProviderPlugin = LoadBalancerContextProviderPlugin;
|
|
32
|
+
/**
|
|
33
|
+
* Provides load balancer listener context information
|
|
34
|
+
*/
|
|
35
|
+
class LoadBalancerListenerContextProviderPlugin {
|
|
36
|
+
constructor(aws) {
|
|
37
|
+
this.aws = aws;
|
|
38
|
+
}
|
|
39
|
+
async getValue(query) {
|
|
40
|
+
if (!query.listenerArn && !query.loadBalancerArn && !query.loadBalancerTags) {
|
|
41
|
+
throw new error_1.ContextProviderError('The load balancer listener query must specify at least one of: `listenerArn`, `loadBalancerArn` or `loadBalancerTags`');
|
|
42
|
+
}
|
|
43
|
+
return (await LoadBalancerProvider.getClient(this.aws, query)).getListener();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.LoadBalancerListenerContextProviderPlugin = LoadBalancerListenerContextProviderPlugin;
|
|
47
|
+
class LoadBalancerProvider {
|
|
48
|
+
static async getClient(aws, query) {
|
|
49
|
+
const client = (await (0, sdk_provider_1.initContextProviderSdk)(aws, query)).elbv2();
|
|
50
|
+
try {
|
|
51
|
+
const listener = query.listenerArn
|
|
52
|
+
? // Assert we're sure there's at least one so it throws if not
|
|
53
|
+
(await client.describeListeners({ ListenerArns: [query.listenerArn] })).Listeners[0]
|
|
54
|
+
: undefined;
|
|
55
|
+
return new LoadBalancerProvider(client, { ...query, loadBalancerArn: (listener === null || listener === void 0 ? void 0 : listener.LoadBalancerArn) || query.loadBalancerArn }, listener);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
throw new error_1.ContextProviderError(`No load balancer listeners found matching arn ${query.listenerArn}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
constructor(client, filter, listener) {
|
|
62
|
+
this.client = client;
|
|
63
|
+
this.filter = filter;
|
|
64
|
+
this.listener = listener;
|
|
65
|
+
}
|
|
66
|
+
async getLoadBalancer() {
|
|
67
|
+
const loadBalancers = await this.getLoadBalancers();
|
|
68
|
+
if (loadBalancers.length === 0) {
|
|
69
|
+
throw new error_1.ContextProviderError(`No load balancers found matching ${JSON.stringify(this.filter)}`);
|
|
70
|
+
}
|
|
71
|
+
if (loadBalancers.length > 1) {
|
|
72
|
+
throw new error_1.ContextProviderError(`Multiple load balancers found matching ${JSON.stringify(this.filter)} - please provide more specific criteria`);
|
|
73
|
+
}
|
|
74
|
+
return loadBalancers[0];
|
|
75
|
+
}
|
|
76
|
+
async getListener() {
|
|
77
|
+
var _a;
|
|
78
|
+
if (this.listener) {
|
|
79
|
+
try {
|
|
80
|
+
const loadBalancer = await this.getLoadBalancer();
|
|
81
|
+
return {
|
|
82
|
+
listenerArn: this.listener.ListenerArn,
|
|
83
|
+
listenerPort: this.listener.Port,
|
|
84
|
+
securityGroupIds: loadBalancer.SecurityGroups || [],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
throw new error_1.ContextProviderError(`No associated load balancer found for listener arn ${this.filter.listenerArn}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const loadBalancers = await this.getLoadBalancers();
|
|
92
|
+
if (loadBalancers.length === 0) {
|
|
93
|
+
throw new error_1.ContextProviderError(`No associated load balancers found for load balancer listener query ${JSON.stringify(this.filter)}`);
|
|
94
|
+
}
|
|
95
|
+
const listeners = (await this.getListenersForLoadBalancers(loadBalancers)).filter((listener) => {
|
|
96
|
+
return ((!this.filter.listenerPort || listener.Port === this.filter.listenerPort) &&
|
|
97
|
+
(!this.filter.listenerProtocol || listener.Protocol === this.filter.listenerProtocol));
|
|
98
|
+
});
|
|
99
|
+
if (listeners.length === 0) {
|
|
100
|
+
throw new error_1.ContextProviderError(`No load balancer listeners found matching ${JSON.stringify(this.filter)}`);
|
|
101
|
+
}
|
|
102
|
+
if (listeners.length > 1) {
|
|
103
|
+
throw new error_1.ContextProviderError(`Multiple load balancer listeners found matching ${JSON.stringify(this.filter)} - please provide more specific criteria`);
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
listenerArn: listeners[0].ListenerArn,
|
|
107
|
+
listenerPort: listeners[0].Port,
|
|
108
|
+
securityGroupIds: ((_a = loadBalancers.find((lb) => listeners[0].LoadBalancerArn === lb.LoadBalancerArn)) === null || _a === void 0 ? void 0 : _a.SecurityGroups) || [],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async getLoadBalancers() {
|
|
112
|
+
const loadBalancerArns = this.filter.loadBalancerArn ? [this.filter.loadBalancerArn] : undefined;
|
|
113
|
+
const loadBalancers = (await this.client.paginateDescribeLoadBalancers({
|
|
114
|
+
LoadBalancerArns: loadBalancerArns,
|
|
115
|
+
})).filter((lb) => lb.Type === this.filter.loadBalancerType);
|
|
116
|
+
return this.filterByTags(loadBalancers);
|
|
117
|
+
}
|
|
118
|
+
async filterByTags(loadBalancers) {
|
|
119
|
+
if (!this.filter.loadBalancerTags) {
|
|
120
|
+
return loadBalancers;
|
|
121
|
+
}
|
|
122
|
+
return (await this.describeTags(loadBalancers.map((lb) => lb.LoadBalancerArn)))
|
|
123
|
+
.filter((tagDescription) => {
|
|
124
|
+
// For every tag in the filter, there is some tag in the LB that matches it.
|
|
125
|
+
// In other words, the set of tags in the filter is a subset of the set of tags in the LB.
|
|
126
|
+
return this.filter.loadBalancerTags.every((filter) => {
|
|
127
|
+
var _a;
|
|
128
|
+
return (_a = tagDescription.Tags) === null || _a === void 0 ? void 0 : _a.some((tag) => filter.key === tag.Key && filter.value === tag.Value);
|
|
129
|
+
});
|
|
130
|
+
})
|
|
131
|
+
.flatMap((tag) => loadBalancers.filter((loadBalancer) => tag.ResourceArn === loadBalancer.LoadBalancerArn));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns tag descriptions associated with the resources. The API doesn't support
|
|
135
|
+
* pagination, so this function breaks the resource list into chunks and issues
|
|
136
|
+
* the appropriate requests.
|
|
137
|
+
*/
|
|
138
|
+
async describeTags(resourceArns) {
|
|
139
|
+
// Max of 20 resource arns per request.
|
|
140
|
+
const chunkSize = 20;
|
|
141
|
+
const tags = Array();
|
|
142
|
+
for (let i = 0; i < resourceArns.length; i += chunkSize) {
|
|
143
|
+
const chunk = resourceArns.slice(i, Math.min(i + chunkSize, resourceArns.length));
|
|
144
|
+
const chunkTags = await this.client.describeTags({
|
|
145
|
+
ResourceArns: chunk,
|
|
146
|
+
});
|
|
147
|
+
tags.push(...(chunkTags.TagDescriptions || []));
|
|
148
|
+
}
|
|
149
|
+
return tags;
|
|
150
|
+
}
|
|
151
|
+
async getListenersForLoadBalancers(loadBalancers) {
|
|
152
|
+
const listeners = [];
|
|
153
|
+
for (const loadBalancer of loadBalancers.map((lb) => lb.LoadBalancerArn)) {
|
|
154
|
+
listeners.push(...(await this.client.paginateDescribeListeners({ LoadBalancerArn: loadBalancer })));
|
|
155
|
+
}
|
|
156
|
+
return listeners;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1iYWxhbmNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2FkLWJhbGFuY2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw0Q0FJeUI7QUFHekIsK0RBQXdGO0FBRXhGLDRDQUF3RDtBQUV4RDs7R0FFRztBQUNILE1BQWEsaUNBQWlDO0lBQzVDLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFBRyxDQUFDO0lBRWpELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBK0I7O1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLDRCQUFvQixDQUFDLDRGQUE0RixDQUFDLENBQUM7UUFDL0gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFckcsTUFBTSxhQUFhLEdBQ2pCLFlBQVksQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxrQ0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtDQUF5QixDQUFDLFVBQVUsQ0FBQztRQUVoSCxPQUFPO1lBQ0wsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFnQjtZQUM5QyxpQ0FBaUMsRUFBRSxZQUFZLENBQUMscUJBQXNCO1lBQ3RFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxPQUFRO1lBQzFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBTTtZQUMxQixnQkFBZ0IsRUFBRSxNQUFBLFlBQVksQ0FBQyxjQUFjLG1DQUFJLEVBQUU7WUFDbkQsYUFBYSxFQUFFLGFBQWE7U0FDN0IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRCRCw4RUFzQkM7QUFFRDs7R0FFRztBQUNILE1BQWEseUNBQXlDO0lB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QVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7Z0JBQy9DLFlBQVksRUFBRSxLQUFLO2FBQ3BCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLDRCQUE0QixDQUFDLGFBQTZCO1FBQ3RFLE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztRQUNqQyxLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3pFLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9hZEJhbGFuY2VyQ29udGV4dFF1ZXJ5LCBMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQge1xuICBMb2FkQmFsYW5jZXJDb250ZXh0UmVzcG9uc2UsXG4gIExvYWRCYWxhbmNlcklwQWRkcmVzc1R5cGUsXG4gIExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFJlc3BvbnNlLFxufSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgdHlwZSBMaXN0ZW5lciwgTG9hZEJhbGFuY2VyLCB0eXBlIFRhZ0Rlc2NyaXB0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVsYXN0aWMtbG9hZC1iYWxhbmNpbmctdjInO1xuaW1wb3J0IHR5cGUgeyBJRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyB0eXBlIFNka1Byb3ZpZGVyLCBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC9lcnJvcic7XG5cbi8qKlxuICogUHJvdmlkZXMgbG9hZCBiYWxhbmNlciBjb250ZXh0IGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTG9hZEJhbGFuY2VyQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyKSB7fVxuXG4gIGFzeW5jIGdldFZhbHVlKHF1ZXJ5OiBMb2FkQmFsYW5jZXJDb250ZXh0UXVlcnkpOiBQcm9taXNlPExvYWRCYWxhbmNlckNvbnRleHRSZXNwb25zZT4ge1xuICAgIGlmICghcXVlcnkubG9hZEJhbGFuY2VyQXJuICYmICFxdWVyeS5sb2FkQmFsYW5jZXJUYWdzKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoJ1RoZSBsb2FkIGJhbGFuY2VyIGxvb2t1cCBxdWVyeSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBsb2FkQmFsYW5jZXJBcm5gIG9yIGBsb2FkQmFsYW5jZXJUYWdzYCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IGF3YWl0IChhd2FpdCBMb2FkQmFsYW5jZXJQcm92aWRlci5nZXRDbGllbnQodGhpcy5hd3MsIHF1ZXJ5KSkuZ2V0TG9hZEJhbGFuY2VyKCk7XG5cbiAgICBjb25zdCBpcEFkZHJlc3NUeXBlID1cbiAgICAgIGxvYWRCYWxhbmNlci5JcEFkZHJlc3NUeXBlID09PSAnaXB2NCcgPyBMb2FkQmFsYW5jZXJJcEFkZHJlc3NUeXBlLklQVjQgOiBMb2FkQmFsYW5jZXJJcEFkZHJlc3NUeXBlLkRVQUxfU1RBQ0s7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9hZEJhbGFuY2VyQXJuOiBsb2FkQmFsYW5jZXIuTG9hZEJhbGFuY2VyQXJuISxcbiAgICAgIGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogbG9hZEJhbGFuY2VyLkNhbm9uaWNhbEhvc3RlZFpvbmVJZCEsXG4gICAgICBsb2FkQmFsYW5jZXJEbnNOYW1lOiBsb2FkQmFsYW5jZXIuRE5TTmFtZSEsXG4gICAgICB2cGNJZDogbG9hZEJhbGFuY2VyLlZwY0lkISxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IGxvYWRCYWxhbmNlci5TZWN1cml0eUdyb3VwcyA/PyBbXSxcbiAgICAgIGlwQWRkcmVzc1R5cGU6IGlwQWRkcmVzc1R5cGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGxvYWQgYmFsYW5jZXIgbGlzdGVuZXIgY29udGV4dCBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgY2xhc3MgTG9hZEJhbGFuY2VyTGlzdGVuZXJDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHt9XG5cbiAgYXN5bmMgZ2V0VmFsdWUocXVlcnk6IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5KTogUHJvbWlzZTxMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRSZXNwb25zZT4ge1xuICAgIGlmICghcXVlcnkubGlzdGVuZXJBcm4gJiYgIXF1ZXJ5LmxvYWRCYWxhbmNlckFybiAmJiAhcXVlcnkubG9hZEJhbGFuY2VyVGFncykge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICAnVGhlIGxvYWQgYmFsYW5jZXIgbGlzdGVuZXIgcXVlcnkgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZjogYGxpc3RlbmVyQXJuYCwgYGxvYWRCYWxhbmNlckFybmAgb3IgYGxvYWRCYWxhbmNlclRhZ3NgJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCBMb2FkQmFsYW5jZXJQcm92aWRlci5nZXRDbGllbnQodGhpcy5hd3MsIHF1ZXJ5KSkuZ2V0TGlzdGVuZXIoKTtcbiAgfVxufVxuXG5jbGFzcyBMb2FkQmFsYW5jZXJQcm92aWRlciB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZ2V0Q2xpZW50KFxuICAgIGF3czogU2RrUHJvdmlkZXIsXG4gICAgcXVlcnk6IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5LFxuICApOiBQcm9taXNlPExvYWRCYWxhbmNlclByb3ZpZGVyPiB7XG4gICAgY29uc3QgY2xpZW50ID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsoYXdzLCBxdWVyeSkpLmVsYnYyKCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSBxdWVyeS5saXN0ZW5lckFyblxuICAgICAgICA/IC8vIEFzc2VydCB3ZSdyZSBzdXJlIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHNvIGl0IHRocm93cyBpZiBub3RcbiAgICAgICAgKGF3YWl0IGNsaWVudC5kZXNjcmliZUxpc3RlbmVycyh7IExpc3RlbmVyQXJuczogW3F1ZXJ5Lmxpc3RlbmVyQXJuXSB9KSkuTGlzdGVuZXJzIVswXSFcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gbmV3IExvYWRCYWxhbmNlclByb3ZpZGVyKFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHsgLi4ucXVlcnksIGxvYWRCYWxhbmNlckFybjogbGlzdGVuZXI/LkxvYWRCYWxhbmNlckFybiB8fCBxdWVyeS5sb2FkQmFsYW5jZXJBcm4gfSxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBObyBsb2FkIGJhbGFuY2VyIGxpc3RlbmVycyBmb3VuZCBtYXRjaGluZyBhcm4gJHtxdWVyeS5saXN0ZW5lckFybn1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogSUVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWx0ZXI6IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXI/OiBMaXN0ZW5lcixcbiAgKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMb2FkQmFsYW5jZXIoKTogUHJvbWlzZTxMb2FkQmFsYW5jZXI+IHtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXJzID0gYXdhaXQgdGhpcy5nZXRMb2FkQmFsYW5jZXJzKCk7XG5cbiAgICBpZiAobG9hZEJhbGFuY2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgTm8gbG9hZCBiYWxhbmNlcnMgZm91bmQgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcil9YCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRCYWxhbmNlcnMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICBgTXVsdGlwbGUgbG9hZCBiYWxhbmNlcnMgZm91bmQgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcil9IC0gcGxlYXNlIHByb3ZpZGUgbW9yZSBzcGVjaWZpYyBjcml0ZXJpYWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBsb2FkQmFsYW5jZXJzWzBdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExpc3RlbmVyKCk6IFByb21pc2U8TG9hZEJhbGFuY2VyTGlzdGVuZXJDb250ZXh0UmVzcG9uc2U+IHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbG9hZEJhbGFuY2VyID0gYXdhaXQgdGhpcy5nZXRMb2FkQmFsYW5jZXIoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaXN0ZW5lckFybjogdGhpcy5saXN0ZW5lci5MaXN0ZW5lckFybiEsXG4gICAgICAgICAgbGlzdGVuZXJQb3J0OiB0aGlzLmxpc3RlbmVyLlBvcnQhLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IGxvYWRCYWxhbmNlci5TZWN1cml0eUdyb3VwcyB8fCBbXSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYE5vIGFzc29jaWF0ZWQgbG9hZCBiYWxhbmNlciBmb3VuZCBmb3IgbGlzdGVuZXIgYXJuICR7dGhpcy5maWx0ZXIubGlzdGVuZXJBcm59YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VycyA9IGF3YWl0IHRoaXMuZ2V0TG9hZEJhbGFuY2VycygpO1xuICAgIGlmIChsb2FkQmFsYW5jZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICBgTm8gYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2VycyBmb3VuZCBmb3IgbG9hZCBiYWxhbmNlciBsaXN0ZW5lciBxdWVyeSAke0pTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lcnMgPSAoYXdhaXQgdGhpcy5nZXRMaXN0ZW5lcnNGb3JMb2FkQmFsYW5jZXJzKGxvYWRCYWxhbmNlcnMpKS5maWx0ZXIoKGxpc3RlbmVyKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoIXRoaXMuZmlsdGVyLmxpc3RlbmVyUG9ydCB8fCBsaXN0ZW5lci5Qb3J0ID09PSB0aGlzLmZpbHRlci5saXN0ZW5lclBvcnQpICYmXG4gICAgICAgICghdGhpcy5maWx0ZXIubGlzdGVuZXJQcm90b2NvbCB8fCBsaXN0ZW5lci5Qcm90b2NvbCA9PT0gdGhpcy5maWx0ZXIubGlzdGVuZXJQcm90b2NvbClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBObyBsb2FkIGJhbGFuY2VyIGxpc3RlbmVycyBmb3VuZCBtYXRjaGluZyAke0pTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyKX1gKTtcbiAgICB9XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihcbiAgICAgICAgYE11bHRpcGxlIGxvYWQgYmFsYW5jZXIgbGlzdGVuZXJzIGZvdW5kIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIpfSAtIHBsZWFzZSBwcm92aWRlIG1vcmUgc3BlY2lmaWMgY3JpdGVyaWFgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJBcm46IGxpc3RlbmVyc1swXS5MaXN0ZW5lckFybiEsXG4gICAgICBsaXN0ZW5lclBvcnQ6IGxpc3RlbmVyc1swXS5Qb3J0ISxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHM6XG4gICAgICAgIGxvYWRCYWxhbmNlcnMuZmluZCgobGIpID0+IGxpc3RlbmVyc1swXS5Mb2FkQmFsYW5jZXJBcm4gPT09IGxiLkxvYWRCYWxhbmNlckFybik/LlNlY3VyaXR5R3JvdXBzIHx8IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldExvYWRCYWxhbmNlcnMoKSB7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VyQXJucyA9IHRoaXMuZmlsdGVyLmxvYWRCYWxhbmNlckFybiA/IFt0aGlzLmZpbHRlci5sb2FkQmFsYW5jZXJBcm5dIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlcnMgPSAoXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5wYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2Vycyh7XG4gICAgICAgIExvYWRCYWxhbmNlckFybnM6IGxvYWRCYWxhbmNlckFybnMsXG4gICAgICB9KVxuICAgICkuZmlsdGVyKChsYikgPT4gbGIuVHlwZSA9PT0gdGhpcy5maWx0ZXIubG9hZEJhbGFuY2VyVHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJCeVRhZ3MobG9hZEJhbGFuY2Vycyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbHRlckJ5VGFncyhsb2FkQmFsYW5jZXJzOiBMb2FkQmFsYW5jZXJbXSk6IFByb21pc2U8TG9hZEJhbGFuY2VyW10+IHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyLmxvYWRCYWxhbmNlclRhZ3MpIHtcbiAgICAgIHJldHVybiBsb2FkQmFsYW5jZXJzO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZGVzY3JpYmVUYWdzKGxvYWRCYWxhbmNlcnMubWFwKChsYikgPT4gbGIuTG9hZEJhbGFuY2VyQXJuISkpKVxuICAgICAgLmZpbHRlcigodGFnRGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgLy8gRm9yIGV2ZXJ5IHRhZyBpbiB0aGUgZmlsdGVyLCB0aGVyZSBpcyBzb21lIHRhZyBpbiB0aGUgTEIgdGhhdCBtYXRjaGVzIGl0LlxuICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgdGhlIHNldCBvZiB0YWdzIGluIHRoZSBmaWx0ZXIgaXMgYSBzdWJzZXQgb2YgdGhlIHNldCBvZiB0YWdzIGluIHRoZSBMQi5cbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyLmxvYWRCYWxhbmNlclRhZ3MhLmV2ZXJ5KChmaWx0ZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGFnRGVzY3JpcHRpb24uVGFncz8uc29tZSgodGFnKSA9PlxuICAgICAgICAgICAgZmlsdGVyLmtleSA9PT0gdGFnLktleSAmJiBmaWx0ZXIudmFsdWUgPT09IHRhZy5WYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5mbGF0TWFwKCh0YWcpID0+IGxvYWRCYWxhbmNlcnMuZmlsdGVyKChsb2FkQmFsYW5jZXIpID0+IHRhZy5SZXNvdXJjZUFybiA9PT0gbG9hZEJhbGFuY2VyLkxvYWRCYWxhbmNlckFybikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGFnIGRlc2NyaXB0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlcy4gVGhlIEFQSSBkb2Vzbid0IHN1cHBvcnRcbiAgICogcGFnaW5hdGlvbiwgc28gdGhpcyBmdW5jdGlvbiBicmVha3MgdGhlIHJlc291cmNlIGxpc3QgaW50byBjaHVua3MgYW5kIGlzc3Vlc1xuICAgKiB0aGUgYXBwcm9wcmlhdGUgcmVxdWVzdHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlc2NyaWJlVGFncyhyZXNvdXJjZUFybnM6IHN0cmluZ1tdKTogUHJvbWlzZTxUYWdEZXNjcmlwdGlvbltdPiB7XG4gICAgLy8gTWF4IG9mIDIwIHJlc291cmNlIGFybnMgcGVyIHJlcXVlc3QuXG4gICAgY29uc3QgY2h1bmtTaXplID0gMjA7XG4gICAgY29uc3QgdGFncyA9IEFycmF5PFRhZ0Rlc2NyaXB0aW9uPigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzb3VyY2VBcm5zLmxlbmd0aDsgaSArPSBjaHVua1NpemUpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gcmVzb3VyY2VBcm5zLnNsaWNlKGksIE1hdGgubWluKGkgKyBjaHVua1NpemUsIHJlc291cmNlQXJucy5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGNodW5rVGFncyA9IGF3YWl0IHRoaXMuY2xpZW50LmRlc2NyaWJlVGFncyh7XG4gICAgICAgIFJlc291cmNlQXJuczogY2h1bmssXG4gICAgICB9KTtcblxuICAgICAgdGFncy5wdXNoKC4uLihjaHVua1RhZ3MuVGFnRGVzY3JpcHRpb25zIHx8IFtdKSk7XG4gICAgfVxuICAgIHJldHVybiB0YWdzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMaXN0ZW5lcnNGb3JMb2FkQmFsYW5jZXJzKGxvYWRCYWxhbmNlcnM6IExvYWRCYWxhbmNlcltdKTogUHJvbWlzZTxMaXN0ZW5lcltdPiB7XG4gICAgY29uc3QgbGlzdGVuZXJzOiBMaXN0ZW5lcltdID0gW107XG4gICAgZm9yIChjb25zdCBsb2FkQmFsYW5jZXIgb2YgbG9hZEJhbGFuY2Vycy5tYXAoKGxiKSA9PiBsYi5Mb2FkQmFsYW5jZXJBcm4pKSB7XG4gICAgICBsaXN0ZW5lcnMucHVzaCguLi4oYXdhaXQgdGhpcy5jbGllbnQucGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyh7IExvYWRCYWxhbmNlckFybjogbG9hZEJhbGFuY2VyIH0pKSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SecurityGroupContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { SecurityGroupContextResponse } from '@aws-cdk/cx-api';
|
|
3
|
+
import { type SdkProvider } from '../api/aws-auth/sdk-provider';
|
|
4
|
+
import type { ContextProviderPlugin } from '../api/plugin';
|
|
5
|
+
export declare class SecurityGroupContextProviderPlugin implements ContextProviderPlugin {
|
|
6
|
+
private readonly aws;
|
|
7
|
+
constructor(aws: SdkProvider);
|
|
8
|
+
getValue(args: SecurityGroupContextQuery): Promise<SecurityGroupContextResponse>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecurityGroupContextProviderPlugin = void 0;
|
|
4
|
+
exports.hasAllTrafficEgress = hasAllTrafficEgress;
|
|
5
|
+
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
6
|
+
const error_1 = require("../toolkit/error");
|
|
7
|
+
class SecurityGroupContextProviderPlugin {
|
|
8
|
+
constructor(aws) {
|
|
9
|
+
this.aws = aws;
|
|
10
|
+
}
|
|
11
|
+
async getValue(args) {
|
|
12
|
+
var _a;
|
|
13
|
+
if (args.securityGroupId && args.securityGroupName) {
|
|
14
|
+
throw new error_1.ContextProviderError("'securityGroupId' and 'securityGroupName' can not be specified both when looking up a security group");
|
|
15
|
+
}
|
|
16
|
+
if (!args.securityGroupId && !args.securityGroupName) {
|
|
17
|
+
throw new error_1.ContextProviderError("'securityGroupId' or 'securityGroupName' must be specified to look up a security group");
|
|
18
|
+
}
|
|
19
|
+
const ec2 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).ec2();
|
|
20
|
+
const filters = [];
|
|
21
|
+
if (args.vpcId) {
|
|
22
|
+
filters.push({
|
|
23
|
+
Name: 'vpc-id',
|
|
24
|
+
Values: [args.vpcId],
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (args.securityGroupName) {
|
|
28
|
+
filters.push({
|
|
29
|
+
Name: 'group-name',
|
|
30
|
+
Values: [args.securityGroupName],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const response = await ec2.describeSecurityGroups({
|
|
34
|
+
GroupIds: args.securityGroupId ? [args.securityGroupId] : undefined,
|
|
35
|
+
Filters: filters.length > 0 ? filters : undefined,
|
|
36
|
+
});
|
|
37
|
+
const securityGroups = (_a = response.SecurityGroups) !== null && _a !== void 0 ? _a : [];
|
|
38
|
+
if (securityGroups.length === 0) {
|
|
39
|
+
throw new error_1.ContextProviderError(`No security groups found matching ${JSON.stringify(args)}`);
|
|
40
|
+
}
|
|
41
|
+
if (securityGroups.length > 1) {
|
|
42
|
+
throw new error_1.ContextProviderError(`More than one security groups found matching ${JSON.stringify(args)}`);
|
|
43
|
+
}
|
|
44
|
+
const [securityGroup] = securityGroups;
|
|
45
|
+
return {
|
|
46
|
+
securityGroupId: securityGroup.GroupId,
|
|
47
|
+
allowAllOutbound: hasAllTrafficEgress(securityGroup),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.SecurityGroupContextProviderPlugin = SecurityGroupContextProviderPlugin;
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
function hasAllTrafficEgress(securityGroup) {
|
|
56
|
+
var _a, _b, _c;
|
|
57
|
+
let hasAllTrafficCidrV4 = false;
|
|
58
|
+
let hasAllTrafficCidrV6 = false;
|
|
59
|
+
for (const ipPermission of (_a = securityGroup.IpPermissionsEgress) !== null && _a !== void 0 ? _a : []) {
|
|
60
|
+
const isAllProtocols = ipPermission.IpProtocol === '-1';
|
|
61
|
+
if (isAllProtocols && ((_b = ipPermission.IpRanges) === null || _b === void 0 ? void 0 : _b.some((m) => m.CidrIp === '0.0.0.0/0'))) {
|
|
62
|
+
hasAllTrafficCidrV4 = true;
|
|
63
|
+
}
|
|
64
|
+
if (isAllProtocols && ((_c = ipPermission.Ipv6Ranges) === null || _c === void 0 ? void 0 : _c.some((m) => m.CidrIpv6 === '::/0'))) {
|
|
65
|
+
hasAllTrafficCidrV6 = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return hasAllTrafficCidrV4 && hasAllTrafficCidrV6;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VjdXJpdHktZ3JvdXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStEQSxrREFpQkM7QUE3RUQsK0RBQXdGO0FBRXhGLDRDQUF3RDtBQUV4RCxNQUFhLGtDQUFrQztJQUM3QyxZQUE2QixHQUFnQjtRQUFoQixRQUFHLEdBQUgsR0FBRyxDQUFhO0lBQUcsQ0FBQztJQUVqRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQStCOztRQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLDRCQUFvQixDQUM1QixzR0FBc0csQ0FDdkcsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSw0QkFBb0IsQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1FBQzNILENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxxQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFakUsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3JCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUNqQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsc0JBQXNCLENBQUM7WUFDaEQsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ25FLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2xELENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLE1BQUEsUUFBUSxDQUFDLGNBQWMsbUNBQUksRUFBRSxDQUFDO1FBQ3JELElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksNEJBQW9CLENBQUMscUNBQXFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLDRCQUFvQixDQUFDLGdEQUFnRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUV2QyxPQUFPO1lBQ0wsZUFBZSxFQUFFLGFBQWEsQ0FBQyxPQUFRO1lBQ3ZDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztTQUNyRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbkRELGdGQW1EQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsYUFBNEI7O0lBQzlELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssTUFBTSxZQUFZLElBQUksTUFBQSxhQUFhLENBQUMsbUJBQW1CLG1DQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25FLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO1FBRXhELElBQUksY0FBYyxLQUFJLE1BQUEsWUFBWSxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUNuRixtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksY0FBYyxLQUFJLE1BQUEsWUFBWSxDQUFDLFVBQVUsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUNsRixtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlY3VyaXR5R3JvdXBDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBTZWN1cml0eUdyb3VwQ29udGV4dFJlc3BvbnNlIH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyLCBTZWN1cml0eUdyb3VwIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjMic7XG5pbXBvcnQgeyB0eXBlIFNka1Byb3ZpZGVyLCBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L2Vycm9yJztcblxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5R3JvdXBDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHt9XG5cbiAgYXN5bmMgZ2V0VmFsdWUoYXJnczogU2VjdXJpdHlHcm91cENvbnRleHRRdWVyeSk6IFByb21pc2U8U2VjdXJpdHlHcm91cENvbnRleHRSZXNwb25zZT4ge1xuICAgIGlmIChhcmdzLnNlY3VyaXR5R3JvdXBJZCAmJiBhcmdzLnNlY3VyaXR5R3JvdXBOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoXG4gICAgICAgIFwiJ3NlY3VyaXR5R3JvdXBJZCcgYW5kICdzZWN1cml0eUdyb3VwTmFtZScgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYm90aCB3aGVuIGxvb2tpbmcgdXAgYSBzZWN1cml0eSBncm91cFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWFyZ3Muc2VjdXJpdHlHcm91cElkICYmICFhcmdzLnNlY3VyaXR5R3JvdXBOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoXCInc2VjdXJpdHlHcm91cElkJyBvciAnc2VjdXJpdHlHcm91cE5hbWUnIG11c3QgYmUgc3BlY2lmaWVkIHRvIGxvb2sgdXAgYSBzZWN1cml0eSBncm91cFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBlYzIgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLmVjMigpO1xuXG4gICAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgICBpZiAoYXJncy52cGNJZCkge1xuICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgTmFtZTogJ3ZwYy1pZCcsXG4gICAgICAgIFZhbHVlczogW2FyZ3MudnBjSWRdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChhcmdzLnNlY3VyaXR5R3JvdXBOYW1lKSB7XG4gICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICBOYW1lOiAnZ3JvdXAtbmFtZScsXG4gICAgICAgIFZhbHVlczogW2FyZ3Muc2VjdXJpdHlHcm91cE5hbWVdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlYzIuZGVzY3JpYmVTZWN1cml0eUdyb3Vwcyh7XG4gICAgICBHcm91cElkczogYXJncy5zZWN1cml0eUdyb3VwSWQgPyBbYXJncy5zZWN1cml0eUdyb3VwSWRdIDogdW5kZWZpbmVkLFxuICAgICAgRmlsdGVyczogZmlsdGVycy5sZW5ndGggPiAwID8gZmlsdGVycyA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBzID0gcmVzcG9uc2UuU2VjdXJpdHlHcm91cHMgPz8gW107XG4gICAgaWYgKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBObyBzZWN1cml0eSBncm91cHMgZm91bmQgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgICB9XG5cbiAgICBpZiAoc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBNb3JlIHRoYW4gb25lIHNlY3VyaXR5IGdyb3VwcyBmb3VuZCBtYXRjaGluZyAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IFtzZWN1cml0eUdyb3VwXSA9IHNlY3VyaXR5R3JvdXBzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBJZDogc2VjdXJpdHlHcm91cC5Hcm91cElkISxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IGhhc0FsbFRyYWZmaWNFZ3Jlc3Moc2VjdXJpdHlHcm91cCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQWxsVHJhZmZpY0VncmVzcyhzZWN1cml0eUdyb3VwOiBTZWN1cml0eUdyb3VwKSB7XG4gIGxldCBoYXNBbGxUcmFmZmljQ2lkclY0ID0gZmFsc2U7XG4gIGxldCBoYXNBbGxUcmFmZmljQ2lkclY2ID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBpcFBlcm1pc3Npb24gb2Ygc2VjdXJpdHlHcm91cC5JcFBlcm1pc3Npb25zRWdyZXNzID8/IFtdKSB7XG4gICAgY29uc3QgaXNBbGxQcm90b2NvbHMgPSBpcFBlcm1pc3Npb24uSXBQcm90b2NvbCA9PT0gJy0xJztcblxuICAgIGlmIChpc0FsbFByb3RvY29scyAmJiBpcFBlcm1pc3Npb24uSXBSYW5nZXM/LnNvbWUoKG0pID0+IG0uQ2lkcklwID09PSAnMC4wLjAuMC8wJykpIHtcbiAgICAgIGhhc0FsbFRyYWZmaWNDaWRyVjQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc0FsbFByb3RvY29scyAmJiBpcFBlcm1pc3Npb24uSXB2NlJhbmdlcz8uc29tZSgobSkgPT4gbS5DaWRySXB2NiA9PT0gJzo6LzAnKSkge1xuICAgICAgaGFzQWxsVHJhZmZpY0NpZHJWNiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc0FsbFRyYWZmaWNDaWRyVjQgJiYgaGFzQWxsVHJhZmZpY0NpZHJWNjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SSMParameterContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import { type SdkProvider } from '../api/aws-auth/sdk-provider';
|
|
3
|
+
import { ContextProviderPlugin } from '../api/plugin';
|
|
4
|
+
/**
|
|
5
|
+
* Plugin to read arbitrary SSM parameter names
|
|
6
|
+
*/
|
|
7
|
+
export declare class SSMContextProviderPlugin implements ContextProviderPlugin {
|
|
8
|
+
private readonly aws;
|
|
9
|
+
constructor(aws: SdkProvider);
|
|
10
|
+
getValue(args: SSMParameterContextQuery): Promise<unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Gets the value of an SSM Parameter, while not throwin if the parameter does not exist.
|
|
13
|
+
* @param account the account in which the SSM Parameter is expected to be.
|
|
14
|
+
* @param region the region in which the SSM Parameter is expected to be.
|
|
15
|
+
* @param parameterName the name of the SSM Parameter
|
|
16
|
+
* @param lookupRoleArn the ARN of the lookup role.
|
|
17
|
+
*
|
|
18
|
+
* @returns the result of the ``GetParameter`` operation.
|
|
19
|
+
*
|
|
20
|
+
* @throws Error if a service error (other than ``ParameterNotFound``) occurs.
|
|
21
|
+
*/
|
|
22
|
+
private getSsmParameterValue;
|
|
23
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SSMContextProviderPlugin = void 0;
|
|
4
|
+
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
5
|
+
const logging_1 = require("../logging");
|
|
6
|
+
const error_1 = require("../toolkit/error");
|
|
7
|
+
/**
|
|
8
|
+
* Plugin to read arbitrary SSM parameter names
|
|
9
|
+
*/
|
|
10
|
+
class SSMContextProviderPlugin {
|
|
11
|
+
constructor(aws) {
|
|
12
|
+
this.aws = aws;
|
|
13
|
+
}
|
|
14
|
+
async getValue(args) {
|
|
15
|
+
const region = args.region;
|
|
16
|
+
const account = args.account;
|
|
17
|
+
if (!('parameterName' in args)) {
|
|
18
|
+
throw new error_1.ContextProviderError('parameterName must be provided in props for SSMContextProviderPlugin');
|
|
19
|
+
}
|
|
20
|
+
const parameterName = args.parameterName;
|
|
21
|
+
(0, logging_1.debug)(`Reading SSM parameter ${account}:${region}:${parameterName}`);
|
|
22
|
+
const response = await this.getSsmParameterValue(args);
|
|
23
|
+
const parameterNotFound = !response.Parameter || response.Parameter.Value === undefined;
|
|
24
|
+
const suppressError = 'ignoreErrorOnMissingContext' in args && args.ignoreErrorOnMissingContext;
|
|
25
|
+
if (parameterNotFound && suppressError && 'dummyValue' in args) {
|
|
26
|
+
return args.dummyValue;
|
|
27
|
+
}
|
|
28
|
+
if (parameterNotFound) {
|
|
29
|
+
throw new error_1.ContextProviderError(`SSM parameter not available in account ${account}, region ${region}: ${parameterName}`);
|
|
30
|
+
}
|
|
31
|
+
// will not be undefined because we've handled undefined cases above
|
|
32
|
+
return response.Parameter.Value;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Gets the value of an SSM Parameter, while not throwin if the parameter does not exist.
|
|
36
|
+
* @param account the account in which the SSM Parameter is expected to be.
|
|
37
|
+
* @param region the region in which the SSM Parameter is expected to be.
|
|
38
|
+
* @param parameterName the name of the SSM Parameter
|
|
39
|
+
* @param lookupRoleArn the ARN of the lookup role.
|
|
40
|
+
*
|
|
41
|
+
* @returns the result of the ``GetParameter`` operation.
|
|
42
|
+
*
|
|
43
|
+
* @throws Error if a service error (other than ``ParameterNotFound``) occurs.
|
|
44
|
+
*/
|
|
45
|
+
async getSsmParameterValue(args) {
|
|
46
|
+
const ssm = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).ssm();
|
|
47
|
+
try {
|
|
48
|
+
return await ssm.getParameter({ Name: args.parameterName });
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
if (e.name === 'ParameterNotFound') {
|
|
52
|
+
return { $metadata: {} };
|
|
53
|
+
}
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.SSMContextProviderPlugin = SSMContextProviderPlugin;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzc20tcGFyYW1ldGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwrREFBd0Y7QUFFeEYsd0NBQW1DO0FBQ25DLDRDQUF3RDtBQUV4RDs7R0FFRztBQUNILE1BQWEsd0JBQXdCO0lBQ25DLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFBRyxDQUFDO0lBRTFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBOEI7UUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRTdCLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSw0QkFBb0IsQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUEsZUFBSyxFQUFDLHlCQUF5QixPQUFPLElBQUksTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO1FBQ2pHLE1BQU0sYUFBYSxHQUFHLDZCQUE2QixJQUFJLElBQUksSUFBSyxJQUFJLENBQUMsMkJBQXVDLENBQUM7UUFDN0csSUFBSSxpQkFBaUIsSUFBSSxhQUFhLElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSw0QkFBb0IsQ0FBQywwQ0FBMEMsT0FBTyxZQUFZLE1BQU0sS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFILENBQUM7UUFDRCxvRUFBb0U7UUFDcEUsT0FBTyxRQUFRLENBQUMsU0FBVSxDQUFDLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUE4QjtRQUMvRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxxQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFLENBQUM7Z0JBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWhERCw0REFnREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNTTVBhcmFtZXRlckNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NtJztcbmltcG9ydCB7IHR5cGUgU2RrUHJvdmlkZXIsIGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi9sb2dnaW5nJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC9lcnJvcic7XG5cbi8qKlxuICogUGx1Z2luIHRvIHJlYWQgYXJiaXRyYXJ5IFNTTSBwYXJhbWV0ZXIgbmFtZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFNTTUNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlcikge31cblxuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoYXJnczogU1NNUGFyYW1ldGVyQ29udGV4dFF1ZXJ5KSB7XG4gICAgY29uc3QgcmVnaW9uID0gYXJncy5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IGFyZ3MuYWNjb3VudDtcblxuICAgIGlmICghKCdwYXJhbWV0ZXJOYW1lJyBpbiBhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKCdwYXJhbWV0ZXJOYW1lIG11c3QgYmUgcHJvdmlkZWQgaW4gcHJvcHMgZm9yIFNTTUNvbnRleHRQcm92aWRlclBsdWdpbicpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gYXJncy5wYXJhbWV0ZXJOYW1lO1xuICAgIGRlYnVnKGBSZWFkaW5nIFNTTSBwYXJhbWV0ZXIgJHthY2NvdW50fToke3JlZ2lvbn06JHtwYXJhbWV0ZXJOYW1lfWApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFNzbVBhcmFtZXRlclZhbHVlKGFyZ3MpO1xuICAgIGNvbnN0IHBhcmFtZXRlck5vdEZvdW5kOiBib29sZWFuID0gIXJlc3BvbnNlLlBhcmFtZXRlciB8fCByZXNwb25zZS5QYXJhbWV0ZXIuVmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdXBwcmVzc0Vycm9yID0gJ2lnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCcgaW4gYXJncyAmJiAoYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQgYXMgYm9vbGVhbik7XG4gICAgaWYgKHBhcmFtZXRlck5vdEZvdW5kICYmIHN1cHByZXNzRXJyb3IgJiYgJ2R1bW15VmFsdWUnIGluIGFyZ3MpIHtcbiAgICAgIHJldHVybiBhcmdzLmR1bW15VmFsdWU7XG4gICAgfVxuICAgIGlmIChwYXJhbWV0ZXJOb3RGb3VuZCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBTU00gcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgaW4gYWNjb3VudCAke2FjY291bnR9LCByZWdpb24gJHtyZWdpb259OiAke3BhcmFtZXRlck5hbWV9YCk7XG4gICAgfVxuICAgIC8vIHdpbGwgbm90IGJlIHVuZGVmaW5lZCBiZWNhdXNlIHdlJ3ZlIGhhbmRsZWQgdW5kZWZpbmVkIGNhc2VzIGFib3ZlXG4gICAgcmV0dXJuIHJlc3BvbnNlLlBhcmFtZXRlciEuVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gU1NNIFBhcmFtZXRlciwgd2hpbGUgbm90IHRocm93aW4gaWYgdGhlIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdC5cbiAgICogQHBhcmFtIGFjY291bnQgICAgICAgdGhlIGFjY291bnQgaW4gd2hpY2ggdGhlIFNTTSBQYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUuXG4gICAqIEBwYXJhbSByZWdpb24gICAgICAgIHRoZSByZWdpb24gaW4gd2hpY2ggdGhlIFNTTSBQYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIHRoZSBuYW1lIG9mIHRoZSBTU00gUGFyYW1ldGVyXG4gICAqIEBwYXJhbSBsb29rdXBSb2xlQXJuIHRoZSBBUk4gb2YgdGhlIGxvb2t1cCByb2xlLlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBgYEdldFBhcmFtZXRlcmBgIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHRocm93cyBFcnJvciBpZiBhIHNlcnZpY2UgZXJyb3IgKG90aGVyIHRoYW4gYGBQYXJhbWV0ZXJOb3RGb3VuZGBgKSBvY2N1cnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFNzbVBhcmFtZXRlclZhbHVlKGFyZ3M6IFNTTVBhcmFtZXRlckNvbnRleHRRdWVyeSk6IFByb21pc2U8R2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dD4ge1xuICAgIGNvbnN0IHNzbSA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkuc3NtKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBzc20uZ2V0UGFyYW1ldGVyKHsgTmFtZTogYXJncy5wYXJhbWV0ZXJOYW1lIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUubmFtZSA9PT0gJ1BhcmFtZXRlck5vdEZvdW5kJykge1xuICAgICAgICByZXR1cm4geyAkbWV0YWRhdGE6IHt9IH07XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { VpcContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import { type VpcContextResponse } from '@aws-cdk/cx-api';
|
|
3
|
+
import { type SdkProvider } from '../api/aws-auth/sdk-provider';
|
|
4
|
+
import { ContextProviderPlugin } from '../api/plugin';
|
|
5
|
+
export declare class VpcNetworkContextProviderPlugin implements ContextProviderPlugin {
|
|
6
|
+
private readonly aws;
|
|
7
|
+
constructor(aws: SdkProvider);
|
|
8
|
+
getValue(args: VpcContextQuery): Promise<VpcContextResponse>;
|
|
9
|
+
private findVpc;
|
|
10
|
+
private readVpcProps;
|
|
11
|
+
}
|