@fjall/components-infrastructure 0.1.5 → 0.1.10

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 (133) hide show
  1. package/dist/lib/config/aws/costAllocationTags.js +58 -0
  2. package/dist/lib/config/aws/delegateHostedZoneRole.d.ts +5 -0
  3. package/dist/lib/config/aws/delegateHostedZoneRole.js +77 -0
  4. package/dist/lib/config/aws/identityCenter.js +107 -0
  5. package/dist/lib/config/aws/index.d.ts +8 -0
  6. package/dist/lib/config/aws/index.js +25 -0
  7. package/dist/lib/config/aws/ipam.d.ts +5 -0
  8. package/dist/lib/config/aws/ipam.js +30 -0
  9. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +9 -0
  10. package/dist/lib/config/aws/ipamDelegateAdmin.js +62 -0
  11. package/dist/lib/config/aws/ipamPool.d.ts +5 -0
  12. package/dist/lib/config/aws/ipamPool.js +56 -0
  13. package/dist/lib/config/aws/{base/iamIdentityCenter.d.ts → ipamPoolResourceShare.d.ts} +2 -2
  14. package/dist/lib/config/aws/ipamPoolResourceShare.js +42 -0
  15. package/dist/lib/config/aws/organisationId.d.ts +5 -0
  16. package/dist/lib/config/aws/organisationId.js +40 -0
  17. package/dist/lib/config/aws/{base/ipamPool.d.ts → ramEnableSharing.d.ts} +1 -1
  18. package/dist/lib/config/aws/ramEnableSharing.js +35 -0
  19. package/dist/lib/config/aws/{base/ipam.d.ts → users.d.ts} +1 -1
  20. package/dist/lib/config/aws/users.js +126 -0
  21. package/dist/lib/config/fjall/hostedZones/fjall.io.d.ts +10 -0
  22. package/dist/lib/config/fjall/hostedZones/fjall.io.js +25 -0
  23. package/dist/lib/index.d.ts +3 -0
  24. package/dist/lib/index.js +4 -1
  25. package/dist/lib/patterns/aws/basicApp.d.ts +47 -0
  26. package/dist/lib/patterns/aws/basicApp.js +90 -0
  27. package/dist/lib/patterns/aws/buildkite.d.ts +50 -0
  28. package/dist/lib/patterns/aws/buildkite.js +344 -0
  29. package/dist/lib/patterns/aws/index.d.ts +2 -2
  30. package/dist/lib/patterns/aws/index.js +3 -3
  31. package/dist/lib/patterns/aws/{multiEnvironmentOrganisation.d.ts → managedOrganisation.d.ts} +8 -10
  32. package/dist/lib/patterns/aws/managedOrganisation.js +159 -0
  33. package/dist/lib/resources/aws/awsStack.d.ts +5 -0
  34. package/dist/lib/resources/aws/awsStack.js +11 -1
  35. package/dist/lib/resources/aws/compute/ecs.d.ts +76 -0
  36. package/dist/lib/resources/aws/compute/ecs.js +265 -0
  37. package/dist/lib/resources/aws/compute/lambda.d.ts +12 -5
  38. package/dist/lib/resources/aws/compute/lambda.js +23 -5
  39. package/dist/lib/resources/aws/constant/ecr.js +4 -3
  40. package/dist/lib/resources/aws/constant/vpc.d.ts +10 -2
  41. package/dist/lib/resources/aws/constant/vpc.js +18 -8
  42. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +13 -0
  43. package/dist/lib/resources/aws/iam/identityCenter/group.js +14 -0
  44. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +13 -0
  45. package/dist/lib/resources/aws/iam/index.d.ts +5 -0
  46. package/dist/lib/resources/aws/iam/index.js +22 -0
  47. package/dist/lib/resources/aws/iam/instanceProfile.d.ts +5 -0
  48. package/dist/lib/resources/aws/iam/instanceProfile.js +13 -0
  49. package/dist/lib/resources/aws/iam/managedPolicy.d.ts +5 -0
  50. package/dist/lib/resources/aws/iam/managedPolicy.js +14 -0
  51. package/dist/lib/resources/aws/iam/policy.d.ts +5 -0
  52. package/dist/lib/resources/aws/iam/policy.js +13 -0
  53. package/dist/lib/resources/aws/iam/role.js +2 -7
  54. package/dist/lib/resources/aws/iam/securityGroup.d.ts +5 -0
  55. package/dist/lib/resources/aws/iam/securityGroup.js +14 -0
  56. package/dist/lib/resources/aws/index.d.ts +1 -0
  57. package/dist/lib/resources/aws/index.js +18 -0
  58. package/dist/lib/resources/aws/logging/logGroup.d.ts +5 -1
  59. package/dist/lib/resources/aws/logging/logGroup.js +4 -5
  60. package/dist/lib/resources/aws/networking/hostedZone.d.ts +19 -3
  61. package/dist/lib/resources/aws/networking/hostedZone.js +59 -11
  62. package/dist/lib/resources/aws/networking/index.d.ts +3 -0
  63. package/dist/lib/resources/aws/networking/index.js +20 -0
  64. package/dist/lib/resources/aws/networking/ipam.d.ts +2 -2
  65. package/dist/lib/resources/aws/networking/ipam.js +3 -3
  66. package/dist/lib/resources/aws/networking/ipamPool.d.ts +3 -7
  67. package/dist/lib/resources/aws/networking/ipamPool.js +5 -27
  68. package/dist/lib/resources/aws/store/alias.d.ts +5 -0
  69. package/dist/lib/resources/aws/store/alias.js +13 -0
  70. package/dist/lib/resources/aws/store/database.d.ts +7 -2
  71. package/dist/lib/resources/aws/store/database.js +9 -5
  72. package/dist/lib/resources/aws/store/index.d.ts +7 -0
  73. package/dist/lib/resources/aws/store/index.js +24 -0
  74. package/dist/lib/resources/aws/store/kms.d.ts +14 -0
  75. package/dist/lib/resources/aws/store/kms.js +34 -0
  76. package/dist/lib/resources/aws/store/parameter.d.ts +26 -0
  77. package/dist/lib/resources/aws/store/parameter.js +100 -0
  78. package/dist/lib/resources/aws/store/rds.d.ts +15 -15
  79. package/dist/lib/resources/aws/store/rds.js +110 -68
  80. package/dist/lib/resources/aws/store/s3.d.ts +11 -0
  81. package/dist/lib/resources/aws/store/s3.js +43 -0
  82. package/dist/lib/resources/aws/store/secret.d.ts +26 -0
  83. package/dist/lib/resources/aws/store/secret.js +55 -0
  84. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -6
  85. package/dist/lib/resources/aws/utilities/cfnOutput.js +2 -5
  86. package/dist/lib/resources/aws/utilities/customResource.d.ts +20 -3
  87. package/dist/lib/resources/aws/utilities/customResource.js +24 -5
  88. package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -5
  89. package/dist/lib/resources/aws/utilities/resourceShare.d.ts +5 -0
  90. package/dist/lib/resources/aws/utilities/resourceShare.js +13 -0
  91. package/dist/lib/resources/index.d.ts +1 -0
  92. package/dist/lib/resources/index.js +18 -0
  93. package/dist/lib/utils/getAccountId.d.ts +1 -0
  94. package/dist/lib/utils/getAccountId.js +11 -0
  95. package/dist/lib/utils/getConfig.d.ts +4 -3
  96. package/dist/lib/utils/getConfig.js +26 -12
  97. package/dist/lib/utils/getStackOutput.d.ts +1 -0
  98. package/dist/lib/utils/getStackOutput.js +20 -0
  99. package/dist/lib/utils/index.d.ts +1 -0
  100. package/dist/lib/utils/index.js +18 -0
  101. package/dist/lib/utils/tagResource.d.ts +4 -0
  102. package/dist/lib/utils/tagResource.js +10 -0
  103. package/package.json +23 -18
  104. package/dist/lib/config/aws/base/costAllocationTags.js +0 -57
  105. package/dist/lib/config/aws/base/iamIdentityCenter.js +0 -86
  106. package/dist/lib/config/aws/base/identityCenter.js +0 -90
  107. package/dist/lib/config/aws/base/ipam.js +0 -29
  108. package/dist/lib/config/aws/base/ipamPool.js +0 -46
  109. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.d.ts +0 -2
  110. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.js +0 -62
  111. package/dist/lib/examples/cutomResourceExample.d.ts +0 -6
  112. package/dist/lib/examples/cutomResourceExample.js +0 -45
  113. package/dist/lib/patterns/aws/customResource.d.ts +0 -7
  114. package/dist/lib/patterns/aws/customResource.js +0 -28
  115. package/dist/lib/patterns/aws/multiEnvironmentOrganisation.js +0 -107
  116. package/dist/lib/patterns/aws/webApp.d.ts +0 -17
  117. package/dist/lib/patterns/aws/webApp.js +0 -36
  118. package/dist/lib/resources/aws/compute/__tests__/fargate.test.d.ts +0 -1
  119. package/dist/lib/resources/aws/compute/__tests__/fargate.test.js +0 -21
  120. package/dist/lib/resources/aws/compute/fargate.d.ts +0 -23
  121. package/dist/lib/resources/aws/compute/fargate.js +0 -50
  122. package/dist/lib/resources/aws/constant/__tests__/vpc.test.d.ts +0 -1
  123. package/dist/lib/resources/aws/constant/__tests__/vpc.test.js +0 -13
  124. package/dist/lib/resources/aws/iam/assignment.js +0 -13
  125. package/dist/lib/resources/aws/iam/group.js +0 -15
  126. package/dist/lib/resources/aws/iam/iamRole.d.ts +0 -5
  127. package/dist/lib/resources/aws/iam/iamRole.js +0 -18
  128. package/dist/lib/resources/aws/iam/permissionSet.js +0 -13
  129. /package/dist/lib/config/aws/{base/costAllocationTags.d.ts → costAllocationTags.d.ts} +0 -0
  130. /package/dist/lib/config/aws/{base/identityCenter.d.ts → identityCenter.d.ts} +0 -0
  131. /package/dist/lib/resources/aws/iam/{assignment.d.ts → identityCenter/assignment.d.ts} +0 -0
  132. /package/dist/lib/resources/aws/iam/{group.d.ts → identityCenter/group.d.ts} +0 -0
  133. /package/dist/lib/resources/aws/iam/{permissionSet.d.ts → identityCenter/permissionSet.d.ts} +0 -0
@@ -5,12 +5,9 @@ const cdk = require("aws-cdk-lib");
5
5
  class CfnOutput extends cdk.CfnOutput {
6
6
  constructor(scope, id, props) {
7
7
  super(scope, id, {
8
- ...props,
9
- value: props.value,
10
- description: props.description,
11
- exportName: props.exportName
8
+ ...props, // https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html
12
9
  });
13
10
  }
14
11
  }
15
12
  exports.CfnOutput = CfnOutput;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFHbkMsTUFBYSxTQUFVLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVRELDhCQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIENmbk91dHB1dCBleHRlbmRzIGNkay5DZm5PdXRwdXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogY2RrLkNmbk91dHB1dFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGV4cG9ydE5hbWU6IHByb3BzLmV4cG9ydE5hbWVcbiAgICB9KTtcbiAgfVxufVxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFHbkMsTUFBYSxTQUFVLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSyxFQUFFLHlFQUF5RTtTQUNwRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFORCw4QkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBDZm5PdXRwdXQgZXh0ZW5kcyBjZGsuQ2ZuT3V0cHV0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGNkay5DZm5PdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuQ2ZuT3V0cHV0Lmh0bWxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,5 +1,22 @@
1
- import * as cdk from "aws-cdk-lib";
1
+ import { AssetOptions } from "aws-cdk-lib";
2
+ import { PolicyDocument } from "aws-cdk-lib/aws-iam";
3
+ import { Runtime } from "aws-cdk-lib/aws-lambda";
2
4
  import { Construct } from "constructs";
3
- export declare class CustomResource extends cdk.CustomResource {
4
- constructor(scope: Construct, id: string, props: cdk.CustomResourceProps);
5
+ interface CustomResourceProps {
6
+ runtime: Runtime;
7
+ roleDescription?: string;
8
+ lambdaDescription?: string;
9
+ inlinePolicy: {
10
+ [name: string]: PolicyDocument;
11
+ };
12
+ properties?: {
13
+ [key: string]: string;
14
+ };
15
+ codePath: string;
16
+ assetOptions?: AssetOptions;
5
17
  }
18
+ export declare class CustomResource extends Construct {
19
+ readonly response: string;
20
+ constructor(scope: Construct, id: string, props: CustomResourceProps);
21
+ }
22
+ export {};
@@ -1,13 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CustomResource = void 0;
4
- const cdk = require("aws-cdk-lib");
5
- class CustomResource extends cdk.CustomResource {
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const custom_resources_1 = require("aws-cdk-lib/custom-resources");
6
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
7
+ const constructs_1 = require("constructs");
8
+ const lambda_1 = require("../compute/lambda");
9
+ class CustomResource extends constructs_1.Construct {
6
10
  constructor(scope, id, props) {
7
- super(scope, id, {
8
- ...props,
11
+ super(scope, id);
12
+ const lambdaFunction = new lambda_1.singletonFunction(this, `${id}Lambda`, {
13
+ code: aws_lambda_1.Code.fromAsset(props.codePath, props.assetOptions),
14
+ handler: `${id}.handler`,
15
+ runtime: props.runtime,
16
+ lambdaDescription: props.lambdaDescription || `${id} lambda`,
17
+ roleDescription: props.roleDescription || `${id} custom resource lambda`,
18
+ inlinePolicy: props.inlinePolicy
9
19
  });
20
+ const provider = new custom_resources_1.Provider(this, `${id}Provider`, {
21
+ onEventHandler: lambdaFunction,
22
+ logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_YEAR
23
+ });
24
+ const resource = new aws_cdk_lib_1.CustomResource(this, `${id}Resource`, {
25
+ serviceToken: provider.serviceToken,
26
+ properties: props.properties
27
+ });
28
+ this.response = resource.getAtt("Response").toString();
10
29
  }
11
30
  }
12
31
  exports.CustomResource = CustomResource;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBR25DLE1BQWEsY0FBZSxTQUFRLEdBQUcsQ0FBQyxjQUFjO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFORCx3Q0FNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21SZXNvdXJjZSBleHRlbmRzIGNkay5DdXN0b21SZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBjZGsuQ3VzdG9tUmVzb3VyY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVGO0FBQ3ZGLG1FQUF3RDtBQUV4RCx1REFBdUQ7QUFDdkQsMkNBQXVDO0FBRXZDLDhDQUFzRDtBQWdCdEQsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFHM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sY0FBYyxHQUFHLElBQUksMEJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7WUFDOUQsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUN4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVU7WUFDeEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEVBQUUsU0FBUztZQUM1RCxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUUseUJBQXlCO1lBQ3hFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7WUFDakQsY0FBYyxFQUFFLGNBQWM7WUFDOUIsWUFBWSxFQUFFLHNCQUFRLENBQUMsYUFBYSxDQUFDLFFBQVE7U0FDaEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQTVCRCx3Q0E0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSBhcyBjdXN0b21SZXNvdXJjZSwgYXdzX2xvZ3MsIEFzc2V0T3B0aW9ucyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBzaW5nbGV0b25GdW5jdGlvbiB9IGZyb20gXCIuLi9jb21wdXRlL2xhbWJkYVwiO1xuXG5cbmludGVyZmFjZSBDdXN0b21SZXNvdXJjZVByb3BzIHtcbiAgcnVudGltZTogUnVudGltZTtcbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYW1iZGFEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5saW5lUG9saWN5OiB7XG4gICAgW25hbWU6IHN0cmluZ106IFBvbGljeURvY3VtZW50O1xuICB9O1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gVXNlZCB0byBiZSBgW2tleTogc3RyaW5nXTogYW55YCwgdGhpcyBjb3VsZCBicmVha1xuICB9O1xuICBjb2RlUGF0aDogc3RyaW5nO1xuICBhc3NldE9wdGlvbnM/OiBBc3NldE9wdGlvbnNcbn1cbmV4cG9ydCBjbGFzcyBDdXN0b21SZXNvdXJjZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDdXN0b21SZXNvdXJjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IHNpbmdsZXRvbkZ1bmN0aW9uKHRoaXMsIGAke2lkfUxhbWJkYWAsIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocHJvcHMuY29kZVBhdGgsIHByb3BzLmFzc2V0T3B0aW9ucyksXG4gICAgICAgIGhhbmRsZXI6IGAke2lkfS5oYW5kbGVyYCxcbiAgICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgICAgbGFtYmRhRGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBsYW1iZGFgLFxuICAgICAgICByb2xlRGVzY3JpcHRpb246IHByb3BzLnJvbGVEZXNjcmlwdGlvbiB8fCBgJHtpZH0gY3VzdG9tIHJlc291cmNlIGxhbWJkYWAsXG4gICAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIGAke2lkfVByb3ZpZGVyYCwge1xuICAgICAgICBvbkV2ZW50SGFuZGxlcjogbGFtYmRhRnVuY3Rpb24sXG4gICAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfWUVBUlxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgY3VzdG9tUmVzb3VyY2UodGhpcywgYCR7aWR9UmVzb3VyY2VgLCB7XG4gICAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wcy5wcm9wZXJ0aWVzXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzb3VyY2UuZ2V0QXR0KFwiUmVzcG9uc2VcIikudG9TdHJpbmcoKTtcbiAgfVxufVxuIl19
@@ -7,13 +7,9 @@ class CustomResourceProvider extends custom_resources_1.Provider {
7
7
  constructor(scope, id, props) {
8
8
  super(scope, id, {
9
9
  ...props,
10
- onEventHandler: props.onEventHandler,
11
10
  logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_YEAR,
12
- providerFunctionName: props.providerFunctionName,
13
- role: props.role,
14
- vpc: props.vpc
15
11
  });
16
12
  }
17
13
  }
18
14
  exports.CustomResourceProvider = CustomResourceProvider;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2VQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9jdXN0b21SZXNvdXJjZVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1QztBQUN2QyxtRUFBdUU7QUFHdkUsTUFBYSxzQkFBdUIsU0FBUSwyQkFBUTtJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLFlBQVksRUFBRSxzQkFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1lBQzdDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7WUFDaEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVhELHdEQVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX2xvZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFByb3ZpZGVyLCBQcm92aWRlclByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21SZXNvdXJjZVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXIge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBvbkV2ZW50SGFuZGxlcjogcHJvcHMub25FdmVudEhhbmRsZXIsXG4gICAgICBsb2dSZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuT05FX1lFQVIsXG4gICAgICBwcm92aWRlckZ1bmN0aW9uTmFtZTogcHJvcHMucHJvdmlkZXJGdW5jdGlvbk5hbWUsXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdnBjOiBwcm9wcy52cGNcbiAgICB9KTtcbiAgfVxufVxuIl19
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tUmVzb3VyY2VQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9jdXN0b21SZXNvdXJjZVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1QztBQUN2QyxtRUFBdUU7QUFHdkUsTUFBYSxzQkFBdUIsU0FBUSwyQkFBUTtJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsWUFBWSxFQUFFLHNCQUFRLENBQUMsYUFBYSxDQUFDLFFBQVE7U0FDOUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBUEQsd0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfbG9ncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUHJvdmlkZXIsIFByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIEN1c3RvbVJlc291cmNlUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcywgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5DdXN0b21SZXNvdXJjZVByb3ZpZGVyLmh0bWxcbiAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfWUVBUixcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ import { CfnResourceShare, CfnResourceShareProps } from 'aws-cdk-lib/aws-ram';
2
+ import { Construct } from "constructs";
3
+ export declare class ResourceShare extends CfnResourceShare {
4
+ constructor(scope: Construct, id: string, props: CfnResourceShareProps);
5
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceShare = void 0;
4
+ const aws_ram_1 = require("aws-cdk-lib/aws-ram");
5
+ class ResourceShare extends aws_ram_1.CfnResourceShare {
6
+ constructor(scope, id, props) {
7
+ super(scope, id, {
8
+ ...props, // https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ram.CfnResourceShare.html
9
+ });
10
+ }
11
+ }
12
+ exports.ResourceShare = ResourceShare;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VTaGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9yZXNvdXJjZVNoYXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE4RTtBQUc5RSxNQUFhLGFBQWMsU0FBUSwwQkFBZ0I7SUFDakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSyxFQUFFLHdGQUF3RjtTQUNuRyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFORCxzQ0FNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblJlc291cmNlU2hhcmUsIENmblJlc291cmNlU2hhcmVQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc291cmNlU2hhcmUgZXh0ZW5kcyBDZm5SZXNvdXJjZVNoYXJlIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENmblJlc291cmNlU2hhcmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX3JhbS5DZm5SZXNvdXJjZVNoYXJlLmh0bWxcbiAgICB9KVxuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from "./aws";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./aws"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcmVzb3VyY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hd3NcIjtcbiJdfQ==
@@ -0,0 +1 @@
1
+ export default function getAccountId(environment: string): null | string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const getConfig_1 = require("./getConfig");
4
+ function getAccountId(environment) {
5
+ const config = (0, getConfig_1.getEnviornmentConfig)(environment);
6
+ if (!config || !config.account)
7
+ return null;
8
+ return config.account;
9
+ }
10
+ exports.default = getAccountId;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0QWNjb3VudElkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL2dldEFjY291bnRJZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUFtRDtBQUVuRCxTQUF3QixZQUFZLENBQUMsV0FBbUI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxnQ0FBb0IsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87UUFBRSxPQUFPLElBQUksQ0FBQztJQUU1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQztBQUxELCtCQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RW52aW9ybm1lbnRDb25maWcgfSBmcm9tIFwiLi9nZXRDb25maWdcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWNjb3VudElkKGVudmlyb25tZW50OiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0RW52aW9ybm1lbnRDb25maWcoZW52aXJvbm1lbnQpO1xuICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLmFjY291bnQpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBjb25maWcuYWNjb3VudDtcbn1cbiJdfQ==
@@ -1,7 +1,8 @@
1
1
  interface Config {
2
- environment?: string;
2
+ environment: string;
3
3
  account?: string;
4
4
  region?: string;
5
5
  }
6
- export default function getConfig(): Config;
7
- export {};
6
+ export declare function getEnviornmentConfig(environment: string): Config;
7
+ export declare function getConfig(): Config;
8
+ export default getConfig;
@@ -1,22 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs_1 = require("fs");
3
+ exports.getConfig = exports.getEnviornmentConfig = void 0;
4
4
  const app_1 = require("../app");
5
+ const util_1 = require("@fjall/util");
6
+ function getEnviornmentConfig(environment) {
7
+ const config = util_1.Config.loadConfig();
8
+ const providerAccount = config.getProviderAccount(environment);
9
+ if (!providerAccount) {
10
+ console.warn(`No provider account found for environment: ${environment}`);
11
+ throw new Error(`No provider account found for environment: ${environment}`);
12
+ }
13
+ return {
14
+ environment: environment,
15
+ account: providerAccount.id
16
+ };
17
+ }
18
+ exports.getEnviornmentConfig = getEnviornmentConfig;
5
19
  function getConfig() {
6
20
  const app = app_1.default.getInstance();
7
21
  // Get cdk deploy --context config
8
22
  const env = app.node.tryGetContext("environment");
9
- try {
10
- // Load config json file
11
- const configFile = (0, fs_1.readFileSync)(`../${env}.json`, "utf8");
12
- const config = JSON.parse(configFile);
13
- config.enviornment = env;
14
- return JSON.parse(configFile);
15
- }
16
- catch (err) {
17
- console.warn(`No config file found for environment: ${env}`);
18
- return {};
23
+ const config = util_1.Config.loadConfig();
24
+ const providerAccount = config.getProviderAccount(env);
25
+ if (!providerAccount) {
26
+ console.warn(`No provider account found for environment: ${env}. Defaulting to no account`);
27
+ // throw new Error(`No provider account found for environment: ${env}`);
19
28
  }
29
+ return {
30
+ environment: env,
31
+ account: providerAccount?.id
32
+ };
20
33
  }
34
+ exports.getConfig = getConfig;
21
35
  exports.default = getConfig;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL2dldENvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJCQUFrQztBQUNsQyxnQ0FBeUI7QUFRekIsU0FBd0IsU0FBUztJQUMvQixNQUFNLEdBQUcsR0FBRyxhQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFOUIsa0NBQWtDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRWxELElBQUk7UUFDRix3QkFBd0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBQSxpQkFBWSxFQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDL0I7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDN0QsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUM7QUFoQkQsNEJBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi9hcHBcIjtcblxuaW50ZXJmYWNlIENvbmZpZyB7XG4gIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICBhY2NvdW50Pzogc3RyaW5nO1xuICByZWdpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbmZpZygpOiBDb25maWcge1xuICBjb25zdCBhcHAgPSBBcHAuZ2V0SW5zdGFuY2UoKTtcblxuICAvLyBHZXQgY2RrIGRlcGxveSAtLWNvbnRleHQgY29uZmlnXG4gIGNvbnN0IGVudiA9IGFwcC5ub2RlLnRyeUdldENvbnRleHQoXCJlbnZpcm9ubWVudFwiKTtcblxuICB0cnkge1xuICAgIC8vIExvYWQgY29uZmlnIGpzb24gZmlsZVxuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSByZWFkRmlsZVN5bmMoYC4uLyR7ZW52fS5qc29uYCwgXCJ1dGY4XCIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnRmlsZSk7XG4gICAgY29uZmlnLmVudmlvcm5tZW50ID0gZW52O1xuICAgIHJldHVybiBKU09OLnBhcnNlKGNvbmZpZ0ZpbGUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLndhcm4oYE5vIGNvbmZpZyBmaWxlIGZvdW5kIGZvciBlbnZpcm9ubWVudDogJHtlbnZ9YCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL2dldENvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnQ0FBeUI7QUFDekIsc0NBQW9EO0FBUXBELFNBQWdCLG9CQUFvQixDQUFDLFdBQW1CO0lBQ3RELE1BQU0sTUFBTSxHQUFHLGFBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFL0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sSUFBSSxLQUFLLENBQ2IsOENBQThDLFdBQVcsRUFBRSxDQUM1RCxDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLFdBQVc7UUFDeEIsT0FBTyxFQUFFLGVBQWUsQ0FBQyxFQUFFO0tBQzVCLENBQUM7QUFDSixDQUFDO0FBZkQsb0RBZUM7QUFFRCxTQUFnQixTQUFTO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLGFBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUU5QixrQ0FBa0M7SUFDbEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEQsTUFBTSxNQUFNLEdBQUcsYUFBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2RCxJQUFJLENBQUMsZUFBZSxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsOENBQThDLEdBQUcsNEJBQTRCLENBQUMsQ0FBQztRQUM5RiwwRUFBMEU7S0FDekU7SUFFRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLEdBQUc7UUFDaEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFO0tBQzdCLENBQUM7QUFDSixDQUFDO0FBbEJELDhCQWtCQztBQUNELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHAgZnJvbSBcIi4uL2FwcFwiO1xuaW1wb3J0IHsgQ29uZmlnIGFzIEZqYWxsQ29uZmlnIH0gZnJvbSBcIkBmamFsbC91dGlsXCI7XG5cbmludGVyZmFjZSBDb25maWcge1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBhY2NvdW50Pzogc3RyaW5nO1xuICByZWdpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnZpb3JubWVudENvbmZpZyhlbnZpcm9ubWVudDogc3RyaW5nKTogQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0gRmphbGxDb25maWcubG9hZENvbmZpZygpO1xuICBjb25zdCBwcm92aWRlckFjY291bnQgPSBjb25maWcuZ2V0UHJvdmlkZXJBY2NvdW50KGVudmlyb25tZW50KTtcblxuICBpZiAoIXByb3ZpZGVyQWNjb3VudCkge1xuICAgIGNvbnNvbGUud2FybihgTm8gcHJvdmlkZXIgYWNjb3VudCBmb3VuZCBmb3IgZW52aXJvbm1lbnQ6ICR7ZW52aXJvbm1lbnR9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE5vIHByb3ZpZGVyIGFjY291bnQgZm91bmQgZm9yIGVudmlyb25tZW50OiAke2Vudmlyb25tZW50fWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgYWNjb3VudDogcHJvdmlkZXJBY2NvdW50LmlkXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogQ29uZmlnIHtcbiAgY29uc3QgYXBwID0gQXBwLmdldEluc3RhbmNlKCk7XG5cbiAgLy8gR2V0IGNkayBkZXBsb3kgLS1jb250ZXh0IGNvbmZpZ1xuICBjb25zdCBlbnYgPSBhcHAubm9kZS50cnlHZXRDb250ZXh0KFwiZW52aXJvbm1lbnRcIik7XG5cbiAgY29uc3QgY29uZmlnID0gRmphbGxDb25maWcubG9hZENvbmZpZygpO1xuICBjb25zdCBwcm92aWRlckFjY291bnQgPSBjb25maWcuZ2V0UHJvdmlkZXJBY2NvdW50KGVudik7XG5cbiAgaWYgKCFwcm92aWRlckFjY291bnQpIHtcbiAgICBjb25zb2xlLndhcm4oYE5vIHByb3ZpZGVyIGFjY291bnQgZm91bmQgZm9yIGVudmlyb25tZW50OiAke2Vudn0uIERlZmF1bHRpbmcgdG8gbm8gYWNjb3VudGApO1xuICAvLyAgIHRocm93IG5ldyBFcnJvcihgTm8gcHJvdmlkZXIgYWNjb3VudCBmb3VuZCBmb3IgZW52aXJvbm1lbnQ6ICR7ZW52fWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnZpcm9ubWVudDogZW52LFxuICAgIGFjY291bnQ6IHByb3ZpZGVyQWNjb3VudD8uaWRcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGdldENvbmZpZztcbiJdfQ==
@@ -0,0 +1 @@
1
+ export default function getStackOutput(stackname: string, key: string): any;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fs_1 = require("fs");
4
+ function getStackOutput(stackname, key) {
5
+ const path = `./output/${stackname}.json`;
6
+ try {
7
+ (0, fs_1.accessSync)(path, fs_1.constants.R_OK);
8
+ }
9
+ catch (error) {
10
+ // File does not exist or we do not have permissions to read it
11
+ return undefined;
12
+ }
13
+ const stackOutputFile = (0, fs_1.readFileSync)(path, "utf8");
14
+ const stackOuput = JSON.parse(stackOutputFile);
15
+ for (const [, value] of Object.entries(stackOuput)) {
16
+ return value[`${key}`];
17
+ }
18
+ }
19
+ exports.default = getStackOutput;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3RhY2tPdXRwdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvZ2V0U3RhY2tPdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBeUQ7QUFRekQsU0FBd0IsY0FBYyxDQUFDLFNBQWlCLEVBQUUsR0FBVztJQUNuRSxNQUFNLElBQUksR0FBRyxZQUFZLFNBQVMsT0FBTyxDQUFDO0lBRTFDLElBQUk7UUFDRixJQUFBLGVBQVUsRUFBQyxJQUFJLEVBQUUsY0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCwrREFBK0Q7UUFDL0QsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFBLGlCQUFZLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sVUFBVSxHQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUQsS0FBSyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2xELE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUN4QjtBQUNILENBQUM7QUFmRCxpQ0FlQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjY2Vzc1N5bmMsIHJlYWRGaWxlU3luYywgY29uc3RhbnRzIH0gZnJvbSBcImZzXCI7XG5cbmludGVyZmFjZSBTdGFja0pTT04ge1xuICBTdGFja05hbWU6IHtcbiAgICBPdXRwdXRzOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFN0YWNrT3V0cHV0KHN0YWNrbmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZykge1xuICBjb25zdCBwYXRoID0gYC4vb3V0cHV0LyR7c3RhY2tuYW1lfS5qc29uYDtcblxuICB0cnkge1xuICAgIGFjY2Vzc1N5bmMocGF0aCwgY29uc3RhbnRzLlJfT0spO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEZpbGUgZG9lcyBub3QgZXhpc3Qgb3Igd2UgZG8gbm90IGhhdmUgcGVybWlzc2lvbnMgdG8gcmVhZCBpdFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGFja091dHB1dEZpbGUgPSByZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpO1xuICBjb25zdCBzdGFja091cHV0OiBTdGFja0pTT04gPSBKU09OLnBhcnNlKHN0YWNrT3V0cHV0RmlsZSk7XG4gIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YWNrT3VwdXQpKSB7XG4gICAgcmV0dXJuIHZhbHVlW2Ake2tleX1gXTtcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export * from "./getConfig";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./getConfig"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2dldENvbmZpZ1wiO1xuIl19
@@ -0,0 +1,4 @@
1
+ import { IConstruct } from "constructs";
2
+ export default function tagResource(resource: IConstruct, tags: {
3
+ [key: string]: string;
4
+ }): void;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
4
+ function tagResource(resource, tags) {
5
+ for (const tag in tags) {
6
+ aws_cdk_lib_1.Tags.of(resource).add(tag, tags[tag]);
7
+ }
8
+ }
9
+ exports.default = tagResource;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBbUM7QUFHbkMsU0FBd0IsV0FBVyxDQUNqQyxRQUFvQixFQUNwQixJQUErQjtJQUUvQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtRQUN0QixrQkFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDO0FBQ0gsQ0FBQztBQVBELDhCQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRhZ1Jlc291cmNlKFxuICByZXNvdXJjZTogSUNvbnN0cnVjdCxcbiAgdGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuKSB7XG4gIGZvciAoY29uc3QgdGFnIGluIHRhZ3MpIHtcbiAgICBUYWdzLm9mKHJlc291cmNlKS5hZGQodGFnLCB0YWdzW3RhZ10pO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.1.5",
3
+ "version": "0.1.10",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },
@@ -12,22 +12,27 @@
12
12
  "dist/lib"
13
13
  ],
14
14
  "scripts": {
15
- "deploy:main": "npx cdk deploy -c environment=main",
16
- "list:main": "npx cdk list -c environment=main",
17
- "destroy:main": "npx cdk destroy -c environment=main",
18
- "synth:main": "npx cdk synthesize -c environment=main",
15
+ "deploy:management": "npx cdk deploy -c environment=management",
16
+ "list:management": "npx cdk list -c environment=management",
17
+ "destroy:management": "npx cdk destroy -c environment=management",
18
+ "synth:management": "npx cdk synthesize -c environment=management",
19
+ "diff:management": "npx cdk diff -c environment=management",
19
20
  "deploy:dev": "npx cdk deploy -c environment=development",
20
- "list:dev": "npx cdk list -c environment=mdevain",
21
- "destroy:dev": "npx cdk destroy -c environment=dev",
22
- "synth:dev": "npx cdk synthesize -c environment=dev",
21
+ "list:dev": "npx cdk list -c environment=development",
22
+ "destroy:dev": "npx cdk destroy -c environment=development",
23
+ "synth:dev": "npx cdk synthesize -c environment=development",
23
24
  "deploy:stag": "npx cdk deploy -c environment=staging",
24
- "list:stag": "npx cdk list -c environment=stag",
25
- "destroy:stag": "npx cdk destroy -c environment=stag",
26
- "synth:stag": "npx cdk synthesize -c environment=stag",
25
+ "list:stag": "npx cdk list -c environment=staging",
26
+ "destroy:stag": "npx cdk destroy -c environment=staging",
27
+ "synth:stag": "npx cdk synthesize -c environment=staging",
27
28
  "deploy:prod": "npx cdk deploy -c environment=production",
28
- "list:prod": "npx cdk list -c environment=prod",
29
- "destroy:prod": "npx cdk destroy -c environment=prod",
30
- "synth:prod": "npx cdk synthesize -c environment=prod",
29
+ "list:prod": "npx cdk list -c environment=production",
30
+ "destroy:prod": "npx cdk destroy -c environment=production",
31
+ "synth:prod": "npx cdk synthesize -c environment=production",
32
+ "deploy:plat": "npx cdk deploy -c environment=platform",
33
+ "list:plat": "npx cdk list -c environment=platform",
34
+ "destroy:plat": "npx cdk destroy -c environment=platform",
35
+ "synth:plat": "npx cdk synthesize -c environment=platform",
31
36
  "publish": "npm run build && npm publish --access restricted",
32
37
  "build": "tsc",
33
38
  "watch": "tsc -w",
@@ -49,13 +54,13 @@
49
54
  },
50
55
  "dependencies": {
51
56
  "@aws-sdk/client-cost-explorer": "^3.245.0",
52
- "@aws-sdk/client-sso-admin": "^3.398.0",
57
+ "@fjall/util": "^0.1.10",
53
58
  "@pepperize/cdk-organizations": "^0.7.135",
54
- "aws-cdk": "2.56.1",
55
- "aws-cdk-lib": "2.56.1",
59
+ "aws-cdk": "^2.146.0",
60
+ "aws-cdk-lib": "^2.146.0",
56
61
  "aws-lambda": "^1.0.7",
57
62
  "constructs": "^10.0.0",
58
63
  "source-map-support": "^0.5.21",
59
64
  "uuid": "^9.0.0"
60
65
  }
61
- }
66
+ }
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CostAllocationTags = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const customResources = require("aws-cdk-lib/custom-resources");
6
- const awsCustomResource_1 = require("../../../resources/aws/utilities/awsCustomResource");
7
- // TODO: How do we empower the user to add their own tags?
8
- const costAllocationTags = [
9
- "aws:cloudformation:logical-id",
10
- "aws:cloudformation:stack-id",
11
- "aws:cloudformation:stack-name",
12
- "aws:createdBy",
13
- "Environment"
14
- // TODO: Add service name
15
- ];
16
- function toggleCostTag(tags, tagStatus) {
17
- return tags.map((tag) => {
18
- return {
19
- TagKey: tag,
20
- Status: tagStatus
21
- };
22
- });
23
- }
24
- class CostAllocationTags extends aws_cdk_lib_1.Stack {
25
- constructor(scope, id, props) {
26
- super(scope, id, props);
27
- new awsCustomResource_1.AwsCustomResource(this, "enableCostAllocationTags", {
28
- functionName: "enableCostAllocationTags",
29
- onCreate: {
30
- service: "CostExplorer",
31
- action: "updateCostAllocationTagsStatus",
32
- parameters: {
33
- CostAllocationTagsStatus: toggleCostTag(costAllocationTags, "Active")
34
- },
35
- physicalResourceId: customResources.PhysicalResourceId.of("enableCostAllocationTags")
36
- },
37
- onUpdate: {
38
- service: "CostExplorer",
39
- action: "updateCostAllocationTagsStatus",
40
- parameters: {
41
- CostAllocationTagsStatus: toggleCostTag(costAllocationTags, "Active")
42
- },
43
- physicalResourceId: customResources.PhysicalResourceId.of("updateCostAllocationTags")
44
- },
45
- onDelete: {
46
- service: "CostExplorer",
47
- action: "updateCostAllocationTagsStatus",
48
- parameters: {
49
- CostAllocationTagsStatus: toggleCostTag(costAllocationTags, "Inactive")
50
- }
51
- },
52
- resourceType: "Custom::CostAllocationTags"
53
- });
54
- }
55
- }
56
- exports.CostAllocationTags = CostAllocationTags;
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdEFsbG9jYXRpb25UYWdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvYmFzZS9jb3N0QWxsb2NhdGlvblRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdEO0FBQ2hELGdFQUFnRTtBQUdoRSwwRkFBdUY7QUFFdkYsMERBQTBEO0FBQzFELE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsK0JBQStCO0lBQy9CLDZCQUE2QjtJQUM3QiwrQkFBK0I7SUFDL0IsZUFBZTtJQUNmLGFBQWE7SUFDYix5QkFBeUI7Q0FDMUIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLElBQWMsRUFBRSxTQUFpQjtJQUN0RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN0QixPQUFPO1lBQ0wsTUFBTSxFQUFFLEdBQUc7WUFDWCxNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSxtQkFBSztJQUMzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ3RELFlBQVksRUFBRSwwQkFBMEI7WUFDeEMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixNQUFNLEVBQUUsZ0NBQWdDO2dCQUN4QyxVQUFVLEVBQUU7b0JBQ1Ysd0JBQXdCLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztpQkFDdEU7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQsMEJBQTBCLENBQzNCO2FBQ0Y7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLE1BQU0sRUFBRSxnQ0FBZ0M7Z0JBQ3hDLFVBQVUsRUFBRTtvQkFDVix3QkFBd0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO2lCQUN0RTtnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUN2RCwwQkFBMEIsQ0FDM0I7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsY0FBYztnQkFDdkIsTUFBTSxFQUFFLGdDQUFnQztnQkFDeEMsVUFBVSxFQUFFO29CQUNWLHdCQUF3QixFQUFFLGFBQWEsQ0FDckMsa0JBQWtCLEVBQ2xCLFVBQVUsQ0FDWDtpQkFDRjthQUNGO1lBQ0QsWUFBWSxFQUFFLDRCQUE0QjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF2Q0QsZ0RBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcblxuLy8gVE9ETzogSG93IGRvIHdlIGVtcG93ZXIgdGhlIHVzZXIgdG8gYWRkIHRoZWlyIG93biB0YWdzP1xuY29uc3QgY29zdEFsbG9jYXRpb25UYWdzID0gW1xuICBcImF3czpjbG91ZGZvcm1hdGlvbjpsb2dpY2FsLWlkXCIsXG4gIFwiYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLWlkXCIsXG4gIFwiYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLW5hbWVcIixcbiAgXCJhd3M6Y3JlYXRlZEJ5XCIsXG4gIFwiRW52aXJvbm1lbnRcIlxuICAvLyBUT0RPOiBBZGQgc2VydmljZSBuYW1lXG5dO1xuXG5mdW5jdGlvbiB0b2dnbGVDb3N0VGFnKHRhZ3M6IHN0cmluZ1tdLCB0YWdTdGF0dXM6IHN0cmluZykge1xuICByZXR1cm4gdGFncy5tYXAoKHRhZykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBUYWdLZXk6IHRhZyxcbiAgICAgIFN0YXR1czogdGFnU3RhdHVzXG4gICAgfTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBDb3N0QWxsb2NhdGlvblRhZ3MgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJlbmFibGVDb3N0QWxsb2NhdGlvblRhZ3NcIixcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQ29zdEV4cGxvcmVyXCIsXG4gICAgICAgIGFjdGlvbjogXCJ1cGRhdGVDb3N0QWxsb2NhdGlvblRhZ3NTdGF0dXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIENvc3RBbGxvY2F0aW9uVGFnc1N0YXR1czogdG9nZ2xlQ29zdFRhZyhjb3N0QWxsb2NhdGlvblRhZ3MsIFwiQWN0aXZlXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcImVuYWJsZUNvc3RBbGxvY2F0aW9uVGFnc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkNvc3RFeHBsb3JlclwiLFxuICAgICAgICBhY3Rpb246IFwidXBkYXRlQ29zdEFsbG9jYXRpb25UYWdzU3RhdHVzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBDb3N0QWxsb2NhdGlvblRhZ3NTdGF0dXM6IHRvZ2dsZUNvc3RUYWcoY29zdEFsbG9jYXRpb25UYWdzLCBcIkFjdGl2ZVwiKVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJ1cGRhdGVDb3N0QWxsb2NhdGlvblRhZ3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogXCJDb3N0RXhwbG9yZXJcIixcbiAgICAgICAgYWN0aW9uOiBcInVwZGF0ZUNvc3RBbGxvY2F0aW9uVGFnc1N0YXR1c1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQ29zdEFsbG9jYXRpb25UYWdzU3RhdHVzOiB0b2dnbGVDb3N0VGFnKFxuICAgICAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzLFxuICAgICAgICAgICAgXCJJbmFjdGl2ZVwiXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6Q29zdEFsbG9jYXRpb25UYWdzXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IamIdentityCenter = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const customResources = require("aws-cdk-lib/custom-resources");
6
- const cfnOutput_1 = require("../../../resources/aws/utilities/cfnOutput");
7
- const awsCustomResource_1 = require("../../../resources/aws/utilities/awsCustomResource");
8
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
9
- const permissionSet_1 = require("../../../resources/aws/iam/permissionSet");
10
- const assignment_1 = require("../../../resources/aws/iam/assignment");
11
- class IamIdentityCenter extends aws_cdk_lib_1.Stack {
12
- constructor(scope, id, props) {
13
- super(scope, id, props);
14
- // GroupID is obtained from the UI after following these steps:
15
- // https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html
16
- const defaultPermissionSets = {
17
- AdministratorAccess: {
18
- Policy: 'arn:aws:iam::aws:policy/AdministratorAccess',
19
- Group: '24684498-8021-7099-b51b-6f0895856632',
20
- },
21
- Billing: {
22
- Policy: 'arn:aws:iam::aws:policy/job-function/Billing',
23
- Group: '54a8b478-a091-7001-9484-4920917d7696'
24
- },
25
- ReadOnlyAccess: {
26
- Policy: 'arn:aws:iam::aws:policy/ReadOnlyAccess',
27
- Group: '146804b8-a001-7041-ccf9-0a4d1af4596c'
28
- },
29
- SystemAdministrator: {
30
- Policy: 'arn:aws:iam::aws:policy/job-function/SystemAdministrator',
31
- Group: '941834d8-6001-70af-a128-b21286f464ac'
32
- }
33
- };
34
- // TODO: Can we get these from a config file?
35
- const accounts = {
36
- Production: aws_cdk_lib_1.Fn.importValue("productionAccountId"),
37
- Staging: aws_cdk_lib_1.Fn.importValue("stagingAccountId"),
38
- Development: aws_cdk_lib_1.Fn.importValue("developmentAccountId"),
39
- };
40
- const customResource = new awsCustomResource_1.AwsCustomResource(this, "getIamIdentityCenterArn", {
41
- functionName: "getIamIdentityCenterArn",
42
- onCreate: {
43
- service: "SSOAdmin",
44
- action: "listInstances",
45
- parameters: {
46
- MaxResults: '1'
47
- },
48
- physicalResourceId: customResources.PhysicalResourceId.of("getIamIdentityCenterArn")
49
- },
50
- policy: customResources.AwsCustomResourcePolicy.fromStatements([
51
- new aws_iam_1.PolicyStatement({
52
- actions: [
53
- "sso:ListInstances",
54
- ],
55
- resources: ["*"]
56
- })
57
- ]),
58
- resourceType: "Custom::IamIdentityCenter"
59
- });
60
- new cfnOutput_1.CfnOutput(this, "iamIdentityCenterArn", {
61
- value: customResource.getResponseField("Instances.0.InstanceArn"),
62
- exportName: "iamIdentityCenterArn"
63
- });
64
- for (const [permissionSet, permissionSetAssociation] of Object.entries(defaultPermissionSets)) {
65
- const permSet = new permissionSet_1.PermissionSet(this, `${permissionSet}PermissionSet`, {
66
- name: permissionSet,
67
- instanceArn: customResource.getResponseField("Instances.0.InstanceArn"),
68
- description: `Permission set for ${permissionSet} policy`,
69
- managedPolicies: [permissionSetAssociation.Policy],
70
- tags: [{ key: "Environment", value: "BaseInfra" }]
71
- });
72
- for (const [account, accountArn] of Object.entries(accounts)) {
73
- new assignment_1.Assignment(this, `${account}${permissionSet}Association`, {
74
- instanceArn: customResource.getResponseField("Instances.0.InstanceArn"),
75
- permissionSetArn: permSet.attrPermissionSetArn,
76
- principalType: "GROUP",
77
- principalId: permissionSetAssociation.Group,
78
- targetType: "AWS_ACCOUNT",
79
- targetId: accountArn,
80
- });
81
- }
82
- }
83
- }
84
- }
85
- exports.IamIdentityCenter = IamIdentityCenter;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtSWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9iYXNlL2lhbUlkZW50aXR5Q2VudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvRDtBQUNwRCxnRUFBZ0U7QUFFaEUsMEVBQXVFO0FBQ3ZFLDBGQUF1RjtBQUN2RixpREFBc0Q7QUFDdEQsNEVBQXdFO0FBQ3hFLHNFQUFtRTtBQUVuRSxNQUFhLGlCQUFrQixTQUFRLG1CQUFLO0lBQzFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsK0RBQStEO1FBQy9ELDJFQUEyRTtRQUMzRSxNQUFNLHFCQUFxQixHQUFHO1lBQzVCLG1CQUFtQixFQUFFO2dCQUNuQixNQUFNLEVBQUUsNkNBQTZDO2dCQUNyRCxLQUFLLEVBQUUsc0NBQXNDO2FBQzlDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSw4Q0FBOEM7Z0JBQ3RELEtBQUssRUFBRSxzQ0FBc0M7YUFDOUM7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLHdDQUF3QztnQkFDaEQsS0FBSyxFQUFFLHNDQUFzQzthQUM5QztZQUNELG1CQUFtQixFQUFFO2dCQUNuQixNQUFNLEVBQUUsMERBQTBEO2dCQUNsRSxLQUFLLEVBQUUsc0NBQXNDO2FBQzlDO1NBQ0YsQ0FBQTtRQUVELDZDQUE2QztRQUM3QyxNQUFNLFFBQVEsR0FBRztZQUNmLFVBQVUsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztZQUNqRCxPQUFPLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7WUFDM0MsV0FBVyxFQUFFLGdCQUFFLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDO1NBQ3BELENBQUE7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUM1RSxZQUFZLEVBQUUseUJBQXlCO1lBQ3ZDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLFVBQVUsRUFBRTtvQkFDVixVQUFVLEVBQUUsR0FBRztpQkFDaEI7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQseUJBQXlCLENBQzFCO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDN0QsSUFBSSx5QkFBZSxDQUFDO29CQUNwQixPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3FCQUNwQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ2YsQ0FBQzthQUNMLENBQUM7WUFDQSxZQUFZLEVBQUUsMkJBQTJCO1NBQzFDLENBQUMsQ0FBQztRQUVILElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDMUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQztZQUNqRSxVQUFVLEVBQUUsc0JBQXNCO1NBQ25DLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxDQUFDLGFBQWEsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUM3RixNQUFNLE9BQU8sR0FBRyxJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsYUFBYSxlQUFlLEVBQUU7Z0JBQ3JFLElBQUksRUFBRSxhQUFhO2dCQUNuQixXQUFXLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDO2dCQUN2RSxXQUFXLEVBQUUsc0JBQXNCLGFBQWEsU0FBUztnQkFDekQsZUFBZSxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsQ0FBRSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFFO2FBQ3ZELENBQUMsQ0FBQTtZQUVGLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLHVCQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLGFBQWEsYUFBYSxFQUFFO29CQUMxRCxXQUFXLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDO29CQUN2RSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsb0JBQW9CO29CQUM5QyxhQUFhLEVBQUUsT0FBTztvQkFDdEIsV0FBVyxFQUFFLHdCQUF3QixDQUFDLEtBQUs7b0JBQzNDLFVBQVUsRUFBRSxhQUFhO29CQUN6QixRQUFRLEVBQUUsVUFBVTtpQkFDdkIsQ0FBQyxDQUFBO2FBQ0g7U0FDRjtJQUVILENBQUM7Q0FDRjtBQWxGRCw4Q0FrRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbiwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9jZm5PdXRwdXRcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgUGVybWlzc2lvblNldCB9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZXMvYXdzL2lhbS9wZXJtaXNzaW9uU2V0XCJcbmltcG9ydCB7IEFzc2lnbm1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vYXNzaWdubWVudFwiO1xuXG5leHBvcnQgY2xhc3MgSWFtSWRlbnRpdHlDZW50ZXIgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8gR3JvdXBJRCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBVSSBhZnRlciBmb2xsb3dpbmcgdGhlc2Ugc3RlcHM6XG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NpbmdsZXNpZ25vbi9sYXRlc3QvdXNlcmd1aWRlL2FkZGdyb3Vwcy5odG1sXG4gICAgY29uc3QgZGVmYXVsdFBlcm1pc3Npb25TZXRzID0ge1xuICAgICAgQWRtaW5pc3RyYXRvckFjY2Vzczoge1xuICAgICAgICBQb2xpY3k6ICdhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzJyxcbiAgICAgICAgR3JvdXA6ICcyNDY4NDQ5OC04MDIxLTcwOTktYjUxYi02ZjA4OTU4NTY2MzInLFxuICAgICAgfSxcbiAgICAgIEJpbGxpbmc6IHsgXG4gICAgICAgIFBvbGljeTogJ2Fybjphd3M6aWFtOjphd3M6cG9saWN5L2pvYi1mdW5jdGlvbi9CaWxsaW5nJyxcbiAgICAgICAgR3JvdXA6ICc1NGE4YjQ3OC1hMDkxLTcwMDEtOTQ4NC00OTIwOTE3ZDc2OTYnXG4gICAgICB9LFxuICAgICAgUmVhZE9ubHlBY2Nlc3M6IHtcbiAgICAgICAgUG9saWN5OiAnYXJuOmF3czppYW06OmF3czpwb2xpY3kvUmVhZE9ubHlBY2Nlc3MnLFxuICAgICAgICBHcm91cDogJzE0NjgwNGI4LWEwMDEtNzA0MS1jY2Y5LTBhNGQxYWY0NTk2YydcbiAgICAgIH0sXG4gICAgICBTeXN0ZW1BZG1pbmlzdHJhdG9yOiB7XG4gICAgICAgIFBvbGljeTogJ2Fybjphd3M6aWFtOjphd3M6cG9saWN5L2pvYi1mdW5jdGlvbi9TeXN0ZW1BZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgR3JvdXA6ICc5NDE4MzRkOC02MDAxLTcwYWYtYTEyOC1iMjEyODZmNDY0YWMnXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2FuIHdlIGdldCB0aGVzZSBmcm9tIGEgY29uZmlnIGZpbGU/XG4gICAgY29uc3QgYWNjb3VudHMgPSB7XG4gICAgICBQcm9kdWN0aW9uOiBGbi5pbXBvcnRWYWx1ZShcInByb2R1Y3Rpb25BY2NvdW50SWRcIiksXG4gICAgICBTdGFnaW5nOiBGbi5pbXBvcnRWYWx1ZShcInN0YWdpbmdBY2NvdW50SWRcIiksXG4gICAgICBEZXZlbG9wbWVudDogRm4uaW1wb3J0VmFsdWUoXCJkZXZlbG9wbWVudEFjY291bnRJZFwiKSxcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZSA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImdldElhbUlkZW50aXR5Q2VudGVyQXJuXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJnZXRJYW1JZGVudGl0eUNlbnRlckFyblwiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJTU09BZG1pblwiLFxuICAgICAgICBhY3Rpb246IFwibGlzdEluc3RhbmNlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgTWF4UmVzdWx0czogJzEnXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcImdldElhbUlkZW50aXR5Q2VudGVyQXJuXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInNzbzpMaXN0SW5zdGFuY2VzXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICB9KVxuICAgIF0pLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6SWFtSWRlbnRpdHlDZW50ZXJcIlxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImlhbUlkZW50aXR5Q2VudGVyQXJuXCIsIHtcbiAgICAgIHZhbHVlOiBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFwiSW5zdGFuY2VzLjAuSW5zdGFuY2VBcm5cIiksXG4gICAgICBleHBvcnROYW1lOiBcImlhbUlkZW50aXR5Q2VudGVyQXJuXCJcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgW3Blcm1pc3Npb25TZXQsIHBlcm1pc3Npb25TZXRBc3NvY2lhdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdFBlcm1pc3Npb25TZXRzKSkge1xuICAgICAgY29uc3QgcGVybVNldCA9IG5ldyBQZXJtaXNzaW9uU2V0KHRoaXMsIGAke3Blcm1pc3Npb25TZXR9UGVybWlzc2lvblNldGAsIHtcbiAgICAgICAgICBuYW1lOiBwZXJtaXNzaW9uU2V0LFxuICAgICAgICAgIGluc3RhbmNlQXJuOiBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFwiSW5zdGFuY2VzLjAuSW5zdGFuY2VBcm5cIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBQZXJtaXNzaW9uIHNldCBmb3IgJHtwZXJtaXNzaW9uU2V0fSBwb2xpY3lgLFxuICAgICAgICAgIG1hbmFnZWRQb2xpY2llczogW3Blcm1pc3Npb25TZXRBc3NvY2lhdGlvbi5Qb2xpY3ldLFxuICAgICAgICAgIHRhZ3M6IFsgeyBrZXk6IFwiRW52aXJvbm1lbnRcIiwgdmFsdWU6IFwiQmFzZUluZnJhXCIgfSBdXG4gICAgICB9KVxuXG4gICAgICBmb3IgKGNvbnN0IFthY2NvdW50LCBhY2NvdW50QXJuXSBvZiBPYmplY3QuZW50cmllcyhhY2NvdW50cykpIHtcbiAgICAgICAgbmV3IEFzc2lnbm1lbnQodGhpcywgYCR7YWNjb3VudH0ke3Blcm1pc3Npb25TZXR9QXNzb2NpYXRpb25gLCB7XG4gICAgICAgICAgICBpbnN0YW5jZUFybjogY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcIkluc3RhbmNlcy4wLkluc3RhbmNlQXJuXCIpLFxuICAgICAgICAgICAgcGVybWlzc2lvblNldEFybjogcGVybVNldC5hdHRyUGVybWlzc2lvblNldEFybixcbiAgICAgICAgICAgIHByaW5jaXBhbFR5cGU6IFwiR1JPVVBcIixcbiAgICAgICAgICAgIHByaW5jaXBhbElkOiBwZXJtaXNzaW9uU2V0QXNzb2NpYXRpb24uR3JvdXAsXG4gICAgICAgICAgICB0YXJnZXRUeXBlOiBcIkFXU19BQ0NPVU5UXCIsXG4gICAgICAgICAgICB0YXJnZXRJZDogYWNjb3VudEFybiwgXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==