@cxbuilder/flow-config 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.jsii +131 -65
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +8 -5
  4. package/dist/backend/FlowConfig/index.js +2 -1
  5. package/dist/backend/FlowConfig/index.js.map +2 -2
  6. package/dist/backend/GetConfig/index.js +1 -1
  7. package/dist/backend/GetConfig/index.js.map +2 -2
  8. package/dist/backend/Init/index.js +2 -1
  9. package/dist/backend/Init/index.js.map +2 -2
  10. package/dist/backend/Settings/index.js +255 -0
  11. package/dist/backend/Settings/index.js.map +7 -0
  12. package/dist/backend/Static/static/assets/index-Cejunttu.js +61 -0
  13. package/dist/backend/Static/static/assets/{index-NRh8x3FI.css → index-SZuscj14.css} +1 -1
  14. package/dist/backend/Static/static/index.html +3 -3
  15. package/dist/infrastructure/FlowConfigStack.d.ts +32 -14
  16. package/dist/infrastructure/FlowConfigStack.js +27 -18
  17. package/dist/infrastructure/GetConfig/index.js +2 -2
  18. package/dist/infrastructure/api/Api.d.ts +5 -2
  19. package/dist/infrastructure/api/Api.js +21 -15
  20. package/dist/infrastructure/api/Init/Init.interface.d.ts +4 -0
  21. package/dist/infrastructure/api/Init/Init.interface.js +1 -1
  22. package/dist/infrastructure/api/Init/index.js +2 -1
  23. package/dist/infrastructure/api/Settings/Settings.interface.d.ts +3 -0
  24. package/dist/infrastructure/api/Settings/Settings.interface.js +3 -0
  25. package/dist/infrastructure/api/Settings/index.d.ts +7 -0
  26. package/dist/infrastructure/api/Settings/index.js +21 -0
  27. package/dist/infrastructure/api/spec.yaml +122 -0
  28. package/dist/infrastructure/createLambda.js +1 -1
  29. package/dist/infrastructure/index.d.ts +1 -1
  30. package/dist/infrastructure/index.js +1 -1
  31. package/dist/infrastructure/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +1 -1
  33. package/dist/backend/Static/static/assets/index-FHwnAA8f.js +0 -61
@@ -3,9 +3,9 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>CXBuilder Flow Config</title>
7
- <script type="module" crossorigin src="/prod/assets/index-FHwnAA8f.js"></script>
8
- <link rel="stylesheet" crossorigin href="/prod/assets/index-NRh8x3FI.css">
6
+ <title>Flow Config</title>
7
+ <script type="module" crossorigin src="/prod/assets/index-Cejunttu.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/prod/assets/index-SZuscj14.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root" style="width: 100%;"></div>
@@ -18,9 +18,23 @@ export interface CognitoConfig {
18
18
  readonly ssoProviderName?: string;
19
19
  }
20
20
  /**
21
- * VPC configuration for private deployment using string IDs
21
+ * VPC configuration for API Gateway
22
+ * If provided, the API will be deployed in a private VPC.
22
23
  */
23
- export interface VpcConfig {
24
+ export interface ApiVpcConfig {
25
+ /**
26
+ * The VPC ID to use for the API
27
+ */
28
+ readonly vpcId: string;
29
+ /**
30
+ * The VPC endpoint ID to use for the API
31
+ */
32
+ readonly vpcEndpointId: string;
33
+ }
34
+ /**
35
+ * Lambda VPC configuration
36
+ */
37
+ export interface LambdaVpcConfig {
24
38
  /**
25
39
  * The VPC ID to deploy resources into
26
40
  */
@@ -28,15 +42,11 @@ export interface VpcConfig {
28
42
  /**
29
43
  * Security group IDs for Lambda functions
30
44
  */
31
- readonly lambdaSecurityGroupIds: string[];
45
+ readonly securityGroupIds: string[];
32
46
  /**
33
47
  * Private subnet IDs for Lambda functions
34
48
  */
35
- readonly privateSubnetIds: string[];
36
- /**
37
- * Security group IDs for VPC endpoints
38
- */
39
- readonly vpcEndpointSecurityGroupIds: string[];
49
+ readonly subnetIds: string[];
40
50
  }
41
51
  /**
42
52
  * Global table configuration for multi-region deployments
@@ -59,11 +69,11 @@ export interface ResolvedVpcConfig {
59
69
  readonly vpc: IVpc;
60
70
  readonly lambdaSecurityGroups: ISecurityGroup[];
61
71
  readonly privateSubnets: ISubnet[];
62
- readonly vpcEndpointSecurityGroups: ISecurityGroup[];
63
72
  }
64
73
  export interface FlowConfigStackProps extends cdk.StackProps {
65
74
  /**
66
- * Used for resource naming
75
+ * Used for resource naming. Will also be the name of the Connect Lambda
76
+ * @example `cxbuilder-flow-config`
67
77
  */
68
78
  readonly prefix: string;
69
79
  readonly cognito: CognitoConfig;
@@ -74,17 +84,25 @@ export interface FlowConfigStackProps extends cdk.StackProps {
74
84
  readonly alertEmails: string[];
75
85
  readonly prod?: boolean;
76
86
  /**
77
- * VPC configuration for private deployment.
78
- * If provided, the application will be configured for VPC-only access.
79
- * If undefined, uses the current public configuration.
87
+ * If provided, the API will be deployed in a VPC.
80
88
  */
81
- readonly vpc?: VpcConfig;
89
+ readonly apiVpcConfig?: ApiVpcConfig;
90
+ /**
91
+ * If provided, the Lambda functions will be deployed in a VPC.
92
+ * Note: VPC should contain endpoints to: CloudFormation, Lambda, DynamoDB, SNS, and Polly.
93
+ */
94
+ readonly lambdaVpcConfig?: LambdaVpcConfig;
82
95
  /**
83
96
  * Global table configuration for multi-region deployments.
84
97
  * If provided, enables global table support.
85
98
  * If undefined, creates a single-region table.
86
99
  */
87
100
  readonly globalTable?: GlobalTableConfig;
101
+ /**
102
+ * Set to false to remove CXBuilder branding from the web app.
103
+ * @default true
104
+ */
105
+ readonly branding?: boolean;
88
106
  }
89
107
  export declare class FlowConfigStack extends cdk.Stack {
90
108
  props: FlowConfigStackProps;
@@ -23,11 +23,10 @@ class FlowConfigStack extends cdk.Stack {
23
23
  return this._resolvedVpcConfig;
24
24
  }
25
25
  get appUrl() {
26
- const { region } = cdk.Stack.of(this);
27
- return `https://${this.api.restApi.restApiId}.execute-api.${region}.amazonaws.com/prod`;
26
+ return this.api.url;
28
27
  }
29
28
  constructor(scope, id, props) {
30
- const { prefix, cognito, alertEmails, prod = false, vpc, globalTable, } = props;
29
+ const { prefix, cognito, alertEmails, prod = false, lambdaVpcConfig, globalTable, } = props;
31
30
  super(scope, id, {
32
31
  ...props,
33
32
  stackName: props.stackName ?? prefix,
@@ -37,7 +36,9 @@ class FlowConfigStack extends cdk.Stack {
37
36
  });
38
37
  this.props = props;
39
38
  // Resolve VPC configuration if provided
40
- this._resolvedVpcConfig = vpc ? this.resolveVpcConfig(vpc) : undefined;
39
+ this._resolvedVpcConfig = lambdaVpcConfig
40
+ ? this.resolveVpcConfig(lambdaVpcConfig)
41
+ : undefined;
41
42
  // DynamoDB table for storing flow configs
42
43
  this.table = this.createTable(prefix, prod, globalTable);
43
44
  this.alertTopic = new aws_sns_1.Topic(this, 'AlertTopic', {
@@ -160,13 +161,13 @@ class FlowConfigStack extends cdk.Stack {
160
161
  const tableName = prefix;
161
162
  if (!globalTable) {
162
163
  // Single-region table
163
- return new dynamodb.Table(this, 'FlowConfigsTable', {
164
+ return new dynamodb.TableV2(this, 'Table', {
164
165
  tableName,
165
166
  partitionKey: {
166
167
  name: 'id',
167
168
  type: dynamodb.AttributeType.STRING,
168
169
  },
169
- billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
170
+ billing: dynamodb.Billing.onDemand(),
170
171
  pointInTimeRecoverySpecification: {
171
172
  pointInTimeRecoveryEnabled: true,
172
173
  },
@@ -178,50 +179,58 @@ class FlowConfigStack extends cdk.Stack {
178
179
  }
179
180
  if (globalTable.isPrimaryRegion) {
180
181
  // Primary region creates global table with replicas
181
- return new dynamodb.Table(this, 'FlowConfigsTable', {
182
+ const table = new dynamodb.TableV2(this, 'Table', {
182
183
  tableName,
183
184
  partitionKey: {
184
185
  name: 'id',
185
186
  type: dynamodb.AttributeType.STRING,
186
187
  },
187
- billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
188
+ billing: dynamodb.Billing.onDemand(),
188
189
  pointInTimeRecoverySpecification: {
189
190
  pointInTimeRecoveryEnabled: true,
190
191
  },
191
- replicationRegions: globalTable.replicaRegions || [],
192
192
  deletionProtection: prod,
193
193
  removalPolicy: prod
194
194
  ? cdk.RemovalPolicy.RETAIN
195
195
  : cdk.RemovalPolicy.DESTROY,
196
196
  });
197
+ if (globalTable.replicaRegions) {
198
+ for (const region of globalTable.replicaRegions) {
199
+ table.addReplica({
200
+ region,
201
+ deletionProtection: prod,
202
+ pointInTimeRecoverySpecification: {
203
+ pointInTimeRecoveryEnabled: true,
204
+ },
205
+ });
206
+ }
207
+ }
208
+ return table;
197
209
  }
198
210
  else {
199
211
  // Secondary region references existing global table
200
- return dynamodb.Table.fromTableArn(this, 'FlowConfigsTable', `arn:aws:dynamodb:${this.region}:${this.account}:table/${tableName}`);
212
+ return dynamodb.Table.fromTableArn(this, 'Table', `arn:aws:dynamodb:${this.region}:${this.account}:table/${tableName}`);
201
213
  }
202
214
  }
203
215
  /**
204
216
  * Resolve VPC configuration string IDs to CDK objects
205
217
  */
206
218
  resolveVpcConfig(vpcConfig) {
207
- const { vpcId, lambdaSecurityGroupIds, privateSubnetIds, vpcEndpointSecurityGroupIds, } = vpcConfig;
219
+ const { vpcId, securityGroupIds, subnetIds } = vpcConfig;
208
220
  // Resolve VPC
209
221
  const vpc = ec2.Vpc.fromLookup(this, 'ResolvedVpc', { vpcId });
210
222
  // Resolve Lambda security groups
211
- const lambdaSecurityGroups = lambdaSecurityGroupIds.map((sgId, index) => ec2.SecurityGroup.fromSecurityGroupId(this, `LambdaSecurityGroup${index}`, sgId));
223
+ const lambdaSecurityGroups = securityGroupIds.map((sgId, index) => ec2.SecurityGroup.fromSecurityGroupId(this, `LambdaSecurityGroup${index}`, sgId));
212
224
  // Resolve private subnets
213
- const privateSubnets = privateSubnetIds.map((subnetId, index) => ec2.Subnet.fromSubnetId(this, `PrivateSubnet${index}`, subnetId));
214
- // Resolve VPC endpoint security groups
215
- const vpcEndpointSecurityGroups = vpcEndpointSecurityGroupIds.map((sgId, index) => ec2.SecurityGroup.fromSecurityGroupId(this, `VpcEndpointSecurityGroup${index}`, sgId));
225
+ const privateSubnets = subnetIds.map((subnetId, index) => ec2.Subnet.fromSubnetId(this, `PrivateSubnet${index}`, subnetId));
216
226
  return {
217
227
  vpc,
218
228
  lambdaSecurityGroups,
219
229
  privateSubnets,
220
- vpcEndpointSecurityGroups,
221
230
  };
222
231
  }
223
232
  }
224
233
  exports.FlowConfigStack = FlowConfigStack;
225
234
  _a = JSII_RTTI_SYMBOL_1;
226
- FlowConfigStack[_a] = { fqn: "@cxbuilder/flow-config.FlowConfigStack", version: "1.1.0" };
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NvbmZpZ1N0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvRmxvd0NvbmZpZ1N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLHlEQU1pQztBQUNqQyxxREFBcUQ7QUFFckQsMkNBQTJDO0FBRTNDLG1DQUFnQztBQUNoQyxpREFBNEM7QUFDNUMsNkVBQXNFO0FBQ3RFLHVFQUFvRTtBQUNwRSx5REFBb0U7QUFDcEUseUVBQWlFO0FBQ2pFLDJDQUF3QztBQW1HeEMsTUFBYSxlQUFnQixTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBWTVDOzs7T0FHRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLGdCQUFnQixNQUFNLHFCQUFxQixDQUFDO0lBQzFGLENBQUM7SUFFRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDSCxLQUEyQjtRQUVsQyxNQUFNLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxXQUFXLEVBQ1gsSUFBSSxHQUFHLEtBQUssRUFDWixHQUFHLEVBQ0gsV0FBVyxHQUNaLEdBQUcsS0FBSyxDQUFDO1FBQ1YsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNO1lBQ3BDLFdBQVcsRUFDVCxLQUFLLENBQUMsV0FBVztnQkFDakIsMklBQTJJO1lBQzdJLHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBakJJLFVBQUssR0FBTCxLQUFLLENB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Q0FDL0QsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDZCxHQUFHLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUNuQyxJQUFJLEVBQ0osMkJBQTJCLEtBQUssRUFBRSxFQUNsQyxJQUFJLENBQ0wsQ0FDSixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUc7WUFDSCxvQkFBb0I7WUFDcEIsY0FBYztZQUNkLHlCQUF5QjtTQUMxQixDQUFDO0lBQ0osQ0FBQzs7QUFuVEgsMENBb1RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIElVc2VyUG9vbCxcbiAgVXNlclBvb2wsXG4gIFVzZXJQb29sQ2xpZW50LFxuICBVc2VyUG9vbENsaWVudElkZW50aXR5UHJvdmlkZXIsXG4gIENmblVzZXJQb29sR3JvdXAsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2duaXRvJztcbmltcG9ydCAqIGFzIGR5bmFtb2RiIGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBJVnBjLCBJU2VjdXJpdHlHcm91cCwgSVN1Ym5ldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBcGkgfSBmcm9tICcuL2FwaS9BcGknO1xuaW1wb3J0IHsgVG9waWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCB7IEVtYWlsU3Vic2NyaXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucy1zdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IFNlY3VyaXR5UHJvZmlsZVByb3ZpZGVyIH0gZnJvbSAnLi9TZWN1cml0eVByb2ZpbGVQcm92aWRlcic7XG5pbXBvcnQgeyBDZm5JbnRlZ3JhdGlvbkFzc29jaWF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvbm5lY3QnO1xuaW1wb3J0IHsgQ2ZuQXBwbGljYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBwaW50ZWdyYXRpb25zJztcbmltcG9ydCB7IEdldENvbmZpZyB9IGZyb20gJy4vR2V0Q29uZmlnJztcblxuLyoqXG4gKiBDb2duaXRvIGNvbmZpZ3VyYXRpb24gZm9yIEZsb3dDb25maWcgc3RhY2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQ29uZmlnIHtcbiAgcmVhZG9ubHkgdXNlclBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGdWxsIGRvbWFpbiBuYW1lXG4gICAqL1xuICByZWFkb25seSBkb21haW46IHN0cmluZztcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIGNsaWVudCB3aWxsIGF1dGggdG8gU1NPLiBPdGhlcndpc2Ugd2lsbCBhdXRoIHRvIHVzZXIgcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgc3NvUHJvdmlkZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZQQyBjb25maWd1cmF0aW9uIGZvciBwcml2YXRlIGRlcGxveW1lbnQgdXNpbmcgc3RyaW5nIElEc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIElEIHRvIGRlcGxveSByZXNvdXJjZXMgaW50b1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgSURzIGZvciBMYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFTZWN1cml0eUdyb3VwSWRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBzdWJuZXQgSURzIGZvciBMYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0SWRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgSURzIGZvciBWUEMgZW5kcG9pbnRzXG4gICAqL1xuICByZWFkb25seSB2cGNFbmRwb2ludFNlY3VyaXR5R3JvdXBJZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEdsb2JhbCB0YWJsZSBjb25maWd1cmF0aW9uIGZvciBtdWx0aS1yZWdpb24gZGVwbG95bWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxUYWJsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgdGhlIHByaW1hcnkgcmVnaW9uIHRoYXQgY3JlYXRlcyB0aGUgZ2xvYmFsIHRhYmxlXG4gICAqL1xuICByZWFkb25seSBpc1ByaW1hcnlSZWdpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYWxsIHJlZ2lvbnMgdGhhdCBzaG91bGQgaGF2ZSByZXBsaWNhc1xuICAgKiBPbmx5IHVzZWQgYnkgdGhlIHByaW1hcnkgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhUmVnaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZSBmb3IgcmVzb2x2ZWQgVlBDIHJlc291cmNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkVnBjQ29uZmlnIHtcbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xuICByZWFkb25seSBsYW1iZGFTZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRbXTtcbiAgcmVhZG9ubHkgdnBjRW5kcG9pbnRTZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29uZmlnU3RhY2tQcm9wcyBleHRlbmRzIGNkay5TdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIHJlc291cmNlIG5hbWluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvZ25pdG86IENvZ25pdG9Db25maWc7XG4gIHJlYWRvbmx5IGNvbm5lY3RJbnN0YW5jZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaG8gdG8gbm90aWZ5IGZvciB1bmhhbmRsZWQgZXhjZXB0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRFbWFpbHM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcm9kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVlBDIGNvbmZpZ3VyYXRpb24gZm9yIHByaXZhdGUgZGVwbG95bWVudC5cbiAgICogSWYgcHJvdmlkZWQsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIGNvbmZpZ3VyZWQgZm9yIFZQQy1vbmx5IGFjY2Vzcy5cbiAgICogSWYgdW5kZWZpbmVkLCB1c2VzIHRoZSBjdXJyZW50IHB1YmxpYyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogVnBjQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgdGFibGUgY29uZmlndXJhdGlvbiBmb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnRzLlxuICAgKiBJZiBwcm92aWRlZCwgZW5hYmxlcyBnbG9iYWwgdGFibGUgc3VwcG9ydC5cbiAgICogSWYgdW5kZWZpbmVkLCBjcmVhdGVzIGEgc2luZ2xlLXJlZ2lvbiB0YWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbFRhYmxlPzogR2xvYmFsVGFibGVDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBGbG93Q29uZmlnU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICB1c2VyUG9vbDogSVVzZXJQb29sO1xuICBwcml2YXRlIGFwaTogQXBpO1xuICB1c2VyUG9vbENsaWVudDogVXNlclBvb2xDbGllbnQ7XG4gIGFsZXJ0VG9waWM6IFRvcGljO1xuICB0YWJsZTogY2RrLmF3c19keW5hbW9kYi5JVGFibGU7XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIFZQQyBjb25maWd1cmF0aW9uIGlmIHByaXZhdGUgZGVwbG95bWVudCBpcyBlbmFibGVkXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFZwY0NvbmZpZz86IFJlc29sdmVkVnBjQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBHZXQgcmVzb2x2ZWQgVlBDIGNvbmZpZ3VyYXRpb24gZm9yIGNoaWxkIGNvbnN0cnVjdHNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2dldFJlc29sdmVkVnBjQ29uZmlnKCk6IFJlc29sdmVkVnBjQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRWcGNDb25maWc7XG4gIH1cblxuICBnZXQgYXBwVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyByZWdpb24gfSA9IGNkay5TdGFjay5vZih0aGlzKTtcbiAgICByZXR1cm4gYGh0dHBzOi8vJHt0aGlzLmFwaS5yZXN0QXBpLnJlc3RBcGlJZH0uZXhlY3V0ZS1hcGkuJHtyZWdpb259LmFtYXpvbmF3cy5jb20vcHJvZGA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHVibGljIHByb3BzOiBGbG93Q29uZmlnU3RhY2tQcm9wc1xuICApIHtcbiAgICBjb25zdCB7XG4gICAgICBwcmVmaXgsXG4gICAgICBjb2duaXRvLFxuICAgICAgYWxlcnRFbWFpbHMsXG4gICAgICBwcm9kID0gZmFsc2UsXG4gICAgICB2cGMsXG4gICAgICBnbG9iYWxUYWJsZSxcbiAgICB9ID0gcHJvcHM7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHN0YWNrTmFtZTogcHJvcHMuc3RhY2tOYW1lID8/IHByZWZpeCxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBwcm9wcy5kZXNjcmlwdGlvbiA/P1xuICAgICAgICAnV2ViLWJhc2VkIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgZmxvdyB2YXJpYWJsZXMgYW5kIHByb21wdHMgdGhhdCBhcmUgZHluYW1pY2FsbHkgcmV0cmlldmVkIGJ5IEFtYXpvbiBDb25uZWN0IGR1cmluZyBjdXN0b21lciBpbnRlcmFjdGlvbnMnLFxuICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBwcm9kLFxuICAgIH0pO1xuXG4gICAgLy8gUmVzb2x2ZSBWUEMgY29uZmlndXJhdGlvbiBpZiBwcm92aWRlZFxuICAgIHRoaXMuX3Jlc29sdmVkVnBjQ29uZmlnID0gdnBjID8gdGhpcy5yZXNvbHZlVnBjQ29uZmlnKHZwYykgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBEeW5hbW9EQiB0YWJsZSBmb3Igc3RvcmluZyBmbG93IGNvbmZpZ3NcbiAgICB0aGlzLnRhYmxlID0gdGhpcy5jcmVhdGVUYWJsZShwcmVmaXgsIHByb2QsIGdsb2JhbFRhYmxlKTtcblxuICAgIHRoaXMuYWxlcnRUb3BpYyA9IG5ldyBUb3BpYyh0aGlzLCAnQWxlcnRUb3BpYycsIHtcbiAgICAgIHRvcGljTmFtZTogYCR7cHJlZml4fS1lcnJvci1hbGVydHNgLFxuICAgIH0pO1xuICAgIGFsZXJ0RW1haWxzLmZvckVhY2goKGUpID0+XG4gICAgICB0aGlzLmFsZXJ0VG9waWMuYWRkU3Vic2NyaXB0aW9uKG5ldyBFbWFpbFN1YnNjcmlwdGlvbihlKSlcbiAgICApO1xuXG4gICAgdGhpcy51c2VyUG9vbCA9IFVzZXJQb29sLmZyb21Vc2VyUG9vbElkKFxuICAgICAgdGhpcyxcbiAgICAgICdVc2VyUG9vbCcsXG4gICAgICBjb2duaXRvLnVzZXJQb29sSWRcbiAgICApO1xuXG4gICAgY29uc3QgZ2V0Q29uZmlnID0gbmV3IEdldENvbmZpZyh0aGlzKTtcbiAgICB0aGlzLmFwaSA9IG5ldyBBcGkodGhpcyk7XG5cbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gdGhpcy5jcmVhdGVVc2VyUG9vbENsaWVudCgpO1xuICAgIHRoaXMuY3JlYXRlVXNlclBvb2xHcm91cHMoKTtcblxuICAgIHRoaXMuYXNzb2NpYXRlM3BBcHAoKTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdBcHBVcmwnLCB7XG4gICAgICB2YWx1ZTogdGhpcy5hcHBVcmwsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIGZvciB0aGUgRmxvdyBDb25maWcgYXBwbGljYXRpb24nLFxuICAgIH0pO1xuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdBcGlVcmwnLCB7XG4gICAgICB2YWx1ZTogYCR7dGhpcy5hcHBVcmx9L2FwaWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIGZvciB0aGUgRmxvdyBDb25maWcgQVBJJyxcbiAgICB9KTtcbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnR2V0Q29uZmlnTGFtYmRhTmFtZScsIHtcbiAgICAgIHZhbHVlOiBnZXRDb25maWcuZnVuY3Rpb24uZnVuY3Rpb25OYW1lLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdMYW1iZGEgZnVuY3Rpb24gbmFtZSBmb3IgYWNjZXNzaW5nIGZsb3cgY29uZmlncyBmcm9tIENvbm5lY3QnLFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVXNlclBvb2xDbGllbnQoKTogVXNlclBvb2xDbGllbnQge1xuICAgIGNvbnN0IHsgcHJlZml4LCBjb2duaXRvIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgZG9tYWlucyA9IFsnaHR0cDovL2xvY2FsaG9zdDozMDAwJywgdGhpcy5hcHBVcmxdO1xuXG4gICAgY29uc3Qgb0F1dGggPSB7XG4gICAgICBjYWxsYmFja1VybHM6IGRvbWFpbnMubWFwKCh4KSA9PiBgJHt4fS9wb3B1cC5odG1sYCksXG4gICAgICBsb2dvdXRVcmxzOiBkb21haW5zLFxuICAgIH07XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFVzZXJQb29sQ2xpZW50KHRoaXMsICdVc2VyUG9vbENsaWVudCcsIHtcbiAgICAgIHVzZXJQb29sQ2xpZW50TmFtZTogcHJlZml4LFxuICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gICAgICBzdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVyczogY29nbml0by5zc29Qcm92aWRlck5hbWVcbiAgICAgICAgPyBbVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLmN1c3RvbShjb2duaXRvLnNzb1Byb3ZpZGVyTmFtZSldXG4gICAgICAgIDogW1VzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlci5DT0dOSVRPXSxcbiAgICAgIGdlbmVyYXRlU2VjcmV0OiBmYWxzZSxcbiAgICAgIG9BdXRoLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1VzZXJQb29sQ2xpZW50SWQnLCB7XG4gICAgICB2YWx1ZTogY2xpZW50LnVzZXJQb29sQ2xpZW50SWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgQ29nbml0byBVc2VyIEdyb3VwcyBmb3Igcm9sZS1iYXNlZCBhY2Nlc3MgY29udHJvbFxuICAgKi9cbiAgY3JlYXRlVXNlclBvb2xHcm91cHMoKTogdm9pZCB7XG4gICAgLy8gRmxvd0NvbmZpZ0FkbWluIC0gRnVsbCBDUlVEIGFjY2Vzc1xuICAgIG5ldyBDZm5Vc2VyUG9vbEdyb3VwKHRoaXMsICdGbG93Q29uZmlnQWRtaW5Hcm91cCcsIHtcbiAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgIGdyb3VwTmFtZTogJ0Zsb3dDb25maWdBZG1pbicsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0Z1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGFsbCBmbG93IGNvbmZpZ3MgLSBjYW4gY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgZmxvdyBjb25maWdzIGFuZCBhbGwgdGhlaXIgcHJvcGVydGllcycsXG4gICAgICBwcmVjZWRlbmNlOiAxLFxuICAgIH0pO1xuXG4gICAgLy8gRmxvd0NvbmZpZ0VkaXQgLSBFZGl0IHZhcmlhYmxlL3Byb21wdCB2YWx1ZXMgb25seVxuICAgIG5ldyBDZm5Vc2VyUG9vbEdyb3VwKHRoaXMsICdGbG93Q29uZmlnRWRpdEdyb3VwJywge1xuICAgICAgdXNlclBvb2xJZDogdGhpcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgZ3JvdXBOYW1lOiAnRmxvd0NvbmZpZ0VkaXQnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdFZGl0IGFjY2VzcyB0byBmbG93IGNvbmZpZ3MgLSBjYW4gcmVhZCBhbmQgbW9kaWZ5IHZhcmlhYmxlIHZhbHVlcyBhbmQgcHJvbXB0IGNvbnRlbnQgYnV0IGNhbm5vdCBhZGQvcmVtb3ZlIGZpZWxkcyBvciBkZWxldGUgY29uZmlncycsXG4gICAgICBwcmVjZWRlbmNlOiAyLFxuICAgIH0pO1xuXG4gICAgLy8gRmxvd0NvbmZpZ1JlYWQgLSBSZWFkLW9ubHkgYWNjZXNzXG4gICAgbmV3IENmblVzZXJQb29sR3JvdXAodGhpcywgJ0Zsb3dDb25maWdSZWFkR3JvdXAnLCB7XG4gICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICBncm91cE5hbWU6ICdGbG93Q29uZmlnUmVhZCcsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1JlYWQtb25seSBhY2Nlc3MgdG8gYWxsIGZsb3cgY29uZmlncyBmb3IgcmVwb3J0aW5nIGFuZCByZWZlcmVuY2UgcHVycG9zZXMnLFxuICAgICAgcHJlY2VkZW5jZTogMyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGVkIFZvaWNlbWFpbCBhcyBBZ2VudCBXb3Jrc3BhY2UgYXBwXG4gICAqL1xuICBhc3NvY2lhdGUzcEFwcCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wczogeyBwcmVmaXgsIGNvbm5lY3RJbnN0YW5jZUFybiB9LFxuICAgICAgYXBwVXJsOiB1cmwsXG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IG5hbWVzcGFjZSA9IGBjeGJ1aWxkZXIuJHtwcmVmaXh9YDtcbiAgICBpZiAobmFtZXNwYWNlLmxlbmd0aCA+IDMyICYmICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKG5hbWVzcGFjZSkpIHtcbiAgICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5zdWJzdHJpbmcoMCwgMzIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9IG5ldyBDZm5BcHBsaWNhdGlvbih0aGlzLCAnM3BBcHAnLCB7XG4gICAgICBuYW1lOiB0aGlzLnByb3BzLnByZWZpeCxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQWdlbnQgV29ya3NwYWNlIGFwcCBmb3IgY29uZmlndXJpbmcgY29udGFjdCBmbG93IHZhcmlhYmxlcyBhbmQgcHJvbXB0cycsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBhcHBsaWNhdGlvblNvdXJjZUNvbmZpZzoge1xuICAgICAgICBleHRlcm5hbFVybENvbmZpZzoge1xuICAgICAgICAgIGFjY2Vzc1VybDogdXJsLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC8vIGRvY3M6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb25uZWN0L2xhdGVzdC9hZG1pbmd1aWRlLzNwLWFwcHMtZXZlbnRzLXJlcXVlc3RzLmh0bWxcbiAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgICdVc2VyLkRldGFpbHMuVmlldycsXG4gICAgICAgICdVc2VyLkNvbmZpZ3VyYXRpb24uVmlldycsXG4gICAgICAgICdVc2VyLlN0YXR1cy5WaWV3JyxcbiAgICAgICAgJ0NvbnRhY3QuRGV0YWlscy5WaWV3JyxcbiAgICAgICAgJ0NvbnRhY3QuQ3VzdG9tZXJEZXRhaWxzLlZpZXcnLFxuICAgICAgICAnQ29udGFjdC5WYXJpYWJsZXMuVmlldycsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXNzb2NpYXRpb24gPSBuZXcgQ2ZuSW50ZWdyYXRpb25Bc3NvY2lhdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnM3BBcHBBc3NvY2lhdGlvbicsXG4gICAgICB7XG4gICAgICAgIGluc3RhbmNlSWQ6IGNvbm5lY3RJbnN0YW5jZUFybixcbiAgICAgICAgaW50ZWdyYXRpb25UeXBlOiAnQVBQTElDQVRJT04nLFxuICAgICAgICBpbnRlZ3JhdGlvbkFybjogYXBwLmF0dHJBcHBsaWNhdGlvbkFybixcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgU2VjdXJpdHlQcm9maWxlUHJvdmlkZXIoXG4gICAgICB0aGlzLFxuICAgICAgJ1NlY3VyaXR5UHJvZmlsZVByb3ZpZGVyJyxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdEluc3RhbmNlQXJuLFxuICAgICAgfVxuICAgICk7XG4gICAgcHJvdmlkZXIubm9kZS5hZGREZXBlbmRlbmN5KGFzc29jaWF0aW9uKTtcblxuICAgIC8vIEF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlIHdpdGggc2VjdXJpdHkgcHJvZmlsZXNcbiAgICBjb25zdCBzZWN1cml0eVByb2ZpbGVzID0gWydBZG1pbiddO1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBzZWN1cml0eVByb2ZpbGVzKSB7XG4gICAgICBwcm92aWRlci5hbGxvd0FwcGxpY2F0aW9uKGBBbGxvdyR7cHJvZmlsZX1gLCBwcm9maWxlLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRHluYW1vREIgdGFibGUgd2l0aCBvcHRpb25hbCBnbG9iYWwgdGFibGUgc3VwcG9ydFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZShcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBwcm9kOiBib29sZWFuLFxuICAgIGdsb2JhbFRhYmxlPzogR2xvYmFsVGFibGVDb25maWdcbiAgKTogZHluYW1vZGIuSVRhYmxlIHtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBwcmVmaXg7XG5cbiAgICBpZiAoIWdsb2JhbFRhYmxlKSB7XG4gICAgICAvLyBTaW5nbGUtcmVnaW9uIHRhYmxlXG4gICAgICByZXR1cm4gbmV3IGR5bmFtb2RiLlRhYmxlKHRoaXMsICdGbG93Q29uZmlnc1RhYmxlJywge1xuICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgIHBhcnRpdGlvbktleToge1xuICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICAgIH0sXG4gICAgICAgIGJpbGxpbmdNb2RlOiBkeW5hbW9kYi5CaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICAgIHBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvZCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvZFxuICAgICAgICAgID8gY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAgICAgICAgOiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbFRhYmxlLmlzUHJpbWFyeVJlZ2lvbikge1xuICAgICAgLy8gUHJpbWFyeSByZWdpb24gY3JlYXRlcyBnbG9iYWwgdGFibGUgd2l0aCByZXBsaWNhc1xuICAgICAgcmV0dXJuIG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCAnRmxvd0NvbmZpZ3NUYWJsZScsIHtcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgICB9LFxuICAgICAgICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICByZXBsaWNhdGlvblJlZ2lvbnM6IGdsb2JhbFRhYmxlLnJlcGxpY2FSZWdpb25zIHx8IFtdLFxuICAgICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb2QsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHByb2RcbiAgICAgICAgICA/IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTlxuICAgICAgICAgIDogY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWNvbmRhcnkgcmVnaW9uIHJlZmVyZW5jZXMgZXhpc3RpbmcgZ2xvYmFsIHRhYmxlXG4gICAgICByZXR1cm4gZHluYW1vZGIuVGFibGUuZnJvbVRhYmxlQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnRmxvd0NvbmZpZ3NUYWJsZScsXG4gICAgICAgIGBhcm46YXdzOmR5bmFtb2RiOiR7dGhpcy5yZWdpb259OiR7dGhpcy5hY2NvdW50fTp0YWJsZS8ke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIFZQQyBjb25maWd1cmF0aW9uIHN0cmluZyBJRHMgdG8gQ0RLIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVZwY0NvbmZpZyh2cGNDb25maWc6IFZwY0NvbmZpZyk6IFJlc29sdmVkVnBjQ29uZmlnIHtcbiAgICBjb25zdCB7XG4gICAgICB2cGNJZCxcbiAgICAgIGxhbWJkYVNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICBwcml2YXRlU3VibmV0SWRzLFxuICAgICAgdnBjRW5kcG9pbnRTZWN1cml0eUdyb3VwSWRzLFxuICAgIH0gPSB2cGNDb25maWc7XG5cbiAgICAvLyBSZXNvbHZlIFZQQ1xuICAgIGNvbnN0IHZwYyA9IGVjMi5WcGMuZnJvbUxvb2t1cCh0aGlzLCAnUmVzb2x2ZWRWcGMnLCB7IHZwY0lkIH0pO1xuXG4gICAgLy8gUmVzb2x2ZSBMYW1iZGEgc2VjdXJpdHkgZ3JvdXBzXG4gICAgY29uc3QgbGFtYmRhU2VjdXJpdHlHcm91cHMgPSBsYW1iZGFTZWN1cml0eUdyb3VwSWRzLm1hcCgoc2dJZCwgaW5kZXgpID0+XG4gICAgICBlYzIuU2VjdXJpdHlHcm91cC5mcm9tU2VjdXJpdHlHcm91cElkKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgTGFtYmRhU2VjdXJpdHlHcm91cCR7aW5kZXh9YCxcbiAgICAgICAgc2dJZFxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBSZXNvbHZlIHByaXZhdGUgc3VibmV0c1xuICAgIGNvbnN0IHByaXZhdGVTdWJuZXRzID0gcHJpdmF0ZVN1Ym5ldElkcy5tYXAoKHN1Ym5ldElkLCBpbmRleCkgPT5cbiAgICAgIGVjMi5TdWJuZXQuZnJvbVN1Ym5ldElkKHRoaXMsIGBQcml2YXRlU3VibmV0JHtpbmRleH1gLCBzdWJuZXRJZClcbiAgICApO1xuXG4gICAgLy8gUmVzb2x2ZSBWUEMgZW5kcG9pbnQgc2VjdXJpdHkgZ3JvdXBzXG4gICAgY29uc3QgdnBjRW5kcG9pbnRTZWN1cml0eUdyb3VwcyA9IHZwY0VuZHBvaW50U2VjdXJpdHlHcm91cElkcy5tYXAoXG4gICAgICAoc2dJZCwgaW5kZXgpID0+XG4gICAgICAgIGVjMi5TZWN1cml0eUdyb3VwLmZyb21TZWN1cml0eUdyb3VwSWQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgVnBjRW5kcG9pbnRTZWN1cml0eUdyb3VwJHtpbmRleH1gLFxuICAgICAgICAgIHNnSWRcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdnBjLFxuICAgICAgbGFtYmRhU2VjdXJpdHlHcm91cHMsXG4gICAgICBwcml2YXRlU3VibmV0cyxcbiAgICAgIHZwY0VuZHBvaW50U2VjdXJpdHlHcm91cHMsXG4gICAgfTtcbiAgfVxufVxuIl19
235
+ FlowConfigStack[_a] = { fqn: "@cxbuilder/flow-config.FlowConfigStack", version: "2.0.0" };
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NvbmZpZ1N0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvRmxvd0NvbmZpZ1N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLHlEQU1pQztBQUNqQyxxREFBcUQ7QUFFckQsMkNBQTJDO0FBRTNDLG1DQUFnQztBQUNoQyxpREFBNEM7QUFDNUMsNkVBQXNFO0FBQ3RFLHVFQUFvRTtBQUNwRSx5REFBb0U7QUFDcEUseUVBQWlFO0FBQ2pFLDJDQUF3QztBQXVIeEMsTUFBYSxlQUFnQixTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBWTVDOzs7T0FHRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ0gsS0FBMkI7UUFFbEMsTUFBTSxFQUNKLE1BQU0sRUFDTixPQUFPLEVBQ1AsV0FBVyxFQUNYLElBQUksR0FBRyxLQUFLLEVBQ1osZUFBZSxFQUNmLFdBQVcsR0FDWixHQUFHLEtBQUssQ0FBQztRQUNWLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTTtZQUNwQyxXQUFXLEVBQ1QsS0FBSyxDQUFDLFdBQVc7Z0JBQ2pCLDJJQUEySTtZQUM3SSxxQkFBcUIsRUFBRSxJQUFJO1NBQzVCLENBQUMsQ0FBQztRQWpCSSxVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQW1CbEMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxlQUFlO1lBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO1lBQ3hDLENBQUMs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RSxnQkFBZ0IsS0FBSyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQ2pFLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRztZQUNILG9CQUFvQjtZQUNwQixjQUFjO1NBQ2YsQ0FBQztJQUNKLENBQUM7O0FBL1NILDBDQWdUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBJVXNlclBvb2wsXG4gIFVzZXJQb29sLFxuICBVc2VyUG9vbENsaWVudCxcbiAgVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLFxuICBDZm5Vc2VyUG9vbEdyb3VwLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29nbml0byc7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgSVZwYywgSVNlY3VyaXR5R3JvdXAsIElTdWJuZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXBpIH0gZnJvbSAnLi9hcGkvQXBpJztcbmltcG9ydCB7IFRvcGljIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBFbWFpbFN1YnNjcmlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMtc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBTZWN1cml0eVByb2ZpbGVQcm92aWRlciB9IGZyb20gJy4vU2VjdXJpdHlQcm9maWxlUHJvdmlkZXInO1xuaW1wb3J0IHsgQ2ZuSW50ZWdyYXRpb25Bc3NvY2lhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb25uZWN0JztcbmltcG9ydCB7IENmbkFwcGxpY2F0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwcGludGVncmF0aW9ucyc7XG5pbXBvcnQgeyBHZXRDb25maWcgfSBmcm9tICcuL0dldENvbmZpZyc7XG5cbi8qKlxuICogQ29nbml0byBjb25maWd1cmF0aW9uIGZvciBGbG93Q29uZmlnIHN0YWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0NvbmZpZyB7XG4gIHJlYWRvbmx5IHVzZXJQb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRnVsbCBkb21haW4gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBjbGllbnQgd2lsbCBhdXRoIHRvIFNTTy4gT3RoZXJ3aXNlIHdpbGwgYXV0aCB0byB1c2VyIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHNzb1Byb3ZpZGVyTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWUEMgY29uZmlndXJhdGlvbiBmb3IgQVBJIEdhdGV3YXlcbiAqIElmIHByb3ZpZGVkLCB0aGUgQVBJIHdpbGwgYmUgZGVwbG95ZWQgaW4gYSBwcml2YXRlIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlWcGNDb25maWcge1xuICAvKipcbiAgICogVGhlIFZQQyBJRCB0byB1c2UgZm9yIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVlBDIGVuZHBvaW50IElEIHRvIHVzZSBmb3IgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjRW5kcG9pbnRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIExhbWJkYSBWUEMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVZwY0NvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIElEIHRvIGRlcGxveSByZXNvdXJjZXMgaW50b1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgSURzIGZvciBMYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwSWRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBzdWJuZXQgSURzIGZvciBMYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRJZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEdsb2JhbCB0YWJsZSBjb25maWd1cmF0aW9uIGZvciBtdWx0aS1yZWdpb24gZGVwbG95bWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxUYWJsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgdGhlIHByaW1hcnkgcmVnaW9uIHRoYXQgY3JlYXRlcyB0aGUgZ2xvYmFsIHRhYmxlXG4gICAqL1xuICByZWFkb25seSBpc1ByaW1hcnlSZWdpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYWxsIHJlZ2lvbnMgdGhhdCBzaG91bGQgaGF2ZSByZXBsaWNhc1xuICAgKiBPbmx5IHVzZWQgYnkgdGhlIHByaW1hcnkgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhUmVnaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZSBmb3IgcmVzb2x2ZWQgVlBDIHJlc291cmNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkVnBjQ29uZmlnIHtcbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xuICByZWFkb25seSBsYW1iZGFTZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29uZmlnU3RhY2tQcm9wcyBleHRlbmRzIGNkay5TdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIHJlc291cmNlIG5hbWluZy4gV2lsbCBhbHNvIGJlIHRoZSBuYW1lIG9mIHRoZSBDb25uZWN0IExhbWJkYVxuICAgKiBAZXhhbXBsZSBgY3hidWlsZGVyLWZsb3ctY29uZmlnYFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvZ25pdG86IENvZ25pdG9Db25maWc7XG4gIHJlYWRvbmx5IGNvbm5lY3RJbnN0YW5jZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaG8gdG8gbm90aWZ5IGZvciB1bmhhbmRsZWQgZXhjZXB0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRFbWFpbHM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcm9kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIHRoZSBBUEkgd2lsbCBiZSBkZXBsb3llZCBpbiBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZwY0NvbmZpZz86IEFwaVZwY0NvbmZpZztcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIHRoZSBMYW1iZGEgZnVuY3Rpb25zIHdpbGwgYmUgZGVwbG95ZWQgaW4gYSBWUEMuXG4gICAqIE5vdGU6IFZQQyBzaG91bGQgY29udGFpbiBlbmRwb2ludHMgdG86IENsb3VkRm9ybWF0aW9uLCBMYW1iZGEsIER5bmFtb0RCLCBTTlMsIGFuZCBQb2xseS5cbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYVZwY0NvbmZpZz86IExhbWJkYVZwY0NvbmZpZztcblxuICAvKipcbiAgICogR2xvYmFsIHRhYmxlIGNvbmZpZ3VyYXRpb24gZm9yIG11bHRpLXJlZ2lvbiBkZXBsb3ltZW50cy5cbiAgICogSWYgcHJvdmlkZWQsIGVuYWJsZXMgZ2xvYmFsIHRhYmxlIHN1cHBvcnQuXG4gICAqIElmIHVuZGVmaW5lZCwgY3JlYXRlcyBhIHNpbmdsZS1yZWdpb24gdGFibGUuXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxUYWJsZT86IEdsb2JhbFRhYmxlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gcmVtb3ZlIENYQnVpbGRlciBicmFuZGluZyBmcm9tIHRoZSB3ZWIgYXBwLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBicmFuZGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBGbG93Q29uZmlnU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICB1c2VyUG9vbDogSVVzZXJQb29sO1xuICBwcml2YXRlIGFwaTogQXBpO1xuICB1c2VyUG9vbENsaWVudDogVXNlclBvb2xDbGllbnQ7XG4gIGFsZXJ0VG9waWM6IFRvcGljO1xuICB0YWJsZTogY2RrLmF3c19keW5hbW9kYi5JVGFibGU7XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIFZQQyBjb25maWd1cmF0aW9uIGlmIHByaXZhdGUgZGVwbG95bWVudCBpcyBlbmFibGVkXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFZwY0NvbmZpZz86IFJlc29sdmVkVnBjQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBHZXQgcmVzb2x2ZWQgVlBDIGNvbmZpZ3VyYXRpb24gZm9yIGNoaWxkIGNvbnN0cnVjdHNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2dldFJlc29sdmVkVnBjQ29uZmlnKCk6IFJlc29sdmVkVnBjQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRWcGNDb25maWc7XG4gIH1cblxuICBnZXQgYXBwVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLnVybDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcHJvcHM6IEZsb3dDb25maWdTdGFja1Byb3BzXG4gICkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGNvZ25pdG8sXG4gICAgICBhbGVydEVtYWlscyxcbiAgICAgIHByb2QgPSBmYWxzZSxcbiAgICAgIGxhbWJkYVZwY0NvbmZpZyxcbiAgICAgIGdsb2JhbFRhYmxlLFxuICAgIH0gPSBwcm9wcztcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgc3RhY2tOYW1lOiBwcm9wcy5zdGFja05hbWUgPz8gcHJlZml4LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIHByb3BzLmRlc2NyaXB0aW9uID8/XG4gICAgICAgICdXZWItYmFzZWQgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBmbG93IHZhcmlhYmxlcyBhbmQgcHJvbXB0cyB0aGF0IGFyZSBkeW5hbWljYWxseSByZXRyaWV2ZWQgYnkgQW1hem9uIENvbm5lY3QgZHVyaW5nIGN1c3RvbWVyIGludGVyYWN0aW9ucycsXG4gICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IHByb2QsXG4gICAgfSk7XG5cbiAgICAvLyBSZXNvbHZlIFZQQyBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXG4gICAgdGhpcy5fcmVzb2x2ZWRWcGNDb25maWcgPSBsYW1iZGFWcGNDb25maWdcbiAgICAgID8gdGhpcy5yZXNvbHZlVnBjQ29uZmlnKGxhbWJkYVZwY0NvbmZpZylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gRHluYW1vREIgdGFibGUgZm9yIHN0b3JpbmcgZmxvdyBjb25maWdzXG4gICAgdGhpcy50YWJsZSA9IHRoaXMuY3JlYXRlVGFibGUocHJlZml4LCBwcm9kLCBnbG9iYWxUYWJsZSk7XG5cbiAgICB0aGlzLmFsZXJ0VG9waWMgPSBuZXcgVG9waWModGhpcywgJ0FsZXJ0VG9waWMnLCB7XG4gICAgICB0b3BpY05hbWU6IGAke3ByZWZpeH0tZXJyb3ItYWxlcnRzYCxcbiAgICB9KTtcbiAgICBhbGVydEVtYWlscy5mb3JFYWNoKChlKSA9PlxuICAgICAgdGhpcy5hbGVydFRvcGljLmFkZFN1YnNjcmlwdGlvbihuZXcgRW1haWxTdWJzY3JpcHRpb24oZSkpXG4gICAgKTtcblxuICAgIHRoaXMudXNlclBvb2wgPSBVc2VyUG9vbC5mcm9tVXNlclBvb2xJZChcbiAgICAgIHRoaXMsXG4gICAgICAnVXNlclBvb2wnLFxuICAgICAgY29nbml0by51c2VyUG9vbElkXG4gICAgKTtcblxuICAgIGNvbnN0IGdldENvbmZpZyA9IG5ldyBHZXRDb25maWcodGhpcyk7XG4gICAgdGhpcy5hcGkgPSBuZXcgQXBpKHRoaXMpO1xuXG4gICAgdGhpcy51c2VyUG9vbENsaWVudCA9IHRoaXMuY3JlYXRlVXNlclBvb2xDbGllbnQoKTtcbiAgICB0aGlzLmNyZWF0ZVVzZXJQb29sR3JvdXBzKCk7XG5cbiAgICB0aGlzLmFzc29jaWF0ZTNwQXBwKCk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnQXBwVXJsJywge1xuICAgICAgdmFsdWU6IHRoaXMuYXBwVXJsLFxuICAgICAgZGVzY3JpcHRpb246ICdCYXNlIFVSTCBmb3IgdGhlIEZsb3cgQ29uZmlnIGFwcGxpY2F0aW9uJyxcbiAgICB9KTtcbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnQXBpVXJsJywge1xuICAgICAgdmFsdWU6IGAke3RoaXMuYXBwVXJsfS9hcGlgLFxuICAgICAgZGVzY3JpcHRpb246ICdCYXNlIFVSTCBmb3IgdGhlIEZsb3cgQ29uZmlnIEFQSScsXG4gICAgfSk7XG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ0dldENvbmZpZ0xhbWJkYU5hbWUnLCB7XG4gICAgICB2YWx1ZTogZ2V0Q29uZmlnLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnTGFtYmRhIGZ1bmN0aW9uIG5hbWUgZm9yIGFjY2Vzc2luZyBmbG93IGNvbmZpZ3MgZnJvbSBDb25uZWN0JyxcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJQb29sQ2xpZW50KCk6IFVzZXJQb29sQ2xpZW50IHtcbiAgICBjb25zdCB7IHByZWZpeCwgY29nbml0byB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGRvbWFpbnMgPSBbJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsIHRoaXMuYXBwVXJsXTtcblxuICAgIGNvbnN0IG9BdXRoID0ge1xuICAgICAgY2FsbGJhY2tVcmxzOiBkb21haW5zLm1hcCgoeCkgPT4gYCR7eH0vcG9wdXAuaHRtbGApLFxuICAgICAgbG9nb3V0VXJsczogZG9tYWlucyxcbiAgICB9O1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBVc2VyUG9vbENsaWVudCh0aGlzLCAnVXNlclBvb2xDbGllbnQnLCB7XG4gICAgICB1c2VyUG9vbENsaWVudE5hbWU6IHByZWZpeCxcbiAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM6IGNvZ25pdG8uc3NvUHJvdmlkZXJOYW1lXG4gICAgICAgID8gW1VzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlci5jdXN0b20oY29nbml0by5zc29Qcm92aWRlck5hbWUpXVxuICAgICAgICA6IFtVc2VyUG9vbENsaWVudElkZW50aXR5UHJvdmlkZXIuQ09HTklUT10sXG4gICAgICBnZW5lcmF0ZVNlY3JldDogZmFsc2UsXG4gICAgICBvQXV0aCxcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdVc2VyUG9vbENsaWVudElkJywge1xuICAgICAgdmFsdWU6IGNsaWVudC51c2VyUG9vbENsaWVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIENvZ25pdG8gVXNlciBHcm91cHMgZm9yIHJvbGUtYmFzZWQgYWNjZXNzIGNvbnRyb2xcbiAgICovXG4gIGNyZWF0ZVVzZXJQb29sR3JvdXBzKCk6IHZvaWQge1xuICAgIC8vIEZsb3dDb25maWdBZG1pbiAtIEZ1bGwgQ1JVRCBhY2Nlc3NcbiAgICBuZXcgQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCAnRmxvd0NvbmZpZ0FkbWluR3JvdXAnLCB7XG4gICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICBncm91cE5hbWU6ICdGbG93Q29uZmlnQWRtaW4nLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdGdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBhbGwgZmxvdyBjb25maWdzIC0gY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIGZsb3cgY29uZmlncyBhbmQgYWxsIHRoZWlyIHByb3BlcnRpZXMnLFxuICAgICAgcHJlY2VkZW5jZTogMSxcbiAgICB9KTtcblxuICAgIC8vIEZsb3dDb25maWdFZGl0IC0gRWRpdCB2YXJpYWJsZS9wcm9tcHQgdmFsdWVzIG9ubHlcbiAgICBuZXcgQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCAnRmxvd0NvbmZpZ0VkaXRHcm91cCcsIHtcbiAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgIGdyb3VwTmFtZTogJ0Zsb3dDb25maWdFZGl0JyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRWRpdCBhY2Nlc3MgdG8gZmxvdyBjb25maWdzIC0gY2FuIHJlYWQgYW5kIG1vZGlmeSB2YXJpYWJsZSB2YWx1ZXMgYW5kIHByb21wdCBjb250ZW50IGJ1dCBjYW5ub3QgYWRkL3JlbW92ZSBmaWVsZHMgb3IgZGVsZXRlIGNvbmZpZ3MnLFxuICAgICAgcHJlY2VkZW5jZTogMixcbiAgICB9KTtcblxuICAgIC8vIEZsb3dDb25maWdSZWFkIC0gUmVhZC1vbmx5IGFjY2Vzc1xuICAgIG5ldyBDZm5Vc2VyUG9vbEdyb3VwKHRoaXMsICdGbG93Q29uZmlnUmVhZEdyb3VwJywge1xuICAgICAgdXNlclBvb2xJZDogdGhpcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgZ3JvdXBOYW1lOiAnRmxvd0NvbmZpZ1JlYWQnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdSZWFkLW9ubHkgYWNjZXNzIHRvIGFsbCBmbG93IGNvbmZpZ3MgZm9yIHJlcG9ydGluZyBhbmQgcmVmZXJlbmNlIHB1cnBvc2VzJyxcbiAgICAgIHByZWNlZGVuY2U6IDMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlZCBWb2ljZW1haWwgYXMgQWdlbnQgV29ya3NwYWNlIGFwcFxuICAgKi9cbiAgYXNzb2NpYXRlM3BBcHAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcHJvcHM6IHsgcHJlZml4LCBjb25uZWN0SW5zdGFuY2VBcm4gfSxcbiAgICAgIGFwcFVybDogdXJsLFxuICAgIH0gPSB0aGlzO1xuICAgIGxldCBuYW1lc3BhY2UgPSBgY3hidWlsZGVyLiR7cHJlZml4fWA7XG4gICAgaWYgKG5hbWVzcGFjZS5sZW5ndGggPiAzMiAmJiAhY2RrLlRva2VuLmlzVW5yZXNvbHZlZChuYW1lc3BhY2UpKSB7XG4gICAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2Uuc3Vic3RyaW5nKDAsIDMyKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSBuZXcgQ2ZuQXBwbGljYXRpb24odGhpcywgJzNwQXBwJywge1xuICAgICAgbmFtZTogdGhpcy5wcm9wcy5wcmVmaXgsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0FnZW50IFdvcmtzcGFjZSBhcHAgZm9yIGNvbmZpZ3VyaW5nIGNvbnRhY3QgZmxvdyB2YXJpYWJsZXMgYW5kIHByb21wdHMnLFxuICAgICAgbmFtZXNwYWNlLFxuICAgICAgYXBwbGljYXRpb25Tb3VyY2VDb25maWc6IHtcbiAgICAgICAgZXh0ZXJuYWxVcmxDb25maWc6IHtcbiAgICAgICAgICBhY2Nlc3NVcmw6IHVybCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAvLyBkb2NzOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29ubmVjdC9sYXRlc3QvYWRtaW5ndWlkZS8zcC1hcHBzLWV2ZW50cy1yZXF1ZXN0cy5odG1sXG4gICAgICBwZXJtaXNzaW9uczogW1xuICAgICAgICAnVXNlci5EZXRhaWxzLlZpZXcnLFxuICAgICAgICAnVXNlci5Db25maWd1cmF0aW9uLlZpZXcnLFxuICAgICAgICAnVXNlci5TdGF0dXMuVmlldycsXG4gICAgICAgICdDb250YWN0LkRldGFpbHMuVmlldycsXG4gICAgICAgICdDb250YWN0LkN1c3RvbWVyRGV0YWlscy5WaWV3JyxcbiAgICAgICAgJ0NvbnRhY3QuVmFyaWFibGVzLlZpZXcnLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gbmV3IENmbkludGVncmF0aW9uQXNzb2NpYXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJzNwQXBwQXNzb2NpYXRpb24nLFxuICAgICAge1xuICAgICAgICBpbnN0YW5jZUlkOiBjb25uZWN0SW5zdGFuY2VBcm4sXG4gICAgICAgIGludGVncmF0aW9uVHlwZTogJ0FQUExJQ0FUSU9OJyxcbiAgICAgICAgaW50ZWdyYXRpb25Bcm46IGFwcC5hdHRyQXBwbGljYXRpb25Bcm4sXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFNlY3VyaXR5UHJvZmlsZVByb3ZpZGVyKFxuICAgICAgdGhpcyxcbiAgICAgICdTZWN1cml0eVByb2ZpbGVQcm92aWRlcicsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RJbnN0YW5jZUFybixcbiAgICAgIH1cbiAgICApO1xuICAgIHByb3ZpZGVyLm5vZGUuYWRkRGVwZW5kZW5jeShhc3NvY2lhdGlvbik7XG5cbiAgICAvLyBBdXRvbWF0aWNhbGx5IGFzc29jaWF0ZSB3aXRoIHNlY3VyaXR5IHByb2ZpbGVzXG4gICAgY29uc3Qgc2VjdXJpdHlQcm9maWxlcyA9IFsnQWRtaW4nXTtcbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2Ygc2VjdXJpdHlQcm9maWxlcykge1xuICAgICAgcHJvdmlkZXIuYWxsb3dBcHBsaWNhdGlvbihgQWxsb3cke3Byb2ZpbGV9YCwgcHJvZmlsZSwgbmFtZXNwYWNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIER5bmFtb0RCIHRhYmxlIHdpdGggb3B0aW9uYWwgZ2xvYmFsIHRhYmxlIHN1cHBvcnRcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlVGFibGUoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgcHJvZDogYm9vbGVhbixcbiAgICBnbG9iYWxUYWJsZT86IEdsb2JhbFRhYmxlQ29uZmlnXG4gICk6IGR5bmFtb2RiLklUYWJsZSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gcHJlZml4O1xuXG4gICAgaWYgKCFnbG9iYWxUYWJsZSkge1xuICAgICAgLy8gU2luZ2xlLXJlZ2lvbiB0YWJsZVxuICAgICAgcmV0dXJuIG5ldyBkeW5hbW9kYi5UYWJsZVYyKHRoaXMsICdUYWJsZScsIHtcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgICB9LFxuICAgICAgICBiaWxsaW5nOiBkeW5hbW9kYi5CaWxsaW5nLm9uRGVtYW5kKCksXG4gICAgICAgIHBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvZCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvZFxuICAgICAgICAgID8gY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAgICAgICAgOiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbFRhYmxlLmlzUHJpbWFyeVJlZ2lvbikge1xuICAgICAgLy8gUHJpbWFyeSByZWdpb24gY3JlYXRlcyBnbG9iYWwgdGFibGUgd2l0aCByZXBsaWNhc1xuICAgICAgY29uc3QgdGFibGUgPSBuZXcgZHluYW1vZGIuVGFibGVWMih0aGlzLCAnVGFibGUnLCB7XG4gICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgICAgICAgfSxcbiAgICAgICAgYmlsbGluZzogZHluYW1vZGIuQmlsbGluZy5vbkRlbWFuZCgpLFxuICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb2QsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHByb2RcbiAgICAgICAgICA/IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTlxuICAgICAgICAgIDogY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pO1xuICAgICAgaWYgKGdsb2JhbFRhYmxlLnJlcGxpY2FSZWdpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIGdsb2JhbFRhYmxlLnJlcGxpY2FSZWdpb25zKSB7XG4gICAgICAgICAgdGFibGUuYWRkUmVwbGljYSh7XG4gICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb2QsXG4gICAgICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2Vjb25kYXJ5IHJlZ2lvbiByZWZlcmVuY2VzIGV4aXN0aW5nIGdsb2JhbCB0YWJsZVxuICAgICAgcmV0dXJuIGR5bmFtb2RiLlRhYmxlLmZyb21UYWJsZUFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgYGFybjphd3M6ZHluYW1vZGI6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLmFjY291bnR9OnRhYmxlLyR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgVlBDIGNvbmZpZ3VyYXRpb24gc3RyaW5nIElEcyB0byBDREsgb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlVnBjQ29uZmlnKHZwY0NvbmZpZzogTGFtYmRhVnBjQ29uZmlnKTogUmVzb2x2ZWRWcGNDb25maWcge1xuICAgIGNvbnN0IHsgdnBjSWQsIHNlY3VyaXR5R3JvdXBJZHMsIHN1Ym5ldElkcyB9ID0gdnBjQ29uZmlnO1xuXG4gICAgLy8gUmVzb2x2ZSBWUENcbiAgICBjb25zdCB2cGMgPSBlYzIuVnBjLmZyb21Mb29rdXAodGhpcywgJ1Jlc29sdmVkVnBjJywgeyB2cGNJZCB9KTtcblxuICAgIC8vIFJlc29sdmUgTGFtYmRhIHNlY3VyaXR5IGdyb3Vwc1xuICAgIGNvbnN0IGxhbWJkYVNlY3VyaXR5R3JvdXBzID0gc2VjdXJpdHlHcm91cElkcy5tYXAoKHNnSWQsIGluZGV4KSA9PlxuICAgICAgZWMyLlNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYExhbWJkYVNlY3VyaXR5R3JvdXAke2luZGV4fWAsXG4gICAgICAgIHNnSWRcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gUmVzb2x2ZSBwcml2YXRlIHN1Ym5ldHNcbiAgICBjb25zdCBwcml2YXRlU3VibmV0cyA9IHN1Ym5ldElkcy5tYXAoKHN1Ym5ldElkLCBpbmRleCkgPT5cbiAgICAgIGVjMi5TdWJuZXQuZnJvbVN1Ym5ldElkKHRoaXMsIGBQcml2YXRlU3VibmV0JHtpbmRleH1gLCBzdWJuZXRJZClcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZwYyxcbiAgICAgIGxhbWJkYVNlY3VyaXR5R3JvdXBzLFxuICAgICAgcHJpdmF0ZVN1Ym5ldHMsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -10,7 +10,7 @@ class GetConfig extends constructs_1.Construct {
10
10
  super(stack, 'GetConfig');
11
11
  const { connectInstanceArn, prefix } = stack.props;
12
12
  this.function = (0, createLambda_1.createLambda)(this, 'Handler', {
13
- functionName: `${prefix}-get-config`,
13
+ functionName: prefix,
14
14
  environment: {
15
15
  FLOW_CONFIGS_TABLE_NAME: stack.table.tableName,
16
16
  },
@@ -31,4 +31,4 @@ class GetConfig extends constructs_1.Construct {
31
31
  }
32
32
  }
33
33
  exports.GetConfig = GetConfig;
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9HZXRDb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLGtEQUErQztBQUkvQyx5REFBb0U7QUFDcEUsbUNBQW1DO0FBRW5DLE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBRXRDLFlBQVksS0FBc0I7UUFDaEMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUxQixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMkJBQVksRUFBZSxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzFELFlBQVksRUFBRSxHQUFHLE1BQU0sYUFBYTtZQUNwQyxXQUFXLEVBQUU7Z0JBQ1gsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTO2FBQy9DO1lBQ0QsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlDLDRFQUE0RTtRQUM1RSxJQUFJLHVDQUF5QixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUM5RCxVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLGVBQWUsRUFBRSxpQkFBaUI7WUFDbEMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztTQUMxQyxDQUFDLENBQUM7UUFFSCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMseUJBQXlCLEVBQUU7WUFDckQsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztZQUNwRSxTQUFTLEVBQUUsa0JBQWtCO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTlCRCw4QkE4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGNyZWF0ZUxhbWJkYSB9IGZyb20gJy4uL2NyZWF0ZUxhbWJkYSc7XG5pbXBvcnQgeyBGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgRmxvd0NvbmZpZ1N0YWNrIH0gZnJvbSAnLi4vRmxvd0NvbmZpZ1N0YWNrJztcbmltcG9ydCB7IEdldENvbmZpZ0VudiB9IGZyb20gJy4vR2V0Q29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDZm5JbnRlZ3JhdGlvbkFzc29jaWF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvbm5lY3QnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcblxuZXhwb3J0IGNsYXNzIEdldENvbmZpZyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uOiBGdW5jdGlvbjtcbiAgY29uc3RydWN0b3Ioc3RhY2s6IEZsb3dDb25maWdTdGFjaykge1xuICAgIHN1cGVyKHN0YWNrLCAnR2V0Q29uZmlnJyk7XG5cbiAgICBjb25zdCB7IGNvbm5lY3RJbnN0YW5jZUFybiwgcHJlZml4IH0gPSBzdGFjay5wcm9wcztcblxuICAgIHRoaXMuZnVuY3Rpb24gPSBjcmVhdGVMYW1iZGE8R2V0Q29uZmlnRW52Pih0aGlzLCAnSGFuZGxlcicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYCR7cHJlZml4fS1nZXQtY29uZmlnYCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEZMT1dfQ09ORklHU19UQUJMRV9OQU1FOiBzdGFjay50YWJsZS50YWJsZU5hbWUsXG4gICAgICB9LFxuICAgICAgYWxlcnRUb3BpYzogc3RhY2suYWxlcnRUb3BpYyxcbiAgICB9KTtcblxuICAgIHN0YWNrLnRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YSh0aGlzLmZ1bmN0aW9uKTtcblxuICAgIC8vIEFzc29jaWF0ZSBMYW1iZGEgd2l0aCBDb25uZWN0IGluc3RhbmNlIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNvbnRhY3QgZmxvd3NcbiAgICBuZXcgQ2ZuSW50ZWdyYXRpb25Bc3NvY2lhdGlvbih0aGlzLCAnQ29ubmVjdExhbWJkYUFzc29jaWF0aW9uJywge1xuICAgICAgaW5zdGFuY2VJZDogY29ubmVjdEluc3RhbmNlQXJuLFxuICAgICAgaW50ZWdyYXRpb25UeXBlOiAnTEFNQkRBX0ZVTkNUSU9OJyxcbiAgICAgIGludGVncmF0aW9uQXJuOiB0aGlzLmZ1bmN0aW9uLmZ1bmN0aW9uQXJuLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgQ29ubmVjdCBwZXJtaXNzaW9uIHRvIGludm9rZSB0aGUgTGFtYmRhXG4gICAgdGhpcy5mdW5jdGlvbi5hZGRQZXJtaXNzaW9uKCdDb25uZWN0SW52b2tlUGVybWlzc2lvbicsIHtcbiAgICAgIHByaW5jaXBhbDogbmV3IGNkay5hd3NfaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2Nvbm5lY3QuYW1hem9uYXdzLmNvbScpLFxuICAgICAgc291cmNlQXJuOiBjb25uZWN0SW5zdGFuY2VBcm4sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9HZXRDb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLGtEQUErQztBQUkvQyx5REFBb0U7QUFDcEUsbUNBQW1DO0FBRW5DLE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBRXRDLFlBQVksS0FBc0I7UUFDaEMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUxQixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMkJBQVksRUFBZSxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzFELFlBQVksRUFBRSxNQUFNO1lBQ3BCLFdBQVcsRUFBRTtnQkFDWCx1QkFBdUIsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVM7YUFDL0M7WUFDRCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUMsNEVBQTRFO1FBQzVFLElBQUksdUNBQXlCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQzlELFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsZUFBZSxFQUFFLGlCQUFpQjtZQUNsQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXO1NBQzFDLENBQUMsQ0FBQztRQUVILGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRTtZQUNyRCxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDO1lBQ3BFLFNBQVMsRUFBRSxrQkFBa0I7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBOUJELDhCQThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgY3JlYXRlTGFtYmRhIH0gZnJvbSAnLi4vY3JlYXRlTGFtYmRhJztcbmltcG9ydCB7IEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBGbG93Q29uZmlnU3RhY2sgfSBmcm9tICcuLi9GbG93Q29uZmlnU3RhY2snO1xuaW1wb3J0IHsgR2V0Q29uZmlnRW52IH0gZnJvbSAnLi9HZXRDb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENmbkludGVncmF0aW9uQXNzb2NpYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29ubmVjdCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuXG5leHBvcnQgY2xhc3MgR2V0Q29uZmlnIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgZnVuY3Rpb246IEZ1bmN0aW9uO1xuICBjb25zdHJ1Y3RvcihzdGFjazogRmxvd0NvbmZpZ1N0YWNrKSB7XG4gICAgc3VwZXIoc3RhY2ssICdHZXRDb25maWcnKTtcblxuICAgIGNvbnN0IHsgY29ubmVjdEluc3RhbmNlQXJuLCBwcmVmaXggfSA9IHN0YWNrLnByb3BzO1xuXG4gICAgdGhpcy5mdW5jdGlvbiA9IGNyZWF0ZUxhbWJkYTxHZXRDb25maWdFbnY+KHRoaXMsICdIYW5kbGVyJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBwcmVmaXgsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBGTE9XX0NPTkZJR1NfVEFCTEVfTkFNRTogc3RhY2sudGFibGUudGFibGVOYW1lLFxuICAgICAgfSxcbiAgICAgIGFsZXJ0VG9waWM6IHN0YWNrLmFsZXJ0VG9waWMsXG4gICAgfSk7XG5cbiAgICBzdGFjay50YWJsZS5ncmFudFJlYWRXcml0ZURhdGEodGhpcy5mdW5jdGlvbik7XG5cbiAgICAvLyBBc3NvY2lhdGUgTGFtYmRhIHdpdGggQ29ubmVjdCBpbnN0YW5jZSBzbyBpdCBjYW4gYmUgdXNlZCBpbiBjb250YWN0IGZsb3dzXG4gICAgbmV3IENmbkludGVncmF0aW9uQXNzb2NpYXRpb24odGhpcywgJ0Nvbm5lY3RMYW1iZGFBc3NvY2lhdGlvbicsIHtcbiAgICAgIGluc3RhbmNlSWQ6IGNvbm5lY3RJbnN0YW5jZUFybixcbiAgICAgIGludGVncmF0aW9uVHlwZTogJ0xBTUJEQV9GVU5DVElPTicsXG4gICAgICBpbnRlZ3JhdGlvbkFybjogdGhpcy5mdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IENvbm5lY3QgcGVybWlzc2lvbiB0byBpbnZva2UgdGhlIExhbWJkYVxuICAgIHRoaXMuZnVuY3Rpb24uYWRkUGVybWlzc2lvbignQ29ubmVjdEludm9rZVBlcm1pc3Npb24nLCB7XG4gICAgICBwcmluY2lwYWw6IG5ldyBjZGsuYXdzX2lhbS5TZXJ2aWNlUHJpbmNpcGFsKCdjb25uZWN0LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIHNvdXJjZUFybjogY29ubmVjdEluc3RhbmNlQXJuLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,11 +1,14 @@
1
1
  import { Construct } from 'constructs';
2
2
  import { SpecRestApi } from 'aws-cdk-lib/aws-apigateway';
3
+ import { IInterfaceVpcEndpoint } from 'aws-cdk-lib/aws-ec2';
3
4
  import { FlowConfigStack } from '../FlowConfigStack';
4
5
  import { Static } from './Static';
5
6
  export declare class Api extends Construct {
6
7
  stack: FlowConfigStack;
7
- staticHosting: Static;
8
- restApi: SpecRestApi;
8
+ readonly staticHosting: Static;
9
+ readonly restApi: SpecRestApi;
10
+ readonly vpcEndpoint?: IInterfaceVpcEndpoint;
11
+ readonly url: string;
9
12
  constructor(stack: FlowConfigStack);
10
13
  /**
11
14
  * Create a resource policy for the VPC endpoint to restrict access to the specific VPC
@@ -9,6 +9,7 @@ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
9
9
  const Init_1 = require("./Init");
10
10
  const FlowConfig_1 = require("./FlowConfig");
11
11
  const PreviewSpeech_1 = require("./PreviewSpeech");
12
+ const Settings_1 = require("./Settings");
12
13
  const yaml_1 = require("yaml");
13
14
  const fs_1 = require("fs");
14
15
  const Users_1 = require("./Users");
@@ -19,32 +20,31 @@ class Api extends constructs_1.Construct {
19
20
  this.stack = stack;
20
21
  // Create static hosting construct first
21
22
  this.staticHosting = new Static_1.Static(this);
22
- // Configure API Gateway based on VPC settings
23
- const vpcConfig = stack._getResolvedVpcConfig();
24
- const apiGatewayProps = vpcConfig
23
+ const { prefix, apiVpcConfig: apiVpcEndpoint } = stack.props;
24
+ this.vpcEndpoint = apiVpcEndpoint
25
+ ? aws_ec2_1.InterfaceVpcEndpoint.fromInterfaceVpcEndpointAttributes(this, 'ExistingVpcEndpoint', {
26
+ vpcEndpointId: apiVpcEndpoint.vpcEndpointId,
27
+ port: 443,
28
+ })
29
+ : undefined;
30
+ const apiGatewayProps = this.vpcEndpoint && apiVpcEndpoint?.vpcId
25
31
  ? {
26
- restApiName: stack.props.prefix,
32
+ restApiName: prefix,
27
33
  endpointConfiguration: {
28
34
  types: [aws_apigateway_1.EndpointType.PRIVATE],
29
- vpcEndpoints: [
30
- new aws_ec2_1.InterfaceVpcEndpoint(this, 'ApiVpcEndpoint', {
31
- vpc: vpcConfig.vpc,
32
- service: aws_ec2_1.InterfaceVpcEndpointAwsService.APIGATEWAY,
33
- subnets: { subnets: vpcConfig.privateSubnets },
34
- securityGroups: vpcConfig.vpcEndpointSecurityGroups,
35
- }),
36
- ],
35
+ vpcEndpoints: [this.vpcEndpoint],
37
36
  },
38
- policy: this.createVpcEndpointPolicy(vpcConfig.vpc.vpcId),
37
+ policy: this.createVpcEndpointPolicy(apiVpcEndpoint.vpcId),
39
38
  }
40
39
  : {
41
- restApiName: stack.props.prefix,
40
+ restApiName: prefix,
42
41
  };
43
42
  // Create Lambda functions
44
43
  const initLambda = new Init_1.Init(this).lambda;
45
44
  const usersLambda = new Users_1.Users(this).lambda;
46
45
  const flowConfigLambda = new FlowConfig_1.FlowConfig(this).lambda;
47
46
  const previewSpeechLambda = new PreviewSpeech_1.PreviewSpeech(this).lambda;
47
+ const settingsLambda = new Settings_1.Settings(this).lambda;
48
48
  const staticLambda = this.staticHosting.handler;
49
49
  // Update Authorizer Provider ARN
50
50
  const sourceFileName = (0, path_1.join)(__dirname, 'spec.yaml');
@@ -67,6 +67,8 @@ class Api extends constructs_1.Construct {
67
67
  setLambdaIntegration('/api/flow-config/{id}', 'delete', flowConfigLambda);
68
68
  setLambdaIntegration('/api/flow-config/preview', 'post', flowConfigLambda);
69
69
  setLambdaIntegration('/api/preview-speech', 'post', previewSpeechLambda);
70
+ setLambdaIntegration('/api/settings', 'get', settingsLambda);
71
+ setLambdaIntegration('/api/settings', 'post', settingsLambda);
70
72
  setLambdaIntegration('/{proxy+}', 'get', staticLambda);
71
73
  setLambdaIntegration('/', 'get', staticLambda);
72
74
  // Create API Gateway from updated OpenAPI spec
@@ -80,7 +82,11 @@ class Api extends constructs_1.Construct {
80
82
  usersLambda.grantInvoke(apiGatewayPrincipal);
81
83
  flowConfigLambda.grantInvoke(apiGatewayPrincipal);
82
84
  previewSpeechLambda.grantInvoke(apiGatewayPrincipal);
85
+ settingsLambda.grantInvoke(apiGatewayPrincipal);
83
86
  staticLambda.grantInvoke(apiGatewayPrincipal);
87
+ this.url = this.vpcEndpoint
88
+ ? `https://${this.restApi.restApiId}-${this.vpcEndpoint.vpcEndpointId}.execute-api.${stack.region}.amazonaws.com/prod`
89
+ : `https://${this.restApi.restApiId}.execute-api.${stack.region}.amazonaws.com/prod`;
84
90
  }
85
91
  /**
86
92
  * Create a resource policy for the VPC endpoint to restrict access to the specific VPC
@@ -104,4 +110,4 @@ class Api extends constructs_1.Construct {
104
110
  }
105
111
  }
106
112
  exports.Api = Api;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvYXBpL0FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsK0JBQTRCO0FBQzVCLCtEQUtvQztBQUNwQyxpREFNNkI7QUFDN0IsaURBRzZCO0FBQzdCLGlDQUE4QjtBQUM5Qiw2Q0FBMEM7QUFDMUMsbURBQWdEO0FBQ2hELCtCQUE2QjtBQUM3QiwyQkFBa0M7QUFFbEMsbUNBQWdDO0FBQ2hDLHFDQUFrQztBQUVsQyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUloQyxZQUFtQixLQUFzQjtRQUN2QyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBREgsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFHdkMsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsOENBQThDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hELE1BQU0sZUFBZSxHQUFxQixTQUFTO1lBQ2pELENBQUMsQ0FBQztnQkFDRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUMvQixxQkFBcUIsRUFBRTtvQkFDckIsS0FBSyxFQUFFLENBQUMsNkJBQVksQ0FBQyxPQUFPLENBQUM7b0JBQzdCLFlBQVksRUFBRTt3QkFDWixJQUFJLDhCQUFvQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTs0QkFDL0MsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHOzRCQUNsQixPQUFPLEVBQUUsd0NBQThCLENBQUMsVUFBVTs0QkFDbEQsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxjQUFjLEVBQUU7NEJBQzlDLGNBQWMsRUFBRSxTQUFTLENBQUMseUJBQXlCO3lCQUNwRCxDQUFDO3FCQUNIO2lCQUNG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MEJBQTBCLENBQzNCLENBQUM7UUFDRixVQUFVLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDNUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzdDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JELFlBQVksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUIsQ0FBQyxLQUFhO1FBQzNDLE9BQU8sSUFBSSx3QkFBYyxDQUFDO1lBQ3hCLFVBQVUsRUFBRTtnQkFDVixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7b0JBQ3BCLFVBQVUsRUFBRSxDQUFDLElBQUksc0JBQVksRUFBRSxDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQzFCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDaEIsVUFBVSxFQUFFO3dCQUNWLFlBQVksRUFBRTs0QkFDWixlQUFlLEVBQUUsS0FBSzt5QkFDdkI7cUJBQ0Y7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBN0dELGtCQTZHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgRW5kcG9pbnRUeXBlLFxuICBSZXN0QXBpQmFzZVByb3BzLFxuICBTcGVjUmVzdEFwaSxcbiAgQXBpRGVmaW5pdGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHtcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgRWZmZWN0LFxuICBBbnlQcmluY2lwYWwsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnQsXG4gIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBJbml0IH0gZnJvbSAnLi9Jbml0JztcbmltcG9ydCB7IEZsb3dDb25maWcgfSBmcm9tICcuL0Zsb3dDb25maWcnO1xuaW1wb3J0IHsgUHJldmlld1NwZWVjaCB9IGZyb20gJy4vUHJldmlld1NwZWVjaCc7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgRmxvd0NvbmZpZ1N0YWNrIH0gZnJvbSAnLi4vRmxvd0NvbmZpZ1N0YWNrJztcbmltcG9ydCB7IFVzZXJzIH0gZnJvbSAnLi9Vc2Vycyc7XG5pbXBvcnQgeyBTdGF0aWMgfSBmcm9tICcuL1N0YXRpYyc7XG5cbmV4cG9ydCBjbGFzcyBBcGkgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBzdGF0aWNIb3N0aW5nOiBTdGF0aWM7XG4gIHJlc3RBcGk6IFNwZWNSZXN0QXBpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFjazogRmxvd0NvbmZpZ1N0YWNrKSB7XG4gICAgc3VwZXIoc3RhY2ssICdBcGknKTtcblxuICAgIC8vIENyZWF0ZSBzdGF0aWMgaG9zdGluZyBjb25zdHJ1Y3QgZmlyc3RcbiAgICB0aGlzLnN0YXRpY0hvc3RpbmcgPSBuZXcgU3RhdGljKHRoaXMpO1xuXG4gICAgLy8gQ29uZmlndXJlIEFQSSBHYXRld2F5IGJhc2VkIG9uIFZQQyBzZXR0aW5nc1xuICAgIGNvbnN0IHZwY0NvbmZpZyA9IHN0YWNrLl9nZXRSZXNvbHZlZFZwY0NvbmZpZygpO1xuICAgIGNvbnN0IGFwaUdhdGV3YXlQcm9wczogUmVzdEFwaUJhc2VQcm9wcyA9IHZwY0NvbmZpZ1xuICAgICAgPyB7XG4gICAgICAgICAgcmVzdEFwaU5hbWU6IHN0YWNrLnByb3BzLnByZWZpeCxcbiAgICAgICAgICBlbmRwb2ludENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIHR5cGVzOiBbRW5kcG9pbnRUeXBlLlBSSVZBVEVdLFxuICAgICAgICAgICAgdnBjRW5kcG9pbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCAnQXBpVnBjRW5kcG9pbnQnLCB7XG4gICAgICAgICAgICAgICAgdnBjOiB2cGNDb25maWcudnBjLFxuICAgICAgICAgICAgICAgIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5BUElHQVRFV0FZLFxuICAgICAgICAgICAgICAgIHN1Ym5ldHM6IHsgc3VibmV0czogdnBjQ29uZmlnLnByaXZhdGVTdWJuZXRzIH0sXG4gICAgICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHZwY0NvbmZpZy52cGNFbmRwb2ludFNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb2xpY3k6IHRoaXMuY3JlYXRlVnBjRW5kcG9pbnRQb2xpY3kodnBjQ29uZmlnLnZwYy52cGNJZCksXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIHJlc3RBcGlOYW1lOiBzdGFjay5wcm9wcy5wcmVmaXgsXG4gICAgICAgIH07XG5cbiAgICAvLyBDcmVhdGUgTGFtYmRhIGZ1bmN0aW9uc1xuICAgIGNvbnN0IGluaXRMYW1iZGEgPSBuZXcgSW5pdCh0aGlzKS5sYW1iZGE7XG4gICAgY29uc3QgdXNlcnNMYW1iZGEgPSBuZXcgVXNlcnModGhpcykubGFtYmRhO1xuICAgIGNvbnN0IGZsb3dDb25maWdMYW1iZGEgPSBuZXcgRmxvd0NvbmZpZyh0aGlzKS5sYW1iZGE7XG4gICAgY29uc3QgcHJldmlld1NwZWVjaExhbWJkYSA9IG5ldyBQcmV2aWV3U3BlZWNoKHRoaXMpLmxhbWJkYTtcbiAgICBjb25zdCBzdGF0aWNMYW1iZGEgPSB0aGlzLnN0YXRpY0hvc3RpbmcuaGFuZGxlcjtcblxuICAgIC8vIFVwZGF0ZSBBdXRob3JpemVyIFByb3ZpZGVyIEFSTlxuICAgIGNvbnN0IHNvdXJjZUZpbGVOYW1lID0gam9pbihfX2Rpcm5hbWUsICdzcGVjLnlhbWwnKTtcbiAgICBjb25zdCB5bWwgPSByZWFkRmlsZVN5bmMoc291cmNlRmlsZU5hbWUpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3BlYyA9IHBhcnNlKHltbCk7XG5cbiAgICBjb25zdCBhdXRob3JpemVyID0gc3BlYy5jb21wb25lbnRzLnNlY3VyaXR5U2NoZW1lcy5Db2duaXRvQXV0aG9yaXplcjtcbiAgICBhdXRob3JpemVyWyd4LWFtYXpvbi1hcGlnYXRld2F5LWF1dGhvcml6ZXInXS5wcm92aWRlckFSTnMgPSBbXG4gICAgICBzdGFjay51c2VyUG9vbC51c2VyUG9vbEFybixcbiAgICBdO1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHNldCBMYW1iZGEgaW50ZWdyYXRpb24gVVJJXG4gICAgY29uc3Qgc2V0TGFtYmRhSW50ZWdyYXRpb24gPSAoXG4gICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICBtZXRob2Q6IHN0cmluZyxcbiAgICAgIGxhbWJkYTogYW55XG4gICAgKSA9PiB7XG4gICAgICBzcGVjLnBhdGhzW3BhdGhdW21ldGhvZF1bXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJ1xuICAgICAgXS51cmkgPSBgYXJuOmF3czphcGlnYXRld2F5OiR7c3RhY2sucmVnaW9ufTpsYW1iZGE6cGF0aC8yMDE1LTAzLTMxL2Z1bmN0aW9ucy8ke2xhbWJkYS5mdW5jdGlvbkFybn0vaW52b2NhdGlvbnNgO1xuICAgIH07XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNwZWMgdG8gcmVwbGFjZSBoYW5kbGVyIFVSSXMgd2l0aCBhY3R1YWwgTGFtYmRhIEFSTnNcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9pbml0JywgJ2dldCcsIGluaXRMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL3VzZXJzL3t1c2VySWR9JywgJ2dldCcsIHVzZXJzTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9mbG93LWNvbmZpZycsICdnZXQnLCBmbG93Q29uZmlnTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9mbG93LWNvbmZpZy97aWR9JywgJ2dldCcsIGZsb3dDb25maWdMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL2Zsb3ctY29uZmlnL3tpZH0nLCAncG9zdCcsIGZsb3dDb25maWdMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL2Zsb3ctY29uZmlnL3tpZH0nLCAnZGVsZXRlJywgZmxvd0NvbmZpZ0xhbWJkYSk7XG4gICAgc2V0TGFtYmRhSW50ZWdyYXRpb24oJy9hcGkvZmxvdy1jb25maWcvcHJldmlldycsICdwb3N0JywgZmxvd0NvbmZpZ0xhbWJkYSk7XG4gICAgc2V0TGFtYmRhSW50ZWdyYXRpb24oJy9hcGkvcHJldmlldy1zcGVlY2gnLCAncG9zdCcsIHByZXZpZXdTcGVlY2hMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcve3Byb3h5K30nLCAnZ2V0Jywgc3RhdGljTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignLycsICdnZXQnLCBzdGF0aWNMYW1iZGEpO1xuXG4gICAgLy8gQ3JlYXRlIEFQSSBHYXRld2F5IGZyb20gdXBkYXRlZCBPcGVuQVBJIHNwZWNcbiAgICB0aGlzLnJlc3RBcGkgPSBuZXcgU3BlY1Jlc3RBcGkodGhpcywgJ1Jlc3RBcGknLCB7XG4gICAgICAuLi5hcGlHYXRld2F5UHJvcHMsXG4gICAgICBhcGlEZWZpbml0aW9uOiBBcGlEZWZpbml0aW9uLmZyb21JbmxpbmUoc3BlYyksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBBUEkgR2F0ZXdheSBwZXJtaXNzaW9uIHRvIGludm9rZSBMYW1iZGEgZnVuY3Rpb25zXG4gICAgY29uc3QgYXBpR2F0ZXdheVByaW5jaXBhbCA9IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFxuICAgICAgJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbSdcbiAgICApO1xuICAgIGluaXRMYW1iZGEuZ3JhbnRJbnZva2UoYXBpR2F0ZXdheVByaW5jaXBhbCk7XG4gICAgdXNlcnNMYW1iZGEuZ3JhbnRJbnZva2UoYXBpR2F0ZXdheVByaW5jaXBhbCk7XG4gICAgZmxvd0NvbmZpZ0xhbWJkYS5ncmFudEludm9rZShhcGlHYXRld2F5UHJpbmNpcGFsKTtcbiAgICBwcmV2aWV3U3BlZWNoTGFtYmRhLmdyYW50SW52b2tlKGFwaUdhdGV3YXlQcmluY2lwYWwpO1xuICAgIHN0YXRpY0xhbWJkYS5ncmFudEludm9rZShhcGlHYXRld2F5UHJpbmNpcGFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZXNvdXJjZSBwb2xpY3kgZm9yIHRoZSBWUEMgZW5kcG9pbnQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBzcGVjaWZpYyBWUENcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlVnBjRW5kcG9pbnRQb2xpY3kodnBjSWQ6IHN0cmluZyk6IFBvbGljeURvY3VtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgcHJpbmNpcGFsczogW25ldyBBbnlQcmluY2lwYWwoKV0sXG4gICAgICAgICAgYWN0aW9uczogWydleGVjdXRlLWFwaToqJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgJ2F3czpTb3VyY2VWcGMnOiB2cGNJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvYXBpL0FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsK0JBQTRCO0FBQzVCLCtEQUtvQztBQUNwQyxpREFNNkI7QUFDN0IsaURBRzZCO0FBQzdCLGlDQUE4QjtBQUM5Qiw2Q0FBMEM7QUFDMUMsbURBQWdEO0FBQ2hELHlDQUFzQztBQUN0QywrQkFBNkI7QUFDN0IsMkJBQWtDO0FBRWxDLG1DQUFnQztBQUNoQyxxQ0FBa0M7QUFFbEMsTUFBYSxHQUFJLFNBQVEsc0JBQVM7SUFNaEMsWUFBbUIsS0FBc0I7UUFDdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQURILFVBQUssR0FBTCxLQUFLLENBQWlCO1FBR3ZDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjO1lBQy9CLENBQUMsQ0FBQyw4QkFBb0IsQ0FBQyxrQ0FBa0MsQ0FDckQsSUFBSSxFQUNKLHFCQUFxQixFQUNyQjtnQkFDRSxhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWE7Z0JBQzNDLElBQUksRUFBRSxHQUFHO2FBQ1YsQ0FDRjtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLFdBQVcsSUFBSSxjQUFjLEVBQUUsS0FBSztZQUN2QyxDQUFDLENBQUM7Z0JBQ0UsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLHFCQUFxQixFQUFFO29CQUNyQixLQUFLLEVBQUUsQ0FBQyw2QkFBWSxDQUFDLE9BQU8sQ0FBQztvQkFDN0IsWUFBWSxFQUFFLENBQUMs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QUUsQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLFVBQVUsRUFBRTt3QkFDVixZQUFZLEVBQUU7NEJBQ1osZUFBZSxFQUFFLEtBQUs7eUJBQ3ZCO3FCQUNGO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVIRCxrQkE0SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEVuZHBvaW50VHlwZSxcbiAgUmVzdEFwaUJhc2VQcm9wcyxcbiAgU3BlY1Jlc3RBcGksXG4gIEFwaURlZmluaXRpb24sXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCB7XG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIEVmZmVjdCxcbiAgQW55UHJpbmNpcGFsLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7XG4gIElJbnRlcmZhY2VWcGNFbmRwb2ludCxcbiAgSW50ZXJmYWNlVnBjRW5kcG9pbnQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSW5pdCB9IGZyb20gJy4vSW5pdCc7XG5pbXBvcnQgeyBGbG93Q29uZmlnIH0gZnJvbSAnLi9GbG93Q29uZmlnJztcbmltcG9ydCB7IFByZXZpZXdTcGVlY2ggfSBmcm9tICcuL1ByZXZpZXdTcGVlY2gnO1xuaW1wb3J0IHsgU2V0dGluZ3MgfSBmcm9tICcuL1NldHRpbmdzJztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBGbG93Q29uZmlnU3RhY2sgfSBmcm9tICcuLi9GbG93Q29uZmlnU3RhY2snO1xuaW1wb3J0IHsgVXNlcnMgfSBmcm9tICcuL1VzZXJzJztcbmltcG9ydCB7IFN0YXRpYyB9IGZyb20gJy4vU3RhdGljJztcblxuZXhwb3J0IGNsYXNzIEFwaSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IHN0YXRpY0hvc3Rpbmc6IFN0YXRpYztcbiAgcmVhZG9ubHkgcmVzdEFwaTogU3BlY1Jlc3RBcGk7XG4gIHJlYWRvbmx5IHZwY0VuZHBvaW50PzogSUludGVyZmFjZVZwY0VuZHBvaW50O1xuICByZWFkb25seSB1cmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhY2s6IEZsb3dDb25maWdTdGFjaykge1xuICAgIHN1cGVyKHN0YWNrLCAnQXBpJyk7XG5cbiAgICAvLyBDcmVhdGUgc3RhdGljIGhvc3RpbmcgY29uc3RydWN0IGZpcnN0XG4gICAgdGhpcy5zdGF0aWNIb3N0aW5nID0gbmV3IFN0YXRpYyh0aGlzKTtcblxuICAgIGNvbnN0IHsgcHJlZml4LCBhcGlWcGNDb25maWc6IGFwaVZwY0VuZHBvaW50IH0gPSBzdGFjay5wcm9wcztcblxuICAgIHRoaXMudnBjRW5kcG9pbnQgPSBhcGlWcGNFbmRwb2ludFxuICAgICAgPyBJbnRlcmZhY2VWcGNFbmRwb2ludC5mcm9tSW50ZXJmYWNlVnBjRW5kcG9pbnRBdHRyaWJ1dGVzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ0V4aXN0aW5nVnBjRW5kcG9pbnQnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZwY0VuZHBvaW50SWQ6IGFwaVZwY0VuZHBvaW50LnZwY0VuZHBvaW50SWQsXG4gICAgICAgICAgICBwb3J0OiA0NDMsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFwaUdhdGV3YXlQcm9wczogUmVzdEFwaUJhc2VQcm9wcyA9XG4gICAgICB0aGlzLnZwY0VuZHBvaW50ICYmIGFwaVZwY0VuZHBvaW50Py52cGNJZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHJlc3RBcGlOYW1lOiBwcmVmaXgsXG4gICAgICAgICAgICBlbmRwb2ludENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgdHlwZXM6IFtFbmRwb2ludFR5cGUuUFJJVkFURV0sXG4gICAgICAgICAgICAgIHZwY0VuZHBvaW50czogW3RoaXMudnBjRW5kcG9pbnRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvbGljeTogdGhpcy5jcmVhdGVWcGNFbmRwb2ludFBvbGljeShhcGlWcGNFbmRwb2ludC52cGNJZCksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHJlc3RBcGlOYW1lOiBwcmVmaXgsXG4gICAgICAgICAgfTtcblxuICAgIC8vIENyZWF0ZSBMYW1iZGEgZnVuY3Rpb25zXG4gICAgY29uc3QgaW5pdExhbWJkYSA9IG5ldyBJbml0KHRoaXMpLmxhbWJkYTtcbiAgICBjb25zdCB1c2Vyc0xhbWJkYSA9IG5ldyBVc2Vycyh0aGlzKS5sYW1iZGE7XG4gICAgY29uc3QgZmxvd0NvbmZpZ0xhbWJkYSA9IG5ldyBGbG93Q29uZmlnKHRoaXMpLmxhbWJkYTtcbiAgICBjb25zdCBwcmV2aWV3U3BlZWNoTGFtYmRhID0gbmV3IFByZXZpZXdTcGVlY2godGhpcykubGFtYmRhO1xuICAgIGNvbnN0IHNldHRpbmdzTGFtYmRhID0gbmV3IFNldHRpbmdzKHRoaXMpLmxhbWJkYTtcbiAgICBjb25zdCBzdGF0aWNMYW1iZGEgPSB0aGlzLnN0YXRpY0hvc3RpbmcuaGFuZGxlcjtcblxuICAgIC8vIFVwZGF0ZSBBdXRob3JpemVyIFByb3ZpZGVyIEFSTlxuICAgIGNvbnN0IHNvdXJjZUZpbGVOYW1lID0gam9pbihfX2Rpcm5hbWUsICdzcGVjLnlhbWwnKTtcbiAgICBjb25zdCB5bWwgPSByZWFkRmlsZVN5bmMoc291cmNlRmlsZU5hbWUpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3BlYyA9IHBhcnNlKHltbCk7XG5cbiAgICBjb25zdCBhdXRob3JpemVyID0gc3BlYy5jb21wb25lbnRzLnNlY3VyaXR5U2NoZW1lcy5Db2duaXRvQXV0aG9yaXplcjtcbiAgICBhdXRob3JpemVyWyd4LWFtYXpvbi1hcGlnYXRld2F5LWF1dGhvcml6ZXInXS5wcm92aWRlckFSTnMgPSBbXG4gICAgICBzdGFjay51c2VyUG9vbC51c2VyUG9vbEFybixcbiAgICBdO1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHNldCBMYW1iZGEgaW50ZWdyYXRpb24gVVJJXG4gICAgY29uc3Qgc2V0TGFtYmRhSW50ZWdyYXRpb24gPSAoXG4gICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICBtZXRob2Q6IHN0cmluZyxcbiAgICAgIGxhbWJkYTogYW55XG4gICAgKSA9PiB7XG4gICAgICBzcGVjLnBhdGhzW3BhdGhdW21ldGhvZF1bXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJ1xuICAgICAgXS51cmkgPSBgYXJuOmF3czphcGlnYXRld2F5OiR7c3RhY2sucmVnaW9ufTpsYW1iZGE6cGF0aC8yMDE1LTAzLTMxL2Z1bmN0aW9ucy8ke2xhbWJkYS5mdW5jdGlvbkFybn0vaW52b2NhdGlvbnNgO1xuICAgIH07XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNwZWMgdG8gcmVwbGFjZSBoYW5kbGVyIFVSSXMgd2l0aCBhY3R1YWwgTGFtYmRhIEFSTnNcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9pbml0JywgJ2dldCcsIGluaXRMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL3VzZXJzL3t1c2VySWR9JywgJ2dldCcsIHVzZXJzTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9mbG93LWNvbmZpZycsICdnZXQnLCBmbG93Q29uZmlnTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9mbG93LWNvbmZpZy97aWR9JywgJ2dldCcsIGZsb3dDb25maWdMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL2Zsb3ctY29uZmlnL3tpZH0nLCAncG9zdCcsIGZsb3dDb25maWdMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL2Zsb3ctY29uZmlnL3tpZH0nLCAnZGVsZXRlJywgZmxvd0NvbmZpZ0xhbWJkYSk7XG4gICAgc2V0TGFtYmRhSW50ZWdyYXRpb24oJy9hcGkvZmxvdy1jb25maWcvcHJldmlldycsICdwb3N0JywgZmxvd0NvbmZpZ0xhbWJkYSk7XG4gICAgc2V0TGFtYmRhSW50ZWdyYXRpb24oJy9hcGkvcHJldmlldy1zcGVlY2gnLCAncG9zdCcsIHByZXZpZXdTcGVlY2hMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcvYXBpL3NldHRpbmdzJywgJ2dldCcsIHNldHRpbmdzTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignL2FwaS9zZXR0aW5ncycsICdwb3N0Jywgc2V0dGluZ3NMYW1iZGEpO1xuICAgIHNldExhbWJkYUludGVncmF0aW9uKCcve3Byb3h5K30nLCAnZ2V0Jywgc3RhdGljTGFtYmRhKTtcbiAgICBzZXRMYW1iZGFJbnRlZ3JhdGlvbignLycsICdnZXQnLCBzdGF0aWNMYW1iZGEpO1xuXG4gICAgLy8gQ3JlYXRlIEFQSSBHYXRld2F5IGZyb20gdXBkYXRlZCBPcGVuQVBJIHNwZWNcbiAgICB0aGlzLnJlc3RBcGkgPSBuZXcgU3BlY1Jlc3RBcGkodGhpcywgJ1Jlc3RBcGknLCB7XG4gICAgICAuLi5hcGlHYXRld2F5UHJvcHMsXG4gICAgICBhcGlEZWZpbml0aW9uOiBBcGlEZWZpbml0aW9uLmZyb21JbmxpbmUoc3BlYyksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBBUEkgR2F0ZXdheSBwZXJtaXNzaW9uIHRvIGludm9rZSBMYW1iZGEgZnVuY3Rpb25zXG4gICAgY29uc3QgYXBpR2F0ZXdheVByaW5jaXBhbCA9IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFxuICAgICAgJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbSdcbiAgICApO1xuICAgIGluaXRMYW1iZGEuZ3JhbnRJbnZva2UoYXBpR2F0ZXdheVByaW5jaXBhbCk7XG4gICAgdXNlcnNMYW1iZGEuZ3JhbnRJbnZva2UoYXBpR2F0ZXdheVByaW5jaXBhbCk7XG4gICAgZmxvd0NvbmZpZ0xhbWJkYS5ncmFudEludm9rZShhcGlHYXRld2F5UHJpbmNpcGFsKTtcbiAgICBwcmV2aWV3U3BlZWNoTGFtYmRhLmdyYW50SW52b2tlKGFwaUdhdGV3YXlQcmluY2lwYWwpO1xuICAgIHNldHRpbmdzTGFtYmRhLmdyYW50SW52b2tlKGFwaUdhdGV3YXlQcmluY2lwYWwpO1xuICAgIHN0YXRpY0xhbWJkYS5ncmFudEludm9rZShhcGlHYXRld2F5UHJpbmNpcGFsKTtcblxuICAgIHRoaXMudXJsID0gdGhpcy52cGNFbmRwb2ludFxuICAgICAgPyBgaHR0cHM6Ly8ke3RoaXMucmVzdEFwaS5yZXN0QXBpSWR9LSR7dGhpcy52cGNFbmRwb2ludC52cGNFbmRwb2ludElkfS5leGVjdXRlLWFwaS4ke3N0YWNrLnJlZ2lvbn0uYW1hem9uYXdzLmNvbS9wcm9kYFxuICAgICAgOiBgaHR0cHM6Ly8ke3RoaXMucmVzdEFwaS5yZXN0QXBpSWR9LmV4ZWN1dGUtYXBpLiR7c3RhY2sucmVnaW9ufS5hbWF6b25hd3MuY29tL3Byb2RgO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlc291cmNlIHBvbGljeSBmb3IgdGhlIFZQQyBlbmRwb2ludCB0byByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHNwZWNpZmljIFZQQ1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVWcGNFbmRwb2ludFBvbGljeSh2cGNJZDogc3RyaW5nKTogUG9saWN5RG9jdW1lbnQge1xuICAgIHJldHVybiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBwcmluY2lwYWxzOiBbbmV3IEFueVByaW5jaXBhbCgpXSxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2V4ZWN1dGUtYXBpOionXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICAnYXdzOlNvdXJjZVZwYyc6IHZwY0lkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,4 +2,8 @@ export interface InitEnv {
2
2
  stackName: string;
3
3
  userPoolId: string;
4
4
  AWS_REGION?: string;
5
+ /**
6
+ * true/false flag to enable/disable CXBuilder branding in the web app.
7
+ */
8
+ branding: string;
5
9
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5pdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9hcGkvSW5pdC9Jbml0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJbml0RW52IHtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHVzZXJQb29sSWQ6IHN0cmluZztcbiAgQVdTX1JFR0lPTj86IHN0cmluZztcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5pdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9hcGkvSW5pdC9Jbml0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJbml0RW52IHtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHVzZXJQb29sSWQ6IHN0cmluZztcbiAgQVdTX1JFR0lPTj86IHN0cmluZztcbiAgLyoqXG4gICAqIHRydWUvZmFsc2UgZmxhZyB0byBlbmFibGUvZGlzYWJsZSBDWEJ1aWxkZXIgYnJhbmRpbmcgaW4gdGhlIHdlYiBhcHAuXG4gICAqL1xuICBicmFuZGluZzogc3RyaW5nO1xufVxuIl19
@@ -16,6 +16,7 @@ class Init extends constructs_1.Construct {
16
16
  environment: {
17
17
  stackName: stackName,
18
18
  userPoolId: api.stack.props.cognito.userPoolId,
19
+ branding: (api.stack.props.branding ?? true).toString(),
19
20
  },
20
21
  timeout: aws_cdk_lib_1.Duration.seconds(15),
21
22
  initialPolicy: [
@@ -32,4 +33,4 @@ class Init extends constructs_1.Construct {
32
33
  }
33
34
  }
34
35
  exports.Init = Init;
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9hcGkvSW5pdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFJdkMsNkNBQThDO0FBQzlDLGlEQUE4RDtBQUM5RCxxREFBa0Q7QUFFbEQ7O0dBRUc7QUFDSCxNQUFhLElBQUssU0FBUSxzQkFBUztJQUVqQyxZQUFZLEdBQVE7UUFDbEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUEsMkJBQVksRUFBVSxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ25ELFdBQVcsRUFBRTtnQkFDWCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVO2FBQy9DO1lBQ0QsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixhQUFhLEVBQUU7Z0JBQ2IsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO29CQUNwQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDMUMsU0FBUyxFQUFFO3dCQUNULDBCQUEwQixNQUFNLElBQUksT0FBTyxVQUFVLFNBQVMsSUFBSTtxQkFDbkU7aUJBQ0YsQ0FBQzthQUNIO1lBQ0QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVTtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6QkQsb0JBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgSW5pdEVudiB9IGZyb20gJy4vSW5pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBpIH0gZnJvbSAnLi4vQXBpJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBjcmVhdGVMYW1iZGEgfSBmcm9tICcuLi8uLi9jcmVhdGVMYW1iZGEnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBUEkgc3VjaCBhcyBBdXRoLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGxhbWJkYTogRnVuY3Rpb247XG4gIGNvbnN0cnVjdG9yKGFwaTogQXBpKSB7XG4gICAgc3VwZXIoYXBpLCAnSW5pdCcpO1xuXG4gICAgY29uc3QgeyBzdGFja05hbWUsIHJlZ2lvbiwgYWNjb3VudCB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICB0aGlzLmxhbWJkYSA9IGNyZWF0ZUxhbWJkYTxJbml0RW52Pih0aGlzLCAnSGFuZGxlcicsIHtcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIHN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICB1c2VyUG9vbElkOiBhcGkuc3RhY2sucHJvcHMuY29nbml0by51c2VyUG9vbElkLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTUpLFxuICAgICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3JlZ2lvbn06JHthY2NvdW50fTpzdGFjay8ke3N0YWNrTmFtZX0vKmAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgYWxlcnRUb3BpYzogYXBpLnN0YWNrLmFsZXJ0VG9waWMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9hcGkvSW5pdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFJdkMsNkNBQThDO0FBQzlDLGlEQUE4RDtBQUM5RCxxREFBa0Q7QUFFbEQ7O0dBRUc7QUFDSCxNQUFhLElBQUssU0FBUSxzQkFBUztJQUVqQyxZQUFZLEdBQVE7UUFDbEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUEsMkJBQVksRUFBVSxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ25ELFdBQVcsRUFBRTtnQkFDWCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2FBQ3hEO1lBQ0QsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixhQUFhLEVBQUU7Z0JBQ2IsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO29CQUNwQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDMUMsU0FBUyxFQUFFO3dCQUNULDBCQUEwQixNQUFNLElBQUksT0FBTyxVQUFVLFNBQVMsSUFBSTtxQkFDbkU7aUJBQ0YsQ0FBQzthQUNIO1lBQ0QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVTtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUExQkQsb0JBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgSW5pdEVudiB9IGZyb20gJy4vSW5pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBpIH0gZnJvbSAnLi4vQXBpJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBjcmVhdGVMYW1iZGEgfSBmcm9tICcuLi8uLi9jcmVhdGVMYW1iZGEnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBUEkgc3VjaCBhcyBBdXRoLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGxhbWJkYTogRnVuY3Rpb247XG4gIGNvbnN0cnVjdG9yKGFwaTogQXBpKSB7XG4gICAgc3VwZXIoYXBpLCAnSW5pdCcpO1xuXG4gICAgY29uc3QgeyBzdGFja05hbWUsIHJlZ2lvbiwgYWNjb3VudCB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICB0aGlzLmxhbWJkYSA9IGNyZWF0ZUxhbWJkYTxJbml0RW52Pih0aGlzLCAnSGFuZGxlcicsIHtcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIHN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICB1c2VyUG9vbElkOiBhcGkuc3RhY2sucHJvcHMuY29nbml0by51c2VyUG9vbElkLFxuICAgICAgICBicmFuZGluZzogKGFwaS5zdGFjay5wcm9wcy5icmFuZGluZyA/PyB0cnVlKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTUpLFxuICAgICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3JlZ2lvbn06JHthY2NvdW50fTpzdGFjay8ke3N0YWNrTmFtZX0vKmAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgYWxlcnRUb3BpYzogYXBpLnN0YWNrLmFsZXJ0VG9waWMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export interface SettingsEnv {
2
+ TABLE_NAME: string;
3
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0dGluZ3MuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vaW5mcmFzdHJ1Y3R1cmUvYXBpL1NldHRpbmdzL1NldHRpbmdzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc0VudiB7XG4gIFRBQkxFX05BTUU6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { Construct } from 'constructs';
2
+ import { Function } from 'aws-cdk-lib/aws-lambda';
3
+ import { Api } from '../Api';
4
+ export declare class Settings extends Construct {
5
+ readonly lambda: Function;
6
+ constructor(api: Api);
7
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Settings = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const createLambda_1 = require("../../createLambda");
6
+ class Settings extends constructs_1.Construct {
7
+ constructor(api) {
8
+ super(api, 'Settings');
9
+ // Create Lambda function
10
+ this.lambda = (0, createLambda_1.createLambda)(this, 'Handler', {
11
+ environment: {
12
+ TABLE_NAME: api.stack.table.tableName,
13
+ },
14
+ alertTopic: api.stack.alertTopic,
15
+ });
16
+ // Grant DynamoDB permissions
17
+ api.stack.table.grantReadWriteData(this.lambda);
18
+ }
19
+ }
20
+ exports.Settings = Settings;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9pbmZyYXN0cnVjdHVyZS9hcGkvU2V0dGluZ3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLHFEQUFrRDtBQUtsRCxNQUFhLFFBQVMsU0FBUSxzQkFBUztJQUdyQyxZQUFZLEdBQVE7UUFDbEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2Qix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFBLDJCQUFZLEVBQWMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN2RCxXQUFXLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVM7YUFDdEM7WUFDRCxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVO1NBQ2pDLENBQUMsQ0FBQztRQUVILDZCQUE2QjtRQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBakJELDRCQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgY3JlYXRlTGFtYmRhIH0gZnJvbSAnLi4vLi4vY3JlYXRlTGFtYmRhJztcbmltcG9ydCB7IEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTZXR0aW5nc0VudiB9IGZyb20gJy4vU2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwaSB9IGZyb20gJy4uL0FwaSc7XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5ncyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGxhbWJkYTogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoYXBpOiBBcGkpIHtcbiAgICBzdXBlcihhcGksICdTZXR0aW5ncycpO1xuXG4gICAgLy8gQ3JlYXRlIExhbWJkYSBmdW5jdGlvblxuICAgIHRoaXMubGFtYmRhID0gY3JlYXRlTGFtYmRhPFNldHRpbmdzRW52Pih0aGlzLCAnSGFuZGxlcicsIHtcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFRBQkxFX05BTUU6IGFwaS5zdGFjay50YWJsZS50YWJsZU5hbWUsXG4gICAgICB9LFxuICAgICAgYWxlcnRUb3BpYzogYXBpLnN0YWNrLmFsZXJ0VG9waWMsXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBEeW5hbW9EQiBwZXJtaXNzaW9uc1xuICAgIGFwaS5zdGFjay50YWJsZS5ncmFudFJlYWRXcml0ZURhdGEodGhpcy5sYW1iZGEpO1xuICB9XG59XG4iXX0=