@fjall/components-infrastructure 0.1.20 → 0.1.22

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.
@@ -2,11 +2,17 @@ import { Construct } from "constructs";
2
2
  import { KeyValue } from "../../types";
3
3
  interface IdentityCenterProps {
4
4
  accounts: KeyValue;
5
+ tags?: KeyValue[];
6
+ }
7
+ export interface PermissionSetConfig {
8
+ Policy: string;
9
+ Description?: string;
5
10
  }
6
11
  export declare class IdentityCenter extends Construct {
7
12
  identityStoreId: string;
8
13
  identityCenterArn: string;
9
- private identityCenterGroups;
10
14
  constructor(scope: Construct, id: string, props: IdentityCenterProps);
15
+ listIdentityCenterInstance(): void;
16
+ createPermissionSet(props: IdentityCenterProps): void;
11
17
  }
12
18
  export {};
@@ -3,32 +3,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IdentityCenter = void 0;
4
4
  const customResources = require("aws-cdk-lib/custom-resources");
5
5
  const constructs_1 = require("constructs");
6
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
7
  const cfnOutput_1 = require("../../resources/aws/utilities/cfnOutput");
7
8
  const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
8
- const group_1 = require("../../resources/aws/iam/identityCenter/group");
9
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
10
- const permissionSet_1 = require("../../resources/aws/iam/identityCenter/permissionSet");
11
- const assignment_1 = require("../../resources/aws/iam/identityCenter/assignment");
12
9
  const stripAndCamelCase_1 = require("../../utils/stripAndCamelCase");
10
+ const identityCenter_1 = require("../../resources/aws/iam/identityCenter");
11
+ const attachManagedPolicy_1 = require("../../resources/aws/iam/identityCenter/attachManagedPolicy");
12
+ const defaultPermissionSets = {
13
+ AdministratorAccess: {
14
+ Policy: "arn:aws:iam::aws:policy/AdministratorAccess",
15
+ Description: "Permission set for associated AdministratorAccess policy"
16
+ },
17
+ ReadOnlyAccess: {
18
+ Policy: "arn:aws:iam::aws:policy/ReadOnlyAccess",
19
+ Description: "Permission set for associated ReadOnlyAccess policy"
20
+ },
21
+ Billing: {
22
+ Policy: "arn:aws:iam::aws:policy/AWSBillingReadOnlyAccess",
23
+ Description: "Permission set for associated Billing policy"
24
+ }
25
+ };
13
26
  class IdentityCenter extends constructs_1.Construct {
14
27
  constructor(scope, id, props) {
15
28
  super(scope, id);
16
- this.identityCenterGroups = [];
17
- // TODO: Should only use this if no groups are provided by the end user
18
- const defaultPermissionSets = {
19
- AdministratorAccess: {
20
- Policy: "arn:aws:iam::aws:policy/AdministratorAccess"
21
- },
22
- Billing: {
23
- Policy: "arn:aws:iam::aws:policy/job-function/Billing"
24
- },
25
- ReadOnlyAccess: {
26
- Policy: "arn:aws:iam::aws:policy/ReadOnlyAccess"
27
- },
28
- SystemAdministrator: {
29
- Policy: "arn:aws:iam::aws:policy/job-function/SystemAdministrator"
30
- }
31
- };
29
+ this.listIdentityCenterInstance();
30
+ this.createPermissionSet(props);
31
+ }
32
+ listIdentityCenterInstance() {
32
33
  const customResource = new awsCustomResource_1.AwsCustomResource(this, "listIdentityCenterInstance", {
33
34
  functionName: "listIdentityCenterInstance",
34
35
  onCreate: {
@@ -59,49 +60,48 @@ class IdentityCenter extends constructs_1.Construct {
59
60
  value: this.identityStoreId,
60
61
  exportName: "identityStoreId"
61
62
  });
62
- for (const [permissionSet, permissionSetAssociation] of Object.entries(defaultPermissionSets)) {
63
- const permSet = new permissionSet_1.PermissionSet(this, `${permissionSet}PermissionSet`, {
64
- name: permissionSet,
63
+ }
64
+ createPermissionSet(props) {
65
+ // Create permission sets
66
+ for (const [name, config] of Object.entries(defaultPermissionSets)) {
67
+ const permissionSet = new identityCenter_1.PermissionSet(this, `PermissionSet${name}`, {
68
+ name: name,
65
69
  instanceArn: this.identityCenterArn,
66
- description: `Permission set for associated ${permissionSet} policy`,
67
- managedPolicies: [permissionSetAssociation.Policy],
68
- tags: [
69
- {
70
- key: "fjall:costAllocation:environment",
71
- value: "management"
72
- }
73
- ]
70
+ description: config.Description,
71
+ tags: props.tags
74
72
  });
75
- const group = new group_1.Group(this, `${permissionSet}Group`, {
76
- displayName: permissionSet,
73
+ // Attach Policies to Permission Sets
74
+ new attachManagedPolicy_1.AttachManagedPolicy(this, `AttachManagedPolicy${name}`, {
75
+ instanceArn: this.identityCenterArn,
76
+ permissionSet: name,
77
+ permissionSetArn: permissionSet.getPermissionSetArn(),
78
+ managedPolicyArn: config.Policy
79
+ });
80
+ // Create Groups
81
+ const group = new identityCenter_1.Group(this, `${permissionSet}Group`, {
82
+ displayName: name,
77
83
  identityStoreId: this.identityStoreId,
78
84
  description: `Group for associated ${permissionSet} permission set`
79
85
  });
80
- this.identityCenterGroups.push(group.displayName);
81
- new cfnOutput_1.CfnOutput(this, `${permissionSet}GroupId`, {
82
- key: `${permissionSet}GroupId`,
83
- value: group.attrGroupId,
84
- exportName: `${permissionSet}GroupId`
86
+ new cfnOutput_1.CfnOutput(this, `${name}GroupId`, {
87
+ key: `${name}GroupId`,
88
+ value: group.getGroupId(),
89
+ exportName: `${name}GroupId`
85
90
  });
91
+ // Assign Groups to AWS Accounts
86
92
  for (const [accountName, accountId] of Object.entries(props.accounts)) {
87
- if (!accountId)
88
- continue;
89
- new assignment_1.Assignment(this, `${(0, stripAndCamelCase_1.stripAndCamelCase)(accountName)}${permissionSet}Association`, {
93
+ new identityCenter_1.Assignment(this, `${(0, stripAndCamelCase_1.stripAndCamelCase)(accountName)}${permissionSet}Association`, {
90
94
  instanceArn: this.identityCenterArn,
91
- permissionSetArn: permSet.attrPermissionSetArn,
95
+ permissionSetArn: permissionSet.getPermissionSetArn(),
92
96
  principalType: "GROUP",
93
- principalId: group.attrGroupId,
97
+ principalId: group.getGroupId(),
94
98
  targetType: "AWS_ACCOUNT",
95
- targetId: accountId
99
+ targetId: accountId,
100
+ dependency: permissionSet.deletePermissionSet
96
101
  });
97
102
  }
98
103
  }
99
- new cfnOutput_1.CfnOutput(this, "identityCenterGroups", {
100
- key: "identityCenterGroups",
101
- value: this.identityCenterGroups.join(","),
102
- exportName: "identityCenterGroups"
103
- });
104
104
  }
105
105
  }
106
106
  exports.IdentityCenter = IdentityCenter;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFDaEUsMkNBQXVDO0FBRXZDLHVFQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYsd0VBQXFFO0FBQ3JFLGlEQUFzRDtBQUN0RCx3RkFBcUY7QUFDckYsa0ZBQStFO0FBRS9FLHFFQUFrRTtBQUtsRSxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUszQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFIWCx5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFLMUMsdUVBQXVFO1FBQ3ZFLE1BQU0scUJBQXFCLEdBQUc7WUFDNUIsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSw2Q0FBNkM7YUFDdEQ7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLDhDQUE4QzthQUN2RDtZQUNELGNBQWMsRUFBRTtnQkFDZCxNQUFNLEVBQUUsd0NBQXdDO2FBQ2pEO1lBQ0QsbUJBQW1CLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSwwREFBMEQ7YUFDbkU7U0FDRixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQ0FBaUIsQ0FDMUMsSUFBSSxFQUNKLDRCQUE0QixFQUM1QjtZQUNFLFlBQVksRUFBRSw0QkFBNEI7WUFDMUMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUsc0JBQXNCO2dCQUM5QixVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLENBQUM7aUJBQ2Q7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQsNEJBQTRCLENBQzdCO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDN0QsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0gsQ0FBQztZQUNGLFlBQVksRUFBRSwyQkFBMkI7U0FDMUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FDdEQseUJBQXlCLENBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FDcEQsNkJBQTZCLENBQzlCLENBQUM7UUFDRixJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3ZDLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDN0IsVUFBVSxFQUFFLG1CQUFtQjtTQUNoQyxDQUFDLENBQUM7UUFDSCxJQUFJLHFCQUFTLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3JDLEdBQUcsRUFBRSxpQkFBaUI7WUFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQzNCLFVBQVUsRUFBRSxpQkFBaUI7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLENBQUMsYUFBYSxFQUFFLHdCQUF3QixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDcEUscUJBQXFCLENBQ3RCLEVBQUU7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLDZCQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsYUFBYSxlQUFlLEVBQUU7Z0JBQ3ZFLElBQUksRUFBRSxhQUFhO2dCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDbkMsV0FBVyxFQUFFLGlDQUFpQyxhQUFhLFNBQVM7Z0JBQ3BFLGVBQWUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztnQkFDbEQsSUFBSSxFQUFFO29CQUNKO3dCQUNFLEdBQUcsRUFBRSxrQ0FBa0M7d0JBQ3ZDLEtBQUssRUFBRSxZQUFZO3FCQUNwQjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxHQUFHLGFBQWEsT0FBTyxFQUFFO2dCQUNyRCxXQUFXLEVBQUUsYUFBYTtnQkFDMUIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNyQyxXQUFXLEVBQUUsd0JBQXdCLGFBQWEsaUJBQWlCO2FBQ3BFLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRWxELElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxhQUFhLFNBQVMsRUFBRTtnQkFDN0MsR0FBRyxFQUFFLEdBQUcsYUFBYSxTQUFTO2dCQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQ3hCLFVBQVUsRUFBRSxHQUFHLGFBQWEsU0FBUzthQUN0QyxDQUFDLENBQUM7WUFFSCxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxTQUFTO29CQUFFLFNBQVM7Z0JBRXpCLElBQUksdUJBQVUsQ0FDWixJQUFJLEVBQ0osR0FBRyxJQUFBLHFDQUFpQixFQUFDLFdBQVcsQ0FBQyxHQUFHLGFBQWEsYUFBYSxFQUM5RDtvQkFDRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDbkMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtvQkFDOUMsYUFBYSxFQUFFLE9BQU87b0JBQ3RCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFFBQVEsRUFBRSxTQUFTO2lCQUNwQixDQUNGLENBQUM7YUFDSDtTQUNGO1FBRUQsSUFBSSxxQkFBUyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUMxQyxHQUFHLEVBQUUsc0JBQXNCO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMxQyxVQUFVLEVBQUUsc0JBQXNCO1NBQ25DLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXZIRCx3Q0F1SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9jZm5PdXRwdXRcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9ncm91cFwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFBlcm1pc3Npb25TZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvcGVybWlzc2lvblNldFwiO1xuaW1wb3J0IHsgQXNzaWdubWVudCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hc3NpZ25tZW50XCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgc3RyaXBBbmRDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaXBBbmRDYW1lbENhc2VcIjtcblxuaW50ZXJmYWNlIElkZW50aXR5Q2VudGVyUHJvcHMge1xuICBhY2NvdW50czogS2V5VmFsdWU7XG59XG5leHBvcnQgY2xhc3MgSWRlbnRpdHlDZW50ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgaWRlbnRpdHlTdG9yZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBpZGVudGl0eUNlbnRlckFybjogc3RyaW5nO1xuICBwcml2YXRlIGlkZW50aXR5Q2VudGVyR3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJZGVudGl0eUNlbnRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFRPRE86IFNob3VsZCBvbmx5IHVzZSB0aGlzIGlmIG5vIGdyb3VwcyBhcmUgcHJvdmlkZWQgYnkgdGhlIGVuZCB1c2VyXG4gICAgY29uc3QgZGVmYXVsdFBlcm1pc3Npb25TZXRzID0ge1xuICAgICAgQWRtaW5pc3RyYXRvckFjY2Vzczoge1xuICAgICAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2Vzc1wiXG4gICAgICB9LFxuICAgICAgQmlsbGluZzoge1xuICAgICAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvam9iLWZ1bmN0aW9uL0JpbGxpbmdcIlxuICAgICAgfSxcbiAgICAgIFJlYWRPbmx5QWNjZXNzOiB7XG4gICAgICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9SZWFkT25seUFjY2Vzc1wiXG4gICAgICB9LFxuICAgICAgU3lzdGVtQWRtaW5pc3RyYXRvcjoge1xuICAgICAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvam9iLWZ1bmN0aW9uL1N5c3RlbUFkbWluaXN0cmF0b3JcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZSA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJsaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVwiLFxuICAgICAgICBvbkNyZWF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6IFwic3NvLWFkbWluXCIsXG4gICAgICAgICAgYWN0aW9uOiBcIkxpc3RJbnN0YW5jZXNDb21tYW5kXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgTWF4UmVzdWx0czogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgICAgXCJsaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVwiXG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXCJzc286TGlzdEluc3RhbmNlc1wiXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpJYW1JZGVudGl0eUNlbnRlclwiXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4gPSBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgXCJJbnN0YW5jZXMuMC5JbnN0YW5jZUFyblwiXG4gICAgKTtcbiAgICB0aGlzLmlkZW50aXR5U3RvcmVJZCA9IGN1c3RvbVJlc291cmNlLmdldFJlc3BvbnNlRmllbGQoXG4gICAgICBcIkluc3RhbmNlcy4wLklkZW50aXR5U3RvcmVJZFwiXG4gICAgKTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaWRlbnRpdHlDZW50ZXJBcm5cIiwge1xuICAgICAga2V5OiBcImlkZW50aXR5Q2VudGVyQXJuXCIsXG4gICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgIGV4cG9ydE5hbWU6IFwiaWRlbnRpdHlDZW50ZXJBcm5cIlxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpZGVudGl0eVN0b3JlSWRcIiwge1xuICAgICAga2V5OiBcImlkZW50aXR5U3RvcmVJRFwiLFxuICAgICAgdmFsdWU6IHRoaXMuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eVN0b3JlSWRcIlxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBbcGVybWlzc2lvblNldCwgcGVybWlzc2lvblNldEFzc29jaWF0aW9uXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIGRlZmF1bHRQZXJtaXNzaW9uU2V0c1xuICAgICkpIHtcbiAgICAgIGNvbnN0IHBlcm1TZXQgPSBuZXcgUGVybWlzc2lvblNldCh0aGlzLCBgJHtwZXJtaXNzaW9uU2V0fVBlcm1pc3Npb25TZXRgLCB7XG4gICAgICAgIG5hbWU6IHBlcm1pc3Npb25TZXQsXG4gICAgICAgIGluc3RhbmNlQXJuOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkICR7cGVybWlzc2lvblNldH0gcG9saWN5YCxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbcGVybWlzc2lvblNldEFzc29jaWF0aW9uLlBvbGljeV0sXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIm1hbmFnZW1lbnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEdyb3VwKHRoaXMsIGAke3Blcm1pc3Npb25TZXR9R3JvdXBgLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBwZXJtaXNzaW9uU2V0LFxuICAgICAgICBpZGVudGl0eVN0b3JlSWQ6IHRoaXMuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEdyb3VwIGZvciBhc3NvY2lhdGVkICR7cGVybWlzc2lvblNldH0gcGVybWlzc2lvbiBzZXRgXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaWRlbnRpdHlDZW50ZXJHcm91cHMucHVzaChncm91cC5kaXNwbGF5TmFtZSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cGVybWlzc2lvblNldH1Hcm91cElkYCwge1xuICAgICAgICBrZXk6IGAke3Blcm1pc3Npb25TZXR9R3JvdXBJZGAsXG4gICAgICAgIHZhbHVlOiBncm91cC5hdHRyR3JvdXBJZCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7cGVybWlzc2lvblNldH1Hcm91cElkYFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgW2FjY291bnROYW1lLCBhY2NvdW50SWRdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLmFjY291bnRzKSkge1xuICAgICAgICBpZiAoIWFjY291bnRJZCkgY29udGludWU7XG5cbiAgICAgICAgbmV3IEFzc2lnbm1lbnQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgJHtzdHJpcEFuZENhbWVsQ2FzZShhY2NvdW50TmFtZSl9JHtwZXJtaXNzaW9uU2V0fUFzc29jaWF0aW9uYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnN0YW5jZUFybjogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgICAgICAgIHBlcm1pc3Npb25TZXRBcm46IHBlcm1TZXQuYXR0clBlcm1pc3Npb25TZXRBcm4sXG4gICAgICAgICAgICBwcmluY2lwYWxUeXBlOiBcIkdST1VQXCIsXG4gICAgICAgICAgICBwcmluY2lwYWxJZDogZ3JvdXAuYXR0ckdyb3VwSWQsXG4gICAgICAgICAgICB0YXJnZXRUeXBlOiBcIkFXU19BQ0NPVU5UXCIsXG4gICAgICAgICAgICB0YXJnZXRJZDogYWNjb3VudElkXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpZGVudGl0eUNlbnRlckdyb3Vwc1wiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlDZW50ZXJHcm91cHNcIixcbiAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5Q2VudGVyR3JvdXBzLmpvaW4oXCIsXCIpLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eUNlbnRlckdyb3Vwc1wiXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFDaEUsMkNBQXVDO0FBQ3ZDLGlEQUFzRDtBQUN0RCx1RUFBb0U7QUFDcEUsdUZBQW9GO0FBRXBGLHFFQUFrRTtBQUNsRSwyRUFJZ0Q7QUFDaEQsb0dBQWlHO0FBWWpHLE1BQU0scUJBQXFCLEdBQXdDO0lBQ2pFLG1CQUFtQixFQUFFO1FBQ25CLE1BQU0sRUFBRSw2Q0FBNkM7UUFDckQsV0FBVyxFQUFFLDBEQUEwRDtLQUN4RTtJQUNELGNBQWMsRUFBRTtRQUNkLE1BQU0sRUFBRSx3Q0FBd0M7UUFDaEQsV0FBVyxFQUFFLHFEQUFxRDtLQUNuRTtJQUNELE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxrREFBa0Q7UUFDMUQsV0FBVyxFQUFFLDhDQUE4QztLQUM1RDtDQUNGLENBQUM7QUFFRixNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUkzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQ0FBaUIsQ0FDMUMsSUFBSSxFQUNKLDRCQUE0QixFQUM1QjtZQUNFLFlBQVksRUFBRSw0QkFBNEI7WUFDMUMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUsc0JBQXNCO2dCQUM5QixVQUFVLEVBQUU7b0JBQ1YsVUFBVSxFQUFFLENBQUM7aUJBQ2Q7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFD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QW1CLEVBQUU7b0JBQ3JELGFBQWEsRUFBRSxPQUFPO29CQUN0QixXQUFXLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDL0IsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFFBQVEsRUFBRSxTQUFTO29CQUNuQixVQUFVLEVBQUUsYUFBYSxDQUFDLG1CQUFtQjtpQkFDOUMsQ0FDRixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7Q0FDRjtBQXhHRCx3Q0F3R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dFwiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBzdHJpcEFuZENhbWVsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpcEFuZENhbWVsQ2FzZVwiO1xuaW1wb3J0IHtcbiAgR3JvdXAsXG4gIFBlcm1pc3Npb25TZXQsXG4gIEFzc2lnbm1lbnRcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtL2lkZW50aXR5Q2VudGVyXCI7XG5pbXBvcnQgeyBBdHRhY2hNYW5hZ2VkUG9saWN5IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtL2lkZW50aXR5Q2VudGVyL2F0dGFjaE1hbmFnZWRQb2xpY3lcIjtcblxuaW50ZXJmYWNlIElkZW50aXR5Q2VudGVyUHJvcHMge1xuICBhY2NvdW50czogS2V5VmFsdWU7XG4gIHRhZ3M/OiBLZXlWYWx1ZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25TZXRDb25maWcge1xuICBQb2xpY3k6IHN0cmluZztcbiAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRQZXJtaXNzaW9uU2V0czogUmVjb3JkPHN0cmluZywgUGVybWlzc2lvblNldENvbmZpZz4gPSB7XG4gIEFkbWluaXN0cmF0b3JBY2Nlc3M6IHtcbiAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2Vzc1wiLFxuICAgIERlc2NyaXB0aW9uOiBcIlBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkIEFkbWluaXN0cmF0b3JBY2Nlc3MgcG9saWN5XCJcbiAgfSxcbiAgUmVhZE9ubHlBY2Nlc3M6IHtcbiAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvUmVhZE9ubHlBY2Nlc3NcIixcbiAgICBEZXNjcmlwdGlvbjogXCJQZXJtaXNzaW9uIHNldCBmb3IgYXNzb2NpYXRlZCBSZWFkT25seUFjY2VzcyBwb2xpY3lcIlxuICB9LFxuICBCaWxsaW5nOiB7XG4gICAgUG9saWN5OiBcImFybjphd3M6aWFtOjphd3M6cG9saWN5L0FXU0JpbGxpbmdSZWFkT25seUFjY2Vzc1wiLFxuICAgIERlc2NyaXB0aW9uOiBcIlBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkIEJpbGxpbmcgcG9saWN5XCJcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIElkZW50aXR5Q2VudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGlkZW50aXR5U3RvcmVJZDogc3RyaW5nO1xuICBwdWJsaWMgaWRlbnRpdHlDZW50ZXJBcm46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWRlbnRpdHlDZW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlKCk7XG4gICAgdGhpcy5jcmVhdGVQZXJtaXNzaW9uU2V0KHByb3BzKTtcbiAgfVxuXG4gIGxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlKCkge1xuICAgIGNvbnN0IGN1c3RvbVJlc291cmNlID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgdGhpcyxcbiAgICAgIFwibGlzdElkZW50aXR5Q2VudGVySW5zdGFuY2VcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCIsXG4gICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgICBhY3Rpb246IFwiTGlzdEluc3RhbmNlc0NvbW1hbmRcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBNYXhSZXN1bHRzOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCJcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbzpMaXN0SW5zdGFuY2VzXCJdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OklhbUlkZW50aXR5Q2VudGVyXCJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5pZGVudGl0eUNlbnRlckFybiA9IGN1c3RvbVJlc291cmNlLmdldFJlc3BvbnNlRmllbGQoXG4gICAgICBcIkluc3RhbmNlcy4wLkluc3RhbmNlQXJuXCJcbiAgICApO1xuICAgIHRoaXMuaWRlbnRpdHlTdG9yZUlkID0gY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcbiAgICAgIFwiSW5zdGFuY2VzLjAuSWRlbnRpdHlTdG9yZUlkXCJcbiAgICApO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpZGVudGl0eUNlbnRlckFyblwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlDZW50ZXJBcm5cIixcbiAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eUNlbnRlckFyblwiXG4gICAgfSk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImlkZW50aXR5U3RvcmVJZFwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlTdG9yZUlEXCIsXG4gICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eVN0b3JlSWQsXG4gICAgICBleHBvcnROYW1lOiBcImlkZW50aXR5U3RvcmVJZFwiXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVQZXJtaXNzaW9uU2V0KHByb3BzOiBJZGVudGl0eUNlbnRlclByb3BzKSB7XG4gICAgLy8gQ3JlYXRlIHBlcm1pc3Npb24gc2V0c1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdFBlcm1pc3Npb25TZXRzKSkge1xuICAgICAgY29uc3QgcGVybWlzc2lvblNldCA9IG5ldyBQZXJtaXNzaW9uU2V0KHRoaXMsIGBQZXJtaXNzaW9uU2V0JHtuYW1lfWAsIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgaW5zdGFuY2VBcm46IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjb25maWcuRGVzY3JpcHRpb24sXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdHRhY2ggUG9saWNpZXMgdG8gUGVybWlzc2lvbiBTZXRzXG4gICAgICBuZXcgQXR0YWNoTWFuYWdlZFBvbGljeSh0aGlzLCBgQXR0YWNoTWFuYWdlZFBvbGljeSR7bmFtZX1gLCB7XG4gICAgICAgIGluc3RhbmNlQXJuOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgICBwZXJtaXNzaW9uU2V0OiBuYW1lLFxuICAgICAgICBwZXJtaXNzaW9uU2V0QXJuOiBwZXJtaXNzaW9uU2V0LmdldFBlcm1pc3Npb25TZXRBcm4oKSxcbiAgICAgICAgbWFuYWdlZFBvbGljeUFybjogY29uZmlnLlBvbGljeVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBHcm91cHNcbiAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEdyb3VwKHRoaXMsIGAke3Blcm1pc3Npb25TZXR9R3JvdXBgLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICBpZGVudGl0eVN0b3JlSWQ6IHRoaXMuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEdyb3VwIGZvciBhc3NvY2lhdGVkICR7cGVybWlzc2lvblNldH0gcGVybWlzc2lvbiBzZXRgXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtuYW1lfUdyb3VwSWRgLCB7XG4gICAgICAgIGtleTogYCR7bmFtZX1Hcm91cElkYCxcbiAgICAgICAgdmFsdWU6IGdyb3VwLmdldEdyb3VwSWQoKSxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7bmFtZX1Hcm91cElkYFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFzc2lnbiBHcm91cHMgdG8gQVdTIEFjY291bnRzXG4gICAgICBmb3IgKGNvbnN0IFthY2NvdW50TmFtZSwgYWNjb3VudElkXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgICAgbmV3IEFzc2lnbm1lbnQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgJHtzdHJpcEFuZENhbWVsQ2FzZShhY2NvdW50TmFtZSl9JHtwZXJtaXNzaW9uU2V0fUFzc29jaWF0aW9uYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnN0YW5jZUFybjogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgICAgICAgIHBlcm1pc3Npb25TZXRBcm46IHBlcm1pc3Npb25TZXQuZ2V0UGVybWlzc2lvblNldEFybigpLFxuICAgICAgICAgICAgcHJpbmNpcGFsVHlwZTogXCJHUk9VUFwiLFxuICAgICAgICAgICAgcHJpbmNpcGFsSWQ6IGdyb3VwLmdldEdyb3VwSWQoKSxcbiAgICAgICAgICAgIHRhcmdldFR5cGU6IFwiQVdTX0FDQ09VTlRcIixcbiAgICAgICAgICAgIHRhcmdldElkOiBhY2NvdW50SWQsXG4gICAgICAgICAgICBkZXBlbmRlbmN5OiBwZXJtaXNzaW9uU2V0LmRlbGV0ZVBlcm1pc3Npb25TZXRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -64,6 +64,23 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
64
64
  },
65
65
  physicalResourceId: customResources.PhysicalResourceId.of(`createGroupMembership${memberGroup}`)
66
66
  },
67
+ resourceType: "Custom::IdentityCenterUsers"
68
+ });
69
+ const refreshMembership = new awsCustomResource_1.AwsCustomResource(this, `refreshMembership${memberGroup}`, {
70
+ functionName: `refreshGroupMembership${memberGroup}`,
71
+ onUpdate: {
72
+ service: "identityStore",
73
+ action: "deleteGroupMembership",
74
+ parameters: {
75
+ IdentityStoreId: identityStoreId,
76
+ MembershipId: groupMembershipId.getResponseField("MembershipId")
77
+ },
78
+ physicalResourceId: customResources.PhysicalResourceId.of(`refreshGroupMembership${memberGroup}`)
79
+ },
80
+ resourceType: "Custom::IdentityCenterUsers"
81
+ });
82
+ const recreateMembership = new awsCustomResource_1.AwsCustomResource(this, `recreateGroupMembership${memberGroup}`, {
83
+ functionName: `recreateGroupMembership${memberGroup}`,
67
84
  onUpdate: {
68
85
  service: "identityStore",
69
86
  action: "createGroupMembership",
@@ -74,9 +91,11 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
74
91
  UserId: userId
75
92
  }
76
93
  },
77
- physicalResourceId: customResources.PhysicalResourceId.of(`updateGroupMembership${memberGroup}`)
78
- }
94
+ physicalResourceId: customResources.PhysicalResourceId.of(`recreateGroupMembership${memberGroup}`)
95
+ },
96
+ resourceType: "Custom::IdentityCenterUsers"
79
97
  });
98
+ refreshMembership.node.addDependency(recreateMembership);
80
99
  new awsCustomResource_1.AwsCustomResource(this, `deleteGroupMembership${memberGroup}`, {
81
100
  functionName: "deleteGroupMembership",
82
101
  onDelete: {
@@ -93,4 +112,4 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
93
112
  }
94
113
  }
95
114
  exports.IdentityCenterGroupMembership = IdentityCenterGroupMembership;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlckdyb3VwTWVtYmVyc2hpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLHVGQUFvRjtBQVFwRiwwREFBMEQ7QUFDMUQsTUFBYSw2QkFBOEIsU0FBUSx5QkFBVztJQUM1RCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUF5QztRQUV6QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sZUFBZSxHQUFHLGdCQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxTQUFTLENBQUMsQ0FBQztRQUU1RCxLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDdkMsTUFBTSxXQUFXLEdBQ2YsTUFBTTtpQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLEtBQUssQ0FBQyxjQUFjLENBQUM7aUJBQ3JCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzRCxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNYLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxXQUFXLEVBQUUsRUFBRTtnQkFDdEUsWUFBWSxFQUFFLFlBQVksV0FBVyxFQUFFO2dCQUN2QyxRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLE1BQU0sRUFBRSxXQUFXO29CQUNuQixVQUFVLEVBQUU7d0JBQ1YsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLE9BQU8sRUFBRTs0QkFDUDtnQ0FDRSxhQUFhLEVBQUUsVUFBVTtnQ0FDekIsY0FBYyxFQUFFLE1BQU07NkJBQ3ZCO3lCQUNGO3FCQUNGO29CQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQ3ZELFlBQVksV0FBVyxFQUFFLENBQzFCO2lCQUNGO2dCQUNELFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQUUsZUFBZTtvQkFDeEIsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLFVBQVUsRUFBRTt3QkFDVixlQUFlLEVBQUUsZUFBZTt3QkFDaEMsT0FBTyxFQUFFOzRCQUNQO2dDQUNFLGFBQWEsRUFBRSxVQUFVO2dDQUN6QixjQUFjLEVBQUUsTUFBTTs2QkFDdkI7eUJBQ0Y7cUJBQ0Y7b0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQsWUFBWSxXQUFXLEVBQUUsQ0FDMUI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUUzRCxNQUFNLGlCQUFpQixHQUFHLElBQUkscUNBQWlCLENBQzdDLElBQUksRUFDSix3QkFBd0IsV0FBVyxFQUFFLEVBQ3JDO2dCQUNFLFlBQVksRUFBRSx1QkFBdUI7Z0JBQ3JDLFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQUUsZUFBZTtvQkFDeEIsTUFBTSxFQUFFLHVCQUF1QjtvQkFDL0IsVUFBVSxFQUFFO3dCQUNWLE9BQU8sRUFBRSxPQUFPO3dCQUNoQixlQUFlLEVBQUUsZUFBZTt3QkFDaEMsUUFBUSxFQUFFOzRCQUNSLE1BQU0sRUFBRSxNQUFNO3lCQUNmO3FCQUNGO29CQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQ3ZELHdCQUF3QixXQUFXLEVBQUUsQ0FDdEM7aUJBQ0Y7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxlQUFlO29CQUN4QixNQUFNLEVBQUUsdUJBQXVCO29CQUMvQixVQUFVLEVBQUU7d0JBQ1YsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLGVBQWUsRUFBRSxlQUFlO3dCQUNoQyxRQUFRLEVBQUU7NEJBQ1IsTUFBTSxFQUFFLE1BQU07eUJBQ2Y7cUJBQ0Y7b0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQsd0JBQXdCLFdBQVcsRUFBRSxDQUN0QztpQkFDRjthQUNGLENBQ0YsQ0FBQztZQUVGLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixXQUFXLEVBQUUsRUFBRTtnQkFDakUsWUFBWSxFQUFFLHVCQUF1QjtnQkFDckMsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxlQUFlO29CQUN4QixNQUFNLEVBQUUsdUJBQXVCO29CQUMvQixVQUFVLEVBQUU7d0JBQ1YsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7cUJBQ2pFO2lCQUNGO2dCQUNELFlBQVksRUFBRSw2QkFBNkI7YUFDNUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0NBQ0Y7QUE3R0Qsc0VBNkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm4sIE5lc3RlZFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgSWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXBQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBncm91cE5hbWU6IHN0cmluZztcbiAgZ3JvdXBNZW1iZXJzOiBzdHJpbmdbXTtcbn1cblxuLy8gVE9ETzogVGhpcyByZXF1aXJlcyBhIGRlbGV0aW9uIGFuZCByZWNyZWF0aW9uIHRvIHVwZGF0ZVxuZXhwb3J0IGNsYXNzIElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwIGV4dGVuZHMgTmVzdGVkU3RhY2sge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGlkZW50aXR5U3RvcmVJZCA9IEZuLmltcG9ydFZhbHVlKFwiaWRlbnRpdHlTdG9yZUlkXCIpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBGbi5pbXBvcnRWYWx1ZShgJHtwcm9wcy5ncm91cE5hbWV9R3JvdXBJZGApO1xuXG4gICAgZm9yIChjb25zdCBtZW1iZXIgb2YgcHJvcHMuZ3JvdXBNZW1iZXJzKSB7XG4gICAgICBjb25zdCBtZW1iZXJHcm91cCA9XG4gICAgICAgIG1lbWJlclxuICAgICAgICAgIC5zcGxpdChcIkBcIilbMF1cbiAgICAgICAgICAuc3BsaXQoL1teYS16QS1aMC05XS8pXG4gICAgICAgICAgLm1hcCgocGFydCkgPT4gcGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnQuc2xpY2UoMSkpXG4gICAgICAgICAgLmpvaW4oXCJcIikgK1xuICAgICAgICBwcm9wcy5ncm91cE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICBwcm9wcy5ncm91cE5hbWUuc2xpY2UoMSk7XG5cbiAgICAgIGNvbnN0IGxpc3RVc2VyID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIGBsaXN0VXNlcnMke21lbWJlckdyb3VwfWAsIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBgbGlzdFVzZXJzJHttZW1iZXJHcm91cH1gLFxuICAgICAgICBvbkNyZWF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6IFwiaWRlbnRpdHlTdG9yZVwiLFxuICAgICAgICAgIGFjdGlvbjogXCJsaXN0VXNlcnNcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBJZGVudGl0eVN0b3JlSWQ6IGlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgICAgIEZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEF0dHJpYnV0ZVBhdGg6IFwiVXNlck5hbWVcIixcbiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZTogbWVtYmVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICAgIGBsaXN0VXNlcnMke21lbWJlckdyb3VwfWBcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgYWN0aW9uOiBcImxpc3R1c2Vyc1wiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgRmlsdGVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQXR0cmlidXRlUGF0aDogXCJVc2VyTmFtZVwiLFxuICAgICAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlOiBtZW1iZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgICAgYGxpc3RVc2VycyR7bWVtYmVyR3JvdXB9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHVzZXJJZCA9IGxpc3RVc2VyLmdldFJlc3BvbnNlRmllbGQoXCJVc2Vycy4wLlVzZXJJZFwiKTtcblxuICAgICAgY29uc3QgZ3JvdXBNZW1iZXJzaGlwSWQgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBjcmVhdGVHcm91cE1lbWJlcnNoaXAke21lbWJlckdyb3VwfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IFwiY3JlYXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiaWRlbnRpdHlTdG9yZVwiLFxuICAgICAgICAgICAgYWN0aW9uOiBcImNyZWF0ZUdyb3VwTWVtYmVyc2hpcFwiLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBHcm91cElkOiBncm91cElkLFxuICAgICAgICAgICAgICBJZGVudGl0eVN0b3JlSWQ6IGlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgICAgICAgTWVtYmVySWQ6IHtcbiAgICAgICAgICAgICAgICBVc2VySWQ6IHVzZXJJZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgICAgICBgY3JlYXRlR3JvdXBNZW1iZXJzaGlwJHttZW1iZXJHcm91cH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwiY3JlYXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgICBNZW1iZXJJZDoge1xuICAgICAgICAgICAgICAgIFVzZXJJZDogdXNlcklkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAgIGB1cGRhdGVHcm91cE1lbWJlcnNoaXAke21lbWJlckdyb3VwfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgZGVsZXRlR3JvdXBNZW1iZXJzaGlwJHttZW1iZXJHcm91cH1gLCB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJkZWxldGVHcm91cE1lbWJlcnNoaXBcIixcbiAgICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiBcImlkZW50aXR5U3RvcmVcIixcbiAgICAgICAgICBhY3Rpb246IFwiZGVsZXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgSWRlbnRpdHlTdG9yZUlkOiBpZGVudGl0eVN0b3JlSWQsXG4gICAgICAgICAgICBNZW1iZXJzaGlwSWQ6IGdyb3VwTWVtYmVyc2hpcElkLmdldFJlc3BvbnNlRmllbGQoXCJNZW1iZXJzaGlwSWRcIilcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OklkZW50aXR5Q2VudGVyVXNlcnNcIlxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlckdyb3VwTWVtYmVyc2hpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLHVGQUFvRjtBQVFwRiwwREFBMEQ7QUFDMUQsTUFBYSw2QkFBOEIsU0FBUSx5QkFBVztJQUM1RCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUF5QztRQUV6QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sZUFBZSxHQUFHLGdCQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxTQUFTLENBQUMsQ0FBQztRQUU1RCxLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDdkMsTUFBTSxXQUFXLEdBQ2YsTUFBTTtpQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLEtBQUssQ0FBQyxjQUFjLENBQUM7aUJBQ3JCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzRCxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNYLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxx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Q0QsWUFBWSxFQUFFLDZCQUE2QjthQUM1QyxDQUNGLENBQUM7WUFFRixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFekQsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLFdBQVcsRUFBRSxFQUFFO2dCQUNqRSxZQUFZLEVBQUUsdUJBQXVCO2dCQUNyQyxRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLE1BQU0sRUFBRSx1QkFBdUI7b0JBQy9CLFVBQVUsRUFBRTt3QkFDVixlQUFlLEVBQUUsZUFBZTt3QkFDaEMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztxQkFDakU7aUJBQ0Y7Z0JBQ0QsWUFBWSxFQUFFLDZCQUE2QjthQUM1QyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7Q0FDRjtBQTdJRCxzRUE2SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbiwgTmVzdGVkU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmludGVyZmFjZSBJZGVudGl0eUNlbnRlckdyb3VwTWVtYmVyc2hpcFByb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIGdyb3VwTmFtZTogc3RyaW5nO1xuICBncm91cE1lbWJlcnM6IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBUaGlzIHJlcXVpcmVzIGEgZGVsZXRpb24gYW5kIHJlY3JlYXRpb24gdG8gdXBkYXRlXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXAgZXh0ZW5kcyBOZXN0ZWRTdGFjayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXBQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlTdG9yZUlkID0gRm4uaW1wb3J0VmFsdWUoXCJpZGVudGl0eVN0b3JlSWRcIik7XG4gICAgY29uc3QgZ3JvdXBJZCA9IEZuLmltcG9ydFZhbHVlKGAke3Byb3BzLmdyb3VwTmFtZX1Hcm91cElkYCk7XG5cbiAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwcm9wcy5ncm91cE1lbWJlcnMpIHtcbiAgICAgIGNvbnN0IG1lbWJlckdyb3VwID1cbiAgICAgICAgbWVtYmVyXG4gICAgICAgICAgLnNwbGl0KFwiQFwiKVswXVxuICAgICAgICAgIC5zcGxpdCgvW15hLXpBLVowLTldLylcbiAgICAgICAgICAubWFwKChwYXJ0KSA9PiBwYXJ0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zbGljZSgxKSlcbiAgICAgICAgICAuam9pbihcIlwiKSArXG4gICAgICAgIHByb3BzLmdyb3VwTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArXG4gICAgICAgIHByb3BzLmdyb3VwTmFtZS5zbGljZSgxKTtcblxuICAgICAgY29uc3QgbGlzdFVzZXIgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgYGxpc3RVc2VycyR7bWVtYmVyR3JvdXB9YCwge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGBsaXN0VXNlcnMke21lbWJlckdyb3VwfWAsXG4gICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgYWN0aW9uOiBcImxpc3RVc2Vyc1wiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgRmlsdGVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQXR0cmlidXRlUGF0aDogXCJVc2VyTmFtZVwiLFxuICAgICAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlOiBtZW1iZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgICAgYGxpc3RVc2VycyR7bWVtYmVyR3JvdXB9YFxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiBcImlkZW50aXR5U3RvcmVcIixcbiAgICAgICAgICBhY3Rpb246IFwibGlzdHVzZXJzXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgSWRlbnRpdHlTdG9yZUlkOiBpZGVudGl0eVN0b3JlSWQsXG4gICAgICAgICAgICBGaWx0ZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVQYXRoOiBcIlVzZXJOYW1lXCIsXG4gICAgICAgICAgICAgICAgQXR0cmlidXRlVmFsdWU6IG1lbWJlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICBgbGlzdFVzZXJzJHttZW1iZXJHcm91cH1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXNlcklkID0gbGlzdFVzZXIuZ2V0UmVzcG9uc2VGaWVsZChcIlVzZXJzLjAuVXNlcklkXCIpO1xuXG4gICAgICBjb25zdCBncm91cE1lbWJlcnNoaXBJZCA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYGNyZWF0ZUdyb3VwTWVtYmVyc2hpcCR7bWVtYmVyR3JvdXB9YCxcbiAgICAgICAge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogXCJjcmVhdGVHcm91cE1lbWJlcnNoaXBcIixcbiAgICAgICAgICBvbkNyZWF0ZToge1xuICAgICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwiY3JlYXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgICBNZW1iZXJJZDoge1xuICAgICAgICAgICAgICAgIFVzZXJJZDogdXNlcklkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAgIGBjcmVhdGVHcm91cE1lbWJlcnNoaXAke21lbWJlckdyb3VwfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OklkZW50aXR5Q2VudGVyVXNlcnNcIlxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCByZWZyZXNoTWVtYmVyc2hpcCA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYHJlZnJlc2hNZW1iZXJzaGlwJHttZW1iZXJHcm91cH1gLFxuICAgICAgICB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBgcmVmcmVzaEdyb3VwTWVtYmVyc2hpcCR7bWVtYmVyR3JvdXB9YCxcbiAgICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwiZGVsZXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgICBNZW1iZXJzaGlwSWQ6IGdyb3VwTWVtYmVyc2hpcElkLmdldFJlc3BvbnNlRmllbGQoXCJNZW1iZXJzaGlwSWRcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAgIGByZWZyZXNoR3JvdXBNZW1iZXJzaGlwJHttZW1iZXJHcm91cH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpJZGVudGl0eUNlbnRlclVzZXJzXCJcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVjcmVhdGVNZW1iZXJzaGlwID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgcmVjcmVhdGVHcm91cE1lbWJlcnNoaXAke21lbWJlckdyb3VwfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGByZWNyZWF0ZUdyb3VwTWVtYmVyc2hpcCR7bWVtYmVyR3JvdXB9YCxcbiAgICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwiY3JlYXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgICBNZW1iZXJJZDoge1xuICAgICAgICAgICAgICAgIFVzZXJJZDogdXNlcklkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAgIGByZWNyZWF0ZUdyb3VwTWVtYmVyc2hpcCR7bWVtYmVyR3JvdXB9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6SWRlbnRpdHlDZW50ZXJVc2Vyc1wiXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJlZnJlc2hNZW1iZXJzaGlwLm5vZGUuYWRkRGVwZW5kZW5jeShyZWNyZWF0ZU1lbWJlcnNoaXApO1xuXG4gICAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgYGRlbGV0ZUdyb3VwTWVtYmVyc2hpcCR7bWVtYmVyR3JvdXB9YCwge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IFwiZGVsZXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJpZGVudGl0eVN0b3JlXCIsXG4gICAgICAgICAgYWN0aW9uOiBcImRlbGV0ZUdyb3VwTWVtYmVyc2hpcFwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgTWVtYmVyc2hpcElkOiBncm91cE1lbWJlcnNoaXBJZC5nZXRSZXNwb25zZUZpZWxkKFwiTWVtYmVyc2hpcElkXCIpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpJZGVudGl0eUNlbnRlclVzZXJzXCJcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,11 +1,21 @@
1
1
  import { Construct } from "constructs";
2
2
  import { Stack } from "aws-cdk-lib";
3
- export interface hostedZoneProps {
3
+ import { ARecordProps, CnameRecordProps, MxRecordProps, NsRecordProps, TxtRecordProps } from "aws-cdk-lib/aws-route53";
4
+ export interface HostedZoneProps {
4
5
  zoneName: string;
5
- importExisting?: boolean;
6
- importedHostedZoneId?: string;
6
+ hostedZoneId?: string;
7
7
  }
8
8
  export declare class HostedZone extends Stack {
9
9
  private hostedZone;
10
- constructor(scope: Construct, id: string, props: hostedZoneProps);
10
+ private hostedZoneId;
11
+ private importedHostedZone;
12
+ constructor(scope: Construct, id: string, props: HostedZoneProps);
13
+ addHostedZone(zoneName: string): void;
14
+ importHostedZone(zoneName: string): void;
15
+ delegateHostedZone(): void;
16
+ addARecord(props: Omit<ARecordProps, "zone">): void;
17
+ addCname(props: Omit<CnameRecordProps, "zone">): void;
18
+ addMx(props: Omit<MxRecordProps, "zone">): void;
19
+ addNS(props: Omit<NsRecordProps, "zone">): void;
20
+ addTxt(props: Omit<TxtRecordProps, "zone">): void;
11
21
  }
@@ -1,37 +1,55 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HostedZone = void 0;
4
- const route53 = require("aws-cdk-lib/aws-route53");
5
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
6
5
  const iam_1 = require("../../resources/aws/iam");
7
6
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
8
8
  const tagResource_1 = require("../../utils/tagResource");
9
9
  class HostedZone extends aws_cdk_lib_1.Stack {
10
10
  constructor(scope, id, props) {
11
11
  super(scope, id);
12
- if (props.importExisting) {
13
- this.hostedZone = route53.HostedZone.fromHostedZoneAttributes(this, "importedHostedZone", {
14
- hostedZoneId: props.importedHostedZoneId || "",
15
- zoneName: props.zoneName
16
- });
17
- (0, tagResource_1.default)(this.hostedZone, {
18
- "fjall:costAllocation:environment": "management",
19
- "fjall:costAllocation:service": "hostedZone",
20
- "fjall:costAllocation:domain": `${props.zoneName}`
21
- });
12
+ // If a hostedZoneId is provided import it, unless create a new hosted zone
13
+ if (!props.hostedZoneId) {
14
+ this.addHostedZone(props.zoneName);
15
+ this.hostedZoneId = this.hostedZone.hostedZoneId;
22
16
  }
23
17
  else {
24
- this.hostedZone = new route53.HostedZone(this, "HostedZone", {
25
- zoneName: props.zoneName,
26
- comment: `Hosted Zone for ${props.zoneName}`
27
- });
28
- (0, tagResource_1.default)(this.hostedZone, {
29
- "fjall:costAllocation:environment": "management",
30
- "fjall:costAllocation:service": "hostedZone",
31
- "fjall:costAllocation:domain": `${props.zoneName}`
32
- });
18
+ console.log(props.zoneName);
19
+ this.hostedZoneId = props.hostedZoneId;
33
20
  }
34
- const domainName = this.hostedZone.zoneName.split(".", 1);
21
+ this.importHostedZone(props.zoneName);
22
+ this.delegateHostedZone();
23
+ }
24
+ addHostedZone(zoneName) {
25
+ this.hostedZone = new aws_route53_1.HostedZone(this, "HostedZone", {
26
+ zoneName: zoneName,
27
+ comment: `Hosted Zone for ${zoneName}`
28
+ });
29
+ (0, tagResource_1.default)(this.hostedZone, {
30
+ "fjall:costAllocation:environment": "management",
31
+ "fjall:costAllocation:service": "hostedZone",
32
+ "fjall:costAllocation:domain": `${zoneName}`
33
+ });
34
+ }
35
+ importHostedZone(zoneName) {
36
+ this.importedHostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(this, "importedHostedZone", {
37
+ hostedZoneId: this.hostedZoneId,
38
+ zoneName: zoneName
39
+ });
40
+ (0, tagResource_1.default)(this.importedHostedZone, {
41
+ "fjall:costAllocation:environment": "management",
42
+ "fjall:costAllocation:service": "hostedZone",
43
+ "fjall:costAllocation:domain": `${zoneName}`
44
+ });
45
+ new aws_cdk_lib_1.CfnOutput(this, `${zoneName.split(".").join("")}HostedZoneId`, {
46
+ key: "HostedZoneId",
47
+ value: this.hostedZoneId,
48
+ exportName: `${zoneName.split(".").join("")}HostedZoneId`
49
+ });
50
+ }
51
+ delegateHostedZone() {
52
+ const domainName = this.importedHostedZone.zoneName.split(".", 1);
35
53
  const role = new iam_1.Role(this, `${domainName}DelegateHostedZoneRole`, {
36
54
  assumedBy: new aws_iam_1.OrganizationPrincipal(aws_cdk_lib_1.Fn.importValue("OrganisationId")),
37
55
  roleName: `${domainName}DelegateHostedZoneRole`,
@@ -49,25 +67,61 @@ class HostedZone extends aws_cdk_lib_1.Stack {
49
67
  new aws_iam_1.PolicyStatement({
50
68
  actions: ["route53:ChangeResourceRecordSets"],
51
69
  resources: [
52
- `arn:aws:route53:::hostedzone/${this.hostedZone.hostedZoneId}`
70
+ `arn:aws:route53:::hostedzone/${this.importedHostedZone.hostedZoneId}`
53
71
  ]
54
72
  })
55
73
  ]
56
74
  })
57
75
  }
58
76
  });
77
+ this.importedHostedZone.grantDelegation(role);
59
78
  new aws_cdk_lib_1.CfnOutput(this, "DelegateHostedZoneRoleArn", {
60
79
  key: `${domainName}DelegateHostedZoneRoleArn`,
61
80
  value: role.roleArn,
62
81
  exportName: `${domainName}DelegateHostedZoneRoleArn`
63
82
  });
64
- this.hostedZone.grantDelegation(role);
65
- new aws_cdk_lib_1.CfnOutput(this, `${props.zoneName.split(".").join("")}HostedZoneId`, {
66
- key: "HostedZoneId",
67
- value: this.hostedZone.hostedZoneId,
68
- exportName: `${props.zoneName.split(".").join("")}HostedZoneId`
83
+ }
84
+ addARecord(props) {
85
+ new aws_route53_1.ARecord(this, "ARecord", {
86
+ zone: this.importedHostedZone,
87
+ recordName: props.recordName,
88
+ comment: props.comment || `A Record for ${this.importedHostedZone.zoneName}`,
89
+ target: props.target,
90
+ ttl: props.ttl
91
+ });
92
+ }
93
+ addCname(props) {
94
+ new aws_route53_1.CnameRecord(this, ``, {
95
+ domainName: props.domainName,
96
+ zone: this.importedHostedZone,
97
+ comment: props.comment || `CNAME Record for ${this.importedHostedZone.zoneName}`,
98
+ ttl: props.ttl
99
+ });
100
+ }
101
+ addMx(props) {
102
+ new aws_route53_1.MxRecord(this, ``, {
103
+ zone: this.importedHostedZone,
104
+ comment: props.comment || `MX Record for ${this.importedHostedZone.zoneName}`,
105
+ values: props.values,
106
+ ttl: props.ttl
107
+ });
108
+ }
109
+ addNS(props) {
110
+ new aws_route53_1.NsRecord(this, ``, {
111
+ zone: this.importedHostedZone,
112
+ comment: props.comment || `NS Record for ${this.importedHostedZone.zoneName}`,
113
+ values: props.values,
114
+ ttl: props.ttl
115
+ });
116
+ }
117
+ addTxt(props) {
118
+ new aws_route53_1.TxtRecord(this, ``, {
119
+ zone: this.importedHostedZone,
120
+ comment: props.comment || `TXT Record for ${this.importedHostedZone.zoneName}`,
121
+ values: props.values,
122
+ ttl: props.ttl
69
123
  });
70
124
  }
71
125
  }
72
126
  exports.HostedZone = HostedZone;
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBbUQ7QUFDbkQsNkNBQW1EO0FBQ25ELGlEQUErQztBQUMvQyxpREFJNkI7QUFFN0IseURBQWtEO0FBUWxELE1BQWEsVUFBVyxTQUFRLG1CQUFLO0lBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUMzRCxJQUFJLEVBQ0osb0JBQW9CLEVBQ3BCO2dCQUNFLFlBQVksRUFBRSxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRTtnQkFDOUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCLENBQ0YsQ0FBQztZQUNGLElBQUEscUJBQVcsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMzQixrQ0FBa0MsRUFBRSxZQUFZO2dCQUNoRCw4QkFBOEIsRUFBRSxZQUFZO2dCQUM1Qyw2QkFBNkIsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7YUFDbkQsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDeEIsT0FBTyxFQUFFLG1CQUFtQixLQUFLLENBQUMsUUFBUSxFQUFFO2FBQzdDLENBQUMsQ0FBQztZQUNILElBQUEscUJBQVcsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUMzQixrQ0FBa0MsRUFBRSxZQUFZO2dCQUNoRCw4QkFBOEIsRUFBRSxZQUFZO2dCQUM1Qyw2QkFBNkIsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7YUFDbkQsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksVUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLFVBQVUsd0JBQXdCLEVBQUU7WUFDakUsU0FBUyxFQUFFLElBQUksK0JBQXFCLENBQUMsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RSxRQUFRLEVBQUUsR0FBRyxVQUFVLHdCQUF3QjtZQUMvQyxjQUFjLEVBQUU7Z0JBQ2QsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDdEMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMsMEJBQTBCLENBQUMsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE9BQU8sRUFBRSxDQUFDLGtDQUFrQyxDQUFDOzRCQUM3QyxTQUFTLEVBQUU7Z0NBQ1QsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFOzZCQUMvRDt5QkFDRixDQUFDO3FCQUNIO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsR0FBRyxFQUFFLEdBQUcsVUFBVSwyQkFBMkI7WUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ25CLFVBQVUsRUFBRSxHQUFHLFVBQVUsMkJBQTJCO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRTtZQUN2RSxHQUFHLEVBQUUsY0FBYztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1lBQ25DLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF2RUQsZ0NBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIEZuLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHtcbiAgT3JnYW5pemF0aW9uUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBJSG9zdGVkWm9uZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIGhvc3RlZFpvbmVQcm9wcyB7XG4gIHpvbmVOYW1lOiBzdHJpbmc7XG4gIGltcG9ydEV4aXN0aW5nPzogYm9vbGVhbjtcbiAgaW1wb3J0ZWRIb3N0ZWRab25lSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBIb3N0ZWRab25lIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIGhvc3RlZFpvbmU6IElIb3N0ZWRab25lIHwgSG9zdGVkWm9uZTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGhvc3RlZFpvbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuaW1wb3J0RXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiaW1wb3J0ZWRIb3N0ZWRab25lXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0ZWRab25lSWQ6IHByb3BzLmltcG9ydGVkSG9zdGVkWm9uZUlkIHx8IFwiXCIsIC8vIFRPRE86IGZpeCBzbyB0aGlzIGNhbiByZWFsbHkgYmUgYW4gb3B0aW9uYWwgcHJvcFxuICAgICAgICAgIHpvbmVOYW1lOiBwcm9wcy56b25lTmFtZVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGFnUmVzb3VyY2UodGhpcy5ob3N0ZWRab25lLCB7XG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogXCJtYW5hZ2VtZW50XCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImhvc3RlZFpvbmVcIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpkb21haW5cIjogYCR7cHJvcHMuem9uZU5hbWV9YFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZSA9IG5ldyByb3V0ZTUzLkhvc3RlZFpvbmUodGhpcywgXCJIb3N0ZWRab25lXCIsIHtcbiAgICAgICAgem9uZU5hbWU6IHByb3BzLnpvbmVOYW1lLFxuICAgICAgICBjb21tZW50OiBgSG9zdGVkIFpvbmUgZm9yICR7cHJvcHMuem9uZU5hbWV9YFxuICAgICAgfSk7XG4gICAgICB0YWdSZXNvdXJjZSh0aGlzLmhvc3RlZFpvbmUsIHtcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiaG9zdGVkWm9uZVwiLFxuICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmRvbWFpblwiOiBgJHtwcm9wcy56b25lTmFtZX1gXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkb21haW5OYW1lID0gdGhpcy5ob3N0ZWRab25lLnpvbmVOYW1lLnNwbGl0KFwiLlwiLCAxKTtcbiAgICBjb25zdCByb2xlID0gbmV3IFJvbGUodGhpcywgYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgT3JnYW5pemF0aW9uUHJpbmNpcGFsKEZuLmltcG9ydFZhbHVlKFwiT3JnYW5pc2F0aW9uSWRcIikpLFxuICAgICAgcm9sZU5hbWU6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZWAsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJsaXN0SG9zdGVkWm9uZXNcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInJvdXRlNTM6TGlzdEhvc3RlZFpvbmVzQnlOYW1lXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiY2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1wiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHt0aGlzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkfWBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiRGVsZWdhdGVIb3N0ZWRab25lUm9sZUFyblwiLCB7XG4gICAgICBrZXk6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZUFybmAsXG4gICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuYFxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0ZWRab25lLmdyYW50RGVsZWdhdGlvbihyb2xlKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuem9uZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIil9SG9zdGVkWm9uZUlkYCwge1xuICAgICAga2V5OiBcIkhvc3RlZFpvbmVJZFwiLFxuICAgICAgdmFsdWU6IHRoaXMuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy56b25lTmFtZS5zcGxpdChcIi5cIikuam9pbihcIlwiKX1Ib3N0ZWRab25lSWRgXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBbUQ7QUFDbkQsaURBQStDO0FBQy9DLGlEQUk2QjtBQUM3Qix5REFhaUM7QUFDakMseURBQWtEO0FBTWxELE1BQWEsVUFBVyxTQUFRLG1CQUFLO0lBSW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztTQUNsRDthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWdCO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDbkQsUUFBUSxFQUFFLFFBQVE7WUFDbEIsT0FBTyxFQUFFLG1CQUFtQixRQUFRLEVBQUU7U0FDdkMsQ0FBQyxDQUFDO1FBQ0gsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0Isa0NBQWtDLEVBQUUsWUFBWTtZQUNoRCw4QkFBOEIs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QUMsa0JBQWtCO1lBQzdCLE9BQU8sRUFDTCxLQUFLLENBQUMsT0FBTyxJQUFJLGtCQUFrQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQ3ZFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE1SUQsZ0NBNElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgRm4sIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5pbXBvcnQge1xuICBPcmdhbml6YXRpb25QcmluY2lwYWwsXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIEFSZWNvcmQsXG4gIEFSZWNvcmRQcm9wcyxcbiAgQ25hbWVSZWNvcmQsXG4gIENuYW1lUmVjb3JkUHJvcHMsXG4gIEhvc3RlZFpvbmUgYXMgaG9zdGVkWm9uZSxcbiAgSUhvc3RlZFpvbmUsXG4gIE14UmVjb3JkLFxuICBNeFJlY29yZFByb3BzLFxuICBOc1JlY29yZCxcbiAgTnNSZWNvcmRQcm9wcyxcbiAgVHh0UmVjb3JkLFxuICBUeHRSZWNvcmRQcm9wc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB0YWdSZXNvdXJjZSBmcm9tIFwiLi4vLi4vdXRpbHMvdGFnUmVzb3VyY2VcIjtcbmV4cG9ydCBpbnRlcmZhY2UgSG9zdGVkWm9uZVByb3BzIHtcbiAgem9uZU5hbWU6IHN0cmluZztcbiAgaG9zdGVkWm9uZUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSG9zdGVkWm9uZSBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSBob3N0ZWRab25lOiBob3N0ZWRab25lO1xuICBwcml2YXRlIGhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICBwcml2YXRlIGltcG9ydGVkSG9zdGVkWm9uZTogSUhvc3RlZFpvbmU7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBIb3N0ZWRab25lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gSWYgYSBob3N0ZWRab25lSWQgaXMgcHJvdmlkZWQgaW1wb3J0IGl0LCB1bmxlc3MgY3JlYXRlIGEgbmV3IGhvc3RlZCB6b25lXG4gICAgaWYgKCFwcm9wcy5ob3N0ZWRab25lSWQpIHtcbiAgICAgIHRoaXMuYWRkSG9zdGVkWm9uZShwcm9wcy56b25lTmFtZSk7XG4gICAgICB0aGlzLmhvc3RlZFpvbmVJZCA9IHRoaXMuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKHByb3BzLnpvbmVOYW1lKTtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gcHJvcHMuaG9zdGVkWm9uZUlkO1xuICAgIH1cblxuICAgIHRoaXMuaW1wb3J0SG9zdGVkWm9uZShwcm9wcy56b25lTmFtZSk7XG4gICAgdGhpcy5kZWxlZ2F0ZUhvc3RlZFpvbmUoKTtcbiAgfVxuXG4gIGFkZEhvc3RlZFpvbmUoem9uZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaG9zdGVkWm9uZSA9IG5ldyBob3N0ZWRab25lKHRoaXMsIFwiSG9zdGVkWm9uZVwiLCB7XG4gICAgICB6b25lTmFtZTogem9uZU5hbWUsXG4gICAgICBjb21tZW50OiBgSG9zdGVkIFpvbmUgZm9yICR7em9uZU5hbWV9YFxuICAgIH0pO1xuICAgIHRhZ1Jlc291cmNlKHRoaXMuaG9zdGVkWm9uZSwge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImhvc3RlZFpvbmVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZG9tYWluXCI6IGAke3pvbmVOYW1lfWBcbiAgICB9KTtcbiAgfVxuXG4gIGltcG9ydEhvc3RlZFpvbmUoem9uZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lID0gaG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgXCJpbXBvcnRlZEhvc3RlZFpvbmVcIixcbiAgICAgIHtcbiAgICAgICAgaG9zdGVkWm9uZUlkOiB0aGlzLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgem9uZU5hbWU6IHpvbmVOYW1lXG4gICAgICB9XG4gICAgKTtcbiAgICB0YWdSZXNvdXJjZSh0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSwge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBcIm1hbmFnZW1lbnRcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImhvc3RlZFpvbmVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZG9tYWluXCI6IGAke3pvbmVOYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7em9uZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIil9SG9zdGVkWm9uZUlkYCwge1xuICAgICAga2V5OiBcIkhvc3RlZFpvbmVJZFwiLFxuICAgICAgdmFsdWU6IHRoaXMuaG9zdGVkWm9uZUlkLFxuICAgICAgZXhwb3J0TmFtZTogYCR7em9uZU5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIil9SG9zdGVkWm9uZUlkYFxuICAgIH0pO1xuICB9XG5cbiAgZGVsZWdhdGVIb3N0ZWRab25lKCkge1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZS5zcGxpdChcIi5cIiwgMSk7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBSb2xlKHRoaXMsIGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IE9yZ2FuaXphdGlvblByaW5jaXBhbChGbi5pbXBvcnRWYWx1ZShcIk9yZ2FuaXNhdGlvbklkXCIpKSxcbiAgICAgIHJvbGVOYW1lOiBgJHtkb21haW5OYW1lfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVgLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgW1wibGlzdEhvc3RlZFpvbmVzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyb3V0ZTUzOkxpc3RIb3N0ZWRab25lc0J5TmFtZVwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wicm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHNcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnJvdXRlNTM6Ojpob3N0ZWR6b25lLyR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkfWBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS5ncmFudERlbGVnYXRpb24ocm9sZSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiRGVsZWdhdGVIb3N0ZWRab25lUm9sZUFyblwiLCB7XG4gICAgICBrZXk6IGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZUFybmAsXG4gICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuYFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEFSZWNvcmQocHJvcHM6IE9taXQ8QVJlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgQVJlY29yZCh0aGlzLCBcIkFSZWNvcmRcIiwge1xuICAgICAgem9uZTogdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5yZWNvcmROYW1lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgQSBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHRhcmdldDogcHJvcHMudGFyZ2V0LFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDbmFtZShwcm9wczogT21pdDxDbmFtZVJlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgQ25hbWVSZWNvcmQodGhpcywgYGAsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIGNvbW1lbnQ6XG4gICAgICAgIHByb3BzLmNvbW1lbnQgfHwgYENOQU1FIFJlY29yZCBmb3IgJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRNeChwcm9wczogT21pdDxNeFJlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgTXhSZWNvcmQodGhpcywgYGAsIHtcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgTVggUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHR0bDogcHJvcHMudHRsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTlMocHJvcHM6IE9taXQ8TnNSZWNvcmRQcm9wcywgXCJ6b25lXCI+KSB7XG4gICAgbmV3IE5zUmVjb3JkKHRoaXMsIGBgLCB7XG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIGNvbW1lbnQ6XG4gICAgICAgIHByb3BzLmNvbW1lbnQgfHwgYE5TIFJlY29yZCBmb3IgJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFR4dChwcm9wczogT21pdDxUeHRSZWNvcmRQcm9wcywgXCJ6b25lXCI+KSB7XG4gICAgbmV3IFR4dFJlY29yZCh0aGlzLCBgYCwge1xuICAgICAgem9uZTogdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBUWFQgUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHR0bDogcHJvcHMudHRsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,13 @@
1
- import { CfnAssignment, CfnAssignmentProps } from "aws-cdk-lib/aws-sso";
2
1
  import { Construct } from "constructs";
3
- export declare class Assignment extends CfnAssignment {
4
- constructor(scope: Construct, id: string, props: CfnAssignmentProps);
2
+ import { AwsCustomResource } from "../../utilities/awsCustomResource";
3
+ export declare class Assignment extends Construct {
4
+ constructor(scope: Construct, id: string, props: {
5
+ instanceArn: string;
6
+ permissionSetArn: string;
7
+ principalType: string;
8
+ principalId: string;
9
+ targetType: string;
10
+ targetId: string;
11
+ dependency?: AwsCustomResource;
12
+ });
5
13
  }
@@ -1,13 +1,70 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Assignment = void 0;
4
- const aws_sso_1 = require("aws-cdk-lib/aws-sso");
5
- class Assignment extends aws_sso_1.CfnAssignment {
4
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
5
+ const constructs_1 = require("constructs");
6
+ const customResources = require("aws-cdk-lib/custom-resources");
7
+ const awsCustomResource_1 = require("../../utilities/awsCustomResource");
8
+ class Assignment extends constructs_1.Construct {
6
9
  constructor(scope, id, props) {
7
- super(scope, id, {
8
- ...props
10
+ super(scope, id);
11
+ const physicalId = `assignment${props.permissionSetArn}to${props.principalId}`;
12
+ const assignment = new awsCustomResource_1.AwsCustomResource(this, "assignment", {
13
+ functionName: physicalId,
14
+ onCreate: {
15
+ service: "sso-admin",
16
+ action: "CreateAccountAssignment",
17
+ parameters: {
18
+ InstanceArn: props.instanceArn,
19
+ TargetId: props.targetId,
20
+ TargetType: props.targetType,
21
+ PermissionSetArn: props.permissionSetArn,
22
+ PrincipalType: props.principalType,
23
+ PrincipalId: props.principalId
24
+ },
25
+ physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
26
+ },
27
+ onUpdate: {
28
+ service: "sso-admin",
29
+ action: "UpdateAccountAssignment",
30
+ parameters: {
31
+ InstanceArn: props.instanceArn,
32
+ TargetId: props.targetId,
33
+ TargetType: props.targetType,
34
+ PermissionSetArn: props.permissionSetArn,
35
+ PrincipalType: props.principalType,
36
+ PrincipalId: props.principalId
37
+ },
38
+ physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
39
+ },
40
+ onDelete: {
41
+ service: "sso-admin",
42
+ action: "DeleteAccountAssignment",
43
+ parameters: {
44
+ InstanceArn: props.instanceArn,
45
+ TargetId: props.targetId,
46
+ TargetType: props.targetType,
47
+ PermissionSetArn: props.permissionSetArn,
48
+ PrincipalType: props.principalType,
49
+ PrincipalId: props.principalId
50
+ }
51
+ },
52
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
53
+ new aws_iam_1.PolicyStatement({
54
+ actions: [
55
+ "sso:CreateAccountAssignment",
56
+ "sso:UpdateAccountAssignment",
57
+ "sso:DeleteAccountAssignment"
58
+ ],
59
+ resources: ["*"]
60
+ })
61
+ ]),
62
+ resourceType: "Custom::Assignment"
9
63
  });
64
+ if (props.dependency) {
65
+ assignment.node.addDependency(props.dependency);
66
+ }
10
67
  }
11
68
  }
12
69
  exports.Assignment = Assignment;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWdubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hc3NpZ25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUF3RTtBQUd4RSxNQUFhLFVBQVcsU0FBUSx1QkFBYTtJQUMzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBTkQsZ0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5Bc3NpZ25tZW50LCBDZm5Bc3NpZ25tZW50UHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzb1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnQgZXh0ZW5kcyBDZm5Bc3NpZ25tZW50IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENmbkFzc2lnbm1lbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHNcbiAgICB9KTtcbiAgfVxufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWdubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hc3NpZ25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFzRDtBQUN0RCwyQ0FBdUM7QUFDdkMsZ0VBQWdFO0FBQ2hFLHlFQUFzRTtBQUV0RSxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQUN2QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQVFDO1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxhQUFhLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFL0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQzNELFlBQVksRUFBRSxVQUFVO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLHlCQUF5QjtnQkFDakMsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7b0JBQzVCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7b0JBQ3hDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtvQkFDbEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2lCQUMvQjtnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQzthQUN0RTtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLHlCQUF5QjtnQkFDakMsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7b0JBQzVCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7b0JBQ3hDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtvQkFDbEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2lCQUMvQjtnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQzthQUN0RTtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLHlCQUF5QjtnQkFDakMsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7b0JBQzVCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7b0JBQ3hDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtvQkFDbEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2lCQUMvQjthQUNGO1lBQ0QsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLDZCQUE2Qjt3QkFDN0IsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7cUJBQzlCO29CQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQzthQUNILENBQUM7WUFDRixZQUFZLEVBQUUsb0JBQW9CO1NBQ25DLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0NBQ0Y7QUEzRUQsZ0NBMkVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuXG5leHBvcnQgY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczoge1xuICAgICAgaW5zdGFuY2VBcm46IHN0cmluZztcbiAgICAgIHBlcm1pc3Npb25TZXRBcm46IHN0cmluZztcbiAgICAgIHByaW5jaXBhbFR5cGU6IHN0cmluZztcbiAgICAgIHByaW5jaXBhbElkOiBzdHJpbmc7XG4gICAgICB0YXJnZXRUeXBlOiBzdHJpbmc7XG4gICAgICB0YXJnZXRJZDogc3RyaW5nO1xuICAgICAgZGVwZW5kZW5jeT86IEF3c0N1c3RvbVJlc291cmNlO1xuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHBoeXNpY2FsSWQgPSBgYXNzaWdubWVudCR7cHJvcHMucGVybWlzc2lvblNldEFybn10byR7cHJvcHMucHJpbmNpcGFsSWR9YDtcblxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogcGh5c2ljYWxJZCxcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwic3NvLWFkbWluXCIsXG4gICAgICAgIGFjdGlvbjogXCJDcmVhdGVBY2NvdW50QXNzaWdubWVudFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3Nzby1hZG1pbi9jb21tYW5kL0NyZWF0ZUFjY291bnRBc3NpZ25tZW50Q29tbWFuZFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgSW5zdGFuY2VBcm46IHByb3BzLmluc3RhbmNlQXJuLFxuICAgICAgICAgIFRhcmdldElkOiBwcm9wcy50YXJnZXRJZCxcbiAgICAgICAgICBUYXJnZXRUeXBlOiBwcm9wcy50YXJnZXRUeXBlLFxuICAgICAgICAgIFBlcm1pc3Npb25TZXRBcm46IHByb3BzLnBlcm1pc3Npb25TZXRBcm4sXG4gICAgICAgICAgUHJpbmNpcGFsVHlwZTogcHJvcHMucHJpbmNpcGFsVHlwZSxcbiAgICAgICAgICBQcmluY2lwYWxJZDogcHJvcHMucHJpbmNpcGFsSWRcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKHBoeXNpY2FsSWQpXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgYWN0aW9uOiBcIlVwZGF0ZUFjY291bnRBc3NpZ25tZW50XCIsIC8vIFRPRE86IFRoaXMgaXMgbm90IGEgdmFsaWQgYWN0aW9uXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBJbnN0YW5jZUFybjogcHJvcHMuaW5zdGFuY2VBcm4sXG4gICAgICAgICAgVGFyZ2V0SWQ6IHByb3BzLnRhcmdldElkLFxuICAgICAgICAgIFRhcmdldFR5cGU6IHByb3BzLnRhcmdldFR5cGUsXG4gICAgICAgICAgUGVybWlzc2lvblNldEFybjogcHJvcHMucGVybWlzc2lvblNldEFybixcbiAgICAgICAgICBQcmluY2lwYWxUeXBlOiBwcm9wcy5wcmluY2lwYWxUeXBlLFxuICAgICAgICAgIFByaW5jaXBhbElkOiBwcm9wcy5wcmluY2lwYWxJZFxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YocGh5c2ljYWxJZClcbiAgICAgIH0sXG4gICAgICBvbkRlbGV0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcInNzby1hZG1pblwiLFxuICAgICAgICBhY3Rpb246IFwiRGVsZXRlQWNjb3VudEFzc2lnbm1lbnRcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9zc28tYWRtaW4vY29tbWFuZC9EZWxldGVBY2NvdW50QXNzaWdubWVudENvbW1hbmRcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEluc3RhbmNlQXJuOiBwcm9wcy5pbnN0YW5jZUFybixcbiAgICAgICAgICBUYXJnZXRJZDogcHJvcHMudGFyZ2V0SWQsXG4gICAgICAgICAgVGFyZ2V0VHlwZTogcHJvcHMudGFyZ2V0VHlwZSxcbiAgICAgICAgICBQZXJtaXNzaW9uU2V0QXJuOiBwcm9wcy5wZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgICAgIFByaW5jaXBhbFR5cGU6IHByb3BzLnByaW5jaXBhbFR5cGUsXG4gICAgICAgICAgUHJpbmNpcGFsSWQ6IHByb3BzLnByaW5jaXBhbElkXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwic3NvOkNyZWF0ZUFjY291bnRBc3NpZ25tZW50XCIsXG4gICAgICAgICAgICBcInNzbzpVcGRhdGVBY2NvdW50QXNzaWdubWVudFwiLFxuICAgICAgICAgICAgXCJzc286RGVsZXRlQWNjb3VudEFzc2lnbm1lbnRcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OkFzc2lnbm1lbnRcIlxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmRlcGVuZGVuY3kpIHtcbiAgICAgIGFzc2lnbm1lbnQubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLmRlcGVuZGVuY3kpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { Construct } from "constructs";
2
+ interface AttachManagedPolicyProps {
3
+ instanceArn: string;
4
+ permissionSet: string;
5
+ permissionSetArn: string;
6
+ managedPolicyArn: string;
7
+ }
8
+ export declare class AttachManagedPolicy extends Construct {
9
+ constructor(scope: Construct, id: string, props: AttachManagedPolicyProps);
10
+ }
11
+ export {};
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AttachManagedPolicy = void 0;
4
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
5
+ const constructs_1 = require("constructs");
6
+ const customResources = require("aws-cdk-lib/custom-resources");
7
+ const awsCustomResource_1 = require("../../utilities/awsCustomResource");
8
+ class AttachManagedPolicy extends constructs_1.Construct {
9
+ constructor(scope, id, props) {
10
+ super(scope, id);
11
+ new awsCustomResource_1.AwsCustomResource(this, "attachManagedPolicy", {
12
+ functionName: `attachPolicyToPermissionSet${props.permissionSet}`,
13
+ onCreate: {
14
+ service: "sso-admin",
15
+ action: "AttachManagedPolicyToPermissionSet",
16
+ parameters: {
17
+ InstanceArn: props.instanceArn,
18
+ PermissionSetArn: props.permissionSetArn,
19
+ ManagedPolicyArn: props.managedPolicyArn
20
+ },
21
+ physicalResourceId: customResources.PhysicalResourceId.of(`attachManagedPolicyToPermissionSet${props.permissionSet}`)
22
+ },
23
+ onDelete: {
24
+ service: "sso-admin",
25
+ action: "DetachManagedPolicyFromPermissionSet",
26
+ parameters: {
27
+ InstanceArn: props.instanceArn,
28
+ PermissionSetArn: props.permissionSetArn,
29
+ ManagedPolicyArn: props.managedPolicyArn
30
+ }
31
+ },
32
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
33
+ new aws_iam_1.PolicyStatement({
34
+ actions: [
35
+ "sso:UpdatePermissionSet",
36
+ "sso:ProvisionPermissionSet",
37
+ "sso:AttachManagedPolicyToPermissionSet",
38
+ "sso:DetachManagedPolicyFromPermissionSet",
39
+ "sso:TagResource"
40
+ ],
41
+ resources: ["*"]
42
+ })
43
+ ]),
44
+ resourceType: "Custom::PermissionSet"
45
+ });
46
+ }
47
+ }
48
+ exports.AttachManagedPolicy = AttachManagedPolicy;
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoTWFuYWdlZFBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hdHRhY2hNYW5hZ2VkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFzRDtBQUN0RCwyQ0FBdUM7QUFDdkMsZ0VBQWdFO0FBQ2hFLHlFQUFzRTtBQVN0RSxNQUFhLG1CQUFvQixTQUFRLHNCQUFTO0lBQ2hELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDdkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNqRCxZQUFZLEVBQUUsOEJBQThCLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDakUsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUsb0NBQW9DO2dCQUM1QyxVQUFVLEVBQUU7b0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO29CQUM5QixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO29CQUN4QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO2lCQUN6QztnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUN2RCxxQ0FBcUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUMzRDthQUNGO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUsc0NBQXNDO2dCQUM5QyxVQUFVLEVBQUU7b0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO29CQUM5QixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO29CQUN4QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO2lCQUN6QzthQUNGO1lBQ0QsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLHlCQUF5Qjt3QkFDekIsNEJBQTRCO3dCQUM1Qix3Q0FBd0M7d0JBQ3hDLDBDQUEwQzt3QkFDMUMsaUJBQWlCO3FCQUNsQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ2pCLENBQUM7YUFDSCxDQUFDO1lBQ0YsWUFBWSxFQUFFLHVCQUF1QjtTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUExQ0Qsa0RBMENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuXG5pbnRlcmZhY2UgQXR0YWNoTWFuYWdlZFBvbGljeVByb3BzIHtcbiAgaW5zdGFuY2VBcm46IHN0cmluZztcbiAgcGVybWlzc2lvblNldDogc3RyaW5nO1xuICBwZXJtaXNzaW9uU2V0QXJuOiBzdHJpbmc7XG4gIG1hbmFnZWRQb2xpY3lBcm46IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEF0dGFjaE1hbmFnZWRQb2xpY3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXR0YWNoTWFuYWdlZFBvbGljeVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImF0dGFjaE1hbmFnZWRQb2xpY3lcIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBgYXR0YWNoUG9saWN5VG9QZXJtaXNzaW9uU2V0JHtwcm9wcy5wZXJtaXNzaW9uU2V0fWAsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcInNzby1hZG1pblwiLFxuICAgICAgICBhY3Rpb246IFwiQXR0YWNoTWFuYWdlZFBvbGljeVRvUGVybWlzc2lvblNldFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3Nzby1hZG1pbi9jb21tYW5kL0F0dGFjaE1hbmFnZWRQb2xpY3lUb1Blcm1pc3Npb25TZXRDb21tYW5kXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBJbnN0YW5jZUFybjogcHJvcHMuaW5zdGFuY2VBcm4sXG4gICAgICAgICAgUGVybWlzc2lvblNldEFybjogcHJvcHMucGVybWlzc2lvblNldEFybixcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5QXJuOiBwcm9wcy5tYW5hZ2VkUG9saWN5QXJuXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBgYXR0YWNoTWFuYWdlZFBvbGljeVRvUGVybWlzc2lvblNldCR7cHJvcHMucGVybWlzc2lvblNldH1gXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBvbkRlbGV0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcInNzby1hZG1pblwiLFxuICAgICAgICBhY3Rpb246IFwiRGV0YWNoTWFuYWdlZFBvbGljeUZyb21QZXJtaXNzaW9uU2V0XCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL3YzL2xhdGVzdC9jbGllbnQvc3NvLWFkbWluL2NvbW1hbmQvRGV0YWNoTWFuYWdlZFBvbGljeUZyb21QZXJtaXNzaW9uU2V0Q29tbWFuZC9cbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEluc3RhbmNlQXJuOiBwcm9wcy5pbnN0YW5jZUFybixcbiAgICAgICAgICBQZXJtaXNzaW9uU2V0QXJuOiBwcm9wcy5wZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgICAgIE1hbmFnZWRQb2xpY3lBcm46IHByb3BzLm1hbmFnZWRQb2xpY3lBcm5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzc286VXBkYXRlUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286UHJvdmlzaW9uUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286QXR0YWNoTWFuYWdlZFBvbGljeVRvUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286RGV0YWNoTWFuYWdlZFBvbGljeUZyb21QZXJtaXNzaW9uU2V0XCIsXG4gICAgICAgICAgICBcInNzbzpUYWdSZXNvdXJjZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgfSlcbiAgICAgIF0pLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6UGVybWlzc2lvblNldFwiXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,12 @@
1
- import { CfnGroup, CfnGroupProps } from 'aws-cdk-lib/aws-identitystore';
2
1
  import { Construct } from "constructs";
3
- export declare class Group extends CfnGroup {
4
- constructor(scope: Construct, id: string, props: CfnGroupProps);
2
+ interface GroupProps {
3
+ displayName: string;
4
+ identityStoreId: string;
5
+ description?: string;
5
6
  }
7
+ export declare class Group extends Construct {
8
+ private groupId;
9
+ constructor(scope: Construct, id: string, props: GroupProps);
10
+ getGroupId(): string;
11
+ }
12
+ export {};
@@ -1,14 +1,89 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Group = void 0;
4
- const aws_identitystore_1 = require("aws-cdk-lib/aws-identitystore");
5
- class Group extends aws_identitystore_1.CfnGroup {
4
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
5
+ const constructs_1 = require("constructs");
6
+ const customResources = require("aws-cdk-lib/custom-resources");
7
+ const awsCustomResource_1 = require("../../utilities/awsCustomResource");
8
+ class Group extends constructs_1.Construct {
6
9
  constructor(scope, id, props) {
7
- super(scope, id, {
8
- ...props,
9
- description: props.description || `${props.displayName} IAM identity center group `,
10
+ super(scope, id);
11
+ const physicalId = `identityStoreGroup${props.displayName}`;
12
+ // Create Group
13
+ const group = new awsCustomResource_1.AwsCustomResource(this, "createIdentityStoreGroup", {
14
+ functionName: `createIdentityStoreGroup${props.displayName}`,
15
+ onCreate: {
16
+ service: "identitystore",
17
+ action: "CreateGroup",
18
+ parameters: {
19
+ DisplayName: props.displayName,
20
+ IdentityStoreId: props.identityStoreId,
21
+ Description: props.description
22
+ },
23
+ physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
24
+ },
25
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
26
+ new aws_iam_1.PolicyStatement({
27
+ actions: ["identitystore:CreateGroup"],
28
+ resources: ["*"]
29
+ })
30
+ ])
10
31
  });
32
+ this.groupId = group.getResponseField("GroupId");
33
+ // Update Group
34
+ new awsCustomResource_1.AwsCustomResource(this, "updateIdentityStoreGroup", {
35
+ functionName: `updateIdentityStoreGroup${props.displayName}`,
36
+ onUpdate: {
37
+ service: "identitystore",
38
+ action: "UpdateGroup",
39
+ parameters: {
40
+ GroupId: this.groupId,
41
+ IdentityStoreId: props.identityStoreId,
42
+ // TODO: Suppport taking in any changes and updating them
43
+ Operations: [
44
+ {
45
+ AttributePath: "DisplayName",
46
+ AttributeValue: props.displayName
47
+ },
48
+ {
49
+ AttributePath: "Description",
50
+ AttributeValue: props.description
51
+ }
52
+ ]
53
+ },
54
+ physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
55
+ },
56
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
57
+ new aws_iam_1.PolicyStatement({
58
+ actions: ["identitystore:UpdateGroup"],
59
+ resources: ["*"]
60
+ })
61
+ ]),
62
+ resourceType: "Custom::Group"
63
+ });
64
+ // Delete Group
65
+ new awsCustomResource_1.AwsCustomResource(this, "deleteIdentityStoreGroup", {
66
+ functionName: `deleteIdentityStoreGroup${props.displayName}`,
67
+ onDelete: {
68
+ service: "identitystore",
69
+ action: "DeleteGroup",
70
+ parameters: {
71
+ GroupId: this.groupId,
72
+ IdentityStoreId: props.identityStoreId
73
+ }
74
+ },
75
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
76
+ new aws_iam_1.PolicyStatement({
77
+ actions: ["identitystore:DeleteGroup"],
78
+ resources: ["*"]
79
+ })
80
+ ]),
81
+ resourceType: "Custom::Group"
82
+ });
83
+ }
84
+ getGroupId() {
85
+ return this.groupId;
11
86
  }
12
87
  }
13
88
  exports.Group = Group;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXdFO0FBR3hFLE1BQWEsS0FBTSxTQUFRLDRCQUFRO0lBQ2pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLDZCQUE2QjtTQUNwRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFQRCxzQkFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkdyb3VwLCBDZm5Hcm91cFByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlkZW50aXR5c3RvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgQ2ZuR3JvdXAge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2ZuR3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24gfHwgYCR7cHJvcHMuZGlzcGxheU5hbWV9IElBTSBpZGVudGl0eSBjZW50ZXIgZ3JvdXAgYCxcbiAgICB9KTtcbiAgfVxufVxuIl19
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBZ0U7QUFDaEUseUVBQXNFO0FBT3RFLE1BQWEsS0FBTSxTQUFRLHNCQUFTO0lBRWxDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUI7UUFDekQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxxQkFBcUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTVELGVBQWU7UUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNwRSxZQUFZLEVBQUUsMkJBQTJCLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDNUQsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixNQUFNLEVBQUUsYUFBYTtnQkFDckIsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO29CQUN0QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7aUJBQy9CO2dCQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ3RFO1lBQ0QsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqRCxlQUFlO1FBQ2YsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDdEQsWUFBWSxFQUFFLDJCQUEyQixLQUFLLENBQUMsV0FBVyxFQUFFO1lBQzVELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsZUFBZTtnQkFDeEIsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLFVBQVUsRUFBRTtvQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtvQkFDdEMseURBQXlEO29CQUN6RCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsYUFBYSxFQUFFLGFBQWE7NEJBQzVCLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVzt5QkFDbEM7d0JBQ0Q7NEJBQ0UsYUFBYSxFQUFFLGFBQWE7NEJBQzVCLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVzt5QkFDbEM7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDdEU7WUFDRCxNQUFNLEVBQUUsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDN0QsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDdEMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0gsQ0FBQztZQUNGLFlBQVksRUFBRSxlQUFlO1NBQzlCLENBQUMsQ0FBQztRQUVILGVBQWU7UUFDZixJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUN0RCxZQUFZLEVBQUUsMkJBQTJCLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDNUQsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixNQUFNLEVBQUUsYUFBYTtnQkFDckIsVUFBVSxFQUFFO29CQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO2lCQUN2QzthQUNGO1lBQ0QsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQzthQUNILENBQUM7WUFDRixZQUFZLEVBQUUsZUFBZTtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUF0RkQsc0JBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuXG5pbnRlcmZhY2UgR3JvdXBQcm9wcyB7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGlkZW50aXR5U3RvcmVJZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCBjbGFzcyBHcm91cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgZ3JvdXBJZDogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBwaHlzaWNhbElkID0gYGlkZW50aXR5U3RvcmVHcm91cCR7cHJvcHMuZGlzcGxheU5hbWV9YDtcblxuICAgIC8vIENyZWF0ZSBHcm91cFxuICAgIGNvbnN0IGdyb3VwID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiY3JlYXRlSWRlbnRpdHlTdG9yZUdyb3VwXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYGNyZWF0ZUlkZW50aXR5U3RvcmVHcm91cCR7cHJvcHMuZGlzcGxheU5hbWV9YCxcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiaWRlbnRpdHlzdG9yZVwiLFxuICAgICAgICBhY3Rpb246IFwiQ3JlYXRlR3JvdXBcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9pZGVudGl0eXN0b3JlL2NvbW1hbmQvQ3JlYXRlR3JvdXBDb21tYW5kXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBEaXNwbGF5TmFtZTogcHJvcHMuZGlzcGxheU5hbWUsXG4gICAgICAgICAgSWRlbnRpdHlTdG9yZUlkOiBwcm9wcy5pZGVudGl0eVN0b3JlSWQsXG4gICAgICAgICAgRGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihwaHlzaWNhbElkKVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wiaWRlbnRpdHlzdG9yZTpDcmVhdGVHcm91cFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgfSlcbiAgICAgIF0pXG4gICAgfSk7XG5cbiAgICB0aGlzLmdyb3VwSWQgPSBncm91cC5nZXRSZXNwb25zZUZpZWxkKFwiR3JvdXBJZFwiKTtcblxuICAgIC8vIFVwZGF0ZSBHcm91cFxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcInVwZGF0ZUlkZW50aXR5U3RvcmVHcm91cFwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGB1cGRhdGVJZGVudGl0eVN0b3JlR3JvdXAke3Byb3BzLmRpc3BsYXlOYW1lfWAsXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcImlkZW50aXR5c3RvcmVcIixcbiAgICAgICAgYWN0aW9uOiBcIlVwZGF0ZUdyb3VwXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL3YzL2xhdGVzdC9jbGllbnQvaWRlbnRpdHlzdG9yZS9jb21tYW5kL1VwZGF0ZUdyb3VwQ29tbWFuZFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgR3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogcHJvcHMuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgIC8vIFRPRE86IFN1cHBwb3J0IHRha2luZyBpbiBhbnkgY2hhbmdlcyBhbmQgdXBkYXRpbmcgdGhlbVxuICAgICAgICAgIE9wZXJhdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQXR0cmlidXRlUGF0aDogXCJEaXNwbGF5TmFtZVwiLFxuICAgICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZTogcHJvcHMuZGlzcGxheU5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEF0dHJpYnV0ZVBhdGg6IFwiRGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgQXR0cmlidXRlVmFsdWU6IHByb3BzLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YocGh5c2ljYWxJZClcbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcImlkZW50aXR5c3RvcmU6VXBkYXRlR3JvdXBcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Okdyb3VwXCJcbiAgICB9KTtcblxuICAgIC8vIERlbGV0ZSBHcm91cFxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImRlbGV0ZUlkZW50aXR5U3RvcmVHcm91cFwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGBkZWxldGVJZGVudGl0eVN0b3JlR3JvdXAke3Byb3BzLmRpc3BsYXlOYW1lfWAsXG4gICAgICBvbkRlbGV0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcImlkZW50aXR5c3RvcmVcIixcbiAgICAgICAgYWN0aW9uOiBcIkRlbGV0ZUdyb3VwXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL3YzL2xhdGVzdC9jbGllbnQvaWRlbnRpdHlzdG9yZS9jb21tYW5kL0RlbGV0ZUdyb3VwQ29tbWFuZFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgR3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogcHJvcHMuaWRlbnRpdHlTdG9yZUlkXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcImlkZW50aXR5c3RvcmU6RGVsZXRlR3JvdXBcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Okdyb3VwXCJcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRHcm91cElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBJZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from "./assignment";
2
+ export * from "./group";
3
+ export * from "./permissionSet";
@@ -0,0 +1,20 @@
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("./assignment"), exports);
18
+ __exportStar(require("./group"), exports);
19
+ __exportStar(require("./permissionSet"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QjtBQUM3QiwwQ0FBd0I7QUFDeEIsa0RBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXNzaWdubWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ3JvdXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Blcm1pc3Npb25TZXRcIjtcbiJdfQ==
@@ -1,5 +1,15 @@
1
- import { CfnPermissionSet, CfnPermissionSetProps } from "aws-cdk-lib/aws-sso";
2
1
  import { Construct } from "constructs";
3
- export declare class PermissionSet extends CfnPermissionSet {
4
- constructor(scope: Construct, id: string, props: CfnPermissionSetProps);
2
+ import { AwsCustomResource } from "../../utilities/awsCustomResource";
3
+ import { KeyValue } from "../../../../types";
4
+ export declare class PermissionSet extends Construct {
5
+ private permissionSetArn;
6
+ deletePermissionSet: AwsCustomResource;
7
+ constructor(scope: Construct, id: string, props: {
8
+ name: string;
9
+ instanceArn: string;
10
+ description?: string;
11
+ managedPolicies?: string[];
12
+ tags?: KeyValue[];
13
+ });
14
+ getPermissionSetArn(): string;
5
15
  }
@@ -1,13 +1,97 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PermissionSet = void 0;
4
- const aws_sso_1 = require("aws-cdk-lib/aws-sso");
5
- class PermissionSet extends aws_sso_1.CfnPermissionSet {
4
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
5
+ const constructs_1 = require("constructs");
6
+ const customResources = require("aws-cdk-lib/custom-resources");
7
+ const awsCustomResource_1 = require("../../utilities/awsCustomResource");
8
+ // function transformManagedPolicies(policies?: string[]) {
9
+ // return policies?.map((arn) => ({ Arn: arn }));
10
+ // }
11
+ function transformTags(tags) {
12
+ return tags?.map(({ key, value }) => ({ Key: key, Value: value }));
13
+ }
14
+ class PermissionSet extends constructs_1.Construct {
6
15
  constructor(scope, id, props) {
7
- super(scope, id, {
8
- ...props
16
+ super(scope, id);
17
+ const physicalId = `permissionSet${props.name}`;
18
+ const permissionSet = new awsCustomResource_1.AwsCustomResource(this, "createPermissionSet", {
19
+ functionName: `createPermissionSet${props.name}`,
20
+ onCreate: {
21
+ service: "sso-admin",
22
+ action: "CreatePermissionSet",
23
+ parameters: {
24
+ Name: props.name,
25
+ InstanceArn: props.instanceArn,
26
+ Description: props.description,
27
+ // ManagedPolicies: transformManagedPolicies(props.managedPolicies),
28
+ Tags: transformTags(props.tags)
29
+ },
30
+ physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
31
+ },
32
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
33
+ new aws_iam_1.PolicyStatement({
34
+ actions: [
35
+ "sso:CreatePermissionSet",
36
+ "sso:ProvisionPermissionSet",
37
+ "sso:TagResource"
38
+ ],
39
+ resources: ["*"]
40
+ })
41
+ ]),
42
+ resourceType: "Custom::PermissionSet"
43
+ });
44
+ this.permissionSetArn = permissionSet.getResponseField("PermissionSet.PermissionSetArn");
45
+ new awsCustomResource_1.AwsCustomResource(this, "updatePermissionSet", {
46
+ functionName: `updatePermissionSet${props.name}`,
47
+ onUpdate: {
48
+ service: "sso-admin",
49
+ action: "UpdatePermissionSet",
50
+ parameters: {
51
+ InstanceArn: props.instanceArn,
52
+ PermissionSetArn: this.permissionSetArn,
53
+ Description: props.description
54
+ },
55
+ physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
56
+ },
57
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
58
+ new aws_iam_1.PolicyStatement({
59
+ actions: [
60
+ "sso:UpdatePermissionSet",
61
+ "sso:ProvisionPermissionSet",
62
+ "sso:TagResource"
63
+ ],
64
+ resources: ["*"]
65
+ })
66
+ ]),
67
+ resourceType: "Custom::PermissionSet"
9
68
  });
69
+ this.deletePermissionSet = new awsCustomResource_1.AwsCustomResource(this, "deletePermissionSet", {
70
+ functionName: `deletePermissionSet${props.name}`,
71
+ onDelete: {
72
+ service: "sso-admin",
73
+ action: "DeletePermissionSet",
74
+ parameters: {
75
+ InstanceArn: props.instanceArn,
76
+ PermissionSetArn: this.permissionSetArn
77
+ }
78
+ },
79
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
80
+ new aws_iam_1.PolicyStatement({
81
+ actions: [
82
+ "sso:UpdatePermissionSet",
83
+ "sso:DeletePermissionSet",
84
+ "sso:TagResource"
85
+ ],
86
+ resources: ["*"]
87
+ })
88
+ ]),
89
+ resourceType: "Custom::PermissionSet"
90
+ });
91
+ }
92
+ getPermissionSetArn() {
93
+ return this.permissionSetArn;
10
94
  }
11
95
  }
12
96
  exports.PermissionSet = PermissionSet;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvblNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9wZXJtaXNzaW9uU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE4RTtBQUc5RSxNQUFhLGFBQWMsU0FBUSwwQkFBZ0I7SUFDakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQU5ELHNDQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuUGVybWlzc2lvblNldCwgQ2ZuUGVybWlzc2lvblNldFByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc29cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2V0IGV4dGVuZHMgQ2ZuUGVybWlzc2lvblNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDZm5QZXJtaXNzaW9uU2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvblNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9wZXJtaXNzaW9uU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFzRDtBQUN0RCwyQ0FBdUM7QUFDdkMsZ0VBQWdFO0FBQ2hFLHlFQUFzRTtBQUd0RSwyREFBMkQ7QUFDM0QsbURBQW1EO0FBQ25ELElBQUk7QUFFSixTQUFTLGFBQWEsQ0FBQyxJQUFpQjtJQUN0QyxPQUFPLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFHMUMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FNQztRQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN2RSxZQUFZLEVBQUUsc0JBQXNCLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDaEQsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUscUJBQXFCO2dCQUM3QixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO29CQUNoQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsb0VBQW9FO29CQUNwRSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ2hDO2dCQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ3RFO1lBQ0QsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLHlCQUF5Qjt3QkFDekIsNEJBQTRCO3dCQUM1QixpQkFBaUI7cUJBQ2xCO29CQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQzthQUNILENBQUM7WUFDRixZQUFZLEVBQUUsdUJBQXVCO1NBQ3RDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQ3BELGdDQUFnQyxDQUNqQyxDQUFDO1FBRUYsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDakQsWUFBWSxFQUFFLHNCQUFzQixLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2hELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLHFCQUFxQjtnQkFDN0IsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDdkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2lCQUMvQjtnQkFDRCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQzthQUN0RTtZQUNELE1BQU0sRUFBRSxlQUFlLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDO2dCQUM3RCxJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCx5QkFBeUI7d0JBQ3pCLDRCQUE0Qjt3QkFDNUIsaUJBQWlCO3FCQUNsQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ2pCLENBQUM7YUFDSCxDQUFDO1lBQ0YsWUFBWSxFQUFFLHVCQUF1QjtTQUN0QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxxQ0FBaUIsQ0FDOUMsSUFBSSxFQUNKLHFCQUFxQixFQUNyQjtZQUNFLFlBQVksRUFBRSxzQkFBc0IsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNoRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLE1BQU0sRUFBRSxxQkFBcUI7Z0JBQzdCLFVBQVUsRUFBRTtvQkFDVixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ3hDO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDN0QsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUU7d0JBQ1AseUJBQXlCO3dCQUN6Qix5QkFBeUI7d0JBQ3pCLGlCQUFpQjtxQkFDbEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0gsQ0FBQztZQUNGLFlBQVksRUFBRSx1QkFBdUI7U0FDdEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUF4R0Qsc0NBd0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuLy8gZnVuY3Rpb24gdHJhbnNmb3JtTWFuYWdlZFBvbGljaWVzKHBvbGljaWVzPzogc3RyaW5nW10pIHtcbi8vICAgcmV0dXJuIHBvbGljaWVzPy5tYXAoKGFybikgPT4gKHsgQXJuOiBhcm4gfSkpO1xuLy8gfVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UYWdzKHRhZ3M/OiBLZXlWYWx1ZVtdKSB7XG4gIHJldHVybiB0YWdzPy5tYXAoKHsga2V5LCB2YWx1ZSB9KSA9PiAoeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlIH0pKTtcbn1cblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHBlcm1pc3Npb25TZXRBcm46IHN0cmluZztcbiAgcHVibGljIGRlbGV0ZVBlcm1pc3Npb25TZXQ6IEF3c0N1c3RvbVJlc291cmNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGluc3RhbmNlQXJuOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIG1hbmFnZWRQb2xpY2llcz86IHN0cmluZ1tdO1xuICAgICAgdGFncz86IEtleVZhbHVlW107XG4gICAgfVxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcGh5c2ljYWxJZCA9IGBwZXJtaXNzaW9uU2V0JHtwcm9wcy5uYW1lfWA7XG5cbiAgICBjb25zdCBwZXJtaXNzaW9uU2V0ID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiY3JlYXRlUGVybWlzc2lvblNldFwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGBjcmVhdGVQZXJtaXNzaW9uU2V0JHtwcm9wcy5uYW1lfWAsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcInNzby1hZG1pblwiLFxuICAgICAgICBhY3Rpb246IFwiQ3JlYXRlUGVybWlzc2lvblNldFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3Nzby1hZG1pbi9jb21tYW5kL0NyZWF0ZVBlcm1pc3Npb25TZXRDb21tYW5kXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBOYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICAgIEluc3RhbmNlQXJuOiBwcm9wcy5pbnN0YW5jZUFybixcbiAgICAgICAgICBEZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgLy8gTWFuYWdlZFBvbGljaWVzOiB0cmFuc2Zvcm1NYW5hZ2VkUG9saWNpZXMocHJvcHMubWFuYWdlZFBvbGljaWVzKSxcbiAgICAgICAgICBUYWdzOiB0cmFuc2Zvcm1UYWdzKHByb3BzLnRhZ3MpXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihwaHlzaWNhbElkKVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzc286Q3JlYXRlUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286UHJvdmlzaW9uUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286VGFnUmVzb3VyY2VcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlBlcm1pc3Npb25TZXRcIlxuICAgIH0pO1xuXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0QXJuID0gcGVybWlzc2lvblNldC5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgXCJQZXJtaXNzaW9uU2V0LlBlcm1pc3Npb25TZXRBcm5cIlxuICAgICk7XG5cbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJ1cGRhdGVQZXJtaXNzaW9uU2V0XCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYHVwZGF0ZVBlcm1pc3Npb25TZXQke3Byb3BzLm5hbWV9YCxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwic3NvLWFkbWluXCIsXG4gICAgICAgIGFjdGlvbjogXCJVcGRhdGVQZXJtaXNzaW9uU2V0XCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL3YzL2xhdGVzdC9jbGllbnQvc3NvLWFkbWluL2NvbW1hbmQvVXBkYXRlUGVybWlzc2lvblNldENvbW1hbmRcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEluc3RhbmNlQXJuOiBwcm9wcy5pbnN0YW5jZUFybixcbiAgICAgICAgICBQZXJtaXNzaW9uU2V0QXJuOiB0aGlzLnBlcm1pc3Npb25TZXRBcm4sXG4gICAgICAgICAgRGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihwaHlzaWNhbElkKVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzc286VXBkYXRlUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286UHJvdmlzaW9uUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgXCJzc286VGFnUmVzb3VyY2VcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlBlcm1pc3Npb25TZXRcIlxuICAgIH0pO1xuXG4gICAgdGhpcy5kZWxldGVQZXJtaXNzaW9uU2V0ID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiZGVsZXRlUGVybWlzc2lvblNldFwiLFxuICAgICAge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGBkZWxldGVQZXJtaXNzaW9uU2V0JHtwcm9wcy5uYW1lfWAsXG4gICAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgICBhY3Rpb246IFwiRGVsZXRlUGVybWlzc2lvblNldFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3Nzby1hZG1pbi9jb21tYW5kL0RlbGV0ZVBlcm1pc3Npb25TZXRDb21tYW5kXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgSW5zdGFuY2VBcm46IHByb3BzLmluc3RhbmNlQXJuLFxuICAgICAgICAgICAgUGVybWlzc2lvblNldEFybjogdGhpcy5wZXJtaXNzaW9uU2V0QXJuXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwic3NvOlVwZGF0ZVBlcm1pc3Npb25TZXRcIixcbiAgICAgICAgICAgICAgXCJzc286RGVsZXRlUGVybWlzc2lvblNldFwiLFxuICAgICAgICAgICAgICBcInNzbzpUYWdSZXNvdXJjZVwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlBlcm1pc3Npb25TZXRcIlxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFBlcm1pc3Npb25TZXRBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2V0QXJuO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },