@aws-cdk/toolkit-lib 0.3.1 → 0.3.3
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/README.md +1 -1
- 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/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/private/helpers.d.ts +5 -9
- package/lib/actions/diff/private/helpers.js +6 -23
- 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/types.d.ts +79 -1
- package/lib/api/aws-auth/types.js +74 -1
- 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 +3 -3
- package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
- package/lib/api/cloud-assembly/private/context-aware-source.js +5 -5
- package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
- package/lib/api/cloud-assembly/private/prepare-source.js +14 -12
- 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.js +10 -8
- package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
- package/lib/api/cloud-assembly/private/stack-assembly.js +10 -9
- 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 +109 -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 +25 -0
- package/lib/api/index.js +42 -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/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.d.ts +210 -0
- package/lib/api/notices.js +430 -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 +72 -0
- package/lib/api/plugin/plugin.js +132 -0
- package/lib/api/private.d.ts +1 -0
- package/lib/api/private.js +18 -0
- package/lib/api/refactoring/cloudformation.d.ts +15 -0
- package/lib/api/refactoring/cloudformation.js +3 -0
- package/lib/api/refactoring/digest.d.ts +26 -0
- package/lib/api/refactoring/digest.js +175 -0
- package/lib/api/refactoring/index.d.ts +51 -0
- package/lib/api/refactoring/index.js +223 -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 -5
- package/lib/api/shared-private.js +2921 -9246
- package/lib/api/shared-private.js.map +4 -4
- package/lib/api/shared-public.d.ts +179 -37
- package/lib/api/shared-public.js +3106 -16
- package/lib/api/shared-public.js.map +4 -4
- 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-error.d.ts +86 -0
- package/lib/api/toolkit-error.js +132 -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 +1 -0
- package/lib/index.js +2 -1
- 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 +43 -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 +211 -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/private/util.d.ts +1 -1
- package/lib/private/util.js +22 -22
- package/lib/private/util.js.map +2 -2
- package/lib/toolkit/private/index.d.ts +2 -0
- package/lib/toolkit/private/index.js +1 -1
- package/lib/toolkit/toolkit.d.ts +16 -0
- package/lib/toolkit/toolkit.js +158 -124
- 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 +18 -0
- package/lib/util/index.js +35 -0
- package/lib/util/json.d.ts +48 -0
- package/lib/util/json.js +68 -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 +12 -13
|
@@ -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("../api/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtYXBpLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2MtYXBpLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHNFQUF5RTtBQUV6RSxxREFBaUU7QUFFakUsd0RBQTREO0FBQzVELGtDQUFzRDtBQUV0RCxNQUFhLDBCQUEwQjtJQUNSO0lBQTdCLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUF1QjtRQUMzQyxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksb0NBQW9CLENBQUMsK0ZBQStGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pKLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxzR0FBc0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEssQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNHLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyx3RUFBd0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdJLENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsTUFBTSxZQUFZLEdBQUcsQ0FB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QUcsWUFBWSx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywwQ0FBMEMsUUFBUSx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzSixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUhELGdFQTBIQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUF5QjtJQUN2RCxPQUFPO1FBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksV0FBVztRQUMxQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLE1BQWUsRUFBRSxRQUFpQjtJQUMvRCxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLENBQVU7SUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQVVEOztHQUVHO0FBQ0gsTUFBTSx1QkFBd0IsU0FBUSxLQUFLO0NBQzFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDY0FwaUNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGVzY3JpcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB7IFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQ29udHJvbENsaWVudCwgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgeyBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vYXBpL3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZmluZEpzb25WYWx1ZSwgZ2V0UmVzdWx0T2JqIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDY0FwaUNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlcikge1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcmV0dXJucyBhIGRhdGEgb2JqZWN0IHdpdGggdGhlIHZhbHVlIGZyb20gQ2xvdWRDb250cm9sIEFQSSByZXN1bHQuXG4gICAqXG4gICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgQ2xvdWQgQXNzZW1ibHkgU2NoZW1hIGZvciB0aGUgc2VtYW50aWNzIG9mXG4gICAqIGVhY2ggcXVlcnkgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IENjQXBpQ29udGV4dFF1ZXJ5KSB7XG4gICAgLy8gVmFsaWRhdGUgaW5wdXRcbiAgICBpZiAoYXJncy5leGFjdElkZW50aWZpZXIgJiYgYXJncy5wcm9wZXJ0eU1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYFByb3ZpZGVyIHByb3RvY29sIGVycm9yOiBzcGVjaWZ5IGVpdGhlciBleGFjdElkZW50aWZpZXIgb3IgcHJvcGVydHlNYXRjaCwgYnV0IG5vdCBib3RoIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0pYCk7XG4gICAgfVxuICAgIGlmIChhcmdzLmlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCAmJiBhcmdzLmR1bW15VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBQcm92aWRlciBwcm90b2NvbCBlcnJvcjogaWYgaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0IGlzIHNldCwgYSBkdW1teVZhbHVlIG11c3QgYmUgc3VwcGxpZWQgKGdvdCAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSlgKTtcbiAgICB9XG4gICAgaWYgKGFyZ3MuZHVtbXlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICghQXJyYXkuaXNBcnJheShhcmdzLmR1bW15VmFsdWUpIHx8ICFhcmdzLmR1bW15VmFsdWUuZXZlcnkoaXNPYmplY3QpKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBQcm92aWRlciBwcm90b2NvbCBlcnJvcjogZHVtbXlWYWx1ZSBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVjdHMgKGdvdCAke0pTT04uc3RyaW5naWZ5KGFyZ3MuZHVtbXlWYWx1ZSl9KWApO1xuICAgIH1cblxuICAgIC8vIERvIHRoZSBsb29rdXBcbiAgICBjb25zdCBjbG91ZENvbnRyb2wgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLmNsb3VkQ29udHJvbCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXNvdXJjZXM6IEZvdW5kUmVzb3VyY2VbXTtcbiAgICAgIGlmIChhcmdzLmV4YWN0SWRlbnRpZmllcikge1xuICAgICAgICAvLyB1c2UgZ2V0UmVzb3VyY2UgdG8gZ2V0IHRoZSBleGFjdCBpbmRlbnRpZmllclxuICAgICAgICByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmdldFJlc291cmNlKGNsb3VkQ29udHJvbCwgYXJncy50eXBlTmFtZSwgYXJncy5leGFjdElkZW50aWZpZXIpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzLnByb3BlcnR5TWF0Y2gpIHtcbiAgICAgICAgLy8gdXNlIGxpc3RSZXNvdXJjZVxuICAgICAgICByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmxpc3RSZXNvdXJjZXMoY2xvdWRDb250cm9sLCBhcmdzLnR5cGVOYW1lLCBhcmdzLnByb3BlcnR5TWF0Y2gsIGFyZ3MuZXhwZWN0ZWRNYXRjaENvdW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IG5laXRoZXIgZXhhY3RJZGVudGlmaWVyIG5vciBwcm9wZXJ0eU1hdGNoIGlzIHNwZWNpZmllZCBpbiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc291cmNlcy5tYXAoKHIpID0+IGdldFJlc3VsdE9iaihyLnByb3BlcnRpZXMsIHIuaWRlbnRpZmllciwgYXJncy5wcm9wZXJ0aWVzVG9SZXR1cm4pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBaZXJvUmVzb3VyY2VzRm91bmRFcnJvciAmJiBhcmdzLmlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCkge1xuICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHR5cGUtY2hlY2tlZCBkdW1teVZhbHVlLlxuICAgICAgICByZXR1cm4gYXJncy5kdW1teVZhbHVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBnZXRSZXNvdXJjZSBmcm9tIENDIEFQSSB0byBnZXQgdGhlIHJlc291cmNlLlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvcmVmZXJlbmNlL2Nsb3VkY29udHJvbC9nZXQtcmVzb3VyY2UuaHRtbFxuICAgKlxuICAgKiBXaWxsIGFsd2F5cyByZXR1cm4gZXhhY3RseSBvbmUgcmVzb3VyY2UsIG9yIGZhaWwuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFJlc291cmNlKFxuICAgIGNjOiBJQ2xvdWRDb250cm9sQ2xpZW50LFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgZXhhY3RJZGVudGlmaWVyOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Rm91bmRSZXNvdXJjZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNjLmdldFJlc291cmNlKHtcbiAgICAgICAgVHlwZU5hbWU6IHR5cGVOYW1lLFxuICAgICAgICBJZGVudGlmaWVyOiBleGFjdElkZW50aWZpZXIsXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzdWx0LlJlc291cmNlRGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKCdVbmV4cGVjdGVkIENsb3VkQ29udHJvbCBBUEkgYmVoYXZpb3I6IHJldHVybmVkIGVtcHR5IHJlc3BvbnNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbZm91bmRSZXNvdXJjZUZyb21DY0FwaShyZXN1bHQuUmVzb3VyY2VEZXNjcmlwdGlvbildO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbiB8fCAoZXJyIGFzIGFueSkubmFtZSA9PT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBaZXJvUmVzb3VyY2VzRm91bmRFcnJvcihgTm8gcmVzb3VyY2Ugb2YgdHlwZSAke3R5cGVOYW1lfSB3aXRoIGlkZW50aWZpZXI6ICR7ZXhhY3RJZGVudGlmaWVyfWApO1xuICAgICAgfVxuICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQ29udGV4dFByb3ZpZGVyRXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgRW5jb3VudGVyZWQgQ0MgQVBJIGVycm9yIHdoaWxlIGdldHRpbmcgJHt0eXBlTmFtZX0gcmVzb3VyY2UgJHtleGFjdElkZW50aWZpZXJ9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBsaXN0UmVzb3VyY2VzIGZyb20gQ0MgQVBJIHRvIGdldCB0aGUgcmVzb3VyY2VzIGFuZCBhcHBseSBhcmdzLnByb3BlcnR5TWF0Y2ggdG8gZmluZCB0aGUgcmVzb3VyY2VzLlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvcmVmZXJlbmNlL2Nsb3VkY29udHJvbC9saXN0LXJlc291cmNlcy5odG1sXG4gICAqXG4gICAqIFdpbGwgcmV0dXJuIDAgb3IgbW9yZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIERvZXMgbm90IGN1cnJlbnRseSBwYWdpbmF0ZSB0aHJvdWdoIG1vcmUgdGhhbiBvbmUgcmVzdWx0IHBhZ2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxpc3RSZXNvdXJjZXMoXG4gICAgY2M6IElDbG91ZENvbnRyb2xDbGllbnQsXG4gICAgdHlwZU5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eU1hdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBleHBlY3RlZE1hdGNoQ291bnQ/OiBDY0FwaUNvbnRleHRRdWVyeVsnZXhwZWN0ZWRNYXRjaENvdW50J10sXG4gICk6IFByb21pc2U8Rm91bmRSZXNvdXJjZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNjLmxpc3RSZXNvdXJjZXMoe1xuICAgICAgICBUeXBlTmFtZTogdHlwZU5hbWUsXG5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm91bmQgPSAocmVzdWx0LlJlc291cmNlRGVzY3JpcHRpb25zID8/IFtdKVxuICAgICAgICAubWFwKGZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkpXG4gICAgICAgIC5maWx0ZXIoKHIpID0+IHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocHJvcGVydHlNYXRjaCkuZXZlcnkoKFtwcm9wUGF0aCwgZXhwZWN0ZWRdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBmaW5kSnNvblZhbHVlKHIucHJvcGVydGllcywgcHJvcFBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TWF0Y2hlc0ZpbHRlcihhY3R1YWwsIGV4cGVjdGVkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICgoZXhwZWN0ZWRNYXRjaENvdW50ID09PSAnYXQtbGVhc3Qtb25lJyB8fCBleHBlY3RlZE1hdGNoQ291bnQgPT09ICdleGFjdGx5LW9uZScpICYmIGZvdW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFueSByZXNvdXJjZXMgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eU1hdGNoKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICgoZXhwZWN0ZWRNYXRjaENvdW50ID09PSAnYXQtbW9zdC1vbmUnIHx8IGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2V4YWN0bHktb25lJykgJiYgZm91bmQubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEZvdW5kICR7Zm91bmQubGVuZ3RofSByZXNvdXJjZXMgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eU1hdGNoKX07IHBsZWFzZSBuYXJyb3cgdGhlIHNlYXJjaCBjcml0ZXJpYWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIENvbnRleHRQcm92aWRlckVycm9yKSAmJiAhKGVyciBpbnN0YW5jZW9mIFplcm9SZXNvdXJjZXNGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEVuY291bnRlcmVkIENDIEFQSSBlcnJvciB3aGlsZSBsaXN0aW5nICR7dHlwZU5hbWV9IHJlc291cmNlcyBtYXRjaGluZyAke0pTT04uc3RyaW5naWZ5KHByb3BlcnR5TWF0Y2gpfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgQ0MgQVBJIHJlc3BvbnNlIG9iamVjdCBpbnRvIGEgbmljZXIgb2JqZWN0IChwYXJzZSB0aGUgSlNPTilcbiAqL1xuZnVuY3Rpb24gZm91bmRSZXNvdXJjZUZyb21DY0FwaShkZXNjOiBSZXNvdXJjZURlc2NyaXB0aW9uKTogRm91bmRSZXNvdXJjZSB7XG4gIHJldHVybiB7XG4gICAgaWRlbnRpZmllcjogZGVzYy5JZGVudGlmaWVyID8/ICcqTUlTU0lORyonLFxuICAgIHByb3BlcnRpZXM6IEpTT04ucGFyc2UoZGVzYy5Qcm9wZXJ0aWVzID8/ICd7fScpLFxuICB9O1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGdpdmVuIHByb3BlcnR5IHZhbHVlIG1hdGNoZXMgdGhlIGdpdmVuIGZpbHRlclxuICpcbiAqIEZvciBub3cgd2UganVzdCBjaGVjayBmb3Igc3RyaWN0IGVxdWFsaXR5LCBidXQgd2UgY2FuIGltcGxlbWVudCBwYXR0ZXJuIG1hdGNoaW5nIGFuZCBmdXp6eSBtYXRjaGluZyBoZXJlIGxhdGVyXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5TWF0Y2hlc0ZpbHRlcihhY3R1YWw6IHVua25vd24sIGV4cGVjdGVkOiB1bmtub3duKSB7XG4gIHJldHVybiBleHBlY3RlZCA9PT0gYWN0dWFsO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCh4OiB1bmtub3duKTogeCBpcyB7W2tleTogc3RyaW5nXTogdW5rbm93bn0ge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoeCk7XG59XG5cbi8qKlxuICogQSBwYXJzZWQgdmVyc2lvbiBvZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gQ0NBUElcbiAqL1xuaW50ZXJmYWNlIEZvdW5kUmVzb3VyY2Uge1xuICByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+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("../api/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkLXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9zdGVkLXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFpRTtBQUVqRSx3REFBNEQ7QUFFNUQsTUFBYSwrQkFBK0I7SUFDYjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQTRCO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLG9DQUFvQixDQUFDLGdFQUFnRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLE9BQU8sSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxvQ0FBb0MsT0FBTyxZQUFZLE1BQU0s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LENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQW1DO1FBQzNELE9BQVEsS0FBZ0MsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQ3BFLENBQUM7Q0FDRjtBQWhFRCwwRUFnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBIb3N0ZWRab25lIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzIH0gZnJvbSAnLic7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZTUzQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi9hcGkvdG9vbGtpdC1lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBIb3N0ZWRab25lQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBhY2NvdW50ID0gYXJncy5hY2NvdW50O1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGlmICghdGhpcy5pc0hvc3RlZFpvbmVRdWVyeShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBIb3N0ZWRab25lUHJvdmlkZXIgcmVxdWlyZXMgZG9tYWluTmFtZSBwcm9wZXJ0eSB0byBiZSBzZXQgaW4gJHthcmdzfWApO1xuICAgIH1cbiAgICBjb25zdCBkb21haW5OYW1lID0gYXJncy5kb21haW5OYW1lO1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYFJlYWRpbmcgaG9zdGVkIHpvbmUgJHthY2NvdW50fToke3JlZ2lvbn06JHtkb21haW5OYW1lfWApO1xuICAgIGNvbnN0IHI1MyA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkucm91dGU1MygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcjUzLmxpc3RIb3N0ZWRab25lc0J5TmFtZSh7IEROU05hbWU6IGRvbWFpbk5hbWUgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5Ib3N0ZWRab25lcykge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBIb3N0ZWQgWm9uZSBub3QgZm91bmQgaW4gYWNjb3VudCAke2FjY291bnR9LCByZWdpb24gJHtyZWdpb259OiAke2RvbWFpbk5hbWV9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNhbmRpZGF0ZVpvbmVzID0gYXdhaXQgdGhpcy5maWx0ZXJab25lcyhyNTMsIHJlc3BvbnNlLkhvc3RlZFpvbmVzLCBhcmdzKTtcbiAgICBpZiAoY2FuZGlkYXRlWm9uZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICBjb25zdCBmaWx0ZVByb3BzID0gYGRuczoke2RvbWFpbk5hbWV9LCBwcml2YXRlWm9uZToke2FyZ3MucHJpdmF0ZVpvbmV9LCB2cGNJZDoke2FyZ3MudnBjSWR9YDtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgRm91bmQgem9uZXM6ICR7SlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlWm9uZXMpfSBmb3IgJHtmaWx0ZVByb3BzfSwgYnV0IHdhbnRlZCBleGFjdGx5IDEgem9uZWApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJZDogY2FuZGlkYXRlWm9uZXNbMF0uSWQsXG4gICAgICBOYW1lOiBjYW5kaWRhdGVab25lc1swXS5OYW1lLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbHRlclpvbmVzKFxuICAgIHI1MzogSVJvdXRlNTNDbGllbnQsXG4gICAgem9uZXM6IEhvc3RlZFpvbmVbXSxcbiAgICBwcm9wczogSG9zdGVkWm9uZUNvbnRleHRRdWVyeSxcbiAgKTogUHJvbWlzZTxIb3N0ZWRab25lW10+IHtcbiAgICBsZXQgY2FuZGlkYXRlczogSG9zdGVkWm9uZVtdID0gW107XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHByb3BzLmRvbWFpbk5hbWUuZW5kc1dpdGgoJy4nKSA/IHByb3BzLmRvbWFpbk5hbWUgOiBgJHtwcm9wcy5kb21haW5OYW1lfS5gO1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYEZvdW5kIHRoZSBmb2xsb3dpbmcgem9uZXMgJHtKU09OLnN0cmluZ2lmeSh6b25lcyl9YCk7XG4gICAgY2FuZGlkYXRlcyA9IHpvbmVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5OYW1lID09PSBkb21haW5OYW1lKTtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBGb3VuZCB0aGUgZm9sbG93aW5nIG1hdGNoZWQgbmFtZSB6b25lcyAke0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZXMpfWApO1xuICAgIGlmIChwcm9wcy5wcml2YXRlWm9uZSkge1xuICAgICAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLkNvbmZpZyAmJiB6b25lLkNvbmZpZy5Qcml2YXRlWm9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcigoem9uZSkgPT4gIXpvbmUuQ29uZmlnIHx8ICF6b25lLkNvbmZpZy5Qcml2YXRlWm9uZSk7XG4gICAgfVxuICAgIGlmIChwcm9wcy52cGNJZCkge1xuICAgICAgY29uc3QgdnBjWm9uZXM6IEhvc3RlZFpvbmVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB6b25lIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHI1My5nZXRIb3N0ZWRab25lKHsgSWQ6IHpvbmUuSWQgfSk7XG4gICAgICAgIGlmICghZGF0YS5WUENzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgRXhwZWN0ZWQgVlBDIGZvciBwcml2YXRlIHpvbmUgYnV0IG5vIFZQQyBmb3VuZCAke3pvbmUuSWR9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuVlBDcy5tYXAoKHZwYykgPT4gdnBjLlZQQ0lkKS5pbmNsdWRlcyhwcm9wcy52cGNJZCkpIHtcbiAgICAgICAgICB2cGNab25lcy5wdXNoKHpvbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdnBjWm9uZXM7XG4gICAgfVxuICAgIHJldHVybiBjYW5kaWRhdGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0hvc3RlZFpvbmVRdWVyeShwcm9wczogSG9zdGVkWm9uZUNvbnRleHRRdWVyeSB8IGFueSk6IHByb3BzIGlzIEhvc3RlZFpvbmVDb250ZXh0UXVlcnkge1xuICAgIHJldHVybiAocHJvcHMgYXMgSG9zdGVkWm9uZUNvbnRleHRRdWVyeSkuZG9tYWluTmFtZSAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
@@ -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("../api/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 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 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFFQSxvREF1REM7QUFPRCwwREFFQztBQU9ELHNFQUVDO0FBT0Qsd0VBRUM7QUF2SkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywrQkFBaUQ7QUFDakQsNkRBQStEO0FBQy9ELHVEQUErRDtBQUMvRCwrRkFBK0Y7QUFDL0YsaURBQWlFO0FBQ2pFLGlDQUFrRDtBQUNsRCxxREFBZ0g7QUFDaEgsdURBQXVFO0FBQ3ZFLHFEQUE0RDtBQUM1RCxpQ0FBeUQ7QUFHekQsNENBQXVEO0FBQ3ZELG9EQUE0RDtBQUM1RCwrQ0FBdUM7QUFHdkMsd0RBQTREO0FBQzVELGtDQUE2QztBQUs3QyxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQW1CeEMsTUFBTSx1QkFBdUI7SUFDVixRQUFRLENBQVc7SUFDbkIsWUFBWSxDQUFTO0lBRXRDLFlBQW1CLFFBQWtCLEVBQUUsWUFBb0I7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQzdELFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUM1QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQWU7UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUM3RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDNUIsQ0FBQyxDQUFDLENBQUM7SUFD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QUFFLEVBQUUsQ0FBQyxJQUFJLDRDQUEwQixDQUFDLENBQUMsQ0FBQztDQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2FtaSc7XG5pbXBvcnQgeyBBWkNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vYXZhaWxhYmlsaXR5LXpvbmVzJztcbmltcG9ydCB7IENjQXBpQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi9jYy1hcGktcHJvdmlkZXInO1xuaW1wb3J0IHsgRW5kcG9pbnRTZXJ2aWNlQVpDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2VuZHBvaW50LXNlcnZpY2UtYXZhaWxhYmlsaXR5LXpvbmVzJztcbmltcG9ydCB7IEhvc3RlZFpvbmVDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2hvc3RlZC16b25lcyc7XG5pbXBvcnQgeyBLZXlDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2tleXMnO1xuaW1wb3J0IHsgTG9hZEJhbGFuY2VyQ29udGV4dFByb3ZpZGVyUGx1Z2luLCBMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vbG9hZC1iYWxhbmNlcnMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vc2VjdXJpdHktZ3JvdXBzJztcbmltcG9ydCB7IFNTTUNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vc3NtLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vdnBjcyc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnLi4vYXBpL2NvbnRleHQnO1xuaW1wb3J0IHsgVFJBTlNJRU5UX0NPTlRFWFRfS0VZIH0gZnJvbSAnLi4vYXBpL2NvbnRleHQnO1xuaW1wb3J0IHsgcmVwbGFjZUVudlBsYWNlaG9sZGVycyB9IGZyb20gJy4uL2FwaS9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBJTyB9IGZyb20gJy4uL2FwaS9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9hcGkvaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkhvc3QsIENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi9hcGkvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlsJztcblxudHlwZSBDb250ZXh0UHJvdmlkZXJGYWN0b3J5ID0gKChzZGs6IFNka1Byb3ZpZGVyLCBpbzogSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzKSA9PiBDb250ZXh0UHJvdmlkZXJQbHVnaW4pO1xudHlwZSBQcm92aWRlck1hcCA9IHtbbmFtZTogc3RyaW5nXTogQ29udGV4dFByb3ZpZGVyRmFjdG9yeX07XG5cbmNvbnN0IFBMVUdJTl9QUk9WSURFUl9QUkVGSVggPSAncGx1Z2luJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMge1xuICAvKipcbiAgICogQSBtZXNzYWdlIHRoYXQgaXMgcHJlc2VudGVkIHRvIHVzZXJzIGluIG5vcm1hbCBtb2RlIG9mIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LiBUaGUgQ29udGV4dCBQcm92aWRlciBmcmFtZXdvcmsgYWxyZWFkeSBwcm92aWRlcyB1c2VmdWwgb3V0cHV0IGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgY2FuIGJlIHVzZXMgaW4gZXhjZXB0aW9uYWxseSBzaXR1YXRpb25zLCBlLmcuIGlmIGEgbG9va3VwIGNhbGwgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIGxvbmcgdGltZS5cbiAgICovXG4gIGluZm8obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQSBtZXNzYWdlIHRoYXQgaGVscHMgdXNlcnMgZGVidWdnaW5nIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKlxuICAgKiBTaG91bGQgYmUgdXNlZCBpbiBtb3N0IGNhc2VzIHRvIG5vdGUgb24gY3VycmVudCBhY3Rpb24uXG4gICAqL1xuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jbGFzcyBDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyBpbXBsZW1lbnRzIElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogSW9IZWxwZXIsIHByb3ZpZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICAgIHRoaXMucHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluZm8obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDMwMC5tc2cobWVzc2FnZSwge1xuICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXJOYW1lLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMzAxLm1zZyhtZXNzYWdlLCB7XG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlck5hbWUsXG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIG1pc3NpbmcgY29udGV4dCB2YWx1ZXMgYW5kIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgcHJvdmlkZXJzIGZyb20gdGhlIG1hcCB0byByZXRyaWV2ZSB0aGVtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92aWRlQ29udGV4dFZhbHVlcyhcbiAgbWlzc2luZ1ZhbHVlczogY3hzY2hlbWEuTWlzc2luZ0NvbnRleHRbXSxcbiAgY29udGV4dDogQ29udGV4dCxcbiAgc2RrOiBTZGtQcm92aWRlcixcbiAgcGx1Z2luSG9zdDogUGx1Z2luSG9zdCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKSB7XG4gIGZvciAoY29uc3QgbWlzc2luZ0NvbnRleHQgb2YgbWlzc2luZ1ZhbHVlcykge1xuICAgIGNvbnN0IGtleSA9IG1pc3NpbmdDb250ZXh0LmtleTtcblxuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG1pc3NpbmdDb250ZXh0LnByb3ZpZGVyID09PSBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuUExVR0lOXG4gICAgICA/IGAke1BMVUdJTl9QUk9WSURFUl9QUkVGSVh9OiR7KG1pc3NpbmdDb250ZXh0LnByb3BzIGFzIGN4c2NoZW1hLlBsdWdpbkNvbnRleHRRdWVyeSkucGx1Z2luTmFtZX1gXG4gICAgICA6IG1pc3NpbmdDb250ZXh0LnByb3ZpZGVyO1xuXG4gICAgbGV0IGZhY3Rvcnk7XG4gICAgaWYgKHByb3ZpZGVyTmFtZS5zdGFydHNXaXRoKGAke1BMVUdJTl9QUk9WSURFUl9QUkVGSVh9OmApKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5Ib3N0LmNvbnRleHRQcm92aWRlclBsdWdpbnNbcHJvdmlkZXJOYW1lLnN1YnN0cmluZyhQTFVHSU5fUFJPVklERVJfUFJFRklYLmxlbmd0aCArIDEpXTtcbiAgICAgIGlmICghcGx1Z2luKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgVW5yZWNvZ25pemVkIHBsdWdpbiBjb250ZXh0IHByb3ZpZGVyIG5hbWU6ICR7bWlzc2luZ0NvbnRleHQucHJvdmlkZXJ9LmApO1xuICAgICAgfVxuICAgICAgZmFjdG9yeSA9ICgpID0+IHBsdWdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjdG9yeSA9IGF2YWlsYWJsZUNvbnRleHRQcm92aWRlcnNbcHJvdmlkZXJOYW1lXTtcbiAgICAgIGlmICghZmFjdG9yeSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYFVucmVjb2duaXplZCBjb250ZXh0IHByb3ZpZGVyIG5hbWU6ICR7bWlzc2luZ0NvbnRleHQucHJvdmlkZXJ9LiBZb3UgbWlnaHQgbmVlZCB0byB1cGRhdGUgdGhlIHRvb2xraXQgdG8gbWF0Y2ggdGhlIHZlcnNpb24gb2YgdGhlIGNvbnN0cnVjdCBsaWJyYXJ5LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyID0gZmFjdG9yeShzZGssIG5ldyBDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyhpb0hlbHBlciwgcHJvdmlkZXJOYW1lKSk7XG5cbiAgICBsZXQgdmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gbWlzc2luZ0NvbnRleHQucHJvcHMuYWNjb3VudCAmJiBtaXNzaW5nQ29udGV4dC5wcm9wcy5yZWdpb25cbiAgICAgICAgPyBjeGFwaS5FbnZpcm9ubWVudFV0aWxzLm1ha2UobWlzc2luZ0NvbnRleHQucHJvcHMuYWNjb3VudCwgbWlzc2luZ0NvbnRleHQucHJvcHMucmVnaW9uKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgcmVzb2x2ZWRFbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxuICAgICAgICA/IGF3YWl0IHNkay5yZXNvbHZlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpXG4gICAgICAgIDogeyBhY2NvdW50OiAnPycsIHJlZ2lvbjogJz8nLCBuYW1lOiAnPycgfTtcblxuICAgICAgY29uc3QgYXJucyA9IGF3YWl0IHJlcGxhY2VFbnZQbGFjZWhvbGRlcnMoe1xuICAgICAgICBsb29rdXBSb2xlQXJuOiBtaXNzaW5nQ29udGV4dC5wcm9wcy5sb29rdXBSb2xlQXJuLFxuICAgICAgfSwgcmVzb2x2ZWRFbnZpcm9ubWVudCwgc2RrKTtcblxuICAgICAgdmFsdWUgPSBhd2FpdCBwcm92aWRlci5nZXRWYWx1ZSh7IC4uLm1pc3NpbmdDb250ZXh0LnByb3BzLCBsb29rdXBSb2xlQXJuOiBhcm5zLmxvb2t1cFJvbGVBcm4gfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBTZXQgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHByb3ZpZGVyIHZhbHVlIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWRcbiAgICAgIC8vIGFzIGEgbG9va3VwIGZhaWx1cmUgaW4gdGhlIHRvb2xraXQuXG4gICAgICB2YWx1ZSA9IHsgW2N4YXBpLlBST1ZJREVSX0VSUk9SX0tFWV06IGZvcm1hdEVycm9yTWVzc2FnZShlKSwgW1RSQU5TSUVOVF9DT05URVhUX0tFWV06IHRydWUgfTtcbiAgICB9XG4gICAgY29udGV4dC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfQVNTRU1CTFlfREVCVUcubXNnKGBTZXR0aW5nIFwiJHtrZXl9XCIgY29udGV4dCB0byAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbnRleHQgcHJvdmlkZXJcbiAqXG4gKiBBIGNvbnRleHQgcHJvdmlkZXIgY2Fubm90IHJldXNlIHRoZSBTREtzIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbnRleHRQcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXJQbHVnaW4pIHtcbiAgYXZhaWxhYmxlQ29udGV4dFByb3ZpZGVyc1tuYW1lXSA9ICgpID0+IHByb3ZpZGVyO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGx1Z2luIGNvbnRleHQgcHJvdmlkZXJcbiAqXG4gKiBBIHBsdWdpbiBwcm92aWRlciBjYW5ub3QgcmV1c2UgdGhlIFNES3MgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luQ29udGV4dFByb3ZpZGVyKG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlclBsdWdpbikge1xuICByZWdpc3RlckNvbnRleHRQcm92aWRlcihgJHtQTFVHSU5fUFJPVklERVJfUFJFRklYfToke25hbWV9YCwgcHJvdmlkZXIpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgY29udGV4dCBwcm92aWRlciBmYWN0b3J5XG4gKlxuICogQSBjb250ZXh0IHByb3ZpZGVyIGZhY3RvcnkgdGFrZXMgYW4gU2RrUHJvdmlkZXIgYW5kIHJldHVybnMgdGhlIGNvbnRleHQgcHJvdmlkZXIgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJGYWN0b3J5KG5hbWU6IHN0cmluZywgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlckZhY3RvcnkpIHtcbiAgYXZhaWxhYmxlQ29udGV4dFByb3ZpZGVyc1tuYW1lXSA9IHByb3ZpZGVyO1xufVxuXG5jb25zdCBhdmFpbGFibGVDb250ZXh0UHJvdmlkZXJzOiBQcm92aWRlck1hcCA9IHtcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5BVkFJTEFCSUxJVFlfWk9ORV9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IEFaQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5TU01fUEFSQU1FVEVSX1BST1ZJREVSXTogKHMsIGlvKSA9PiBuZXcgU1NNQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5IT1NURURfWk9ORV9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IEhvc3RlZFpvbmVDb250ZXh0UHJvdmlkZXJQbHVnaW4ocywgaW8pLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLlZQQ19QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IFZwY05ldHdvcmtDb250ZXh0UHJvdmlkZXJQbHVnaW4ocywgaW8pLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkFNSV9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IEFtaUNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuRU5EUE9JTlRfU0VSVklDRV9BVkFJTEFCSUxJVFlfWk9ORV9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IEVuZHBvaW50U2VydmljZUFaQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5TRUNVUklUWV9HUk9VUF9QUk9WSURFUl06IChzKSA9PiBuZXcgU2VjdXJpdHlHcm91cENvbnRleHRQcm92aWRlclBsdWdpbihzKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5MT0FEX0JBTEFOQ0VSX1BST1ZJREVSXTogKHMpID0+IG5ldyBMb2FkQmFsYW5jZXJDb250ZXh0UHJvdmlkZXJQbHVnaW4ocyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuTE9BRF9CQUxBTkNFUl9MSVNURU5FUl9QUk9WSURFUl06IChzKSA9PiBuZXcgTG9hZEJhbGFuY2VyTGlzdGVuZXJDb250ZXh0UHJvdmlkZXJQbHVnaW4ocyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuS0VZX1BST1ZJREVSXTogKHMsIGlvKSA9PiBuZXcgS2V5Q29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5DQ19BUElfUFJPVklERVJdOiAocykgPT4gbmV3IENjQXBpQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMpLFxufTtcbiJdfQ==
|
|
@@ -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("../api/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQWlFO0FBRWpFLHdEQUE0RDtBQUU1RCxNQUFhLHdCQUF3QjtJQUNOO0lBQW1DO0lBQWhFLFlBQTZCLEdBQWdCLEVBQW1CLEVBQTRCO1FBQS9ELFFBQUcsR0FBSCxHQUFHLENBQWE7UUFBbUIsT0FBRSxHQUFGLEVBQUUsQ0FBMEI7SUFDNUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBcUI7UUFDekMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUEsZ0NBQXNCLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWpFLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsK0JBQStCO0lBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBZSxFQUFFLElBQXFCO1FBQzFELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdEUsSUFBSSxRQUFrQyxDQUFDO1FBQ3ZDLElBQUksVUFBOEIsQ0FBQztRQUNuQyxHQUFHLENBQUM7WUFDRixRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN0QyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztZQUVELFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ25DLENBQUMsUUFBUSxVQUFVLEVBQUU7UUFFckIsTUFBTSxhQUFhLEdBQUcsNkJBQTZCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQywyQkFBc0MsQ0FBQztRQUMzRyxNQUFNLGFBQWEsR0FBRyxZQUFZLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUksSUFBSSxhQUFhLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUksSUFBSSxDQUFDLFVBQWdDLENBQUMsS0FBSyxDQUFDO1lBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBcUIsRUFBRSxJQUFxQjtRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV0RCxPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyREQsNERBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXlDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBLZXlDb250ZXh0UmVzcG9uc2UgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBbGlhc0xpc3RFbnRyeSwgTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcyc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHR5cGUgeyBJS01TQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi9hcGkvdG9vbGtpdC1lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBLZXlDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIsIHByaXZhdGUgcmVhZG9ubHkgaW86IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IEtleUNvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IGttcyA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkua21zKCk7XG5cbiAgICBjb25zdCBhbGlhc0xpc3RFbnRyeSA9IGF3YWl0IHRoaXMuZmluZEtleShrbXMsIGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXMucmVhZEtleVByb3BzKGFsaWFzTGlzdEVudHJ5LCBhcmdzKTtcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBwYWdpbmF0b3IgZnVuY3Rpb25cbiAgcHJpdmF0ZSBhc3luYyBmaW5kS2V5KGttczogSUtNU0NsaWVudCwgYXJnczogS2V5Q29udGV4dFF1ZXJ5KTogUHJvbWlzZTxBbGlhc0xpc3RFbnRyeT4ge1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYExpc3Rpbmcga2V5cyBpbiAke2FyZ3MuYWNjb3VudH06JHthcmdzLnJlZ2lvbn1gKTtcblxuICAgIGxldCByZXNwb25zZTogTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0O1xuICAgIGxldCBuZXh0TWFya2VyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZG8ge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBrbXMubGlzdEFsaWFzZXMoe1xuICAgICAgICBNYXJrZXI6IG5leHRNYXJrZXIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxpYXNlcyA9IHJlc3BvbnNlLkFsaWFzZXMgfHwgW107XG4gICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgaWYgKGFsaWFzLkFsaWFzTmFtZSA9PSBhcmdzLmFsaWFzTmFtZSkge1xuICAgICAgICAgIHJldHVybiBhbGlhcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0TWFya2VyID0gcmVzcG9uc2UuTmV4dE1hcmtlcjtcbiAgICB9IHdoaWxlIChuZXh0TWFya2VyKTtcblxuICAgIGNvbnN0IHN1cHByZXNzRXJyb3IgPSAnaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0JyBpbiBhcmdzICYmIGFyZ3MuaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0IGFzIGJvb2xlYW47XG4gICAgY29uc3QgaGFzRHVtbXlLZXlJZCA9ICdkdW1teVZhbHVlJyBpbiBhcmdzICYmIHR5cGVvZiBhcmdzLmR1bW15VmFsdWUgPT09ICdvYmplY3QnICYmIGFyZ3MuZHVtbXlWYWx1ZSAhPT0gbnVsbCAmJiAna2V5SWQnIGluIGFyZ3MuZHVtbXlWYWx1ZTtcbiAgICBpZiAoc3VwcHJlc3NFcnJvciAmJiBoYXNEdW1teUtleUlkKSB7XG4gICAgICBjb25zdCBrZXlJZCA9IChhcmdzLmR1bW15VmFsdWUgYXMgeyBrZXlJZDogc3RyaW5nIH0pLmtleUlkO1xuICAgICAgcmV0dXJuIHsgVGFyZ2V0S2V5SWQ6IGtleUlkIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgQ291bGQgbm90IGZpbmQgYW55IGtleSB3aXRoIGFsaWFzIG5hbWVkICR7YXJncy5hbGlhc05hbWV9YCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRLZXlQcm9wcyhhbGlhczogQWxpYXNMaXN0RW50cnksIGFyZ3M6IEtleUNvbnRleHRRdWVyeSk6IFByb21pc2U8S2V5Q29udGV4dFJlc3BvbnNlPiB7XG4gICAgaWYgKCFhbGlhcy5UYXJnZXRLZXlJZCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBDb3VsZCBub3QgZmluZCBhbnkga2V5IHdpdGggYWxpYXMgbmFtZWQgJHthcmdzLmFsaWFzTmFtZX1gKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBLZXkgZm91bmQgJHthbGlhcy5UYXJnZXRLZXlJZH1gKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXlJZDogYWxpYXMuVGFyZ2V0S2V5SWQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -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
|
+
}
|