@btc-embedded/cdk-extensions 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +201 -11
- package/API.md +217 -6
- package/CHANGELOG.md +19 -0
- package/lib/constructs/SecureRestApi.d.ts +26 -0
- package/lib/constructs/SecureRestApi.js +57 -0
- package/lib/constructs/index.d.ts +1 -0
- package/lib/constructs/index.js +18 -0
- package/lib/extensions/ApiGatewayExtension.js +1 -1
- package/lib/extensions/ApplicationLoadBalancerExtension.js +1 -1
- package/lib/extensions/CloudMapExtension.js +1 -1
- package/lib/extensions/DocumentDbAccessExtension.js +1 -1
- package/lib/extensions/DomainEventMessagingExtension.js +1 -1
- package/lib/extensions/ExecExtension.d.ts +9 -0
- package/lib/extensions/ExecExtension.js +49 -0
- package/lib/extensions/ExtraContainerExtension.js +1 -1
- package/lib/extensions/LogExtension.js +1 -1
- package/lib/extensions/PostgresDbAccessExtension.js +1 -1
- package/lib/extensions/SharedVolumeExtension.js +1 -1
- package/lib/extensions/TcpKeepAliveExtension.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/platform/ApiGateway.js +1 -1
- package/lib/platform/ApplicationLoadBalancer.js +1 -1
- package/lib/platform/DefaultUserPoolClients.js +1 -1
- package/lib/platform/DocumentDB.js +1 -1
- package/lib/platform/PrivateDnsNamespace.js +1 -1
- package/lib/platform/Vpc.d.ts +13 -2
- package/lib/platform/Vpc.js +30 -3
- package/package.json +2 -1
- package/lib/extensions/ImportValue.d.ts +0 -2
- package/lib/extensions/ImportValue.js +0 -12
- package/lib/extensions/S3BucketAccessExtension.d.ts +0 -13
- package/lib/extensions/S3BucketAccessExtension.js +0 -32
- package/lib/platform/AuthenticationStack.d.ts +0 -19
- package/lib/platform/AuthenticationStack.js +0 -92
- package/lib/platform/CloudMap.d.ts +0 -16
- package/lib/platform/CloudMap.js +0 -48
- package/lib/platform/MessageQueue.d.ts +0 -23
- package/lib/platform/MessageQueue.js +0 -166
package/lib/platform/Vpc.js
CHANGED
|
@@ -5,9 +5,19 @@ exports.Vpc = void 0;
|
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
7
7
|
const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
|
|
8
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
8
9
|
const constructs_1 = require("constructs");
|
|
9
10
|
const utils_1 = require("../utils");
|
|
10
11
|
class Vpc extends constructs_1.Construct {
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @param scope The parent construct this is part of
|
|
15
|
+
* @param id Id of this construct for Cloudformation
|
|
16
|
+
* @param props Properties allowing to set a predefined VPCName, IPAdressBlog,
|
|
17
|
+
* maxNumber of AZs and decision wether to create a KMSKey for usage
|
|
18
|
+
* with the Exec extension. Defaults to an empty object creating a
|
|
19
|
+
* dedicated VPC, with max 2 AZS and NO Key for Exec
|
|
20
|
+
*/
|
|
11
21
|
constructor(scope, id, props) {
|
|
12
22
|
super(scope, id);
|
|
13
23
|
if (props.definedVpcName) {
|
|
@@ -24,7 +34,9 @@ class Vpc extends constructs_1.Construct {
|
|
|
24
34
|
else {
|
|
25
35
|
throw Error("Either definedVpcName or vpcCidr have to be set.");
|
|
26
36
|
}
|
|
27
|
-
|
|
37
|
+
const shouldCreateKey = props.createKmsExecCommandKey ?? false;
|
|
38
|
+
const clusterProps = this.createClusterProps(shouldCreateKey);
|
|
39
|
+
this.cluster = new aws_ecs_1.Cluster(this, "Cluster", clusterProps);
|
|
28
40
|
const exportValue = (0, utils_1.createExporter)(this, "cluster");
|
|
29
41
|
exportValue({
|
|
30
42
|
name: "Cluster VPC ID",
|
|
@@ -37,8 +49,23 @@ class Vpc extends constructs_1.Construct {
|
|
|
37
49
|
value: this.cluster.clusterName,
|
|
38
50
|
});
|
|
39
51
|
}
|
|
52
|
+
createClusterProps(shouldCreateKey) {
|
|
53
|
+
const baseProps = {
|
|
54
|
+
vpc: this.vpcInstance,
|
|
55
|
+
};
|
|
56
|
+
if (shouldCreateKey) {
|
|
57
|
+
const kmsEncryptionKey = new aws_kms_1.Key(this, "ClusterExecKey", {
|
|
58
|
+
enableKeyRotation: true,
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
...baseProps,
|
|
62
|
+
executeCommandConfiguration: { kmsKey: kmsEncryptionKey },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return baseProps;
|
|
66
|
+
}
|
|
40
67
|
}
|
|
41
68
|
exports.Vpc = Vpc;
|
|
42
69
|
_a = JSII_RTTI_SYMBOL_1;
|
|
43
|
-
Vpc[_a] = { fqn: "@btc-embedded/cdk-extensions.Vpc", version: "0.5.
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
Vpc[_a] = { fqn: "@btc-embedded/cdk-extensions.Vpc", version: "0.5.4" };
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsYXRmb3JtL1ZwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUF3RTtBQUN4RSxpREFBNEQ7QUFDNUQsaURBQTBDO0FBQzFDLDJDQUF1QztBQUN2QyxvQ0FBMEM7QUFTMUMsTUFBYSxHQUFJLFNBQVEsc0JBQVM7SUFJaEM7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGFBQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDaEQsT0FBTyxFQUFFLEtBQUssQ0FBQyxjQUFjO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksYUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQ3pDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTzthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxLQUFLLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQWlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTFELE1BQU0sV0FBVyxHQUFHLElBQUEsc0JBQWMsRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFcEQsV0FBVyxDQUFDO1lBQ1YsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixHQUFHLEVBQUUsUUFBUTtZQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDO1lBQ1YsSUFBSSxFQUFFLGNBQWM7WUFDcEIsR0FBRyxFQUFFLE1BQU07WUFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxlQUF3QjtRQUNqRCxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDdEIsQ0FBQztRQUVGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3ZELGlCQUFpQixFQUFFLElBQUk7YUFDeEIsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxHQUFHLFNBQVM7Z0JBQ1osMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUU7YUFDMUQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOztBQWxFSCxrQkFtRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWcGMgYXMgQVdTVnBjLCBJSXBBZGRyZXNzZXMsIElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ2x1c3RlciwgQ2x1c3RlclByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7IEtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgY3JlYXRlRXhwb3J0ZXIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWcGNQcm9wcyB7XG4gIHJlYWRvbmx5IGRlZmluZWRWcGNOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2cGNDaWRyPzogSUlwQWRkcmVzc2VzO1xuICByZWFkb25seSBtYXhBenM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNyZWF0ZUttc0V4ZWNDb21tYW5kS2V5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFZwYyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyB2cGNJbnN0YW5jZTogSVZwYztcbiAgcHVibGljIGNsdXN0ZXI6IENsdXN0ZXI7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdCB0aGlzIGlzIHBhcnQgb2ZcbiAgICogQHBhcmFtIGlkIElkIG9mIHRoaXMgY29uc3RydWN0IGZvciBDbG91ZGZvcm1hdGlvblxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBhbGxvd2luZyB0byBzZXQgYSBwcmVkZWZpbmVkIFZQQ05hbWUsIElQQWRyZXNzQmxvZyxcbiAgICogICAgICAgICAgICAgIG1heE51bWJlciBvZiBBWnMgYW5kIGRlY2lzaW9uIHdldGhlciB0byBjcmVhdGUgYSBLTVNLZXkgZm9yIHVzYWdlXG4gICAqICAgICAgICAgICAgICB3aXRoIHRoZSBFeGVjIGV4dGVuc2lvbi4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgb2JqZWN0IGNyZWF0aW5nIGFcbiAgICogICAgICAgICAgICAgIGRlZGljYXRlZCBWUEMsIHdpdGggbWF4IDIgQVpTIGFuZCBOTyBLZXkgZm9yIEV4ZWNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZGVmaW5lZFZwY05hbWUpIHtcbiAgICAgIHRoaXMudnBjSW5zdGFuY2UgPSBBV1NWcGMuZnJvbUxvb2t1cCh0aGlzLCBcIlZwY1wiLCB7XG4gICAgICAgIHZwY05hbWU6IHByb3BzLmRlZmluZWRWcGNOYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy52cGNDaWRyKSB7XG4gICAgICB0aGlzLnZwY0luc3RhbmNlID0gbmV3IEFXU1ZwYyh0aGlzLCBcIlZwY1wiLCB7XG4gICAgICAgIG1heEF6czogcHJvcHMubWF4QXpzID8/IDIsXG4gICAgICAgIGlwQWRkcmVzc2VzOiBwcm9wcy52cGNDaWRyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwiRWl0aGVyIGRlZmluZWRWcGNOYW1lIG9yIHZwY0NpZHIgaGF2ZSB0byBiZSBzZXQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZENyZWF0ZUtleSA9IHByb3BzLmNyZWF0ZUttc0V4ZWNDb21tYW5kS2V5ID8/IGZhbHNlO1xuICAgIGNvbnN0IGNsdXN0ZXJQcm9wczogQ2x1c3RlclByb3BzID0gdGhpcy5jcmVhdGVDbHVzdGVyUHJvcHMoc2hvdWxkQ3JlYXRlS2V5KTtcblxuICAgIHRoaXMuY2x1c3RlciA9IG5ldyBDbHVzdGVyKHRoaXMsIFwiQ2x1c3RlclwiLCBjbHVzdGVyUHJvcHMpO1xuXG4gICAgY29uc3QgZXhwb3J0VmFsdWUgPSBjcmVhdGVFeHBvcnRlcih0aGlzLCBcImNsdXN0ZXJcIik7XG5cbiAgICBleHBvcnRWYWx1ZSh7XG4gICAgICBuYW1lOiBcIkNsdXN0ZXIgVlBDIElEXCIsXG4gICAgICBrZXk6IFwidnBjLWlkXCIsXG4gICAgICB2YWx1ZTogdGhpcy52cGNJbnN0YW5jZS52cGNJZCxcbiAgICB9KTtcblxuICAgIGV4cG9ydFZhbHVlKHtcbiAgICAgIG5hbWU6IFwiQ2x1c3RlciBOYW1lXCIsXG4gICAgICBrZXk6IFwibmFtZVwiLFxuICAgICAgdmFsdWU6IHRoaXMuY2x1c3Rlci5jbHVzdGVyTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1c3RlclByb3BzKHNob3VsZENyZWF0ZUtleTogYm9vbGVhbik6IENsdXN0ZXJQcm9wcyB7XG4gICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgdnBjOiB0aGlzLnZwY0luc3RhbmNlLFxuICAgIH07XG5cbiAgICBpZiAoc2hvdWxkQ3JlYXRlS2V5KSB7XG4gICAgICBjb25zdCBrbXNFbmNyeXB0aW9uS2V5ID0gbmV3IEtleSh0aGlzLCBcIkNsdXN0ZXJFeGVjS2V5XCIsIHtcbiAgICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZVByb3BzLFxuICAgICAgICBleGVjdXRlQ29tbWFuZENvbmZpZ3VyYXRpb246IHsga21zS2V5OiBrbXNFbmNyeXB0aW9uS2V5IH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlUHJvcHM7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
44
44
|
"@typescript-eslint/parser": "^8",
|
|
45
45
|
"aws-cdk-lib": "2.172.0",
|
|
46
|
+
"cdk-nag": "^2.35.14",
|
|
46
47
|
"commit-and-tag-version": "^12",
|
|
47
48
|
"constructs": "10.0.5",
|
|
48
49
|
"eslint": "^9",
|
|
@@ -79,7 +80,7 @@
|
|
|
79
80
|
],
|
|
80
81
|
"main": "lib/index.js",
|
|
81
82
|
"license": "Apache-2.0",
|
|
82
|
-
"version": "0.5.
|
|
83
|
+
"version": "0.5.4",
|
|
83
84
|
"jest": {
|
|
84
85
|
"coverageProvider": "v8",
|
|
85
86
|
"testMatch": [
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.importValue = importValue;
|
|
4
|
-
exports.createImporter = createImporter;
|
|
5
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
-
function importValue(prefix, name) {
|
|
7
|
-
return createImporter(prefix)(name);
|
|
8
|
-
}
|
|
9
|
-
function createImporter(...prefix) {
|
|
10
|
-
return (...parts) => aws_cdk_lib_1.Fn.importValue(`${[...prefix, ...parts].join(':')}`);
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0VmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXh0ZW5zaW9ucy9JbXBvcnRWYWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtDQUVDO0FBRUQsd0NBR0M7QUFURCw2Q0FBaUM7QUFFakMsU0FBZ0IsV0FBVyxDQUFDLE1BQWMsRUFBRSxJQUFZO0lBQ3RELE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBRyxNQUFnQjtJQUNoRCxPQUFPLENBQUMsR0FBRyxLQUFlLEVBQUUsRUFBRSxDQUM1QixnQkFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcblxuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydFZhbHVlKHByZWZpeDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNyZWF0ZUltcG9ydGVyKHByZWZpeCkobmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbXBvcnRlciguLi5wcmVmaXg6IHN0cmluZ1tdKSB7XG4gIHJldHVybiAoLi4ucGFydHM6IHN0cmluZ1tdKSA9PlxuICAgIEZuLmltcG9ydFZhbHVlKGAke1suLi5wcmVmaXgsIC4uLnBhcnRzXS5qb2luKCc6Jyl9YCk7XG59XG4iXX0=
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ServiceExtension } from '@aws-cdk-containers/ecs-service-extensions';
|
|
2
|
-
import { TaskDefinitionProps } from 'aws-cdk-lib/aws-ecs';
|
|
3
|
-
export interface ResourceAccessExtensionProps {
|
|
4
|
-
arn: string;
|
|
5
|
-
actions: Array<string>;
|
|
6
|
-
resources: Array<string>;
|
|
7
|
-
}
|
|
8
|
-
export declare class ResourceAccessExtension extends ServiceExtension {
|
|
9
|
-
readonly props: ResourceAccessExtensionProps;
|
|
10
|
-
readonly policyName: string;
|
|
11
|
-
constructor(name: string, props: ResourceAccessExtensionProps);
|
|
12
|
-
modifyTaskDefinitionProps(props: TaskDefinitionProps): TaskDefinitionProps;
|
|
13
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ResourceAccessExtension = void 0;
|
|
4
|
-
const ecs_service_extensions_1 = require("@aws-cdk-containers/ecs-service-extensions");
|
|
5
|
-
const iam = require("aws-cdk-lib/aws-iam");
|
|
6
|
-
class ResourceAccessExtension extends ecs_service_extensions_1.ServiceExtension {
|
|
7
|
-
constructor(name, props) {
|
|
8
|
-
super(`${name}-resource-access-extension`);
|
|
9
|
-
this.props = props;
|
|
10
|
-
this.policyName = name;
|
|
11
|
-
}
|
|
12
|
-
modifyTaskDefinitionProps(props) {
|
|
13
|
-
const role = props.taskRole ??
|
|
14
|
-
new iam.Role(this.scope, 'TaskRole', {
|
|
15
|
-
assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'),
|
|
16
|
-
});
|
|
17
|
-
role.attachInlinePolicy(new iam.Policy(this.scope, this.policyName, {
|
|
18
|
-
statements: [
|
|
19
|
-
new iam.PolicyStatement({
|
|
20
|
-
actions: this.props.actions,
|
|
21
|
-
resources: this.props.resources,
|
|
22
|
-
}),
|
|
23
|
-
],
|
|
24
|
-
}));
|
|
25
|
-
return {
|
|
26
|
-
...props,
|
|
27
|
-
taskRole: role,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.ResourceAccessExtension = ResourceAccessExtension;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUzNCdWNrZXRBY2Nlc3NFeHRlbnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXh0ZW5zaW9ucy9TM0J1Y2tldEFjY2Vzc0V4dGVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1RkFBOEU7QUFFOUUsMkNBQTJDO0FBUTNDLE1BQWEsdUJBQXdCLFNBQVEseUNBQWdCO0lBSTNELFlBQVksSUFBWSxFQUFFLEtBQW1DO1FBQzNELEtBQUssQ0FBQyxHQUFHLElBQUksNEJBQTRCLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBMEI7UUFDbEQsTUFBTSxJQUFJLEdBQ1IsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQzthQUMvRCxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUMsVUFBVSxFQUFFO2dCQUNWLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztvQkFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztvQkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztpQkFDaEMsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBakNELDBEQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZpY2VFeHRlbnNpb24gfSBmcm9tICdAYXdzLWNkay1jb250YWluZXJzL2Vjcy1zZXJ2aWNlLWV4dGVuc2lvbnMnO1xuaW1wb3J0IHsgVGFza0RlZmluaXRpb25Qcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQWNjZXNzRXh0ZW5zaW9uUHJvcHMge1xuICBhcm46IHN0cmluZztcbiAgYWN0aW9uczogQXJyYXk8c3RyaW5nPjtcbiAgcmVzb3VyY2VzOiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VBY2Nlc3NFeHRlbnNpb24gZXh0ZW5kcyBTZXJ2aWNlRXh0ZW5zaW9uIHtcbiAgcmVhZG9ubHkgcHJvcHM6IFJlc291cmNlQWNjZXNzRXh0ZW5zaW9uUHJvcHM7XG4gIHJlYWRvbmx5IHBvbGljeU5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHByb3BzOiBSZXNvdXJjZUFjY2Vzc0V4dGVuc2lvblByb3BzKSB7XG4gICAgc3VwZXIoYCR7bmFtZX0tcmVzb3VyY2UtYWNjZXNzLWV4dGVuc2lvbmApO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBvbGljeU5hbWUgPSBuYW1lO1xuICB9XG5cbiAgbW9kaWZ5VGFza0RlZmluaXRpb25Qcm9wcyhwcm9wczogVGFza0RlZmluaXRpb25Qcm9wcyk6IFRhc2tEZWZpbml0aW9uUHJvcHMge1xuICAgIGNvbnN0IHJvbGUgPVxuICAgICAgcHJvcHMudGFza1JvbGUgPz9cbiAgICAgIG5ldyBpYW0uUm9sZSh0aGlzLnNjb3BlLCAnVGFza1JvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlY3MtdGFza3MuYW1hem9uYXdzLmNvbScpLFxuICAgICAgfSk7XG5cbiAgICByb2xlLmF0dGFjaElubGluZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5KHRoaXMuc2NvcGUsIHRoaXMucG9saWN5TmFtZSwge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogdGhpcy5wcm9wcy5hY3Rpb25zLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnByb3BzLnJlc291cmNlcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB0YXNrUm9sZTogcm9sZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { NestedStack, NestedStackProps } from "aws-cdk-lib";
|
|
2
|
-
import { UserPool, UserPoolClient, UserPoolDomain } from "aws-cdk-lib/aws-cognito";
|
|
3
|
-
import { Construct } from "constructs";
|
|
4
|
-
export interface AuthenticationStackProps extends NestedStackProps {
|
|
5
|
-
readonly instanceName: string;
|
|
6
|
-
readonly cognitoUserPoolId: string;
|
|
7
|
-
readonly cognitoIssuerURL: string;
|
|
8
|
-
readonly cognitoDomainPrefix: string;
|
|
9
|
-
readonly supportedIdentityProviders: string[];
|
|
10
|
-
readonly defaultCallbackFqdn: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class AuthenticationStack extends NestedStack {
|
|
13
|
-
userPool: UserPool;
|
|
14
|
-
userPoolClient: UserPoolClient;
|
|
15
|
-
fullAccessApiClient: UserPoolClient;
|
|
16
|
-
userPoolDomain: UserPoolDomain;
|
|
17
|
-
constructor(scope: Construct, id: string, props: AuthenticationStackProps);
|
|
18
|
-
private generateUrls;
|
|
19
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AuthenticationStack = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
-
const aws_cognito_1 = require("aws-cdk-lib/aws-cognito");
|
|
8
|
-
const utils_1 = require("../utils");
|
|
9
|
-
class AuthenticationStack extends aws_cdk_lib_1.NestedStack {
|
|
10
|
-
constructor(scope, id, props) {
|
|
11
|
-
super(scope, id, props);
|
|
12
|
-
if (props.cognitoUserPoolId === undefined) {
|
|
13
|
-
this.userPool = new aws_cognito_1.UserPool(this, `${id}UserPool`);
|
|
14
|
-
this.userPoolDomain = new aws_cognito_1.UserPoolDomain(this, props.cognitoDomainPrefix, {
|
|
15
|
-
userPool: this.userPool,
|
|
16
|
-
cognitoDomain: {
|
|
17
|
-
domainPrefix: props.cognitoDomainPrefix,
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
this.userPool = aws_cognito_1.UserPool.fromUserPoolId(this, "ImportedUserPool", props.cognitoUserPoolId);
|
|
23
|
-
this.userPoolDomain = aws_cognito_1.UserPoolDomain.fromDomainName(this, props.cognitoDomainPrefix, props.cognitoDomainPrefix);
|
|
24
|
-
}
|
|
25
|
-
const fullAccessScope = new aws_cognito_1.ResourceServerScope({
|
|
26
|
-
scopeName: "full_access",
|
|
27
|
-
scopeDescription: "Full access",
|
|
28
|
-
});
|
|
29
|
-
const server = this.userPool.addResourceServer("user-pool-rest-api", {
|
|
30
|
-
identifier: `${props.instanceName}-RESTAPI`,
|
|
31
|
-
scopes: [fullAccessScope],
|
|
32
|
-
});
|
|
33
|
-
this.fullAccessApiClient = new aws_cognito_1.UserPoolClient(this, "FullAccessApiClient", {
|
|
34
|
-
userPool: this.userPool,
|
|
35
|
-
generateSecret: true,
|
|
36
|
-
oAuth: {
|
|
37
|
-
flows: {
|
|
38
|
-
clientCredentials: true,
|
|
39
|
-
},
|
|
40
|
-
scopes: [aws_cognito_1.OAuthScope.resourceServer(server, fullAccessScope)],
|
|
41
|
-
},
|
|
42
|
-
supportedIdentityProviders: [aws_cognito_1.UserPoolClientIdentityProvider.COGNITO],
|
|
43
|
-
});
|
|
44
|
-
this.userPoolClient = new aws_cognito_1.UserPoolClient(this, "${id}UserPoolClient", {
|
|
45
|
-
userPool: this.userPool,
|
|
46
|
-
// Required minimal configuration for use with an ELB
|
|
47
|
-
generateSecret: true,
|
|
48
|
-
authFlows: {
|
|
49
|
-
userPassword: true,
|
|
50
|
-
},
|
|
51
|
-
oAuth: {
|
|
52
|
-
flows: {
|
|
53
|
-
authorizationCodeGrant: true,
|
|
54
|
-
},
|
|
55
|
-
scopes: [aws_cognito_1.OAuthScope.OPENID, aws_cognito_1.OAuthScope.PROFILE],
|
|
56
|
-
...this.generateUrls(props.defaultCallbackFqdn),
|
|
57
|
-
},
|
|
58
|
-
supportedIdentityProviders: [aws_cognito_1.UserPoolClientIdentityProvider.COGNITO],
|
|
59
|
-
});
|
|
60
|
-
const cfnClient = this.userPoolClient.node
|
|
61
|
-
.defaultChild;
|
|
62
|
-
cfnClient.addPropertyOverride("RefreshTokenValidity", 1);
|
|
63
|
-
cfnClient.addPropertyOverride("SupportedIdentityProviders", props.supportedIdentityProviders);
|
|
64
|
-
this.userPoolClient.userPoolClientSecret.toString();
|
|
65
|
-
const exportValue = (0, utils_1.createExporter)(this, "cognito");
|
|
66
|
-
exportValue({
|
|
67
|
-
name: "Cognito Userpool Id",
|
|
68
|
-
key: "user-pool-id",
|
|
69
|
-
value: this.userPool.userPoolId,
|
|
70
|
-
});
|
|
71
|
-
exportValue({
|
|
72
|
-
name: "Cognito Domain Prefix",
|
|
73
|
-
key: "domain-prefix",
|
|
74
|
-
value: props.cognitoDomainPrefix,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
generateUrls(fqdn) {
|
|
78
|
-
return {
|
|
79
|
-
callbackUrls: [
|
|
80
|
-
`https://${fqdn}/oauth2/idpresponse`,
|
|
81
|
-
`https://${fqdn}/`,
|
|
82
|
-
`https://${fqdn}/tm`,
|
|
83
|
-
`https://${fqdn}/tm/api/auth/callback/oidc`,
|
|
84
|
-
],
|
|
85
|
-
logoutUrls: [`https://${fqdn}/tm`],
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
exports.AuthenticationStack = AuthenticationStack;
|
|
90
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
91
|
-
AuthenticationStack[_a] = { fqn: "@btc-embedded/cdk-extensions.AuthenticationStack", version: "0.0.0" };
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0aGVudGljYXRpb25TdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wbGF0Zm9ybS9BdXRoZW50aWNhdGlvblN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQTREO0FBQzVELHlEQVNpQztBQUVqQyxvQ0FBMEM7QUFXMUMsTUFBYSxtQkFBb0IsU0FBUSx5QkFBVztJQUtsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLDRCQUFjLENBQ3RDLElBQUksRUFDSixLQUFLLENBQUMsbUJBQW1CLEVBQ3pCO2dCQUNFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsYUFBYSxFQUFFO29CQUNiLFlBQVksRUFBRSxLQUFLLENBQUMsbUJBQW1CO2lCQUN4QzthQUNGLENBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxzQkFBUSxDQUFDLGNBQWMsQ0FDckMsSUFBSSxFQUNKLGtCQUFrQixFQUNsQixLQUFLLENBQUMsaUJBQWlCLENBQ1osQ0FBQztZQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsNEJBQWMsQ0FBQyxjQUFjLENBQ2pELElBQUksRUFDSixLQUFLLENBQUMsbUJBQW1CLEVBQ3pCLEtBQUssQ0FBQyxtQkFBbUIsQ0FDUixDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGlDQUFtQixDQUFDO1lBQzlDLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGdCQUFnQixFQUFFLGFBQWE7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRTtZQUNuRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxVQUFVO1lBQzNDLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztTQUMxQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN6RSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFO2dCQUNMLEtBQUssRUFBRTtvQkFDTCxpQkFBaUIsRUFBRSxJQUFJO2lCQUN4QjtnQkFDRCxNQUFNLEVBQUUsQ0FBQyx3QkFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDN0Q7WUFDRCwwQkFBMEIsRUFBRSxDQUFDLDRDQUE4QixDQUFDLE9BQU8sQ0FBQztTQUNyRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksNEJBQWMsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDcEUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLHFEQUFxRDtZQUNyRCxjQUFjLEVBQUUsSUFBSTtZQUNwQixTQUFTLEVBQUU7Z0JBQ1QsWUFBWSxFQUFFLElBQUk7YUFDbkI7WUFFRCxLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFO29CQUNMLHNCQUFzQixFQUFFLElBQUk7aUJBQzdCO2dCQUNELE1BQU0sRUFBRSxDQUFDLHdCQUFVLENBQUMsTUFBTSxFQUFFLHdCQUFVLENBQUMsT0FBTyxDQUFDO2dCQUMvQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO2FBQ2hEO1lBQ0QsMEJBQTBCLEVBQUUsQ0FBQyw0Q0FBOEIsQ0FBQyxPQUFPLENBQUM7U0FDckUsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2FBQ3ZDLFlBQWlDLENBQUM7UUFDckMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pELFNBQVMsQ0FBQyxtQkFBbUIsQ0FDM0IsNEJBQTRCLEVBQzVCLEtBQUssQ0FBQywwQkFBMEIsQ0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFcEQsTUFBTSxXQUFXLEdBQUcsSUFBQSxzQkFBYyxFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVwRCxXQUFXLENBQUM7WUFDVixJQUFJLEVBQUUscUJBQXFCO1lBQzNCLEdBQUcsRUFBRSxjQUFjO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDO1lBQ1YsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixHQUFHLEVBQUUsZUFBZTtZQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUNsQixJQUFZO1FBRVosT0FBTztZQUNMLFlBQVksRUFBRTtnQkFDWixXQUFXLElBQUkscUJBQXFCO2dCQUNwQyxXQUFXLElBQUksR0FBRztnQkFDbEIsV0FBVyxJQUFJLEtBQUs7Z0JBQ3BCLFdBQVcsSUFBSSw0QkFBNEI7YUFDNUM7WUFDRCxVQUFVLEVBQUUsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDO1NBQ25DLENBQUM7SUFDSixDQUFDOztBQTVHSCxrREE2R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZXN0ZWRTdGFjaywgTmVzdGVkU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ2ZuVXNlclBvb2xDbGllbnQsXG4gIE9BdXRoU2NvcGUsXG4gIE9BdXRoU2V0dGluZ3MsXG4gIFJlc291cmNlU2VydmVyU2NvcGUsXG4gIFVzZXJQb29sLFxuICBVc2VyUG9vbENsaWVudCxcbiAgVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLFxuICBVc2VyUG9vbERvbWFpbixcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2duaXRvXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgY3JlYXRlRXhwb3J0ZXIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGlvblN0YWNrUHJvcHMgZXh0ZW5kcyBOZXN0ZWRTdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgaW5zdGFuY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvZ25pdG9Vc2VyUG9vbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvZ25pdG9Jc3N1ZXJVUkw6IHN0cmluZztcbiAgcmVhZG9ubHkgY29nbml0b0RvbWFpblByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSBzdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVyczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGRlZmF1bHRDYWxsYmFja0ZxZG46IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU3RhY2sgZXh0ZW5kcyBOZXN0ZWRTdGFjayB7XG4gIHB1YmxpYyB1c2VyUG9vbDogVXNlclBvb2w7XG4gIHB1YmxpYyB1c2VyUG9vbENsaWVudDogVXNlclBvb2xDbGllbnQ7XG4gIHB1YmxpYyBmdWxsQWNjZXNzQXBpQ2xpZW50OiBVc2VyUG9vbENsaWVudDtcbiAgcHVibGljIHVzZXJQb29sRG9tYWluOiBVc2VyUG9vbERvbWFpbjtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEF1dGhlbnRpY2F0aW9uU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGlmIChwcm9wcy5jb2duaXRvVXNlclBvb2xJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVzZXJQb29sID0gbmV3IFVzZXJQb29sKHRoaXMsIGAke2lkfVVzZXJQb29sYCk7XG4gICAgICB0aGlzLnVzZXJQb29sRG9tYWluID0gbmV3IFVzZXJQb29sRG9tYWluKFxuICAgICAgICB0aGlzLFxuICAgICAgICBwcm9wcy5jb2duaXRvRG9tYWluUHJlZml4LFxuICAgICAgICB7XG4gICAgICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gICAgICAgICAgY29nbml0b0RvbWFpbjoge1xuICAgICAgICAgICAgZG9tYWluUHJlZml4OiBwcm9wcy5jb2duaXRvRG9tYWluUHJlZml4LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJQb29sID0gVXNlclBvb2wuZnJvbVVzZXJQb29sSWQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiSW1wb3J0ZWRVc2VyUG9vbFwiLFxuICAgICAgICBwcm9wcy5jb2duaXRvVXNlclBvb2xJZCxcbiAgICAgICkgYXMgVXNlclBvb2w7XG4gICAgICB0aGlzLnVzZXJQb29sRG9tYWluID0gVXNlclBvb2xEb21haW4uZnJvbURvbWFpbk5hbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb3BzLmNvZ25pdG9Eb21haW5QcmVmaXgsXG4gICAgICAgIHByb3BzLmNvZ25pdG9Eb21haW5QcmVmaXgsXG4gICAgICApIGFzIFVzZXJQb29sRG9tYWluO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxBY2Nlc3NTY29wZSA9IG5ldyBSZXNvdXJjZVNlcnZlclNjb3BlKHtcbiAgICAgIHNjb3BlTmFtZTogXCJmdWxsX2FjY2Vzc1wiLFxuICAgICAgc2NvcGVEZXNjcmlwdGlvbjogXCJGdWxsIGFjY2Vzc1wiLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VydmVyID0gdGhpcy51c2VyUG9vbC5hZGRSZXNvdXJjZVNlcnZlcihcInVzZXItcG9vbC1yZXN0LWFwaVwiLCB7XG4gICAgICBpZGVudGlmaWVyOiBgJHtwcm9wcy5pbnN0YW5jZU5hbWV9LVJFU1RBUElgLFxuICAgICAgc2NvcGVzOiBbZnVsbEFjY2Vzc1Njb3BlXSxcbiAgICB9KTtcblxuICAgIHRoaXMuZnVsbEFjY2Vzc0FwaUNsaWVudCA9IG5ldyBVc2VyUG9vbENsaWVudCh0aGlzLCBcIkZ1bGxBY2Nlc3NBcGlDbGllbnRcIiwge1xuICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gICAgICBnZW5lcmF0ZVNlY3JldDogdHJ1ZSxcbiAgICAgIG9BdXRoOiB7XG4gICAgICAgIGZsb3dzOiB7XG4gICAgICAgICAgY2xpZW50Q3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNjb3BlczogW09BdXRoU2NvcGUucmVzb3VyY2VTZXJ2ZXIoc2VydmVyLCBmdWxsQWNjZXNzU2NvcGUpXSxcbiAgICAgIH0sXG4gICAgICBzdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVyczogW1VzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlci5DT0dOSVRPXSxcbiAgICB9KTtcblxuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSBuZXcgVXNlclBvb2xDbGllbnQodGhpcywgXCIke2lkfVVzZXJQb29sQ2xpZW50XCIsIHtcbiAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgLy8gUmVxdWlyZWQgbWluaW1hbCBjb25maWd1cmF0aW9uIGZvciB1c2Ugd2l0aCBhbiBFTEJcbiAgICAgIGdlbmVyYXRlU2VjcmV0OiB0cnVlLFxuICAgICAgYXV0aEZsb3dzOiB7XG4gICAgICAgIHVzZXJQYXNzd29yZDogdHJ1ZSxcbiAgICAgIH0sXG5cbiAgICAgIG9BdXRoOiB7XG4gICAgICAgIGZsb3dzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbkNvZGVHcmFudDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2NvcGVzOiBbT0F1dGhTY29wZS5PUEVOSUQsIE9BdXRoU2NvcGUuUFJPRklMRV0sXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVVcmxzKHByb3BzLmRlZmF1bHRDYWxsYmFja0ZxZG4pLFxuICAgICAgfSxcbiAgICAgIHN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzOiBbVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLkNPR05JVE9dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY2ZuQ2xpZW50ID0gdGhpcy51c2VyUG9vbENsaWVudC5ub2RlXG4gICAgICAuZGVmYXVsdENoaWxkIGFzIENmblVzZXJQb29sQ2xpZW50O1xuICAgIGNmbkNsaWVudC5hZGRQcm9wZXJ0eU92ZXJyaWRlKFwiUmVmcmVzaFRva2VuVmFsaWRpdHlcIiwgMSk7XG4gICAgY2ZuQ2xpZW50LmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICBcIlN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzXCIsXG4gICAgICBwcm9wcy5zdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVycyxcbiAgICApO1xuICAgIHRoaXMudXNlclBvb2xDbGllbnQudXNlclBvb2xDbGllbnRTZWNyZXQudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gY3JlYXRlRXhwb3J0ZXIodGhpcywgXCJjb2duaXRvXCIpO1xuXG4gICAgZXhwb3J0VmFsdWUoe1xuICAgICAgbmFtZTogXCJDb2duaXRvIFVzZXJwb29sIElkXCIsXG4gICAgICBrZXk6IFwidXNlci1wb29sLWlkXCIsXG4gICAgICB2YWx1ZTogdGhpcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgIH0pO1xuXG4gICAgZXhwb3J0VmFsdWUoe1xuICAgICAgbmFtZTogXCJDb2duaXRvIERvbWFpbiBQcmVmaXhcIixcbiAgICAgIGtleTogXCJkb21haW4tcHJlZml4XCIsXG4gICAgICB2YWx1ZTogcHJvcHMuY29nbml0b0RvbWFpblByZWZpeCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVcmxzKFxuICAgIGZxZG46IHN0cmluZyxcbiAgKTogUGljazxPQXV0aFNldHRpbmdzLCBcImNhbGxiYWNrVXJsc1wiIHwgXCJsb2dvdXRVcmxzXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FsbGJhY2tVcmxzOiBbXG4gICAgICAgIGBodHRwczovLyR7ZnFkbn0vb2F1dGgyL2lkcHJlc3BvbnNlYCxcbiAgICAgICAgYGh0dHBzOi8vJHtmcWRufS9gLFxuICAgICAgICBgaHR0cHM6Ly8ke2ZxZG59L3RtYCxcbiAgICAgICAgYGh0dHBzOi8vJHtmcWRufS90bS9hcGkvYXV0aC9jYWxsYmFjay9vaWRjYCxcbiAgICAgIF0sXG4gICAgICBsb2dvdXRVcmxzOiBbYGh0dHBzOi8vJHtmcWRufS90bWBdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { IVpc } from "aws-cdk-lib/aws-ec2";
|
|
2
|
-
import { PrivateDnsNamespace } from "aws-cdk-lib/aws-servicediscovery";
|
|
3
|
-
import { Construct } from "constructs";
|
|
4
|
-
export interface PrivateDnsNamespaceProps {
|
|
5
|
-
readonly arn: string;
|
|
6
|
-
readonly id: string;
|
|
7
|
-
readonly namespace: string;
|
|
8
|
-
}
|
|
9
|
-
export interface CloudMapProps {
|
|
10
|
-
readonly privateDnsNamespace?: PrivateDnsNamespaceProps;
|
|
11
|
-
readonly vpc: IVpc;
|
|
12
|
-
}
|
|
13
|
-
export declare class CloudMap extends Construct {
|
|
14
|
-
readonly namespace: PrivateDnsNamespace;
|
|
15
|
-
constructor(scope: Construct, id: string, props: CloudMapProps);
|
|
16
|
-
}
|
package/lib/platform/CloudMap.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.CloudMap = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const aws_servicediscovery_1 = require("aws-cdk-lib/aws-servicediscovery");
|
|
7
|
-
const constructs_1 = require("constructs");
|
|
8
|
-
const utils_1 = require("../utils");
|
|
9
|
-
class CloudMap extends constructs_1.Construct {
|
|
10
|
-
constructor(scope, id, props) {
|
|
11
|
-
super(scope, id);
|
|
12
|
-
// Create a Cloud Map Namespace
|
|
13
|
-
if (props.privateDnsNamespace) {
|
|
14
|
-
this.namespace = aws_servicediscovery_1.PrivateDnsNamespace.fromPrivateDnsNamespaceAttributes(this, "PrivateDns", {
|
|
15
|
-
namespaceName: props.privateDnsNamespace.namespace,
|
|
16
|
-
namespaceId: props.privateDnsNamespace.id,
|
|
17
|
-
namespaceArn: props.privateDnsNamespace.arn,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
this.namespace = new aws_servicediscovery_1.PrivateDnsNamespace(this, `${id}Namespace`, {
|
|
22
|
-
name: `${id}.local`,
|
|
23
|
-
vpc: props.vpc,
|
|
24
|
-
description: "Private Namespace",
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
const exportValue = (0, utils_1.createExporter)(this, "namespace");
|
|
28
|
-
exportValue({
|
|
29
|
-
name: "Namespace Arn",
|
|
30
|
-
key: "arn",
|
|
31
|
-
value: this.namespace.namespaceArn,
|
|
32
|
-
});
|
|
33
|
-
exportValue({
|
|
34
|
-
name: "Namespace Id",
|
|
35
|
-
key: "id",
|
|
36
|
-
value: this.namespace.namespaceId,
|
|
37
|
-
});
|
|
38
|
-
exportValue({
|
|
39
|
-
name: "Namespace Name",
|
|
40
|
-
key: "name",
|
|
41
|
-
value: this.namespace.namespaceName,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.CloudMap = CloudMap;
|
|
46
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
47
|
-
CloudMap[_a] = { fqn: "@btc-embedded/cdk-extensions.CloudMap", version: "0.3.0" };
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xvdWRNYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGxhdGZvcm0vQ2xvdWRNYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwyRUFBdUU7QUFDdkUsMkNBQXVDO0FBQ3ZDLG9DQUEwQztBQWExQyxNQUFhLFFBQVMsU0FBUSxzQkFBUztJQUVyQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsK0JBQStCO1FBQy9CLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRywwQ0FBbUIsQ0FBQyxpQ0FBaUMsQ0FDcEUsSUFBSSxFQUNKLFlBQVksRUFDWjtnQkFDRSxhQUFhLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVM7Z0JBQ2xELFdBQVcsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHO2FBQzVDLENBQ3FCLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksMENBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUU7Z0JBQy9ELElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUTtnQkFDbkIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLFdBQVcsRUFBRSxtQkFBbUI7YUFDakMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUEsc0JBQWMsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdEQsV0FBVyxDQUFDO1lBQ1YsSUFBSSxFQUFFLGVBQWU7WUFDckIsR0FBRyxFQUFFLEtBQUs7WUFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1NBQ25DLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQztZQUNWLElBQUksRUFBRSxjQUFjO1lBQ3BCLEdBQUcsRUFBRSxJQUFJO1lBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVztTQUNsQyxDQUFDLENBQUM7UUFFSCxXQUFXLENBQUM7WUFDVixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLEdBQUcsRUFBRSxNQUFNO1lBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTFDSCw0QkEyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFByaXZhdGVEbnNOYW1lc3BhY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlcnZpY2VkaXNjb3ZlcnlcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBjcmVhdGVFeHBvcnRlciB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVEbnNOYW1lc3BhY2VQcm9wcyB7XG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZE1hcFByb3BzIHtcbiAgcmVhZG9ubHkgcHJpdmF0ZURuc05hbWVzcGFjZT86IFByaXZhdGVEbnNOYW1lc3BhY2VQcm9wcztcbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xvdWRNYXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZXNwYWNlOiBQcml2YXRlRG5zTmFtZXNwYWNlO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRNYXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBDcmVhdGUgYSBDbG91ZCBNYXAgTmFtZXNwYWNlXG4gICAgaWYgKHByb3BzLnByaXZhdGVEbnNOYW1lc3BhY2UpIHtcbiAgICAgIHRoaXMubmFtZXNwYWNlID0gUHJpdmF0ZURuc05hbWVzcGFjZS5mcm9tUHJpdmF0ZURuc05hbWVzcGFjZUF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiUHJpdmF0ZURuc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZXNwYWNlTmFtZTogcHJvcHMucHJpdmF0ZURuc05hbWVzcGFjZS5uYW1lc3BhY2UsXG4gICAgICAgICAgbmFtZXNwYWNlSWQ6IHByb3BzLnByaXZhdGVEbnNOYW1lc3BhY2UuaWQsXG4gICAgICAgICAgbmFtZXNwYWNlQXJuOiBwcm9wcy5wcml2YXRlRG5zTmFtZXNwYWNlLmFybixcbiAgICAgICAgfSxcbiAgICAgICkgYXMgUHJpdmF0ZURuc05hbWVzcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgUHJpdmF0ZURuc05hbWVzcGFjZSh0aGlzLCBgJHtpZH1OYW1lc3BhY2VgLCB7XG4gICAgICAgIG5hbWU6IGAke2lkfS5sb2NhbGAsXG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJQcml2YXRlIE5hbWVzcGFjZVwiLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gY3JlYXRlRXhwb3J0ZXIodGhpcywgXCJuYW1lc3BhY2VcIik7XG5cbiAgICBleHBvcnRWYWx1ZSh7XG4gICAgICBuYW1lOiBcIk5hbWVzcGFjZSBBcm5cIixcbiAgICAgIGtleTogXCJhcm5cIixcbiAgICAgIHZhbHVlOiB0aGlzLm5hbWVzcGFjZS5uYW1lc3BhY2VBcm4sXG4gICAgfSk7XG5cbiAgICBleHBvcnRWYWx1ZSh7XG4gICAgICBuYW1lOiBcIk5hbWVzcGFjZSBJZFwiLFxuICAgICAga2V5OiBcImlkXCIsXG4gICAgICB2YWx1ZTogdGhpcy5uYW1lc3BhY2UubmFtZXNwYWNlSWQsXG4gICAgfSk7XG5cbiAgICBleHBvcnRWYWx1ZSh7XG4gICAgICBuYW1lOiBcIk5hbWVzcGFjZSBOYW1lXCIsXG4gICAgICBrZXk6IFwibmFtZVwiLFxuICAgICAgdmFsdWU6IHRoaXMubmFtZXNwYWNlLm5hbWVzcGFjZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { IRole } from "aws-cdk-lib/aws-iam";
|
|
2
|
-
import * as sqs from "aws-cdk-lib/aws-sqs";
|
|
3
|
-
import { Construct } from "constructs";
|
|
4
|
-
export interface MessageQueueProps {
|
|
5
|
-
readonly scope: Construct;
|
|
6
|
-
readonly id: string;
|
|
7
|
-
readonly sourceServiceNames: string[];
|
|
8
|
-
readonly eventName: string;
|
|
9
|
-
readonly listenerServiceNames: string[];
|
|
10
|
-
readonly maxReceiveCount?: number;
|
|
11
|
-
readonly timeoutSeconds?: number;
|
|
12
|
-
readonly endlessRetry?: boolean;
|
|
13
|
-
readonly role: IRole;
|
|
14
|
-
}
|
|
15
|
-
export declare class MessageQueue extends Construct {
|
|
16
|
-
readonly queueUrls: Record<string, string>;
|
|
17
|
-
private sourceQueues;
|
|
18
|
-
private listenerQueues;
|
|
19
|
-
constructor(props: MessageQueueProps);
|
|
20
|
-
getListenerQueue(serviceName: string): sqs.Queue;
|
|
21
|
-
getSourceQueue(serviceName: string): sqs.Queue;
|
|
22
|
-
private createQueue;
|
|
23
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.MessageQueue = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
-
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
8
|
-
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
9
|
-
const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources");
|
|
10
|
-
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
11
|
-
const sns = require("aws-cdk-lib/aws-sns");
|
|
12
|
-
const aws_sns_subscriptions_1 = require("aws-cdk-lib/aws-sns-subscriptions");
|
|
13
|
-
const sqs = require("aws-cdk-lib/aws-sqs");
|
|
14
|
-
const constructs_1 = require("constructs");
|
|
15
|
-
const lodash_1 = require("lodash");
|
|
16
|
-
const path = require("path");
|
|
17
|
-
class MessageQueue extends constructs_1.Construct {
|
|
18
|
-
constructor(props) {
|
|
19
|
-
super(props.scope, props.id);
|
|
20
|
-
this.sourceQueues = {};
|
|
21
|
-
this.listenerQueues = {};
|
|
22
|
-
const { sourceServiceNames, eventName, listenerServiceNames } = props;
|
|
23
|
-
this.queueUrls = {};
|
|
24
|
-
if (sourceServiceNames.length === 0 || listenerServiceNames.length === 0) {
|
|
25
|
-
throw new Error("At least one source service name and one listener service name must be provided.");
|
|
26
|
-
}
|
|
27
|
-
const maxReceiveCount = props.maxReceiveCount ?? 10;
|
|
28
|
-
if (listenerServiceNames.length === 1) {
|
|
29
|
-
// Simple case, 1-to-1 -> Just one SQS queue
|
|
30
|
-
const listenerServiceName = listenerServiceNames[0];
|
|
31
|
-
// Create a single SQS queue with DLQ for one-to-one communication
|
|
32
|
-
const queueName = `${eventName}-${listenerServiceName}`;
|
|
33
|
-
const queue = this.createQueue({
|
|
34
|
-
queueName,
|
|
35
|
-
maxReceiveCount,
|
|
36
|
-
timeOutSeconds: props.timeoutSeconds,
|
|
37
|
-
endlessRetry: props.endlessRetry,
|
|
38
|
-
});
|
|
39
|
-
queue.grantSendMessages(props.role);
|
|
40
|
-
queue.grantConsumeMessages(props.role);
|
|
41
|
-
queue.addToResourcePolicy(new aws_iam_1.PolicyStatement({
|
|
42
|
-
actions: ["sqs:*"],
|
|
43
|
-
principals: [props.role],
|
|
44
|
-
resources: [queue.queueArn],
|
|
45
|
-
conditions: {
|
|
46
|
-
StringEquals: {
|
|
47
|
-
"aws:SourceArn": "*",
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
}));
|
|
51
|
-
sourceServiceNames.forEach((sourceServiceName) => {
|
|
52
|
-
this.queueUrls[sourceServiceName] = queue.queueUrl;
|
|
53
|
-
this.sourceQueues[sourceServiceName] = queue;
|
|
54
|
-
});
|
|
55
|
-
this.queueUrls[listenerServiceName] = queue.queueUrl;
|
|
56
|
-
this.listenerQueues[listenerServiceName] = queue;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// More complex case 1-to-N -> SqS to SnS fan-out
|
|
60
|
-
// Create SNS Topic for fan-out
|
|
61
|
-
const topic = new sns.Topic(this, `${eventName}-topic`, {
|
|
62
|
-
topicName: `${eventName}-topic`,
|
|
63
|
-
fifo: true,
|
|
64
|
-
});
|
|
65
|
-
// Create input SQS Queue with DLQ for the emitting service
|
|
66
|
-
const inputQueueName = `${eventName}-input`;
|
|
67
|
-
const inputQueue = this.createQueue({
|
|
68
|
-
queueName: inputQueueName,
|
|
69
|
-
maxReceiveCount,
|
|
70
|
-
timeOutSeconds: props.timeoutSeconds,
|
|
71
|
-
endlessRetry: props.endlessRetry,
|
|
72
|
-
});
|
|
73
|
-
inputQueue.grantSendMessages(props.role);
|
|
74
|
-
inputQueue.addToResourcePolicy(new aws_iam_1.PolicyStatement({
|
|
75
|
-
actions: ["sqs:*"],
|
|
76
|
-
principals: [props.role],
|
|
77
|
-
resources: [inputQueue.queueArn],
|
|
78
|
-
conditions: {
|
|
79
|
-
StringEquals: {
|
|
80
|
-
"aws:SourceArn": "*",
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
}));
|
|
84
|
-
const messageTransferFunc = new aws_lambda_nodejs_1.NodejsFunction(this, "SqsToSnsLambda", {
|
|
85
|
-
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
|
86
|
-
entry: path.join(__dirname, "./functions/transfer.ts"),
|
|
87
|
-
handler: "handler",
|
|
88
|
-
environment: {
|
|
89
|
-
TOPIC_ARN: topic.topicArn,
|
|
90
|
-
},
|
|
91
|
-
bundling: {
|
|
92
|
-
minify: false,
|
|
93
|
-
sourceMap: true,
|
|
94
|
-
nodeModules: ["aws-lambda", "@types/aws-lambda"],
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
inputQueue.grantConsumeMessages(messageTransferFunc);
|
|
98
|
-
topic.grantPublish(messageTransferFunc);
|
|
99
|
-
messageTransferFunc.addEventSource(new aws_lambda_event_sources_1.SqsEventSource(inputQueue, {
|
|
100
|
-
batchSize: 1,
|
|
101
|
-
}));
|
|
102
|
-
sourceServiceNames.forEach((sourceServiceName) => {
|
|
103
|
-
this.queueUrls[sourceServiceName] = inputQueue.queueUrl;
|
|
104
|
-
this.sourceQueues[sourceServiceName] = inputQueue;
|
|
105
|
-
});
|
|
106
|
-
// Create SQS Queues with DLQ and subscribe to the topic
|
|
107
|
-
listenerServiceNames.forEach((listenerServiceName) => {
|
|
108
|
-
const listenerQueueName = `${listenerServiceName}-${eventName}-listener`;
|
|
109
|
-
const listenerQueue = this.createQueue({
|
|
110
|
-
queueName: listenerQueueName,
|
|
111
|
-
maxReceiveCount,
|
|
112
|
-
timeOutSeconds: props.timeoutSeconds,
|
|
113
|
-
endlessRetry: props.endlessRetry,
|
|
114
|
-
});
|
|
115
|
-
listenerQueue.grantConsumeMessages(props.role);
|
|
116
|
-
listenerQueue.addToResourcePolicy(new aws_iam_1.PolicyStatement({
|
|
117
|
-
actions: ["sqs:*"],
|
|
118
|
-
principals: [props.role],
|
|
119
|
-
resources: [listenerQueue.queueArn],
|
|
120
|
-
conditions: {
|
|
121
|
-
StringEquals: {
|
|
122
|
-
"aws:SourceArn": "*",
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
}));
|
|
126
|
-
// Subscribe SQS Queue to SNS Topic
|
|
127
|
-
topic.addSubscription(new aws_sns_subscriptions_1.SqsSubscription(listenerQueue, { rawMessageDelivery: true }));
|
|
128
|
-
this.queueUrls[listenerServiceName] = listenerQueue.queueUrl;
|
|
129
|
-
this.listenerQueues[listenerServiceName] = listenerQueue;
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
getListenerQueue(serviceName) {
|
|
134
|
-
return this.listenerQueues[serviceName];
|
|
135
|
-
}
|
|
136
|
-
getSourceQueue(serviceName) {
|
|
137
|
-
return this.sourceQueues[serviceName];
|
|
138
|
-
}
|
|
139
|
-
createQueue({ queueName, maxReceiveCount, endlessRetry, timeOutSeconds, }) {
|
|
140
|
-
const sharedProps = {
|
|
141
|
-
queueName: `${queueName}.fifo`,
|
|
142
|
-
fifo: true,
|
|
143
|
-
visibilityTimeout: (0, lodash_1.isNil)(timeOutSeconds)
|
|
144
|
-
? aws_cdk_lib_1.Duration.seconds(120)
|
|
145
|
-
: aws_cdk_lib_1.Duration.seconds(timeOutSeconds),
|
|
146
|
-
};
|
|
147
|
-
if (endlessRetry) {
|
|
148
|
-
return new sqs.Queue(this, queueName, sharedProps);
|
|
149
|
-
}
|
|
150
|
-
const dlq = new sqs.Queue(this, `${queueName}-dlq.fifo`, {
|
|
151
|
-
queueName: `${queueName}-dlq.fifo`,
|
|
152
|
-
fifo: true,
|
|
153
|
-
});
|
|
154
|
-
return new sqs.Queue(this, queueName, {
|
|
155
|
-
...sharedProps,
|
|
156
|
-
deadLetterQueue: {
|
|
157
|
-
queue: dlq,
|
|
158
|
-
maxReceiveCount,
|
|
159
|
-
},
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
exports.MessageQueue = MessageQueue;
|
|
164
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
165
|
-
MessageQueue[_a] = { fqn: "@btc-embedded/cdk-extensions.MessageQueue", version: "0.3.0" };
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsYXRmb3JtL01lc3NhZ2VRdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QyxpREFBNkQ7QUFDN0QsdURBQWlEO0FBQ2pELG1GQUFzRTtBQUN0RSxxRUFBK0Q7QUFDL0QsMkNBQTJDO0FBQzNDLDZFQUFvRTtBQUNwRSwyQ0FBMkM7QUFDM0MsMkNBQXVDO0FBQ3ZDLG1DQUErQjtBQUMvQiw2QkFBOEI7QUFjOUIsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFNekMsWUFBWSxLQUF3QjtRQUNsQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFKdkIsaUJBQVksR0FBOEIsRUFBRSxDQUFDO1FBQzdDLG1CQUFjLEdBQThCLEVBQUUsQ0FBQztRQUtyRCxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FDYixrRkFBa0YsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUVwRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0Qyw0Q0FBNEM7WUFDNUMsTUFBTSxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRCxrRUFBa0U7WUFDbEUsTUFBTSxTQUFTLEdBQUcsR0FBRyxTQUFTLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4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UUFDckQsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLFdBQVcsRUFBRTtZQUN2RCxTQUFTLEVBQUUsR0FBRyxTQUFTLFdBQVc7WUFDbEMsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3BDLEdBQUcsV0FBVztZQUNkLGVBQWUsRUFBRTtnQkFDZixLQUFLLEVBQUUsR0FBRztnQkFDVixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF6TEgsb0NBMExDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElSb2xlLCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBTcXNFdmVudFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXNcIjtcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zbnNcIjtcbmltcG9ydCB7IFNxc1N1YnNjcmlwdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc25zLXN1YnNjcmlwdGlvbnNcIjtcbmltcG9ydCAqIGFzIHNxcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlUXVldWVQcm9wcyB7XG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvdXJjZVNlcnZpY2VOYW1lczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGV2ZW50TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBsaXN0ZW5lclNlcnZpY2VOYW1lczogc3RyaW5nW107XG4gIHJlYWRvbmx5IG1heFJlY2VpdmVDb3VudD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGVuZGxlc3NSZXRyeT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJvbGU6IElSb2xlO1xufVxuXG5leHBvcnQgY2xhc3MgTWVzc2FnZVF1ZXVlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHF1ZXVlVXJsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICBwcml2YXRlIHNvdXJjZVF1ZXVlczogUmVjb3JkPHN0cmluZywgc3FzLlF1ZXVlPiA9IHt9O1xuICBwcml2YXRlIGxpc3RlbmVyUXVldWVzOiBSZWNvcmQ8c3RyaW5nLCBzcXMuUXVldWU+ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IE1lc3NhZ2VRdWV1ZVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMuc2NvcGUsIHByb3BzLmlkKTtcblxuICAgIGNvbnN0IHsgc291cmNlU2VydmljZU5hbWVzLCBldmVudE5hbWUsIGxpc3RlbmVyU2VydmljZU5hbWVzIH0gPSBwcm9wcztcbiAgICB0aGlzLnF1ZXVlVXJscyA9IHt9O1xuXG4gICAgaWYgKHNvdXJjZVNlcnZpY2VOYW1lcy5sZW5ndGggPT09IDAgfHwgbGlzdGVuZXJTZXJ2aWNlTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQXQgbGVhc3Qgb25lIHNvdXJjZSBzZXJ2aWNlIG5hbWUgYW5kIG9uZSBsaXN0ZW5lciBzZXJ2aWNlIG5hbWUgbXVzdCBiZSBwcm92aWRlZC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4UmVjZWl2ZUNvdW50ID0gcHJvcHMubWF4UmVjZWl2ZUNvdW50ID8/IDEwO1xuXG4gICAgaWYgKGxpc3RlbmVyU2VydmljZU5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gU2ltcGxlIGNhc2UsIDEtdG8tMSAtPiBKdXN0IG9uZSBTUVMgcXVldWVcbiAgICAgIGNvbnN0IGxpc3RlbmVyU2VydmljZU5hbWUgPSBsaXN0ZW5lclNlcnZpY2VOYW1lc1swXTtcblxuICAgICAgLy8gQ3JlYXRlIGEgc2luZ2xlIFNRUyBxdWV1ZSB3aXRoIERMUSBmb3Igb25lLXRvLW9uZSBjb21tdW5pY2F0aW9uXG4gICAgICBjb25zdCBxdWV1ZU5hbWUgPSBgJHtldmVudE5hbWV9LSR7bGlzdGVuZXJTZXJ2aWNlTmFtZX1gO1xuICAgICAgY29uc3QgcXVldWUgPSB0aGlzLmNyZWF0ZVF1ZXVlKHtcbiAgICAgICAgcXVldWVOYW1lLFxuICAgICAgICBtYXhSZWNlaXZlQ291bnQsXG4gICAgICAgIHRpbWVPdXRTZWNvbmRzOiBwcm9wcy50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgZW5kbGVzc1JldHJ5OiBwcm9wcy5lbmRsZXNzUmV0cnksXG4gICAgICB9KTtcbiAgICAgIHF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHByb3BzLnJvbGUpO1xuICAgICAgcXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocHJvcHMucm9sZSk7XG4gICAgICBxdWV1ZS5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzcXM6KlwiXSxcbiAgICAgICAgICBwcmluY2lwYWxzOiBbcHJvcHMucm9sZV0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbcXVldWUucXVldWVBcm5dLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICBcImF3czpTb3VyY2VBcm5cIjogXCIqXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHNvdXJjZVNlcnZpY2VOYW1lcy5mb3JFYWNoKChzb3VyY2VTZXJ2aWNlTmFtZSkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXVlVXJsc1tzb3VyY2VTZXJ2aWNlTmFtZV0gPSBxdWV1ZS5xdWV1ZVVybDtcbiAgICAgICAgdGhpcy5zb3VyY2VRdWV1ZXNbc291cmNlU2VydmljZU5hbWVdID0gcXVldWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucXVldWVVcmxzW2xpc3RlbmVyU2VydmljZU5hbWVdID0gcXVldWUucXVldWVVcmw7XG4gICAgICB0aGlzLmxpc3RlbmVyUXVldWVzW2xpc3RlbmVyU2VydmljZU5hbWVdID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1vcmUgY29tcGxleCBjYXNlIDEtdG8tTiAtPiBTcVMgdG8gU25TIGZhbi1vdXRcblxuICAgICAgLy8gQ3JlYXRlIFNOUyBUb3BpYyBmb3IgZmFuLW91dFxuICAgICAgY29uc3QgdG9waWMgPSBuZXcgc25zLlRvcGljKHRoaXMsIGAke2V2ZW50TmFtZX0tdG9waWNgLCB7XG4gICAgICAgIHRvcGljTmFtZTogYCR7ZXZlbnROYW1lfS10b3BpY2AsXG4gICAgICAgIGZpZm86IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIGlucHV0IFNRUyBRdWV1ZSB3aXRoIERMUSBmb3IgdGhlIGVtaXR0aW5nIHNlcnZpY2VcbiAgICAgIGNvbnN0IGlucHV0UXVldWVOYW1lID0gYCR7ZXZlbnROYW1lfS1pbnB1dGA7XG4gICAgICBjb25zdCBpbnB1dFF1ZXVlID0gdGhpcy5jcmVhdGVRdWV1ZSh7XG4gICAgICAgIHF1ZXVlTmFtZTogaW5wdXRRdWV1ZU5hbWUsXG4gICAgICAgIG1heFJlY2VpdmVDb3VudCxcbiAgICAgICAgdGltZU91dFNlY29uZHM6IHByb3BzLnRpbWVvdXRTZWNvbmRzLFxuICAgICAgICBlbmRsZXNzUmV0cnk6IHByb3BzLmVuZGxlc3NSZXRyeSxcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dFF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHByb3BzLnJvbGUpO1xuICAgICAgaW5wdXRRdWV1ZS5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzcXM6KlwiXSxcbiAgICAgICAgICBwcmluY2lwYWxzOiBbcHJvcHMucm9sZV0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbaW5wdXRRdWV1ZS5xdWV1ZUFybl0sXG4gICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgIFwiYXdzOlNvdXJjZUFyblwiOiBcIipcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgbWVzc2FnZVRyYW5zZmVyRnVuYyA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCBcIlNxc1RvU25zTGFtYmRhXCIsIHtcbiAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9mdW5jdGlvbnMvdHJhbnNmZXIudHNcIiksXG4gICAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIFRPUElDX0FSTjogdG9waWMudG9waWNBcm4sXG4gICAgICAgIH0sXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgbm9kZU1vZHVsZXM6IFtcImF3cy1sYW1iZGFcIiwgXCJAdHlwZXMvYXdzLWxhbWJkYVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgaW5wdXRRdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhtZXNzYWdlVHJhbnNmZXJGdW5jKTtcbiAgICAgIHRvcGljLmdyYW50UHVibGlzaChtZXNzYWdlVHJhbnNmZXJGdW5jKTtcbiAgICAgIG1lc3NhZ2VUcmFuc2ZlckZ1bmMuYWRkRXZlbnRTb3VyY2UoXG4gICAgICAgIG5ldyBTcXNFdmVudFNvdXJjZShpbnB1dFF1ZXVlLCB7XG4gICAgICAgICAgYmF0Y2hTaXplOiAxLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHNvdXJjZVNlcnZpY2VOYW1lcy5mb3JFYWNoKChzb3VyY2VTZXJ2aWNlTmFtZSkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXVlVXJsc1tzb3VyY2VTZXJ2aWNlTmFtZV0gPSBpbnB1dFF1ZXVlLnF1ZXVlVXJsO1xuICAgICAgICB0aGlzLnNvdXJjZVF1ZXVlc1tzb3VyY2VTZXJ2aWNlTmFtZV0gPSBpbnB1dFF1ZXVlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBTUVMgUXVldWVzIHdpdGggRExRIGFuZCBzdWJzY3JpYmUgdG8gdGhlIHRvcGljXG4gICAgICBsaXN0ZW5lclNlcnZpY2VOYW1lcy5mb3JFYWNoKChsaXN0ZW5lclNlcnZpY2VOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyUXVldWVOYW1lID0gYCR7bGlzdGVuZXJTZXJ2aWNlTmFtZX0tJHtldmVudE5hbWV9LWxpc3RlbmVyYDtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJRdWV1ZSA9IHRoaXMuY3JlYXRlUXVldWUoe1xuICAgICAgICAgIHF1ZXVlTmFtZTogbGlzdGVuZXJRdWV1ZU5hbWUsXG4gICAgICAgICAgbWF4UmVjZWl2ZUNvdW50LFxuICAgICAgICAgIHRpbWVPdXRTZWNvbmRzOiBwcm9wcy50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICBlbmRsZXNzUmV0cnk6IHByb3BzLmVuZGxlc3NSZXRyeSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGlzdGVuZXJRdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhwcm9wcy5yb2xlKTtcbiAgICAgICAgbGlzdGVuZXJRdWV1ZS5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1wic3FzOipcIl0sXG4gICAgICAgICAgICBwcmluY2lwYWxzOiBbcHJvcHMucm9sZV0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtsaXN0ZW5lclF1ZXVlLnF1ZXVlQXJuXSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgICAgXCJhd3M6U291cmNlQXJuXCI6IFwiKlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gU3Vic2NyaWJlIFNRUyBRdWV1ZSB0byBTTlMgVG9waWNcbiAgICAgICAgdG9waWMuYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICAgIG5ldyBTcXNTdWJzY3JpcHRpb24obGlzdGVuZXJRdWV1ZSwgeyByYXdNZXNzYWdlRGVsaXZlcnk6IHRydWUgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucXVldWVVcmxzW2xpc3RlbmVyU2VydmljZU5hbWVdID0gbGlzdGVuZXJRdWV1ZS5xdWV1ZVVybDtcbiAgICAgICAgdGhpcy5saXN0ZW5lclF1ZXVlc1tsaXN0ZW5lclNlcnZpY2VOYW1lXSA9IGxpc3RlbmVyUXVldWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TGlzdGVuZXJRdWV1ZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3FzLlF1ZXVlIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lclF1ZXVlc1tzZXJ2aWNlTmFtZV07XG4gIH1cblxuICBwdWJsaWMgZ2V0U291cmNlUXVldWUoc2VydmljZU5hbWU6IHN0cmluZyk6IHNxcy5RdWV1ZSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlUXVldWVzW3NlcnZpY2VOYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUXVldWUoe1xuICAgIHF1ZXVlTmFtZSxcbiAgICBtYXhSZWNlaXZlQ291bnQsXG4gICAgZW5kbGVzc1JldHJ5LFxuICAgIHRpbWVPdXRTZWNvbmRzLFxuICB9OiB7XG4gICAgcXVldWVOYW1lOiBzdHJpbmc7XG4gICAgbWF4UmVjZWl2ZUNvdW50OiBudW1iZXI7XG4gICAgZW5kbGVzc1JldHJ5PzogYm9vbGVhbjtcbiAgICB0aW1lT3V0U2Vjb25kcz86IG51bWJlcjtcbiAgfSk6IHNxcy5RdWV1ZSB7XG4gICAgY29uc3Qgc2hhcmVkUHJvcHMgPSB7XG4gICAgICBxdWV1ZU5hbWU6IGAke3F1ZXVlTmFtZX0uZmlmb2AsXG4gICAgICBmaWZvOiB0cnVlLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGlzTmlsKHRpbWVPdXRTZWNvbmRzKVxuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMoMTIwKVxuICAgICAgICA6IER1cmF0aW9uLnNlY29uZHModGltZU91dFNlY29uZHMpLFxuICAgIH07XG5cbiAgICBpZiAoZW5kbGVzc1JldHJ5KSB7XG4gICAgICByZXR1cm4gbmV3IHNxcy5RdWV1ZSh0aGlzLCBxdWV1ZU5hbWUsIHNoYXJlZFByb3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkbHEgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsIGAke3F1ZXVlTmFtZX0tZGxxLmZpZm9gLCB7XG4gICAgICBxdWV1ZU5hbWU6IGAke3F1ZXVlTmFtZX0tZGxxLmZpZm9gLFxuICAgICAgZmlmbzogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgc3FzLlF1ZXVlKHRoaXMsIHF1ZXVlTmFtZSwge1xuICAgICAgLi4uc2hhcmVkUHJvcHMsXG4gICAgICBkZWFkTGV0dGVyUXVldWU6IHtcbiAgICAgICAgcXVldWU6IGRscSxcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|