@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.
Files changed (39) hide show
  1. package/.jsii +201 -11
  2. package/API.md +217 -6
  3. package/CHANGELOG.md +19 -0
  4. package/lib/constructs/SecureRestApi.d.ts +26 -0
  5. package/lib/constructs/SecureRestApi.js +57 -0
  6. package/lib/constructs/index.d.ts +1 -0
  7. package/lib/constructs/index.js +18 -0
  8. package/lib/extensions/ApiGatewayExtension.js +1 -1
  9. package/lib/extensions/ApplicationLoadBalancerExtension.js +1 -1
  10. package/lib/extensions/CloudMapExtension.js +1 -1
  11. package/lib/extensions/DocumentDbAccessExtension.js +1 -1
  12. package/lib/extensions/DomainEventMessagingExtension.js +1 -1
  13. package/lib/extensions/ExecExtension.d.ts +9 -0
  14. package/lib/extensions/ExecExtension.js +49 -0
  15. package/lib/extensions/ExtraContainerExtension.js +1 -1
  16. package/lib/extensions/LogExtension.js +1 -1
  17. package/lib/extensions/PostgresDbAccessExtension.js +1 -1
  18. package/lib/extensions/SharedVolumeExtension.js +1 -1
  19. package/lib/extensions/TcpKeepAliveExtension.js +1 -1
  20. package/lib/index.d.ts +1 -0
  21. package/lib/index.js +2 -1
  22. package/lib/platform/ApiGateway.js +1 -1
  23. package/lib/platform/ApplicationLoadBalancer.js +1 -1
  24. package/lib/platform/DefaultUserPoolClients.js +1 -1
  25. package/lib/platform/DocumentDB.js +1 -1
  26. package/lib/platform/PrivateDnsNamespace.js +1 -1
  27. package/lib/platform/Vpc.d.ts +13 -2
  28. package/lib/platform/Vpc.js +30 -3
  29. package/package.json +2 -1
  30. package/lib/extensions/ImportValue.d.ts +0 -2
  31. package/lib/extensions/ImportValue.js +0 -12
  32. package/lib/extensions/S3BucketAccessExtension.d.ts +0 -13
  33. package/lib/extensions/S3BucketAccessExtension.js +0 -32
  34. package/lib/platform/AuthenticationStack.d.ts +0 -19
  35. package/lib/platform/AuthenticationStack.js +0 -92
  36. package/lib/platform/CloudMap.d.ts +0 -16
  37. package/lib/platform/CloudMap.js +0 -48
  38. package/lib/platform/MessageQueue.d.ts +0 -23
  39. package/lib/platform/MessageQueue.js +0 -166
@@ -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
- this.cluster = new aws_ecs_1.Cluster(this, "Cluster", { vpc: this.vpcInstance });
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.2" };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsYXRmb3JtL1ZwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUF3RTtBQUN4RSxpREFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLG9DQUEwQztBQVExQyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUloQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLGFBQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDaEQsT0FBTyxFQUFFLEtBQUssQ0FBQyxjQUFjO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksYUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQ3pDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTzthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFdkUsTUFBTSxXQUFXLEdBQUcsSUFBQSxzQkFBYyxFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVwRCxXQUFXLENBQUM7WUFDVixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLEdBQUcsRUFBRSxRQUFRO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztTQUM5QixDQUFDLENBQUM7UUFFSCxXQUFXLENBQUM7WUFDVixJQUFJLEVBQUUsY0FBYztZQUNwQixHQUFHLEVBQUUsTUFBTTtZQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFuQ0gsa0JBb0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVnBjIGFzIEFXU1ZwYywgSUlwQWRkcmVzc2VzLCBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENsdXN0ZXIsIElDbHVzdGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBjcmVhdGVFeHBvcnRlciB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZwY1Byb3BzIHtcbiAgcmVhZG9ubHkgZGVmaW5lZFZwY05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZwY0NpZHI/OiBJSXBBZGRyZXNzZXM7XG4gIHJlYWRvbmx5IG1heEF6cz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZwYyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyB2cGNJbnN0YW5jZTogSVZwYztcbiAgcHVibGljIGNsdXN0ZXI6IElDbHVzdGVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZGVmaW5lZFZwY05hbWUpIHtcbiAgICAgIHRoaXMudnBjSW5zdGFuY2UgPSBBV1NWcGMuZnJvbUxvb2t1cCh0aGlzLCBcIlZwY1wiLCB7XG4gICAgICAgIHZwY05hbWU6IHByb3BzLmRlZmluZWRWcGNOYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy52cGNDaWRyKSB7XG4gICAgICB0aGlzLnZwY0luc3RhbmNlID0gbmV3IEFXU1ZwYyh0aGlzLCBcIlZwY1wiLCB7XG4gICAgICAgIG1heEF6czogcHJvcHMubWF4QXpzID8/IDIsXG4gICAgICAgIGlwQWRkcmVzc2VzOiBwcm9wcy52cGNDaWRyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwiRWl0aGVyIGRlZmluZWRWcGNOYW1lIG9yIHZwY0NpZHIgaGF2ZSB0byBiZSBzZXQuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuY2x1c3RlciA9IG5ldyBDbHVzdGVyKHRoaXMsIFwiQ2x1c3RlclwiLCB7IHZwYzogdGhpcy52cGNJbnN0YW5jZSB9KTtcblxuICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gY3JlYXRlRXhwb3J0ZXIodGhpcywgXCJjbHVzdGVyXCIpO1xuXG4gICAgZXhwb3J0VmFsdWUoe1xuICAgICAgbmFtZTogXCJDbHVzdGVyIFZQQyBJRFwiLFxuICAgICAga2V5OiBcInZwYy1pZFwiLFxuICAgICAgdmFsdWU6IHRoaXMudnBjSW5zdGFuY2UudnBjSWQsXG4gICAgfSk7XG5cbiAgICBleHBvcnRWYWx1ZSh7XG4gICAgICBuYW1lOiBcIkNsdXN0ZXIgTmFtZVwiLFxuICAgICAga2V5OiBcIm5hbWVcIixcbiAgICAgIHZhbHVlOiB0aGlzLmNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
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.2",
83
+ "version": "0.5.4",
83
84
  "jest": {
84
85
  "coverageProvider": "v8",
85
86
  "testMatch": [
@@ -1,2 +0,0 @@
1
- export declare function importValue(prefix: string, name: string): string;
2
- export declare function createImporter(...prefix: string[]): (...parts: string[]) => string;
@@ -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
- }
@@ -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