@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,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CcApiContextProviderPlugin = void 0;
|
|
4
|
+
const client_cloudcontrol_1 = require("@aws-sdk/client-cloudcontrol");
|
|
5
|
+
const private_1 = require("../api/aws-auth/private");
|
|
6
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
7
|
+
const util_1 = require("../util");
|
|
8
|
+
class CcApiContextProviderPlugin {
|
|
9
|
+
aws;
|
|
10
|
+
constructor(aws) {
|
|
11
|
+
this.aws = aws;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* This returns a data object with the value from CloudControl API result.
|
|
15
|
+
*
|
|
16
|
+
* See the documentation in the Cloud Assembly Schema for the semantics of
|
|
17
|
+
* each query parameter.
|
|
18
|
+
*/
|
|
19
|
+
async getValue(args) {
|
|
20
|
+
// Validate input
|
|
21
|
+
if (args.exactIdentifier && args.propertyMatch) {
|
|
22
|
+
throw new toolkit_error_1.ContextProviderError(`Provider protocol error: specify either exactIdentifier or propertyMatch, but not both (got ${JSON.stringify(args)})`);
|
|
23
|
+
}
|
|
24
|
+
if (args.ignoreErrorOnMissingContext && args.dummyValue === undefined) {
|
|
25
|
+
throw new toolkit_error_1.ContextProviderError(`Provider protocol error: if ignoreErrorOnMissingContext is set, a dummyValue must be supplied (got ${JSON.stringify(args)})`);
|
|
26
|
+
}
|
|
27
|
+
if (args.dummyValue !== undefined && (!Array.isArray(args.dummyValue) || !args.dummyValue.every(isObject))) {
|
|
28
|
+
throw new toolkit_error_1.ContextProviderError(`Provider protocol error: dummyValue must be an array of objects (got ${JSON.stringify(args.dummyValue)})`);
|
|
29
|
+
}
|
|
30
|
+
// Do the lookup
|
|
31
|
+
const cloudControl = (await (0, private_1.initContextProviderSdk)(this.aws, args)).cloudControl();
|
|
32
|
+
try {
|
|
33
|
+
let resources;
|
|
34
|
+
if (args.exactIdentifier) {
|
|
35
|
+
// use getResource to get the exact indentifier
|
|
36
|
+
resources = await this.getResource(cloudControl, args.typeName, args.exactIdentifier);
|
|
37
|
+
}
|
|
38
|
+
else if (args.propertyMatch) {
|
|
39
|
+
// use listResource
|
|
40
|
+
resources = await this.listResources(cloudControl, args.typeName, args.propertyMatch, args.expectedMatchCount);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
throw new toolkit_error_1.ContextProviderError(`Provider protocol error: neither exactIdentifier nor propertyMatch is specified in ${JSON.stringify(args)}.`);
|
|
44
|
+
}
|
|
45
|
+
return resources.map((r) => (0, util_1.getResultObj)(r.properties, r.identifier, args.propertiesToReturn));
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err instanceof ZeroResourcesFoundError && args.ignoreErrorOnMissingContext) {
|
|
49
|
+
// We've already type-checked dummyValue.
|
|
50
|
+
return args.dummyValue;
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Calls getResource from CC API to get the resource.
|
|
57
|
+
* See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/get-resource.html
|
|
58
|
+
*
|
|
59
|
+
* Will always return exactly one resource, or fail.
|
|
60
|
+
*/
|
|
61
|
+
async getResource(cc, typeName, exactIdentifier) {
|
|
62
|
+
try {
|
|
63
|
+
const result = await cc.getResource({
|
|
64
|
+
TypeName: typeName,
|
|
65
|
+
Identifier: exactIdentifier,
|
|
66
|
+
});
|
|
67
|
+
if (!result.ResourceDescription) {
|
|
68
|
+
throw new toolkit_error_1.ContextProviderError('Unexpected CloudControl API behavior: returned empty response');
|
|
69
|
+
}
|
|
70
|
+
return [foundResourceFromCcApi(result.ResourceDescription)];
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof client_cloudcontrol_1.ResourceNotFoundException || err.name === 'ResourceNotFoundException') {
|
|
74
|
+
throw new ZeroResourcesFoundError(`No resource of type ${typeName} with identifier: ${exactIdentifier}`);
|
|
75
|
+
}
|
|
76
|
+
if (!(err instanceof toolkit_error_1.ContextProviderError)) {
|
|
77
|
+
throw new toolkit_error_1.ContextProviderError(`Encountered CC API error while getting ${typeName} resource ${exactIdentifier}: ${err.message}`);
|
|
78
|
+
}
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Calls listResources from CC API to get the resources and apply args.propertyMatch to find the resources.
|
|
84
|
+
* See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/list-resources.html
|
|
85
|
+
*
|
|
86
|
+
* Will return 0 or more resources.
|
|
87
|
+
*
|
|
88
|
+
* Does not currently paginate through more than one result page.
|
|
89
|
+
*/
|
|
90
|
+
async listResources(cc, typeName, propertyMatch, expectedMatchCount) {
|
|
91
|
+
try {
|
|
92
|
+
const result = await cc.listResources({
|
|
93
|
+
TypeName: typeName,
|
|
94
|
+
});
|
|
95
|
+
const found = (result.ResourceDescriptions ?? [])
|
|
96
|
+
.map(foundResourceFromCcApi)
|
|
97
|
+
.filter((r) => {
|
|
98
|
+
return Object.entries(propertyMatch).every(([propPath, expected]) => {
|
|
99
|
+
const actual = (0, util_1.findJsonValue)(r.properties, propPath);
|
|
100
|
+
return propertyMatchesFilter(actual, expected);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
if ((expectedMatchCount === 'at-least-one' || expectedMatchCount === 'exactly-one') && found.length === 0) {
|
|
104
|
+
throw new ZeroResourcesFoundError(`Could not find any resources matching ${JSON.stringify(propertyMatch)}`);
|
|
105
|
+
}
|
|
106
|
+
if ((expectedMatchCount === 'at-most-one' || expectedMatchCount === 'exactly-one') && found.length > 1) {
|
|
107
|
+
throw new toolkit_error_1.ContextProviderError(`Found ${found.length} resources matching ${JSON.stringify(propertyMatch)}; please narrow the search criteria`);
|
|
108
|
+
}
|
|
109
|
+
return found;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (!(err instanceof toolkit_error_1.ContextProviderError) && !(err instanceof ZeroResourcesFoundError)) {
|
|
113
|
+
throw new toolkit_error_1.ContextProviderError(`Encountered CC API error while listing ${typeName} resources matching ${JSON.stringify(propertyMatch)}: ${err.message}`);
|
|
114
|
+
}
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.CcApiContextProviderPlugin = CcApiContextProviderPlugin;
|
|
120
|
+
/**
|
|
121
|
+
* Convert a CC API response object into a nicer object (parse the JSON)
|
|
122
|
+
*/
|
|
123
|
+
function foundResourceFromCcApi(desc) {
|
|
124
|
+
return {
|
|
125
|
+
identifier: desc.Identifier ?? '*MISSING*',
|
|
126
|
+
properties: JSON.parse(desc.Properties ?? '{}'),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Whether the given property value matches the given filter
|
|
131
|
+
*
|
|
132
|
+
* For now we just check for strict equality, but we can implement pattern matching and fuzzy matching here later
|
|
133
|
+
*/
|
|
134
|
+
function propertyMatchesFilter(actual, expected) {
|
|
135
|
+
return expected === actual;
|
|
136
|
+
}
|
|
137
|
+
function isObject(x) {
|
|
138
|
+
return typeof x === 'object' && x !== null && !Array.isArray(x);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* A specific lookup failure indicating 0 resources found that can be recovered
|
|
142
|
+
*/
|
|
143
|
+
class ZeroResourcesFoundError extends Error {
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtYXBpLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2MtYXBpLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHNFQUF5RTtBQUV6RSxxREFBaUU7QUFFakUsNERBQWdFO0FBQ2hFLGtDQUFzRDtBQUV0RCxNQUFhLDBCQUEwQjtJQUNSO0lBQTdCLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUF1QjtRQUMzQyxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksb0NBQW9CLENBQUMsK0ZBQStGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pKLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxzR0FBc0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEssQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNHLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyx3RUFBd0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdJLENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLElBQUEsZ0NBQXNCLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRW5GLElBQUksQ0FBQztZQUNILElBQUksU0FBMEIsQ0FBQztZQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsK0NBQStDO2dCQUMvQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4RixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixtQkFBbUI7Z0JBQ25CLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNqSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLG9DQUFvQixDQUFDLHNGQUFzRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoSixDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLEdBQUcsWUFBWSx1QkFBdUIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztnQkFDL0UseUNBQXlDO2dCQUN6QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDekIsQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEtBQUssQ0FBQyxXQUFXLENBQ3ZCLEVBQXVCLEVBQ3ZCLFFBQWdCLEVBQ2hCLGVBQXVCO1FBRXZCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQztnQkFDbEMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFVBQVUsRUFBRSxlQUFlO2FBQzVCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLG9DQUFvQixDQUFDLCtEQUErRCxDQUFDLENBQUM7WUFDbEcsQ0FBQztZQUVELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksR0FBRyxZQUFZLCtDQUF5QixJQUFLLEdBQVcsQ0FBQyxJQUFJLEtBQUssMkJBQTJCLEVBQUUsQ0FBQztnQkFDbEcsTUFBTSxJQUFJLHVCQUF1QixDQUFDLHVCQUF1QixRQUFRLHFCQUFxQixlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQzNHLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksb0NBQW9CLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLElBQUksb0NBQW9CLENBQUMsMENBQTBDLFFBQVEsYUFBYSxlQUFlLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbkksQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FDekIsRUFBdUIsRUFDdkIsUUFBZ0IsRUFDaEIsYUFBc0MsRUFDdEMsa0JBQTREO1FBRTVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDcEMsUUFBUSxFQUFFLFFBQVE7YUFFbkIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO2lCQUM5QyxHQUFHLENBQUMsc0JBQXNCLENBQUM7aUJBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNaLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO29CQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFhLEVBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDckQsT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsa0JBQWtCLEtBQUssY0FBYyxJQUFJLGtCQUFrQixLQUFLLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFHLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyx5Q0FBeUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUcsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsS0FBSyxhQUFhLElBQUksa0JBQWtCLEtBQUssYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkcsTUFBTSxJQUFJLG9DQUFvQixDQUFDLFNBQVMsS0FBSyxDQUFDLE1BQU0sdUJBQXVCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDakosQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLG9DQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywwQ0FBMEMsUUFBUSx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzSixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUhELGdFQTBIQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUF5QjtJQUN2RCxPQUFPO1FBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksV0FBVztRQUMxQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLE1BQWUsRUFBRSxRQUFpQjtJQUMvRCxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLENBQVU7SUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQVVEOztHQUVHO0FBQ0gsTUFBTSx1QkFBd0IsU0FBUSxLQUFLO0NBQzFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDY0FwaUNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGVzY3JpcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB7IFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQ29udHJvbENsaWVudCwgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgeyBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZpbmRKc29uVmFsdWUsIGdldFJlc3VsdE9iaiB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2NBcGlDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBkYXRhIG9iamVjdCB3aXRoIHRoZSB2YWx1ZSBmcm9tIENsb3VkQ29udHJvbCBBUEkgcmVzdWx0LlxuICAgKlxuICAgKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIENsb3VkIEFzc2VtYmx5IFNjaGVtYSBmb3IgdGhlIHNlbWFudGljcyBvZlxuICAgKiBlYWNoIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBDY0FwaUNvbnRleHRRdWVyeSkge1xuICAgIC8vIFZhbGlkYXRlIGlucHV0XG4gICAgaWYgKGFyZ3MuZXhhY3RJZGVudGlmaWVyICYmIGFyZ3MucHJvcGVydHlNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBQcm92aWRlciBwcm90b2NvbCBlcnJvcjogc3BlY2lmeSBlaXRoZXIgZXhhY3RJZGVudGlmaWVyIG9yIHByb3BlcnR5TWF0Y2gsIGJ1dCBub3QgYm90aCAoZ290ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9KWApO1xuICAgIH1cbiAgICBpZiAoYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQgJiYgYXJncy5kdW1teVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IGlmIGlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCBpcyBzZXQsIGEgZHVtbXlWYWx1ZSBtdXN0IGJlIHN1cHBsaWVkIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0pYCk7XG4gICAgfVxuICAgIGlmIChhcmdzLmR1bW15VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoYXJncy5kdW1teVZhbHVlKSB8fCAhYXJncy5kdW1teVZhbHVlLmV2ZXJ5KGlzT2JqZWN0KSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IGR1bW15VmFsdWUgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzLmR1bW15VmFsdWUpfSlgKTtcbiAgICB9XG5cbiAgICAvLyBEbyB0aGUgbG9va3VwXG4gICAgY29uc3QgY2xvdWRDb250cm9sID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsodGhpcy5hd3MsIGFyZ3MpKS5jbG91ZENvbnRyb2woKTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzb3VyY2VzOiBGb3VuZFJlc291cmNlW107XG4gICAgICBpZiAoYXJncy5leGFjdElkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gdXNlIGdldFJlc291cmNlIHRvIGdldCB0aGUgZXhhY3QgaW5kZW50aWZpZXJcbiAgICAgICAgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZShjbG91ZENvbnRyb2wsIGFyZ3MudHlwZU5hbWUsIGFyZ3MuZXhhY3RJZGVudGlmaWVyKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncy5wcm9wZXJ0eU1hdGNoKSB7XG4gICAgICAgIC8vIHVzZSBsaXN0UmVzb3VyY2VcbiAgICAgICAgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5saXN0UmVzb3VyY2VzKGNsb3VkQ29udHJvbCwgYXJncy50eXBlTmFtZSwgYXJncy5wcm9wZXJ0eU1hdGNoLCBhcmdzLmV4cGVjdGVkTWF0Y2hDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYFByb3ZpZGVyIHByb3RvY29sIGVycm9yOiBuZWl0aGVyIGV4YWN0SWRlbnRpZmllciBub3IgcHJvcGVydHlNYXRjaCBpcyBzcGVjaWZpZWQgaW4gJHtKU09OLnN0cmluZ2lmeShhcmdzKX0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvdXJjZXMubWFwKChyKSA9PiBnZXRSZXN1bHRPYmooci5wcm9wZXJ0aWVzLCByLmlkZW50aWZpZXIsIGFyZ3MucHJvcGVydGllc1RvUmV0dXJuKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IgJiYgYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQpIHtcbiAgICAgICAgLy8gV2UndmUgYWxyZWFkeSB0eXBlLWNoZWNrZWQgZHVtbXlWYWx1ZS5cbiAgICAgICAgcmV0dXJuIGFyZ3MuZHVtbXlWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgZ2V0UmVzb3VyY2UgZnJvbSBDQyBBUEkgdG8gZ2V0IHRoZSByZXNvdXJjZS5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvZ2V0LXJlc291cmNlLmh0bWxcbiAgICpcbiAgICogV2lsbCBhbHdheXMgcmV0dXJuIGV4YWN0bHkgb25lIHJlc291cmNlLCBvciBmYWlsLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNvdXJjZShcbiAgICBjYzogSUNsb3VkQ29udHJvbENsaWVudCxcbiAgICB0eXBlTmFtZTogc3RyaW5nLFxuICAgIGV4YWN0SWRlbnRpZmllcjogc3RyaW5nLFxuICApOiBQcm9taXNlPEZvdW5kUmVzb3VyY2VbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5nZXRSZXNvdXJjZSh7XG4gICAgICAgIFR5cGVOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgSWRlbnRpZmllcjogZXhhY3RJZGVudGlmaWVyLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3VsdC5SZXNvdXJjZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcignVW5leHBlY3RlZCBDbG91ZENvbnRyb2wgQVBJIGJlaGF2aW9yOiByZXR1cm5lZCBlbXB0eSByZXNwb25zZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2ZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkocmVzdWx0LlJlc291cmNlRGVzY3JpcHRpb24pXTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfHwgKGVyciBhcyBhbnkpLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IoYE5vIHJlc291cmNlIG9mIHR5cGUgJHt0eXBlTmFtZX0gd2l0aCBpZGVudGlmaWVyOiAke2V4YWN0SWRlbnRpZmllcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIENvbnRleHRQcm92aWRlckVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEVuY291bnRlcmVkIENDIEFQSSBlcnJvciB3aGlsZSBnZXR0aW5nICR7dHlwZU5hbWV9IHJlc291cmNlICR7ZXhhY3RJZGVudGlmaWVyfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbGlzdFJlc291cmNlcyBmcm9tIENDIEFQSSB0byBnZXQgdGhlIHJlc291cmNlcyBhbmQgYXBwbHkgYXJncy5wcm9wZXJ0eU1hdGNoIHRvIGZpbmQgdGhlIHJlc291cmNlcy5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvbGlzdC1yZXNvdXJjZXMuaHRtbFxuICAgKlxuICAgKiBXaWxsIHJldHVybiAwIG9yIG1vcmUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBEb2VzIG5vdCBjdXJyZW50bHkgcGFnaW5hdGUgdGhyb3VnaCBtb3JlIHRoYW4gb25lIHJlc3VsdCBwYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsaXN0UmVzb3VyY2VzKFxuICAgIGNjOiBJQ2xvdWRDb250cm9sQ2xpZW50LFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHlNYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZXhwZWN0ZWRNYXRjaENvdW50PzogQ2NBcGlDb250ZXh0UXVlcnlbJ2V4cGVjdGVkTWF0Y2hDb3VudCddLFxuICApOiBQcm9taXNlPEZvdW5kUmVzb3VyY2VbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5saXN0UmVzb3VyY2VzKHtcbiAgICAgICAgVHlwZU5hbWU6IHR5cGVOYW1lLFxuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvdW5kID0gKHJlc3VsdC5SZXNvdXJjZURlc2NyaXB0aW9ucyA/PyBbXSlcbiAgICAgICAgLm1hcChmb3VuZFJlc291cmNlRnJvbUNjQXBpKVxuICAgICAgICAuZmlsdGVyKChyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5TWF0Y2gpLmV2ZXJ5KChbcHJvcFBhdGgsIGV4cGVjdGVkXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsID0gZmluZEpzb25WYWx1ZShyLnByb3BlcnRpZXMsIHByb3BQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hdGNoZXNGaWx0ZXIoYWN0dWFsLCBleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoKGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2F0LWxlYXN0LW9uZScgfHwgZXhwZWN0ZWRNYXRjaENvdW50ID09PSAnZXhhY3RseS1vbmUnKSAmJiBmb3VuZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFplcm9SZXNvdXJjZXNGb3VuZEVycm9yKGBDb3VsZCBub3QgZmluZCBhbnkgcmVzb3VyY2VzIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9YCk7XG4gICAgICB9XG4gICAgICBpZiAoKGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2F0LW1vc3Qtb25lJyB8fCBleHBlY3RlZE1hdGNoQ291bnQgPT09ICdleGFjdGx5LW9uZScpICYmIGZvdW5kLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBGb3VuZCAke2ZvdW5kLmxlbmd0aH0gcmVzb3VyY2VzIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9OyBwbGVhc2UgbmFycm93IHRoZSBzZWFyY2ggY3JpdGVyaWFgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDb250ZXh0UHJvdmlkZXJFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBaZXJvUmVzb3VyY2VzRm91bmRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBFbmNvdW50ZXJlZCBDQyBBUEkgZXJyb3Igd2hpbGUgbGlzdGluZyAke3R5cGVOYW1lfSByZXNvdXJjZXMgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eU1hdGNoKX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIENDIEFQSSByZXNwb25zZSBvYmplY3QgaW50byBhIG5pY2VyIG9iamVjdCAocGFyc2UgdGhlIEpTT04pXG4gKi9cbmZ1bmN0aW9uIGZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkoZGVzYzogUmVzb3VyY2VEZXNjcmlwdGlvbik6IEZvdW5kUmVzb3VyY2Uge1xuICByZXR1cm4ge1xuICAgIGlkZW50aWZpZXI6IGRlc2MuSWRlbnRpZmllciA/PyAnKk1JU1NJTkcqJyxcbiAgICBwcm9wZXJ0aWVzOiBKU09OLnBhcnNlKGRlc2MuUHJvcGVydGllcyA/PyAne30nKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiBmaWx0ZXJcbiAqXG4gKiBGb3Igbm93IHdlIGp1c3QgY2hlY2sgZm9yIHN0cmljdCBlcXVhbGl0eSwgYnV0IHdlIGNhbiBpbXBsZW1lbnQgcGF0dGVybiBtYXRjaGluZyBhbmQgZnV6enkgbWF0Y2hpbmcgaGVyZSBsYXRlclxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU1hdGNoZXNGaWx0ZXIoYWN0dWFsOiB1bmtub3duLCBleHBlY3RlZDogdW5rbm93bikge1xuICByZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoeDogdW5rbm93bik6IHggaXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0ge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoeCk7XG59XG5cbi8qKlxuICogQSBwYXJzZWQgdmVyc2lvbiBvZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gQ0NBUElcbiAqL1xuaW50ZXJmYWNlIEZvdW5kUmVzb3VyY2Uge1xuICByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEEgc3BlY2lmaWMgbG9va3VwIGZhaWx1cmUgaW5kaWNhdGluZyAwIHJlc291cmNlcyBmb3VuZCB0aGF0IGNhbiBiZSByZWNvdmVyZWRcbiAqL1xuY2xhc3MgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EndpointServiceAvailabilityZonesContextQuery } 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 retrieve the Availability Zones for an endpoint service
|
|
7
|
+
*/
|
|
8
|
+
export declare class EndpointServiceAZContextProviderPlugin implements ContextProviderPlugin {
|
|
9
|
+
private readonly aws;
|
|
10
|
+
private readonly io;
|
|
11
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
12
|
+
getValue(args: EndpointServiceAvailabilityZonesContextQuery): Promise<string[] | undefined>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EndpointServiceAZContextProviderPlugin = void 0;
|
|
4
|
+
const private_1 = require("../api/aws-auth/private");
|
|
5
|
+
/**
|
|
6
|
+
* Plugin to retrieve the Availability Zones for an endpoint service
|
|
7
|
+
*/
|
|
8
|
+
class EndpointServiceAZContextProviderPlugin {
|
|
9
|
+
aws;
|
|
10
|
+
io;
|
|
11
|
+
constructor(aws, io) {
|
|
12
|
+
this.aws = aws;
|
|
13
|
+
this.io = io;
|
|
14
|
+
}
|
|
15
|
+
async getValue(args) {
|
|
16
|
+
const region = args.region;
|
|
17
|
+
const account = args.account;
|
|
18
|
+
const serviceName = args.serviceName;
|
|
19
|
+
await this.io.debug(`Reading AZs for ${account}:${region}:${serviceName}`);
|
|
20
|
+
const ec2 = (await (0, private_1.initContextProviderSdk)(this.aws, args)).ec2();
|
|
21
|
+
const response = await ec2.describeVpcEndpointServices({
|
|
22
|
+
ServiceNames: [serviceName],
|
|
23
|
+
});
|
|
24
|
+
// expect a service in the response
|
|
25
|
+
if (!response.ServiceDetails || response.ServiceDetails.length === 0) {
|
|
26
|
+
await this.io.debug(`Could not retrieve service details for ${account}:${region}:${serviceName}`);
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const azs = response.ServiceDetails[0].AvailabilityZones;
|
|
30
|
+
await this.io.debug(`Endpoint service ${account}:${region}:${serviceName} is available in availability zones ${azs}`);
|
|
31
|
+
return azs;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.EndpointServiceAZContextProviderPlugin = EndpointServiceAZContextProviderPlugin;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2VydmljZS1hdmFpbGFiaWxpdHktem9uZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmRwb2ludC1zZXJ2aWNlLWF2YWlsYWJpbGl0eS16b25lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFBbUY7QUFHbkY7O0dBRUc7QUFDSCxNQUFhLHNDQUFzQztJQUNwQjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQWtEO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLE9BQU8sSUFBSSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsMkJBQTJCLENBQUM7WUFDckQsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxPQUFPLElBQUksTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDbEcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixPQUFPLElBQUksTUFBTSxJQUFJLFdBQVcsdUNBQXVDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEgsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUF2QkQsd0ZBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludFNlcnZpY2VBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHsgdHlwZSBTZGtQcm92aWRlciwgaW5pdENvbnRleHRQcm92aWRlclNkayB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi4vYXBpL3BsdWdpbic7XG5cbi8qKlxuICogUGx1Z2luIHRvIHJldHJpZXZlIHRoZSBBdmFpbGFiaWxpdHkgWm9uZXMgZm9yIGFuIGVuZHBvaW50IHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEVuZHBvaW50U2VydmljZUFaQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBFbmRwb2ludFNlcnZpY2VBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBhcmdzLmFjY291bnQ7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBhcmdzLnNlcnZpY2VOYW1lO1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYFJlYWRpbmcgQVpzIGZvciAke2FjY291bnR9OiR7cmVnaW9ufToke3NlcnZpY2VOYW1lfWApO1xuICAgIGNvbnN0IGVjMiA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkuZWMyKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlYzIuZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzKHtcbiAgICAgIFNlcnZpY2VOYW1lczogW3NlcnZpY2VOYW1lXSxcbiAgICB9KTtcblxuICAgIC8vIGV4cGVjdCBhIHNlcnZpY2UgaW4gdGhlIHJlc3BvbnNlXG4gICAgaWYgKCFyZXNwb25zZS5TZXJ2aWNlRGV0YWlscyB8fCByZXNwb25zZS5TZXJ2aWNlRGV0YWlscy5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYENvdWxkIG5vdCByZXRyaWV2ZSBzZXJ2aWNlIGRldGFpbHMgZm9yICR7YWNjb3VudH06JHtyZWdpb259OiR7c2VydmljZU5hbWV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGF6cyA9IHJlc3BvbnNlLlNlcnZpY2VEZXRhaWxzWzBdLkF2YWlsYWJpbGl0eVpvbmVzO1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYEVuZHBvaW50IHNlcnZpY2UgJHthY2NvdW50fToke3JlZ2lvbn06JHtzZXJ2aWNlTmFtZX0gaXMgYXZhaWxhYmxlIGluIGF2YWlsYWJpbGl0eSB6b25lcyAke2F6c31gKTtcbiAgICByZXR1cm4gYXpzO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HostedZoneContextQuery } 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
|
+
export declare class HostedZoneContextProviderPlugin implements ContextProviderPlugin {
|
|
6
|
+
private readonly aws;
|
|
7
|
+
private readonly io;
|
|
8
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
9
|
+
getValue(args: HostedZoneContextQuery): Promise<object>;
|
|
10
|
+
private filterZones;
|
|
11
|
+
private isHostedZoneQuery;
|
|
12
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HostedZoneContextProviderPlugin = void 0;
|
|
4
|
+
const private_1 = require("../api/aws-auth/private");
|
|
5
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
6
|
+
class HostedZoneContextProviderPlugin {
|
|
7
|
+
aws;
|
|
8
|
+
io;
|
|
9
|
+
constructor(aws, io) {
|
|
10
|
+
this.aws = aws;
|
|
11
|
+
this.io = io;
|
|
12
|
+
}
|
|
13
|
+
async getValue(args) {
|
|
14
|
+
const account = args.account;
|
|
15
|
+
const region = args.region;
|
|
16
|
+
if (!this.isHostedZoneQuery(args)) {
|
|
17
|
+
throw new toolkit_error_1.ContextProviderError(`HostedZoneProvider requires domainName property to be set in ${args}`);
|
|
18
|
+
}
|
|
19
|
+
const domainName = args.domainName;
|
|
20
|
+
await this.io.debug(`Reading hosted zone ${account}:${region}:${domainName}`);
|
|
21
|
+
const r53 = (await (0, private_1.initContextProviderSdk)(this.aws, args)).route53();
|
|
22
|
+
const response = await r53.listHostedZonesByName({ DNSName: domainName });
|
|
23
|
+
if (!response.HostedZones) {
|
|
24
|
+
throw new toolkit_error_1.ContextProviderError(`Hosted Zone not found in account ${account}, region ${region}: ${domainName}`);
|
|
25
|
+
}
|
|
26
|
+
const candidateZones = await this.filterZones(r53, response.HostedZones, args);
|
|
27
|
+
if (candidateZones.length !== 1) {
|
|
28
|
+
const filteProps = `dns:${domainName}, privateZone:${args.privateZone}, vpcId:${args.vpcId}`;
|
|
29
|
+
throw new toolkit_error_1.ContextProviderError(`Found zones: ${JSON.stringify(candidateZones)} for ${filteProps}, but wanted exactly 1 zone`);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
Id: candidateZones[0].Id,
|
|
33
|
+
Name: candidateZones[0].Name,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async filterZones(r53, zones, props) {
|
|
37
|
+
let candidates = [];
|
|
38
|
+
const domainName = props.domainName.endsWith('.') ? props.domainName : `${props.domainName}.`;
|
|
39
|
+
await this.io.debug(`Found the following zones ${JSON.stringify(zones)}`);
|
|
40
|
+
candidates = zones.filter((zone) => zone.Name === domainName);
|
|
41
|
+
await this.io.debug(`Found the following matched name zones ${JSON.stringify(candidates)}`);
|
|
42
|
+
if (props.privateZone) {
|
|
43
|
+
candidates = candidates.filter((zone) => zone.Config && zone.Config.PrivateZone);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
candidates = candidates.filter((zone) => !zone.Config || !zone.Config.PrivateZone);
|
|
47
|
+
}
|
|
48
|
+
if (props.vpcId) {
|
|
49
|
+
const vpcZones = [];
|
|
50
|
+
for (const zone of candidates) {
|
|
51
|
+
const data = await r53.getHostedZone({ Id: zone.Id });
|
|
52
|
+
if (!data.VPCs) {
|
|
53
|
+
await this.io.debug(`Expected VPC for private zone but no VPC found ${zone.Id}`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (data.VPCs.map((vpc) => vpc.VPCId).includes(props.vpcId)) {
|
|
57
|
+
vpcZones.push(zone);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return vpcZones;
|
|
61
|
+
}
|
|
62
|
+
return candidates;
|
|
63
|
+
}
|
|
64
|
+
isHostedZoneQuery(props) {
|
|
65
|
+
return props.domainName !== undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.HostedZoneContextProviderPlugin = HostedZoneContextProviderPlugin;
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkLXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9zdGVkLXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFpRTtBQUVqRSw0REFBZ0U7QUFFaEUsTUFBYSwrQkFBK0I7SUFDYjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQTRCO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLG9DQUFvQixDQUFDLGdFQUFnRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLE9BQU8sSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxvQ0FBb0MsT0FBTyxZQUFZLE1BQU0s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LENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQW1DO1FBQzNELE9BQVEsS0FBZ0MsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQ3BFLENBQUM7Q0FDRjtBQWhFRCwwRUFnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBIb3N0ZWRab25lIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzIH0gZnJvbSAnLic7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZTUzQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgSG9zdGVkWm9uZUNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlciwgcHJpdmF0ZSByZWFkb25seSBpbzogSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoYXJnczogSG9zdGVkWm9uZUNvbnRleHRRdWVyeSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgYWNjb3VudCA9IGFyZ3MuYWNjb3VudDtcbiAgICBjb25zdCByZWdpb24gPSBhcmdzLnJlZ2lvbjtcbiAgICBpZiAoIXRoaXMuaXNIb3N0ZWRab25lUXVlcnkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkWm9uZVByb3ZpZGVyIHJlcXVpcmVzIGRvbWFpbk5hbWUgcHJvcGVydHkgdG8gYmUgc2V0IGluICR7YXJnc31gKTtcbiAgICB9XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IGFyZ3MuZG9tYWluTmFtZTtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBSZWFkaW5nIGhvc3RlZCB6b25lICR7YWNjb3VudH06JHtyZWdpb259OiR7ZG9tYWluTmFtZX1gKTtcbiAgICBjb25zdCByNTMgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLnJvdXRlNTMoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHI1My5saXN0SG9zdGVkWm9uZXNCeU5hbWUoeyBETlNOYW1lOiBkb21haW5OYW1lIH0pO1xuICAgIGlmICghcmVzcG9uc2UuSG9zdGVkWm9uZXMpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkIFpvbmUgbm90IGZvdW5kIGluIGFjY291bnQgJHthY2NvdW50fSwgcmVnaW9uICR7cmVnaW9ufTogJHtkb21haW5OYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBjYW5kaWRhdGVab25lcyA9IGF3YWl0IHRoaXMuZmlsdGVyWm9uZXMocjUzLCByZXNwb25zZS5Ib3N0ZWRab25lcywgYXJncyk7XG4gICAgaWYgKGNhbmRpZGF0ZVpvbmVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc3QgZmlsdGVQcm9wcyA9IGBkbnM6JHtkb21haW5OYW1lfSwgcHJpdmF0ZVpvbmU6JHthcmdzLnByaXZhdGVab25lfSwgdnBjSWQ6JHthcmdzLnZwY0lkfWA7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEZvdW5kIHpvbmVzOiAke0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZVpvbmVzKX0gZm9yICR7ZmlsdGVQcm9wc30sIGJ1dCB3YW50ZWQgZXhhY3RseSAxIHpvbmVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSWQ6IGNhbmRpZGF0ZVpvbmVzWzBdLklkLFxuICAgICAgTmFtZTogY2FuZGlkYXRlWm9uZXNbMF0uTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJab25lcyhcbiAgICByNTM6IElSb3V0ZTUzQ2xpZW50LFxuICAgIHpvbmVzOiBIb3N0ZWRab25lW10sXG4gICAgcHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnksXG4gICk6IFByb21pc2U8SG9zdGVkWm9uZVtdPiB7XG4gICAgbGV0IGNhbmRpZGF0ZXM6IEhvc3RlZFpvbmVbXSA9IFtdO1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBwcm9wcy5kb21haW5OYW1lLmVuZHNXaXRoKCcuJykgPyBwcm9wcy5kb21haW5OYW1lIDogYCR7cHJvcHMuZG9tYWluTmFtZX0uYDtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBGb3VuZCB0aGUgZm9sbG93aW5nIHpvbmVzICR7SlNPTi5zdHJpbmdpZnkoem9uZXMpfWApO1xuICAgIGNhbmRpZGF0ZXMgPSB6b25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUuTmFtZSA9PT0gZG9tYWluTmFtZSk7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgRm91bmQgdGhlIGZvbGxvd2luZyBtYXRjaGVkIG5hbWUgem9uZXMgJHtKU09OLnN0cmluZ2lmeShjYW5kaWRhdGVzKX1gKTtcbiAgICBpZiAocHJvcHMucHJpdmF0ZVpvbmUpIHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5Db25maWcgJiYgem9uZS5Db25maWcuUHJpdmF0ZVpvbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5maWx0ZXIoKHpvbmUpID0+ICF6b25lLkNvbmZpZyB8fCAhem9uZS5Db25maWcuUHJpdmF0ZVpvbmUpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjSWQpIHtcbiAgICAgIGNvbnN0IHZwY1pvbmVzOiBIb3N0ZWRab25lW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgem9uZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByNTMuZ2V0SG9zdGVkWm9uZSh7IElkOiB6b25lLklkIH0pO1xuICAgICAgICBpZiAoIWRhdGEuVlBDcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYEV4cGVjdGVkIFZQQyBmb3IgcHJpdmF0ZSB6b25lIGJ1dCBubyBWUEMgZm91bmQgJHt6b25lLklkfWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLlZQQ3MubWFwKCh2cGMpID0+IHZwYy5WUENJZCkuaW5jbHVkZXMocHJvcHMudnBjSWQpKSB7XG4gICAgICAgICAgdnBjWm9uZXMucHVzaCh6b25lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZwY1pvbmVzO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlcztcbiAgfVxuXG4gIHByaXZhdGUgaXNIb3N0ZWRab25lUXVlcnkocHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfCBhbnkpOiBwcm9wcyBpcyBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IHtcbiAgICByZXR1cm4gKHByb3BzIGFzIEhvc3RlZFpvbmVDb250ZXh0UXVlcnkpLmRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as cxschema from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { SdkProvider } from '../api/aws-auth/private';
|
|
3
|
+
import type { Context } from '../api/context';
|
|
4
|
+
import type { IoHelper } from '../api/io/private';
|
|
5
|
+
import type { PluginHost, ContextProviderPlugin } from '../api/plugin';
|
|
6
|
+
type ContextProviderFactory = ((sdk: SdkProvider, io: IContextProviderMessages) => ContextProviderPlugin);
|
|
7
|
+
export interface IContextProviderMessages {
|
|
8
|
+
/**
|
|
9
|
+
* A message that is presented to users in normal mode of operation.
|
|
10
|
+
*
|
|
11
|
+
* Should be used sparingly. The Context Provider framework already provides useful output by default.
|
|
12
|
+
* This can be uses in exceptionally situations, e.g. if a lookup call is expected to take a long time.
|
|
13
|
+
*/
|
|
14
|
+
info(message: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* A message that helps users debugging the context provider.
|
|
17
|
+
*
|
|
18
|
+
* Should be used in most cases to note on current action.
|
|
19
|
+
*/
|
|
20
|
+
debug(message: string): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Iterate over the list of missing context values and invoke the appropriate providers from the map to retrieve them
|
|
24
|
+
*/
|
|
25
|
+
export declare function provideContextValues(missingValues: cxschema.MissingContext[], context: Context, sdk: SdkProvider, pluginHost: PluginHost, ioHelper: IoHelper): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Register a context provider
|
|
28
|
+
*
|
|
29
|
+
* A context provider cannot reuse the SDKs authentication mechanisms.
|
|
30
|
+
*/
|
|
31
|
+
export declare function registerContextProvider(name: string, provider: ContextProviderPlugin): void;
|
|
32
|
+
/**
|
|
33
|
+
* Register a plugin context provider
|
|
34
|
+
*
|
|
35
|
+
* A plugin provider cannot reuse the SDKs authentication mechanisms.
|
|
36
|
+
*/
|
|
37
|
+
export declare function registerPluginContextProvider(name: string, provider: ContextProviderPlugin): void;
|
|
38
|
+
/**
|
|
39
|
+
* Register a context provider factory
|
|
40
|
+
*
|
|
41
|
+
* A context provider factory takes an SdkProvider and returns the context provider plugin.
|
|
42
|
+
*/
|
|
43
|
+
export declare function registerContextProviderFactory(name: string, provider: ContextProviderFactory): void;
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.provideContextValues = provideContextValues;
|
|
4
|
+
exports.registerContextProvider = registerContextProvider;
|
|
5
|
+
exports.registerPluginContextProvider = registerPluginContextProvider;
|
|
6
|
+
exports.registerContextProviderFactory = registerContextProviderFactory;
|
|
7
|
+
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
|
8
|
+
const cxapi = require("@aws-cdk/cx-api");
|
|
9
|
+
const ami_1 = require("./ami");
|
|
10
|
+
const availability_zones_1 = require("./availability-zones");
|
|
11
|
+
const cc_api_provider_1 = require("./cc-api-provider");
|
|
12
|
+
const endpoint_service_availability_zones_1 = require("./endpoint-service-availability-zones");
|
|
13
|
+
const hosted_zones_1 = require("./hosted-zones");
|
|
14
|
+
const keys_1 = require("./keys");
|
|
15
|
+
const load_balancers_1 = require("./load-balancers");
|
|
16
|
+
const security_groups_1 = require("./security-groups");
|
|
17
|
+
const ssm_parameters_1 = require("./ssm-parameters");
|
|
18
|
+
const vpcs_1 = require("./vpcs");
|
|
19
|
+
const context_1 = require("../api/context");
|
|
20
|
+
const environment_1 = require("../api/environment");
|
|
21
|
+
const private_1 = require("../api/io/private");
|
|
22
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
23
|
+
const util_1 = require("../util");
|
|
24
|
+
const PLUGIN_PROVIDER_PREFIX = 'plugin';
|
|
25
|
+
class ContextProviderMessages {
|
|
26
|
+
ioHelper;
|
|
27
|
+
providerName;
|
|
28
|
+
constructor(ioHelper, providerName) {
|
|
29
|
+
this.ioHelper = ioHelper;
|
|
30
|
+
this.providerName = providerName;
|
|
31
|
+
}
|
|
32
|
+
async info(message) {
|
|
33
|
+
return this.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0300.msg(message, {
|
|
34
|
+
provider: this.providerName,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
async debug(message) {
|
|
38
|
+
return this.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0301.msg(message, {
|
|
39
|
+
provider: this.providerName,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Iterate over the list of missing context values and invoke the appropriate providers from the map to retrieve them
|
|
45
|
+
*/
|
|
46
|
+
async function provideContextValues(missingValues, context, sdk, pluginHost, ioHelper) {
|
|
47
|
+
for (const missingContext of missingValues) {
|
|
48
|
+
const key = missingContext.key;
|
|
49
|
+
const providerName = missingContext.provider === cxschema.ContextProvider.PLUGIN
|
|
50
|
+
? `${PLUGIN_PROVIDER_PREFIX}:${missingContext.props.pluginName}`
|
|
51
|
+
: missingContext.provider;
|
|
52
|
+
let factory;
|
|
53
|
+
if (providerName.startsWith(`${PLUGIN_PROVIDER_PREFIX}:`)) {
|
|
54
|
+
const plugin = pluginHost.contextProviderPlugins[providerName.substring(PLUGIN_PROVIDER_PREFIX.length + 1)];
|
|
55
|
+
if (!plugin) {
|
|
56
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
57
|
+
throw new toolkit_error_1.ContextProviderError(`Unrecognized plugin context provider name: ${missingContext.provider}.`);
|
|
58
|
+
}
|
|
59
|
+
factory = () => plugin;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
factory = availableContextProviders[providerName];
|
|
63
|
+
if (!factory) {
|
|
64
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
65
|
+
throw new toolkit_error_1.ContextProviderError(`Unrecognized context provider name: ${missingContext.provider}. You might need to update the toolkit to match the version of the construct library.`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const provider = factory(sdk, new ContextProviderMessages(ioHelper, providerName));
|
|
69
|
+
let value;
|
|
70
|
+
try {
|
|
71
|
+
const environment = missingContext.props.account && missingContext.props.region
|
|
72
|
+
? cxapi.EnvironmentUtils.make(missingContext.props.account, missingContext.props.region)
|
|
73
|
+
: undefined;
|
|
74
|
+
const resolvedEnvironment = environment
|
|
75
|
+
? await sdk.resolveEnvironment(environment)
|
|
76
|
+
: { account: '?', region: '?', name: '?' };
|
|
77
|
+
const arns = await (0, environment_1.replaceEnvPlaceholders)({
|
|
78
|
+
lookupRoleArn: missingContext.props.lookupRoleArn,
|
|
79
|
+
}, resolvedEnvironment, sdk);
|
|
80
|
+
value = await provider.getValue({ ...missingContext.props, lookupRoleArn: arns.lookupRoleArn });
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
// Set a specially formatted provider value which will be interpreted
|
|
84
|
+
// as a lookup failure in the toolkit.
|
|
85
|
+
value = { [cxapi.PROVIDER_ERROR_KEY]: (0, util_1.formatErrorMessage)(e), [context_1.TRANSIENT_CONTEXT_KEY]: true };
|
|
86
|
+
}
|
|
87
|
+
context.set(key, value);
|
|
88
|
+
await ioHelper.notify(private_1.IO.DEFAULT_ASSEMBLY_DEBUG.msg(`Setting "${key}" context to ${JSON.stringify(value)}`));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Register a context provider
|
|
93
|
+
*
|
|
94
|
+
* A context provider cannot reuse the SDKs authentication mechanisms.
|
|
95
|
+
*/
|
|
96
|
+
function registerContextProvider(name, provider) {
|
|
97
|
+
availableContextProviders[name] = () => provider;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Register a plugin context provider
|
|
101
|
+
*
|
|
102
|
+
* A plugin provider cannot reuse the SDKs authentication mechanisms.
|
|
103
|
+
*/
|
|
104
|
+
function registerPluginContextProvider(name, provider) {
|
|
105
|
+
registerContextProvider(`${PLUGIN_PROVIDER_PREFIX}:${name}`, provider);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Register a context provider factory
|
|
109
|
+
*
|
|
110
|
+
* A context provider factory takes an SdkProvider and returns the context provider plugin.
|
|
111
|
+
*/
|
|
112
|
+
function registerContextProviderFactory(name, provider) {
|
|
113
|
+
availableContextProviders[name] = provider;
|
|
114
|
+
}
|
|
115
|
+
const availableContextProviders = {
|
|
116
|
+
[cxschema.ContextProvider.AVAILABILITY_ZONE_PROVIDER]: (s, io) => new availability_zones_1.AZContextProviderPlugin(s, io),
|
|
117
|
+
[cxschema.ContextProvider.SSM_PARAMETER_PROVIDER]: (s, io) => new ssm_parameters_1.SSMContextProviderPlugin(s, io),
|
|
118
|
+
[cxschema.ContextProvider.HOSTED_ZONE_PROVIDER]: (s, io) => new hosted_zones_1.HostedZoneContextProviderPlugin(s, io),
|
|
119
|
+
[cxschema.ContextProvider.VPC_PROVIDER]: (s, io) => new vpcs_1.VpcNetworkContextProviderPlugin(s, io),
|
|
120
|
+
[cxschema.ContextProvider.AMI_PROVIDER]: (s, io) => new ami_1.AmiContextProviderPlugin(s, io),
|
|
121
|
+
[cxschema.ContextProvider.ENDPOINT_SERVICE_AVAILABILITY_ZONE_PROVIDER]: (s, io) => new endpoint_service_availability_zones_1.EndpointServiceAZContextProviderPlugin(s, io),
|
|
122
|
+
[cxschema.ContextProvider.SECURITY_GROUP_PROVIDER]: (s) => new security_groups_1.SecurityGroupContextProviderPlugin(s),
|
|
123
|
+
[cxschema.ContextProvider.LOAD_BALANCER_PROVIDER]: (s) => new load_balancers_1.LoadBalancerContextProviderPlugin(s),
|
|
124
|
+
[cxschema.ContextProvider.LOAD_BALANCER_LISTENER_PROVIDER]: (s) => new load_balancers_1.LoadBalancerListenerContextProviderPlugin(s),
|
|
125
|
+
[cxschema.ContextProvider.KEY_PROVIDER]: (s, io) => new keys_1.KeyContextProviderPlugin(s, io),
|
|
126
|
+
[cxschema.ContextProvider.CC_API_PROVIDER]: (s) => new cc_api_provider_1.CcApiContextProviderPlugin(s),
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFFQSxvREF1REM7QUFPRCwwREFFQztBQU9ELHNFQUVDO0FBT0Qsd0VBRUM7QUF2SkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywrQkFBaUQ7QUFDakQsNkRBQStEO0FBQy9ELHVEQUErRDtBQUMvRCwrRkFBK0Y7QUFDL0YsaURBQWlFO0FBQ2pFLGlDQUFrRDtBQUNsRCxxREFBZ0g7QUFDaEgsdURBQXVFO0FBQ3ZFLHFEQUE0RDtBQUM1RCxpQ0FBeUQ7QUFHekQsNENBQXVEO0FBQ3ZELG9EQUE0RDtBQUM1RCwrQ0FBdUM7QUFHdkMsNERBQWdFO0FBQ2hFLGtDQUE2QztBQUs3QyxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQW1CeEMsTUFBTSx1QkFBdUI7SUFDVixRQUFRLENBQVc7SUFDbkIsWUFBWSxDQUFTO0lBRXRDLFlBQW1CLFFBQWtCLEVBQUUsWUFBb0I7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQzdELFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUM1QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQWU7UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUM3RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDNUIsQ0FBQyxDQUFDLENBQUM7SUFD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QUFFLEVBQUUsQ0FBQyxJQUFJLDRDQUEwQixDQUFDLENBQUMsQ0FBQztDQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2FtaSc7XG5pbXBvcnQgeyBBWkNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vYXZhaWxhYmlsaXR5LXpvbmVzJztcbmltcG9ydCB7IENjQXBpQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi9jYy1hcGktcHJvdmlkZXInO1xuaW1wb3J0IHsgRW5kcG9pbnRTZXJ2aWNlQVpDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2VuZHBvaW50LXNlcnZpY2UtYXZhaWxhYmlsaXR5LXpvbmVzJztcbmltcG9ydCB7IEhvc3RlZFpvbmVDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2hvc3RlZC16b25lcyc7XG5pbXBvcnQgeyBLZXlDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2tleXMnO1xuaW1wb3J0IHsgTG9hZEJhbGFuY2VyQ29udGV4dFByb3ZpZGVyUGx1Z2luLCBMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vbG9hZC1iYWxhbmNlcnMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vc2VjdXJpdHktZ3JvdXBzJztcbmltcG9ydCB7IFNTTUNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vc3NtLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vdnBjcyc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnLi4vYXBpL2NvbnRleHQnO1xuaW1wb3J0IHsgVFJBTlNJRU5UX0NPTlRFWFRfS0VZIH0gZnJvbSAnLi4vYXBpL2NvbnRleHQnO1xuaW1wb3J0IHsgcmVwbGFjZUVudlBsYWNlaG9sZGVycyB9IGZyb20gJy4uL2FwaS9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBJTyB9IGZyb20gJy4uL2FwaS9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9hcGkvaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkhvc3QsIENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbnR5cGUgQ29udGV4dFByb3ZpZGVyRmFjdG9yeSA9ICgoc2RrOiBTZGtQcm92aWRlciwgaW86IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcykgPT4gQ29udGV4dFByb3ZpZGVyUGx1Z2luKTtcbnR5cGUgUHJvdmlkZXJNYXAgPSB7IFtuYW1lOiBzdHJpbmddOiBDb250ZXh0UHJvdmlkZXJGYWN0b3J5IH07XG5cbmNvbnN0IFBMVUdJTl9QUk9WSURFUl9QUkVGSVggPSAncGx1Z2luJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMge1xuICAvKipcbiAgICogQSBtZXNzYWdlIHRoYXQgaXMgcHJlc2VudGVkIHRvIHVzZXJzIGluIG5vcm1hbCBtb2RlIG9mIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LiBUaGUgQ29udGV4dCBQcm92aWRlciBmcmFtZXdvcmsgYWxyZWFkeSBwcm92aWRlcyB1c2VmdWwgb3V0cHV0IGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgY2FuIGJlIHVzZXMgaW4gZXhjZXB0aW9uYWxseSBzaXR1YXRpb25zLCBlLmcuIGlmIGEgbG9va3VwIGNhbGwgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIGxvbmcgdGltZS5cbiAgICovXG4gIGluZm8obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQSBtZXNzYWdlIHRoYXQgaGVscHMgdXNlcnMgZGVidWdnaW5nIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKlxuICAgKiBTaG91bGQgYmUgdXNlZCBpbiBtb3N0IGNhc2VzIHRvIG5vdGUgb24gY3VycmVudCBhY3Rpb24uXG4gICAqL1xuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jbGFzcyBDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyBpbXBsZW1lbnRzIElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogSW9IZWxwZXIsIHByb3ZpZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICAgIHRoaXMucHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluZm8obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDMwMC5tc2cobWVzc2FnZSwge1xuICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXJOYW1lLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMzAxLm1zZyhtZXNzYWdlLCB7XG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlck5hbWUsXG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIG1pc3NpbmcgY29udGV4dCB2YWx1ZXMgYW5kIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgcHJvdmlkZXJzIGZyb20gdGhlIG1hcCB0byByZXRyaWV2ZSB0aGVtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92aWRlQ29udGV4dFZhbHVlcyhcbiAgbWlzc2luZ1ZhbHVlczogY3hzY2hlbWEuTWlzc2luZ0NvbnRleHRbXSxcbiAgY29udGV4dDogQ29udGV4dCxcbiAgc2RrOiBTZGtQcm92aWRlcixcbiAgcGx1Z2luSG9zdDogUGx1Z2luSG9zdCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKSB7XG4gIGZvciAoY29uc3QgbWlzc2luZ0NvbnRleHQgb2YgbWlzc2luZ1ZhbHVlcykge1xuICAgIGNvbnN0IGtleSA9IG1pc3NpbmdDb250ZXh0LmtleTtcblxuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG1pc3NpbmdDb250ZXh0LnByb3ZpZGVyID09PSBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuUExVR0lOXG4gICAgICA/IGAke1BMVUdJTl9QUk9WSURFUl9QUkVGSVh9OiR7KG1pc3NpbmdDb250ZXh0LnByb3BzIGFzIGN4c2NoZW1hLlBsdWdpbkNvbnRleHRRdWVyeSkucGx1Z2luTmFtZX1gXG4gICAgICA6IG1pc3NpbmdDb250ZXh0LnByb3ZpZGVyO1xuXG4gICAgbGV0IGZhY3Rvcnk7XG4gICAgaWYgKHByb3ZpZGVyTmFtZS5zdGFydHNXaXRoKGAke1BMVUdJTl9QUk9WSURFUl9QUkVGSVh9OmApKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5Ib3N0LmNvbnRleHRQcm92aWRlclBsdWdpbnNbcHJvdmlkZXJOYW1lLnN1YnN0cmluZyhQTFVHSU5fUFJPVklERVJfUFJFRklYLmxlbmd0aCArIDEpXTtcbiAgICAgIGlmICghcGx1Z2luKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBVbnJlY29nbml6ZWQgcGx1Z2luIGNvbnRleHQgcHJvdmlkZXIgbmFtZTogJHttaXNzaW5nQ29udGV4dC5wcm92aWRlcn0uYCk7XG4gICAgICB9XG4gICAgICBmYWN0b3J5ID0gKCkgPT4gcGx1Z2luO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWN0b3J5ID0gYXZhaWxhYmxlQ29udGV4dFByb3ZpZGVyc1twcm92aWRlck5hbWVdO1xuICAgICAgaWYgKCFmYWN0b3J5KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBVbnJlY29nbml6ZWQgY29udGV4dCBwcm92aWRlciBuYW1lOiAke21pc3NpbmdDb250ZXh0LnByb3ZpZGVyfS4gWW91IG1pZ2h0IG5lZWQgdG8gdXBkYXRlIHRoZSB0b29sa2l0IHRvIG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3QgbGlicmFyeS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlciA9IGZhY3Rvcnkoc2RrLCBuZXcgQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMoaW9IZWxwZXIsIHByb3ZpZGVyTmFtZSkpO1xuXG4gICAgbGV0IHZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IG1pc3NpbmdDb250ZXh0LnByb3BzLmFjY291bnQgJiYgbWlzc2luZ0NvbnRleHQucHJvcHMucmVnaW9uXG4gICAgICAgID8gY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKG1pc3NpbmdDb250ZXh0LnByb3BzLmFjY291bnQsIG1pc3NpbmdDb250ZXh0LnByb3BzLnJlZ2lvbilcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgICAgICAgPyBhd2FpdCBzZGsucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KVxuICAgICAgICA6IHsgYWNjb3VudDogJz8nLCByZWdpb246ICc/JywgbmFtZTogJz8nIH07XG5cbiAgICAgIGNvbnN0IGFybnMgPSBhd2FpdCByZXBsYWNlRW52UGxhY2Vob2xkZXJzKHtcbiAgICAgICAgbG9va3VwUm9sZUFybjogbWlzc2luZ0NvbnRleHQucHJvcHMubG9va3VwUm9sZUFybixcbiAgICAgIH0sIHJlc29sdmVkRW52aXJvbm1lbnQsIHNkayk7XG5cbiAgICAgIHZhbHVlID0gYXdhaXQgcHJvdmlkZXIuZ2V0VmFsdWUoeyAuLi5taXNzaW5nQ29udGV4dC5wcm9wcywgbG9va3VwUm9sZUFybjogYXJucy5sb29rdXBSb2xlQXJuIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gU2V0IGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBwcm92aWRlciB2YWx1ZSB3aGljaCB3aWxsIGJlIGludGVycHJldGVkXG4gICAgICAvLyBhcyBhIGxvb2t1cCBmYWlsdXJlIGluIHRoZSB0b29sa2l0LlxuICAgICAgdmFsdWUgPSB7IFtjeGFwaS5QUk9WSURFUl9FUlJPUl9LRVldOiBmb3JtYXRFcnJvck1lc3NhZ2UoZSksIFtUUkFOU0lFTlRfQ09OVEVYVF9LRVldOiB0cnVlIH07XG4gICAgfVxuICAgIGNvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX0FTU0VNQkxZX0RFQlVHLm1zZyhgU2V0dGluZyBcIiR7a2V5fVwiIGNvbnRleHQgdG8gJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCkpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjb250ZXh0IHByb3ZpZGVyXG4gKlxuICogQSBjb250ZXh0IHByb3ZpZGVyIGNhbm5vdCByZXVzZSB0aGUgU0RLcyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogQ29udGV4dFByb3ZpZGVyUGx1Z2luKSB7XG4gIGF2YWlsYWJsZUNvbnRleHRQcm92aWRlcnNbbmFtZV0gPSAoKSA9PiBwcm92aWRlcjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHBsdWdpbiBjb250ZXh0IHByb3ZpZGVyXG4gKlxuICogQSBwbHVnaW4gcHJvdmlkZXIgY2Fubm90IHJldXNlIHRoZSBTREtzIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpbkNvbnRleHRQcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXJQbHVnaW4pIHtcbiAgcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoYCR7UExVR0lOX1BST1ZJREVSX1BSRUZJWH06JHtuYW1lfWAsIHByb3ZpZGVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbnRleHQgcHJvdmlkZXIgZmFjdG9yeVxuICpcbiAqIEEgY29udGV4dCBwcm92aWRlciBmYWN0b3J5IHRha2VzIGFuIFNka1Byb3ZpZGVyIGFuZCByZXR1cm5zIHRoZSBjb250ZXh0IHByb3ZpZGVyIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyRmFjdG9yeShuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXJGYWN0b3J5KSB7XG4gIGF2YWlsYWJsZUNvbnRleHRQcm92aWRlcnNbbmFtZV0gPSBwcm92aWRlcjtcbn1cblxuY29uc3QgYXZhaWxhYmxlQ29udGV4dFByb3ZpZGVyczogUHJvdmlkZXJNYXAgPSB7XG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuQVZBSUxBQklMSVRZX1pPTkVfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBBWkNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU1NNX1BBUkFNRVRFUl9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IFNTTUNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuSE9TVEVEX1pPTkVfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBIb3N0ZWRab25lQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5WUENfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5BTUlfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4ocywgaW8pLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkVORFBPSU5UX1NFUlZJQ0VfQVZBSUxBQklMSVRZX1pPTkVfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBFbmRwb2ludFNlcnZpY2VBWkNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU0VDVVJJVFlfR1JPVVBfUFJPVklERVJdOiAocykgPT4gbmV3IFNlY3VyaXR5R3JvdXBDb250ZXh0UHJvdmlkZXJQbHVnaW4ocyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuTE9BRF9CQUxBTkNFUl9QUk9WSURFUl06IChzKSA9PiBuZXcgTG9hZEJhbGFuY2VyQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMpLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkxPQURfQkFMQU5DRVJfTElTVEVORVJfUFJPVklERVJdOiAocykgPT4gbmV3IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMpLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLktFWV9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IEtleUNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuQ0NfQVBJX1BST1ZJREVSXTogKHMpID0+IG5ldyBDY0FwaUNvbnRleHRQcm92aWRlclBsdWdpbihzKSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { KeyContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { KeyContextResponse } 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 KeyContextProviderPlugin implements ContextProviderPlugin {
|
|
7
|
+
private readonly aws;
|
|
8
|
+
private readonly io;
|
|
9
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
10
|
+
getValue(args: KeyContextQuery): Promise<KeyContextResponse>;
|
|
11
|
+
private findKey;
|
|
12
|
+
private readKeyProps;
|
|
13
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyContextProviderPlugin = void 0;
|
|
4
|
+
const private_1 = require("../api/aws-auth/private");
|
|
5
|
+
const toolkit_error_1 = require("../toolkit/toolkit-error");
|
|
6
|
+
class KeyContextProviderPlugin {
|
|
7
|
+
aws;
|
|
8
|
+
io;
|
|
9
|
+
constructor(aws, io) {
|
|
10
|
+
this.aws = aws;
|
|
11
|
+
this.io = io;
|
|
12
|
+
}
|
|
13
|
+
async getValue(args) {
|
|
14
|
+
const kms = (await (0, private_1.initContextProviderSdk)(this.aws, args)).kms();
|
|
15
|
+
const aliasListEntry = await this.findKey(kms, args);
|
|
16
|
+
return this.readKeyProps(aliasListEntry, args);
|
|
17
|
+
}
|
|
18
|
+
// TODO: use paginator function
|
|
19
|
+
async findKey(kms, args) {
|
|
20
|
+
await this.io.debug(`Listing keys in ${args.account}:${args.region}`);
|
|
21
|
+
let response;
|
|
22
|
+
let nextMarker;
|
|
23
|
+
do {
|
|
24
|
+
response = await kms.listAliases({
|
|
25
|
+
Marker: nextMarker,
|
|
26
|
+
});
|
|
27
|
+
const aliases = response.Aliases || [];
|
|
28
|
+
for (const alias of aliases) {
|
|
29
|
+
if (alias.AliasName == args.aliasName) {
|
|
30
|
+
return alias;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
nextMarker = response.NextMarker;
|
|
34
|
+
} while (nextMarker);
|
|
35
|
+
const suppressError = 'ignoreErrorOnMissingContext' in args && args.ignoreErrorOnMissingContext;
|
|
36
|
+
const hasDummyKeyId = 'dummyValue' in args && typeof args.dummyValue === 'object' && args.dummyValue !== null && 'keyId' in args.dummyValue;
|
|
37
|
+
if (suppressError && hasDummyKeyId) {
|
|
38
|
+
const keyId = args.dummyValue.keyId;
|
|
39
|
+
return { TargetKeyId: keyId };
|
|
40
|
+
}
|
|
41
|
+
throw new toolkit_error_1.ContextProviderError(`Could not find any key with alias named ${args.aliasName}`);
|
|
42
|
+
}
|
|
43
|
+
async readKeyProps(alias, args) {
|
|
44
|
+
if (!alias.TargetKeyId) {
|
|
45
|
+
throw new toolkit_error_1.ContextProviderError(`Could not find any key with alias named ${args.aliasName}`);
|
|
46
|
+
}
|
|
47
|
+
await this.io.debug(`Key found ${alias.TargetKeyId}`);
|
|
48
|
+
return {
|
|
49
|
+
keyId: alias.TargetKeyId,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.KeyContextProviderPlugin = KeyContextProviderPlugin;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQWlFO0FBRWpFLDREQUFnRTtBQUVoRSxNQUFhLHdCQUF3QjtJQUNOO0lBQW1DO0lBQWhFLFlBQTZCLEdBQWdCLEVBQW1CLEVBQTRCO1FBQS9ELFFBQUcsR0FBSCxHQUFHLENBQWE7UUFBbUIsT0FBRSxHQUFGLEVBQUUsQ0FBMEI7SUFDNUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBcUI7UUFDekMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUEsZ0NBQXNCLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWpFLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsK0JBQStCO0lBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBZSxFQUFFLElBQXFCO1FBQzFELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdEUsSUFBSSxRQUFrQyxDQUFDO1FBQ3ZDLElBQUksVUFBOEIsQ0FBQztRQUNuQyxHQUFHLENBQUM7WUFDRixRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN0QyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztZQUVELFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ25DLENBQUMsUUFBUSxVQUFVLEVBQUU7UUFFckIsTUFBTSxhQUFhLEdBQUcsNkJBQTZCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQywyQkFBc0MsQ0FBQztRQUMzRyxNQUFNLGFBQWEsR0FBRyxZQUFZLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUksSUFBSSxhQUFhLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUksSUFBSSxDQUFDLFVBQWdDLENBQUMsS0FBSyxDQUFDO1lBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBcUIsRUFBRSxJQUFxQjtRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV0RCxPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyREQsNERBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXlDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBLZXlDb250ZXh0UmVzcG9uc2UgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBbGlhc0xpc3RFbnRyeSwgTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcyc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHR5cGUgeyBJS01TQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgS2V5Q29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBLZXlDb250ZXh0UXVlcnkpIHtcbiAgICBjb25zdCBrbXMgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLmttcygpO1xuXG4gICAgY29uc3QgYWxpYXNMaXN0RW50cnkgPSBhd2FpdCB0aGlzLmZpbmRLZXkoa21zLCBhcmdzKTtcblxuICAgIHJldHVybiB0aGlzLnJlYWRLZXlQcm9wcyhhbGlhc0xpc3RFbnRyeSwgYXJncyk7XG4gIH1cblxuICAvLyBUT0RPOiB1c2UgcGFnaW5hdG9yIGZ1bmN0aW9uXG4gIHByaXZhdGUgYXN5bmMgZmluZEtleShrbXM6IElLTVNDbGllbnQsIGFyZ3M6IEtleUNvbnRleHRRdWVyeSk6IFByb21pc2U8QWxpYXNMaXN0RW50cnk+IHtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBMaXN0aW5nIGtleXMgaW4gJHthcmdzLmFjY291bnR9OiR7YXJncy5yZWdpb259YCk7XG5cbiAgICBsZXQgcmVzcG9uc2U6IExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dDtcbiAgICBsZXQgbmV4dE1hcmtlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRvIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQga21zLmxpc3RBbGlhc2VzKHtcbiAgICAgICAgTWFya2VyOiBuZXh0TWFya2VyLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsaWFzZXMgPSByZXNwb25zZS5BbGlhc2VzIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgIGlmIChhbGlhcy5BbGlhc05hbWUgPT0gYXJncy5hbGlhc05hbWUpIHtcbiAgICAgICAgICByZXR1cm4gYWxpYXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV4dE1hcmtlciA9IHJlc3BvbnNlLk5leHRNYXJrZXI7XG4gICAgfSB3aGlsZSAobmV4dE1hcmtlcik7XG5cbiAgICBjb25zdCBzdXBwcmVzc0Vycm9yID0gJ2lnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCcgaW4gYXJncyAmJiBhcmdzLmlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCBhcyBib29sZWFuO1xuICAgIGNvbnN0IGhhc0R1bW15S2V5SWQgPSAnZHVtbXlWYWx1ZScgaW4gYXJncyAmJiB0eXBlb2YgYXJncy5kdW1teVZhbHVlID09PSAnb2JqZWN0JyAmJiBhcmdzLmR1bW15VmFsdWUgIT09IG51bGwgJiYgJ2tleUlkJyBpbiBhcmdzLmR1bW15VmFsdWU7XG4gICAgaWYgKHN1cHByZXNzRXJyb3IgJiYgaGFzRHVtbXlLZXlJZCkge1xuICAgICAgY29uc3Qga2V5SWQgPSAoYXJncy5kdW1teVZhbHVlIGFzIHsga2V5SWQ6IHN0cmluZyB9KS5rZXlJZDtcbiAgICAgIHJldHVybiB7IFRhcmdldEtleUlkOiBrZXlJZCB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFueSBrZXkgd2l0aCBhbGlhcyBuYW1lZCAke2FyZ3MuYWxpYXNOYW1lfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkS2V5UHJvcHMoYWxpYXM6IEFsaWFzTGlzdEVudHJ5LCBhcmdzOiBLZXlDb250ZXh0UXVlcnkpOiBQcm9taXNlPEtleUNvbnRleHRSZXNwb25zZT4ge1xuICAgIGlmICghYWxpYXMuVGFyZ2V0S2V5SWQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgQ291bGQgbm90IGZpbmQgYW55IGtleSB3aXRoIGFsaWFzIG5hbWVkICR7YXJncy5hbGlhc05hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgS2V5IGZvdW5kICR7YWxpYXMuVGFyZ2V0S2V5SWR9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5SWQ6IGFsaWFzLlRhcmdldEtleUlkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LoadBalancerContextQuery, LoadBalancerListenerContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { LoadBalancerContextResponse, LoadBalancerListenerContextResponse } from '@aws-cdk/cx-api';
|
|
3
|
+
import type { SdkProvider } from '../api/aws-auth/private';
|
|
4
|
+
import type { ContextProviderPlugin } from '../api/plugin';
|
|
5
|
+
/**
|
|
6
|
+
* Provides load balancer context information.
|
|
7
|
+
*/
|
|
8
|
+
export declare class LoadBalancerContextProviderPlugin implements ContextProviderPlugin {
|
|
9
|
+
private readonly aws;
|
|
10
|
+
constructor(aws: SdkProvider);
|
|
11
|
+
getValue(query: LoadBalancerContextQuery): Promise<LoadBalancerContextResponse>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Provides load balancer listener context information
|
|
15
|
+
*/
|
|
16
|
+
export declare class LoadBalancerListenerContextProviderPlugin implements ContextProviderPlugin {
|
|
17
|
+
private readonly aws;
|
|
18
|
+
constructor(aws: SdkProvider);
|
|
19
|
+
getValue(query: LoadBalancerListenerContextQuery): Promise<LoadBalancerListenerContextResponse>;
|
|
20
|
+
}
|