@fjall/components-infrastructure 0.76.0 → 0.77.2
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.
- package/dist/lib/app.d.ts +93 -12
- package/dist/lib/app.js +117 -48
- package/dist/lib/aspects/resourceInventory.d.ts +41 -0
- package/dist/lib/aspects/resourceInventory.js +56 -0
- package/dist/lib/config/audit.d.ts +18 -0
- package/dist/lib/config/audit.js +22 -0
- package/dist/lib/config/aws/ecrDefaultImage.js +3 -3
- package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
- package/dist/lib/patterns/aws/auditRole.js +58 -0
- package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
- package/dist/lib/patterns/aws/basicApp.js +150 -0
- package/dist/lib/patterns/aws/compute.d.ts +10 -4
- package/dist/lib/patterns/aws/compute.js +5 -5
- package/dist/lib/patterns/aws/database.d.ts +24 -30
- package/dist/lib/patterns/aws/database.js +93 -14
- package/dist/lib/patterns/aws/ec2.d.ts +43 -0
- package/dist/lib/patterns/aws/ec2.js +123 -0
- package/dist/lib/patterns/aws/freeTierApp.d.ts +44 -0
- package/dist/lib/patterns/aws/freeTierApp.js +83 -0
- package/dist/lib/patterns/aws/index.d.ts +1 -0
- package/dist/lib/patterns/aws/index.js +2 -1
- package/dist/lib/patterns/aws/network.d.ts +75 -0
- package/dist/lib/patterns/aws/network.js +99 -0
- package/dist/lib/patterns/aws/spotInstanceApp.d.ts +45 -0
- package/dist/lib/patterns/aws/spotInstanceApp.js +85 -0
- package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
- package/dist/lib/resources/aws/audit/auditRole.js +46 -0
- package/dist/lib/resources/aws/base/awsStack.js +1 -4
- package/dist/lib/resources/aws/compute/ec2.d.ts +1 -0
- package/dist/lib/resources/aws/compute/ec2.js +5 -3
- package/dist/lib/resources/aws/compute/ecs.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ecs.js +6 -2
- package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +15 -4
- package/dist/lib/resources/aws/compute/ecsSpot.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ecsSpot.js +17 -4
- package/dist/lib/resources/aws/compute/lambda.d.ts +12 -7
- package/dist/lib/resources/aws/compute/lambda.js +27 -19
- package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +15 -0
- package/dist/lib/resources/aws/database/databaseFreeTier.js +29 -0
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -0
- package/dist/lib/resources/aws/database/rdsAurora.js +36 -37
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -0
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -6
- package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +37 -0
- package/dist/lib/resources/aws/database/rdsFreeTier.js +84 -0
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +3 -0
- package/dist/lib/resources/aws/database/rdsInstance.js +117 -33
- package/dist/lib/resources/aws/networking/index.d.ts +0 -1
- package/dist/lib/resources/aws/networking/index.js +1 -2
- package/dist/lib/resources/aws/networking/vpc.d.ts +40 -21
- package/dist/lib/resources/aws/networking/vpc.js +185 -36
- package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
- package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
- package/dist/lib/resources/aws/utilities/customResource.d.ts +8 -6
- package/dist/lib/resources/aws/utilities/customResource.js +35 -11
- package/dist/lib/utils/getCidr.d.ts +8 -0
- package/dist/lib/utils/getCidr.js +40 -0
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/resourceNaming.d.ts +41 -0
- package/dist/lib/utils/resourceNaming.js +77 -0
- package/package.json +3 -3
package/dist/lib/app.d.ts
CHANGED
|
@@ -5,6 +5,37 @@ import { type Role } from "aws-cdk-lib/aws-iam";
|
|
|
5
5
|
import { AwsStack } from "./resources";
|
|
6
6
|
import { type Ecr } from "./resources/aws/storage/ecr";
|
|
7
7
|
import { type Database } from "./patterns/aws/database";
|
|
8
|
+
import { type INetworkProps, Network } from "./patterns/aws/network";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration options for App.getApp().
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Create app with new VPC
|
|
14
|
+
* const app = App.getApp(appName, {
|
|
15
|
+
* network: { maxAzs: 2, natGateways: false }
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Create app using existing VPC
|
|
20
|
+
* const app = App.getApp(appName, {
|
|
21
|
+
* network: { useExisting: "vpc-12345678" }
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Create app without network (S3-only apps)
|
|
26
|
+
* const app = App.getApp(appName, { network: false });
|
|
27
|
+
*/
|
|
28
|
+
export interface IAppOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Network configuration.
|
|
31
|
+
* - Object with INetworkProps: Create new VPC with config
|
|
32
|
+
* - false: No network (for S3-only apps)
|
|
33
|
+
* - { useExisting: string }: Use existing VPC by ID
|
|
34
|
+
*/
|
|
35
|
+
network?: INetworkProps | false | {
|
|
36
|
+
useExisting: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
8
39
|
/**
|
|
9
40
|
* The basic corner-stone of all Fjall-hosted applications.
|
|
10
41
|
* This class is a singleton and should be used to create and manage
|
|
@@ -14,25 +45,49 @@ export declare class App extends CdkApp {
|
|
|
14
45
|
private static instance;
|
|
15
46
|
private name;
|
|
16
47
|
private stacks;
|
|
17
|
-
private
|
|
48
|
+
private vpc?;
|
|
49
|
+
private additionalVpcs;
|
|
18
50
|
private defaultEcr;
|
|
19
51
|
private defaultMonitoringRole;
|
|
20
|
-
private
|
|
52
|
+
private networkDisabled;
|
|
21
53
|
private globalTags;
|
|
22
54
|
private aspectApplied;
|
|
23
55
|
private constructor();
|
|
24
56
|
/**
|
|
25
|
-
*
|
|
57
|
+
* Initialise the network (VPC) for this application.
|
|
58
|
+
*/
|
|
59
|
+
private initialiseNetwork;
|
|
60
|
+
/**
|
|
61
|
+
* Get/Create a basic Fjall Application with standard tags applied.
|
|
62
|
+
*
|
|
26
63
|
* @param name Application name
|
|
64
|
+
* @param options Configuration options including network settings
|
|
27
65
|
* @returns {App}
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* // Create app with new VPC
|
|
69
|
+
* const app = App.getApp(appName, {
|
|
70
|
+
* network: { maxAzs: 2, natGateways: false }
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // Create app using existing VPC
|
|
75
|
+
* const app = App.getApp(appName, {
|
|
76
|
+
* network: { useExisting: "vpc-12345678" }
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* // Create app without network (S3-only apps)
|
|
81
|
+
* const app = App.getApp(appName, { network: false });
|
|
28
82
|
*/
|
|
29
|
-
static getApp(name?: string): App;
|
|
83
|
+
static getApp(name?: string, options?: IAppOptions): App;
|
|
30
84
|
/**
|
|
31
85
|
* Get/Create the singleton instance of the App
|
|
32
|
-
* @param name
|
|
86
|
+
* @param name Application name
|
|
87
|
+
* @param options Configuration options including network settings
|
|
33
88
|
* @returns {App}
|
|
34
89
|
*/
|
|
35
|
-
static getInstance(name?: string): App;
|
|
90
|
+
static getInstance(name?: string, options?: IAppOptions): App;
|
|
36
91
|
/**
|
|
37
92
|
* Retrieve a stack by key. If the stack does not exist, it will be created.
|
|
38
93
|
* Dependencies are only applied the first time a stack is created.
|
|
@@ -44,6 +99,10 @@ export declare class App extends CdkApp {
|
|
|
44
99
|
getStack(key: string, dependencies?: AwsStack | AwsStack[]): AwsStack;
|
|
45
100
|
/**
|
|
46
101
|
* Retrieve default compute stack - named as `${this.name}Compute`
|
|
102
|
+
*
|
|
103
|
+
* Only depends on Network. Database dependency is added automatically
|
|
104
|
+
* by CDK when compute resources reference database resources.
|
|
105
|
+
*
|
|
47
106
|
* @returns {AwsStack}
|
|
48
107
|
*/
|
|
49
108
|
getDefaultComputeStack(): AwsStack;
|
|
@@ -63,15 +122,22 @@ export declare class App extends CdkApp {
|
|
|
63
122
|
*/
|
|
64
123
|
getDefaultStorageStack(): AwsStack;
|
|
65
124
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
125
|
+
* Get a VPC by name. If no name is provided, returns the default VPC.
|
|
126
|
+
*
|
|
127
|
+
* This is a pure getter - it never creates infrastructure.
|
|
128
|
+
* Network must be configured via App.getApp() options or app.addNetwork().
|
|
129
|
+
*
|
|
130
|
+
* @param name - Optional name of the VPC to retrieve. If not provided, returns the default VPC.
|
|
131
|
+
* @returns {IVpc} The configured VPC
|
|
132
|
+
* @throws {Error} If network is disabled, not configured, or named VPC not found
|
|
68
133
|
*/
|
|
69
|
-
|
|
134
|
+
getVpc(name?: string): IVpc;
|
|
70
135
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
136
|
+
* Get the names of all available VPCs.
|
|
137
|
+
*
|
|
138
|
+
* @returns {string[]} Array of VPC names. Includes "default" if the default VPC is configured.
|
|
73
139
|
*/
|
|
74
|
-
|
|
140
|
+
getVpcNames(): string[];
|
|
75
141
|
/**
|
|
76
142
|
* Retreive the default application container registry. If the registry does not exist
|
|
77
143
|
* it will be created.
|
|
@@ -102,6 +168,21 @@ export declare class App extends CdkApp {
|
|
|
102
168
|
* Add a storage resource (S3) to the default storage stack using the factory pattern.
|
|
103
169
|
*/
|
|
104
170
|
addStorage(fn: (app: App, scope: Construct) => Construct): any;
|
|
171
|
+
/**
|
|
172
|
+
* Add an additional network (VPC) to the application.
|
|
173
|
+
*
|
|
174
|
+
* Use this to create additional VPCs beyond the default VPC configured via App.getApp().
|
|
175
|
+
* Additional VPCs can be retrieved by name using app.getVpc(name).
|
|
176
|
+
*
|
|
177
|
+
* @param fn - Factory function that creates the Network construct
|
|
178
|
+
* @returns {Network} The created Network construct
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* const isolatedVpc = app.addNetwork(
|
|
182
|
+
* NetworkFactory.build("IsolatedVpc", { maxAzs: 2, natGateways: false })
|
|
183
|
+
* );
|
|
184
|
+
*/
|
|
185
|
+
addNetwork(fn: (app: App, scope: Construct) => Network): Network;
|
|
105
186
|
/**
|
|
106
187
|
* Manually add a resource to the default database stack.
|
|
107
188
|
*/
|
package/dist/lib/app.js
CHANGED
|
@@ -5,6 +5,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
5
5
|
const vpc_1 = require("./resources/aws/networking/vpc");
|
|
6
6
|
const resources_1 = require("./resources");
|
|
7
7
|
const ecr_1 = require("./resources/aws/storage/ecr");
|
|
8
|
+
const network_1 = require("./patterns/aws/network");
|
|
8
9
|
const standardTagsAspect_1 = require("./utils/standardTagsAspect");
|
|
9
10
|
const getConfig_1 = require("./utils/getConfig");
|
|
10
11
|
const monitoringRole_1 = require("./resources/aws/monitoring/monitoringRole");
|
|
@@ -15,36 +16,81 @@ const monitoring_1 = require("./config/monitoring");
|
|
|
15
16
|
* all resources in a Fjall application.
|
|
16
17
|
*/
|
|
17
18
|
class App extends aws_cdk_lib_1.App {
|
|
18
|
-
constructor(name) {
|
|
19
|
+
constructor(name, options) {
|
|
19
20
|
super();
|
|
20
21
|
this.stacks = {};
|
|
22
|
+
this.additionalVpcs = new Map();
|
|
23
|
+
this.networkDisabled = false;
|
|
21
24
|
this.globalTags = {};
|
|
22
25
|
this.aspectApplied = false;
|
|
26
|
+
App.instance = this;
|
|
23
27
|
if (name)
|
|
24
28
|
this.name = name;
|
|
25
29
|
else
|
|
26
30
|
this.name = "FjallApp";
|
|
31
|
+
this.initializeStandardTags();
|
|
32
|
+
// Initialise network immediately if configured
|
|
33
|
+
if (options?.network === false) {
|
|
34
|
+
this.networkDisabled = true;
|
|
35
|
+
}
|
|
36
|
+
else if (options?.network) {
|
|
37
|
+
this.initialiseNetwork(options.network);
|
|
38
|
+
}
|
|
27
39
|
}
|
|
28
40
|
/**
|
|
29
|
-
*
|
|
41
|
+
* Initialise the network (VPC) for this application.
|
|
42
|
+
*/
|
|
43
|
+
initialiseNetwork(config) {
|
|
44
|
+
const networkStack = this.getDefaultNetworkStack();
|
|
45
|
+
if ("useExisting" in config) {
|
|
46
|
+
this.vpc = vpc_1.Vpc.fromLookup(networkStack.getStack(), `${this.name}ImportedVpc`, {
|
|
47
|
+
vpcId: config.useExisting
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const network = network_1.NetworkFactory.build(`${this.name}Vpc`, config)(this, networkStack.getStack());
|
|
52
|
+
this.vpc = network.getVpc();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get/Create a basic Fjall Application with standard tags applied.
|
|
57
|
+
*
|
|
30
58
|
* @param name Application name
|
|
59
|
+
* @param options Configuration options including network settings
|
|
31
60
|
* @returns {App}
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* // Create app with new VPC
|
|
64
|
+
* const app = App.getApp(appName, {
|
|
65
|
+
* network: { maxAzs: 2, natGateways: false }
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* // Create app using existing VPC
|
|
70
|
+
* const app = App.getApp(appName, {
|
|
71
|
+
* network: { useExisting: "vpc-12345678" }
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* // Create app without network (S3-only apps)
|
|
76
|
+
* const app = App.getApp(appName, { network: false });
|
|
32
77
|
*/
|
|
33
|
-
static getApp(name) {
|
|
34
|
-
const app = App.getInstance(name);
|
|
78
|
+
static getApp(name, options) {
|
|
79
|
+
const app = App.getInstance(name, options);
|
|
35
80
|
app.initializeStandardTags();
|
|
36
81
|
return app;
|
|
37
82
|
}
|
|
38
83
|
/**
|
|
39
84
|
* Get/Create the singleton instance of the App
|
|
40
|
-
* @param name
|
|
85
|
+
* @param name Application name
|
|
86
|
+
* @param options Configuration options including network settings
|
|
41
87
|
* @returns {App}
|
|
42
88
|
*/
|
|
43
|
-
static getInstance(name) {
|
|
89
|
+
static getInstance(name, options) {
|
|
44
90
|
// Despite supporting multiple stacks you can still only ever
|
|
45
91
|
// have a single Application per CDK deployment
|
|
46
92
|
if (!App.instance) {
|
|
47
|
-
App.instance = new App(name);
|
|
93
|
+
App.instance = new App(name, options);
|
|
48
94
|
}
|
|
49
95
|
return App.instance;
|
|
50
96
|
}
|
|
@@ -70,13 +116,14 @@ class App extends aws_cdk_lib_1.App {
|
|
|
70
116
|
}
|
|
71
117
|
/**
|
|
72
118
|
* Retrieve default compute stack - named as `${this.name}Compute`
|
|
119
|
+
*
|
|
120
|
+
* Only depends on Network. Database dependency is added automatically
|
|
121
|
+
* by CDK when compute resources reference database resources.
|
|
122
|
+
*
|
|
73
123
|
* @returns {AwsStack}
|
|
74
124
|
*/
|
|
75
125
|
getDefaultComputeStack() {
|
|
76
|
-
return this.getStack(`${this.name}Compute`,
|
|
77
|
-
this.getDefaultNetworkStack(),
|
|
78
|
-
this.getDefaultDatabaseStack()
|
|
79
|
-
]);
|
|
126
|
+
return this.getStack(`${this.name}Compute`, this.getDefaultNetworkStack());
|
|
80
127
|
}
|
|
81
128
|
/**
|
|
82
129
|
* Retrieve default network stack - named as `${this.name}Network`
|
|
@@ -100,49 +147,48 @@ class App extends aws_cdk_lib_1.App {
|
|
|
100
147
|
return this.getStack(`${this.name}Storage`, this.getDefaultNetworkStack());
|
|
101
148
|
}
|
|
102
149
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
150
|
+
* Get a VPC by name. If no name is provided, returns the default VPC.
|
|
151
|
+
*
|
|
152
|
+
* This is a pure getter - it never creates infrastructure.
|
|
153
|
+
* Network must be configured via App.getApp() options or app.addNetwork().
|
|
154
|
+
*
|
|
155
|
+
* @param name - Optional name of the VPC to retrieve. If not provided, returns the default VPC.
|
|
156
|
+
* @returns {IVpc} The configured VPC
|
|
157
|
+
* @throws {Error} If network is disabled, not configured, or named VPC not found
|
|
105
158
|
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// use it to import the corresponding IPAM pool so CIDRs are allocated
|
|
117
|
-
// from a central pool instead of using the default 10.0.0.0/16 block.
|
|
118
|
-
const accountId = this.node.tryGetContext("accountId") ||
|
|
119
|
-
process.env.CDK_DEFAULT_ACCOUNT;
|
|
120
|
-
const region = process.env.CDK_DEFAULT_REGION;
|
|
121
|
-
const isManagedAccount = this.node.tryGetContext("managedAccount") === "true";
|
|
122
|
-
let ipv4IpamPoolId;
|
|
123
|
-
if (isManagedAccount && accountId && region) {
|
|
124
|
-
// Include region suffix for region-specific IPAM pool exports
|
|
125
|
-
const regionSuffix = region.replace(/-/g, "");
|
|
126
|
-
ipv4IpamPoolId = aws_cdk_lib_1.Fn.importValue(`IpamPoolId${accountId}${regionSuffix}`);
|
|
127
|
-
}
|
|
128
|
-
this.defaultVpc = vpc_1.VpcFactory.build(`${this.name}DefaultVpc`, {
|
|
129
|
-
accountId,
|
|
130
|
-
region,
|
|
131
|
-
ipv4IpamPoolId
|
|
132
|
-
})(this, networkStack.getStack());
|
|
159
|
+
getVpc(name) {
|
|
160
|
+
if (this.networkDisabled) {
|
|
161
|
+
throw new Error("Network is disabled for this app. Cannot get VPC. " +
|
|
162
|
+
"Pass network config to App.getApp() to enable networking.");
|
|
163
|
+
}
|
|
164
|
+
// If name is provided, look in additional VPCs first
|
|
165
|
+
if (name) {
|
|
166
|
+
const additionalVpc = this.additionalVpcs.get(name);
|
|
167
|
+
if (additionalVpc) {
|
|
168
|
+
return additionalVpc;
|
|
133
169
|
}
|
|
170
|
+
throw new Error(`VPC '${name}' not found. Available VPCs: ${this.getVpcNames().join(", ")}. ` +
|
|
171
|
+
"Create additional VPCs using app.addNetwork(NetworkFactory.build(...)).");
|
|
134
172
|
}
|
|
135
|
-
|
|
173
|
+
// Return default VPC
|
|
174
|
+
if (!this.vpc) {
|
|
175
|
+
throw new Error("Network not configured. Pass network config to App.getApp(). " +
|
|
176
|
+
"Example: App.getApp(appName, { network: { maxAzs: 2 } })");
|
|
177
|
+
}
|
|
178
|
+
return this.vpc;
|
|
136
179
|
}
|
|
137
180
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
181
|
+
* Get the names of all available VPCs.
|
|
182
|
+
*
|
|
183
|
+
* @returns {string[]} Array of VPC names. Includes "default" if the default VPC is configured.
|
|
140
184
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
185
|
+
getVpcNames() {
|
|
186
|
+
const names = [];
|
|
187
|
+
if (this.vpc) {
|
|
188
|
+
names.push("default");
|
|
144
189
|
}
|
|
145
|
-
this.
|
|
190
|
+
names.push(...this.additionalVpcs.keys());
|
|
191
|
+
return names;
|
|
146
192
|
}
|
|
147
193
|
/**
|
|
148
194
|
* Retreive the default application container registry. If the registry does not exist
|
|
@@ -214,6 +260,29 @@ class App extends aws_cdk_lib_1.App {
|
|
|
214
260
|
storageStack.addConstruct(storageConstruct);
|
|
215
261
|
return storageConstruct;
|
|
216
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* Add an additional network (VPC) to the application.
|
|
265
|
+
*
|
|
266
|
+
* Use this to create additional VPCs beyond the default VPC configured via App.getApp().
|
|
267
|
+
* Additional VPCs can be retrieved by name using app.getVpc(name).
|
|
268
|
+
*
|
|
269
|
+
* @param fn - Factory function that creates the Network construct
|
|
270
|
+
* @returns {Network} The created Network construct
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* const isolatedVpc = app.addNetwork(
|
|
274
|
+
* NetworkFactory.build("IsolatedVpc", { maxAzs: 2, natGateways: false })
|
|
275
|
+
* );
|
|
276
|
+
*/
|
|
277
|
+
addNetwork(fn) {
|
|
278
|
+
const networkStack = this.getDefaultNetworkStack();
|
|
279
|
+
const network = fn(this, networkStack.getStack());
|
|
280
|
+
const vpcName = network.node.id;
|
|
281
|
+
// Store in additional VPCs map for retrieval via getVpc(name)
|
|
282
|
+
this.additionalVpcs.set(vpcName, network.getVpc());
|
|
283
|
+
networkStack.addConstruct(network);
|
|
284
|
+
return network;
|
|
285
|
+
}
|
|
217
286
|
/**
|
|
218
287
|
* Manually add a resource to the default database stack.
|
|
219
288
|
*/
|
|
@@ -270,4 +339,4 @@ class App extends aws_cdk_lib_1.App {
|
|
|
270
339
|
exports.App = App;
|
|
271
340
|
App.instance = null;
|
|
272
341
|
exports.default = App;
|
|
273
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFFekQsd0RBQWlFO0FBSWpFLDJDQUF1QztBQUN2QyxxREFBbUU7QUFHbkUsbUVBQWdFO0FBQ2hFLGlEQUE4QztBQUM5Qyw4RUFBOEU7QUFDOUUsb0RBQThEO0FBRTlEOzs7O0dBSUc7QUFDSCxNQUFhLEdBQUksU0FBUSxpQkFBTTtJQWE3QixZQUFvQixJQUFhO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBVkYsV0FBTSxHQUFnQyxFQUFFLENBQUM7UUFNekMsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFhO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDN0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBYTtRQUNyQyw2REFBNkQ7UUFDN0QsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksUUFBUSxDQUFDLEdBQVcsRUFBRSxZQUFvQztRQUMvRCx3REFB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Q25FLHVGQUF1RjtZQUN2RixxQkFBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxJQUErQjtRQUM1Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLElBQUksQ0FBQyxVQUFVO1lBQ2xCLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBMVRILGtCQTJUQztBQTFUZ0IsWUFBUSxHQUFlLElBQUksQUFBbkIsQ0FBb0I7QUE0VDdDLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCBhcyBDZGtBcHAsIEZuLCBBc3BlY3RzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMsIFZwY0ZhY3RvcnkgfSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG5pbXBvcnQgeyB0eXBlIElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgdHlwZSBSb2xlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFiYXNlIH0gZnJvbSBcIi4vcGF0dGVybnMvYXdzL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBTdGFuZGFyZFRhZ3NBc3BlY3QgfSBmcm9tIFwiLi91dGlscy9zdGFuZGFyZFRhZ3NBc3BlY3RcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuL3V0aWxzL2dldENvbmZpZ1wiO1xuaW1wb3J0IE1vbml0b3JpbmdSb2xlRmFjdG9yeSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL21vbml0b3JpbmcvbW9uaXRvcmluZ1JvbGVcIjtcbmltcG9ydCB7IEZKQUxMX01PTklUT1JJTkdfQ09ORklHIH0gZnJvbSBcIi4vY29uZmlnL21vbml0b3JpbmdcIjtcblxuLyoqXG4gKiBUaGUgYmFzaWMgY29ybmVyLXN0b25lIG9mIGFsbCBGamFsbC1ob3N0ZWQgYXBwbGljYXRpb25zLlxuICogIFRoaXMgY2xhc3MgaXMgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbWFuYWdlXG4gKiAgIGFsbCByZXNvdXJjZXMgaW4gYSBGamFsbCBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcCBleHRlbmRzIENka0FwcCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBBcHAgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBzdGFja3M6IHsgW2tleTogc3RyaW5nXTogQXdzU3RhY2sgfSA9IHt9O1xuXG4gIHByaXZhdGUgZGVmYXVsdFZwYzogSVZwYztcbiAgcHJpdmF0ZSBkZWZhdWx0RWNyOiBFY3I7XG4gIHByaXZhdGUgZGVmYXVsdE1vbml0b3JpbmdSb2xlOiBSb2xlO1xuICBwcml2YXRlIGV4aXN0aW5nVnBjSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSBhIGJhc2ljIEZqYWxsIEFwcGxpY2F0aW9uIHdpdGggc3RhbmRhcmQgdGFncyBhcHBsaWVkXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QXBwKG5hbWU/OiBzdHJpbmcpOiBBcHAge1xuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZShuYW1lKTtcbiAgICBhcHAuaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZyk6IEFwcCB7XG4gICAgLy8gRGVzcGl0ZSBzdXBwb3J0aW5nIG11bHRpcGxlIHN0YWNrcyB5b3UgY2FuIHN0aWxsIG9ubHkgZXZlclxuICAgIC8vIGhhdmUgYSBzaW5nbGUgQXBwbGljYXRpb24gcGVyIENESyBkZXBsb3ltZW50XG4gICAgaWYgKCFBcHAuaW5zdGFuY2UpIHtcbiAgICAgIEFwcC5pbnN0YW5jZSA9IG5ldyBBcHAobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHN0YWNrIGJ5IGtleS4gSWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqICBEZXBlbmRlbmNpZXMgYXJlIG9ubHkgYXBwbGllZCB0aGUgZmlyc3QgdGltZSBhIHN0YWNrIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzdGFja1xuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIHN0YWNrKHMpIHRoYXQgdGhpcyBzdGFjayBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXRTdGFjayhrZXk6IHN0cmluZywgZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdKTogQXdzU3RhY2sge1xuICAgIC8vIEFwcGx5IHRoZSBhc3BlY3Qgb25jZSBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHN0YWNrXG4gICAgaWYgKFxuICAgICAgIXRoaXMuYXNwZWN0QXBwbGllZCAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5zdGFja3MpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmFwcGx5VGFnc0FzcGVjdCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFja3Nba2V5XSkge1xuICAgICAgdGhpcy5zdGFja3Nba2V5XSA9IG5ldyBBd3NTdGFjayhrZXksIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfUNvbXB1dGVgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9Q29tcHV0ZWAsIFtcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpLFxuICAgICAgdGhpcy5nZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBuZXR3b3JrIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfU5ldHdvcmtgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0TmV0d29ya1N0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9TmV0d29ya2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9RGF0YWJhc2VgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfURhdGFiYXNlYCwgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1TdG9yYWdlYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCB2cGMuIElmIHRoZSBWUEMgZG9lcyBub3QgZXhpc3QgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyB7VnBjfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRWcGMoKTogSVZwYyB7XG4gICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG5cbiAgICBpZiAoIXRoaXMuZGVmYXVsdFZwYykge1xuICAgICAgLy8gVXNlIGFuIGV4aXN0aW5nIGltcG9ydGVkIFZQQyBpZiBvbmUgd2FzIHN1cHBsaWVkXG4gICAgICBpZiAodGhpcy5leGlzdGluZ1ZwY0lkKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZwYyA9IFZwYy5mcm9tTG9va3VwKFxuICAgICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpLFxuICAgICAgICAgIGAke3RoaXMubmFtZX1JbXBvcnRlZFZwY2AsXG4gICAgICAgICAgeyB2cGNJZDogdGhpcy5leGlzdGluZ1ZwY0lkIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gYXV0b21hdGljYWxseSBkZXJpdmUgdGhlIGFjY291bnQgYW5kIHJlZ2lvbiBmcm9tIHRoZVxuICAgICAgICAvLyBlbnZpcm9ubWVudCB0aGUgQ0RLIGlzIHJ1bm5pbmcgaW4uIFdoZW4gYW4gYWNjb3VudCBJRCBpcyBhdmFpbGFibGUsXG4gICAgICAgIC8vIHVzZSBpdCB0byBpbXBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgSVBBTSBwb29sIHNvIENJRFJzIGFyZSBhbGxvY2F0ZWRcbiAgICAgICAgLy8gZnJvbSBhIGNlbnRyYWwgcG9vbCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDEwLjAuMC4wLzE2IGJsb2NrLlxuXG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9XG4gICAgICAgICAgdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIikgfHxcbiAgICAgICAgICBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UO1xuICAgICAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgICAgIGNvbnN0IGlzTWFuYWdlZEFjY291bnQgPVxuICAgICAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlZEFjY291bnRcIikgPT09IFwidHJ1ZVwiO1xuXG4gICAgICAgIGxldCBpcHY0SXBhbVBvb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXNNYW5hZ2VkQWNjb3VudCAmJiBhY2NvdW50SWQgJiYgcmVnaW9uKSB7XG4gICAgICAgICAgLy8gSW5jbHVkZSByZWdpb24gc3VmZml4IGZvciByZWdpb24tc3BlY2lmaWMgSVBBTSBwb29sIGV4cG9ydHNcbiAgICAgICAgICBjb25zdCByZWdpb25TdWZmaXggPSByZWdpb24ucmVwbGFjZSgvLS9nLCBcIlwiKTtcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZCA9IEZuLmltcG9ydFZhbHVlKFxuICAgICAgICAgICAgYElwYW1Qb29sSWQke2FjY291bnRJZH0ke3JlZ2lvblN1ZmZpeH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVmYXVsdFZwYyA9IFZwY0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfURlZmF1bHRWcGNgLCB7XG4gICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZFxuICAgICAgICB9KSh0aGlzLCBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZwYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXVzZSBhbiBleGlzdGluZyBWUEMuXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgVnBjIG9iamVjdCBvciBhIHBsYWluIFZQQyBJRCBzdHJpbmcgZm9yIGNvbnZlbmllbmNlLlxuICAgKi9cbiAgcHVibGljIHVzZUV4aXN0aW5nVnBjKHZwY0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VnBjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidXNlRXhpc3RpbmdWcGMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkZWZhdWx0IFZQQyBoYXMgYmVlbiBjcmVhdGVkXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5leGlzdGluZ1ZwY0lkID0gdnBjSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmVpdmUgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gY29udGFpbmVyIHJlZ2lzdHJ5LiBJZiB0aGUgcmVnaXN0cnkgZG9lcyBub3QgZXhpc3RcbiAgICogIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKTogRWNyIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEVjcikge1xuICAgICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG5cbiAgICAgIHRoaXMuZGVmYXVsdEVjciA9IEVjckZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfUVjcmApKFxuICAgICAgICB0aGlzLFxuICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0RWNyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyb3NzLWFjY291bnQgbW9uaXRvcmluZyByb2xlIGluIHRoZSBOZXR3b3JrIHN0YWNrIHRoYXQgYWxsb3dzXG4gICAqIHRoZSBGamFsbCB3ZWJhcHAgdG8gcXVlcnkgQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCBFQ1Mgc3RhdHVzLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViYXBwQWNjb3VudElkIC0gT3B0aW9uYWwgQVdTIGFjY291bnQgSUQgb2YgdGhlIEZqYWxsIHdlYmFwcC4gRGVmYXVsdHMgdG8gY29uZmlndXJlZCBwbGF0Zm9ybSBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7Um9sZX0gVGhlIGNyZWF0ZWQgbW9uaXRvcmluZyByb2xlXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlTW9uaXRvcmluZ1JvbGUod2ViYXBwQWNjb3VudElkPzogc3RyaW5nKTogUm9sZSB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSkge1xuICAgICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPVxuICAgICAgICB3ZWJhcHBBY2NvdW50SWQgfHwgRkpBTExfTU9OSVRPUklOR19DT05GSUcud2ViYXBwQXdzQWNjb3VudElkO1xuXG4gICAgICB0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSA9IE1vbml0b3JpbmdSb2xlRmFjdG9yeS5idWlsZChcbiAgICAgICAgYCR7dGhpcy5uYW1lfU1vbml0b3JpbmdSb2xlYCxcbiAgICAgICAge1xuICAgICAgICAgIHdlYmFwcEFjY291bnRJZDogYWNjb3VudElkLFxuICAgICAgICAgIGFwcE5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICByb2xlTmFtZVByZWZpeDogRkpBTExfTU9OSVRPUklOR19DT05GSUcucm9sZU5hbWVQcmVmaXgsXG4gICAgICAgICAgcm9sZVBhdGg6IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLnJvbGVQYXRoXG4gICAgICAgIH1cbiAgICAgICkodGhpcywgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuXG4gICAgICAvLyBSZWdpc3RlciB0aGUgcm9sZSB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrXG4gICAgICBuZXR3b3JrU3RhY2suYWRkQ29uc3RydWN0KHRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY29tcHV0ZSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqIEF1dG9tYXRpY2FsbHkgY3JlYXRlcyBtb25pdG9yaW5nIHJvbGUgaWYgbm90IGFscmVhZHkgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIEF1dG8tY3JlYXRlIG1vbml0b3Jpbmcgcm9sZSB3aGVuIGNvbXB1dGUgaXMgYWRkZWRcbiAgICBpZiAoIXRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlKSB7XG4gICAgICB0aGlzLmNyZWF0ZU1vbml0b3JpbmdSb2xlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChmbih0aGlzLCBjb21wdXRlU3RhY2suZ2V0U3RhY2soKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wdXRlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRDb21wdXRlU3RhY2soKTtcbiAgICBjb21wdXRlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkYXRhYmFzZSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBkYXRhYmFzZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZERhdGFiYXNlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IERhdGFiYXNlIHtcbiAgICBjb25zdCBkYXRhYmFzZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpO1xuICAgIGNvbnN0IGRhdGFiYXNlQ29uc3RydWN0ID0gZm4odGhpcywgZGF0YWJhc2VTdGFjay5nZXRTdGFjaygpKTtcbiAgICBkYXRhYmFzZVN0YWNrLmFkZENvbnN0cnVjdChkYXRhYmFzZUNvbnN0cnVjdCk7XG5cbiAgICByZXR1cm4gZGF0YWJhc2VDb25zdHJ1Y3QgYXMgdW5rbm93biBhcyBEYXRhYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzdG9yYWdlIHJlc291cmNlIChTMykgdG8gdGhlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2UoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogYW55IHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBjb25zdCBzdG9yYWdlQ29uc3RydWN0ID0gZm4odGhpcywgc3RvcmFnZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIHN0b3JhZ2VTdGFjay5hZGRDb25zdHJ1Y3Qoc3RvcmFnZUNvbnN0cnVjdCk7XG5cbiAgICByZXR1cm4gc3RvcmFnZUNvbnN0cnVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBkYXRhYmFzZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRhYmFzZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhYmFzZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpO1xuICAgIGRhdGFiYXNlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2VSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgc3RvcmFnZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzdGFuZGFyZCB0YWdzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVTdGFuZGFyZFRhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBjb25maWcuZW52aXJvbm1lbnQsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgdGFncyBhcyBhIHNpbmdsZSBhc3BlY3RcbiAgICovXG4gIHByaXZhdGUgYXBwbHlUYWdzQXNwZWN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hc3BlY3RBcHBsaWVkICYmIE9iamVjdC5rZXlzKHRoaXMuZ2xvYmFsVGFncykubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQXBwbHkgT05FIGFzcGVjdCB3aXRoIGFsbCB0YWdzIHVzaW5nIHRoZSBDREsgdjIuMjA2LjArIGNvbXBhdGlibGUgU3RhbmRhcmRUYWdzQXNwZWN0XG4gICAgICBBc3BlY3RzLm9mKHRoaXMpLmFkZChuZXcgU3RhbmRhcmRUYWdzQXNwZWN0KHRoaXMuZ2xvYmFsVGFncykpO1xuICAgICAgdGhpcy5hc3BlY3RBcHBsaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGN1c3RvbSB0YWdzIHRvIGFsbCByZXNvdXJjZXMgaW4gdGhlIGFwcFxuICAgKiBAcGFyYW0gdGFncyBDdXN0b20gdGFncyB0byBhcHBseSB0byBhbGwgcmVzb3VyY2VzXG4gICAqIEBleGFtcGxlXG4gICAqIGFwcC5hZGRUYWdzKHtcbiAgICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IFwicGxhdGZvcm0tdGVhbVwiLFxuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246Y29zdC1jZW50ZXJcIjogXCJDQy0xMjNcIixcbiAgICogICBcInRlYW06c2xhY2stY2hhbm5lbFwiOiBcIiNwbGF0Zm9ybS1hbGVydHNcIlxuICAgKiB9KTtcbiAgICovXG4gIHB1YmxpYyBhZGRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBBcHAge1xuICAgIC8vIE1lcmdlIHRhZ3MgYnV0IGRvbid0IGFwcGx5IGFzcGVjdCB5ZXRcbiAgICB0aGlzLmdsb2JhbFRhZ3MgPSB7XG4gICAgICAuLi50aGlzLmdsb2JhbFRhZ3MsXG4gICAgICAuLi50YWdzXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iXX0=
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBcUQ7QUFFckQsd0RBQXFEO0FBR3JELDJDQUF1QztBQUN2QyxxREFBbUU7QUFFbkUsb0RBSWdDO0FBQ2hDLG1FQUFnRTtBQUNoRSxpREFBOEM7QUFDOUMsOEVBQThFO0FBQzlFLG9EQUE4RDtBQStCOUQ7Ozs7R0FJRztBQUNILE1BQWEsR0FBSSxTQUFRLGlCQUFNO0lBYzdCLFlBQW9CLElBQWEsRUFBRSxPQUFxQjtRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQVhGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBR3pDLG1CQUFjLEdBQXNCLElBQUksR0FBRyxFQUFFLENBQUM7UUFHOUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBRTVCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLCtDQUErQztRQUMvQyxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUN2QixNQUErQztRQUUvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVB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a0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxJQUErQjtRQUM1Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLElBQUksQ0FBQyxVQUFVO1lBQ2xCLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBcllILGtCQXNZQztBQXJZZ0IsWUFBUSxHQUFlLElBQUksQUFBbkIsQ0FBb0I7QUF1WTdDLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCBhcyBDZGtBcHAsIEFzcGVjdHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IHR5cGUgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIFJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYmFzZSB9IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJTmV0d29ya1Byb3BzLFxuICBOZXR3b3JrRmFjdG9yeSxcbiAgTmV0d29ya1xufSBmcm9tIFwiLi9wYXR0ZXJucy9hd3MvbmV0d29ya1wiO1xuaW1wb3J0IHsgU3RhbmRhcmRUYWdzQXNwZWN0IH0gZnJvbSBcIi4vdXRpbHMvc3RhbmRhcmRUYWdzQXNwZWN0XCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi91dGlscy9nZXRDb25maWdcIjtcbmltcG9ydCBNb25pdG9yaW5nUm9sZUZhY3RvcnkgZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9tb25pdG9yaW5nL21vbml0b3JpbmdSb2xlXCI7XG5pbXBvcnQgeyBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRyB9IGZyb20gXCIuL2NvbmZpZy9tb25pdG9yaW5nXCI7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBcHAuZ2V0QXBwKCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhcHAgd2l0aCBuZXcgVlBDXG4gKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHtcbiAqICAgbmV0d29yazogeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiBmYWxzZSB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFwcCB1c2luZyBleGlzdGluZyBWUENcbiAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICogICBuZXR3b3JrOiB7IHVzZUV4aXN0aW5nOiBcInZwYy0xMjM0NTY3OFwiIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYXBwIHdpdGhvdXQgbmV0d29yayAoUzMtb25seSBhcHBzKVxuICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7IG5ldHdvcms6IGZhbHNlIH0pO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIE5ldHdvcmsgY29uZmlndXJhdGlvbi5cbiAgICogLSBPYmplY3Qgd2l0aCBJTmV0d29ya1Byb3BzOiBDcmVhdGUgbmV3IFZQQyB3aXRoIGNvbmZpZ1xuICAgKiAtIGZhbHNlOiBObyBuZXR3b3JrIChmb3IgUzMtb25seSBhcHBzKVxuICAgKiAtIHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9OiBVc2UgZXhpc3RpbmcgVlBDIGJ5IElEXG4gICAqL1xuICBuZXR3b3JrPzogSU5ldHdvcmtQcm9wcyB8IGZhbHNlIHwgeyB1c2VFeGlzdGluZzogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIGJhc2ljIGNvcm5lci1zdG9uZSBvZiBhbGwgRmphbGwtaG9zdGVkIGFwcGxpY2F0aW9ucy5cbiAqICBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZVxuICogICBhbGwgcmVzb3VyY2VzIGluIGEgRmphbGwgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhY2tzOiB7IFtrZXk6IHN0cmluZ106IEF3c1N0YWNrIH0gPSB7fTtcblxuICBwcml2YXRlIHZwYz86IElWcGM7XG4gIHByaXZhdGUgYWRkaXRpb25hbFZwY3M6IE1hcDxzdHJpbmcsIElWcGM+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGRlZmF1bHRFY3I6IEVjcjtcbiAgcHJpdmF0ZSBkZWZhdWx0TW9uaXRvcmluZ1JvbGU6IFJvbGU7XG4gIHByaXZhdGUgbmV0d29ya0Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBJQXBwT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBBcHAuaW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG5cbiAgICB0aGlzLmluaXRpYWxpemVTdGFuZGFyZFRhZ3MoKTtcblxuICAgIC8vIEluaXRpYWxpc2UgbmV0d29yayBpbW1lZGlhdGVseSBpZiBjb25maWd1cmVkXG4gICAgaWYgKG9wdGlvbnM/Lm5ldHdvcmsgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm5ldHdvcmtEaXNhYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zPy5uZXR3b3JrKSB7XG4gICAgICB0aGlzLmluaXRpYWxpc2VOZXR3b3JrKG9wdGlvbnMubmV0d29yayk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgdGhlIG5ldHdvcmsgKFZQQykgZm9yIHRoaXMgYXBwbGljYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpc2VOZXR3b3JrKFxuICAgIGNvbmZpZzogSU5ldHdvcmtQcm9wcyB8IHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKFwidXNlRXhpc3RpbmdcIiBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAoXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpLFxuICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjSWQ6IGNvbmZpZy51c2VFeGlzdGluZ1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfVZwY2AsIGNvbmZpZykoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpXG4gICAgICApO1xuICAgICAgdGhpcy52cGMgPSBuZXR3b3JrLmdldFZwYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIGEgYmFzaWMgRmphbGwgQXBwbGljYXRpb24gd2l0aCBzdGFuZGFyZCB0YWdzIGFwcGxpZWQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZyBuZXR3b3JrIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtBcHB9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhcHAgd2l0aCBuZXcgVlBDXG4gICAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICAgKiAgIG5ldHdvcms6IHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogZmFsc2UgfVxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ3JlYXRlIGFwcCB1c2luZyBleGlzdGluZyBWUENcbiAgICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7XG4gICAqICAgbmV0d29yazogeyB1c2VFeGlzdGluZzogXCJ2cGMtMTIzNDU2NzhcIiB9XG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDcmVhdGUgYXBwIHdpdGhvdXQgbmV0d29yayAoUzMtb25seSBhcHBzKVxuICAgKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogZmFsc2UgfSk7XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEFwcChuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogSUFwcE9wdGlvbnMpOiBBcHAge1xuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZShuYW1lLCBvcHRpb25zKTtcbiAgICBhcHAuaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWUgQXBwbGljYXRpb24gbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgaW5jbHVkaW5nIG5ldHdvcmsgc2V0dGluZ3NcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZywgb3B0aW9ucz86IElBcHBPcHRpb25zKTogQXBwIHtcbiAgICAvLyBEZXNwaXRlIHN1cHBvcnRpbmcgbXVsdGlwbGUgc3RhY2tzIHlvdSBjYW4gc3RpbGwgb25seSBldmVyXG4gICAgLy8gaGF2ZSBhIHNpbmdsZSBBcHBsaWNhdGlvbiBwZXIgQ0RLIGRlcGxveW1lbnRcbiAgICBpZiAoIUFwcC5pbnN0YW5jZSkge1xuICAgICAgQXBwLmluc3RhbmNlID0gbmV3IEFwcChuYW1lLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc3RhY2sgYnkga2V5LiBJZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogIERlcGVuZGVuY2llcyBhcmUgb25seSBhcHBsaWVkIHRoZSBmaXJzdCB0aW1lIGEgc3RhY2sgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHN0YWNrXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgc3RhY2socykgdGhhdCB0aGlzIHN0YWNrIGRlcGVuZHMgb25cbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldFN0YWNrKGtleTogc3RyaW5nLCBkZXBlbmRlbmNpZXM/OiBBd3NTdGFjayB8IEF3c1N0YWNrW10pOiBBd3NTdGFjayB7XG4gICAgLy8gQXBwbHkgdGhlIGFzcGVjdCBvbmNlIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3Qgc3RhY2tcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hc3BlY3RBcHBsaWVkICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrcykubGVuZ3RoID09PSAwICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYXBwbHlUYWdzQXNwZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YWNrc1trZXldKSB7XG4gICAgICB0aGlzLnN0YWNrc1trZXldID0gbmV3IEF3c1N0YWNrKGtleSwgZGVwZW5kZW5jaWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFja3Nba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9Q29tcHV0ZWBcbiAgICpcbiAgICogT25seSBkZXBlbmRzIG9uIE5ldHdvcmsuIERhdGFiYXNlIGRlcGVuZGVuY3kgaXMgYWRkZWQgYXV0b21hdGljYWxseVxuICAgKiBieSBDREsgd2hlbiBjb21wdXRlIHJlc291cmNlcyByZWZlcmVuY2UgZGF0YWJhc2UgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfUNvbXB1dGVgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBuZXR3b3JrIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfU5ldHdvcmtgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0TmV0d29ya1N0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9TmV0d29ya2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9RGF0YWJhc2VgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfURhdGFiYXNlYCwgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1TdG9yYWdlYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgVlBDIGJ5IG5hbWUuIElmIG5vIG5hbWUgaXMgcHJvdmlkZWQsIHJldHVybnMgdGhlIGRlZmF1bHQgVlBDLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgcHVyZSBnZXR0ZXIgLSBpdCBuZXZlciBjcmVhdGVzIGluZnJhc3RydWN0dXJlLlxuICAgKiBOZXR3b3JrIG11c3QgYmUgY29uZmlndXJlZCB2aWEgQXBwLmdldEFwcCgpIG9wdGlvbnMgb3IgYXBwLmFkZE5ldHdvcmsoKS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBPcHRpb25hbCBuYW1lIG9mIHRoZSBWUEMgdG8gcmV0cmlldmUuIElmIG5vdCBwcm92aWRlZCwgcmV0dXJucyB0aGUgZGVmYXVsdCBWUEMuXG4gICAqIEByZXR1cm5zIHtJVnBjfSBUaGUgY29uZmlndXJlZCBWUENcbiAgICogQHRocm93cyB7RXJyb3J9IElmIG5ldHdvcmsgaXMgZGlzYWJsZWQsIG5vdCBjb25maWd1cmVkLCBvciBuYW1lZCBWUEMgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgZ2V0VnBjKG5hbWU/OiBzdHJpbmcpOiBJVnBjIHtcbiAgICBpZiAodGhpcy5uZXR3b3JrRGlzYWJsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOZXR3b3JrIGlzIGRpc2FibGVkIGZvciB0aGlzIGFwcC4gQ2Fubm90IGdldCBWUEMuIFwiICtcbiAgICAgICAgICBcIlBhc3MgbmV0d29yayBjb25maWcgdG8gQXBwLmdldEFwcCgpIHRvIGVuYWJsZSBuZXR3b3JraW5nLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIElmIG5hbWUgaXMgcHJvdmlkZWQsIGxvb2sgaW4gYWRkaXRpb25hbCBWUENzIGZpcnN0XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxWcGMgPSB0aGlzLmFkZGl0aW9uYWxWcGNzLmdldChuYW1lKTtcbiAgICAgIGlmIChhZGRpdGlvbmFsVnBjKSB7XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsVnBjO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVlBDICcke25hbWV9JyBub3QgZm91bmQuIEF2YWlsYWJsZSBWUENzOiAke3RoaXMuZ2V0VnBjTmFtZXMoKS5qb2luKFwiLCBcIil9LiBgICtcbiAgICAgICAgICBcIkNyZWF0ZSBhZGRpdGlvbmFsIFZQQ3MgdXNpbmcgYXBwLmFkZE5ldHdvcmsoTmV0d29ya0ZhY3RvcnkuYnVpbGQoLi4uKSkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGRlZmF1bHQgVlBDXG4gICAgaWYgKCF0aGlzLnZwYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk5ldHdvcmsgbm90IGNvbmZpZ3VyZWQuIFBhc3MgbmV0d29yayBjb25maWcgdG8gQXBwLmdldEFwcCgpLiBcIiArXG4gICAgICAgICAgXCJFeGFtcGxlOiBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogeyBtYXhBenM6IDIgfSB9KVwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52cGM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lcyBvZiBhbGwgYXZhaWxhYmxlIFZQQ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQXJyYXkgb2YgVlBDIG5hbWVzLiBJbmNsdWRlcyBcImRlZmF1bHRcIiBpZiB0aGUgZGVmYXVsdCBWUEMgaXMgY29uZmlndXJlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRWcGNOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMudnBjKSB7XG4gICAgICBuYW1lcy5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICB9XG4gICAgbmFtZXMucHVzaCguLi50aGlzLmFkZGl0aW9uYWxWcGNzLmtleXMoKSk7XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJlaXZlIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGNvbnRhaW5lciByZWdpc3RyeS4gSWYgdGhlIHJlZ2lzdHJ5IGRvZXMgbm90IGV4aXN0XG4gICAqICBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbnRhaW5lclJlZ2lzdHJ5KCk6IEVjciB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRFY3IpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgICB0aGlzLmRlZmF1bHRFY3IgPSBFY3JGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1FY3JgKShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbmV0d29ya1N0YWNrLmdldFN0YWNrKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVjcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcm9zcy1hY2NvdW50IG1vbml0b3Jpbmcgcm9sZSBpbiB0aGUgTmV0d29yayBzdGFjayB0aGF0IGFsbG93c1xuICAgKiB0aGUgRmphbGwgd2ViYXBwIHRvIHF1ZXJ5IENsb3VkV2F0Y2ggbWV0cmljcyBhbmQgRUNTIHN0YXR1cy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmFwcEFjY291bnRJZCAtIE9wdGlvbmFsIEFXUyBhY2NvdW50IElEIG9mIHRoZSBGamFsbCB3ZWJhcHAuIERlZmF1bHRzIHRvIGNvbmZpZ3VyZWQgcGxhdGZvcm0gYWNjb3VudC5cbiAgICogQHJldHVybnMge1JvbGV9IFRoZSBjcmVhdGVkIG1vbml0b3Jpbmcgcm9sZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZU1vbml0b3JpbmdSb2xlKHdlYmFwcEFjY291bnRJZD86IHN0cmluZyk6IFJvbGUge1xuICAgIGlmICghdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuICAgICAgY29uc3QgYWNjb3VudElkID1cbiAgICAgICAgd2ViYXBwQWNjb3VudElkIHx8IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLndlYmFwcEF3c0FjY291bnRJZDtcblxuICAgICAgdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUgPSBNb25pdG9yaW5nUm9sZUZhY3RvcnkuYnVpbGQoXG4gICAgICAgIGAke3RoaXMubmFtZX1Nb25pdG9yaW5nUm9sZWAsXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWJhcHBBY2NvdW50SWQ6IGFjY291bnRJZCxcbiAgICAgICAgICBhcHBOYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgcm9sZU5hbWVQcmVmaXg6IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLnJvbGVOYW1lUHJlZml4LFxuICAgICAgICAgIHJvbGVQYXRoOiBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRy5yb2xlUGF0aFxuICAgICAgICB9XG4gICAgICApKHRoaXMsIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpKTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHJvbGUgd2l0aCB0aGUgbmV0d29yayBzdGFja1xuICAgICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdCh0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbXB1dGUgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKiBBdXRvbWF0aWNhbGx5IGNyZWF0ZXMgbW9uaXRvcmluZyByb2xlIGlmIG5vdCBhbHJlYWR5IGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBBdXRvLWNyZWF0ZSBtb25pdG9yaW5nIHJvbGUgd2hlbiBjb21wdXRlIGlzIGFkZGVkXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSkge1xuICAgICAgdGhpcy5jcmVhdGVNb25pdG9yaW5nUm9sZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QoZm4odGhpcywgY29tcHV0ZVN0YWNrLmdldFN0YWNrKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBjb21wdXRlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZENvbXB1dGVSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGF0YWJhc2UgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRhYmFzZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiBEYXRhYmFzZSB7XG4gICAgY29uc3QgZGF0YWJhc2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdERhdGFiYXNlU3RhY2soKTtcbiAgICBjb25zdCBkYXRhYmFzZUNvbnN0cnVjdCA9IGZuKHRoaXMsIGRhdGFiYXNlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgZGF0YWJhc2VTdGFjay5hZGRDb25zdHJ1Y3QoZGF0YWJhc2VDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIGRhdGFiYXNlQ29uc3RydWN0IGFzIHVua25vd24gYXMgRGF0YWJhc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc3RvcmFnZSByZXNvdXJjZSAoUzMpIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGRTdG9yYWdlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgY29uc3Qgc3RvcmFnZUNvbnN0cnVjdCA9IGZuKHRoaXMsIHN0b3JhZ2VTdGFjay5nZXRTdGFjaygpKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHN0b3JhZ2VDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIHN0b3JhZ2VDb25zdHJ1Y3Q7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFkZGl0aW9uYWwgbmV0d29yayAoVlBDKSB0byB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIFZQQ3MgYmV5b25kIHRoZSBkZWZhdWx0IFZQQyBjb25maWd1cmVkIHZpYSBBcHAuZ2V0QXBwKCkuXG4gICAqIEFkZGl0aW9uYWwgVlBDcyBjYW4gYmUgcmV0cmlldmVkIGJ5IG5hbWUgdXNpbmcgYXBwLmdldFZwYyhuYW1lKS5cbiAgICpcbiAgICogQHBhcmFtIGZuIC0gRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIE5ldHdvcmsgY29uc3RydWN0XG4gICAqIEByZXR1cm5zIHtOZXR3b3JrfSBUaGUgY3JlYXRlZCBOZXR3b3JrIGNvbnN0cnVjdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpc29sYXRlZFZwYyA9IGFwcC5hZGROZXR3b3JrKFxuICAgKiAgIE5ldHdvcmtGYWN0b3J5LmJ1aWxkKFwiSXNvbGF0ZWRWcGNcIiwgeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiBmYWxzZSB9KVxuICAgKiApO1xuICAgKi9cbiAgcHVibGljIGFkZE5ldHdvcmsoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gTmV0d29yayk6IE5ldHdvcmsge1xuICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBmbih0aGlzLCBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgY29uc3QgdnBjTmFtZSA9IG5ldHdvcmsubm9kZS5pZDtcblxuICAgIC8vIFN0b3JlIGluIGFkZGl0aW9uYWwgVlBDcyBtYXAgZm9yIHJldHJpZXZhbCB2aWEgZ2V0VnBjKG5hbWUpXG4gICAgdGhpcy5hZGRpdGlvbmFsVnBjcy5zZXQodnBjTmFtZSwgbmV0d29yay5nZXRWcGMoKSk7XG4gICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdChuZXR3b3JrKTtcblxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZERhdGFiYXNlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFiYXNlU3RhY2sgPSB0aGlzLmdldERlZmF1bHREYXRhYmFzZVN0YWNrKCk7XG4gICAgZGF0YWJhc2VTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHN0YW5kYXJkIHRhZ3NcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICB0aGlzLmdsb2JhbFRhZ3MgPSB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IGNvbmZpZy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCB0YWdzIGFzIGEgc2luZ2xlIGFzcGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVRhZ3NBc3BlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFzcGVjdEFwcGxpZWQgJiYgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBcHBseSBPTkUgYXNwZWN0IHdpdGggYWxsIHRhZ3MgdXNpbmcgdGhlIENESyB2Mi4yMDYuMCsgY29tcGF0aWJsZSBTdGFuZGFyZFRhZ3NBc3BlY3RcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3QodGhpcy5nbG9iYWxUYWdzKSk7XG4gICAgICB0aGlzLmFzcGVjdEFwcGxpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIHRhZ3MgdG8gYWxsIHJlc291cmNlcyBpbiB0aGUgYXBwXG4gICAqIEBwYXJhbSB0YWdzIEN1c3RvbSB0YWdzIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXNcbiAgICogQGV4YW1wbGVcbiAgICogYXBwLmFkZFRhZ3Moe1xuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybS10ZWFtXCIsXG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpjb3N0LWNlbnRlclwiOiBcIkNDLTEyM1wiLFxuICAgKiAgIFwidGVhbTpzbGFjay1jaGFubmVsXCI6IFwiI3BsYXRmb3JtLWFsZXJ0c1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IEFwcCB7XG4gICAgLy8gTWVyZ2UgdGFncyBidXQgZG9uJ3QgYXBwbHkgYXNwZWN0IHlldFxuICAgIHRoaXMuZ2xvYmFsVGFncyA9IHtcbiAgICAgIC4uLnRoaXMuZ2xvYmFsVGFncyxcbiAgICAgIC4uLnRhZ3NcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { IAspect } from "aws-cdk-lib";
|
|
2
|
+
import { IConstruct } from "constructs";
|
|
3
|
+
/**
|
|
4
|
+
* Resource metadata extracted from CDK constructs
|
|
5
|
+
*/
|
|
6
|
+
export interface ResourceMetadata {
|
|
7
|
+
resource_type: string;
|
|
8
|
+
name: string;
|
|
9
|
+
stack_name: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Complete resource inventory for an application
|
|
13
|
+
*/
|
|
14
|
+
export interface ResourceInventory {
|
|
15
|
+
resources: ResourceMetadata[];
|
|
16
|
+
generated_at: string;
|
|
17
|
+
app_name: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Aspect to collect resource metadata during CDK synthesis.
|
|
21
|
+
* Visits all constructs in the tree and extracts metadata for AWS resources.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* const aspect = new ResourceInventoryAspect();
|
|
25
|
+
* Aspects.of(app).add(aspect);
|
|
26
|
+
* app.synth();
|
|
27
|
+
* const inventory = aspect.getInventory();
|
|
28
|
+
*/
|
|
29
|
+
export declare class ResourceInventoryAspect implements IAspect {
|
|
30
|
+
private resources;
|
|
31
|
+
private processedResources;
|
|
32
|
+
visit(node: IConstruct): void;
|
|
33
|
+
/**
|
|
34
|
+
* Extract metadata from a CloudFormation resource
|
|
35
|
+
*/
|
|
36
|
+
private extractMetadata;
|
|
37
|
+
/**
|
|
38
|
+
* Get collected resource inventory
|
|
39
|
+
*/
|
|
40
|
+
getInventory(): ResourceMetadata[];
|
|
41
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResourceInventoryAspect = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* Aspect to collect resource metadata during CDK synthesis.
|
|
7
|
+
* Visits all constructs in the tree and extracts metadata for AWS resources.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const aspect = new ResourceInventoryAspect();
|
|
11
|
+
* Aspects.of(app).add(aspect);
|
|
12
|
+
* app.synth();
|
|
13
|
+
* const inventory = aspect.getInventory();
|
|
14
|
+
*/
|
|
15
|
+
class ResourceInventoryAspect {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.resources = [];
|
|
18
|
+
this.processedResources = new WeakSet();
|
|
19
|
+
}
|
|
20
|
+
visit(node) {
|
|
21
|
+
// Skip if already processed
|
|
22
|
+
if (this.processedResources.has(node)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Only process L1 (CFN) resources
|
|
26
|
+
if (aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
|
|
27
|
+
const metadata = this.extractMetadata(node);
|
|
28
|
+
if (metadata) {
|
|
29
|
+
this.resources.push(metadata);
|
|
30
|
+
}
|
|
31
|
+
this.processedResources.add(node);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extract metadata from a CloudFormation resource
|
|
36
|
+
*/
|
|
37
|
+
extractMetadata(resource) {
|
|
38
|
+
const resourceType = resource.cfnResourceType;
|
|
39
|
+
const stack = aws_cdk_lib_1.Stack.of(resource);
|
|
40
|
+
const logicalId = stack.getLogicalId(resource);
|
|
41
|
+
const stackName = stack.stackName;
|
|
42
|
+
return {
|
|
43
|
+
resource_type: resourceType,
|
|
44
|
+
name: logicalId,
|
|
45
|
+
stack_name: stackName
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get collected resource inventory
|
|
50
|
+
*/
|
|
51
|
+
getInventory() {
|
|
52
|
+
return this.resources;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.ResourceInventoryAspect = ResourceInventoryAspect;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VJbnZlbnRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvYXNwZWN0cy9yZXNvdXJjZUludmVudG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFxQjFEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsdUJBQXVCO0lBQXBDO1FBQ1UsY0FBUyxHQUF1QixFQUFFLENBQUM7UUFDbkMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztJQXdDekQsQ0FBQztJQXRDQyxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLElBQUkseUJBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQW1CLENBQUMsQ0FBQztZQUMzRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsUUFBcUI7UUFDM0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFbEMsT0FBTztZQUNMLGFBQWEsRUFBRSxZQUFZO1lBQzNCLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLFNBQVM7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQTFDRCwwREEwQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFJlc291cmNlIG1ldGFkYXRhIGV4dHJhY3RlZCBmcm9tIENESyBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNZXRhZGF0YSB7XG4gIHJlc291cmNlX3R5cGU6IHN0cmluZzsgLy8gZS5nLiwgQVdTOjpTMzo6QnVja2V0LCBBV1M6OkVDUzo6U2VydmljZSwgQ3VzdG9tOjpDb21wdXRlXG4gIG5hbWU6IHN0cmluZzsgLy8gTG9naWNhbCBJRCBmcm9tIGNvbnN0cnVjdFxuICBzdGFja19uYW1lOiBzdHJpbmc7IC8vIFdoaWNoIHN0YWNrIChOZXR3b3JrL1N0b3JhZ2UvQ29tcHV0ZSlcbn1cblxuLyoqXG4gKiBDb21wbGV0ZSByZXNvdXJjZSBpbnZlbnRvcnkgZm9yIGFuIGFwcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VJbnZlbnRvcnkge1xuICByZXNvdXJjZXM6IFJlc291cmNlTWV0YWRhdGFbXTtcbiAgZ2VuZXJhdGVkX2F0OiBzdHJpbmc7XG4gIGFwcF9uYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXNwZWN0IHRvIGNvbGxlY3QgcmVzb3VyY2UgbWV0YWRhdGEgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gKiBWaXNpdHMgYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHRyZWUgYW5kIGV4dHJhY3RzIG1ldGFkYXRhIGZvciBBV1MgcmVzb3VyY2VzLlxuICpcbiAqIFVzYWdlOlxuICogICBjb25zdCBhc3BlY3QgPSBuZXcgUmVzb3VyY2VJbnZlbnRvcnlBc3BlY3QoKTtcbiAqICAgQXNwZWN0cy5vZihhcHApLmFkZChhc3BlY3QpO1xuICogICBhcHAuc3ludGgoKTtcbiAqICAgY29uc3QgaW52ZW50b3J5ID0gYXNwZWN0LmdldEludmVudG9yeSgpO1xuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VJbnZlbnRvcnlBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZXNvdXJjZXM6IFJlc291cmNlTWV0YWRhdGFbXSA9IFtdO1xuICBwcml2YXRlIHByb2Nlc3NlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0PElDb25zdHJ1Y3Q+KCk7XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICBpZiAodGhpcy5wcm9jZXNzZWRSZXNvdXJjZXMuaGFzKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSBwcm9jZXNzIEwxIChDRk4pIHJlc291cmNlc1xuICAgIGlmIChDZm5SZXNvdXJjZS5pc0NmblJlc291cmNlKG5vZGUpKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXh0cmFjdE1ldGFkYXRhKG5vZGUgYXMgQ2ZuUmVzb3VyY2UpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMucmVzb3VyY2VzLnB1c2gobWV0YWRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzZWRSZXNvdXJjZXMuYWRkKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IG1ldGFkYXRhIGZyb20gYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0TWV0YWRhdGEocmVzb3VyY2U6IENmblJlc291cmNlKTogUmVzb3VyY2VNZXRhZGF0YSB8IG51bGwge1xuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHJlc291cmNlLmNmblJlc291cmNlVHlwZTtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICBjb25zdCBsb2dpY2FsSWQgPSBzdGFjay5nZXRMb2dpY2FsSWQocmVzb3VyY2UpO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IHN0YWNrLnN0YWNrTmFtZTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZV90eXBlOiByZXNvdXJjZVR5cGUsXG4gICAgICBuYW1lOiBsb2dpY2FsSWQsXG4gICAgICBzdGFja19uYW1lOiBzdGFja05hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0ZWQgcmVzb3VyY2UgaW52ZW50b3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0SW52ZW50b3J5KCk6IFJlc291cmNlTWV0YWRhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit configuration for cross-account CloudQuery access
|
|
3
|
+
*/
|
|
4
|
+
export declare const FJALL_AUDIT_CONFIG: {
|
|
5
|
+
/**
|
|
6
|
+
* Fjall webapp AWS account ID
|
|
7
|
+
* This account will be granted permission to assume audit roles for CloudQuery
|
|
8
|
+
*/
|
|
9
|
+
readonly webappAwsAccountId: "985539798308";
|
|
10
|
+
/**
|
|
11
|
+
* IAM role naming convention
|
|
12
|
+
*/
|
|
13
|
+
readonly roleNamePrefix: "FjallAudit";
|
|
14
|
+
/**
|
|
15
|
+
* IAM role path (for organizational structure)
|
|
16
|
+
*/
|
|
17
|
+
readonly rolePath: "/";
|
|
18
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FJALL_AUDIT_CONFIG = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Audit configuration for cross-account CloudQuery access
|
|
6
|
+
*/
|
|
7
|
+
exports.FJALL_AUDIT_CONFIG = {
|
|
8
|
+
/**
|
|
9
|
+
* Fjall webapp AWS account ID
|
|
10
|
+
* This account will be granted permission to assume audit roles for CloudQuery
|
|
11
|
+
*/
|
|
12
|
+
webappAwsAccountId: "985539798308", // Fjall platform account
|
|
13
|
+
/**
|
|
14
|
+
* IAM role naming convention
|
|
15
|
+
*/
|
|
16
|
+
roleNamePrefix: "FjallAudit",
|
|
17
|
+
/**
|
|
18
|
+
* IAM role path (for organizational structure)
|
|
19
|
+
*/
|
|
20
|
+
rolePath: "/"
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29uZmlnL2F1ZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRztJQUNoQzs7O09BR0c7SUFDSCxrQkFBa0IsRUFBRSxjQUFjLEVBQUUseUJBQXlCO0lBRTdEOztPQUVHO0lBQ0gsY0FBYyxFQUFFLFlBQVk7SUFFNUI7O09BRUc7SUFDSCxRQUFRLEVBQUUsR0FBRztDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1ZGl0IGNvbmZpZ3VyYXRpb24gZm9yIGNyb3NzLWFjY291bnQgQ2xvdWRRdWVyeSBhY2Nlc3NcbiAqL1xuZXhwb3J0IGNvbnN0IEZKQUxMX0FVRElUX0NPTkZJRyA9IHtcbiAgLyoqXG4gICAqIEZqYWxsIHdlYmFwcCBBV1MgYWNjb3VudCBJRFxuICAgKiBUaGlzIGFjY291bnQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gYXNzdW1lIGF1ZGl0IHJvbGVzIGZvciBDbG91ZFF1ZXJ5XG4gICAqL1xuICB3ZWJhcHBBd3NBY2NvdW50SWQ6IFwiOTg1NTM5Nzk4MzA4XCIsIC8vIEZqYWxsIHBsYXRmb3JtIGFjY291bnRcblxuICAvKipcbiAgICogSUFNIHJvbGUgbmFtaW5nIGNvbnZlbnRpb25cbiAgICovXG4gIHJvbGVOYW1lUHJlZml4OiBcIkZqYWxsQXVkaXRcIixcblxuICAvKipcbiAgICogSUFNIHJvbGUgcGF0aCAoZm9yIG9yZ2FuaXphdGlvbmFsIHN0cnVjdHVyZSlcbiAgICovXG4gIHJvbGVQYXRoOiBcIi9cIlxufSBhcyBjb25zdDtcbiJdfQ==
|