@aws-cdk/toolkit-lib 0.3.2 → 0.3.4
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/api-extractor.json +3 -0
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/bootstrap/index.d.ts +1 -1
- package/lib/actions/bootstrap/index.js +5 -5
- package/lib/actions/bootstrap/private/helpers.js +3 -3
- package/lib/actions/deploy/index.d.ts +1 -1
- package/lib/actions/deploy/index.js +1 -1
- package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
- package/lib/actions/deploy/private/deploy-options.js +1 -1
- package/lib/actions/deploy/private/helpers.d.ts +3 -2
- package/lib/actions/deploy/private/helpers.js +3 -3
- package/lib/actions/diff/index.d.ts +1 -1
- package/lib/actions/diff/index.js +1 -1
- package/lib/actions/diff/private/helpers.d.ts +5 -9
- package/lib/actions/diff/private/helpers.js +13 -30
- package/lib/actions/refactor/index.d.ts +12 -0
- package/lib/actions/refactor/index.js +1 -1
- package/lib/api/aws-auth/account-cache.d.ts +41 -0
- package/lib/api/aws-auth/account-cache.js +108 -0
- package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
- package/lib/api/aws-auth/awscli-compatible.js +250 -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 +38 -0
- package/lib/api/aws-auth/credential-plugins.js +154 -0
- package/lib/api/aws-auth/private/index.d.ts +11 -0
- package/lib/api/aws-auth/private/index.js +37 -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/proxy-agent.d.ts +13 -0
- package/lib/api/aws-auth/proxy-agent.js +54 -0
- package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
- package/lib/api/aws-auth/sdk-logger.js +128 -0
- package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
- package/lib/api/aws-auth/sdk-provider.js +373 -0
- package/lib/api/aws-auth/sdk.d.ts +235 -0
- package/lib/api/aws-auth/sdk.js +391 -0
- package/lib/api/aws-auth/tracing.d.ts +11 -0
- package/lib/api/aws-auth/tracing.js +60 -0
- package/lib/api/aws-auth/user-agent.d.ts +7 -0
- package/lib/api/aws-auth/user-agent.js +20 -0
- package/lib/api/aws-auth/util.d.ts +6 -0
- package/lib/api/aws-auth/util.js +21 -0
- package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
- package/lib/api/bootstrap/bootstrap-environment.js +323 -0
- package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
- package/lib/api/bootstrap/bootstrap-props.js +14 -0
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
- package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
- package/lib/api/bootstrap/index.d.ts +3 -0
- package/lib/api/bootstrap/index.js +23 -0
- package/lib/api/bootstrap/legacy-template.d.ts +2 -0
- package/lib/api/bootstrap/legacy-template.js +82 -0
- package/lib/api/cloud-assembly/environment.d.ts +43 -0
- package/lib/api/cloud-assembly/environment.js +127 -0
- package/lib/api/cloud-assembly/index.d.ts +1 -1
- package/lib/api/cloud-assembly/index.js +5 -4
- package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
- package/lib/api/cloud-assembly/private/context-aware-source.js +7 -7
- package/lib/api/cloud-assembly/private/exec.js +3 -3
- package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
- package/lib/api/cloud-assembly/private/prepare-source.js +17 -15
- package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
- package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
- package/lib/api/cloud-assembly/private/source-builder.d.ts +10 -8
- package/lib/api/cloud-assembly/private/source-builder.js +43 -24
- package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
- package/lib/api/cloud-assembly/private/stack-assembly.js +16 -15
- package/lib/api/cloud-assembly/source-builder.d.ts +19 -0
- package/lib/api/cloud-assembly/source-builder.js +1 -1
- package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
- package/lib/api/cloud-assembly/stack-assembly.js +139 -0
- package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
- package/lib/api/cloud-assembly/stack-collection.js +112 -0
- package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
- package/lib/api/cloud-assembly/stack-selector.js +62 -5
- package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
- package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
- package/lib/api/cloudformation/index.d.ts +4 -0
- package/lib/api/cloudformation/index.js +21 -0
- package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
- package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
- package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
- package/lib/api/cloudformation/stack-helpers.js +163 -0
- package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
- package/lib/api/cloudformation/template-body-parameter.js +104 -0
- package/lib/api/context.d.ts +40 -0
- package/lib/api/context.js +84 -0
- package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
- package/lib/api/deployments/asset-manifest-builder.js +33 -0
- package/lib/api/deployments/asset-publishing.d.ts +60 -0
- package/lib/api/deployments/asset-publishing.js +144 -0
- package/lib/api/deployments/assets.d.ts +11 -0
- package/lib/api/deployments/assets.js +108 -0
- package/lib/api/deployments/cfn-api.d.ts +145 -0
- package/lib/api/deployments/cfn-api.js +444 -0
- package/lib/api/deployments/checks.d.ts +9 -0
- package/lib/api/deployments/checks.js +72 -0
- package/lib/api/deployments/deploy-stack.d.ts +164 -0
- package/lib/api/deployments/deploy-stack.js +490 -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 +289 -0
- package/lib/api/deployments/deployments.js +355 -0
- package/lib/api/deployments/index.d.ts +6 -0
- package/lib/api/deployments/index.js +27 -0
- package/lib/api/diff/diff-formatter.d.ts +147 -0
- package/lib/api/diff/diff-formatter.js +225 -0
- package/lib/api/diff/index.d.ts +1 -0
- package/lib/api/diff/index.js +18 -0
- package/lib/api/environment/environment-access.d.ts +139 -0
- package/lib/api/environment/environment-access.js +205 -0
- package/lib/api/environment/environment-resources.d.ts +75 -0
- package/lib/api/environment/environment-resources.js +213 -0
- package/lib/api/environment/index.d.ts +3 -0
- package/lib/api/environment/index.js +20 -0
- package/lib/api/environment/placeholders.d.ts +10 -0
- package/lib/api/environment/placeholders.js +23 -0
- package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
- package/lib/api/garbage-collection/garbage-collector.js +614 -0
- package/lib/api/garbage-collection/index.d.ts +3 -0
- package/lib/api/garbage-collection/index.js +21 -0
- package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
- package/lib/api/garbage-collection/progress-printer.js +80 -0
- package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
- package/lib/api/garbage-collection/stack-refresh.js +152 -0
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
- package/lib/api/hotswap/code-build-projects.d.ts +4 -0
- package/lib/api/hotswap/code-build-projects.js +62 -0
- package/lib/api/hotswap/common.d.ts +89 -0
- package/lib/api/hotswap/common.js +137 -0
- package/lib/api/hotswap/ecs-services.d.ts +4 -0
- package/lib/api/hotswap/ecs-services.js +159 -0
- package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
- package/lib/api/hotswap/hotswap-deployments.js +441 -0
- package/lib/api/hotswap/index.d.ts +2 -0
- package/lib/api/hotswap/index.js +19 -0
- package/lib/api/hotswap/lambda-functions.d.ts +4 -0
- package/lib/api/hotswap/lambda-functions.js +297 -0
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
- package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
- package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
- package/lib/api/index.d.ts +24 -0
- package/lib/api/index.js +41 -0
- package/lib/api/io/index.d.ts +3 -1
- package/lib/api/io/index.js +18 -1
- package/lib/api/io/io-host.d.ts +15 -0
- package/lib/api/io/io-host.js +3 -0
- package/lib/api/io/io-message.d.ts +76 -0
- package/lib/api/io/io-message.js +3 -0
- package/lib/api/io/private/index.d.ts +7 -1
- package/lib/api/io/private/index.js +8 -5
- package/lib/api/io/private/io-default-messages.d.ts +21 -0
- package/lib/api/io/private/io-default-messages.js +59 -0
- package/lib/api/io/private/io-helper.d.ts +32 -0
- package/lib/api/io/private/io-helper.js +51 -0
- package/lib/api/io/private/level-priority.d.ts +11 -0
- package/lib/api/io/private/level-priority.js +33 -0
- package/lib/api/io/private/message-maker.d.ts +89 -0
- package/lib/api/io/private/message-maker.js +60 -0
- package/lib/api/io/private/messages.d.ts +178 -0
- package/lib/api/io/private/messages.js +534 -0
- package/lib/api/io/private/sdk-logger.d.ts +1 -1
- package/lib/api/io/private/sdk-logger.js +6 -6
- package/lib/api/io/private/span.d.ts +93 -0
- package/lib/api/io/private/span.js +87 -0
- package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
- package/lib/api/io/private/testing/fake-io-host.js +41 -0
- package/lib/api/io/private/testing/index.d.ts +2 -0
- package/lib/api/io/private/testing/index.js +19 -0
- package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
- package/lib/api/io/private/testing/test-io-host.js +61 -0
- package/lib/api/io/private/types.d.ts +4 -0
- package/lib/api/io/private/types.js +3 -0
- package/lib/api/io/toolkit-action.d.ts +4 -0
- package/lib/api/io/toolkit-action.js +3 -0
- package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
- package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
- package/lib/api/logs-monitor/index.d.ts +2 -0
- package/lib/api/logs-monitor/index.js +19 -0
- package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
- package/lib/api/logs-monitor/logs-monitor.js +194 -0
- package/lib/api/notices/cached-data-source.d.ts +13 -0
- package/lib/api/notices/cached-data-source.js +77 -0
- package/lib/api/notices/filter.d.ts +59 -0
- package/lib/api/notices/filter.js +189 -0
- package/lib/api/notices/index.d.ts +1 -0
- package/lib/api/notices/index.js +18 -0
- package/lib/api/notices/notices.d.ts +111 -0
- package/lib/api/notices/notices.js +131 -0
- package/lib/api/notices/types.d.ts +37 -0
- package/lib/api/notices/types.js +3 -0
- package/lib/api/notices/web-data-source.d.ts +9 -0
- package/lib/api/notices/web-data-source.js +70 -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 +70 -0
- package/lib/api/plugin/plugin.js +127 -0
- package/lib/api/private.d.ts +1 -0
- package/lib/api/private.js +18 -0
- package/lib/api/refactoring/cloudformation.d.ts +38 -0
- package/lib/api/refactoring/cloudformation.js +56 -0
- package/lib/api/refactoring/digest.d.ts +26 -0
- package/lib/api/refactoring/digest.js +175 -0
- package/lib/api/refactoring/exclude.d.ts +29 -0
- package/lib/api/refactoring/exclude.js +94 -0
- package/lib/api/refactoring/index.d.ts +32 -0
- package/lib/api/refactoring/index.js +191 -0
- package/lib/api/require-approval.d.ts +17 -0
- package/lib/api/require-approval.js +22 -0
- package/lib/api/resource-import/importer.d.ts +216 -0
- package/lib/api/resource-import/importer.js +331 -0
- package/lib/api/resource-import/index.d.ts +2 -0
- package/lib/api/resource-import/index.js +19 -0
- package/lib/api/resource-import/migrator.d.ts +26 -0
- package/lib/api/resource-import/migrator.js +73 -0
- package/lib/api/resource-metadata/index.d.ts +1 -0
- package/lib/api/resource-metadata/index.js +18 -0
- package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
- package/lib/api/resource-metadata/resource-metadata.js +42 -0
- package/lib/api/rwlock.d.ts +60 -0
- package/lib/api/rwlock.js +204 -0
- package/lib/api/settings.d.ts +26 -0
- package/lib/api/settings.js +107 -0
- package/lib/api/shared-private.d.ts +8 -6
- package/lib/api/shared-private.js +31 -12561
- package/lib/api/stack-events/index.d.ts +4 -0
- package/lib/api/stack-events/index.js +23 -0
- package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
- package/lib/api/stack-events/stack-activity-monitor.js +164 -0
- package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
- package/lib/api/stack-events/stack-event-poller.js +130 -0
- package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
- package/lib/api/stack-events/stack-progress-monitor.js +98 -0
- package/lib/api/stack-events/stack-status.d.ts +42 -0
- package/lib/api/stack-events/stack-status.js +90 -0
- package/lib/api/streams.d.ts +7 -0
- package/lib/api/streams.js +24 -0
- package/lib/api/tags.d.ts +9 -0
- package/lib/api/tags.js +10 -0
- package/lib/api/toolkit-info.d.ts +52 -0
- package/lib/api/toolkit-info.js +157 -0
- package/lib/api/tree.d.ts +31 -0
- package/lib/api/tree.js +37 -0
- package/lib/api/work-graph/index.d.ts +3 -0
- package/lib/api/work-graph/index.js +20 -0
- package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
- package/lib/api/work-graph/work-graph-builder.js +172 -0
- package/lib/api/work-graph/work-graph-types.d.ts +50 -0
- package/lib/api/work-graph/work-graph-types.js +13 -0
- package/lib/api/work-graph/work-graph.d.ts +72 -0
- package/lib/api/work-graph/work-graph.js +349 -0
- package/lib/context-providers/ami.d.ts +13 -0
- package/lib/context-providers/ami.js +52 -0
- package/lib/context-providers/availability-zones.d.ts +13 -0
- package/lib/context-providers/availability-zones.js +29 -0
- package/lib/context-providers/cc-api-provider.d.ts +30 -0
- package/lib/context-providers/cc-api-provider.js +145 -0
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
- package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
- package/lib/context-providers/hosted-zones.d.ts +12 -0
- package/lib/context-providers/hosted-zones.js +69 -0
- package/lib/context-providers/index.d.ts +44 -0
- package/lib/context-providers/index.js +128 -0
- package/lib/context-providers/keys.d.ts +13 -0
- package/lib/context-providers/keys.js +54 -0
- package/lib/context-providers/load-balancers.d.ts +20 -0
- package/lib/context-providers/load-balancers.js +161 -0
- package/lib/context-providers/security-groups.d.ts +9 -0
- package/lib/context-providers/security-groups.js +69 -0
- package/lib/context-providers/ssm-parameters.d.ts +25 -0
- package/lib/context-providers/ssm-parameters.js +61 -0
- package/lib/context-providers/vpcs.d.ts +13 -0
- package/lib/context-providers/vpcs.js +291 -0
- package/lib/index.d.ts +4 -1
- package/lib/index.js +5 -2
- package/lib/index_bg.wasm +0 -0
- package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
- package/lib/payloads/bootstrap-environment-progress.js +3 -0
- package/lib/payloads/context.d.ts +9 -0
- package/lib/payloads/context.js +3 -0
- package/lib/payloads/deploy.d.ts +50 -0
- package/lib/payloads/deploy.js +3 -0
- package/lib/payloads/destroy.d.ts +23 -0
- package/lib/payloads/destroy.js +3 -0
- package/lib/payloads/diff.d.ts +31 -0
- package/lib/payloads/diff.js +22 -0
- package/lib/payloads/hotswap.d.ts +212 -0
- package/lib/payloads/hotswap.js +43 -0
- package/lib/payloads/index.d.ts +17 -0
- package/lib/payloads/index.js +34 -0
- package/lib/payloads/list.d.ts +4 -0
- package/lib/payloads/list.js +3 -0
- package/lib/payloads/logs-monitor.d.ts +33 -0
- package/lib/payloads/logs-monitor.js +3 -0
- package/lib/payloads/progress.d.ts +14 -0
- package/lib/payloads/progress.js +3 -0
- package/lib/payloads/refactor.d.ts +14 -0
- package/lib/payloads/refactor.js +3 -0
- package/lib/payloads/rollback.d.ts +17 -0
- package/lib/payloads/rollback.js +3 -0
- package/lib/payloads/sdk-trace.d.ts +20 -0
- package/lib/payloads/sdk-trace.js +3 -0
- package/lib/payloads/stack-activity.d.ts +53 -0
- package/lib/payloads/stack-activity.js +3 -0
- package/lib/payloads/stack-details.d.ts +17 -0
- package/lib/payloads/stack-details.js +3 -0
- package/lib/payloads/synth.d.ts +7 -0
- package/lib/payloads/synth.js +3 -0
- package/lib/payloads/types.d.ts +95 -0
- package/lib/payloads/types.js +3 -0
- package/lib/payloads/watch.d.ts +27 -0
- package/lib/payloads/watch.js +3 -0
- package/lib/private/activity-printer/base.d.ts +50 -0
- package/lib/private/activity-printer/base.js +120 -0
- package/lib/private/activity-printer/current.d.ts +26 -0
- package/lib/private/activity-printer/current.js +122 -0
- package/lib/private/activity-printer/display.d.ts +13 -0
- package/lib/private/activity-printer/display.js +81 -0
- package/lib/private/activity-printer/history.d.ts +32 -0
- package/lib/private/activity-printer/history.js +109 -0
- package/lib/private/activity-printer/index.d.ts +3 -0
- package/lib/private/activity-printer/index.js +20 -0
- package/lib/private/index.d.ts +1 -0
- package/lib/private/index.js +18 -0
- package/lib/toolkit/non-interactive-io-host.js +5 -4
- package/lib/toolkit/private/index.d.ts +2 -1
- package/lib/toolkit/private/index.js +1 -1
- package/lib/toolkit/toolkit-error.d.ts +86 -0
- package/lib/toolkit/toolkit-error.js +132 -0
- package/lib/toolkit/toolkit.d.ts +2 -2
- package/lib/toolkit/toolkit.js +161 -130
- package/lib/toolkit/types.d.ts +0 -55
- package/lib/toolkit/types.js +1 -1
- 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/cloudformation.d.ts +16 -0
- package/lib/util/cloudformation.js +36 -0
- package/lib/util/content-hash.d.ts +5 -0
- package/lib/util/content-hash.js +43 -0
- package/lib/util/directories.d.ts +22 -0
- package/lib/util/directories.js +59 -0
- package/lib/util/format-error.d.ts +9 -0
- package/lib/util/format-error.js +22 -0
- package/lib/util/index.d.ts +19 -0
- package/lib/util/index.js +36 -0
- package/lib/util/json.d.ts +48 -0
- package/lib/util/json.js +68 -0
- package/lib/util/net.d.ts +9 -0
- package/lib/util/net.js +60 -0
- package/lib/util/objects.d.ts +65 -0
- package/lib/util/objects.js +230 -0
- package/lib/util/package-info.d.ts +3 -0
- package/lib/util/package-info.js +22 -0
- package/lib/util/parallel.d.ts +6 -0
- package/lib/util/parallel.js +48 -0
- package/lib/util/serialize.d.ts +27 -0
- package/lib/util/serialize.js +86 -0
- package/lib/util/string-manipulation.d.ts +18 -0
- package/lib/util/string-manipulation.js +46 -0
- package/lib/util/type-brands.d.ts +39 -0
- package/lib/util/type-brands.js +39 -0
- package/lib/util/types.d.ts +27 -0
- package/lib/util/types.js +25 -0
- package/lib/util/version-range.d.ts +2 -0
- package/lib/util/version-range.js +36 -0
- package/lib/util/yaml-cfn.d.ts +15 -0
- package/lib/util/yaml-cfn.js +58 -0
- package/package.json +26 -28
- package/tsdoc.json +15 -0
- package/lib/api/shared-private.js.map +0 -7
- package/lib/api/shared-public.d.ts +0 -2159
- package/lib/api/shared-public.js +0 -1110
- package/lib/api/shared-public.js.map +0 -7
- package/lib/private/util.d.ts +0 -1
- package/lib/private/util.js +0 -787
- package/lib/private/util.js.map +0 -7
|
@@ -0,0 +1,161 @@
|
|
|
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 private_1 = require("../api/aws-auth/private");
|
|
6
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
7
|
+
/**
|
|
8
|
+
* Provides load balancer context information.
|
|
9
|
+
*/
|
|
10
|
+
class LoadBalancerContextProviderPlugin {
|
|
11
|
+
aws;
|
|
12
|
+
constructor(aws) {
|
|
13
|
+
this.aws = aws;
|
|
14
|
+
}
|
|
15
|
+
async getValue(query) {
|
|
16
|
+
if (!query.loadBalancerArn && !query.loadBalancerTags) {
|
|
17
|
+
throw new toolkit_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: loadBalancer.SecurityGroups ?? [],
|
|
27
|
+
ipAddressType: ipAddressType,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.LoadBalancerContextProviderPlugin = LoadBalancerContextProviderPlugin;
|
|
32
|
+
/**
|
|
33
|
+
* Provides load balancer listener context information
|
|
34
|
+
*/
|
|
35
|
+
class LoadBalancerListenerContextProviderPlugin {
|
|
36
|
+
aws;
|
|
37
|
+
constructor(aws) {
|
|
38
|
+
this.aws = aws;
|
|
39
|
+
}
|
|
40
|
+
async getValue(query) {
|
|
41
|
+
if (!query.listenerArn && !query.loadBalancerArn && !query.loadBalancerTags) {
|
|
42
|
+
throw new toolkit_error_1.ContextProviderError('The load balancer listener query must specify at least one of: `listenerArn`, `loadBalancerArn` or `loadBalancerTags`');
|
|
43
|
+
}
|
|
44
|
+
return (await LoadBalancerProvider.getClient(this.aws, query)).getListener();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.LoadBalancerListenerContextProviderPlugin = LoadBalancerListenerContextProviderPlugin;
|
|
48
|
+
class LoadBalancerProvider {
|
|
49
|
+
client;
|
|
50
|
+
filter;
|
|
51
|
+
listener;
|
|
52
|
+
static async getClient(aws, query) {
|
|
53
|
+
const client = (await (0, private_1.initContextProviderSdk)(aws, query)).elbv2();
|
|
54
|
+
try {
|
|
55
|
+
const listener = query.listenerArn
|
|
56
|
+
? // Assert we're sure there's at least one so it throws if not
|
|
57
|
+
(await client.describeListeners({ ListenerArns: [query.listenerArn] })).Listeners[0]
|
|
58
|
+
: undefined;
|
|
59
|
+
return new LoadBalancerProvider(client, { ...query, loadBalancerArn: listener?.LoadBalancerArn || query.loadBalancerArn }, listener);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
throw new toolkit_error_1.ContextProviderError(`No load balancer listeners found matching arn ${query.listenerArn}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
constructor(client, filter, listener) {
|
|
66
|
+
this.client = client;
|
|
67
|
+
this.filter = filter;
|
|
68
|
+
this.listener = listener;
|
|
69
|
+
}
|
|
70
|
+
async getLoadBalancer() {
|
|
71
|
+
const loadBalancers = await this.getLoadBalancers();
|
|
72
|
+
if (loadBalancers.length === 0) {
|
|
73
|
+
throw new toolkit_error_1.ContextProviderError(`No load balancers found matching ${JSON.stringify(this.filter)}`);
|
|
74
|
+
}
|
|
75
|
+
if (loadBalancers.length > 1) {
|
|
76
|
+
throw new toolkit_error_1.ContextProviderError(`Multiple load balancers found matching ${JSON.stringify(this.filter)} - please provide more specific criteria`);
|
|
77
|
+
}
|
|
78
|
+
return loadBalancers[0];
|
|
79
|
+
}
|
|
80
|
+
async getListener() {
|
|
81
|
+
if (this.listener) {
|
|
82
|
+
try {
|
|
83
|
+
const loadBalancer = await this.getLoadBalancer();
|
|
84
|
+
return {
|
|
85
|
+
listenerArn: this.listener.ListenerArn,
|
|
86
|
+
listenerPort: this.listener.Port,
|
|
87
|
+
securityGroupIds: loadBalancer.SecurityGroups || [],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
throw new toolkit_error_1.ContextProviderError(`No associated load balancer found for listener arn ${this.filter.listenerArn}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const loadBalancers = await this.getLoadBalancers();
|
|
95
|
+
if (loadBalancers.length === 0) {
|
|
96
|
+
throw new toolkit_error_1.ContextProviderError(`No associated load balancers found for load balancer listener query ${JSON.stringify(this.filter)}`);
|
|
97
|
+
}
|
|
98
|
+
const listeners = (await this.getListenersForLoadBalancers(loadBalancers)).filter((listener) => {
|
|
99
|
+
return ((!this.filter.listenerPort || listener.Port === this.filter.listenerPort) &&
|
|
100
|
+
(!this.filter.listenerProtocol || listener.Protocol === this.filter.listenerProtocol));
|
|
101
|
+
});
|
|
102
|
+
if (listeners.length === 0) {
|
|
103
|
+
throw new toolkit_error_1.ContextProviderError(`No load balancer listeners found matching ${JSON.stringify(this.filter)}`);
|
|
104
|
+
}
|
|
105
|
+
if (listeners.length > 1) {
|
|
106
|
+
throw new toolkit_error_1.ContextProviderError(`Multiple load balancer listeners found matching ${JSON.stringify(this.filter)} - please provide more specific criteria`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
listenerArn: listeners[0].ListenerArn,
|
|
110
|
+
listenerPort: listeners[0].Port,
|
|
111
|
+
securityGroupIds: loadBalancers.find((lb) => listeners[0].LoadBalancerArn === lb.LoadBalancerArn)?.SecurityGroups || [],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async getLoadBalancers() {
|
|
115
|
+
const loadBalancerArns = this.filter.loadBalancerArn ? [this.filter.loadBalancerArn] : undefined;
|
|
116
|
+
const loadBalancers = (await this.client.paginateDescribeLoadBalancers({
|
|
117
|
+
LoadBalancerArns: loadBalancerArns,
|
|
118
|
+
})).filter((lb) => lb.Type === this.filter.loadBalancerType);
|
|
119
|
+
return this.filterByTags(loadBalancers);
|
|
120
|
+
}
|
|
121
|
+
async filterByTags(loadBalancers) {
|
|
122
|
+
if (!this.filter.loadBalancerTags) {
|
|
123
|
+
return loadBalancers;
|
|
124
|
+
}
|
|
125
|
+
return (await this.describeTags(loadBalancers.map((lb) => lb.LoadBalancerArn)))
|
|
126
|
+
.filter((tagDescription) => {
|
|
127
|
+
// For every tag in the filter, there is some tag in the LB that matches it.
|
|
128
|
+
// In other words, the set of tags in the filter is a subset of the set of tags in the LB.
|
|
129
|
+
return this.filter.loadBalancerTags.every((filter) => {
|
|
130
|
+
return tagDescription.Tags?.some((tag) => filter.key === tag.Key && filter.value === tag.Value);
|
|
131
|
+
});
|
|
132
|
+
})
|
|
133
|
+
.flatMap((tag) => loadBalancers.filter((loadBalancer) => tag.ResourceArn === loadBalancer.LoadBalancerArn));
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns tag descriptions associated with the resources. The API doesn't support
|
|
137
|
+
* pagination, so this function breaks the resource list into chunks and issues
|
|
138
|
+
* the appropriate requests.
|
|
139
|
+
*/
|
|
140
|
+
async describeTags(resourceArns) {
|
|
141
|
+
// Max of 20 resource arns per request.
|
|
142
|
+
const chunkSize = 20;
|
|
143
|
+
const tags = Array();
|
|
144
|
+
for (let i = 0; i < resourceArns.length; i += chunkSize) {
|
|
145
|
+
const chunk = resourceArns.slice(i, Math.min(i + chunkSize, resourceArns.length));
|
|
146
|
+
const chunkTags = await this.client.describeTags({
|
|
147
|
+
ResourceArns: chunk,
|
|
148
|
+
});
|
|
149
|
+
tags.push(...(chunkTags.TagDescriptions || []));
|
|
150
|
+
}
|
|
151
|
+
return tags;
|
|
152
|
+
}
|
|
153
|
+
async getListenersForLoadBalancers(loadBalancers) {
|
|
154
|
+
const listeners = [];
|
|
155
|
+
for (const loadBalancer of loadBalancers.map((lb) => lb.LoadBalancerArn)) {
|
|
156
|
+
listeners.push(...(await this.client.paginateDescribeListeners({ LoadBalancerArn: loadBalancer })));
|
|
157
|
+
}
|
|
158
|
+
return listeners;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1iYWxhbmNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2FkLWJhbGFuY2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSw0Q0FFeUI7QUFHekIscURBQWlFO0FBRWpFLDREQUFnRTtBQUVoRTs7R0FFRztBQUNILE1BQWEsaUNBQWlDO0lBQ2Y7SUFBN0IsWUFBNkIsR0FBZ0I7UUFBaEIsUUFBRyxHQUFILEdBQUcsQ0FBYTtJQUM3QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUErQjtRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RELE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO1FBQy9ILENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXJHLE1BQU0sYUFBYSxHQUNqQixZQUFZLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0NBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQ0FBeUIsQ0FBQyxVQUFVLENBQUM7UUFFaEgsT0FBTztZQUNMLGVBQWUsRUFBRSxZQUFZLENBQUMsZUFBZ0I7WUFDOUMsaUNBQWlDLEVBQUUsWUFBWSxDQUFDLHFCQUFzQjtZQUN0RSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsT0FBUTtZQUMxQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQU07WUFDMUIsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLGNBQWMsSUFBSSxFQUFFO1lBQ25ELGFBQWEsRUFBRSxhQUFhO1NBQzdCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2QkQsOEVBdUJDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLHlDQUF5QztJQUN2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QUM7WUFDbEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDL0MsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxLQUFLLENBQUMsNEJBQTRCLENBQUMsYUFBNkI7UUFDdEUsTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFDO1FBQ2pDLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDekUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvYWRCYWxhbmNlckNvbnRleHRRdWVyeSwgTG9hZEJhbGFuY2VyTGlzdGVuZXJDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUge1xuICBMb2FkQmFsYW5jZXJDb250ZXh0UmVzcG9uc2UsXG4gIExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFJlc3BvbnNlLFxufSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHtcbiAgTG9hZEJhbGFuY2VySXBBZGRyZXNzVHlwZSxcbn0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgTG9hZEJhbGFuY2VyLCBMaXN0ZW5lciwgVGFnRGVzY3JpcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQgdHlwZSB7IElFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIFByb3ZpZGVzIGxvYWQgYmFsYW5jZXIgY29udGV4dCBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIExvYWRCYWxhbmNlckNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlcikge1xuICB9XG5cbiAgYXN5bmMgZ2V0VmFsdWUocXVlcnk6IExvYWRCYWxhbmNlckNvbnRleHRRdWVyeSk6IFByb21pc2U8TG9hZEJhbGFuY2VyQ29udGV4dFJlc3BvbnNlPiB7XG4gICAgaWYgKCFxdWVyeS5sb2FkQmFsYW5jZXJBcm4gJiYgIXF1ZXJ5LmxvYWRCYWxhbmNlclRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcignVGhlIGxvYWQgYmFsYW5jZXIgbG9va3VwIHF1ZXJ5IG11c3Qgc3BlY2lmeSBlaXRoZXIgYGxvYWRCYWxhbmNlckFybmAgb3IgYGxvYWRCYWxhbmNlclRhZ3NgJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyID0gYXdhaXQgKGF3YWl0IExvYWRCYWxhbmNlclByb3ZpZGVyLmdldENsaWVudCh0aGlzLmF3cywgcXVlcnkpKS5nZXRMb2FkQmFsYW5jZXIoKTtcblxuICAgIGNvbnN0IGlwQWRkcmVzc1R5cGUgPVxuICAgICAgbG9hZEJhbGFuY2VyLklwQWRkcmVzc1R5cGUgPT09ICdpcHY0JyA/IExvYWRCYWxhbmNlcklwQWRkcmVzc1R5cGUuSVBWNCA6IExvYWRCYWxhbmNlcklwQWRkcmVzc1R5cGUuRFVBTF9TVEFDSztcblxuICAgIHJldHVybiB7XG4gICAgICBsb2FkQmFsYW5jZXJBcm46IGxvYWRCYWxhbmNlci5Mb2FkQmFsYW5jZXJBcm4hLFxuICAgICAgbG9hZEJhbGFuY2VyQ2Fub25pY2FsSG9zdGVkWm9uZUlkOiBsb2FkQmFsYW5jZXIuQ2Fub25pY2FsSG9zdGVkWm9uZUlkISxcbiAgICAgIGxvYWRCYWxhbmNlckRuc05hbWU6IGxvYWRCYWxhbmNlci5ETlNOYW1lISxcbiAgICAgIHZwY0lkOiBsb2FkQmFsYW5jZXIuVnBjSWQhLFxuICAgICAgc2VjdXJpdHlHcm91cElkczogbG9hZEJhbGFuY2VyLlNlY3VyaXR5R3JvdXBzID8/IFtdLFxuICAgICAgaXBBZGRyZXNzVHlwZTogaXBBZGRyZXNzVHlwZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgbG9hZCBiYWxhbmNlciBsaXN0ZW5lciBjb250ZXh0IGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlcikge1xuICB9XG5cbiAgYXN5bmMgZ2V0VmFsdWUocXVlcnk6IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5KTogUHJvbWlzZTxMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRSZXNwb25zZT4ge1xuICAgIGlmICghcXVlcnkubGlzdGVuZXJBcm4gJiYgIXF1ZXJ5LmxvYWRCYWxhbmNlckFybiAmJiAhcXVlcnkubG9hZEJhbGFuY2VyVGFncykge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICAnVGhlIGxvYWQgYmFsYW5jZXIgbGlzdGVuZXIgcXVlcnkgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZjogYGxpc3RlbmVyQXJuYCwgYGxvYWRCYWxhbmNlckFybmAgb3IgYGxvYWRCYWxhbmNlclRhZ3NgJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCBMb2FkQmFsYW5jZXJQcm92aWRlci5nZXRDbGllbnQodGhpcy5hd3MsIHF1ZXJ5KSkuZ2V0TGlzdGVuZXIoKTtcbiAgfVxufVxuXG5jbGFzcyBMb2FkQmFsYW5jZXJQcm92aWRlciB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZ2V0Q2xpZW50KFxuICAgIGF3czogU2RrUHJvdmlkZXIsXG4gICAgcXVlcnk6IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5LFxuICApOiBQcm9taXNlPExvYWRCYWxhbmNlclByb3ZpZGVyPiB7XG4gICAgY29uc3QgY2xpZW50ID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsoYXdzLCBxdWVyeSkpLmVsYnYyKCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSBxdWVyeS5saXN0ZW5lckFyblxuICAgICAgICA/IC8vIEFzc2VydCB3ZSdyZSBzdXJlIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHNvIGl0IHRocm93cyBpZiBub3RcbiAgICAgICAgKGF3YWl0IGNsaWVudC5kZXNjcmliZUxpc3RlbmVycyh7IExpc3RlbmVyQXJuczogW3F1ZXJ5Lmxpc3RlbmVyQXJuXSB9KSkuTGlzdGVuZXJzIVswXSFcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gbmV3IExvYWRCYWxhbmNlclByb3ZpZGVyKFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHsgLi4ucXVlcnksIGxvYWRCYWxhbmNlckFybjogbGlzdGVuZXI/LkxvYWRCYWxhbmNlckFybiB8fCBxdWVyeS5sb2FkQmFsYW5jZXJBcm4gfSxcbiAgICAgICAgbGlzdGVuZXIsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBObyBsb2FkIGJhbGFuY2VyIGxpc3RlbmVycyBmb3VuZCBtYXRjaGluZyBhcm4gJHtxdWVyeS5saXN0ZW5lckFybn1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogSUVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWx0ZXI6IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFF1ZXJ5LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXI/OiBMaXN0ZW5lcixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TG9hZEJhbGFuY2VyKCk6IFByb21pc2U8TG9hZEJhbGFuY2VyPiB7XG4gICAgY29uc3QgbG9hZEJhbGFuY2VycyA9IGF3YWl0IHRoaXMuZ2V0TG9hZEJhbGFuY2VycygpO1xuXG4gICAgaWYgKGxvYWRCYWxhbmNlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYE5vIGxvYWQgYmFsYW5jZXJzIGZvdW5kIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIpfWApO1xuICAgIH1cblxuICAgIGlmIChsb2FkQmFsYW5jZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihcbiAgICAgICAgYE11bHRpcGxlIGxvYWQgYmFsYW5jZXJzIGZvdW5kIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIpfSAtIHBsZWFzZSBwcm92aWRlIG1vcmUgc3BlY2lmaWMgY3JpdGVyaWFgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZEJhbGFuY2Vyc1swXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMaXN0ZW5lcigpOiBQcm9taXNlPExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFJlc3BvbnNlPiB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxvYWRCYWxhbmNlciA9IGF3YWl0IHRoaXMuZ2V0TG9hZEJhbGFuY2VyKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGlzdGVuZXJBcm46IHRoaXMubGlzdGVuZXIuTGlzdGVuZXJBcm4hLFxuICAgICAgICAgIGxpc3RlbmVyUG9ydDogdGhpcy5saXN0ZW5lci5Qb3J0ISxcbiAgICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBsb2FkQmFsYW5jZXIuU2VjdXJpdHlHcm91cHMgfHwgW10sXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBObyBhc3NvY2lhdGVkIGxvYWQgYmFsYW5jZXIgZm91bmQgZm9yIGxpc3RlbmVyIGFybiAke3RoaXMuZmlsdGVyLmxpc3RlbmVyQXJufWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlcnMgPSBhd2FpdCB0aGlzLmdldExvYWRCYWxhbmNlcnMoKTtcbiAgICBpZiAobG9hZEJhbGFuY2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihcbiAgICAgICAgYE5vIGFzc29jaWF0ZWQgbG9hZCBiYWxhbmNlcnMgZm91bmQgZm9yIGxvYWQgYmFsYW5jZXIgbGlzdGVuZXIgcXVlcnkgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXJzID0gKGF3YWl0IHRoaXMuZ2V0TGlzdGVuZXJzRm9yTG9hZEJhbGFuY2Vycyhsb2FkQmFsYW5jZXJzKSkuZmlsdGVyKChsaXN0ZW5lcikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKCF0aGlzLmZpbHRlci5saXN0ZW5lclBvcnQgfHwgbGlzdGVuZXIuUG9ydCA9PT0gdGhpcy5maWx0ZXIubGlzdGVuZXJQb3J0KSAmJlxuICAgICAgICAoIXRoaXMuZmlsdGVyLmxpc3RlbmVyUHJvdG9jb2wgfHwgbGlzdGVuZXIuUHJvdG9jb2wgPT09IHRoaXMuZmlsdGVyLmxpc3RlbmVyUHJvdG9jb2wpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgTm8gbG9hZCBiYWxhbmNlciBsaXN0ZW5lcnMgZm91bmQgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcil9YCk7XG4gICAgfVxuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoXG4gICAgICAgIGBNdWx0aXBsZSBsb2FkIGJhbGFuY2VyIGxpc3RlbmVycyBmb3VuZCBtYXRjaGluZyAke0pTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyKX0gLSBwbGVhc2UgcHJvdmlkZSBtb3JlIHNwZWNpZmljIGNyaXRlcmlhYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RlbmVyQXJuOiBsaXN0ZW5lcnNbMF0uTGlzdGVuZXJBcm4hLFxuICAgICAgbGlzdGVuZXJQb3J0OiBsaXN0ZW5lcnNbMF0uUG9ydCEsXG4gICAgICBzZWN1cml0eUdyb3VwSWRzOlxuICAgICAgICBsb2FkQmFsYW5jZXJzLmZpbmQoKGxiKSA9PiBsaXN0ZW5lcnNbMF0uTG9hZEJhbGFuY2VyQXJuID09PSBsYi5Mb2FkQmFsYW5jZXJBcm4pPy5TZWN1cml0eUdyb3VwcyB8fCBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMb2FkQmFsYW5jZXJzKCkge1xuICAgIGNvbnN0IGxvYWRCYWxhbmNlckFybnMgPSB0aGlzLmZpbHRlci5sb2FkQmFsYW5jZXJBcm4gPyBbdGhpcy5maWx0ZXIubG9hZEJhbGFuY2VyQXJuXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsb2FkQmFsYW5jZXJzID0gKFxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMoe1xuICAgICAgICBMb2FkQmFsYW5jZXJBcm5zOiBsb2FkQmFsYW5jZXJBcm5zLFxuICAgICAgfSlcbiAgICApLmZpbHRlcigobGIpID0+IGxiLlR5cGUgPT09IHRoaXMuZmlsdGVyLmxvYWRCYWxhbmNlclR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQnlUYWdzKGxvYWRCYWxhbmNlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJCeVRhZ3MobG9hZEJhbGFuY2VyczogTG9hZEJhbGFuY2VyW10pOiBQcm9taXNlPExvYWRCYWxhbmNlcltdPiB7XG4gICAgaWYgKCF0aGlzLmZpbHRlci5sb2FkQmFsYW5jZXJUYWdzKSB7XG4gICAgICByZXR1cm4gbG9hZEJhbGFuY2VycztcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmRlc2NyaWJlVGFncyhsb2FkQmFsYW5jZXJzLm1hcCgobGIpID0+IGxiLkxvYWRCYWxhbmNlckFybiEpKSlcbiAgICAgIC5maWx0ZXIoKHRhZ0Rlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIC8vIEZvciBldmVyeSB0YWcgaW4gdGhlIGZpbHRlciwgdGhlcmUgaXMgc29tZSB0YWcgaW4gdGhlIExCIHRoYXQgbWF0Y2hlcyBpdC5cbiAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHRoZSBzZXQgb2YgdGFncyBpbiB0aGUgZmlsdGVyIGlzIGEgc3Vic2V0IG9mIHRoZSBzZXQgb2YgdGFncyBpbiB0aGUgTEIuXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlci5sb2FkQmFsYW5jZXJUYWdzIS5ldmVyeSgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRhZ0Rlc2NyaXB0aW9uLlRhZ3M/LnNvbWUoKHRhZykgPT5cbiAgICAgICAgICAgIGZpbHRlci5rZXkgPT09IHRhZy5LZXkgJiYgZmlsdGVyLnZhbHVlID09PSB0YWcuVmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuZmxhdE1hcCgodGFnKSA9PiBsb2FkQmFsYW5jZXJzLmZpbHRlcigobG9hZEJhbGFuY2VyKSA9PiB0YWcuUmVzb3VyY2VBcm4gPT09IGxvYWRCYWxhbmNlci5Mb2FkQmFsYW5jZXJBcm4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRhZyBkZXNjcmlwdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZXMuIFRoZSBBUEkgZG9lc24ndCBzdXBwb3J0XG4gICAqIHBhZ2luYXRpb24sIHNvIHRoaXMgZnVuY3Rpb24gYnJlYWtzIHRoZSByZXNvdXJjZSBsaXN0IGludG8gY2h1bmtzIGFuZCBpc3N1ZXNcbiAgICogdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3RzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZXNjcmliZVRhZ3MocmVzb3VyY2VBcm5zOiBzdHJpbmdbXSk6IFByb21pc2U8VGFnRGVzY3JpcHRpb25bXT4ge1xuICAgIC8vIE1heCBvZiAyMCByZXNvdXJjZSBhcm5zIHBlciByZXF1ZXN0LlxuICAgIGNvbnN0IGNodW5rU2l6ZSA9IDIwO1xuICAgIGNvbnN0IHRhZ3MgPSBBcnJheTxUYWdEZXNjcmlwdGlvbj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc291cmNlQXJucy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHJlc291cmNlQXJucy5zbGljZShpLCBNYXRoLm1pbihpICsgY2h1bmtTaXplLCByZXNvdXJjZUFybnMubGVuZ3RoKSk7XG4gICAgICBjb25zdCBjaHVua1RhZ3MgPSBhd2FpdCB0aGlzLmNsaWVudC5kZXNjcmliZVRhZ3Moe1xuICAgICAgICBSZXNvdXJjZUFybnM6IGNodW5rLFxuICAgICAgfSk7XG5cbiAgICAgIHRhZ3MucHVzaCguLi4oY2h1bmtUYWdzLlRhZ0Rlc2NyaXB0aW9ucyB8fCBbXSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGFncztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TGlzdGVuZXJzRm9yTG9hZEJhbGFuY2Vycyhsb2FkQmFsYW5jZXJzOiBMb2FkQmFsYW5jZXJbXSk6IFByb21pc2U8TGlzdGVuZXJbXT4ge1xuICAgIGNvbnN0IGxpc3RlbmVyczogTGlzdGVuZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbG9hZEJhbGFuY2VyIG9mIGxvYWRCYWxhbmNlcnMubWFwKChsYikgPT4gbGIuTG9hZEJhbGFuY2VyQXJuKSkge1xuICAgICAgbGlzdGVuZXJzLnB1c2goLi4uKGF3YWl0IHRoaXMuY2xpZW50LnBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMoeyBMb2FkQmFsYW5jZXJBcm46IGxvYWRCYWxhbmNlciB9KSkpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdGVuZXJzO1xuICB9XG59XG4iXX0=
|
|
@@ -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/private';
|
|
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,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecurityGroupContextProviderPlugin = void 0;
|
|
4
|
+
exports.hasAllTrafficEgress = hasAllTrafficEgress;
|
|
5
|
+
const private_1 = require("../api/aws-auth/private");
|
|
6
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
7
|
+
class SecurityGroupContextProviderPlugin {
|
|
8
|
+
aws;
|
|
9
|
+
constructor(aws) {
|
|
10
|
+
this.aws = aws;
|
|
11
|
+
}
|
|
12
|
+
async getValue(args) {
|
|
13
|
+
if (args.securityGroupId && args.securityGroupName) {
|
|
14
|
+
throw new toolkit_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 toolkit_error_1.ContextProviderError("'securityGroupId' or 'securityGroupName' must be specified to look up a security group");
|
|
18
|
+
}
|
|
19
|
+
const ec2 = (await (0, private_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 = response.SecurityGroups ?? [];
|
|
38
|
+
if (securityGroups.length === 0) {
|
|
39
|
+
throw new toolkit_error_1.ContextProviderError(`No security groups found matching ${JSON.stringify(args)}`);
|
|
40
|
+
}
|
|
41
|
+
if (securityGroups.length > 1) {
|
|
42
|
+
throw new toolkit_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
|
+
let hasAllTrafficCidrV4 = false;
|
|
57
|
+
let hasAllTrafficCidrV6 = false;
|
|
58
|
+
for (const ipPermission of securityGroup.IpPermissionsEgress ?? []) {
|
|
59
|
+
const isAllProtocols = ipPermission.IpProtocol === '-1';
|
|
60
|
+
if (isAllProtocols && ipPermission.IpRanges?.some((m) => m.CidrIp === '0.0.0.0/0')) {
|
|
61
|
+
hasAllTrafficCidrV4 = true;
|
|
62
|
+
}
|
|
63
|
+
if (isAllProtocols && ipPermission.Ipv6Ranges?.some((m) => m.CidrIpv6 === '::/0')) {
|
|
64
|
+
hasAllTrafficCidrV6 = true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return hasAllTrafficCidrV4 && hasAllTrafficCidrV6;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VjdXJpdHktZ3JvdXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdFQSxrREFpQkM7QUE5RUQscURBQW1GO0FBRW5GLDREQUFnRTtBQUVoRSxNQUFhLGtDQUFrQztJQUNoQjtJQUE3QixZQUE2QixHQUFnQjtRQUFoQixRQUFHLEdBQUgsR0FBRyxDQUFhO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQStCO1FBQzVDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLElBQUksb0NBQW9CLENBQzVCLHNHQUFzRyxDQUN2RyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLG9DQUFvQixDQUFDLHdGQUF3RixDQUFDLENBQUM7UUFDM0gsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFBLGdDQUFzQixFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVqRSxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNYLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDckIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWCxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztZQUNoRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDckQsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxxQ0FBcUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksb0NBQW9CLENBQUMsZ0RBQWdELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsY0FBYyxDQUFDO1FBRXZDLE9BQU87WUFDTCxlQUFlLEVBQUUsYUFBYSxDQUFDLE9BQVE7WUFDdkMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDO1NBQ3JELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFwREQsZ0ZBb0RDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxhQUE0QjtJQUM5RCxJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNoQyxJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUVoQyxLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztRQUV4RCxJQUFJLGNBQWMsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25GLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxjQUFjLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNsRixtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlY3VyaXR5R3JvdXBDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBTZWN1cml0eUdyb3VwQ29udGV4dFJlc3BvbnNlIH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyLCBTZWN1cml0eUdyb3VwIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjMic7XG5pbXBvcnQgeyB0eXBlIFNka1Byb3ZpZGVyLCBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5R3JvdXBDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHtcbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlKGFyZ3M6IFNlY3VyaXR5R3JvdXBDb250ZXh0UXVlcnkpOiBQcm9taXNlPFNlY3VyaXR5R3JvdXBDb250ZXh0UmVzcG9uc2U+IHtcbiAgICBpZiAoYXJncy5zZWN1cml0eUdyb3VwSWQgJiYgYXJncy5zZWN1cml0eUdyb3VwTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICBcIidzZWN1cml0eUdyb3VwSWQnIGFuZCAnc2VjdXJpdHlHcm91cE5hbWUnIGNhbiBub3QgYmUgc3BlY2lmaWVkIGJvdGggd2hlbiBsb29raW5nIHVwIGEgc2VjdXJpdHkgZ3JvdXBcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFhcmdzLnNlY3VyaXR5R3JvdXBJZCAmJiAhYXJncy5zZWN1cml0eUdyb3VwTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFwiJ3NlY3VyaXR5R3JvdXBJZCcgb3IgJ3NlY3VyaXR5R3JvdXBOYW1lJyBtdXN0IGJlIHNwZWNpZmllZCB0byBsb29rIHVwIGEgc2VjdXJpdHkgZ3JvdXBcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZWMyID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsodGhpcy5hd3MsIGFyZ3MpKS5lYzIoKTtcblxuICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gICAgaWYgKGFyZ3MudnBjSWQpIHtcbiAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgIE5hbWU6ICd2cGMtaWQnLFxuICAgICAgICBWYWx1ZXM6IFthcmdzLnZwY0lkXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoYXJncy5zZWN1cml0eUdyb3VwTmFtZSkge1xuICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgTmFtZTogJ2dyb3VwLW5hbWUnLFxuICAgICAgICBWYWx1ZXM6IFthcmdzLnNlY3VyaXR5R3JvdXBOYW1lXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZWMyLmRlc2NyaWJlU2VjdXJpdHlHcm91cHMoe1xuICAgICAgR3JvdXBJZHM6IGFyZ3Muc2VjdXJpdHlHcm91cElkID8gW2FyZ3Muc2VjdXJpdHlHcm91cElkXSA6IHVuZGVmaW5lZCxcbiAgICAgIEZpbHRlcnM6IGZpbHRlcnMubGVuZ3RoID4gMCA/IGZpbHRlcnMgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHJlc3BvbnNlLlNlY3VyaXR5R3JvdXBzID8/IFtdO1xuICAgIGlmIChzZWN1cml0eUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgTm8gc2VjdXJpdHkgZ3JvdXBzIGZvdW5kIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gICAgfVxuXG4gICAgaWYgKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgTW9yZSB0aGFuIG9uZSBzZWN1cml0eSBncm91cHMgZm91bmQgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc2VjdXJpdHlHcm91cF0gPSBzZWN1cml0eUdyb3VwcztcblxuICAgIHJldHVybiB7XG4gICAgICBzZWN1cml0eUdyb3VwSWQ6IHNlY3VyaXR5R3JvdXAuR3JvdXBJZCEsXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiBoYXNBbGxUcmFmZmljRWdyZXNzKHNlY3VyaXR5R3JvdXApLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0FsbFRyYWZmaWNFZ3Jlc3Moc2VjdXJpdHlHcm91cDogU2VjdXJpdHlHcm91cCkge1xuICBsZXQgaGFzQWxsVHJhZmZpY0NpZHJWNCA9IGZhbHNlO1xuICBsZXQgaGFzQWxsVHJhZmZpY0NpZHJWNiA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgaXBQZXJtaXNzaW9uIG9mIHNlY3VyaXR5R3JvdXAuSXBQZXJtaXNzaW9uc0VncmVzcyA/PyBbXSkge1xuICAgIGNvbnN0IGlzQWxsUHJvdG9jb2xzID0gaXBQZXJtaXNzaW9uLklwUHJvdG9jb2wgPT09ICctMSc7XG5cbiAgICBpZiAoaXNBbGxQcm90b2NvbHMgJiYgaXBQZXJtaXNzaW9uLklwUmFuZ2VzPy5zb21lKChtKSA9PiBtLkNpZHJJcCA9PT0gJzAuMC4wLjAvMCcpKSB7XG4gICAgICBoYXNBbGxUcmFmZmljQ2lkclY0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNBbGxQcm90b2NvbHMgJiYgaXBQZXJtaXNzaW9uLklwdjZSYW5nZXM/LnNvbWUoKG0pID0+IG0uQ2lkcklwdjYgPT09ICc6Oi8wJykpIHtcbiAgICAgIGhhc0FsbFRyYWZmaWNDaWRyVjYgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoYXNBbGxUcmFmZmljQ2lkclY0ICYmIGhhc0FsbFRyYWZmaWNDaWRyVjY7XG59XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SSMParameterContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { IContextProviderMessages } from '.';
|
|
3
|
+
import { type SdkProvider } from '../api/aws-auth/private';
|
|
4
|
+
import type { ContextProviderPlugin } from '../api/plugin';
|
|
5
|
+
/**
|
|
6
|
+
* Plugin to read arbitrary SSM parameter names
|
|
7
|
+
*/
|
|
8
|
+
export declare class SSMContextProviderPlugin implements ContextProviderPlugin {
|
|
9
|
+
private readonly aws;
|
|
10
|
+
private readonly io;
|
|
11
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
12
|
+
getValue(args: SSMParameterContextQuery): Promise<unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the value of an SSM Parameter, while not throwin if the parameter does not exist.
|
|
15
|
+
* @param account the account in which the SSM Parameter is expected to be.
|
|
16
|
+
* @param region the region in which the SSM Parameter is expected to be.
|
|
17
|
+
* @param parameterName the name of the SSM Parameter
|
|
18
|
+
* @param lookupRoleArn the ARN of the lookup role.
|
|
19
|
+
*
|
|
20
|
+
* @returns the result of the ``GetParameter`` operation.
|
|
21
|
+
*
|
|
22
|
+
* @throws Error if a service error (other than ``ParameterNotFound``) occurs.
|
|
23
|
+
*/
|
|
24
|
+
private getSsmParameterValue;
|
|
25
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SSMContextProviderPlugin = void 0;
|
|
4
|
+
const private_1 = require("../api/aws-auth/private");
|
|
5
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
6
|
+
/**
|
|
7
|
+
* Plugin to read arbitrary SSM parameter names
|
|
8
|
+
*/
|
|
9
|
+
class SSMContextProviderPlugin {
|
|
10
|
+
aws;
|
|
11
|
+
io;
|
|
12
|
+
constructor(aws, io) {
|
|
13
|
+
this.aws = aws;
|
|
14
|
+
this.io = io;
|
|
15
|
+
}
|
|
16
|
+
async getValue(args) {
|
|
17
|
+
const region = args.region;
|
|
18
|
+
const account = args.account;
|
|
19
|
+
if (!('parameterName' in args)) {
|
|
20
|
+
throw new toolkit_error_1.ContextProviderError('parameterName must be provided in props for SSMContextProviderPlugin');
|
|
21
|
+
}
|
|
22
|
+
const parameterName = args.parameterName;
|
|
23
|
+
await this.io.debug(`Reading SSM parameter ${account}:${region}:${parameterName}`);
|
|
24
|
+
const response = await this.getSsmParameterValue(args);
|
|
25
|
+
const parameterNotFound = !response.Parameter || response.Parameter.Value === undefined;
|
|
26
|
+
const suppressError = 'ignoreErrorOnMissingContext' in args && args.ignoreErrorOnMissingContext;
|
|
27
|
+
if (parameterNotFound && suppressError && 'dummyValue' in args) {
|
|
28
|
+
return args.dummyValue;
|
|
29
|
+
}
|
|
30
|
+
if (parameterNotFound) {
|
|
31
|
+
throw new toolkit_error_1.ContextProviderError(`SSM parameter not available in account ${account}, region ${region}: ${parameterName}`);
|
|
32
|
+
}
|
|
33
|
+
// will not be undefined because we've handled undefined cases above
|
|
34
|
+
return response.Parameter.Value;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets the value of an SSM Parameter, while not throwin if the parameter does not exist.
|
|
38
|
+
* @param account the account in which the SSM Parameter is expected to be.
|
|
39
|
+
* @param region the region in which the SSM Parameter is expected to be.
|
|
40
|
+
* @param parameterName the name of the SSM Parameter
|
|
41
|
+
* @param lookupRoleArn the ARN of the lookup role.
|
|
42
|
+
*
|
|
43
|
+
* @returns the result of the ``GetParameter`` operation.
|
|
44
|
+
*
|
|
45
|
+
* @throws Error if a service error (other than ``ParameterNotFound``) occurs.
|
|
46
|
+
*/
|
|
47
|
+
async getSsmParameterValue(args) {
|
|
48
|
+
const ssm = (await (0, private_1.initContextProviderSdk)(this.aws, args)).ssm();
|
|
49
|
+
try {
|
|
50
|
+
return await ssm.getParameter({ Name: args.parameterName });
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
if (e.name === 'ParameterNotFound') {
|
|
54
|
+
return { $metadata: {} };
|
|
55
|
+
}
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.SSMContextProviderPlugin = SSMContextProviderPlugin;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzc20tcGFyYW1ldGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxxREFBbUY7QUFFbkYsNERBQWdFO0FBRWhFOztHQUVHO0FBQ0gsTUFBYSx3QkFBd0I7SUFDTjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQThCO1FBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU3QixJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksb0NBQW9CLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLHlCQUF5QixPQUFPLElBQUksTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFbkYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO1FBQ2pHLE1BQU0sYUFBYSxHQUFHLDZCQUE2QixJQUFJLElBQUksSUFBSyxJQUFJLENBQUMsMkJBQXVDLENBQUM7UUFDN0csSUFBSSxpQkFBaUIsSUFBSSxhQUFhLElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywwQ0FBMEMsT0FBTyxZQUFZLE1BQU0sS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFILENBQUM7UUFDRCxvRUFBb0U7UUFDcEUsT0FBTyxRQUFRLENBQUMsU0FBVSxDQUFDLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUE4QjtRQUMvRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFLENBQUM7Z0JBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWpERCw0REFpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNTTVBhcmFtZXRlckNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NtJztcbmltcG9ydCB0eXBlIHsgSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzIH0gZnJvbSAnLic7XG5pbXBvcnQgeyB0eXBlIFNka1Byb3ZpZGVyLCBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxuLyoqXG4gKiBQbHVnaW4gdG8gcmVhZCBhcmJpdHJhcnkgU1NNIHBhcmFtZXRlciBuYW1lc1xuICovXG5leHBvcnQgY2xhc3MgU1NNQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBTU01QYXJhbWV0ZXJDb250ZXh0UXVlcnkpIHtcbiAgICBjb25zdCByZWdpb24gPSBhcmdzLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gYXJncy5hY2NvdW50O1xuXG4gICAgaWYgKCEoJ3BhcmFtZXRlck5hbWUnIGluIGFyZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoJ3BhcmFtZXRlck5hbWUgbXVzdCBiZSBwcm92aWRlZCBpbiBwcm9wcyBmb3IgU1NNQ29udGV4dFByb3ZpZGVyUGx1Z2luJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBhcmdzLnBhcmFtZXRlck5hbWU7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgUmVhZGluZyBTU00gcGFyYW1ldGVyICR7YWNjb3VudH06JHtyZWdpb259OiR7cGFyYW1ldGVyTmFtZX1gKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRTc21QYXJhbWV0ZXJWYWx1ZShhcmdzKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJOb3RGb3VuZDogYm9vbGVhbiA9ICFyZXNwb25zZS5QYXJhbWV0ZXIgfHwgcmVzcG9uc2UuUGFyYW1ldGVyLlZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3VwcHJlc3NFcnJvciA9ICdpZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQnIGluIGFyZ3MgJiYgKGFyZ3MuaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0IGFzIGJvb2xlYW4pO1xuICAgIGlmIChwYXJhbWV0ZXJOb3RGb3VuZCAmJiBzdXBwcmVzc0Vycm9yICYmICdkdW1teVZhbHVlJyBpbiBhcmdzKSB7XG4gICAgICByZXR1cm4gYXJncy5kdW1teVZhbHVlO1xuICAgIH1cbiAgICBpZiAocGFyYW1ldGVyTm90Rm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgU1NNIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIGluIGFjY291bnQgJHthY2NvdW50fSwgcmVnaW9uICR7cmVnaW9ufTogJHtwYXJhbWV0ZXJOYW1lfWApO1xuICAgIH1cbiAgICAvLyB3aWxsIG5vdCBiZSB1bmRlZmluZWQgYmVjYXVzZSB3ZSd2ZSBoYW5kbGVkIHVuZGVmaW5lZCBjYXNlcyBhYm92ZVxuICAgIHJldHVybiByZXNwb25zZS5QYXJhbWV0ZXIhLlZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIG9mIGFuIFNTTSBQYXJhbWV0ZXIsIHdoaWxlIG5vdCB0aHJvd2luIGlmIHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3QuXG4gICAqIEBwYXJhbSBhY2NvdW50ICAgICAgIHRoZSBhY2NvdW50IGluIHdoaWNoIHRoZSBTU00gUGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlLlxuICAgKiBAcGFyYW0gcmVnaW9uICAgICAgICB0aGUgcmVnaW9uIGluIHdoaWNoIHRoZSBTU00gUGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSB0aGUgbmFtZSBvZiB0aGUgU1NNIFBhcmFtZXRlclxuICAgKiBAcGFyYW0gbG9va3VwUm9sZUFybiB0aGUgQVJOIG9mIHRoZSBsb29rdXAgcm9sZS5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgYGBHZXRQYXJhbWV0ZXJgYCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgYSBzZXJ2aWNlIGVycm9yIChvdGhlciB0aGFuIGBgUGFyYW1ldGVyTm90Rm91bmRgYCkgb2NjdXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRTc21QYXJhbWV0ZXJWYWx1ZShhcmdzOiBTU01QYXJhbWV0ZXJDb250ZXh0UXVlcnkpOiBQcm9taXNlPEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ+IHtcbiAgICBjb25zdCBzc20gPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLnNzbSgpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgc3NtLmdldFBhcmFtZXRlcih7IE5hbWU6IGFyZ3MucGFyYW1ldGVyTmFtZSB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm5hbWUgPT09ICdQYXJhbWV0ZXJOb3RGb3VuZCcpIHtcbiAgICAgICAgcmV0dXJuIHsgJG1ldGFkYXRhOiB7fSB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { VpcContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import { type VpcContextResponse } from '@aws-cdk/cx-api';
|
|
3
|
+
import type { IContextProviderMessages } from '.';
|
|
4
|
+
import type { SdkProvider } from '../api/aws-auth/private';
|
|
5
|
+
import type { ContextProviderPlugin } from '../api/plugin';
|
|
6
|
+
export declare class VpcNetworkContextProviderPlugin implements ContextProviderPlugin {
|
|
7
|
+
private readonly aws;
|
|
8
|
+
private readonly io;
|
|
9
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
10
|
+
getValue(args: VpcContextQuery): Promise<VpcContextResponse>;
|
|
11
|
+
private findVpc;
|
|
12
|
+
private readVpcProps;
|
|
13
|
+
}
|