@fjall/components-infrastructure 0.69.2 → 0.69.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -19,17 +19,13 @@ class ManagedPlatform extends managedAccount_1.ManagedAccount {
|
|
|
19
19
|
});
|
|
20
20
|
// Convert accounts to flat array for IpamPool
|
|
21
21
|
const orgAccounts = Object.values(props.accounts).flatMap((account) => Array.isArray(account) ? account : [account]);
|
|
22
|
-
// Create IPAM
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
region: region,
|
|
29
|
-
ipamScope: ipam.privateDefaultScopeId
|
|
30
|
-
});
|
|
31
|
-
}
|
|
22
|
+
// Create IPAM pool hierarchy for all regions
|
|
23
|
+
new ipamPool_1.IpamPool(this, "IpamPool", {
|
|
24
|
+
orgAccounts,
|
|
25
|
+
regions: allRegions,
|
|
26
|
+
ipamScope: ipam.privateDefaultScopeId
|
|
27
|
+
});
|
|
32
28
|
}
|
|
33
29
|
}
|
|
34
30
|
exports.ManagedPlatform = ManagedPlatform;
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkUGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTZDO0FBQzdDLHNFQUFtRTtBQUVuRSxxREFBdUU7QUFDdkUscURBQWtEO0FBVWxELE1BQWEsZUFBZ0IsU0FBUSwrQkFBYztJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDZCQUE2QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7UUFFakUsMENBQTBDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDbEMsT0FBTyxFQUFFLFVBQVU7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsOENBQThDO1FBQzlDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3BFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FDN0MsQ0FBQztRQUVGLDZDQUE2QztRQUM3QyxJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM3QixXQUFXO1lBQ1gsT0FBTyxFQUFFLFVBQVU7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxxQkFBcUI7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM0JELDBDQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElwYW0gfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9pcGFtXCI7XG5pbXBvcnQgeyBJcGFtUG9vbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvaXBhbVBvb2xcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkQWNjb3VudCwgTWFuYWdlZEFjY291bnRQcm9wcyB9IGZyb20gXCIuL21hbmFnZWRBY2NvdW50XCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5cbnR5cGUgQWNjb3VudHNDb25maWcgPSB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHJlYWRvbmx5IHN0cmluZ1tdIHwgc3RyaW5nO1xufTtcblxuaW50ZXJmYWNlIE1hbmFnZWRQbGF0Zm9ybVByb3BzIGV4dGVuZHMgTWFuYWdlZEFjY291bnRQcm9wcyB7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE1hbmFnZWRQbGF0Zm9ybSBleHRlbmRzIE1hbmFnZWRBY2NvdW50IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZWRQbGF0Zm9ybVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBHZXQgYWxsIGNvbmZpZ3VyZWQgcmVnaW9uc1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IGFsbFJlZ2lvbnMgPSBjb25maWcuYWxsUmVnaW9ucy5sZW5ndGggPiAwXG4gICAgICA/IGNvbmZpZy5hbGxSZWdpb25zXG4gICAgICA6IFtwcm9wcy5yZWdpb25dOyAvLyBGYWxsYmFjayB0byBhdCBsZWFzdCB0aGUgZGVwbG95bWVudCByZWdpb25cblxuICAgIC8vIENyZWF0ZSBJUEFNIHdpdGggYWxsIHJlZ2lvbnMgY29uZmlndXJlZFxuICAgIGNvbnN0IGlwYW0gPSBuZXcgSXBhbSh0aGlzLCBcIklwYW1cIiwge1xuICAgICAgcmVnaW9uczogYWxsUmVnaW9uc1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCBhY2NvdW50cyB0byBmbGF0IGFycmF5IGZvciBJcGFtUG9vbFxuICAgIGNvbnN0IG9yZ0FjY291bnRzID0gT2JqZWN0LnZhbHVlcyhwcm9wcy5hY2NvdW50cykuZmxhdE1hcCgoYWNjb3VudCkgPT5cbiAgICAgIEFycmF5LmlzQXJyYXkoYWNjb3VudCkgPyBhY2NvdW50IDogW2FjY291bnRdXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBJUEFNIHBvb2wgaGllcmFyY2h5IGZvciBhbGwgcmVnaW9uc1xuICAgIG5ldyBJcGFtUG9vbCh0aGlzLCBcIklwYW1Qb29sXCIsIHtcbiAgICAgIG9yZ0FjY291bnRzLFxuICAgICAgcmVnaW9uczogYWxsUmVnaW9ucyxcbiAgICAgIGlwYW1TY29wZTogaXBhbS5wcml2YXRlRGVmYXVsdFNjb3BlSWRcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -3,7 +3,7 @@ import { Construct } from "constructs";
|
|
|
3
3
|
export interface IpamPoolProps extends StackProps {
|
|
4
4
|
orgAccounts: string[];
|
|
5
5
|
ipamScope?: string;
|
|
6
|
-
|
|
6
|
+
regions: string[];
|
|
7
7
|
/**
|
|
8
8
|
* The netmask length (/CIDR) each child IPAM pool should receive.
|
|
9
9
|
* Controls the size of CIDR blocks automatically allocated to VPCs from the pool.
|
|
@@ -19,7 +19,7 @@ export interface IpamPoolProps extends StackProps {
|
|
|
19
19
|
}
|
|
20
20
|
interface IpamPoolStackProps extends StackProps {
|
|
21
21
|
orgAccounts: string[];
|
|
22
|
-
|
|
22
|
+
regions: string[];
|
|
23
23
|
}
|
|
24
24
|
export declare class IpamPool extends Construct {
|
|
25
25
|
constructor(scope: Construct, id: string, props: IpamPoolProps);
|
|
@@ -11,8 +11,10 @@ class IpamPool extends constructs_1.Construct {
|
|
|
11
11
|
super(scope, id);
|
|
12
12
|
// Get the default IPAM scope ID from props, or CFN import
|
|
13
13
|
const IpamPrivateDefaultScopeId = props.ipamScope || aws_cdk_lib_1.Fn.importValue("IpamPrivateDefaultScopeId");
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const regions = props.regions;
|
|
15
|
+
if (!regions || regions.length === 0) {
|
|
16
|
+
throw new Error("At least one region must be specified for IPAM pools");
|
|
17
|
+
}
|
|
16
18
|
const organisationAccounts = props.orgAccounts.map((account) => account.toLowerCase());
|
|
17
19
|
// Determine the child-pool CIDR size (defaults to /20)
|
|
18
20
|
const defaultNetmaskLength = props.allocationDefaultNetmaskLength ?? 20;
|
|
@@ -31,13 +33,13 @@ class IpamPool extends constructs_1.Construct {
|
|
|
31
33
|
console.warn(`Warning: allocationDefaultNetmaskLength (/${defaultNetmaskLength}) is larger than provisionedNetmaskLength (/${provisionedNetmaskLength}). ` +
|
|
32
34
|
`VPC allocation may fail if the pool cannot satisfy the request.`);
|
|
33
35
|
}
|
|
34
|
-
// Create
|
|
36
|
+
// Create ONE top-level pool (no locale) that contains all CIDRs
|
|
35
37
|
const rootPool = new aws_ec2_1.CfnIPAMPool(this, "TopLevelIpamPool", {
|
|
36
|
-
description: `Root IPAM pool`,
|
|
38
|
+
description: `Root IPAM pool (Global)`,
|
|
37
39
|
addressFamily: "ipv4",
|
|
38
40
|
ipamScopeId: IpamPrivateDefaultScopeId,
|
|
39
|
-
locale
|
|
40
|
-
// Explicitly provision the
|
|
41
|
+
// No locale for the top-level pool - it's global
|
|
42
|
+
// Explicitly provision the main CIDR blocks at the top-level
|
|
41
43
|
provisionedCidrs: [
|
|
42
44
|
{ cidr: "10.0.0.0/8" },
|
|
43
45
|
{ cidr: "172.16.0.0/12" },
|
|
@@ -55,68 +57,97 @@ class IpamPool extends constructs_1.Construct {
|
|
|
55
57
|
}
|
|
56
58
|
]
|
|
57
59
|
});
|
|
58
|
-
// Create
|
|
59
|
-
for (const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
// Create regional pools as children of the root pool
|
|
61
|
+
for (const region of regions) {
|
|
62
|
+
const regionSuffix = region.replace(/-/g, "");
|
|
63
|
+
// Create a regional pool for this specific region
|
|
64
|
+
const regionalPool = new aws_ec2_1.CfnIPAMPool(this, `RegionalPool${regionSuffix}`, {
|
|
65
|
+
description: `Regional IPAM pool - ${region}`,
|
|
63
66
|
addressFamily: "ipv4",
|
|
64
67
|
ipamScopeId: IpamPrivateDefaultScopeId,
|
|
65
|
-
locale: region,
|
|
66
|
-
// Allocate from
|
|
67
|
-
sourceIpamPoolId: rootPool.attrIpamPoolId,
|
|
68
|
-
allocationDefaultNetmaskLength: defaultNetmaskLength,
|
|
69
|
-
allocationResourceTags: [
|
|
70
|
-
{
|
|
71
|
-
key: "fjall:operations:pool",
|
|
72
|
-
value: `${accountId}`
|
|
73
|
-
}
|
|
74
|
-
],
|
|
68
|
+
locale: region, // Set the locale for this regional pool
|
|
69
|
+
sourceIpamPoolId: rootPool.attrIpamPoolId, // Allocate from root pool
|
|
75
70
|
autoImport: true,
|
|
76
71
|
tags: [
|
|
77
72
|
{
|
|
78
73
|
key: "fjall:operations:pool",
|
|
79
|
-
value:
|
|
74
|
+
value: `regional-${region}`
|
|
80
75
|
},
|
|
81
76
|
{
|
|
82
|
-
key: "fjall:costAllocation:
|
|
83
|
-
value:
|
|
77
|
+
key: "fjall:costAllocation:type",
|
|
78
|
+
value: "regional"
|
|
84
79
|
}
|
|
85
80
|
]
|
|
86
81
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const share = new resourceShare_1.ResourceShare(this, `${account}${region}IpamResourceShare`, {
|
|
93
|
-
name: `${account}IpamResourceShare.${region}`,
|
|
94
|
-
allowExternalPrincipals: false,
|
|
95
|
-
principals: [accountId],
|
|
96
|
-
resourceArns: [ipamPool.attrArn],
|
|
97
|
-
tags: [
|
|
98
|
-
{
|
|
99
|
-
key: "fjall:costAllocation:account",
|
|
100
|
-
value: `${account}`
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
});
|
|
104
|
-
// Ensure the share is created only after the CIDR is provisioned
|
|
105
|
-
share.node.addDependency(cidrAllocation);
|
|
106
|
-
// Create region-specific suffix for unique exports
|
|
107
|
-
const regionSuffix = region.replace(/-/g, "");
|
|
108
|
-
// Expose the pool ID for cross-stack usage (e.g. VPC allocations)
|
|
109
|
-
// Include region in export name to ensure uniqueness across regions
|
|
110
|
-
new aws_cdk_lib_1.CfnOutput(this, `IpamPoolId${accountId}${regionSuffix}`, {
|
|
111
|
-
key: `IpamPoolId${accountId}${regionSuffix}`,
|
|
112
|
-
value: ipamPool.attrIpamPoolId,
|
|
113
|
-
exportName: `IpamPoolId${accountId}${regionSuffix}`
|
|
114
|
-
});
|
|
115
|
-
new aws_cdk_lib_1.CfnOutput(this, `IpamPoolArn${accountId}${regionSuffix}`, {
|
|
116
|
-
key: `IpamPoolArn${accountId}${regionSuffix}`,
|
|
117
|
-
value: ipamPool.attrArn,
|
|
118
|
-
exportName: `IpamPoolArn${accountId}${regionSuffix}`
|
|
82
|
+
// Provision a large CIDR block for this regional pool
|
|
83
|
+
// Allocate a /10 for each region from the parent pool
|
|
84
|
+
const regionalCidrAllocation = new aws_ec2_1.CfnIPAMPoolCidr(this, `RegionalPoolCidr${regionSuffix}`, {
|
|
85
|
+
ipamPoolId: regionalPool.attrIpamPoolId,
|
|
86
|
+
netmaskLength: 10 // Each region gets a /10 (4,194,304 IPs)
|
|
119
87
|
});
|
|
88
|
+
// Create account pools under each regional pool
|
|
89
|
+
for (const account of organisationAccounts) {
|
|
90
|
+
const accountId = (0, getAccountId_1.default)(account);
|
|
91
|
+
const ipamPool = new aws_ec2_1.CfnIPAMPool(this, `${account}IpamPool${regionSuffix}`, {
|
|
92
|
+
description: `${account} - IPAM pool - ${region}`,
|
|
93
|
+
addressFamily: "ipv4",
|
|
94
|
+
ipamScopeId: IpamPrivateDefaultScopeId,
|
|
95
|
+
locale: region,
|
|
96
|
+
// Allocate from the regional pool (not root pool)
|
|
97
|
+
sourceIpamPoolId: regionalPool.attrIpamPoolId,
|
|
98
|
+
allocationDefaultNetmaskLength: defaultNetmaskLength,
|
|
99
|
+
allocationResourceTags: [
|
|
100
|
+
{
|
|
101
|
+
key: "fjall:operations:pool",
|
|
102
|
+
value: `${accountId}`
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
autoImport: true,
|
|
106
|
+
tags: [
|
|
107
|
+
{
|
|
108
|
+
key: "fjall:operations:pool",
|
|
109
|
+
value: `${accountId}`
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
key: "fjall:costAllocation:accountName",
|
|
113
|
+
value: `${account}`
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
// Ensure the account pool is created after the regional CIDR allocation
|
|
118
|
+
ipamPool.node.addDependency(regionalCidrAllocation);
|
|
119
|
+
const cidrAllocation = new aws_ec2_1.CfnIPAMPoolCidr(this, `${account}PoolCidr${provisionedNetmaskLength}${regionSuffix}`, {
|
|
120
|
+
ipamPoolId: ipamPool.attrIpamPoolId,
|
|
121
|
+
netmaskLength: provisionedNetmaskLength
|
|
122
|
+
});
|
|
123
|
+
// Share the pool with the target account so that VPCs can allocate
|
|
124
|
+
const share = new resourceShare_1.ResourceShare(this, `${account}IpamResourceShare${regionSuffix}`, {
|
|
125
|
+
name: `${account}IpamResourceShare.${region}`,
|
|
126
|
+
allowExternalPrincipals: false,
|
|
127
|
+
principals: [accountId],
|
|
128
|
+
resourceArns: [ipamPool.attrArn],
|
|
129
|
+
tags: [
|
|
130
|
+
{
|
|
131
|
+
key: "fjall:costAllocation:account",
|
|
132
|
+
value: `${account}`
|
|
133
|
+
}
|
|
134
|
+
]
|
|
135
|
+
});
|
|
136
|
+
// Ensure the share is created only after the CIDR is provisioned
|
|
137
|
+
share.node.addDependency(cidrAllocation);
|
|
138
|
+
// Expose the pool ID for cross-stack usage (e.g. VPC allocations)
|
|
139
|
+
// Include region in export name to ensure uniqueness across regions
|
|
140
|
+
new aws_cdk_lib_1.CfnOutput(this, `IpamPoolId${accountId}${regionSuffix}`, {
|
|
141
|
+
key: `IpamPoolId${accountId}${regionSuffix}`,
|
|
142
|
+
value: ipamPool.attrIpamPoolId,
|
|
143
|
+
exportName: `IpamPoolId${accountId}${regionSuffix}`
|
|
144
|
+
});
|
|
145
|
+
new aws_cdk_lib_1.CfnOutput(this, `IpamPoolArn${accountId}${regionSuffix}`, {
|
|
146
|
+
key: `IpamPoolArn${accountId}${regionSuffix}`,
|
|
147
|
+
value: ipamPool.attrArn,
|
|
148
|
+
exportName: `IpamPoolArn${accountId}${regionSuffix}`
|
|
149
|
+
});
|
|
150
|
+
}
|
|
120
151
|
}
|
|
121
152
|
}
|
|
122
153
|
}
|
|
@@ -126,9 +157,9 @@ class IpamPoolStack extends aws_cdk_lib_1.Stack {
|
|
|
126
157
|
super(scope, id);
|
|
127
158
|
new IpamPool(this, "IpamPool", {
|
|
128
159
|
orgAccounts: props.orgAccounts,
|
|
129
|
-
|
|
160
|
+
regions: props.regions
|
|
130
161
|
});
|
|
131
162
|
}
|
|
132
163
|
}
|
|
133
164
|
exports.IpamPoolStack = IpamPoolStack;
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbVBvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErRDtBQUMvRCwyQ0FBdUM7QUFDdkMsaURBRzZCO0FBQzdCLDhEQUEyRDtBQUMzRCw4REFBdUQ7QUF5QnZELE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwwREFBMEQ7UUFDMUQsTUFBTSx5QkFBeUIsR0FDN0IsS0FBSyxDQUFDLFNBQVMsSUFBSSxnQkFBRSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pFLDhDQUE4QztRQUM5QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTVCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM3RCxPQUFPLENBQUMsV0FBVyxFQUFFLENBQ3RCLENBQUM7UUFFRix1REFBdUQ7UUFDdkQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDO1FBQ3hFLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FBQztRQUV0RSxrRkFBa0Y7UUFDbEYsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLElBQUksb0JBQW9CLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FDYixtRkFBbUYsb0JBQW9CLEVBQUUsQ0FDMUcsQ0FBQztRQUNKLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSx3QkFBd0IsR0FBRyxFQUFFLElBQUksd0JBQXdCLEdBQUcsRUFBRSxF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aW1wb3J0IHsgRm4sIENmbk91dHB1dCwgU3RhY2tQcm9wcywgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDZm5JUEFNUG9vbCBhcyBJcGFtUG9vbENsYXNzLFxuICBDZm5JUEFNUG9vbENpZHJcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFJlc291cmNlU2hhcmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Jlc291cmNlU2hhcmVcIjtcbmltcG9ydCBnZXRBY2NvdW50SWQgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2dldEFjY291bnRJZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgb3JnQWNjb3VudHM6IHN0cmluZ1tdO1xuICBpcGFtU2NvcGU/OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5ldG1hc2sgbGVuZ3RoICgvQ0lEUikgZWFjaCBjaGlsZCBJUEFNIHBvb2wgc2hvdWxkIHJlY2VpdmUuXG4gICAqIENvbnRyb2xzIHRoZSBzaXplIG9mIENJRFIgYmxvY2tzIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGVkIHRvIFZQQ3MgZnJvbSB0aGUgcG9vbC5cbiAgICogQWNjZXB0ZWQgcmFuZ2U6IC8xNiAoNjUsNTM2IElQcykg4oCTIC8yOCAoMTYgSVBzKS4gRGVmYXVsdHMgdG8gLzIwICg0LDA5NiBJUHMpLlxuICAgKi9cbiAgYWxsb2NhdGlvbkRlZmF1bHROZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG5ldG1hc2sgbGVuZ3RoICgvQ0lEUikgcHJvdmlzaW9uZWQgaW50byBlYWNoIGNoaWxkIElQQU0gcG9vbCBvbiBjcmVhdGlvbi5cbiAgICogRGV0ZXJtaW5lcyB0aGUgdG90YWwgYWRkcmVzcyBzcGFjZSBhdmFpbGFibGUgZm9yIFZQQyBhbGxvY2F0aW9ucyBpbiB0aGF0IGFjY291bnQuXG4gICAqIEFjY2VwdGVkIHJhbmdlOiAvMTMgKDUyNCwyODggSVBzKSDigJMgLzE2ICg2NSw1MzYgSVBzKS4gRGVmYXVsdHMgdG8gLzE0LlxuICAgKi9cbiAgcHJvdmlzaW9uZWROZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSXBhbVBvb2xTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIG9yZ0FjY291bnRzOiBzdHJpbmdbXTtcbiAgcmVnaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGFtUG9vbCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEdldCB0aGUgZGVmYXVsdCBJUEFNIHNjb3BlIElEIGZyb20gcHJvcHMsIG9yIENGTiBpbXBvcnRcbiAgICBjb25zdCBJcGFtUHJpdmF0ZURlZmF1bHRTY29wZUlkID1cbiAgICAgIHByb3BzLmlwYW1TY29wZSB8fCBGbi5pbXBvcnRWYWx1ZShcIklwYW1Qcml2YXRlRGVmYXVsdFNjb3BlSWRcIik7XG4gICAgLy8gUHJpb3JpdGlzZSByZWdpb24gZnJvbSBwcm9wcywgdGhlbiBmcm9tIGVudlxuICAgIGNvbnN0IHJlZ2lvbiA9IHByb3BzLnJlZ2lvbjtcblxuICAgIGNvbnN0IG9yZ2FuaXNhdGlvbkFjY291bnRzID0gcHJvcHMub3JnQWNjb3VudHMubWFwKChhY2NvdW50KSA9PlxuICAgICAgYWNjb3VudC50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgY2hpbGQtcG9vbCBDSURSIHNpemUgKGRlZmF1bHRzIHRvIC8yMClcbiAgICBjb25zdCBkZWZhdWx0TmV0bWFza0xlbmd0aCA9IHByb3BzLmFsbG9jYXRpb25EZWZhdWx0TmV0bWFza0xlbmd0aCA/PyAyMDtcbiAgICBjb25zdCBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPSBwcm9wcy5wcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPz8gMTQ7XG5cbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIOKAkyAvMTYgdG8gLzI4IGluY2x1c2l2ZSBhcmUgY29uc2lkZXJlZCBzYWZlIGZvciBWUEMgYWxsb2NhdGlvbnNcbiAgICBpZiAoZGVmYXVsdE5ldG1hc2tMZW5ndGggPCAxNiB8fCBkZWZhdWx0TmV0bWFza0xlbmd0aCA+IDI4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDE2IGFuZCAyOCAoaW5jbHVzaXZlKS4gUmVjZWl2ZWQ6ICR7ZGVmYXVsdE5ldG1hc2tMZW5ndGh9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm92aXNpb25lZCBibG9jayBzaXplICgvMTMgdG8gLzE2KVxuICAgIGlmIChwcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPCAxMyB8fCBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPiAxNikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcHJvdmlzaW9uZWROZXRtYXNrTGVuZ3RoIG11c3QgYmUgYmV0d2VlbiAxMyBhbmQgMTYgKGluY2x1c2l2ZSkuIFJlY2VpdmVkOiAke3Byb3Zpc2lvbmVkTmV0bWFza0xlbmd0aH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgdXNlciByZXF1ZXN0cyBWUEMgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gdGhlIHByb3Zpc2lvbmVkIHBvb2xcbiAgICBpZiAoZGVmYXVsdE5ldG1hc2tMZW5ndGggPCBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBXYXJuaW5nOiBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGggKC8ke2RlZmF1bHROZXRtYXNrTGVuZ3RofSkgaXMgbGFyZ2VyIHRoYW4gcHJvdmlzaW9uZWROZXRtYXNrTGVuZ3RoICgvJHtwcm92aXNpb25lZE5ldG1hc2tMZW5ndGh9KS4gYCArXG4gICAgICAgICAgYFZQQyBhbGxvY2F0aW9uIG1heSBmYWlsIGlmIHRoZSBwb29sIGNhbm5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSB0b3AtbGV2ZWwgcG9vbHNcbiAgICBjb25zdCByb290UG9vbCA9IG5ldyBJcGFtUG9vbENsYXNzKHRoaXMsIFwiVG9wTGV2ZWxJcGFtUG9vbFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYFJvb3QgSVBBTSBwb29sYCxcbiAgICAgIGFkZHJlc3NGYW1pbHk6IFwiaXB2NFwiLFxuICAgICAgaXBhbVNjb3BlSWQ6IElwYW1Qcml2YXRlRGVmYXVsdFNjb3BlSWQsXG4gICAgICBsb2NhbGU6IHJlZ2lvbixcbiAgICAgIC8vIEV4cGxpY2l0bHkgcHJvdmlzaW9uIHRoZSAvOCBDSURSIG9uY2UgYXQgdGhlIHRvcC1sZXZlbFxuICAgICAgcHJvdmlzaW9uZWRDaWRyczogW1xuICAgICAgICB7IGNpZHI6IFwiMTAuMC4wLjAvOFwiIH0sXG4gICAgICAgIHsgY2lkcjogXCIxNzIuMTYuMC4wLzEyXCIgfSxcbiAgICAgICAgeyBjaWRyOiBcIjE5Mi4xNjguMC4wLzE2XCIgfVxuICAgICAgXSxcbiAgICAgIGF1dG9JbXBvcnQ6IHRydWUsXG4gICAgICB0YWdzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsXG4gICAgICAgICAgdmFsdWU6IFwidG9wLWxldmVsXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogXCJmamFsbDpjb3N0QWxsb2NhdGlvbjp0eXBlXCIsXG4gICAgICAgICAgdmFsdWU6IFwicm9vdFwiXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIGNoaWxkIHBvb2wgZm9yIGVhY2ggT3JnYW5pc2F0aW9uIGFjY291bnRcbiAgICBmb3IgKGNvbnN0IGFjY291bnQgb2Ygb3JnYW5pc2F0aW9uQWNjb3VudHMpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJZCA9IGdldEFjY291bnRJZChhY2NvdW50KTtcblxuICAgICAgY29uc3QgaXBhbVBvb2wgPSBuZXcgSXBhbVBvb2xDbGFzcyh0aGlzLCBgJHthY2NvdW50fUlwYW1Qb29sYCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7YWNjb3VudH0gLSBJUEFNIHBvb2wgLSAke3JlZ2lvbn1gLFxuICAgICAgICBhZGRyZXNzRmFtaWx5OiBcImlwdjRcIixcbiAgICAgICAgaXBhbVNjb3BlSWQ6IElwYW1Qcml2YXRlRGVmYXVsdFNjb3BlSWQsXG4gICAgICAgIGxvY2FsZTogcmVnaW9uLFxuICAgICAgICAvLyBBbGxvY2F0ZSBmcm9tIHRoZSByb290IHBvb2wgYXV0b21hdGljYWxseVxuICAgICAgICBzb3VyY2VJcGFtUG9vbElkOiByb290UG9vbC5hdHRySXBhbVBvb2xJZCxcbiAgICAgICAgYWxsb2NhdGlvbkRlZmF1bHROZXRtYXNrTGVuZ3RoOiBkZWZhdWx0TmV0bWFza0xlbmd0aCxcbiAgICAgICAgYWxsb2NhdGlvblJlc291cmNlVGFnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIixcbiAgICAgICAgICAgIHZhbHVlOiBgJHthY2NvdW50SWR9YFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgYXV0b0ltcG9ydDogdHJ1ZSxcbiAgICAgICAgdGFnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmamFsbDpvcGVyYXRpb25zOnBvb2xcIixcbiAgICAgICAgICAgIHZhbHVlOiBgJHthY2NvdW50SWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmFjY291bnROYW1lXCIsXG4gICAgICAgICAgICB2YWx1ZTogYCR7YWNjb3VudH1gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2lkckFsbG9jYXRpb24gPSBuZXcgQ2ZuSVBBTVBvb2xDaWRyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHthY2NvdW50fVBvb2xDaWRyJHtwcm92aXNpb25lZE5ldG1hc2tMZW5ndGh9YCxcbiAgICAgICAge1xuICAgICAgICAgIGlwYW1Qb29sSWQ6IGlwYW1Qb29sLmF0dHJJcGFtUG9vbElkLFxuICAgICAgICAgIG5ldG1hc2tMZW5ndGg6IHByb3Zpc2lvbmVkTmV0bWFza0xlbmd0aFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBTaGFyZSB0aGUgcG9vbCB3aXRoIHRoZSB0YXJnZXQgYWNjb3VudCBzbyB0aGF0IFZQQ3MgY2FuIGFsbG9jYXRlXG4gICAgICBjb25zdCBzaGFyZSA9IG5ldyBSZXNvdXJjZVNoYXJlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHthY2NvdW50fSR7cmVnaW9ufUlwYW1SZXNvdXJjZVNoYXJlYCxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2FjY291bnR9SXBhbVJlc291cmNlU2hhcmUuJHtyZWdpb259YCxcbiAgICAgICAgICBhbGxvd0V4dGVybmFsUHJpbmNpcGFsczogZmFsc2UsXG4gICAgICAgICAgcHJpbmNpcGFsczogW2FjY291bnRJZF0sXG4gICAgICAgICAgcmVzb3VyY2VBcm5zOiBbaXBhbVBvb2wuYXR0ckFybl0sXG4gICAgICAgICAgdGFnczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246YWNjb3VudFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogYCR7YWNjb3VudH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIHNoYXJlIGlzIGNyZWF0ZWQgb25seSBhZnRlciB0aGUgQ0lEUiBpcyBwcm92aXNpb25lZFxuICAgICAgc2hhcmUubm9kZS5hZGREZXBlbmRlbmN5KGNpZHJBbGxvY2F0aW9uKTtcblxuICAgICAgLy8gQ3JlYXRlIHJlZ2lvbi1zcGVjaWZpYyBzdWZmaXggZm9yIHVuaXF1ZSBleHBvcnRzXG4gICAgICBjb25zdCByZWdpb25TdWZmaXggPSByZWdpb24ucmVwbGFjZSgvLS9nLCBcIlwiKTtcblxuICAgICAgLy8gRXhwb3NlIHRoZSBwb29sIElEIGZvciBjcm9zcy1zdGFjayB1c2FnZSAoZS5nLiBWUEMgYWxsb2NhdGlvbnMpXG4gICAgICAvLyBJbmNsdWRlIHJlZ2lvbiBpbiBleHBvcnQgbmFtZSB0byBlbnN1cmUgdW5pcXVlbmVzcyBhY3Jvc3MgcmVnaW9uc1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgSXBhbVBvb2xJZCR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWAsIHtcbiAgICAgICAga2V5OiBgSXBhbVBvb2xJZCR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWAsXG4gICAgICAgIHZhbHVlOiBpcGFtUG9vbC5hdHRySXBhbVBvb2xJZCxcbiAgICAgICAgZXhwb3J0TmFtZTogYElwYW1Qb29sSWQke2FjY291bnRJZH0ke3JlZ2lvblN1ZmZpeH1gXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgSXBhbVBvb2xBcm4ke2FjY291bnRJZH0ke3JlZ2lvblN1ZmZpeH1gLCB7XG4gICAgICAgIGtleTogYElwYW1Qb29sQXJuJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YCxcbiAgICAgICAgdmFsdWU6IGlwYW1Qb29sLmF0dHJBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6IGBJcGFtUG9vbEFybiR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBhbVBvb2xTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgSXBhbVBvb2wodGhpcywgXCJJcGFtUG9vbFwiLCB7XG4gICAgICBvcmdBY2NvdW50czogcHJvcHMub3JnQWNjb3VudHMsXG4gICAgICByZWdpb246IHByb3BzLnJlZ2lvblxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbVBvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErRDtBQUMvRCwyQ0FBdUM7QUFDdkMsaURBRzZCO0FBQzdCLDhEQUEyRDtBQUMzRCw4REFBdUQ7QUF5QnZELE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwwREFBMEQ7UUFDMUQsTUFBTSx5QkFBeUIsR0FDN0IsS0FBSyxDQUFDLFNBQVMsSUFBSSxnQkFBRSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQzdELE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FDdEIsQ0FBQztRQUVGLHVEQUF1RDtRQUN2RCxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxFQUFFLENBQUM7UUFDeEUsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUMsd0JBQXdCLElBQUksRUFBRSxDQUFDO1FBRXRFLGtGQUFrRjtRQUNsRixJQUFJLG9CQUFvQixHQUFHLEVBQUUsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLG1G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bSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQ2ZuSVBBTVBvb2wgYXMgSXBhbVBvb2xDbGFzcyxcbiAgQ2ZuSVBBTVBvb2xDaWRyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVNoYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9yZXNvdXJjZVNoYXJlXCI7XG5pbXBvcnQgZ2V0QWNjb3VudElkIGZyb20gXCIuLi8uLi8uLi91dGlscy9nZXRBY2NvdW50SWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIG9yZ0FjY291bnRzOiBzdHJpbmdbXTtcbiAgaXBhbVNjb3BlPzogc3RyaW5nO1xuICByZWdpb25zOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBuZXRtYXNrIGxlbmd0aCAoL0NJRFIpIGVhY2ggY2hpbGQgSVBBTSBwb29sIHNob3VsZCByZWNlaXZlLlxuICAgKiBDb250cm9scyB0aGUgc2l6ZSBvZiBDSURSIGJsb2NrcyBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCB0byBWUENzIGZyb20gdGhlIHBvb2wuXG4gICAqIEFjY2VwdGVkIHJhbmdlOiAvMTYgKDY1LDUzNiBJUHMpIOKAkyAvMjggKDE2IElQcykuIERlZmF1bHRzIHRvIC8yMCAoNCwwOTYgSVBzKS5cbiAgICovXG4gIGFsbG9jYXRpb25EZWZhdWx0TmV0bWFza0xlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBuZXRtYXNrIGxlbmd0aCAoL0NJRFIpIHByb3Zpc2lvbmVkIGludG8gZWFjaCBjaGlsZCBJUEFNIHBvb2wgb24gY3JlYXRpb24uXG4gICAqIERldGVybWluZXMgdGhlIHRvdGFsIGFkZHJlc3Mgc3BhY2UgYXZhaWxhYmxlIGZvciBWUEMgYWxsb2NhdGlvbnMgaW4gdGhhdCBhY2NvdW50LlxuICAgKiBBY2NlcHRlZCByYW5nZTogLzEzICg1MjQsMjg4IElQcykg4oCTIC8xNiAoNjUsNTM2IElQcykuIERlZmF1bHRzIHRvIC8xNC5cbiAgICovXG4gIHByb3Zpc2lvbmVkTmV0bWFza0xlbmd0aD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElwYW1Qb29sU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBvcmdBY2NvdW50czogc3RyaW5nW107XG4gIHJlZ2lvbnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBhbVBvb2wgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSXBhbVBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBHZXQgdGhlIGRlZmF1bHQgSVBBTSBzY29wZSBJRCBmcm9tIHByb3BzLCBvciBDRk4gaW1wb3J0XG4gICAgY29uc3QgSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCA9XG4gICAgICBwcm9wcy5pcGFtU2NvcGUgfHwgRm4uaW1wb3J0VmFsdWUoXCJJcGFtUHJpdmF0ZURlZmF1bHRTY29wZUlkXCIpO1xuXG4gICAgY29uc3QgcmVnaW9ucyA9IHByb3BzLnJlZ2lvbnM7XG4gICAgaWYgKCFyZWdpb25zIHx8IHJlZ2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBvbmUgcmVnaW9uIG11c3QgYmUgc3BlY2lmaWVkIGZvciBJUEFNIHBvb2xzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZ2FuaXNhdGlvbkFjY291bnRzID0gcHJvcHMub3JnQWNjb3VudHMubWFwKChhY2NvdW50KSA9PlxuICAgICAgYWNjb3VudC50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgY2hpbGQtcG9vbCBDSURSIHNpemUgKGRlZmF1bHRzIHRvIC8yMClcbiAgICBjb25zdCBkZWZhdWx0TmV0bWFza0xlbmd0aCA9IHByb3BzLmFsbG9jYXRpb25EZWZhdWx0TmV0bWFza0xlbmd0aCA/PyAyMDtcbiAgICBjb25zdCBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPSBwcm9wcy5wcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPz8gMTQ7XG5cbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIOKAkyAvMTYgdG8gLzI4IGluY2x1c2l2ZSBhcmUgY29uc2lkZXJlZCBzYWZlIGZvciBWUEMgYWxsb2NhdGlvbnNcbiAgICBpZiAoZGVmYXVsdE5ldG1hc2tMZW5ndGggPCAxNiB8fCBkZWZhdWx0TmV0bWFza0xlbmd0aCA+IDI4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDE2IGFuZCAyOCAoaW5jbHVzaXZlKS4gUmVjZWl2ZWQ6ICR7ZGVmYXVsdE5ldG1hc2tMZW5ndGh9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm92aXNpb25lZCBibG9jayBzaXplICgvMTMgdG8gLzE2KVxuICAgIGlmIChwcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPCAxMyB8fCBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGggPiAxNikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcHJvdmlzaW9uZWROZXRtYXNrTGVuZ3RoIG11c3QgYmUgYmV0d2VlbiAxMyBhbmQgMTYgKGluY2x1c2l2ZSkuIFJlY2VpdmVkOiAke3Byb3Zpc2lvbmVkTmV0bWFza0xlbmd0aH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgdXNlciByZXF1ZXN0cyBWUEMgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gdGhlIHByb3Zpc2lvbmVkIHBvb2xcbiAgICBpZiAoZGVmYXVsdE5ldG1hc2tMZW5ndGggPCBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBXYXJuaW5nOiBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGggKC8ke2RlZmF1bHROZXRtYXNrTGVuZ3RofSkgaXMgbGFyZ2VyIHRoYW4gcHJvdmlzaW9uZWROZXRtYXNrTGVuZ3RoICgvJHtwcm92aXNpb25lZE5ldG1hc2tMZW5ndGh9KS4gYCArXG4gICAgICAgICAgYFZQQyBhbGxvY2F0aW9uIG1heSBmYWlsIGlmIHRoZSBwb29sIGNhbm5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIE9ORSB0b3AtbGV2ZWwgcG9vbCAobm8gbG9jYWxlKSB0aGF0IGNvbnRhaW5zIGFsbCBDSURSc1xuICAgIGNvbnN0IHJvb3RQb29sID0gbmV3IElwYW1Qb29sQ2xhc3ModGhpcywgXCJUb3BMZXZlbElwYW1Qb29sXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgUm9vdCBJUEFNIHBvb2wgKEdsb2JhbClgLFxuICAgICAgYWRkcmVzc0ZhbWlseTogXCJpcHY0XCIsXG4gICAgICBpcGFtU2NvcGVJZDogSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCxcbiAgICAgIC8vIE5vIGxvY2FsZSBmb3IgdGhlIHRvcC1sZXZlbCBwb29sIC0gaXQncyBnbG9iYWxcbiAgICAgIC8vIEV4cGxpY2l0bHkgcHJvdmlzaW9uIHRoZSBtYWluIENJRFIgYmxvY2tzIGF0IHRoZSB0b3AtbGV2ZWxcbiAgICAgIHByb3Zpc2lvbmVkQ2lkcnM6IFtcbiAgICAgICAgeyBjaWRyOiBcIjEwLjAuMC4wLzhcIiB9LFxuICAgICAgICB7IGNpZHI6IFwiMTcyLjE2LjAuMC8xMlwiIH0sXG4gICAgICAgIHsgY2lkcjogXCIxOTIuMTY4LjAuMC8xNlwiIH1cbiAgICAgIF0sXG4gICAgICBhdXRvSW1wb3J0OiB0cnVlLFxuICAgICAgdGFnczogW1xuICAgICAgICB7XG4gICAgICAgICAga2V5OiBcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLFxuICAgICAgICAgIHZhbHVlOiBcInRvcC1sZXZlbFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246dHlwZVwiLFxuICAgICAgICAgIHZhbHVlOiBcInJvb3RcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcmVnaW9uYWwgcG9vbHMgYXMgY2hpbGRyZW4gb2YgdGhlIHJvb3QgcG9vbFxuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIGNvbnN0IHJlZ2lvblN1ZmZpeCA9IHJlZ2lvbi5yZXBsYWNlKC8tL2csIFwiXCIpO1xuXG4gICAgICAvLyBDcmVhdGUgYSByZWdpb25hbCBwb29sIGZvciB0aGlzIHNwZWNpZmljIHJlZ2lvblxuICAgICAgY29uc3QgcmVnaW9uYWxQb29sID0gbmV3IElwYW1Qb29sQ2xhc3ModGhpcywgYFJlZ2lvbmFsUG9vbCR7cmVnaW9uU3VmZml4fWAsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBSZWdpb25hbCBJUEFNIHBvb2wgLSAke3JlZ2lvbn1gLFxuICAgICAgICBhZGRyZXNzRmFtaWx5OiBcImlwdjRcIixcbiAgICAgICAgaXBhbVNjb3BlSWQ6IElwYW1Qcml2YXRlRGVmYXVsdFNjb3BlSWQsXG4gICAgICAgIGxvY2FsZTogcmVnaW9uLCAvLyBTZXQgdGhlIGxvY2FsZSBmb3IgdGhpcyByZWdpb25hbCBwb29sXG4gICAgICAgIHNvdXJjZUlwYW1Qb29sSWQ6IHJvb3RQb29sLmF0dHJJcGFtUG9vbElkLCAvLyBBbGxvY2F0ZSBmcm9tIHJvb3QgcG9vbFxuICAgICAgICBhdXRvSW1wb3J0OiB0cnVlLFxuICAgICAgICB0YWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLFxuICAgICAgICAgICAgdmFsdWU6IGByZWdpb25hbC0ke3JlZ2lvbn1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmphbGw6Y29zdEFsbG9jYXRpb246dHlwZVwiLFxuICAgICAgICAgICAgdmFsdWU6IFwicmVnaW9uYWxcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFByb3Zpc2lvbiBhIGxhcmdlIENJRFIgYmxvY2sgZm9yIHRoaXMgcmVnaW9uYWwgcG9vbFxuICAgICAgLy8gQWxsb2NhdGUgYSAvMTAgZm9yIGVhY2ggcmVnaW9uIGZyb20gdGhlIHBhcmVudCBwb29sXG4gICAgICBjb25zdCByZWdpb25hbENpZHJBbGxvY2F0aW9uID0gbmV3IENmbklQQU1Qb29sQ2lkcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYFJlZ2lvbmFsUG9vbENpZHIke3JlZ2lvblN1ZmZpeH1gLFxuICAgICAgICB7XG4gICAgICAgICAgaXBhbVBvb2xJZDogcmVnaW9uYWxQb29sLmF0dHJJcGFtUG9vbElkLFxuICAgICAgICAgIG5ldG1hc2tMZW5ndGg6IDEwIC8vIEVhY2ggcmVnaW9uIGdldHMgYSAvMTAgKDQsMTk0LDMwNCBJUHMpXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSBhY2NvdW50IHBvb2xzIHVuZGVyIGVhY2ggcmVnaW9uYWwgcG9vbFxuICAgICAgZm9yIChjb25zdCBhY2NvdW50IG9mIG9yZ2FuaXNhdGlvbkFjY291bnRzKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IGdldEFjY291bnRJZChhY2NvdW50KTtcblxuICAgICAgICBjb25zdCBpcGFtUG9vbCA9IG5ldyBJcGFtUG9vbENsYXNzKHRoaXMsIGAke2FjY291bnR9SXBhbVBvb2wke3JlZ2lvblN1ZmZpeH1gLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGAke2FjY291bnR9IC0gSVBBTSBwb29sIC0gJHtyZWdpb259YCxcbiAgICAgICAgICBhZGRyZXNzRmFtaWx5OiBcImlwdjRcIixcbiAgICAgICAgICBpcGFtU2NvcGVJZDogSXBhbVByaXZhdGVEZWZhdWx0U2NvcGVJZCxcbiAgICAgICAgICBsb2NhbGU6IHJlZ2lvbixcbiAgICAgICAgICAvLyBBbGxvY2F0ZSBmcm9tIHRoZSByZWdpb25hbCBwb29sIChub3Qgcm9vdCBwb29sKVxuICAgICAgICAgIHNvdXJjZUlwYW1Qb29sSWQ6IHJlZ2lvbmFsUG9vbC5hdHRySXBhbVBvb2xJZCxcbiAgICAgICAgICBhbGxvY2F0aW9uRGVmYXVsdE5ldG1hc2tMZW5ndGg6IGRlZmF1bHROZXRtYXNrTGVuZ3RoLFxuICAgICAgICAgIGFsbG9jYXRpb25SZXNvdXJjZVRhZ3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogYCR7YWNjb3VudElkfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGF1dG9JbXBvcnQ6IHRydWUsXG4gICAgICAgICAgdGFnczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBgJHthY2NvdW50SWR9YFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmFjY291bnROYW1lXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBgJHthY2NvdW50fWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgYWNjb3VudCBwb29sIGlzIGNyZWF0ZWQgYWZ0ZXIgdGhlIHJlZ2lvbmFsIENJRFIgYWxsb2NhdGlvblxuICAgICAgICBpcGFtUG9vbC5ub2RlLmFkZERlcGVuZGVuY3kocmVnaW9uYWxDaWRyQWxsb2NhdGlvbik7XG5cbiAgICAgICAgY29uc3QgY2lkckFsbG9jYXRpb24gPSBuZXcgQ2ZuSVBBTVBvb2xDaWRyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7YWNjb3VudH1Qb29sQ2lkciR7cHJvdmlzaW9uZWROZXRtYXNrTGVuZ3RofSR7cmVnaW9uU3VmZml4fWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXBhbVBvb2xJZDogaXBhbVBvb2wuYXR0cklwYW1Qb29sSWQsXG4gICAgICAgICAgICBuZXRtYXNrTGVuZ3RoOiBwcm92aXNpb25lZE5ldG1hc2tMZW5ndGhcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU2hhcmUgdGhlIHBvb2wgd2l0aCB0aGUgdGFyZ2V0IGFjY291bnQgc28gdGhhdCBWUENzIGNhbiBhbGxvY2F0ZVxuICAgICAgICBjb25zdCBzaGFyZSA9IG5ldyBSZXNvdXJjZVNoYXJlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7YWNjb3VudH1JcGFtUmVzb3VyY2VTaGFyZSR7cmVnaW9uU3VmZml4fWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogYCR7YWNjb3VudH1JcGFtUmVzb3VyY2VTaGFyZS4ke3JlZ2lvbn1gLFxuICAgICAgICAgICAgYWxsb3dFeHRlcm5hbFByaW5jaXBhbHM6IGZhbHNlLFxuICAgICAgICAgICAgcHJpbmNpcGFsczogW2FjY291bnRJZF0sXG4gICAgICAgICAgICByZXNvdXJjZUFybnM6IFtpcGFtUG9vbC5hdHRyQXJuXSxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJmamFsbDpjb3N0QWxsb2NhdGlvbjphY2NvdW50XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGAke2FjY291bnR9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgc2hhcmUgaXMgY3JlYXRlZCBvbmx5IGFmdGVyIHRoZSBDSURSIGlzIHByb3Zpc2lvbmVkXG4gICAgICAgIHNoYXJlLm5vZGUuYWRkRGVwZW5kZW5jeShjaWRyQWxsb2NhdGlvbik7XG5cbiAgICAgICAgLy8gRXhwb3NlIHRoZSBwb29sIElEIGZvciBjcm9zcy1zdGFjayB1c2FnZSAoZS5nLiBWUEMgYWxsb2NhdGlvbnMpXG4gICAgICAgIC8vIEluY2x1ZGUgcmVnaW9uIGluIGV4cG9ydCBuYW1lIHRvIGVuc3VyZSB1bmlxdWVuZXNzIGFjcm9zcyByZWdpb25zXG4gICAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYElwYW1Qb29sSWQke2FjY291bnRJZH0ke3JlZ2lvblN1ZmZpeH1gLCB7XG4gICAgICAgICAga2V5OiBgSXBhbVBvb2xJZCR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWAsXG4gICAgICAgICAgdmFsdWU6IGlwYW1Qb29sLmF0dHJJcGFtUG9vbElkLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGBJcGFtUG9vbElkJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YFxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGBJcGFtUG9vbEFybiR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWAsIHtcbiAgICAgICAgICBrZXk6IGBJcGFtUG9vbEFybiR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWAsXG4gICAgICAgICAgdmFsdWU6IGlwYW1Qb29sLmF0dHJBcm4sXG4gICAgICAgICAgZXhwb3J0TmFtZTogYElwYW1Qb29sQXJuJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwYW1Qb29sU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IElwYW1Qb29sKHRoaXMsIFwiSXBhbVBvb2xcIiwge1xuICAgICAgb3JnQWNjb3VudHM6IHByb3BzLm9yZ0FjY291bnRzLFxuICAgICAgcmVnaW9uczogcHJvcHMucmVnaW9uc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.69.
|
|
3
|
+
"version": "0.69.4",
|
|
4
4
|
"bin": {
|
|
5
5
|
"infrastructure": "bin/infrastructure.js"
|
|
6
6
|
},
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@aws-sdk/client-organizations": "^3.716.0",
|
|
38
|
-
"@fjall/util": "^0.69.
|
|
38
|
+
"@fjall/util": "^0.69.4",
|
|
39
39
|
"@pepperize/cdk-organizations": "^0.7.135",
|
|
40
40
|
"cdk-time-sleep": "^1.0.0",
|
|
41
41
|
"constructs": "^10.0.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"overrides": {
|
|
45
45
|
"@smithy/core": "2.5.5"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "05a4a14d56cf1c899aaffa8b4709c3d83e3c2957",
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"aws-cdk": "^2.206.0",
|
|
50
50
|
"aws-cdk-lib": "^2.206.0",
|