aws-cdk 2.1005.0 → 2.1007.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD_PARTY_LICENSES +86 -86
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/api/aws-auth/awscli-compatible.js +9 -10
- package/lib/api/aws-auth/credential-plugins.js +6 -7
- package/lib/api/aws-auth/sdk-logger.js +3 -4
- package/lib/api/aws-auth/sdk-provider.js +11 -13
- package/lib/api/aws-auth/sdk.js +8 -9
- package/lib/api/aws-auth/tracing.js +3 -4
- package/lib/api/aws-auth/user-agent.js +4 -5
- package/lib/api/bootstrap/bootstrap-environment.d.ts +1 -1
- package/lib/api/bootstrap/bootstrap-environment.js +42 -46
- package/lib/api/bootstrap/bootstrap-props.d.ts +1 -1
- package/lib/api/bootstrap/bootstrap-props.js +1 -1
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +1 -1
- package/lib/api/bootstrap/deploy-bootstrap.js +11 -14
- package/lib/api/{evaluate-cloudformation-template.d.ts → cloudformation/evaluate-cloudformation-template.d.ts} +4 -8
- package/lib/api/{evaluate-cloudformation-template.js → cloudformation/evaluate-cloudformation-template.js} +16 -25
- package/lib/api/cloudformation/index.d.ts +4 -0
- package/lib/api/cloudformation/index.js +21 -0
- package/lib/api/{deployments → cloudformation}/nested-stack-helpers.d.ts +3 -9
- package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
- package/lib/api/cloudformation/stack-helpers.d.ts +88 -0
- package/lib/api/cloudformation/stack-helpers.js +158 -0
- package/lib/api/{util → cloudformation}/template-body-parameter.d.ts +3 -2
- package/lib/api/cloudformation/template-body-parameter.js +104 -0
- package/lib/api/context.js +3 -3
- package/lib/api/cxapp/cloud-assembly.d.ts +6 -4
- package/lib/api/cxapp/cloud-assembly.js +25 -26
- package/lib/api/cxapp/cloud-executable.d.ts +5 -0
- package/lib/api/cxapp/cloud-executable.js +9 -10
- package/lib/api/cxapp/environments.js +4 -4
- package/lib/api/cxapp/exec.d.ts +5 -4
- package/lib/api/cxapp/exec.js +76 -72
- package/lib/api/deployments/asset-publishing.d.ts +0 -2
- package/lib/api/deployments/asset-publishing.js +24 -31
- package/lib/api/deployments/assets.d.ts +1 -1
- package/lib/api/deployments/assets.js +12 -13
- package/lib/api/deployments/{cloudformation.d.ts → cfn-api.d.ts} +5 -102
- package/lib/api/deployments/cfn-api.js +438 -0
- package/lib/api/deployments/checks.d.ts +1 -1
- package/lib/api/deployments/checks.js +12 -13
- package/lib/api/deployments/deploy-stack.d.ts +2 -3
- package/lib/api/deployments/deploy-stack.js +34 -45
- package/lib/api/deployments/deployment-result.js +3 -3
- package/lib/api/deployments/deployments.d.ts +3 -3
- package/lib/api/deployments/deployments.js +35 -42
- package/lib/api/deployments/hotswap-deployments.d.ts +2 -2
- package/lib/api/deployments/hotswap-deployments.js +122 -69
- package/lib/api/deployments/index.d.ts +1 -2
- package/lib/api/deployments/index.js +2 -3
- package/lib/api/environment/environment-access.d.ts +2 -2
- package/lib/api/environment/environment-access.js +18 -20
- package/lib/api/environment/environment-resources.d.ts +1 -1
- package/lib/api/environment/environment-resources.js +17 -19
- package/lib/api/environment/index.d.ts +1 -0
- package/lib/api/environment/index.js +2 -1
- package/lib/api/environment/placeholders.js +23 -0
- package/lib/api/garbage-collection/garbage-collector.d.ts +1 -1
- package/lib/api/garbage-collection/garbage-collector.js +56 -66
- package/lib/api/garbage-collection/progress-printer.d.ts +1 -1
- package/lib/api/garbage-collection/progress-printer.js +7 -7
- package/lib/api/garbage-collection/stack-refresh.d.ts +1 -1
- package/lib/api/garbage-collection/stack-refresh.js +12 -15
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -3
- package/lib/api/hotswap/appsync-mapping-templates.js +25 -22
- package/lib/api/hotswap/code-build-projects.d.ts +3 -3
- package/lib/api/hotswap/code-build-projects.js +12 -7
- package/lib/api/hotswap/common.d.ts +13 -61
- package/lib/api/hotswap/common.js +40 -70
- package/lib/api/hotswap/ecs-services.d.ts +4 -4
- package/lib/api/hotswap/ecs-services.js +38 -21
- package/lib/api/hotswap/lambda-functions.d.ts +3 -3
- package/lib/api/hotswap/lambda-functions.js +23 -19
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +3 -3
- package/lib/api/hotswap/s3-bucket-deployments.js +11 -7
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -3
- package/lib/api/hotswap/stepfunctions-state-machines.js +8 -4
- package/lib/api/logs/find-cloudwatch-logs.js +6 -7
- package/lib/api/logs/logs-monitor.js +5 -8
- package/lib/api/plugin/plugin.js +6 -10
- package/lib/api/resource-import/importer.d.ts +8 -8
- package/lib/api/resource-import/importer.js +27 -42
- package/lib/api/resource-import/migrator.d.ts +3 -3
- package/lib/api/resource-import/migrator.js +6 -6
- package/lib/api/settings.d.ts +0 -3
- package/lib/api/settings.js +4 -40
- package/lib/api/stack-events/stack-activity-monitor.d.ts +1 -1
- package/lib/api/stack-events/stack-activity-monitor.js +12 -15
- package/lib/api/stack-events/stack-event-poller.js +9 -10
- package/lib/api/toolkit-info.d.ts +2 -2
- package/lib/api/toolkit-info.js +20 -24
- package/lib/{tree.d.ts → api/tree.d.ts} +2 -2
- package/lib/api/tree.js +37 -0
- package/lib/api/util/rwlock.js +4 -4
- package/lib/api/work-graph/work-graph-builder.js +4 -4
- package/lib/api/work-graph/work-graph.d.ts +1 -1
- package/lib/api/work-graph/work-graph.js +13 -15
- package/lib/cli/activity-printer/base.d.ts +2 -2
- package/lib/cli/activity-printer/base.js +6 -8
- package/lib/cli/activity-printer/current.js +7 -11
- package/lib/cli/activity-printer/history.js +2 -3
- package/lib/cli/cdk-toolkit.d.ts +16 -19
- package/lib/cli/cdk-toolkit.js +118 -74
- package/lib/cli/ci-systems.js +2 -3
- package/lib/cli/cli-config.js +4 -4
- package/lib/cli/cli.js +49 -50
- package/lib/cli/convert-to-user-input.js +110 -111
- package/lib/{toolkit → cli/io-host}/cli-io-host.d.ts +6 -2
- package/lib/cli/io-host/cli-io-host.js +356 -0
- package/lib/cli/io-host/index.d.ts +1 -0
- package/lib/{toolkit/error.js → cli/io-host/index.js} +2 -2
- package/lib/cli/messages.d.ts +1 -1
- package/lib/cli/messages.js +2 -3
- package/lib/cli/pretty-print-error.d.ts +1 -0
- package/lib/cli/pretty-print-error.js +35 -0
- package/lib/cli/root-dir.js +4 -4
- package/lib/cli/user-configuration.js +57 -14
- package/lib/cli/util/npm.js +3 -3
- package/lib/cli/util/yargs-helpers.d.ts +1 -1
- package/lib/cli/util/yargs-helpers.js +3 -3
- package/lib/cli/version.js +4 -4
- package/lib/commands/context.js +7 -8
- package/lib/commands/diff.d.ts +1 -0
- package/lib/commands/diff.js +7 -0
- package/lib/commands/init/index.d.ts +1 -0
- package/lib/commands/init/index.js +18 -0
- package/lib/commands/init/init-hooks.js +63 -0
- package/lib/commands/init/init.js +435 -0
- package/lib/{os.js → commands/init/os.js} +4 -4
- package/lib/{list-stacks.d.ts → commands/list-stacks.d.ts} +1 -1
- package/lib/{list-stacks.js → commands/list-stacks.js} +2 -2
- package/lib/commands/migrate.js +29 -32
- package/lib/context-providers/ami.d.ts +3 -1
- package/lib/context-providers/ami.js +8 -8
- package/lib/context-providers/availability-zones.d.ts +3 -1
- package/lib/context-providers/availability-zones.js +4 -4
- package/lib/context-providers/cc-api-provider.d.ts +8 -12
- package/lib/context-providers/cc-api-provider.js +94 -66
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +3 -1
- package/lib/context-providers/endpoint-service-availability-zones.js +6 -6
- package/lib/context-providers/hosted-zones.d.ts +3 -1
- package/lib/context-providers/hosted-zones.js +11 -11
- package/lib/context-providers/index.d.ts +19 -5
- package/lib/context-providers/index.js +35 -17
- package/lib/context-providers/keys.d.ts +3 -1
- package/lib/context-providers/keys.js +8 -8
- package/lib/context-providers/load-balancers.js +15 -18
- package/lib/context-providers/security-groups.js +10 -12
- package/lib/context-providers/ssm-parameters.d.ts +3 -1
- package/lib/context-providers/ssm-parameters.js +7 -7
- package/lib/context-providers/vpcs.d.ts +3 -1
- package/lib/context-providers/vpcs.js +14 -15
- package/lib/index.js +124098 -123198
- package/lib/init-templates/.init-version.json +1 -1
- package/lib/init-templates/.recommended-feature-flags.json +3 -1
- package/lib/legacy-exports-source.d.ts +4 -5
- package/lib/legacy-exports-source.js +6 -7
- package/lib/logging.js +2 -2
- package/lib/notices.d.ts +1 -1
- package/lib/notices.js +26 -32
- package/package.json +29 -29
- package/lib/api/deployments/cloudformation.js +0 -597
- package/lib/api/deployments/nested-stack-helpers.js +0 -88
- package/lib/api/util/placeholders.js +0 -24
- package/lib/api/util/template-body-parameter.js +0 -103
- package/lib/diff.d.ts +0 -28
- package/lib/diff.js +0 -165
- package/lib/init-hooks.js +0 -63
- package/lib/init.js +0 -437
- package/lib/toolkit/cli-io-host.js +0 -353
- package/lib/toolkit/error.d.ts +0 -1
- package/lib/tree.js +0 -40
- /package/lib/api/{util → environment}/placeholders.d.ts +0 -0
- /package/lib/{init-hooks.d.ts → commands/init/init-hooks.d.ts} +0 -0
- /package/lib/{init.d.ts → commands/init/init.d.ts} +0 -0
- /package/lib/{os.d.ts → commands/init/os.d.ts} +0 -0
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AmiContextProviderPlugin = void 0;
|
|
4
|
+
const api_1 = require("../../../@aws-cdk/tmp-toolkit-helpers/src/api");
|
|
4
5
|
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
5
|
-
const logging_1 = require("../logging");
|
|
6
|
-
const error_1 = require("../toolkit/error");
|
|
7
6
|
/**
|
|
8
7
|
* Plugin to search AMIs for the current account
|
|
9
8
|
*/
|
|
10
9
|
class AmiContextProviderPlugin {
|
|
11
|
-
constructor(aws) {
|
|
10
|
+
constructor(aws, io) {
|
|
12
11
|
this.aws = aws;
|
|
12
|
+
this.io = io;
|
|
13
13
|
}
|
|
14
14
|
async getValue(args) {
|
|
15
15
|
const region = args.region;
|
|
16
16
|
const account = args.account;
|
|
17
17
|
// Normally we'd do this only as 'debug', but searching AMIs typically takes dozens
|
|
18
18
|
// of seconds, so be little more verbose about it so users know what is going on.
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
await this.io.info(`Searching for AMI in ${account}:${region}`);
|
|
20
|
+
await this.io.debug(`AMI search parameters: ${JSON.stringify(args)}`);
|
|
21
21
|
const ec2 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).ec2();
|
|
22
22
|
const response = await ec2.describeImages({
|
|
23
23
|
Owners: args.owners,
|
|
@@ -28,13 +28,13 @@ class AmiContextProviderPlugin {
|
|
|
28
28
|
});
|
|
29
29
|
const images = [...(response.Images || [])].filter((i) => i.ImageId !== undefined);
|
|
30
30
|
if (images.length === 0) {
|
|
31
|
-
throw new
|
|
31
|
+
throw new api_1.ContextProviderError('No AMI found that matched the search criteria');
|
|
32
32
|
}
|
|
33
33
|
// Return the most recent one
|
|
34
34
|
// Note: Date.parse() is not going to respect the timezone of the string,
|
|
35
35
|
// but since we only care about the relative values that is okay.
|
|
36
36
|
images.sort(descending((i) => Date.parse(i.CreationDate || '1970')));
|
|
37
|
-
|
|
37
|
+
await this.io.debug(`Selected image '${images[0].ImageId}' created at '${images[0].CreationDate}'`);
|
|
38
38
|
return images[0].ImageId;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -47,4 +47,4 @@ function descending(valueOf) {
|
|
|
47
47
|
return valueOf(b) - valueOf(a);
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYW1pLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVFQUFxRjtBQUNyRiwrREFBd0Y7QUFHeEY7O0dBRUc7QUFDSCxNQUFhLHdCQUF3QjtJQUNuQyxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQXFCO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU3QixtRkFBbUY7UUFDbkYsaUZBQWlGO1FBQ2pGLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRFLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFBLHFDQUFzQixFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsTUFBTSxFQUFFLE1BQU07YUFDZixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRW5GLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksMEJBQW9CLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8saUJBQWlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQVEsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFwQ0QsNERBb0NDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFVBQVUsQ0FBSSxPQUF5QjtJQUM5QyxPQUFPLENBQUMsQ0FBSSxFQUFFLENBQUksRUFBRSxFQUFFO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbWlDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMgfSBmcm9tICcuJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpJztcbmltcG9ydCB7IHR5cGUgU2RrUHJvdmlkZXIsIGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi4vYXBpL3BsdWdpbic7XG5cbi8qKlxuICogUGx1Z2luIHRvIHNlYXJjaCBBTUlzIGZvciB0aGUgY3VycmVudCBhY2NvdW50XG4gKi9cbmV4cG9ydCBjbGFzcyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIsIHByaXZhdGUgcmVhZG9ubHkgaW86IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IEFtaUNvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBhcmdzLmFjY291bnQ7XG5cbiAgICAvLyBOb3JtYWxseSB3ZSdkIGRvIHRoaXMgb25seSBhcyAnZGVidWcnLCBidXQgc2VhcmNoaW5nIEFNSXMgdHlwaWNhbGx5IHRha2VzIGRvemVuc1xuICAgIC8vIG9mIHNlY29uZHMsIHNvIGJlIGxpdHRsZSBtb3JlIHZlcmJvc2UgYWJvdXQgaXQgc28gdXNlcnMga25vdyB3aGF0IGlzIGdvaW5nIG9uLlxuICAgIGF3YWl0IHRoaXMuaW8uaW5mbyhgU2VhcmNoaW5nIGZvciBBTUkgaW4gJHthY2NvdW50fToke3JlZ2lvbn1gKTtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBBTUkgc2VhcmNoIHBhcmFtZXRlcnM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG5cbiAgICBjb25zdCBlYzIgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLmVjMigpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZWMyLmRlc2NyaWJlSW1hZ2VzKHtcbiAgICAgIE93bmVyczogYXJncy5vd25lcnMsXG4gICAgICBGaWx0ZXJzOiBPYmplY3QuZW50cmllcyhhcmdzLmZpbHRlcnMpLm1hcCgoW2tleSwgdmFsdWVzXSkgPT4gKHtcbiAgICAgICAgTmFtZToga2V5LFxuICAgICAgICBWYWx1ZXM6IHZhbHVlcyxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGltYWdlcyA9IFsuLi4ocmVzcG9uc2UuSW1hZ2VzIHx8IFtdKV0uZmlsdGVyKChpKSA9PiBpLkltYWdlSWQgIT09IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoaW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKCdObyBBTUkgZm91bmQgdGhhdCBtYXRjaGVkIHRoZSBzZWFyY2ggY3JpdGVyaWEnKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIG1vc3QgcmVjZW50IG9uZVxuICAgIC8vIE5vdGU6IERhdGUucGFyc2UoKSBpcyBub3QgZ29pbmcgdG8gcmVzcGVjdCB0aGUgdGltZXpvbmUgb2YgdGhlIHN0cmluZyxcbiAgICAvLyBidXQgc2luY2Ugd2Ugb25seSBjYXJlIGFib3V0IHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCBpcyBva2F5LlxuICAgIGltYWdlcy5zb3J0KGRlc2NlbmRpbmcoKGkpID0+IERhdGUucGFyc2UoaS5DcmVhdGlvbkRhdGUgfHwgJzE5NzAnKSkpO1xuXG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgU2VsZWN0ZWQgaW1hZ2UgJyR7aW1hZ2VzWzBdLkltYWdlSWR9JyBjcmVhdGVkIGF0ICcke2ltYWdlc1swXS5DcmVhdGlvbkRhdGV9J2ApO1xuICAgIHJldHVybiBpbWFnZXNbMF0uSW1hZ2VJZCE7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIGEgY29tcGFyYXRvciB0aGF0IHNvcnRzIGluIGRlc2NlbmRpbmcgb3JkZXIgZ2l2ZW4gYSBzb3J0IGtleSBleHRyYWN0b3JcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZzxBPih2YWx1ZU9mOiAoeDogQSkgPT4gbnVtYmVyKSB7XG4gIHJldHVybiAoYTogQSwgYjogQSkgPT4ge1xuICAgIHJldHVybiB2YWx1ZU9mKGIpIC0gdmFsdWVPZihhKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AvailabilityZonesContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { IContextProviderMessages } from '.';
|
|
2
3
|
import { type SdkProvider } from '../api/aws-auth/sdk-provider';
|
|
3
4
|
import type { ContextProviderPlugin } from '../api/plugin';
|
|
4
5
|
/**
|
|
@@ -6,6 +7,7 @@ import type { ContextProviderPlugin } from '../api/plugin';
|
|
|
6
7
|
*/
|
|
7
8
|
export declare class AZContextProviderPlugin implements ContextProviderPlugin {
|
|
8
9
|
private readonly aws;
|
|
9
|
-
|
|
10
|
+
private readonly io;
|
|
11
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
10
12
|
getValue(args: AvailabilityZonesContextQuery): Promise<(string | undefined)[]>;
|
|
11
13
|
}
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AZContextProviderPlugin = void 0;
|
|
4
4
|
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
5
|
-
const logging_1 = require("../logging");
|
|
6
5
|
/**
|
|
7
6
|
* Plugin to retrieve the Availability Zones for the current account
|
|
8
7
|
*/
|
|
9
8
|
class AZContextProviderPlugin {
|
|
10
|
-
constructor(aws) {
|
|
9
|
+
constructor(aws, io) {
|
|
11
10
|
this.aws = aws;
|
|
11
|
+
this.io = io;
|
|
12
12
|
}
|
|
13
13
|
async getValue(args) {
|
|
14
14
|
const region = args.region;
|
|
15
15
|
const account = args.account;
|
|
16
|
-
|
|
16
|
+
await this.io.debug(`Reading AZs for ${account}:${region}`);
|
|
17
17
|
const ec2 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).ec2();
|
|
18
18
|
const response = await ec2.describeAvailabilityZones({});
|
|
19
19
|
if (!response.AvailabilityZones) {
|
|
@@ -24,4 +24,4 @@ class AZContextProviderPlugin {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
exports.AZContextProviderPlugin = AZContextProviderPlugin;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmlsaXR5LXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXZhaWxhYmlsaXR5LXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLCtEQUF3RjtBQUd4Rjs7R0FFRztBQUNILE1BQWEsdUJBQXVCO0lBQ2xDLFlBQTZCLEdBQWdCLEVBQW1CLEVBQTRCO1FBQS9ELFFBQUcsR0FBSCxHQUFHLENBQWE7UUFBbUIsT0FBRSxHQUFGLEVBQUUsQ0FBMEI7SUFDNUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBbUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFBLHFDQUFzQixFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsR0FBRyxDQUN2RyxDQUFDLElBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQzFDLENBQUM7UUFDRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQWxCRCwwREFrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF2YWlsYWJpbGl0eVpvbmVzQ29udGV4dFF1ZXJ5IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgQXZhaWxhYmlsaXR5Wm9uZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuaW1wb3J0IHR5cGUgeyBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMgfSBmcm9tICcuJztcbmltcG9ydCB7IHR5cGUgU2RrUHJvdmlkZXIsIGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi4vYXBpL3BsdWdpbic7XG5cbi8qKlxuICogUGx1Z2luIHRvIHJldHJpZXZlIHRoZSBBdmFpbGFiaWxpdHkgWm9uZXMgZm9yIHRoZSBjdXJyZW50IGFjY291bnRcbiAqL1xuZXhwb3J0IGNsYXNzIEFaQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBhcmdzLmFjY291bnQ7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgUmVhZGluZyBBWnMgZm9yICR7YWNjb3VudH06JHtyZWdpb259YCk7XG4gICAgY29uc3QgZWMyID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsodGhpcy5hd3MsIGFyZ3MpKS5lYzIoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVjMi5kZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzKHt9KTtcbiAgICBpZiAoIXJlc3BvbnNlLkF2YWlsYWJpbGl0eVpvbmVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGF6cyA9IHJlc3BvbnNlLkF2YWlsYWJpbGl0eVpvbmVzLmZpbHRlcigoem9uZTogQXZhaWxhYmlsaXR5Wm9uZSkgPT4gem9uZS5TdGF0ZSA9PT0gJ2F2YWlsYWJsZScpLm1hcChcbiAgICAgICh6b25lOiBBdmFpbGFiaWxpdHlab25lKSA9PiB6b25lLlpvbmVOYW1lLFxuICAgICk7XG4gICAgcmV0dXJuIGF6cztcbiAgfVxufVxuIl19
|
|
@@ -6,29 +6,25 @@ export declare class CcApiContextProviderPlugin implements ContextProviderPlugin
|
|
|
6
6
|
constructor(aws: SdkProvider);
|
|
7
7
|
/**
|
|
8
8
|
* This returns a data object with the value from CloudControl API result.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* args.propertiesToReturn - Properties from CC API to return.
|
|
9
|
+
*
|
|
10
|
+
* See the documentation in the Cloud Assembly Schema for the semantics of
|
|
11
|
+
* each query parameter.
|
|
13
12
|
*/
|
|
14
|
-
getValue(args: CcApiContextQuery): Promise<
|
|
15
|
-
[key: string]: any;
|
|
16
|
-
}[]>;
|
|
17
|
-
private findResources;
|
|
13
|
+
getValue(args: CcApiContextQuery): Promise<any>;
|
|
18
14
|
/**
|
|
19
15
|
* Calls getResource from CC API to get the resource.
|
|
20
16
|
* See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/get-resource.html
|
|
21
17
|
*
|
|
22
|
-
*
|
|
23
|
-
* If the resource is found, then a map of the identifier to a map of property values is returned.
|
|
18
|
+
* Will always return exactly one resource, or fail.
|
|
24
19
|
*/
|
|
25
20
|
private getResource;
|
|
26
21
|
/**
|
|
27
22
|
* Calls listResources from CC API to get the resources and apply args.propertyMatch to find the resources.
|
|
28
23
|
* See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/list-resources.html
|
|
29
24
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
25
|
+
* Will return 0 or more resources.
|
|
26
|
+
*
|
|
27
|
+
* Does not currently paginate through more than one result page.
|
|
32
28
|
*/
|
|
33
29
|
private listResources;
|
|
34
30
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CcApiContextProviderPlugin = void 0;
|
|
4
|
+
const client_cloudcontrol_1 = require("@aws-sdk/client-cloudcontrol");
|
|
5
|
+
const api_1 = require("../../../@aws-cdk/tmp-toolkit-helpers/src/api");
|
|
4
6
|
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
5
|
-
const error_1 = require("../toolkit/error");
|
|
6
7
|
const util_1 = require("../util");
|
|
7
8
|
class CcApiContextProviderPlugin {
|
|
8
9
|
constructor(aws) {
|
|
@@ -10,107 +11,134 @@ class CcApiContextProviderPlugin {
|
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* This returns a data object with the value from CloudControl API result.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* args.propertiesToReturn - Properties from CC API to return.
|
|
14
|
+
*
|
|
15
|
+
* See the documentation in the Cloud Assembly Schema for the semantics of
|
|
16
|
+
* each query parameter.
|
|
17
17
|
*/
|
|
18
18
|
async getValue(args) {
|
|
19
|
-
|
|
20
|
-
const result = await this.findResources(cloudControl, args);
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
async findResources(cc, args) {
|
|
19
|
+
// Validate input
|
|
24
20
|
if (args.exactIdentifier && args.propertyMatch) {
|
|
25
|
-
throw new
|
|
21
|
+
throw new api_1.ContextProviderError(`Provider protocol error: specify either exactIdentifier or propertyMatch, but not both (got ${JSON.stringify(args)})`);
|
|
26
22
|
}
|
|
27
|
-
if (
|
|
28
|
-
throw new
|
|
23
|
+
if (args.ignoreErrorOnMissingContext && args.dummyValue === undefined) {
|
|
24
|
+
throw new api_1.ContextProviderError(`Provider protocol error: if ignoreErrorOnMissingContext is set, a dummyValue must be supplied (got ${JSON.stringify(args)})`);
|
|
29
25
|
}
|
|
30
|
-
if (args.
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
if (args.dummyValue !== undefined && (!Array.isArray(args.dummyValue) || !args.dummyValue.every(isObject))) {
|
|
27
|
+
throw new api_1.ContextProviderError(`Provider protocol error: dummyValue must be an array of objects (got ${JSON.stringify(args.dummyValue)})`);
|
|
28
|
+
}
|
|
29
|
+
// Do the lookup
|
|
30
|
+
const cloudControl = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).cloudControl();
|
|
31
|
+
try {
|
|
32
|
+
let resources;
|
|
33
|
+
if (args.exactIdentifier) {
|
|
34
|
+
// use getResource to get the exact indentifier
|
|
35
|
+
resources = await this.getResource(cloudControl, args.typeName, args.exactIdentifier);
|
|
36
|
+
}
|
|
37
|
+
else if (args.propertyMatch) {
|
|
38
|
+
// use listResource
|
|
39
|
+
resources = await this.listResources(cloudControl, args.typeName, args.propertyMatch, args.expectedMatchCount);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new api_1.ContextProviderError(`Provider protocol error: neither exactIdentifier nor propertyMatch is specified in ${JSON.stringify(args)}.`);
|
|
43
|
+
}
|
|
44
|
+
return resources.map((r) => (0, util_1.getResultObj)(r.properties, r.identifier, args.propertiesToReturn));
|
|
33
45
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
46
|
+
catch (err) {
|
|
47
|
+
if (err instanceof ZeroResourcesFoundError && args.ignoreErrorOnMissingContext) {
|
|
48
|
+
// We've already type-checked dummyValue.
|
|
49
|
+
return args.dummyValue;
|
|
50
|
+
}
|
|
51
|
+
throw err;
|
|
37
52
|
}
|
|
38
53
|
}
|
|
39
54
|
/**
|
|
40
55
|
* Calls getResource from CC API to get the resource.
|
|
41
56
|
* See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/get-resource.html
|
|
42
57
|
*
|
|
43
|
-
*
|
|
44
|
-
* If the resource is found, then a map of the identifier to a map of property values is returned.
|
|
58
|
+
* Will always return exactly one resource, or fail.
|
|
45
59
|
*/
|
|
46
|
-
async getResource(cc, typeName, exactIdentifier
|
|
47
|
-
var _a, _b, _c, _d, _e;
|
|
48
|
-
const resultObjs = [];
|
|
60
|
+
async getResource(cc, typeName, exactIdentifier) {
|
|
49
61
|
try {
|
|
50
62
|
const result = await cc.getResource({
|
|
51
63
|
TypeName: typeName,
|
|
52
64
|
Identifier: exactIdentifier,
|
|
53
65
|
});
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const propsObject = JSON.parse((_d = (_c = result.ResourceDescription) === null || _c === void 0 ? void 0 : _c.Properties) !== null && _d !== void 0 ? _d : '');
|
|
57
|
-
const propsObj = (0, util_1.getResultObj)(propsObject, (_e = result.ResourceDescription) === null || _e === void 0 ? void 0 : _e.Identifier, propertiesToReturn);
|
|
58
|
-
resultObjs.push(propsObj);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
throw new error_1.ContextProviderError(`Could not get resource ${exactIdentifier}.`);
|
|
66
|
+
if (!result.ResourceDescription) {
|
|
67
|
+
throw new api_1.ContextProviderError('Unexpected CloudControl API behavior: returned empty response');
|
|
62
68
|
}
|
|
69
|
+
return [foundResourceFromCcApi(result.ResourceDescription)];
|
|
63
70
|
}
|
|
64
71
|
catch (err) {
|
|
65
|
-
|
|
72
|
+
if (err instanceof client_cloudcontrol_1.ResourceNotFoundException || err.name === 'ResourceNotFoundException') {
|
|
73
|
+
throw new ZeroResourcesFoundError(`No resource of type ${typeName} with identifier: ${exactIdentifier}`);
|
|
74
|
+
}
|
|
75
|
+
if (!(err instanceof api_1.ContextProviderError)) {
|
|
76
|
+
throw new api_1.ContextProviderError(`Encountered CC API error while getting ${typeName} resource ${exactIdentifier}: ${err.message}`);
|
|
77
|
+
}
|
|
78
|
+
throw err;
|
|
66
79
|
}
|
|
67
|
-
return resultObjs;
|
|
68
80
|
}
|
|
69
81
|
/**
|
|
70
82
|
* Calls listResources from CC API to get the resources and apply args.propertyMatch to find the resources.
|
|
71
83
|
* See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/list-resources.html
|
|
72
84
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
85
|
+
* Will return 0 or more resources.
|
|
86
|
+
*
|
|
87
|
+
* Does not currently paginate through more than one result page.
|
|
75
88
|
*/
|
|
76
|
-
async listResources(cc, typeName, propertyMatch,
|
|
77
|
-
var _a;
|
|
78
|
-
const resultObjs = [];
|
|
89
|
+
async listResources(cc, typeName, propertyMatch, expectedMatchCount) {
|
|
79
90
|
try {
|
|
80
91
|
const result = await cc.listResources({
|
|
81
92
|
TypeName: typeName,
|
|
82
93
|
});
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (filters) {
|
|
91
|
-
match = filters.every((record, _index, _arr) => {
|
|
92
|
-
const key = record[0];
|
|
93
|
-
const expected = record[1];
|
|
94
|
-
const actual = (0, util_1.findJsonValue)(propsObject, key);
|
|
95
|
-
return propertyMatchesFilter(actual, expected);
|
|
96
|
-
});
|
|
97
|
-
function propertyMatchesFilter(actual, expected) {
|
|
98
|
-
// For now we just check for strict equality, but we can implement pattern matching and fuzzy matching here later
|
|
99
|
-
return expected === actual;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (match) {
|
|
103
|
-
const propsObj = (0, util_1.getResultObj)(propsObject, resource.Identifier, propertiesToReturn);
|
|
104
|
-
resultObjs.push(propsObj);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
94
|
+
const found = (result.ResourceDescriptions ?? [])
|
|
95
|
+
.map(foundResourceFromCcApi)
|
|
96
|
+
.filter((r) => {
|
|
97
|
+
return Object.entries(propertyMatch).every(([propPath, expected]) => {
|
|
98
|
+
const actual = (0, util_1.findJsonValue)(r.properties, propPath);
|
|
99
|
+
return propertyMatchesFilter(actual, expected);
|
|
100
|
+
});
|
|
107
101
|
});
|
|
102
|
+
if ((expectedMatchCount === 'at-least-one' || expectedMatchCount === 'exactly-one') && found.length === 0) {
|
|
103
|
+
throw new ZeroResourcesFoundError(`Could not find any resources matching ${JSON.stringify(propertyMatch)}`);
|
|
104
|
+
}
|
|
105
|
+
if ((expectedMatchCount === 'at-most-one' || expectedMatchCount === 'exactly-one') && found.length > 1) {
|
|
106
|
+
throw new api_1.ContextProviderError(`Found ${found.length} resources matching ${JSON.stringify(propertyMatch)}; please narrow the search criteria`);
|
|
107
|
+
}
|
|
108
|
+
return found;
|
|
108
109
|
}
|
|
109
110
|
catch (err) {
|
|
110
|
-
|
|
111
|
+
if (!(err instanceof api_1.ContextProviderError) && !(err instanceof ZeroResourcesFoundError)) {
|
|
112
|
+
throw new api_1.ContextProviderError(`Encountered CC API error while listing ${typeName} resources matching ${JSON.stringify(propertyMatch)}: ${err.message}`);
|
|
113
|
+
}
|
|
114
|
+
throw err;
|
|
111
115
|
}
|
|
112
|
-
return resultObjs;
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
118
|
exports.CcApiContextProviderPlugin = CcApiContextProviderPlugin;
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtYXBpLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2MtYXBpLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLCtEQUF3RjtBQUV4Riw0Q0FBd0Q7QUFDeEQsa0NBQXNEO0FBRXRELE1BQWEsMEJBQTBCO0lBQ3JDLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBdUI7UUFDM0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLElBQUEscUNBQXNCLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRW5GLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBdUIsRUFBRSxJQUF1QjtRQUMxRSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSw0QkFBb0IsQ0FBQyxpSEFBaUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDcEssQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSw0QkFBb0IsQ0FBQywwR0FBMEcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDN0osQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLCtDQUErQztZQUMvQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVB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QUFBLG9CQUFhLEVBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUMvQyxPQUFPLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDakQsQ0FBQyxDQUFDLENBQUM7d0JBRUgsU0FBUyxxQkFBcUIsQ0FBQyxNQUFXLEVBQUUsUUFBaUI7NEJBQzNELGlIQUFpSDs0QkFDakgsT0FBTyxRQUFRLEtBQUssTUFBTSxDQUFDO3dCQUM3QixDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQzt3QkFDVixNQUFNLFFBQVEsR0FBRyxJQUFBLG1CQUFZLEVBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzt3QkFDckYsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDNUIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSw0QkFBb0IsQ0FBQywyQkFBMkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUF2SEQsZ0VBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDY0FwaUNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IElDbG91ZENvbnRyb2xDbGllbnQgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgdHlwZSBTZGtQcm92aWRlciwgaW5pdENvbnRleHRQcm92aWRlclNkayB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC9lcnJvcic7XG5pbXBvcnQgeyBmaW5kSnNvblZhbHVlLCBnZXRSZXN1bHRPYmogfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGNsYXNzIENjQXBpQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyKSB7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyByZXR1cm5zIGEgZGF0YSBvYmplY3Qgd2l0aCB0aGUgdmFsdWUgZnJvbSBDbG91ZENvbnRyb2wgQVBJIHJlc3VsdC5cbiAgICogYXJncy50eXBlTmFtZSAtIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRjb250cm9sYXBpL2xhdGVzdC91c2VyZ3VpZGUvc3VwcG9ydGVkLXJlc291cmNlcy5odG1sXG4gICAqIGFyZ3MuZXhhY3RJZGVudGlmaWVyIC0gIHVzZSBDQyBBUEkgZ2V0UmVzb3VyY2UuXG4gICAqIGFyZ3MucHJvcGVydHlNYXRjaCAtIHVzZSBDQ1AgQVBJIGxpc3RSZXNvdXJjZXMgdG8gZ2V0IHJlc291cmNlcyBhbmQgcHJvcGVydHlNYXRjaCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgbGlzdC5cbiAgICogYXJncy5wcm9wZXJ0aWVzVG9SZXR1cm4gLSBQcm9wZXJ0aWVzIGZyb20gQ0MgQVBJIHRvIHJldHVybi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBDY0FwaUNvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IGNsb3VkQ29udHJvbCA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkuY2xvdWRDb250cm9sKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZpbmRSZXNvdXJjZXMoY2xvdWRDb250cm9sLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kUmVzb3VyY2VzKGNjOiBJQ2xvdWRDb250cm9sQ2xpZW50LCBhcmdzOiBDY0FwaUNvbnRleHRRdWVyeSk6IFByb21pc2U8e1trZXk6IHN0cmluZ106IGFueX0gW10+IHtcbiAgICBpZiAoYXJncy5leGFjdElkZW50aWZpZXIgJiYgYXJncy5wcm9wZXJ0eU1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYFNwZWNpZnkgZWl0aGVyIGV4YWN0SWRlbnRpZmllciBvciBwcm9wZXJ0eU1hdGNoLCBidXQgbm90IGJvdGguIEZhaWxlZCB0byBmaW5kIHJlc291cmNlcyB1c2luZyBDQyBBUEkgZm9yIHR5cGUgJHthcmdzLnR5cGVOYW1lfS5gKTtcbiAgICB9XG4gICAgaWYgKCFhcmdzLmV4YWN0SWRlbnRpZmllciAmJiAhYXJncy5wcm9wZXJ0eU1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYE5laXRoZXIgZXhhY3RJZGVudGlmaWVyIG5vciBwcm9wZXJ0eU1hdGNoIGlzIHNwZWNpZmllZC4gRmFpbGVkIHRvIGZpbmQgcmVzb3VyY2VzIHVzaW5nIENDIEFQSSBmb3IgdHlwZSAke2FyZ3MudHlwZU5hbWV9LmApO1xuICAgIH1cblxuICAgIGlmIChhcmdzLmV4YWN0SWRlbnRpZmllcikge1xuICAgICAgLy8gdXNlIGdldFJlc291cmNlIHRvIGdldCB0aGUgZXhhY3QgaW5kZW50aWZpZXJcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKGNjLCBhcmdzLnR5cGVOYW1lLCBhcmdzLmV4YWN0SWRlbnRpZmllciwgYXJncy5wcm9wZXJ0aWVzVG9SZXR1cm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgbGlzdFJlc291cmNlXG4gICAgICByZXR1cm4gdGhpcy5saXN0UmVzb3VyY2VzKGNjLCBhcmdzLnR5cGVOYW1lLCBhcmdzLnByb3BlcnR5TWF0Y2ghLCBhcmdzLnByb3BlcnRpZXNUb1JldHVybik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIGdldFJlc291cmNlIGZyb20gQ0MgQVBJIHRvIGdldCB0aGUgcmVzb3VyY2UuXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC9yZWZlcmVuY2UvY2xvdWRjb250cm9sL2dldC1yZXNvdXJjZS5odG1sXG4gICAqXG4gICAqIElmIHRoZSBleGFjdElkZW50aWZpZXIgaXMgbm90IGZvdW5kLCB0aGVuIGFuIGVtcHR5IG1hcCBpcyByZXR1cm5lZC5cbiAgICogSWYgdGhlIHJlc291cmNlIGlzIGZvdW5kLCB0aGVuIGEgbWFwIG9mIHRoZSBpZGVudGlmaWVyIHRvIGEgbWFwIG9mIHByb3BlcnR5IHZhbHVlcyBpcyByZXR1cm5lZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVzb3VyY2UoXG4gICAgY2M6IElDbG91ZENvbnRyb2xDbGllbnQsXG4gICAgdHlwZU5hbWU6IHN0cmluZyxcbiAgICBleGFjdElkZW50aWZpZXI6IHN0cmluZyxcbiAgICBwcm9wZXJ0aWVzVG9SZXR1cm46IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHtba2V5OiBzdHJpbmddOiBhbnl9W10+IHtcbiAgICBjb25zdCByZXN1bHRPYmpzOiB7W2tleTogc3RyaW5nXTogYW55fVtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNjLmdldFJlc291cmNlKHtcbiAgICAgICAgVHlwZU5hbWU6IHR5cGVOYW1lLFxuICAgICAgICBJZGVudGlmaWVyOiBleGFjdElkZW50aWZpZXIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGlkID0gcmVzdWx0LlJlc291cmNlRGVzY3JpcHRpb24/LklkZW50aWZpZXIgPz8gJyc7XG4gICAgICBpZiAoaWQgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHByb3BzT2JqZWN0ID0gSlNPTi5wYXJzZShyZXN1bHQuUmVzb3VyY2VEZXNjcmlwdGlvbj8uUHJvcGVydGllcyA/PyAnJyk7XG4gICAgICAgIGNvbnN0IHByb3BzT2JqID0gZ2V0UmVzdWx0T2JqKHByb3BzT2JqZWN0LCByZXN1bHQuUmVzb3VyY2VEZXNjcmlwdGlvbj8uSWRlbnRpZmllciEsIHByb3BlcnRpZXNUb1JldHVybik7XG4gICAgICAgIHJlc3VsdE9ianMucHVzaChwcm9wc09iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYENvdWxkIG5vdCBnZXQgcmVzb3VyY2UgJHtleGFjdElkZW50aWZpZXJ9LmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBFbmNvdW50ZXJlZCBDQyBBUEkgZXJyb3Igd2hpbGUgZ2V0dGluZyByZXNvdXJjZSAke2V4YWN0SWRlbnRpZmllcn0uIEVycm9yOiAke2Vycn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdE9ianM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbGlzdFJlc291cmNlcyBmcm9tIENDIEFQSSB0byBnZXQgdGhlIHJlc291cmNlcyBhbmQgYXBwbHkgYXJncy5wcm9wZXJ0eU1hdGNoIHRvIGZpbmQgdGhlIHJlc291cmNlcy5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvbGlzdC1yZXNvdXJjZXMuaHRtbFxuICAgKlxuICAgKiBTaW5jZSBleGFjdElkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgcHJvcGVydHlNYXRjaCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICogVGhpcyByZXR1cm5zIGFuIG9iamVjdCB3aGVyZSB0aGUgaWRzIGFyZSBvYmplY3Qga2V5cyBhbmQgdmFsdWVzIGFyZSBvYmplY3RzIHdpdGgga2V5cyBvZiBhcmdzLnByb3BlcnRpZXNUb1JldHVybi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbGlzdFJlc291cmNlcyhcbiAgICBjYzogSUNsb3VkQ29udHJvbENsaWVudCxcbiAgICB0eXBlTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TWF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHByb3BlcnRpZXNUb1JldHVybjogc3RyaW5nW10sXG4gICk6IFByb21pc2U8e1trZXk6IHN0cmluZ106IGFueX1bXT4ge1xuICAgIGNvbnN0IHJlc3VsdE9ianM6IHtba2V5OiBzdHJpbmddOiBhbnl9W10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5saXN0UmVzb3VyY2VzKHtcbiAgICAgICAgVHlwZU5hbWU6IHR5cGVOYW1lLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuUmVzb3VyY2VEZXNjcmlwdGlvbnM/LmZvckVhY2goKHJlc291cmNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gcmVzb3VyY2UuSWRlbnRpZmllciA/PyAnJztcbiAgICAgICAgaWYgKGlkICE9PSAnJykge1xuICAgICAgICAgIGNvbnN0IHByb3BzT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNvdXJjZS5Qcm9wZXJ0aWVzID8/ICcnKTtcblxuICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuZW50cmllcyhwcm9wZXJ0eU1hdGNoKTtcbiAgICAgICAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgICAgbWF0Y2ggPSBmaWx0ZXJzLmV2ZXJ5KChyZWNvcmQsIF9pbmRleCwgX2FycikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSByZWNvcmRbMF07XG4gICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gcmVjb3JkWzFdO1xuICAgICAgICAgICAgICBjb25zdCBhY3R1YWwgPSBmaW5kSnNvblZhbHVlKHByb3BzT2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlNYXRjaGVzRmlsdGVyKGFjdHVhbCwgZXhwZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb3BlcnR5TWF0Y2hlc0ZpbHRlcihhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgLy8gRm9yIG5vdyB3ZSBqdXN0IGNoZWNrIGZvciBzdHJpY3QgZXF1YWxpdHksIGJ1dCB3ZSBjYW4gaW1wbGVtZW50IHBhdHRlcm4gbWF0Y2hpbmcgYW5kIGZ1enp5IG1hdGNoaW5nIGhlcmUgbGF0ZXJcbiAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSBhY3R1YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wc09iaiA9IGdldFJlc3VsdE9iaihwcm9wc09iamVjdCwgcmVzb3VyY2UuSWRlbnRpZmllciEsIHByb3BlcnRpZXNUb1JldHVybik7XG4gICAgICAgICAgICByZXN1bHRPYmpzLnB1c2gocHJvcHNPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYENvdWxkIG5vdCBnZXQgcmVzb3VyY2VzICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9LiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRPYmpzO1xuICB9XG59XG4iXX0=
|
|
119
|
+
/**
|
|
120
|
+
* Convert a CC API response object into a nicer object (parse the JSON)
|
|
121
|
+
*/
|
|
122
|
+
function foundResourceFromCcApi(desc) {
|
|
123
|
+
return {
|
|
124
|
+
identifier: desc.Identifier ?? '*MISSING*',
|
|
125
|
+
properties: JSON.parse(desc.Properties ?? '{}'),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Whether the given property value matches the given filter
|
|
130
|
+
*
|
|
131
|
+
* For now we just check for strict equality, but we can implement pattern matching and fuzzy matching here later
|
|
132
|
+
*/
|
|
133
|
+
function propertyMatchesFilter(actual, expected) {
|
|
134
|
+
return expected === actual;
|
|
135
|
+
}
|
|
136
|
+
function isObject(x) {
|
|
137
|
+
return typeof x === 'object' && x !== null && !Array.isArray(x);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* A specific lookup failure indicating 0 resources found that can be recovered
|
|
141
|
+
*/
|
|
142
|
+
class ZeroResourcesFoundError extends Error {
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtYXBpLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2MtYXBpLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHNFQUF5RTtBQUN6RSx1RUFBcUY7QUFFckYsK0RBQXdGO0FBRXhGLGtDQUFzRDtBQUV0RCxNQUFhLDBCQUEwQjtJQUNyQyxZQUE2QixHQUFnQjtRQUFoQixRQUFHLEdBQUgsR0FBRyxDQUFhO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBdUI7UUFDM0MsaUJBQWlCO1FBQ2pCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLDBCQUFvQixDQUFDLCtGQUErRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6SixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RSxNQUFNLElBQUksMEJBQW9CLENBQUMsc0dBQXNHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hLLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxNQUFNLElBQUksMEJBQW9CLENBQUMsd0VBQXdFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3SSxDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFB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QVksdUJBQXVCLENBQUMsRUFBRSxDQUFDO2dCQUN4RixNQUFNLElBQUksMEJBQW9CLENBQUMsMENBQTBDLFFBQVEsdUJBQXVCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDM0osQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7Q0FDRjtBQTFIRCxnRUEwSEM7QUFFRDs7R0FFRztBQUNILFNBQVMsc0JBQXNCLENBQUMsSUFBeUI7SUFDdkQsT0FBTztRQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVc7UUFDMUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7S0FDaEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxNQUFlLEVBQUUsUUFBaUI7SUFDL0QsT0FBTyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFVO0lBQzFCLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFVRDs7R0FFRztBQUNILE1BQU0sdUJBQXdCLFNBQVEsS0FBSztDQUMxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2NBcGlDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZURlc2NyaXB0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkY29udHJvbCc7XG5pbXBvcnQgeyBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkY29udHJvbCc7XG5pbXBvcnQgeyBDb250ZXh0UHJvdmlkZXJFcnJvciB9IGZyb20gJy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaSc7XG5pbXBvcnQgdHlwZSB7IElDbG91ZENvbnRyb2xDbGllbnQgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgdHlwZSBTZGtQcm92aWRlciwgaW5pdENvbnRleHRQcm92aWRlclNkayB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IGZpbmRKc29uVmFsdWUsIGdldFJlc3VsdE9iaiB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2NBcGlDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBkYXRhIG9iamVjdCB3aXRoIHRoZSB2YWx1ZSBmcm9tIENsb3VkQ29udHJvbCBBUEkgcmVzdWx0LlxuICAgKlxuICAgKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIENsb3VkIEFzc2VtYmx5IFNjaGVtYSBmb3IgdGhlIHNlbWFudGljcyBvZlxuICAgKiBlYWNoIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBDY0FwaUNvbnRleHRRdWVyeSkge1xuICAgIC8vIFZhbGlkYXRlIGlucHV0XG4gICAgaWYgKGFyZ3MuZXhhY3RJZGVudGlmaWVyICYmIGFyZ3MucHJvcGVydHlNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBQcm92aWRlciBwcm90b2NvbCBlcnJvcjogc3BlY2lmeSBlaXRoZXIgZXhhY3RJZGVudGlmaWVyIG9yIHByb3BlcnR5TWF0Y2gsIGJ1dCBub3QgYm90aCAoZ290ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9KWApO1xuICAgIH1cbiAgICBpZiAoYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQgJiYgYXJncy5kdW1teVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IGlmIGlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCBpcyBzZXQsIGEgZHVtbXlWYWx1ZSBtdXN0IGJlIHN1cHBsaWVkIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0pYCk7XG4gICAgfVxuICAgIGlmIChhcmdzLmR1bW15VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoYXJncy5kdW1teVZhbHVlKSB8fCAhYXJncy5kdW1teVZhbHVlLmV2ZXJ5KGlzT2JqZWN0KSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IGR1bW15VmFsdWUgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzLmR1bW15VmFsdWUpfSlgKTtcbiAgICB9XG5cbiAgICAvLyBEbyB0aGUgbG9va3VwXG4gICAgY29uc3QgY2xvdWRDb250cm9sID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsodGhpcy5hd3MsIGFyZ3MpKS5jbG91ZENvbnRyb2woKTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzb3VyY2VzOiBGb3VuZFJlc291cmNlW107XG4gICAgICBpZiAoYXJncy5leGFjdElkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gdXNlIGdldFJlc291cmNlIHRvIGdldCB0aGUgZXhhY3QgaW5kZW50aWZpZXJcbiAgICAgICAgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZShjbG91ZENvbnRyb2wsIGFyZ3MudHlwZU5hbWUsIGFyZ3MuZXhhY3RJZGVudGlmaWVyKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncy5wcm9wZXJ0eU1hdGNoKSB7XG4gICAgICAgIC8vIHVzZSBsaXN0UmVzb3VyY2VcbiAgICAgICAgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5saXN0UmVzb3VyY2VzKGNsb3VkQ29udHJvbCwgYXJncy50eXBlTmFtZSwgYXJncy5wcm9wZXJ0eU1hdGNoLCBhcmdzLmV4cGVjdGVkTWF0Y2hDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYFByb3ZpZGVyIHByb3RvY29sIGVycm9yOiBuZWl0aGVyIGV4YWN0SWRlbnRpZmllciBub3IgcHJvcGVydHlNYXRjaCBpcyBzcGVjaWZpZWQgaW4gJHtKU09OLnN0cmluZ2lmeShhcmdzKX0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvdXJjZXMubWFwKChyKSA9PiBnZXRSZXN1bHRPYmooci5wcm9wZXJ0aWVzLCByLmlkZW50aWZpZXIsIGFyZ3MucHJvcGVydGllc1RvUmV0dXJuKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IgJiYgYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQpIHtcbiAgICAgICAgLy8gV2UndmUgYWxyZWFkeSB0eXBlLWNoZWNrZWQgZHVtbXlWYWx1ZS5cbiAgICAgICAgcmV0dXJuIGFyZ3MuZHVtbXlWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgZ2V0UmVzb3VyY2UgZnJvbSBDQyBBUEkgdG8gZ2V0IHRoZSByZXNvdXJjZS5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvZ2V0LXJlc291cmNlLmh0bWxcbiAgICpcbiAgICogV2lsbCBhbHdheXMgcmV0dXJuIGV4YWN0bHkgb25lIHJlc291cmNlLCBvciBmYWlsLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNvdXJjZShcbiAgICBjYzogSUNsb3VkQ29udHJvbENsaWVudCxcbiAgICB0eXBlTmFtZTogc3RyaW5nLFxuICAgIGV4YWN0SWRlbnRpZmllcjogc3RyaW5nLFxuICApOiBQcm9taXNlPEZvdW5kUmVzb3VyY2VbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5nZXRSZXNvdXJjZSh7XG4gICAgICAgIFR5cGVOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgSWRlbnRpZmllcjogZXhhY3RJZGVudGlmaWVyLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3VsdC5SZXNvdXJjZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcignVW5leHBlY3RlZCBDbG91ZENvbnRyb2wgQVBJIGJlaGF2aW9yOiByZXR1cm5lZCBlbXB0eSByZXNwb25zZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2ZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkocmVzdWx0LlJlc291cmNlRGVzY3JpcHRpb24pXTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfHwgKGVyciBhcyBhbnkpLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IoYE5vIHJlc291cmNlIG9mIHR5cGUgJHt0eXBlTmFtZX0gd2l0aCBpZGVudGlmaWVyOiAke2V4YWN0SWRlbnRpZmllcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIENvbnRleHRQcm92aWRlckVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEVuY291bnRlcmVkIENDIEFQSSBlcnJvciB3aGlsZSBnZXR0aW5nICR7dHlwZU5hbWV9IHJlc291cmNlICR7ZXhhY3RJZGVudGlmaWVyfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbGlzdFJlc291cmNlcyBmcm9tIENDIEFQSSB0byBnZXQgdGhlIHJlc291cmNlcyBhbmQgYXBwbHkgYXJncy5wcm9wZXJ0eU1hdGNoIHRvIGZpbmQgdGhlIHJlc291cmNlcy5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvbGlzdC1yZXNvdXJjZXMuaHRtbFxuICAgKlxuICAgKiBXaWxsIHJldHVybiAwIG9yIG1vcmUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBEb2VzIG5vdCBjdXJyZW50bHkgcGFnaW5hdGUgdGhyb3VnaCBtb3JlIHRoYW4gb25lIHJlc3VsdCBwYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsaXN0UmVzb3VyY2VzKFxuICAgIGNjOiBJQ2xvdWRDb250cm9sQ2xpZW50LFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHlNYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZXhwZWN0ZWRNYXRjaENvdW50PzogQ2NBcGlDb250ZXh0UXVlcnlbJ2V4cGVjdGVkTWF0Y2hDb3VudCddLFxuICApOiBQcm9taXNlPEZvdW5kUmVzb3VyY2VbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5saXN0UmVzb3VyY2VzKHtcbiAgICAgICAgVHlwZU5hbWU6IHR5cGVOYW1lLFxuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvdW5kID0gKHJlc3VsdC5SZXNvdXJjZURlc2NyaXB0aW9ucyA/PyBbXSlcbiAgICAgICAgLm1hcChmb3VuZFJlc291cmNlRnJvbUNjQXBpKVxuICAgICAgICAuZmlsdGVyKChyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5TWF0Y2gpLmV2ZXJ5KChbcHJvcFBhdGgsIGV4cGVjdGVkXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsID0gZmluZEpzb25WYWx1ZShyLnByb3BlcnRpZXMsIHByb3BQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hdGNoZXNGaWx0ZXIoYWN0dWFsLCBleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoKGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2F0LWxlYXN0LW9uZScgfHwgZXhwZWN0ZWRNYXRjaENvdW50ID09PSAnZXhhY3RseS1vbmUnKSAmJiBmb3VuZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFplcm9SZXNvdXJjZXNGb3VuZEVycm9yKGBDb3VsZCBub3QgZmluZCBhbnkgcmVzb3VyY2VzIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9YCk7XG4gICAgICB9XG4gICAgICBpZiAoKGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2F0LW1vc3Qtb25lJyB8fCBleHBlY3RlZE1hdGNoQ291bnQgPT09ICdleGFjdGx5LW9uZScpICYmIGZvdW5kLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBGb3VuZCAke2ZvdW5kLmxlbmd0aH0gcmVzb3VyY2VzIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9OyBwbGVhc2UgbmFycm93IHRoZSBzZWFyY2ggY3JpdGVyaWFgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDb250ZXh0UHJvdmlkZXJFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBaZXJvUmVzb3VyY2VzRm91bmRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBFbmNvdW50ZXJlZCBDQyBBUEkgZXJyb3Igd2hpbGUgbGlzdGluZyAke3R5cGVOYW1lfSByZXNvdXJjZXMgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eU1hdGNoKX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIENDIEFQSSByZXNwb25zZSBvYmplY3QgaW50byBhIG5pY2VyIG9iamVjdCAocGFyc2UgdGhlIEpTT04pXG4gKi9cbmZ1bmN0aW9uIGZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkoZGVzYzogUmVzb3VyY2VEZXNjcmlwdGlvbik6IEZvdW5kUmVzb3VyY2Uge1xuICByZXR1cm4ge1xuICAgIGlkZW50aWZpZXI6IGRlc2MuSWRlbnRpZmllciA/PyAnKk1JU1NJTkcqJyxcbiAgICBwcm9wZXJ0aWVzOiBKU09OLnBhcnNlKGRlc2MuUHJvcGVydGllcyA/PyAne30nKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiBmaWx0ZXJcbiAqXG4gKiBGb3Igbm93IHdlIGp1c3QgY2hlY2sgZm9yIHN0cmljdCBlcXVhbGl0eSwgYnV0IHdlIGNhbiBpbXBsZW1lbnQgcGF0dGVybiBtYXRjaGluZyBhbmQgZnV6enkgbWF0Y2hpbmcgaGVyZSBsYXRlclxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU1hdGNoZXNGaWx0ZXIoYWN0dWFsOiB1bmtub3duLCBleHBlY3RlZDogdW5rbm93bikge1xuICByZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoeDogdW5rbm93bik6IHggaXMge1trZXk6IHN0cmluZ106IHVua25vd259IHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHgpO1xufVxuXG4vKipcbiAqIEEgcGFyc2VkIHZlcnNpb24gb2YgdGhlIHJldHVybiB2YWx1ZSBmcm9tIENDQVBJXG4gKi9cbmludGVyZmFjZSBGb3VuZFJlc291cmNlIHtcbiAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBBIHNwZWNpZmljIGxvb2t1cCBmYWlsdXJlIGluZGljYXRpbmcgMCByZXNvdXJjZXMgZm91bmQgdGhhdCBjYW4gYmUgcmVjb3ZlcmVkXG4gKi9cbmNsYXNzIFplcm9SZXNvdXJjZXNGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuIl19
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EndpointServiceAvailabilityZonesContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { IContextProviderMessages } from '.';
|
|
2
3
|
import { type SdkProvider } from '../api/aws-auth/sdk-provider';
|
|
3
4
|
import type { ContextProviderPlugin } from '../api/plugin';
|
|
4
5
|
/**
|
|
@@ -6,6 +7,7 @@ import type { ContextProviderPlugin } from '../api/plugin';
|
|
|
6
7
|
*/
|
|
7
8
|
export declare class EndpointServiceAZContextProviderPlugin implements ContextProviderPlugin {
|
|
8
9
|
private readonly aws;
|
|
9
|
-
|
|
10
|
+
private readonly io;
|
|
11
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
10
12
|
getValue(args: EndpointServiceAvailabilityZonesContextQuery): Promise<string[] | undefined>;
|
|
11
13
|
}
|
|
@@ -2,32 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EndpointServiceAZContextProviderPlugin = void 0;
|
|
4
4
|
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
5
|
-
const logging_1 = require("../logging");
|
|
6
5
|
/**
|
|
7
6
|
* Plugin to retrieve the Availability Zones for an endpoint service
|
|
8
7
|
*/
|
|
9
8
|
class EndpointServiceAZContextProviderPlugin {
|
|
10
|
-
constructor(aws) {
|
|
9
|
+
constructor(aws, io) {
|
|
11
10
|
this.aws = aws;
|
|
11
|
+
this.io = io;
|
|
12
12
|
}
|
|
13
13
|
async getValue(args) {
|
|
14
14
|
const region = args.region;
|
|
15
15
|
const account = args.account;
|
|
16
16
|
const serviceName = args.serviceName;
|
|
17
|
-
|
|
17
|
+
await this.io.debug(`Reading AZs for ${account}:${region}:${serviceName}`);
|
|
18
18
|
const ec2 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).ec2();
|
|
19
19
|
const response = await ec2.describeVpcEndpointServices({
|
|
20
20
|
ServiceNames: [serviceName],
|
|
21
21
|
});
|
|
22
22
|
// expect a service in the response
|
|
23
23
|
if (!response.ServiceDetails || response.ServiceDetails.length === 0) {
|
|
24
|
-
|
|
24
|
+
await this.io.debug(`Could not retrieve service details for ${account}:${region}:${serviceName}`);
|
|
25
25
|
return [];
|
|
26
26
|
}
|
|
27
27
|
const azs = response.ServiceDetails[0].AvailabilityZones;
|
|
28
|
-
|
|
28
|
+
await this.io.debug(`Endpoint service ${account}:${region}:${serviceName} is available in availability zones ${azs}`);
|
|
29
29
|
return azs;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
exports.EndpointServiceAZContextProviderPlugin = EndpointServiceAZContextProviderPlugin;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2VydmljZS1hdmFpbGFiaWxpdHktem9uZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmRwb2ludC1zZXJ2aWNlLWF2YWlsYWJpbGl0eS16b25lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwrREFBd0Y7QUFHeEY7O0dBRUc7QUFDSCxNQUFhLHNDQUFzQztJQUNqRCxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQWtEO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLE9BQU8sSUFBSSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxxQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsMkJBQTJCLENBQUM7WUFDckQsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxPQUFPLElBQUksTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDbEcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixPQUFPLElBQUksTUFBTSxJQUFJLFdBQVcsdUNBQXVDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEgsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUF2QkQsd0ZBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludFNlcnZpY2VBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHsgdHlwZSBTZGtQcm92aWRlciwgaW5pdENvbnRleHRQcm92aWRlclNkayB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcblxuLyoqXG4gKiBQbHVnaW4gdG8gcmV0cmlldmUgdGhlIEF2YWlsYWJpbGl0eSBab25lcyBmb3IgYW4gZW5kcG9pbnQgc2VydmljZVxuICovXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRTZXJ2aWNlQVpDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIsIHByaXZhdGUgcmVhZG9ubHkgaW86IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IEVuZHBvaW50U2VydmljZUF2YWlsYWJpbGl0eVpvbmVzQ29udGV4dFF1ZXJ5KSB7XG4gICAgY29uc3QgcmVnaW9uID0gYXJncy5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IGFyZ3MuYWNjb3VudDtcbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IGFyZ3Muc2VydmljZU5hbWU7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgUmVhZGluZyBBWnMgZm9yICR7YWNjb3VudH06JHtyZWdpb259OiR7c2VydmljZU5hbWV9YCk7XG4gICAgY29uc3QgZWMyID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsodGhpcy5hd3MsIGFyZ3MpKS5lYzIoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVjMi5kZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXMoe1xuICAgICAgU2VydmljZU5hbWVzOiBbc2VydmljZU5hbWVdLFxuICAgIH0pO1xuXG4gICAgLy8gZXhwZWN0IGEgc2VydmljZSBpbiB0aGUgcmVzcG9uc2VcbiAgICBpZiAoIXJlc3BvbnNlLlNlcnZpY2VEZXRhaWxzIHx8IHJlc3BvbnNlLlNlcnZpY2VEZXRhaWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgQ291bGQgbm90IHJldHJpZXZlIHNlcnZpY2UgZGV0YWlscyBmb3IgJHthY2NvdW50fToke3JlZ2lvbn06JHtzZXJ2aWNlTmFtZX1gKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgYXpzID0gcmVzcG9uc2UuU2VydmljZURldGFpbHNbMF0uQXZhaWxhYmlsaXR5Wm9uZXM7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgRW5kcG9pbnQgc2VydmljZSAke2FjY291bnR9OiR7cmVnaW9ufToke3NlcnZpY2VOYW1lfSBpcyBhdmFpbGFibGUgaW4gYXZhaWxhYmlsaXR5IHpvbmVzICR7YXpzfWApO1xuICAgIHJldHVybiBhenM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { HostedZoneContextQuery } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { IContextProviderMessages } from '.';
|
|
2
3
|
import { type SdkProvider } from '../api/aws-auth/sdk-provider';
|
|
3
4
|
import type { ContextProviderPlugin } from '../api/plugin';
|
|
4
5
|
export declare class HostedZoneContextProviderPlugin implements ContextProviderPlugin {
|
|
5
6
|
private readonly aws;
|
|
6
|
-
|
|
7
|
+
private readonly io;
|
|
8
|
+
constructor(aws: SdkProvider, io: IContextProviderMessages);
|
|
7
9
|
getValue(args: HostedZoneContextQuery): Promise<object>;
|
|
8
10
|
private filterZones;
|
|
9
11
|
private isHostedZoneQuery;
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HostedZoneContextProviderPlugin = void 0;
|
|
4
|
+
const api_1 = require("../../../@aws-cdk/tmp-toolkit-helpers/src/api");
|
|
4
5
|
const sdk_provider_1 = require("../api/aws-auth/sdk-provider");
|
|
5
|
-
const logging_1 = require("../logging");
|
|
6
|
-
const error_1 = require("../toolkit/error");
|
|
7
6
|
class HostedZoneContextProviderPlugin {
|
|
8
|
-
constructor(aws) {
|
|
7
|
+
constructor(aws, io) {
|
|
9
8
|
this.aws = aws;
|
|
9
|
+
this.io = io;
|
|
10
10
|
}
|
|
11
11
|
async getValue(args) {
|
|
12
12
|
const account = args.account;
|
|
13
13
|
const region = args.region;
|
|
14
14
|
if (!this.isHostedZoneQuery(args)) {
|
|
15
|
-
throw new
|
|
15
|
+
throw new api_1.ContextProviderError(`HostedZoneProvider requires domainName property to be set in ${args}`);
|
|
16
16
|
}
|
|
17
17
|
const domainName = args.domainName;
|
|
18
|
-
|
|
18
|
+
await this.io.debug(`Reading hosted zone ${account}:${region}:${domainName}`);
|
|
19
19
|
const r53 = (await (0, sdk_provider_1.initContextProviderSdk)(this.aws, args)).route53();
|
|
20
20
|
const response = await r53.listHostedZonesByName({ DNSName: domainName });
|
|
21
21
|
if (!response.HostedZones) {
|
|
22
|
-
throw new
|
|
22
|
+
throw new api_1.ContextProviderError(`Hosted Zone not found in account ${account}, region ${region}: ${domainName}`);
|
|
23
23
|
}
|
|
24
24
|
const candidateZones = await this.filterZones(r53, response.HostedZones, args);
|
|
25
25
|
if (candidateZones.length !== 1) {
|
|
26
26
|
const filteProps = `dns:${domainName}, privateZone:${args.privateZone}, vpcId:${args.vpcId}`;
|
|
27
|
-
throw new
|
|
27
|
+
throw new api_1.ContextProviderError(`Found zones: ${JSON.stringify(candidateZones)} for ${filteProps}, but wanted exactly 1 zone`);
|
|
28
28
|
}
|
|
29
29
|
return {
|
|
30
30
|
Id: candidateZones[0].Id,
|
|
@@ -34,9 +34,9 @@ class HostedZoneContextProviderPlugin {
|
|
|
34
34
|
async filterZones(r53, zones, props) {
|
|
35
35
|
let candidates = [];
|
|
36
36
|
const domainName = props.domainName.endsWith('.') ? props.domainName : `${props.domainName}.`;
|
|
37
|
-
|
|
37
|
+
await this.io.debug(`Found the following zones ${JSON.stringify(zones)}`);
|
|
38
38
|
candidates = zones.filter((zone) => zone.Name === domainName);
|
|
39
|
-
|
|
39
|
+
await this.io.debug(`Found the following matched name zones ${JSON.stringify(candidates)}`);
|
|
40
40
|
if (props.privateZone) {
|
|
41
41
|
candidates = candidates.filter((zone) => zone.Config && zone.Config.PrivateZone);
|
|
42
42
|
}
|
|
@@ -48,7 +48,7 @@ class HostedZoneContextProviderPlugin {
|
|
|
48
48
|
for (const zone of candidates) {
|
|
49
49
|
const data = await r53.getHostedZone({ Id: zone.Id });
|
|
50
50
|
if (!data.VPCs) {
|
|
51
|
-
|
|
51
|
+
await this.io.debug(`Expected VPC for private zone but no VPC found ${zone.Id}`);
|
|
52
52
|
continue;
|
|
53
53
|
}
|
|
54
54
|
if (data.VPCs.map((vpc) => vpc.VPCId).includes(props.vpcId)) {
|
|
@@ -64,4 +64,4 @@ class HostedZoneContextProviderPlugin {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
exports.HostedZoneContextProviderPlugin = HostedZoneContextProviderPlugin;
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkLXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9zdGVkLXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHVFQUFxRjtBQUVyRiwrREFBd0Y7QUFHeEYsTUFBYSwrQkFBK0I7SUFDMUMsWUFBNkIsR0FBZ0IsRUFBbUIsRUFBNEI7UUFBL0QsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUFtQixPQUFFLEdBQUYsRUFBRSxDQUEwQjtJQUM1RixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUE0QjtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSwwQkFBb0IsQ0FBQyxnRUFBZ0UsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLHVCQUF1QixPQUFPLElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDOUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUEscUNBQXNCLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksMEJBQW9CLENBQUMsb0NBQW9DLE9BQU8sWUFBWSxNQUFNLEtBQUssVUFBVSxF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Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFtQztRQUMzRCxPQUFRLEtBQWdDLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztJQUNwRSxDQUFDO0NBQ0Y7QUFoRUQsMEVBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgSG9zdGVkWm9uZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yb3V0ZS01Myc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9AYXdzLWNkay90bXAtdG9vbGtpdC1oZWxwZXJzL3NyYy9hcGknO1xuaW1wb3J0IHR5cGUgeyBJUm91dGU1M0NsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyB0eXBlIFNka1Byb3ZpZGVyLCBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuXG5leHBvcnQgY2xhc3MgSG9zdGVkWm9uZUNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlciwgcHJpdmF0ZSByZWFkb25seSBpbzogSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoYXJnczogSG9zdGVkWm9uZUNvbnRleHRRdWVyeSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgYWNjb3VudCA9IGFyZ3MuYWNjb3VudDtcbiAgICBjb25zdCByZWdpb24gPSBhcmdzLnJlZ2lvbjtcbiAgICBpZiAoIXRoaXMuaXNIb3N0ZWRab25lUXVlcnkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkWm9uZVByb3ZpZGVyIHJlcXVpcmVzIGRvbWFpbk5hbWUgcHJvcGVydHkgdG8gYmUgc2V0IGluICR7YXJnc31gKTtcbiAgICB9XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IGFyZ3MuZG9tYWluTmFtZTtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBSZWFkaW5nIGhvc3RlZCB6b25lICR7YWNjb3VudH06JHtyZWdpb259OiR7ZG9tYWluTmFtZX1gKTtcbiAgICBjb25zdCByNTMgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLnJvdXRlNTMoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHI1My5saXN0SG9zdGVkWm9uZXNCeU5hbWUoeyBETlNOYW1lOiBkb21haW5OYW1lIH0pO1xuICAgIGlmICghcmVzcG9uc2UuSG9zdGVkWm9uZXMpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkIFpvbmUgbm90IGZvdW5kIGluIGFjY291bnQgJHthY2NvdW50fSwgcmVnaW9uICR7cmVnaW9ufTogJHtkb21haW5OYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBjYW5kaWRhdGVab25lcyA9IGF3YWl0IHRoaXMuZmlsdGVyWm9uZXMocjUzLCByZXNwb25zZS5Ib3N0ZWRab25lcywgYXJncyk7XG4gICAgaWYgKGNhbmRpZGF0ZVpvbmVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc3QgZmlsdGVQcm9wcyA9IGBkbnM6JHtkb21haW5OYW1lfSwgcHJpdmF0ZVpvbmU6JHthcmdzLnByaXZhdGVab25lfSwgdnBjSWQ6JHthcmdzLnZwY0lkfWA7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEZvdW5kIHpvbmVzOiAke0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZVpvbmVzKX0gZm9yICR7ZmlsdGVQcm9wc30sIGJ1dCB3YW50ZWQgZXhhY3RseSAxIHpvbmVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSWQ6IGNhbmRpZGF0ZVpvbmVzWzBdLklkLFxuICAgICAgTmFtZTogY2FuZGlkYXRlWm9uZXNbMF0uTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJab25lcyhcbiAgICByNTM6IElSb3V0ZTUzQ2xpZW50LFxuICAgIHpvbmVzOiBIb3N0ZWRab25lW10sXG4gICAgcHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnksXG4gICk6IFByb21pc2U8SG9zdGVkWm9uZVtdPiB7XG4gICAgbGV0IGNhbmRpZGF0ZXM6IEhvc3RlZFpvbmVbXSA9IFtdO1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBwcm9wcy5kb21haW5OYW1lLmVuZHNXaXRoKCcuJykgPyBwcm9wcy5kb21haW5OYW1lIDogYCR7cHJvcHMuZG9tYWluTmFtZX0uYDtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBGb3VuZCB0aGUgZm9sbG93aW5nIHpvbmVzICR7SlNPTi5zdHJpbmdpZnkoem9uZXMpfWApO1xuICAgIGNhbmRpZGF0ZXMgPSB6b25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUuTmFtZSA9PT0gZG9tYWluTmFtZSk7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgRm91bmQgdGhlIGZvbGxvd2luZyBtYXRjaGVkIG5hbWUgem9uZXMgJHtKU09OLnN0cmluZ2lmeShjYW5kaWRhdGVzKX1gKTtcbiAgICBpZiAocHJvcHMucHJpdmF0ZVpvbmUpIHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5Db25maWcgJiYgem9uZS5Db25maWcuUHJpdmF0ZVpvbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5maWx0ZXIoKHpvbmUpID0+ICF6b25lLkNvbmZpZyB8fCAhem9uZS5Db25maWcuUHJpdmF0ZVpvbmUpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjSWQpIHtcbiAgICAgIGNvbnN0IHZwY1pvbmVzOiBIb3N0ZWRab25lW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgem9uZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByNTMuZ2V0SG9zdGVkWm9uZSh7IElkOiB6b25lLklkIH0pO1xuICAgICAgICBpZiAoIWRhdGEuVlBDcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYEV4cGVjdGVkIFZQQyBmb3IgcHJpdmF0ZSB6b25lIGJ1dCBubyBWUEMgZm91bmQgJHt6b25lLklkfWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLlZQQ3MubWFwKCh2cGMpID0+IHZwYy5WUENJZCkuaW5jbHVkZXMocHJvcHMudnBjSWQpKSB7XG4gICAgICAgICAgdnBjWm9uZXMucHVzaCh6b25lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZwY1pvbmVzO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlcztcbiAgfVxuXG4gIHByaXZhdGUgaXNIb3N0ZWRab25lUXVlcnkocHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfCBhbnkpOiBwcm9wcyBpcyBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IHtcbiAgICByZXR1cm4gKHByb3BzIGFzIEhvc3RlZFpvbmVDb250ZXh0UXVlcnkpLmRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|