@fjall/components-infrastructure 0.1.10 → 0.1.16

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 (122) hide show
  1. package/dist/lib/app.d.ts +2 -1
  2. package/dist/lib/app.js +4 -2
  3. package/dist/lib/config/aws/accountId.d.ts +6 -0
  4. package/dist/lib/config/aws/accountId.js +33 -0
  5. package/dist/lib/config/aws/cloudTrail.d.ts +10 -0
  6. package/dist/lib/config/aws/cloudTrail.js +22 -0
  7. package/dist/lib/config/aws/costAllocationTags.d.ts +2 -3
  8. package/dist/lib/config/aws/costAllocationTags.js +6 -5
  9. package/dist/lib/config/aws/ecrDefaultImage.d.ts +11 -0
  10. package/dist/lib/config/aws/ecrDefaultImage.js +127 -0
  11. package/dist/lib/config/aws/eventBus.d.ts +7 -0
  12. package/dist/lib/config/aws/eventBus.js +24 -0
  13. package/dist/lib/config/aws/identityCenter.d.ts +11 -3
  14. package/dist/lib/config/aws/identityCenter.js +24 -29
  15. package/dist/lib/config/aws/identityCenterUser.d.ts +16 -0
  16. package/dist/lib/config/aws/identityCenterUser.js +125 -0
  17. package/dist/lib/config/aws/index.d.ts +8 -4
  18. package/dist/lib/config/aws/index.js +9 -5
  19. package/dist/lib/config/aws/ipam.d.ts +2 -2
  20. package/dist/lib/config/aws/ipam.js +25 -7
  21. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +4 -5
  22. package/dist/lib/config/aws/ipamDelegateAdmin.js +9 -13
  23. package/dist/lib/config/aws/ipamPoolId.d.ts +10 -0
  24. package/dist/lib/config/aws/ipamPoolId.js +38 -0
  25. package/dist/lib/config/aws/organisation.d.ts +28 -0
  26. package/dist/lib/config/aws/organisation.js +112 -0
  27. package/dist/lib/config/aws/organisationId.d.ts +4 -2
  28. package/dist/lib/config/aws/organisationId.js +13 -7
  29. package/dist/lib/config/aws/ramSharing.d.ts +4 -0
  30. package/dist/lib/config/aws/ramSharing.js +35 -0
  31. package/dist/lib/patterns/aws/basicApp.d.ts +5 -4
  32. package/dist/lib/patterns/aws/basicApp.js +18 -18
  33. package/dist/lib/patterns/aws/buildkite.d.ts +40 -31
  34. package/dist/lib/patterns/aws/buildkite.js +74 -46
  35. package/dist/lib/patterns/aws/freeTierApp.d.ts +47 -0
  36. package/dist/lib/patterns/aws/freeTierApp.js +95 -0
  37. package/dist/lib/patterns/aws/hostedZone.d.ts +11 -0
  38. package/dist/lib/patterns/aws/hostedZone.js +73 -0
  39. package/dist/lib/patterns/aws/index.d.ts +3 -0
  40. package/dist/lib/patterns/aws/index.js +4 -1
  41. package/dist/lib/patterns/aws/managedAccount.d.ts +13 -0
  42. package/dist/lib/patterns/aws/managedAccount.js +40 -0
  43. package/dist/lib/patterns/aws/managedOrganisation.d.ts +14 -24
  44. package/dist/lib/patterns/aws/managedOrganisation.js +39 -146
  45. package/dist/lib/patterns/aws/managedPlatform.d.ts +13 -0
  46. package/dist/lib/patterns/aws/managedPlatform.js +22 -0
  47. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +47 -0
  48. package/dist/lib/patterns/aws/spotInstanceApp.js +95 -0
  49. package/dist/lib/patterns/aws/subdomainHostedZone.d.ts +9 -0
  50. package/dist/lib/patterns/aws/subdomainHostedZone.js +39 -0
  51. package/dist/lib/resources/aws/awsStack.d.ts +2 -2
  52. package/dist/lib/resources/aws/awsStack.js +3 -3
  53. package/dist/lib/resources/aws/compute/ecs.d.ts +2 -4
  54. package/dist/lib/resources/aws/compute/ecs.js +10 -6
  55. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +76 -0
  56. package/dist/lib/resources/aws/compute/ecsFreeTier.js +352 -0
  57. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +76 -0
  58. package/dist/lib/resources/aws/compute/ecsSpot.js +334 -0
  59. package/dist/lib/resources/aws/compute/index.d.ts +2 -0
  60. package/dist/lib/resources/aws/compute/index.js +19 -0
  61. package/dist/lib/resources/aws/compute/lambda.d.ts +7 -7
  62. package/dist/lib/resources/aws/compute/lambda.js +8 -7
  63. package/dist/lib/resources/aws/database/database.d.ts +16 -0
  64. package/dist/lib/resources/aws/database/database.js +30 -0
  65. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +17 -0
  66. package/dist/lib/resources/aws/database/databaseFreeTier.js +31 -0
  67. package/dist/lib/resources/aws/database/databaseInstance.d.ts +17 -0
  68. package/dist/lib/resources/aws/database/databaseInstance.js +32 -0
  69. package/dist/lib/resources/aws/database/index.d.ts +2 -0
  70. package/dist/lib/resources/aws/database/index.js +19 -0
  71. package/dist/lib/resources/aws/database/rds.d.ts +23 -0
  72. package/dist/lib/resources/aws/database/rds.js +130 -0
  73. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +36 -0
  74. package/dist/lib/resources/aws/database/rdsFreeTier.js +80 -0
  75. package/dist/lib/resources/aws/database/rdsInstance.d.ts +42 -0
  76. package/dist/lib/resources/aws/database/rdsInstance.js +173 -0
  77. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +18 -0
  78. package/dist/lib/resources/aws/logging/cloudTrail.js +46 -0
  79. package/dist/lib/resources/aws/logging/logGroup.d.ts +3 -3
  80. package/dist/lib/resources/aws/logging/logGroup.js +3 -3
  81. package/dist/lib/resources/aws/networking/index.d.ts +1 -1
  82. package/dist/lib/resources/aws/networking/index.js +2 -2
  83. package/dist/lib/resources/aws/networking/ipamPool.d.ts +16 -3
  84. package/dist/lib/resources/aws/networking/ipamPool.js +78 -6
  85. package/dist/lib/resources/aws/networking/vpc.d.ts +29 -0
  86. package/dist/lib/resources/aws/networking/vpc.js +66 -0
  87. package/dist/lib/resources/aws/secrets/alias.d.ts +5 -0
  88. package/dist/lib/resources/aws/secrets/alias.js +13 -0
  89. package/dist/lib/resources/aws/secrets/index.d.ts +5 -0
  90. package/dist/lib/resources/aws/secrets/index.js +22 -0
  91. package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
  92. package/dist/lib/resources/aws/secrets/kms.js +34 -0
  93. package/dist/lib/resources/aws/secrets/parameter.d.ts +26 -0
  94. package/dist/lib/resources/aws/secrets/parameter.js +100 -0
  95. package/dist/lib/resources/aws/secrets/secret.d.ts +24 -0
  96. package/dist/lib/resources/aws/secrets/secret.js +53 -0
  97. package/dist/lib/resources/aws/storage/ecr.d.ts +12 -0
  98. package/dist/lib/resources/aws/storage/ecr.js +31 -0
  99. package/dist/lib/resources/aws/storage/index.d.ts +2 -0
  100. package/dist/lib/resources/aws/storage/index.js +19 -0
  101. package/dist/lib/resources/aws/storage/s3.d.ts +11 -0
  102. package/dist/lib/resources/aws/storage/s3.js +44 -0
  103. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +15 -0
  104. package/dist/lib/resources/aws/utilities/codeBuild.js +28 -0
  105. package/dist/lib/resources/aws/utilities/customResource.js +2 -2
  106. package/dist/lib/types.d.ts +3 -0
  107. package/dist/lib/types.js +3 -0
  108. package/dist/lib/utils/capitalizeString.d.ts +1 -0
  109. package/dist/lib/utils/capitalizeString.js +8 -0
  110. package/dist/lib/utils/getAccountId.d.ts +1 -1
  111. package/dist/lib/utils/getAccountId.js +7 -5
  112. package/dist/lib/utils/getAsync.d.ts +10 -0
  113. package/dist/lib/utils/getAsync.js +37 -0
  114. package/dist/lib/utils/getCidr.d.ts +8 -0
  115. package/dist/lib/utils/getCidr.js +42 -0
  116. package/dist/lib/utils/getConfig.d.ts +6 -3
  117. package/dist/lib/utils/getConfig.js +32 -14
  118. package/dist/lib/utils/stripAndCamelCase.d.ts +1 -0
  119. package/dist/lib/utils/stripAndCamelCase.js +17 -0
  120. package/dist/lib/utils/usersConfig.d.ts +7 -0
  121. package/dist/lib/utils/usersConfig.js +18 -0
  122. package/package.json +7 -3
package/dist/lib/app.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { App as CdkApp } from "aws-cdk-lib";
2
- export default class App extends CdkApp {
2
+ export declare class App extends CdkApp {
3
3
  private static instance;
4
4
  private constructor();
5
5
  static getInstance(): App;
6
6
  }
7
+ export default App;
package/dist/lib/app.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.App = void 0;
3
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
4
5
  class App extends aws_cdk_lib_1.App {
5
6
  constructor() {
@@ -14,6 +15,7 @@ class App extends aws_cdk_lib_1.App {
14
15
  return App.instance;
15
16
  }
16
17
  }
17
- exports.default = App;
18
+ exports.App = App;
18
19
  App.instance = null;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUE0QztBQUU1QyxNQUFxQixHQUFJLFNBQVEsaUJBQU07SUFHckM7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVztRQUN2Qiw2REFBNkQ7UUFDN0QsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUMxQjtRQUVELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDOztBQWZILHNCQWdCQztBQWZnQixZQUFRLEdBQWUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwIGFzIENka0FwcCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBBcHAge1xuICAgIC8vIERlc3BpdGUgc3VwcG9ydGluZyBtdWx0aXBsZSBzdGFja3MgeW91IGNhbiBzdGlsbCBvbmx5IGV2ZXJcbiAgICAvLyBoYXZlIGEgc2luZ2xlIEFwcGxpY2F0aW9uIHBlciBDREsgZGVwbG95bWVudFxuICAgIGlmICghQXBwLmluc3RhbmNlKSB7XG4gICAgICBBcHAuaW5zdGFuY2UgPSBuZXcgQXBwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxufVxuIl19
20
+ exports.default = App;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNEM7QUFFNUMsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFHN0I7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVztRQUN2Qiw2REFBNkQ7UUFDN0QsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUMxQjtRQUVELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDOztBQWZILGtCQWdCQztBQWZnQixZQUFRLEdBQWUsSUFBSSxDQUFDO0FBZ0I3QyxrQkFBZSxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAgYXMgQ2RrQXBwIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBBcHAge1xuICAgIC8vIERlc3BpdGUgc3VwcG9ydGluZyBtdWx0aXBsZSBzdGFja3MgeW91IGNhbiBzdGlsbCBvbmx5IGV2ZXJcbiAgICAvLyBoYXZlIGEgc2luZ2xlIEFwcGxpY2F0aW9uIHBlciBDREsgZGVwbG95bWVudFxuICAgIGlmICghQXBwLmluc3RhbmNlKSB7XG4gICAgICBBcHAuaW5zdGFuY2UgPSBuZXcgQXBwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIl19
@@ -0,0 +1,6 @@
1
+ import { CfnOutput } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ export declare class AccountId extends Construct {
4
+ readonly accountId: CfnOutput;
5
+ constructor(scope: Construct, id: string);
6
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountId = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const customResources = require("aws-cdk-lib/custom-resources");
6
+ const constructs_1 = require("constructs");
7
+ const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
8
+ class AccountId extends constructs_1.Construct {
9
+ constructor(scope, id) {
10
+ super(scope, id);
11
+ const sts = new awsCustomResource_1.AwsCustomResource(this, "getAccountId", {
12
+ functionName: "getAccountId",
13
+ onCreate: {
14
+ service: "sts",
15
+ action: "GetCallerIdentityCommand",
16
+ physicalResourceId: customResources.PhysicalResourceId.of("getAccountId")
17
+ },
18
+ onUpdate: {
19
+ service: "sts",
20
+ action: "GetCallerIdentityCommand",
21
+ physicalResourceId: customResources.PhysicalResourceId.of("getAccountId")
22
+ },
23
+ resourceType: "Custom::getAccountId"
24
+ });
25
+ this.accountId = new aws_cdk_lib_1.CfnOutput(this, "AccountId", {
26
+ key: "AccountId",
27
+ value: sts.getResponseField("Account"),
28
+ exportName: "AccountId"
29
+ });
30
+ }
31
+ }
32
+ exports.AccountId = AccountId;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudElkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvYWNjb3VudElkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3QztBQUN4QyxnRUFBZ0U7QUFDaEUsMkNBQXVDO0FBRXZDLHVGQUFvRjtBQUVwRixNQUFhLFNBQVUsU0FBUSxzQkFBUztJQUd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sR0FBRyxHQUFHLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN0RCxZQUFZLEVBQUUsY0FBYztZQUM1QixRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsTUFBTSxFQUFFLDBCQUEwQjtnQkFDbEMsa0JBQWtCLEVBQ2hCLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO2FBQ3hEO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE1BQU0sRUFBRSwwQkFBMEI7Z0JBQ2xDLGtCQUFrQixFQUNoQixlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQzthQUN4RDtZQUNELFlBQVksRUFBRSxzQkFBc0I7U0FDckMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNoRCxHQUFHLEVBQUUsV0FBVztZQUNoQixLQUFLLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUN0QyxVQUFVLEVBQUUsV0FBVztTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE3QkQsOEJBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50SWQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudElkOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBzdHMgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJnZXRBY2NvdW50SWRcIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBcImdldEFjY291bnRJZFwiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJzdHNcIixcbiAgICAgICAgYWN0aW9uOiBcIkdldENhbGxlcklkZW50aXR5Q29tbWFuZFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3N0cy9jb21tYW5kL0dldENhbGxlcklkZW50aXR5Q29tbWFuZC9cbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOlxuICAgICAgICAgIGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXCJnZXRBY2NvdW50SWRcIilcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcInN0c1wiLFxuICAgICAgICBhY3Rpb246IFwiR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL3YzL2xhdGVzdC9jbGllbnQvc3RzL2NvbW1hbmQvR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kL1xuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6XG4gICAgICAgICAgY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcImdldEFjY291bnRJZFwiKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OmdldEFjY291bnRJZFwiXG4gICAgfSk7XG5cbiAgICB0aGlzLmFjY291bnRJZCA9IG5ldyBDZm5PdXRwdXQodGhpcywgXCJBY2NvdW50SWRcIiwge1xuICAgICAga2V5OiBcIkFjY291bnRJZFwiLFxuICAgICAgdmFsdWU6IHN0cy5nZXRSZXNwb25zZUZpZWxkKFwiQWNjb3VudFwiKSxcbiAgICAgIGV4cG9ydE5hbWU6IFwiQWNjb3VudElkXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,10 @@
1
+ import { CfnOutput } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ export interface ManagementEventsTrailProps {
4
+ accountId: string;
5
+ }
6
+ export declare class ManagementEventsTrail extends Construct {
7
+ readonly defaultEventBusName: CfnOutput;
8
+ readonly defaultEventBusArn: CfnOutput;
9
+ constructor(scope: Construct, id: string, props: ManagementEventsTrailProps);
10
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagementEventsTrail = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const cloudTrail_1 = require("../../resources/aws/logging/cloudTrail");
6
+ class ManagementEventsTrail extends constructs_1.Construct {
7
+ constructor(scope, id, props) {
8
+ super(scope, id);
9
+ new cloudTrail_1.Trail(this, "managementEventsTrail", {
10
+ bucketName: `cloudtrail-management-events-${props.accountId}`,
11
+ trailName: "managementEvents",
12
+ isMultiRegionTrail: true,
13
+ tags: {
14
+ "fjall:costAllocation:environment": "management",
15
+ "fjall:costAllocation:service": "managementEventsTrail",
16
+ "fjall:costAllocation:owner": "Fjall"
17
+ }
18
+ });
19
+ }
20
+ }
21
+ exports.ManagementEventsTrail = ManagementEventsTrail;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRUcmFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2Nsb3VkVHJhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXVDO0FBQ3ZDLHVFQUErRDtBQU0vRCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBSWxELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGtCQUFLLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ3ZDLFVBQVUsRUFBRSxnQ0FBZ0MsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUM3RCxTQUFTLEVBQUUsa0JBQWtCO1lBQzdCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsSUFBSSxFQUFFO2dCQUNKLGtDQUFrQyxFQUFFLFlBQVk7Z0JBQ2hELDhCQUE4QixFQUFFLHVCQUF1QjtnQkFDdkQsNEJBQTRCLEVBQUUsT0FBTzthQUN0QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxCRCxzREFrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUcmFpbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2xvZ2dpbmcvY2xvdWRUcmFpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZW1lbnRFdmVudHNUcmFpbFByb3BzIHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VtZW50RXZlbnRzVHJhaWwgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdEV2ZW50QnVzTmFtZTogQ2ZuT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdEV2ZW50QnVzQXJuOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZW1lbnRFdmVudHNUcmFpbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBUcmFpbCh0aGlzLCBcIm1hbmFnZW1lbnRFdmVudHNUcmFpbFwiLCB7XG4gICAgICBidWNrZXROYW1lOiBgY2xvdWR0cmFpbC1tYW5hZ2VtZW50LWV2ZW50cy0ke3Byb3BzLmFjY291bnRJZH1gLFxuICAgICAgdHJhaWxOYW1lOiBcIm1hbmFnZW1lbnRFdmVudHNcIixcbiAgICAgIGlzTXVsdGlSZWdpb25UcmFpbDogdHJ1ZSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwibWFuYWdlbWVudEV2ZW50c1RyYWlsXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJGamFsbFwiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,4 @@
1
- import { Stack, StackProps } from "aws-cdk-lib";
2
1
  import { Construct } from "constructs";
3
- export declare class CostAllocationTags extends Stack {
4
- constructor(scope: Construct, id: string, props?: StackProps);
2
+ export declare class CostAllocationTags extends Construct {
3
+ constructor(scope: Construct, id: string);
5
4
  }
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CostAllocationTags = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
4
  const customResources = require("aws-cdk-lib/custom-resources");
5
+ const constructs_1 = require("constructs");
6
6
  const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
7
+ // TODO: Use an AWS CDK conditional trigger to wait for Cost Explorer to be created
7
8
  const costAllocationTags = [
8
9
  "aws:cloudformation:logical-id",
9
10
  "aws:cloudformation:stack-id",
@@ -22,9 +23,9 @@ function toggleCostTag(tags, tagStatus) {
22
23
  };
23
24
  });
24
25
  }
25
- class CostAllocationTags extends aws_cdk_lib_1.Stack {
26
- constructor(scope, id, props) {
27
- super(scope, id, props);
26
+ class CostAllocationTags extends constructs_1.Construct {
27
+ constructor(scope, id) {
28
+ super(scope, id);
28
29
  new awsCustomResource_1.AwsCustomResource(this, "costAllocationTags", {
29
30
  functionName: "enableCostAllocationTags",
30
31
  onCreate: {
@@ -55,4 +56,4 @@ class CostAllocationTags extends aws_cdk_lib_1.Stack {
55
56
  }
56
57
  }
57
58
  exports.CostAllocationTags = CostAllocationTags;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdEFsbG9jYXRpb25UYWdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvY29zdEFsbG9jYXRpb25UYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFnRDtBQUNoRCxnRUFBZ0U7QUFHaEUsdUZBQW9GO0FBRXBGLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsK0JBQStCO0lBQy9CLDZCQUE2QjtJQUM3QiwrQkFBK0I7SUFDL0IsZUFBZTtJQUNmLDBCQUEwQjtJQUMxQixzQ0FBc0M7SUFDdEMsa0NBQWtDO0lBQ2xDLCtCQUErQjtDQUNoQyxDQUFDO0FBRUYsU0FBUyxhQUFhLENBQUMsSUFBYyxFQUFFLFNBQWlCO0lBQ3RELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3RCLE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFhLGtCQUFtQixTQUFRLG1CQUFLO0lBQzNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDaEQsWUFBWSxFQUFFLDBCQUEwQjtZQUN4QyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLE1BQU0sRUFBRSxnQ0FBZ0M7Z0JBQ3hDLFVBQVUsRUFBRTtvQkFDVix3QkFBd0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO2lCQUN0RTtnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUN2RCwwQkFBMEIsQ0FDM0I7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsY0FBYztnQkFDdkIsTUFBTSxFQUFFLGdDQUFnQztnQkFDeEMsVUFBVSxFQUFFO29CQUNWLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7aUJBQ3RFO2dCQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQ3ZELDBCQUEwQixDQUMzQjthQUNGO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixNQUFNLEVBQUUsZ0NBQWdDO2dCQUN4QyxVQUFVLEVBQUU7b0JBQ1Ysd0JBQXdCLEVBQUUsYUFBYSxDQUNyQyxrQkFBa0IsRUFDbEIsVUFBVSxDQUNYO2lCQUNGO2FBQ0Y7WUFDRCxZQUFZLEVBQUUsNEJBQTRCO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXZDRCxnREF1Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuXG5jb25zdCBjb3N0QWxsb2NhdGlvblRhZ3MgPSBbXG4gIFwiYXdzOmNsb3VkZm9ybWF0aW9uOmxvZ2ljYWwtaWRcIixcbiAgXCJhd3M6Y2xvdWRmb3JtYXRpb246c3RhY2staWRcIixcbiAgXCJhd3M6Y2xvdWRmb3JtYXRpb246c3RhY2stbmFtZVwiLFxuICBcImF3czpjcmVhdGVkQnlcIlxuICAvLyBcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiXG4gIC8vIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIixcbiAgLy8gXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCIsXG4gIC8vIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIlxuXTtcblxuZnVuY3Rpb24gdG9nZ2xlQ29zdFRhZyh0YWdzOiBzdHJpbmdbXSwgdGFnU3RhdHVzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHRhZ3MubWFwKCh0YWcpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgVGFnS2V5OiB0YWcsXG4gICAgICBTdGF0dXM6IHRhZ1N0YXR1c1xuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgQ29zdEFsbG9jYXRpb25UYWdzIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImNvc3RBbGxvY2F0aW9uVGFnc1wiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwiZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkNvc3RFeHBsb3JlclwiLFxuICAgICAgICBhY3Rpb246IFwidXBkYXRlQ29zdEFsbG9jYXRpb25UYWdzU3RhdHVzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBDb3N0QWxsb2NhdGlvblRhZ3NTdGF0dXM6IHRvZ2dsZUNvc3RUYWcoY29zdEFsbG9jYXRpb25UYWdzLCBcIkFjdGl2ZVwiKVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJlbmFibGVDb3N0QWxsb2NhdGlvblRhZ3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJDb3N0RXhwbG9yZXJcIixcbiAgICAgICAgYWN0aW9uOiBcInVwZGF0ZUNvc3RBbGxvY2F0aW9uVGFnc1N0YXR1c1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQ29zdEFsbG9jYXRpb25UYWdzU3RhdHVzOiB0b2dnbGVDb3N0VGFnKGNvc3RBbGxvY2F0aW9uVGFncywgXCJBY3RpdmVcIilcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwidXBkYXRlQ29zdEFsbG9jYXRpb25UYWdzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQ29zdEV4cGxvcmVyXCIsXG4gICAgICAgIGFjdGlvbjogXCJ1cGRhdGVDb3N0QWxsb2NhdGlvblRhZ3NTdGF0dXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIENvc3RBbGxvY2F0aW9uVGFnc1N0YXR1czogdG9nZ2xlQ29zdFRhZyhcbiAgICAgICAgICAgIGNvc3RBbGxvY2F0aW9uVGFncyxcbiAgICAgICAgICAgIFwiSW5hY3RpdmVcIlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OkNvc3RBbGxvY2F0aW9uVGFnc1wiXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdEFsbG9jYXRpb25UYWdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvY29zdEFsbG9jYXRpb25UYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdFQUFnRTtBQUNoRSwyQ0FBdUM7QUFFdkMsdUZBQW9GO0FBRXBGLG1GQUFtRjtBQUNuRixNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLCtCQUErQjtJQUMvQiw2QkFBNkI7SUFDN0IsK0JBQStCO0lBQy9CLGVBQWU7SUFDZiwwQkFBMEI7SUFDMUIsc0NBQXNDO0lBQ3RDLGtDQUFrQztJQUNsQywrQkFBK0I7Q0FDaEMsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLElBQWMsRUFBRSxTQUFpQjtJQUN0RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN0QixPQUFPO1lBQ0wsTUFBTSxFQUFFLEdBQUc7WUFDWCxNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUztJQUMvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ2hELFlBQVksRUFBRSwwQkFBMEI7WUFDeEMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixNQUFNLEVBQUUsZ0NBQWdDO2dCQUN4QyxVQUFVLEVBQUU7b0JBQ1Ysd0JBQXdCLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztpQkFDdEU7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQsMEJBQTBCLENBQzNCO2FBQ0Y7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLE1BQU0sRUFBRSxnQ0FBZ0M7Z0JBQ3hDLFVBQVUsRUFBRTtvQkFDVix3QkFBd0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO2lCQUN0RTtnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUN2RCwwQkFBMEIsQ0FDM0I7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsY0FBYztnQkFDdkIsTUFBTSxFQUFFLGdDQUFnQztnQkFDeEMsVUFBVSxFQUFFO29CQUNWLHdCQUF3QixFQUFFLGFBQWEsQ0FDckMsa0JBQWtCLEVBQ2xCLFVBQVUsQ0FDWDtpQkFDRjthQUNGO1lBQ0QsWUFBWSxFQUFFLDRCQUE0QjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF2Q0QsZ0RBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuXG4vLyBUT0RPOiBVc2UgYW4gQVdTIENESyBjb25kaXRpb25hbCB0cmlnZ2VyIHRvIHdhaXQgZm9yIENvc3QgRXhwbG9yZXIgdG8gYmUgY3JlYXRlZFxuY29uc3QgY29zdEFsbG9jYXRpb25UYWdzID0gW1xuICBcImF3czpjbG91ZGZvcm1hdGlvbjpsb2dpY2FsLWlkXCIsXG4gIFwiYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLWlkXCIsXG4gIFwiYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLW5hbWVcIixcbiAgXCJhd3M6Y3JlYXRlZEJ5XCJcbiAgLy8gXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIlxuICAvLyBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCIsXG4gIC8vIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiLFxuICAvLyBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCJcbl07XG5cbmZ1bmN0aW9uIHRvZ2dsZUNvc3RUYWcodGFnczogc3RyaW5nW10sIHRhZ1N0YXR1czogc3RyaW5nKSB7XG4gIHJldHVybiB0YWdzLm1hcCgodGFnKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFRhZ0tleTogdGFnLFxuICAgICAgU3RhdHVzOiB0YWdTdGF0dXNcbiAgICB9O1xuICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIENvc3RBbGxvY2F0aW9uVGFncyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiY29zdEFsbG9jYXRpb25UYWdzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJlbmFibGVDb3N0QWxsb2NhdGlvblRhZ3NcIixcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQ29zdEV4cGxvcmVyXCIsXG4gICAgICAgIGFjdGlvbjogXCJ1cGRhdGVDb3N0QWxsb2NhdGlvblRhZ3NTdGF0dXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIENvc3RBbGxvY2F0aW9uVGFnc1N0YXR1czogdG9nZ2xlQ29zdFRhZyhjb3N0QWxsb2NhdGlvblRhZ3MsIFwiQWN0aXZlXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcImVuYWJsZUNvc3RBbGxvY2F0aW9uVGFnc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkNvc3RFeHBsb3JlclwiLFxuICAgICAgICBhY3Rpb246IFwidXBkYXRlQ29zdEFsbG9jYXRpb25UYWdzU3RhdHVzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBDb3N0QWxsb2NhdGlvblRhZ3NTdGF0dXM6IHRvZ2dsZUNvc3RUYWcoY29zdEFsbG9jYXRpb25UYWdzLCBcIkFjdGl2ZVwiKVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJ1cGRhdGVDb3N0QWxsb2NhdGlvblRhZ3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogXCJDb3N0RXhwbG9yZXJcIixcbiAgICAgICAgYWN0aW9uOiBcInVwZGF0ZUNvc3RBbGxvY2F0aW9uVGFnc1N0YXR1c1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQ29zdEFsbG9jYXRpb25UYWdzU3RhdHVzOiB0b2dnbGVDb3N0VGFnKFxuICAgICAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzLFxuICAgICAgICAgICAgXCJJbmFjdGl2ZVwiXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6Q29zdEFsbG9jYXRpb25UYWdzXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { Construct } from "constructs";
2
+ import { StackProps } from "aws-cdk-lib";
3
+ interface EcrDefaultImageProps extends StackProps {
4
+ region: string;
5
+ accountId: string;
6
+ eventBusArn: string;
7
+ }
8
+ export declare class EcrDefaultImage extends Construct {
9
+ constructor(scope: Construct, id: string, props: EcrDefaultImageProps);
10
+ }
11
+ export {};
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EcrDefaultImage = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const codeBuild_1 = require("../../resources/aws/utilities/codeBuild");
6
+ const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
7
+ const logGroup_1 = require("../../resources/aws/logging/logGroup");
8
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
9
+ const role_1 = require("../../resources/aws/iam/role");
10
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
11
+ const aws_events_1 = require("aws-cdk-lib/aws-events");
12
+ const Targets = require("aws-cdk-lib/aws-events-targets");
13
+ const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks");
14
+ const aws_stepfunctions_1 = require("aws-cdk-lib/aws-stepfunctions");
15
+ class EcrDefaultImage extends constructs_1.Construct {
16
+ constructor(scope, id, props) {
17
+ super(scope, id);
18
+ const logGroup = new logGroup_1.LogGroup(this, `logGroup`, {
19
+ logGroupName: `/vpc/codebuild/${id}/`,
20
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY
21
+ });
22
+ const ecrDefaultImageRole = new role_1.Role(this, "ecrDefaultImageRole", {
23
+ roleName: `ecrDefaultImageRole`,
24
+ description: "Role to push default ECR images into new repositories",
25
+ assumedBy: new aws_iam_1.ServicePrincipal("codebuild.amazonaws.com"),
26
+ inlinePolicies: {
27
+ ["pushEcrImage"]: new aws_iam_1.PolicyDocument({
28
+ statements: [
29
+ new aws_iam_1.PolicyStatement({
30
+ actions: [
31
+ "ecr:CompleteLayerUpload",
32
+ "ecr:GetAuthorizationToken",
33
+ "ecr:UploadLayerPart",
34
+ "ecr:InitiateLayerUpload",
35
+ "ecr:BatchCheckLayerAvailability",
36
+ "ecr:PutImage"
37
+ ],
38
+ resources: ["*"]
39
+ })
40
+ ]
41
+ }),
42
+ ["writeLogs"]: new aws_iam_1.PolicyDocument({
43
+ statements: [
44
+ new aws_iam_1.PolicyStatement({
45
+ actions: [
46
+ "logs:CreateLogGroup",
47
+ "logs:CreateLogStream",
48
+ "logs:PutLogEvents"
49
+ ],
50
+ resources: [logGroup.logGroupArn]
51
+ })
52
+ ]
53
+ })
54
+ }
55
+ });
56
+ const codeBuildProject = new codeBuild_1.CodeBuildProject(this, "codeBuildProject", {
57
+ description: "Build and push the default ECR image to new repositories",
58
+ projectName: "ecrDefaultImage",
59
+ buildSpec: aws_codebuild_1.BuildSpec.fromObject({
60
+ version: 0.2,
61
+ phases: {
62
+ build: {
63
+ commands: [
64
+ "docker pull fjall/ecrdefaultimage:latest",
65
+ "docker tag fjall/ecrdefaultimage:latest $ECR_REPOSITORY:latest",
66
+ `aws ecr get-login-password --region ${props.region} | docker login --username AWS --password-stdin ${props.accountId}.dkr.ecr.${props.region}.amazonaws.com`,
67
+ "docker push $ECR_REPOSITORY:latest"
68
+ ]
69
+ }
70
+ }
71
+ }),
72
+ logging: {
73
+ cloudWatch: {
74
+ logGroup: logGroup
75
+ }
76
+ },
77
+ role: ecrDefaultImageRole,
78
+ tags: {
79
+ "fjall:costAllocation:environment": "management",
80
+ "fjall:costAllocation:service": "ecrDefaultImage",
81
+ "fjall:costAllocation:owner": "Fjall"
82
+ }
83
+ });
84
+ new aws_stepfunctions_tasks_1.CodeBuildStartBuild(this, "codeBuildTask", {
85
+ project: codeBuildProject.project,
86
+ inputPath: aws_stepfunctions_1.JsonPath.stringAt("$.source"),
87
+ environmentVariablesOverride: {
88
+ ECR_REPOSITORY: {
89
+ type: aws_codebuild_1.BuildEnvironmentVariableType.PLAINTEXT,
90
+ value: aws_stepfunctions_1.JsonPath.stringAt("$.source")
91
+ }
92
+ }
93
+ });
94
+ const eventInputMapping = {
95
+ repositoryUri: aws_events_1.EventField.fromPath("$.detail.responseElements.repository.repositoryUri")
96
+ };
97
+ const eventInputTemplate = {
98
+ environmentVariablesOverride: [
99
+ {
100
+ name: "ECR_REPOSITORY",
101
+ value: eventInputMapping.repositoryUri
102
+ }
103
+ ]
104
+ };
105
+ new aws_events_1.Rule(this, "ecrCreationRule", {
106
+ ruleName: "ecrCreationRule",
107
+ description: "Trigger the default ECR image build when a new repository is created",
108
+ enabled: true,
109
+ eventBus: aws_events_1.EventBus.fromEventBusArn(this, "defaultEventBus", props.eventBusArn),
110
+ eventPattern: {
111
+ source: ["aws.ecr"],
112
+ detailType: ["AWS API Call via CloudTrail"],
113
+ detail: {
114
+ eventSource: ["ecr.amazonaws.com"],
115
+ eventName: ["CreateRepository"]
116
+ }
117
+ },
118
+ targets: [
119
+ new Targets.CodeBuildProject(codeBuildProject.project, {
120
+ event: aws_events_1.RuleTargetInput.fromObject(eventInputTemplate)
121
+ })
122
+ ]
123
+ });
124
+ }
125
+ }
126
+ exports.EcrDefaultImage = EcrDefaultImage;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNyRGVmYXVsdEltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvZWNyRGVmYXVsdEltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx1RUFBMkU7QUFDM0UsNkRBR21DO0FBQ25DLG1FQUFnRTtBQUNoRSw2Q0FBd0Q7QUFDeEQsdURBQW9EO0FBQ3BELGlEQUk2QjtBQUM3Qix1REFLZ0M7QUFDaEMsMERBQTBEO0FBQzFELGlGQUEwRTtBQUMxRSxxRUFBeUQ7QUFRekQsTUFBYSxlQUFnQixTQUFRLHNCQUFTO0lBQzVDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM5QyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsR0FBRztZQUNyQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1NBQ3JDLENBQUMsQ0FBQztRQUVILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxXQUFJLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ2hFLFFBQVEsRUFBRSxxQkFBcUI7WUFDL0IsV0FBVyxFQUFFLHVEQUF1RDtZQUNwRSxTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQztZQUMxRCxjQUFjLEVBQUU7Z0JBQ2QsQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQ25DLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE9BQU8sRUFBRTtnQ0FDUCx5QkFBeUI7Z0NBQ3pCLDJCQUEyQjtnQ0FDM0IscUJBQXFCO2dDQUNyQix5QkFBeUI7Z0NBQ3pCLGlDQUFpQztnQ0FDakMsY0FBYzs2QkFDZjs0QkFDRCxTQUFTLEVBQUUsQ0FB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dEQsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNUhELDBDQTRIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb2RlQnVpbGRQcm9qZWN0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2NvZGVCdWlsZFwiO1xuaW1wb3J0IHtcbiAgQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSxcbiAgQnVpbGRTcGVjXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBMb2dHcm91cCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2xvZ2dpbmcvbG9nR3JvdXBcIjtcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vcm9sZVwiO1xuaW1wb3J0IHtcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgU2VydmljZVByaW5jaXBhbFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgRXZlbnRCdXMsXG4gIEV2ZW50RmllbGQsXG4gIFJ1bGUsXG4gIFJ1bGVUYXJnZXRJbnB1dFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0ICogYXMgVGFyZ2V0cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5pbXBvcnQgeyBDb2RlQnVpbGRTdGFydEJ1aWxkIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzXCI7XG5pbXBvcnQgeyBKc29uUGF0aCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9uc1wiO1xuXG5pbnRlcmZhY2UgRWNyRGVmYXVsdEltYWdlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBldmVudEJ1c0Fybjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRWNyRGVmYXVsdEltYWdlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjckRlZmF1bHRJbWFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIGBsb2dHcm91cGAsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogYC92cGMvY29kZWJ1aWxkLyR7aWR9L2AsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICB9KTtcblxuICAgIGNvbnN0IGVjckRlZmF1bHRJbWFnZVJvbGUgPSBuZXcgUm9sZSh0aGlzLCBcImVjckRlZmF1bHRJbWFnZVJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IGBlY3JEZWZhdWx0SW1hZ2VSb2xlYCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJvbGUgdG8gcHVzaCBkZWZhdWx0IEVDUiBpbWFnZXMgaW50byBuZXcgcmVwb3NpdG9yaWVzXCIsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiY29kZWJ1aWxkLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJwdXNoRWNySW1hZ2VcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcImVjcjpDb21wbGV0ZUxheWVyVXBsb2FkXCIsXG4gICAgICAgICAgICAgICAgXCJlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuXCIsXG4gICAgICAgICAgICAgICAgXCJlY3I6VXBsb2FkTGF5ZXJQYXJ0XCIsXG4gICAgICAgICAgICAgICAgXCJlY3I6SW5pdGlhdGVMYXllclVwbG9hZFwiLFxuICAgICAgICAgICAgICAgIFwiZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eVwiLFxuICAgICAgICAgICAgICAgIFwiZWNyOlB1dEltYWdlXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlTG9nc1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbbG9nR3JvdXAubG9nR3JvdXBBcm5dXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZFByb2plY3QgPSBuZXcgQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCBcImNvZGVCdWlsZFByb2plY3RcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiQnVpbGQgYW5kIHB1c2ggdGhlIGRlZmF1bHQgRUNSIGltYWdlIHRvIG5ldyByZXBvc2l0b3JpZXNcIixcbiAgICAgIHByb2plY3ROYW1lOiBcImVjckRlZmF1bHRJbWFnZVwiLFxuICAgICAgYnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgICAgIHZlcnNpb246IDAuMixcbiAgICAgICAgcGhhc2VzOiB7XG4gICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgIFwiZG9ja2VyIHB1bGwgZmphbGwvZWNyZGVmYXVsdGltYWdlOmxhdGVzdFwiLFxuICAgICAgICAgICAgICBcImRvY2tlciB0YWcgZmphbGwvZWNyZGVmYXVsdGltYWdlOmxhdGVzdCAkRUNSX1JFUE9TSVRPUlk6bGF0ZXN0XCIsXG4gICAgICAgICAgICAgIGBhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAke3Byb3BzLnJlZ2lvbn0gfCBkb2NrZXIgbG9naW4gLS11c2VybmFtZSBBV1MgLS1wYXNzd29yZC1zdGRpbiAke3Byb3BzLmFjY291bnRJZH0uZGtyLmVjci4ke3Byb3BzLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICAgICAgICAgIFwiZG9ja2VyIHB1c2ggJEVDUl9SRVBPU0lUT1JZOmxhdGVzdFwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGxvZ2dpbmc6IHtcbiAgICAgICAgY2xvdWRXYXRjaDoge1xuICAgICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcm9sZTogZWNyRGVmYXVsdEltYWdlUm9sZSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiZWNyRGVmYXVsdEltYWdlXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJGamFsbFwiXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBuZXcgQ29kZUJ1aWxkU3RhcnRCdWlsZCh0aGlzLCBcImNvZGVCdWlsZFRhc2tcIiwge1xuICAgICAgcHJvamVjdDogY29kZUJ1aWxkUHJvamVjdC5wcm9qZWN0LFxuICAgICAgaW5wdXRQYXRoOiBKc29uUGF0aC5zdHJpbmdBdChcIiQuc291cmNlXCIpLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXNPdmVycmlkZToge1xuICAgICAgICBFQ1JfUkVQT1NJVE9SWToge1xuICAgICAgICAgIHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUuUExBSU5URVhULFxuICAgICAgICAgIHZhbHVlOiBKc29uUGF0aC5zdHJpbmdBdChcIiQuc291cmNlXCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50SW5wdXRNYXBwaW5nID0ge1xuICAgICAgcmVwb3NpdG9yeVVyaTogRXZlbnRGaWVsZC5mcm9tUGF0aChcbiAgICAgICAgXCIkLmRldGFpbC5yZXNwb25zZUVsZW1lbnRzLnJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaVwiXG4gICAgICApXG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50SW5wdXRUZW1wbGF0ZSA9IHtcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzT3ZlcnJpZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiRUNSX1JFUE9TSVRPUllcIixcbiAgICAgICAgICB2YWx1ZTogZXZlbnRJbnB1dE1hcHBpbmcucmVwb3NpdG9yeVVyaVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIG5ldyBSdWxlKHRoaXMsIFwiZWNyQ3JlYXRpb25SdWxlXCIsIHtcbiAgICAgIHJ1bGVOYW1lOiBcImVjckNyZWF0aW9uUnVsZVwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVHJpZ2dlciB0aGUgZGVmYXVsdCBFQ1IgaW1hZ2UgYnVpbGQgd2hlbiBhIG5ldyByZXBvc2l0b3J5IGlzIGNyZWF0ZWRcIixcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBldmVudEJ1czogRXZlbnRCdXMuZnJvbUV2ZW50QnVzQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcImRlZmF1bHRFdmVudEJ1c1wiLFxuICAgICAgICBwcm9wcy5ldmVudEJ1c0FyblxuICAgICAgKSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFtcImF3cy5lY3JcIl0sXG4gICAgICAgIGRldGFpbFR5cGU6IFtcIkFXUyBBUEkgQ2FsbCB2aWEgQ2xvdWRUcmFpbFwiXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZXZlbnRTb3VyY2U6IFtcImVjci5hbWF6b25hd3MuY29tXCJdLFxuICAgICAgICAgIGV2ZW50TmFtZTogW1wiQ3JlYXRlUmVwb3NpdG9yeVwiXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgVGFyZ2V0cy5Db2RlQnVpbGRQcm9qZWN0KGNvZGVCdWlsZFByb2plY3QucHJvamVjdCwge1xuICAgICAgICAgIGV2ZW50OiBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdChldmVudElucHV0VGVtcGxhdGUpXG4gICAgICAgIH0pXG4gICAgICBdXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { CfnOutput } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ export declare class DefaultEventBus extends Construct {
4
+ readonly defaultEventBusName: CfnOutput;
5
+ readonly defaultEventBusArn: CfnOutput;
6
+ constructor(scope: Construct, id: string);
7
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultEventBus = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const Events = require("aws-cdk-lib/aws-events");
6
+ const constructs_1 = require("constructs");
7
+ class DefaultEventBus extends constructs_1.Construct {
8
+ constructor(scope, id) {
9
+ super(scope, id);
10
+ const eventBridge = Events.EventBus.fromEventBusName(this, "defaultEventBus", "default");
11
+ this.defaultEventBusName = new aws_cdk_lib_1.CfnOutput(this, "defaultEventBusName", {
12
+ key: `defaultEventBusName`,
13
+ value: eventBridge.eventBusName,
14
+ exportName: "defaultEventBusName"
15
+ });
16
+ this.defaultEventBusArn = new aws_cdk_lib_1.CfnOutput(this, "defaultEventBusArn", {
17
+ key: `defaultEventBusArn`,
18
+ value: eventBridge.eventBusArn,
19
+ exportName: "defaultEventBusArn"
20
+ });
21
+ }
22
+ }
23
+ exports.DefaultEventBus = DefaultEventBus;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRCdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9ldmVudEJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBd0M7QUFDeEMsaURBQWlEO0FBQ2pELDJDQUF1QztBQUV2QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFJNUMsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUNsRCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLFNBQVMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDcEUsR0FBRyxFQUFFLHFCQUFxQjtZQUMxQixLQUFLLEVBQUUsV0FBVyxDQUFDLFlBQVk7WUFDL0IsVUFBVSxFQUFFLHFCQUFxQjtTQUNsQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRSxHQUFHLEVBQUUsb0JBQW9CO1lBQ3pCLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVztZQUM5QixVQUFVLEVBQUUsb0JBQW9CO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpCRCwwQ0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRFdmVudEJ1cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0RXZlbnRCdXNOYW1lOiBDZm5PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0RXZlbnRCdXNBcm46IENmbk91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGV2ZW50QnJpZGdlID0gRXZlbnRzLkV2ZW50QnVzLmZyb21FdmVudEJ1c05hbWUoXG4gICAgICB0aGlzLFxuICAgICAgXCJkZWZhdWx0RXZlbnRCdXNcIixcbiAgICAgIFwiZGVmYXVsdFwiXG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEV2ZW50QnVzTmFtZSA9IG5ldyBDZm5PdXRwdXQodGhpcywgXCJkZWZhdWx0RXZlbnRCdXNOYW1lXCIsIHtcbiAgICAgIGtleTogYGRlZmF1bHRFdmVudEJ1c05hbWVgLFxuICAgICAgdmFsdWU6IGV2ZW50QnJpZGdlLmV2ZW50QnVzTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IFwiZGVmYXVsdEV2ZW50QnVzTmFtZVwiXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlZmF1bHRFdmVudEJ1c0FybiA9IG5ldyBDZm5PdXRwdXQodGhpcywgXCJkZWZhdWx0RXZlbnRCdXNBcm5cIiwge1xuICAgICAga2V5OiBgZGVmYXVsdEV2ZW50QnVzQXJuYCxcbiAgICAgIHZhbHVlOiBldmVudEJyaWRnZS5ldmVudEJ1c0FybixcbiAgICAgIGV4cG9ydE5hbWU6IFwiZGVmYXVsdEV2ZW50QnVzQXJuXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,5 +1,13 @@
1
- import { Stack, StackProps } from "aws-cdk-lib";
2
1
  import { Construct } from "constructs";
3
- export declare class IdentityCenter extends Stack {
4
- constructor(scope: Construct, id: string, props?: StackProps);
2
+ import { Group } from "../../resources/aws/iam/identityCenter/group";
3
+ import { KeyValue } from "../../types";
4
+ interface IdentityCenterProps {
5
+ accounts: KeyValue;
5
6
  }
7
+ export declare class IdentityCenter extends Construct {
8
+ identityStoreId: string;
9
+ identityCenterArn: string;
10
+ identityCenterGroups: Group[];
11
+ constructor(scope: Construct, id: string, props: IdentityCenterProps);
12
+ }
13
+ export {};
@@ -1,19 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IdentityCenter = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
4
  const customResources = require("aws-cdk-lib/custom-resources");
5
+ const constructs_1 = require("constructs");
6
6
  const cfnOutput_1 = require("../../resources/aws/utilities/cfnOutput");
7
7
  const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
8
8
  const group_1 = require("../../resources/aws/iam/identityCenter/group");
9
9
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
10
10
  const permissionSet_1 = require("../../resources/aws/iam/identityCenter/permissionSet");
11
11
  const assignment_1 = require("../../resources/aws/iam/identityCenter/assignment");
12
- const getAccountId_1 = require("../../utils/getAccountId");
13
- // TODO: Potentially have this class take in custom permission sets and policies to overide our defaults
14
- class IdentityCenter extends aws_cdk_lib_1.Stack {
12
+ const stripAndCamelCase_1 = require("../../utils/stripAndCamelCase");
13
+ class IdentityCenter extends constructs_1.Construct {
15
14
  constructor(scope, id, props) {
16
- super(scope, id, props);
15
+ super(scope, id);
16
+ this.identityCenterGroups = [];
17
+ // TODO: Should only use this if no groups are provided by the end user
17
18
  const defaultPermissionSets = {
18
19
  AdministratorAccess: {
19
20
  Policy: "arn:aws:iam::aws:policy/AdministratorAccess"
@@ -28,20 +29,11 @@ class IdentityCenter extends aws_cdk_lib_1.Stack {
28
29
  Policy: "arn:aws:iam::aws:policy/job-function/SystemAdministrator"
29
30
  }
30
31
  };
31
- // TODO: What's the easier way to pass all accounts into the stack?
32
- const accounts = {
33
- management: (0, getAccountId_1.default)("management"),
34
- production: (0, getAccountId_1.default)("production"),
35
- staging: (0, getAccountId_1.default)("staging"),
36
- development: (0, getAccountId_1.default)("development"),
37
- platform: (0, getAccountId_1.default)("platform"),
38
- businessContinuity: (0, getAccountId_1.default)("businessContinuity")
39
- };
40
32
  const customResource = new awsCustomResource_1.AwsCustomResource(this, "listIdentityCenterInstance", {
41
33
  functionName: "listIdentityCenterInstance",
42
34
  onCreate: {
43
- service: "SSOAdmin",
44
- action: "listInstances",
35
+ service: "sso-admin",
36
+ action: "ListInstancesCommand",
45
37
  parameters: {
46
38
  MaxResults: 1
47
39
  },
@@ -55,53 +47,56 @@ class IdentityCenter extends aws_cdk_lib_1.Stack {
55
47
  ]),
56
48
  resourceType: "Custom::IamIdentityCenter"
57
49
  });
50
+ this.identityCenterArn = customResource.getResponseField("Instances.0.InstanceArn");
51
+ this.identityStoreId = customResource.getResponseField("Instances.0.IdentityStoreId");
58
52
  new cfnOutput_1.CfnOutput(this, "identityCenterArn", {
59
53
  key: "identityCenterArn",
60
- value: customResource.getResponseField("Instances.0.InstanceArn"),
54
+ value: this.identityCenterArn,
61
55
  exportName: "identityCenterArn"
62
56
  });
63
- new cfnOutput_1.CfnOutput(this, "identityStoreID", {
57
+ new cfnOutput_1.CfnOutput(this, "identityStoreId", {
64
58
  key: "identityStoreID",
65
- value: customResource.getResponseField("Instances.0.IdentityStoreId"),
66
- exportName: "identityStoreID"
59
+ value: this.identityStoreId,
60
+ exportName: "identityStoreId"
67
61
  });
68
62
  for (const [permissionSet, permissionSetAssociation] of Object.entries(defaultPermissionSets)) {
69
63
  const permSet = new permissionSet_1.PermissionSet(this, `${permissionSet}PermissionSet`, {
70
64
  name: permissionSet,
71
- instanceArn: customResource.getResponseField("Instances.0.InstanceArn"),
65
+ instanceArn: this.identityCenterArn,
72
66
  description: `Permission set for associated ${permissionSet} policy`,
73
67
  managedPolicies: [permissionSetAssociation.Policy],
74
68
  tags: [
75
69
  {
76
- key: "fjall:costAllocation:environments",
70
+ key: "fjall:costAllocation:environment",
77
71
  value: "management"
78
72
  }
79
73
  ]
80
74
  });
81
75
  const group = new group_1.Group(this, `${permissionSet}Group`, {
82
76
  displayName: permissionSet,
83
- identityStoreId: customResource.getResponseField("Instances.0.IdentityStoreId"),
77
+ identityStoreId: this.identityStoreId,
84
78
  description: `Group for associated ${permissionSet} permission set`
85
79
  });
80
+ this.identityCenterGroups.push(group);
86
81
  new cfnOutput_1.CfnOutput(this, `${permissionSet}GroupId`, {
87
82
  key: `${permissionSet}GroupId`,
88
83
  value: group.attrGroupId,
89
84
  exportName: `${permissionSet}GroupId`
90
85
  });
91
- for (const [account, accountArn] of Object.entries(accounts)) {
92
- if (!accountArn)
86
+ for (const [accountName, accountId] of Object.entries(props.accounts)) {
87
+ if (!accountId)
93
88
  continue;
94
- new assignment_1.Assignment(this, `${account}${permissionSet}Association`, {
95
- instanceArn: customResource.getResponseField("Instances.0.InstanceArn"),
89
+ new assignment_1.Assignment(this, `${(0, stripAndCamelCase_1.stripAndCamelCase)(accountName)}${permissionSet}Association`, {
90
+ instanceArn: this.identityCenterArn,
96
91
  permissionSetArn: permSet.attrPermissionSetArn,
97
92
  principalType: "GROUP",
98
93
  principalId: group.attrGroupId,
99
94
  targetType: "AWS_ACCOUNT",
100
- targetId: accountArn
95
+ targetId: accountId
101
96
  });
102
97
  }
103
98
  }
104
99
  }
105
100
  }
106
101
  exports.IdentityCenter = IdentityCenter;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBZ0Q7QUFDaEQsZ0VBQWdFO0FBR2hFLHVFQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYsd0VBQXFFO0FBQ3JFLGlEQUFzRDtBQUN0RCx3RkFBcUY7QUFDckYsa0ZBQStFO0FBQy9FLDJEQUFvRDtBQUVwRCx3R0FBd0c7QUFDeEcsTUFBYSxjQUFlLFNBQVEsbUJBQUs7SUFDdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixNQUFNLHFCQUFxQixHQUFHO1lBQzVCLG1CQUFtQixFQUFFO2dCQUNuQixNQUFNLEVBQUUsNkNBQTZDO2FBQ3REO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSw4Q0FBOEM7YUFDdkQ7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLHdDQUF3QzthQUNqRDtZQUNELG1CQUFtQixFQUFFO2dCQUNuQixNQUFNLEVBQUUsMERBQTBEO2FBQ25FO1NBQ0YsQ0FBQztRQUVGLG1FQUFtRTtRQUNuRSxNQUFNLFFBQVEsR0FBRztZQUNmLFVBQVUsRUFBRSxJQUFBLHNCQUFZLEVBQUMsWUFBWSxDQUFDO1lBQ3RDLFVBQVUsRUFBRSxJQUFBLHNCQUFZLEVBQUMsWUFBWSxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxJQUFBLHNCQUFZLEVBQUMsU0FBUyxDQUFDO1lBQ2hDLFdBQVcsRUFBRSxJQUFBLHNCQUFZLEVBQUMsYUFBYSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxJQUFBLHNCQUFZLEVBQUMsVUFBVSxDQUFDO1lBQ2xDLGtCQUFrQixFQUFFLElBQUEsc0JBQVksRUFBQyxvQkFBb0IsQ0FBQztTQUN2RCxDQUFD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O29CQUN0QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLFVBQVUsRUFBRSxhQUFhO29CQUN6QixRQUFRLEVBQUUsVUFBVTtpQkFDckIsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7Q0FDRjtBQS9HRCx3Q0ErR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY2ZuT3V0cHV0XCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvZ3JvdXBcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2V0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtL2lkZW50aXR5Q2VudGVyL3Blcm1pc3Npb25TZXRcIjtcbmltcG9ydCB7IEFzc2lnbm1lbnQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvYXNzaWdubWVudFwiO1xuaW1wb3J0IGdldEFjY291bnRJZCBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0QWNjb3VudElkXCI7XG5cbi8vIFRPRE86IFBvdGVudGlhbGx5IGhhdmUgdGhpcyBjbGFzcyB0YWtlIGluIGN1c3RvbSBwZXJtaXNzaW9uIHNldHMgYW5kIHBvbGljaWVzIHRvIG92ZXJpZGUgb3VyIGRlZmF1bHRzXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlDZW50ZXIgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBlcm1pc3Npb25TZXRzID0ge1xuICAgICAgQWRtaW5pc3RyYXRvckFjY2Vzczoge1xuICAgICAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2Vzc1wiXG4gICAgICB9LFxuICAgICAgQmlsbGluZzoge1xuICAgICAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvam9iLWZ1bmN0aW9uL0JpbGxpbmdcIlxuICAgICAgfSxcbiAgICAgIFJlYWRPbmx5QWNjZXNzOiB7XG4gICAgICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9SZWFkT25seUFjY2Vzc1wiXG4gICAgICB9LFxuICAgICAgU3lzdGVtQWRtaW5pc3RyYXRvcjoge1xuICAgICAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvam9iLWZ1bmN0aW9uL1N5c3RlbUFkbWluaXN0cmF0b3JcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBUT0RPOiBXaGF0J3MgdGhlIGVhc2llciB3YXkgdG8gcGFzcyBhbGwgYWNjb3VudHMgaW50byB0aGUgc3RhY2s/XG4gICAgY29uc3QgYWNjb3VudHMgPSB7XG4gICAgICBtYW5hZ2VtZW50OiBnZXRBY2NvdW50SWQoXCJtYW5hZ2VtZW50XCIpLFxuICAgICAgcHJvZHVjdGlvbjogZ2V0QWNjb3VudElkKFwicHJvZHVjdGlvblwiKSxcbiAgICAgIHN0YWdpbmc6IGdldEFjY291bnRJZChcInN0YWdpbmdcIiksXG4gICAgICBkZXZlbG9wbWVudDogZ2V0QWNjb3VudElkKFwiZGV2ZWxvcG1lbnRcIiksXG4gICAgICBwbGF0Zm9ybTogZ2V0QWNjb3VudElkKFwicGxhdGZvcm1cIiksXG4gICAgICBidXNpbmVzc0NvbnRpbnVpdHk6IGdldEFjY291bnRJZChcImJ1c2luZXNzQ29udGludWl0eVwiKVxuICAgIH07XG5cbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZSA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJsaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVwiLFxuICAgICAgICBvbkNyZWF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6IFwiU1NPQWRtaW5cIixcbiAgICAgICAgICBhY3Rpb246IFwibGlzdEluc3RhbmNlc1wiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIE1heFJlc3VsdHM6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICAgIFwibGlzdElkZW50aXR5Q2VudGVySW5zdGFuY2VcIlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5OiBjdXN0b21SZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1wic3NvOkxpc3RJbnN0YW5jZXNcIl0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6SWFtSWRlbnRpdHlDZW50ZXJcIlxuICAgICAgfVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaWRlbnRpdHlDZW50ZXJBcm5cIiwge1xuICAgICAga2V5OiBcImlkZW50aXR5Q2VudGVyQXJuXCIsXG4gICAgICB2YWx1ZTogY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcIkluc3RhbmNlcy4wLkluc3RhbmNlQXJuXCIpLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eUNlbnRlckFyblwiXG4gICAgfSk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImlkZW50aXR5U3RvcmVJRFwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlTdG9yZUlEXCIsXG4gICAgICB2YWx1ZTogY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcIkluc3RhbmNlcy4wLklkZW50aXR5U3RvcmVJZFwiKSxcbiAgICAgIGV4cG9ydE5hbWU6IFwiaWRlbnRpdHlTdG9yZUlEXCJcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgW3Blcm1pc3Npb25TZXQsIHBlcm1pc3Npb25TZXRBc3NvY2lhdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBkZWZhdWx0UGVybWlzc2lvblNldHNcbiAgICApKSB7XG4gICAgICBjb25zdCBwZXJtU2V0ID0gbmV3IFBlcm1pc3Npb25TZXQodGhpcywgYCR7cGVybWlzc2lvblNldH1QZXJtaXNzaW9uU2V0YCwge1xuICAgICAgICBuYW1lOiBwZXJtaXNzaW9uU2V0LFxuICAgICAgICBpbnN0YW5jZUFybjogY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcIkluc3RhbmNlcy4wLkluc3RhbmNlQXJuXCIpLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkICR7cGVybWlzc2lvblNldH0gcG9saWN5YCxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbcGVybWlzc2lvblNldEFzc29jaWF0aW9uLlBvbGljeV0sXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRzXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJtYW5hZ2VtZW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBHcm91cCh0aGlzLCBgJHtwZXJtaXNzaW9uU2V0fUdyb3VwYCwge1xuICAgICAgICBkaXNwbGF5TmFtZTogcGVybWlzc2lvblNldCxcbiAgICAgICAgaWRlbnRpdHlTdG9yZUlkOiBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgICAgIFwiSW5zdGFuY2VzLjAuSWRlbnRpdHlTdG9yZUlkXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBHcm91cCBmb3IgYXNzb2NpYXRlZCAke3Blcm1pc3Npb25TZXR9IHBlcm1pc3Npb24gc2V0YFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cGVybWlzc2lvblNldH1Hcm91cElkYCwge1xuICAgICAgICBrZXk6IGAke3Blcm1pc3Npb25TZXR9R3JvdXBJZGAsXG4gICAgICAgIHZhbHVlOiBncm91cC5hdHRyR3JvdXBJZCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7cGVybWlzc2lvblNldH1Hcm91cElkYFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgW2FjY291bnQsIGFjY291bnRBcm5dIG9mIE9iamVjdC5lbnRyaWVzKGFjY291bnRzKSkge1xuICAgICAgICBpZiAoIWFjY291bnRBcm4pIGNvbnRpbnVlO1xuXG4gICAgICAgIG5ldyBBc3NpZ25tZW50KHRoaXMsIGAke2FjY291bnR9JHtwZXJtaXNzaW9uU2V0fUFzc29jaWF0aW9uYCwge1xuICAgICAgICAgIGluc3RhbmNlQXJuOiBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgICAgICAgXCJJbnN0YW5jZXMuMC5JbnN0YW5jZUFyblwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICBwZXJtaXNzaW9uU2V0QXJuOiBwZXJtU2V0LmF0dHJQZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgICAgIHByaW5jaXBhbFR5cGU6IFwiR1JPVVBcIixcbiAgICAgICAgICBwcmluY2lwYWxJZDogZ3JvdXAuYXR0ckdyb3VwSWQsXG4gICAgICAgICAgdGFyZ2V0VHlwZTogXCJBV1NfQUNDT1VOVFwiLFxuICAgICAgICAgIHRhcmdldElkOiBhY2NvdW50QXJuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFDaEUsMkNBQXVDO0FBRXZDLHVFQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYsd0VBQXFFO0FBQ3JFLGlEQUFzRDtBQUN0RCx3RkFBcUY7QUFDckYsa0ZBQStFO0FBRS9FLHFFQUFrRTtBQUtsRSxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUszQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFIWix5QkFBb0IsR0FBWSxFQUFFLENBQUM7UUFLeEMsdUVBQXVFO1FBQ3ZFLE1BQU0scUJBQXFCLEdBQUc7WUFDNUIsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSw2Q0FBNkM7YUFDdEQ7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLDhDQUE4QzthQUN2RDtZQUNELGNBQWMsRUFBRTtnQkFDZCxNQUFNLEVBQUUsd0NBQXdDO2FBQ2pEO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSwwREFBMEQ7YUFDbkU7U0FDRixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQ0FBaUIsQ0FDMUMsSUFBSSxFQUNKLDRCQUE0QixFQUM1QjtZQUNFLFlBQVksRUFBRSw0QkFBNEI7WUFDMUMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUsc0JBQXNCO2dCQUM5QixVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLENBQUM7aUJBQ2Q7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQsNEJBQTRCLENBQzdCO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsZUFBZSxDQUFD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aW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY2ZuT3V0cHV0XCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvZ3JvdXBcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2V0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtL2lkZW50aXR5Q2VudGVyL3Blcm1pc3Npb25TZXRcIjtcbmltcG9ydCB7IEFzc2lnbm1lbnQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvYXNzaWdubWVudFwiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHN0cmlwQW5kQ2FtZWxDYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmlwQW5kQ2FtZWxDYXNlXCI7XG5cbmludGVyZmFjZSBJZGVudGl0eUNlbnRlclByb3BzIHtcbiAgYWNjb3VudHM6IEtleVZhbHVlO1xufVxuZXhwb3J0IGNsYXNzIElkZW50aXR5Q2VudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGlkZW50aXR5U3RvcmVJZDogc3RyaW5nO1xuICBwdWJsaWMgaWRlbnRpdHlDZW50ZXJBcm46IHN0cmluZztcbiAgcHVibGljIGlkZW50aXR5Q2VudGVyR3JvdXBzOiBHcm91cFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElkZW50aXR5Q2VudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVE9ETzogU2hvdWxkIG9ubHkgdXNlIHRoaXMgaWYgbm8gZ3JvdXBzIGFyZSBwcm92aWRlZCBieSB0aGUgZW5kIHVzZXJcbiAgICBjb25zdCBkZWZhdWx0UGVybWlzc2lvblNldHMgPSB7XG4gICAgICBBZG1pbmlzdHJhdG9yQWNjZXNzOiB7XG4gICAgICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzXCJcbiAgICAgIH0sXG4gICAgICBCaWxsaW5nOiB7XG4gICAgICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9qb2ItZnVuY3Rpb24vQmlsbGluZ1wiXG4gICAgICB9LFxuICAgICAgUmVhZE9ubHlBY2Nlc3M6IHtcbiAgICAgICAgUG9saWN5OiBcImFybjphd3M6aWFtOjphd3M6cG9saWN5L1JlYWRPbmx5QWNjZXNzXCJcbiAgICAgIH0sXG4gICAgICBTeXN0ZW1BZG1pbmlzdHJhdG9yOiB7XG4gICAgICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9qb2ItZnVuY3Rpb24vU3lzdGVtQWRtaW5pc3RyYXRvclwiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVJlc291cmNlID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgdGhpcyxcbiAgICAgIFwibGlzdElkZW50aXR5Q2VudGVySW5zdGFuY2VcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCIsXG4gICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgICBhY3Rpb246IFwiTGlzdEluc3RhbmNlc0NvbW1hbmRcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBNYXhSZXN1bHRzOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCJcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbzpMaXN0SW5zdGFuY2VzXCJdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OklhbUlkZW50aXR5Q2VudGVyXCJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5pZGVudGl0eUNlbnRlckFybiA9IGN1c3RvbVJlc291cmNlLmdldFJlc3BvbnNlRmllbGQoXG4gICAgICBcIkluc3RhbmNlcy4wLkluc3RhbmNlQXJuXCJcbiAgICApO1xuICAgIHRoaXMuaWRlbnRpdHlTdG9yZUlkID0gY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcbiAgICAgIFwiSW5zdGFuY2VzLjAuSWRlbnRpdHlTdG9yZUlkXCJcbiAgICApO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpZGVudGl0eUNlbnRlckFyblwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlDZW50ZXJBcm5cIixcbiAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eUNlbnRlckFyblwiXG4gICAgfSk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImlkZW50aXR5U3RvcmVJZFwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlTdG9yZUlEXCIsXG4gICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eVN0b3JlSWQsXG4gICAgICBleHBvcnROYW1lOiBcImlkZW50aXR5U3RvcmVJZFwiXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtwZXJtaXNzaW9uU2V0LCBwZXJtaXNzaW9uU2V0QXNzb2NpYXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgZGVmYXVsdFBlcm1pc3Npb25TZXRzXG4gICAgKSkge1xuICAgICAgY29uc3QgcGVybVNldCA9IG5ldyBQZXJtaXNzaW9uU2V0KHRoaXMsIGAke3Blcm1pc3Npb25TZXR9UGVybWlzc2lvblNldGAsIHtcbiAgICAgICAgbmFtZTogcGVybWlzc2lvblNldCxcbiAgICAgICAgaW5zdGFuY2VBcm46IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGVybWlzc2lvbiBzZXQgZm9yIGFzc29jaWF0ZWQgJHtwZXJtaXNzaW9uU2V0fSBwb2xpY3lgLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtwZXJtaXNzaW9uU2V0QXNzb2NpYXRpb24uUG9saWN5XSxcbiAgICAgICAgdGFnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IFwibWFuYWdlbWVudFwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgR3JvdXAodGhpcywgYCR7cGVybWlzc2lvblNldH1Hcm91cGAsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHBlcm1pc3Npb25TZXQsXG4gICAgICAgIGlkZW50aXR5U3RvcmVJZDogdGhpcy5pZGVudGl0eVN0b3JlSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgR3JvdXAgZm9yIGFzc29jaWF0ZWQgJHtwZXJtaXNzaW9uU2V0fSBwZXJtaXNzaW9uIHNldGBcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pZGVudGl0eUNlbnRlckdyb3Vwcy5wdXNoKGdyb3VwKTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwZXJtaXNzaW9uU2V0fUdyb3VwSWRgLCB7XG4gICAgICAgIGtleTogYCR7cGVybWlzc2lvblNldH1Hcm91cElkYCxcbiAgICAgICAgdmFsdWU6IGdyb3VwLmF0dHJHcm91cElkLFxuICAgICAgICBleHBvcnROYW1lOiBgJHtwZXJtaXNzaW9uU2V0fUdyb3VwSWRgXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBbYWNjb3VudE5hbWUsIGFjY291bnRJZF0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMuYWNjb3VudHMpKSB7XG4gICAgICAgIGlmICghYWNjb3VudElkKSBjb250aW51ZTtcblxuICAgICAgICBuZXcgQXNzaWdubWVudChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3N0cmlwQW5kQ2FtZWxDYXNlKGFjY291bnROYW1lKX0ke3Blcm1pc3Npb25TZXR9QXNzb2NpYXRpb25gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluc3RhbmNlQXJuOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgICAgICAgcGVybWlzc2lvblNldEFybjogcGVybVNldC5hdHRyUGVybWlzc2lvblNldEFybixcbiAgICAgICAgICAgIHByaW5jaXBhbFR5cGU6IFwiR1JPVVBcIixcbiAgICAgICAgICAgIHByaW5jaXBhbElkOiBncm91cC5hdHRyR3JvdXBJZCxcbiAgICAgICAgICAgIHRhcmdldFR5cGU6IFwiQVdTX0FDQ09VTlRcIixcbiAgICAgICAgICAgIHRhcmdldElkOiBhY2NvdW50SWRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ import { Construct } from "constructs";
2
+ import { Group } from "../../resources/aws/iam/identityCenter/group";
3
+ export interface User {
4
+ email: string;
5
+ firstName: string;
6
+ lastName: string;
7
+ groups: string[];
8
+ }
9
+ interface IdentityCenterUserProps {
10
+ identityStoreId: string;
11
+ identityCenterGroups: Group[];
12
+ }
13
+ export declare class IdentityCenterUser extends Construct {
14
+ constructor(scope: Construct, id: string, props: IdentityCenterUserProps);
15
+ }
16
+ export {};