cdk-rds-sql 7.0.2 → 7.1.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.
@@ -0,0 +1,20 @@
1
+ import { CustomResource } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ import { Provider } from "./provider";
4
+ export interface IamGrantProps {
5
+ /**
6
+ * Provider.
7
+ */
8
+ readonly provider: Provider;
9
+ /**
10
+ * Database role name to grant IAM access to.
11
+ */
12
+ readonly roleName: string;
13
+ /**
14
+ * IAM resource ARN (role, user, or other IAM principal).
15
+ */
16
+ readonly resourceArn: string;
17
+ }
18
+ export declare class IamGrant extends CustomResource {
19
+ constructor(scope: Construct, id: string, props: IamGrantProps);
20
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.IamGrant = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const dsql = require("aws-cdk-lib/aws-dsql");
8
+ const enum_1 = require("./enum");
9
+ /**
10
+ * Helper function to determine if a cluster is a DSQL cluster
11
+ */
12
+ function isDsqlCluster(cluster) {
13
+ return cluster instanceof dsql.CfnCluster;
14
+ }
15
+ class IamGrant extends aws_cdk_lib_1.CustomResource {
16
+ constructor(scope, id, props) {
17
+ // IAM grants are only supported on DSQL
18
+ if (!isDsqlCluster(props.provider.cluster)) {
19
+ throw new Error("IAM grants are only supported with DSQL clusters. Use regular database authentication for RDS/Aurora clusters.");
20
+ }
21
+ super(scope, id, {
22
+ serviceToken: props.provider.serviceToken,
23
+ properties: {
24
+ Resource: enum_1.RdsSqlResource.IAM_GRANT,
25
+ ResourceId: props.roleName,
26
+ ResourceArn: props.resourceArn,
27
+ },
28
+ });
29
+ this.node.addDependency(props.provider);
30
+ }
31
+ }
32
+ exports.IamGrant = IamGrant;
33
+ _a = JSII_RTTI_SYMBOL_1;
34
+ IamGrant[_a] = { fqn: "cdk-rds-sql.IamGrant", version: "7.1.0" };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWdyYW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2lhbS1ncmFudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUM1Qyw2Q0FBNEM7QUFFNUMsaUNBQXVDO0FBb0J2Qzs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQVk7SUFDakMsT0FBTyxPQUFPLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQTtBQUMzQyxDQUFDO0FBRUQsTUFBYSxRQUFTLFNBQVEsNEJBQWM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FDYixnSEFBZ0gsQ0FDakgsQ0FBQTtRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDekMsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxxQkFBYyxDQUFDLFNBQVM7Z0JBQ2xDLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDMUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2FBQy9CO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7O0FBbEJILDRCQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGRzcWwgZnJvbSBcImF3cy1jZGstbGliL2F3cy1kc3FsXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBJYW1HcmFudFByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IFByb3ZpZGVyXG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHJvbGUgbmFtZSB0byBncmFudCBJQU0gYWNjZXNzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBJQU0gcmVzb3VyY2UgQVJOIChyb2xlLCB1c2VyLCBvciBvdGhlciBJQU0gcHJpbmNpcGFsKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlQXJuOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgY2x1c3RlciBpcyBhIERTUUwgY2x1c3RlclxuICovXG5mdW5jdGlvbiBpc0RzcWxDbHVzdGVyKGNsdXN0ZXI6IGFueSk6IGNsdXN0ZXIgaXMgZHNxbC5DZm5DbHVzdGVyIHtcbiAgcmV0dXJuIGNsdXN0ZXIgaW5zdGFuY2VvZiBkc3FsLkNmbkNsdXN0ZXJcbn1cblxuZXhwb3J0IGNsYXNzIElhbUdyYW50IGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWFtR3JhbnRQcm9wcykge1xuICAgIC8vIElBTSBncmFudHMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIERTUUxcbiAgICBpZiAoIWlzRHNxbENsdXN0ZXIocHJvcHMucHJvdmlkZXIuY2x1c3RlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJJQU0gZ3JhbnRzIGFyZSBvbmx5IHN1cHBvcnRlZCB3aXRoIERTUUwgY2x1c3RlcnMuIFVzZSByZWd1bGFyIGRhdGFiYXNlIGF1dGhlbnRpY2F0aW9uIGZvciBSRFMvQXVyb3JhIGNsdXN0ZXJzLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLklBTV9HUkFOVCxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMucm9sZU5hbWUsXG4gICAgICAgIFJlc291cmNlQXJuOiBwcm9wcy5yZXNvdXJjZUFybixcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgfVxufVxuIl19
package/lib/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export * from "./sql";
4
4
  export * from "./schema";
5
5
  export * from "./role";
6
6
  export * from "./database";
7
+ export * from "./iam-grant";
package/lib/index.js CHANGED
@@ -20,4 +20,5 @@ __exportStar(require("./sql"), exports);
20
20
  __exportStar(require("./schema"), exports);
21
21
  __exportStar(require("./role"), exports);
22
22
  __exportStar(require("./database"), exports);
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFzQjtBQUN0Qiw2Q0FBMEI7QUFDMUIsd0NBQXFCO0FBQ3JCLDJDQUF3QjtBQUN4Qix5Q0FBc0I7QUFDdEIsNkNBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZW51bVwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlclwiXG5leHBvcnQgKiBmcm9tIFwiLi9zcWxcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2NoZW1hXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JvbGVcIlxuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2VcIlxuIl19
23
+ __exportStar(require("./iam-grant"), exports);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFzQjtBQUN0Qiw2Q0FBMEI7QUFDMUIsd0NBQXFCO0FBQ3JCLDJDQUF3QjtBQUN4Qix5Q0FBc0I7QUFDdEIsNkNBQTBCO0FBQzFCLDhDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VudW1cIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3FsXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NjaGVtYVwiXG5leHBvcnQgKiBmcm9tIFwiLi9yb2xlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2lhbS1ncmFudFwiXG4iXX0=
package/lib/provider.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Duration } from "aws-cdk-lib";
2
+ import * as dsql from "aws-cdk-lib/aws-dsql";
2
3
  import { IVpc, SubnetSelection } from "aws-cdk-lib/aws-ec2";
3
4
  import { IFunction } from "aws-cdk-lib/aws-lambda";
4
5
  import * as lambda from "aws-cdk-lib/aws-lambda-nodejs";
@@ -11,10 +12,12 @@ export interface RdsSqlProps {
11
12
  * VPC network to place the provider lambda.
12
13
  *
13
14
  * Normally this is the VPC of your database.
15
+ * Required when your database is only accessible in a VPC.
16
+ * Not required for DSQL as it uses public endpoints with IAM authentication.
14
17
  *
15
18
  * @default - Function is not placed within a VPC.
16
19
  */
17
- readonly vpc: IVpc;
20
+ readonly vpc?: IVpc;
18
21
  /**
19
22
  * Where to place the network provider lambda within the VPC.
20
23
  *
@@ -22,15 +25,21 @@ export interface RdsSqlProps {
22
25
  */
23
26
  readonly vpcSubnets?: SubnetSelection;
24
27
  /**
25
- * Your database.
28
+ * Your database cluster or instance.
29
+ * Supports both traditional RDS/Aurora clusters and DSQL clusters.
30
+ * - For RDS/Aurora: security groups will be configured to allow access
31
+ * - For DSQL: IAM authentication will be used instead of secrets
26
32
  */
27
- readonly cluster: IDatabaseCluster | IDatabaseInstance;
33
+ readonly cluster: IDatabaseCluster | IDatabaseInstance | dsql.CfnCluster;
28
34
  /**
29
35
  * Secret that grants access to your database.
30
36
  *
31
37
  * Usually this is your cluster's master secret.
38
+ * Not required when relying on IAM authentication (such as DSQL).
39
+ *
40
+ * @default - undefined for DSQL clusters using IAM authentication
32
41
  */
33
- readonly secret: ISecret;
42
+ readonly secret?: ISecret;
34
43
  /**
35
44
  * Timeout for lambda to do its work.
36
45
  *
@@ -62,9 +71,9 @@ export interface RdsSqlProps {
62
71
  }
63
72
  export declare class Provider extends Construct {
64
73
  readonly serviceToken: string;
65
- readonly secret: ISecret;
74
+ readonly secret?: ISecret;
66
75
  readonly handler: IFunction;
67
- readonly cluster: IDatabaseCluster | IDatabaseInstance;
76
+ readonly cluster: IDatabaseCluster | IDatabaseInstance | dsql.CfnCluster;
68
77
  /**
69
78
  * The engine like "postgres" or "mysql"
70
79
  *
package/lib/provider.js CHANGED
@@ -6,19 +6,41 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const fs_1 = require("fs");
7
7
  const path = require("path");
8
8
  const aws_cdk_lib_1 = require("aws-cdk-lib");
9
+ const dsql = require("aws-cdk-lib/aws-dsql");
9
10
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
10
11
  const iam = require("aws-cdk-lib/aws-iam");
11
12
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
12
13
  const lambda = require("aws-cdk-lib/aws-lambda-nodejs");
13
14
  const customResources = require("aws-cdk-lib/custom-resources");
14
15
  const constructs_1 = require("constructs");
16
+ /**
17
+ * Helper function to determine if a cluster is a DSQL cluster
18
+ */
19
+ function isDsqlCluster(cluster) {
20
+ return cluster instanceof dsql.CfnCluster;
21
+ }
15
22
  class Provider extends constructs_1.Construct {
16
23
  constructor(scope, id, props) {
17
24
  super(scope, id);
25
+ // Validate configuration
26
+ const isDsql = isDsqlCluster(props.cluster);
27
+ if (!isDsql && !props.secret) {
28
+ throw new Error("Either secret (for traditional RDS) or cluster with DSQL must be provided");
29
+ }
30
+ if (!isDsql && !props.vpc) {
31
+ throw new Error("VPC is required for traditional RDS databases");
32
+ }
33
+ if (isDsql && props.secret) {
34
+ throw new Error("secret should not be provided when using DSQL cluster (uses IAM authentication)");
35
+ }
18
36
  this.secret = props.secret;
19
37
  this.cluster = props.cluster;
20
38
  // Determine engine from cluster/instance instead of hardcoding
21
- if ("clusterIdentifier" in props.cluster) {
39
+ if (isDsql) {
40
+ // DSQL is always PostgreSQL-compatible
41
+ this.engine = "dsql";
42
+ }
43
+ else if ("clusterIdentifier" in props.cluster) {
22
44
  // It's a DatabaseCluster
23
45
  const clusterEngine = props.cluster.engine;
24
46
  this.engine =
@@ -42,21 +64,35 @@ class Provider extends constructs_1.Construct {
42
64
  onEventHandler: this.handler,
43
65
  });
44
66
  this.serviceToken = provider.serviceToken;
45
- this.secret.grantRead(this.handler);
46
- if (this.secret.encryptionKey) {
47
- // It seems we need to grant explicit permission
48
- this.secret.encryptionKey.grantDecrypt(this.handler);
49
- }
50
- if (props.cluster.connections.securityGroups.length === 0) {
51
- throw new Error("Cluster does not have a security group.");
67
+ // Handle database connection setup
68
+ if (isDsql) {
69
+ // For DSQL, grant IAM permissions instead of VPC security groups
70
+ const dsqlCluster = props.cluster;
71
+ this.handler.addToRolePolicy(new iam.PolicyStatement({
72
+ effect: iam.Effect.ALLOW,
73
+ actions: ["dsql:DbConnectAdmin"],
74
+ resources: [dsqlCluster.attrResourceArn],
75
+ }));
52
76
  }
53
77
  else {
54
- const securityGroup = props.cluster.connections.securityGroups[0];
55
- this.handler.node.defaultChild?.node.addDependency(securityGroup);
78
+ // Traditional RDS setup with security groups and secrets
79
+ this.secret.grantRead(this.handler);
80
+ if (this.secret.encryptionKey) {
81
+ // It seems we need to grant explicit permission
82
+ this.secret.encryptionKey.grantDecrypt(this.handler);
83
+ }
84
+ if (props.cluster.connections.securityGroups.length === 0) {
85
+ throw new Error("Cluster does not have a security group.");
86
+ }
87
+ else {
88
+ const securityGroup = props.cluster.connections.securityGroups[0];
89
+ this.handler.node.defaultChild?.node.addDependency(securityGroup);
90
+ }
56
91
  }
57
92
  this.node.addDependency(props.cluster);
58
93
  }
59
94
  newCustomResourceHandler(scope, id, props) {
95
+ const isDsql = isDsqlCluster(props.cluster);
60
96
  const handlerDir = path.join(__dirname, "handler");
61
97
  const index_ts = path.join(handlerDir, "index.ts");
62
98
  const index_js = path.join(handlerDir, "index.js");
@@ -78,6 +114,19 @@ class Provider extends constructs_1.Construct {
78
114
  };
79
115
  }
80
116
  const logger = props.logger ?? false;
117
+ // Build environment variables
118
+ const environment = {
119
+ LOGGER: logger.toString(),
120
+ ...ssl_options,
121
+ };
122
+ // Add DSQL-specific environment variables
123
+ if (isDsql) {
124
+ const dsqlCluster = props.cluster;
125
+ const clusterId = dsqlCluster.attrIdentifier;
126
+ const region = aws_cdk_lib_1.Stack.of(scope).region;
127
+ environment.DSQL_ENDPOINT = `${clusterId}.dsql.${region}.on.aws`;
128
+ environment.DSQL_PORT = "5432";
129
+ }
81
130
  const deleteParameterPolicy = new iam.PolicyStatement({
82
131
  actions: ["ssm:DeleteParameter"],
83
132
  resources: [
@@ -91,10 +140,15 @@ class Provider extends constructs_1.Construct {
91
140
  });
92
141
  const fn = new lambda.NodejsFunction(scope, id, {
93
142
  ...props.functionProps,
94
- vpc: props.vpc,
95
- vpcSubnets: props.vpcSubnets ?? {
96
- subnetType: aws_ec2_1.SubnetType.PRIVATE_ISOLATED,
97
- },
143
+ // Only configure VPC for traditional RDS
144
+ ...(isDsql
145
+ ? {}
146
+ : {
147
+ vpc: props.vpc,
148
+ vpcSubnets: props.vpcSubnets ?? {
149
+ subnetType: aws_ec2_1.SubnetType.PRIVATE_ISOLATED,
150
+ },
151
+ }),
98
152
  entry: entry,
99
153
  runtime: aws_lambda_1.Runtime.NODEJS_22_X,
100
154
  timeout: props.timeout ?? props.functionProps?.timeout ?? aws_cdk_lib_1.Duration.seconds(300),
@@ -114,26 +168,26 @@ class Provider extends constructs_1.Construct {
114
168
  },
115
169
  },
116
170
  },
117
- environment: {
118
- LOGGER: logger.toString(),
119
- ...ssl_options,
120
- },
171
+ environment,
121
172
  initialPolicy: [
122
173
  deleteParameterPolicy,
123
174
  ...(props.functionProps?.initialPolicy ?? []),
124
175
  ],
125
176
  });
126
- if (!props.functionProps?.securityGroups ||
127
- props.functionProps?.securityGroups.length === 0) {
128
- props.cluster.connections.allowDefaultPortFrom(fn, "Allow the rds sql handler to connect to db");
177
+ // Only configure security groups for traditional RDS (not DSQL)
178
+ if (!isDsql &&
179
+ (!props.functionProps?.securityGroups ||
180
+ props.functionProps?.securityGroups.length === 0)) {
181
+ const rdsCluster = props.cluster;
182
+ rdsCluster.connections.allowDefaultPortFrom(fn, "Allow the rds sql handler to connect to db");
129
183
  }
130
184
  return fn;
131
185
  }
132
186
  }
133
187
  exports.Provider = Provider;
134
188
  _a = JSII_RTTI_SYMBOL_1;
135
- Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "7.0.2" };
189
+ Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "7.1.0" };
136
190
  function slugify(x) {
137
191
  return x.replace(/[^a-zA-Z0-9]/g, "");
138
192
  }
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQkFBK0I7QUFDL0IsNkJBQTRCO0FBQzVCLDZDQUE2QztBQUM3QyxpREFBdUU7QUFDdkUsMkNBQTBDO0FBQzFDLHVEQUEyRDtBQUMzRCx3REFBdUQ7QUFJdkQsZ0VBQStEO0FBQy9ELDJDQUFzQztBQWdFdEMsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFhckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUE7UUFFNUIsK0RBQStEO1FBQy9ELElBQUksbUJBQW1CLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLHlCQUF5QjtZQUN6QixNQUFNLGFBQWEsR0FBSSxLQUFLLENBQUMsT0FBNEIsQ0FBQyxNQUFNLENBQUE7WUFDaEUsSUFBSSxDQUFDLE1BQU07Z0JBQ1QsYUFBYSxJQUFJLGFBQWEsQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNsRixDQUFDO2FBQU0sSUFBSSxvQkFBb0IsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsMEJBQTBCO1lBQzFCLE1BQU0sY0FBYyxHQUFJLEtBQUssQ0FBQyxPQUE2QixDQUFDLE1BQU0sQ0FBQTtZQUNsRSxJQUFJLENBQUMsTUFBTTtnQkFDVCxjQUFjLElBQUksY0FBYyxDQUFDLFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1FBQ3BGLENBQUM7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QUM7b0JBQ0QsYUFBYTt3QkFDWCxPQUFPLEVBQUUsQ0FBQTtvQkFDWCxDQUFDO2lCQUNGO2FBQ0Y7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pCLEdBQUcsV0FBVzthQUNmO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLHFCQUFxQjtnQkFDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQzthQUM5QztTQUNGLENBQUMsQ0FBQTtRQUVGLElBQ0UsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGNBQWM7WUFDcEMsS0FBSyxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDaEQsQ0FBQztZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUM1QyxFQUFFLEVBQ0YsNENBQTRDLENBQzdDLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDOztBQW5KSCw0QkFvSkM7OztBQUVELFNBQVMsT0FBTyxDQUFDLENBQVM7SUFDeEIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBJVnBjLCBTdWJuZXRUeXBlLCBTdWJuZXRTZWxlY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0IHsgSUZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvblByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7IElEYXRhYmFzZUNsdXN0ZXIsIElEYXRhYmFzZUluc3RhbmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIlxuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcblxuZXhwb3J0IGludGVyZmFjZSBSZHNTcWxQcm9wcyB7XG4gIC8qKlxuICAgKiBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgcHJvdmlkZXIgbGFtYmRhLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHRoZSBWUEMgb2YgeW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBGdW5jdGlvbiBpcyBub3QgcGxhY2VkIHdpdGhpbiBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBwbGFjZSB0aGUgbmV0d29yayBwcm92aWRlciBsYW1iZGEgd2l0aGluIHRoZSBWUEMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGlzb2xhdGVkIHN1Ym5ldCBpZiBub3Qgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogU3VibmV0U2VsZWN0aW9uXG5cbiAgLyoqXG4gICAqIFlvdXIgZGF0YWJhc2UuXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyOiBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2VcblxuICAvKipcbiAgICogU2VjcmV0IHRoYXQgZ3JhbnRzIGFjY2VzcyB0byB5b3VyIGRhdGFiYXNlLlxuICAgKlxuICAgKiBVc3VhbGx5IHRoaXMgaXMgeW91ciBjbHVzdGVyJ3MgbWFzdGVyIHNlY3JldC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldDogSVNlY3JldFxuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGZvciBsYW1iZGEgdG8gZG8gaXRzIHdvcmsuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gNSBtaW51dGVzXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb25cblxuICAvKipcbiAgICogTG9nIFNRTCBzdGF0ZW1lbnRzLiBUaGlzIGluY2x1ZGVzIHBhc3N3b3Jkcy4gVXNlIG9ubHkgZm9yIGRlYnVnZ2luZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2VyPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGZ1bmN0aW9uIGN1c3RvbWl6YXRpb24uXG4gICAqXG4gICAqIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIGZ1bmN0aW9uIGN1c3RvbWl6YXRpb24gc3VjaCBhcyB0aGUgbG9nIGdyb3VwLiBIb3dldmVyLFxuICAgKiBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcyBjb250cm9sbGVkIGJ5IG90aGVyIHtSZHNTcWxQcm9wc30gcGFyYW1ldGVycyB3aWxsIHRydW1wXG4gICAqIG9waW9ucyBzZXQgdmlhIHRoaXMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVtcHR5XG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvblByb3BzPzogTm9kZWpzRnVuY3Rpb25Qcm9wc1xuXG4gIC8qKlxuICAgKiBVc2UgU1NMP1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNzbD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ6IElTZWNyZXRcbiAgcHVibGljIHJlYWRvbmx5IGhhbmRsZXI6IElGdW5jdGlvblxuICBwdWJsaWMgcmVhZG9ubHkgY2x1c3RlcjogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlXG5cbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgbGlrZSBcInBvc3RncmVzXCIgb3IgXCJteXNxbFwiXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaWYgd2UgY2Fubm90IGRldGVybWluZSB0aGlzIFwicG9zdGdyZXNcIlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZ2luZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc1NxbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuICAgIHRoaXMuc2VjcmV0ID0gcHJvcHMuc2VjcmV0XG4gICAgdGhpcy5jbHVzdGVyID0gcHJvcHMuY2x1c3RlclxuXG4gICAgLy8gRGV0ZXJtaW5lIGVuZ2luZSBmcm9tIGNsdXN0ZXIvaW5zdGFuY2UgaW5zdGVhZCBvZiBoYXJkY29kaW5nXG4gICAgaWYgKFwiY2x1c3RlcklkZW50aWZpZXJcIiBpbiBwcm9wcy5jbHVzdGVyKSB7XG4gICAgICAvLyBJdCdzIGEgRGF0YWJhc2VDbHVzdGVyXG4gICAgICBjb25zdCBjbHVzdGVyRW5naW5lID0gKHByb3BzLmNsdXN0ZXIgYXMgSURhdGFiYXNlQ2x1c3RlcikuZW5naW5lXG4gICAgICB0aGlzLmVuZ2luZSA9XG4gICAgICAgIGNsdXN0ZXJFbmdpbmUgJiYgY2x1c3RlckVuZ2luZS5lbmdpbmVGYW1pbHkgPT09IFwiTVlTUUxcIiA/IFwibXlzcWxcIiA6IFwicG9zdGdyZXNcIlxuICAgIH0gZWxzZSBpZiAoXCJpbnN0YW5jZUlkZW50aWZpZXJcIiBpbiBwcm9wcy5jbHVzdGVyKSB7XG4gICAgICAvLyBJdCdzIGEgRGF0YWJhc2VJbnN0YW5jZVxuICAgICAgY29uc3QgaW5zdGFuY2VFbmdpbmUgPSAocHJvcHMuY2x1c3RlciBhcyBJRGF0YWJhc2VJbnN0YW5jZSkuZW5naW5lXG4gICAgICB0aGlzLmVuZ2luZSA9XG4gICAgICAgIGluc3RhbmNlRW5naW5lICYmIGluc3RhbmNlRW5naW5lLmVuZ2luZUZhbWlseSA9PT0gXCJNWVNRTFwiID8gXCJteXNxbFwiIDogXCJwb3N0Z3Jlc1wiXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHBvc3RncmVzIGlmIGVuZ2luZSBoYXNuJ3QgYmVlbiBwcm92aWRlZFxuICAgICAgdGhpcy5lbmdpbmUgPSBcInBvc3RncmVzXCJcbiAgICB9XG5cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBcIlJkc1NxbFwiICsgc2x1Z2lmeShcIjI4YjllNzkxLWFmNjAtNGEzMy1iY2E4LWZmYjZmMzBlZjhjNVwiKVxuICAgIHRoaXMuaGFuZGxlciA9XG4gICAgICAoU3RhY2sub2YodGhpcykubm9kZS50cnlGaW5kQ2hpbGQoZnVuY3Rpb25OYW1lKSBhcyBJRnVuY3Rpb24pID8/XG4gICAgICB0aGlzLm5ld0N1c3RvbVJlc291cmNlSGFuZGxlcihzY29wZSwgZnVuY3Rpb25OYW1lLCBwcm9wcylcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGN1c3RvbVJlc291cmNlcy5Qcm92aWRlcih0aGlzLCBcIlJkc1NxbFwiLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgIH0pXG4gICAgdGhpcy5zZXJ2aWNlVG9rZW4gPSBwcm92aWRlci5zZXJ2aWNlVG9rZW5cbiAgICB0aGlzLnNlY3JldC5ncmFudFJlYWQodGhpcy5oYW5kbGVyKVxuICAgIGlmICh0aGlzLnNlY3JldC5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICAvLyBJdCBzZWVtcyB3ZSBuZWVkIHRvIGdyYW50IGV4cGxpY2l0IHBlcm1pc3Npb25cbiAgICAgIHRoaXMuc2VjcmV0LmVuY3J5cHRpb25LZXkuZ3JhbnREZWNyeXB0KHRoaXMuaGFuZGxlcilcbiAgICB9XG4gICAgaWYgKHByb3BzLmNsdXN0ZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDbHVzdGVyIGRvZXMgbm90IGhhdmUgYSBzZWN1cml0eSBncm91cC5cIilcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VjdXJpdHlHcm91cCA9IHByb3BzLmNsdXN0ZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0hXG4gICAgICB0aGlzLmhhbmRsZXIubm9kZS5kZWZhdWx0Q2hpbGQ/Lm5vZGUuYWRkRGVwZW5kZW5jeShzZWN1cml0eUdyb3VwKVxuICAgIH1cbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5jbHVzdGVyKVxuICB9XG5cbiAgcHJvdGVjdGVkIG5ld0N1c3RvbVJlc291cmNlSGFuZGxlcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJkc1NxbFByb3BzXG4gICk6IGxhbWJkYS5Ob2RlanNGdW5jdGlvbiB7XG4gICAgY29uc3QgaGFuZGxlckRpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlclwiKVxuICAgIGNvbnN0IGluZGV4X3RzID0gcGF0aC5qb2luKGhhbmRsZXJEaXIsIFwiaW5kZXgudHNcIilcbiAgICBjb25zdCBpbmRleF9qcyA9IHBhdGguam9pbihoYW5kbGVyRGlyLCBcImluZGV4LmpzXCIpXG4gICAgbGV0IGVudHJ5OiBzdHJpbmdcblxuICAgIGlmIChleGlzdHNTeW5jKGluZGV4X3RzKSkge1xuICAgICAgZW50cnkgPSBpbmRleF90c1xuICAgIH0gZWxzZSBpZiAoZXhpc3RzU3luYyhpbmRleF9qcykpIHtcbiAgICAgIGVudHJ5ID0gaW5kZXhfanNcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVWdseSBoYWNrIHRvIHN1cHBvcnQgU1NUIChwb3NzaWJseSBjYXVzZWQgYnkgbXkgaGFjayB0byBtYWtlIFNTVCB3b3JrIHdpdGggQ29tbW9uSlMgbGlicmFyaWVzKVxuICAgICAgZW50cnkgPSBwYXRoLmpvaW4oXG4gICAgICAgIHBhdGguZGlybmFtZShwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9qc29uIHx8IHByb2Nlc3MuY3dkKCkpLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy9jZGstcmRzLXNxbC9saWIvaGFuZGxlci9pbmRleC5qc1wiXG4gICAgICApXG4gICAgfVxuICAgIGxldCBzc2xfb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgIGlmIChwcm9wcy5zc2wgIT09IHVuZGVmaW5lZCAmJiAhcHJvcHMuc3NsKSB7XG4gICAgICBzc2xfb3B0aW9ucyA9IHtcbiAgICAgICAgU1NMOiBKU09OLnN0cmluZ2lmeShwcm9wcy5zc2wpLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBsb2dnZXIgPSBwcm9wcy5sb2dnZXIgPz8gZmFsc2VcblxuICAgIGNvbnN0IGRlbGV0ZVBhcmFtZXRlclBvbGljeSA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFtcInNzbTpEZWxldGVQYXJhbWV0ZXJcIl0sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjphd3M6c3NtOiR7U3RhY2sub2Yoc2NvcGUpLnJlZ2lvbn06JHtTdGFjay5vZihzY29wZSkuYWNjb3VudH06cGFyYW1ldGVyLypgLFxuICAgICAgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgXCJzc206UmVzb3VyY2VUYWcvY3JlYXRlZC1ieVwiOiBcImNkay1yZHMtc3FsXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBjb25zdCBmbiA9IG5ldyBsYW1iZGEuTm9kZWpzRnVuY3Rpb24oc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcy5mdW5jdGlvblByb3BzLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzID8/IHtcbiAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgfSxcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0ID8/IHByb3BzLmZ1bmN0aW9uUHJvcHM/LnRpbWVvdXQgPz8gRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgLy8gSW5jbHVkZSB0aGUgbWlncmF0aW9ucyBkaXJlY3RvcnkgaW4gdGhlIGJ1bmRsZVxuICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICBiZWZvcmVCdW5kbGluZyhfOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgYGN1cmwgLS1zaWxlbnQgLWZMIGh0dHBzOi8vdHJ1c3RzdG9yZS5wa2kucmRzLmFtYXpvbmF3cy5jb20vZ2xvYmFsL2dsb2JhbC1idW5kbGUucGVtIC1vICR7cGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG91dHB1dERpcixcbiAgICAgICAgICAgICAgICBcImdsb2JhbC1idW5kbGUucGVtXCJcbiAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWZ0ZXJCdW5kbGluZygpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJlZm9yZUluc3RhbGwoKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBMT0dHRVI6IGxvZ2dlci50b1N0cmluZygpLFxuICAgICAgICAuLi5zc2xfb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBpbml0aWFsUG9saWN5OiBbXG4gICAgICAgIGRlbGV0ZVBhcmFtZXRlclBvbGljeSxcbiAgICAgICAgLi4uKHByb3BzLmZ1bmN0aW9uUHJvcHM/LmluaXRpYWxQb2xpY3kgPz8gW10pLFxuICAgICAgXSxcbiAgICB9KVxuXG4gICAgaWYgKFxuICAgICAgIXByb3BzLmZ1bmN0aW9uUHJvcHM/LnNlY3VyaXR5R3JvdXBzIHx8XG4gICAgICBwcm9wcy5mdW5jdGlvblByb3BzPy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHByb3BzLmNsdXN0ZXIuY29ubmVjdGlvbnMuYWxsb3dEZWZhdWx0UG9ydEZyb20oXG4gICAgICAgIGZuLFxuICAgICAgICBcIkFsbG93IHRoZSByZHMgc3FsIGhhbmRsZXIgdG8gY29ubmVjdCB0byBkYlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuXG4gIH1cbn1cblxuZnVuY3Rpb24gc2x1Z2lmeSh4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4geC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIilcbn1cbiJdfQ==
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQkFBK0I7QUFDL0IsNkJBQTRCO0FBQzVCLDZDQUE2QztBQUM3Qyw2Q0FBNEM7QUFDNUMsaURBQXVFO0FBQ3ZFLDJDQUEwQztBQUMxQyx1REFBMkQ7QUFDM0Qsd0RBQXVEO0FBSXZELGdFQUErRDtBQUMvRCwyQ0FBc0M7QUFFdEM7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsT0FBK0Q7SUFFL0QsT0FBTyxPQUFPLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQTtBQUMzQyxDQUFDO0FBd0VELE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBYXJDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQix5QkFBeUI7UUFDekIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkVBQTJFLENBQzVFLENBQUE7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUE7UUFDbEUsQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLGlGQUFpRixDQUNsRixDQUFBO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUss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RSxVQUFVLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUN6QyxFQUFFLEVBQ0YsNENBQTRDLENBQzdDLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDOztBQTNNSCw0QkE0TUM7OztBQUVELFNBQVMsT0FBTyxDQUFDLENBQVM7SUFDeEIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgKiBhcyBkc3FsIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHNxbFwiXG5pbXBvcnQgeyBJVnBjLCBTdWJuZXRUeXBlLCBTdWJuZXRTZWxlY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0IHsgSUZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvblByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7IElEYXRhYmFzZUNsdXN0ZXIsIElEYXRhYmFzZUluc3RhbmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIlxuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgY2x1c3RlciBpcyBhIERTUUwgY2x1c3RlclxuICovXG5mdW5jdGlvbiBpc0RzcWxDbHVzdGVyKFxuICBjbHVzdGVyOiBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2UgfCBkc3FsLkNmbkNsdXN0ZXJcbik6IGNsdXN0ZXIgaXMgZHNxbC5DZm5DbHVzdGVyIHtcbiAgcmV0dXJuIGNsdXN0ZXIgaW5zdGFuY2VvZiBkc3FsLkNmbkNsdXN0ZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZHNTcWxQcm9wcyB7XG4gIC8qKlxuICAgKiBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgcHJvdmlkZXIgbGFtYmRhLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHRoZSBWUEMgb2YgeW91ciBkYXRhYmFzZS5cbiAgICogUmVxdWlyZWQgd2hlbiB5b3VyIGRhdGFiYXNlIGlzIG9ubHkgYWNjZXNzaWJsZSBpbiBhIFZQQy5cbiAgICogTm90IHJlcXVpcmVkIGZvciBEU1FMIGFzIGl0IHVzZXMgcHVibGljIGVuZHBvaW50cyB3aXRoIElBTSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBGdW5jdGlvbiBpcyBub3QgcGxhY2VkIHdpdGhpbiBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGNcblxuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIG5ldHdvcmsgcHJvdmlkZXIgbGFtYmRhIHdpdGhpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBpc29sYXRlZCBzdWJuZXQgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvblxuXG4gIC8qKlxuICAgKiBZb3VyIGRhdGFiYXNlIGNsdXN0ZXIgb3IgaW5zdGFuY2UuXG4gICAqIFN1cHBvcnRzIGJvdGggdHJhZGl0aW9uYWwgUkRTL0F1cm9yYSBjbHVzdGVycyBhbmQgRFNRTCBjbHVzdGVycy5cbiAgICogLSBGb3IgUkRTL0F1cm9yYTogc2VjdXJpdHkgZ3JvdXBzIHdpbGwgYmUgY29uZmlndXJlZCB0byBhbGxvdyBhY2Nlc3NcbiAgICogLSBGb3IgRFNRTDogSUFNIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHNlY3JldHNcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI6IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZSB8IGRzcWwuQ2ZuQ2x1c3RlclxuXG4gIC8qKlxuICAgKiBTZWNyZXQgdGhhdCBncmFudHMgYWNjZXNzIHRvIHlvdXIgZGF0YWJhc2UuXG4gICAqXG4gICAqIFVzdWFsbHkgdGhpcyBpcyB5b3VyIGNsdXN0ZXIncyBtYXN0ZXIgc2VjcmV0LlxuICAgKiBOb3QgcmVxdWlyZWQgd2hlbiByZWx5aW5nIG9uIElBTSBhdXRoZW50aWNhdGlvbiAoc3VjaCBhcyBEU1FMKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgZm9yIERTUUwgY2x1c3RlcnMgdXNpbmcgSUFNIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ/OiBJU2VjcmV0XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgZm9yIGxhbWJkYSB0byBkbyBpdHMgd29yay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA1IG1pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvblxuXG4gIC8qKlxuICAgKiBMb2cgU1FMIHN0YXRlbWVudHMuIFRoaXMgaW5jbHVkZXMgcGFzc3dvcmRzLiBVc2Ugb25seSBmb3IgZGVidWdnaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb2dnZXI/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZnVuY3Rpb24gY3VzdG9taXphdGlvbi5cbiAgICpcbiAgICogVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgZnVuY3Rpb24gY3VzdG9taXphdGlvbiBzdWNoIGFzIHRoZSBsb2cgZ3JvdXAuIEhvd2V2ZXIsXG4gICAqIGxhbWJkYSBmdW5jdGlvbiBwcm9wZXJ0aWVzIGNvbnRyb2xsZWQgYnkgb3RoZXIge1Jkc1NxbFByb3BzfSBwYXJhbWV0ZXJzIHdpbGwgdHJ1bXBcbiAgICogb3Bpb25zIHNldCB2aWEgdGhpcyBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZW1wdHlcbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uUHJvcHM/OiBOb2RlanNGdW5jdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIFVzZSBTU0w/XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3NsPzogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldD86IElTZWNyZXRcbiAgcHVibGljIHJlYWRvbmx5IGhhbmRsZXI6IElGdW5jdGlvblxuICBwdWJsaWMgcmVhZG9ubHkgY2x1c3RlcjogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlIHwgZHNxbC5DZm5DbHVzdGVyXG5cbiAgLyoqXG4gICAqIFRoZSBlbmdpbmUgbGlrZSBcInBvc3RncmVzXCIgb3IgXCJteXNxbFwiXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaWYgd2UgY2Fubm90IGRldGVybWluZSB0aGlzIFwicG9zdGdyZXNcIlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZ2luZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc1NxbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgLy8gVmFsaWRhdGUgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGlzRHNxbCA9IGlzRHNxbENsdXN0ZXIocHJvcHMuY2x1c3RlcilcbiAgICBpZiAoIWlzRHNxbCAmJiAhcHJvcHMuc2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRWl0aGVyIHNlY3JldCAoZm9yIHRyYWRpdGlvbmFsIFJEUykgb3IgY2x1c3RlciB3aXRoIERTUUwgbXVzdCBiZSBwcm92aWRlZFwiXG4gICAgICApXG4gICAgfVxuICAgIGlmICghaXNEc3FsICYmICFwcm9wcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgdHJhZGl0aW9uYWwgUkRTIGRhdGFiYXNlc1wiKVxuICAgIH1cbiAgICBpZiAoaXNEc3FsICYmIHByb3BzLnNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInNlY3JldCBzaG91bGQgbm90IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgRFNRTCBjbHVzdGVyICh1c2VzIElBTSBhdXRoZW50aWNhdGlvbilcIlxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuc2VjcmV0ID0gcHJvcHMuc2VjcmV0XG4gICAgdGhpcy5jbHVzdGVyID0gcHJvcHMuY2x1c3RlclxuXG4gICAgLy8gRGV0ZXJtaW5lIGVuZ2luZSBmcm9tIGNsdXN0ZXIvaW5zdGFuY2UgaW5zdGVhZCBvZiBoYXJkY29kaW5nXG4gICAgaWYgKGlzRHNxbCkge1xuICAgICAgLy8gRFNRTCBpcyBhbHdheXMgUG9zdGdyZVNRTC1jb21wYXRpYmxlXG4gICAgICB0aGlzLmVuZ2luZSA9IFwiZHNxbFwiXG4gICAgfSBlbHNlIGlmIChcImNsdXN0ZXJJZGVudGlmaWVyXCIgaW4gcHJvcHMuY2x1c3Rlcikge1xuICAgICAgLy8gSXQncyBhIERhdGFiYXNlQ2x1c3RlclxuICAgICAgY29uc3QgY2x1c3RlckVuZ2luZSA9IChwcm9wcy5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmVuZ2luZVxuICAgICAgdGhpcy5lbmdpbmUgPVxuICAgICAgICBjbHVzdGVyRW5naW5lICYmIGNsdXN0ZXJFbmdpbmUuZW5naW5lRmFtaWx5ID09PSBcIk1ZU1FMXCIgPyBcIm15c3FsXCIgOiBcInBvc3RncmVzXCJcbiAgICB9IGVsc2UgaWYgKFwiaW5zdGFuY2VJZGVudGlmaWVyXCIgaW4gcHJvcHMuY2x1c3Rlcikge1xuICAgICAgLy8gSXQncyBhIERhdGFiYXNlSW5zdGFuY2VcbiAgICAgIGNvbnN0IGluc3RhbmNlRW5naW5lID0gKHByb3BzLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmVuZ2luZVxuICAgICAgdGhpcy5lbmdpbmUgPVxuICAgICAgICBpbnN0YW5jZUVuZ2luZSAmJiBpbnN0YW5jZUVuZ2luZS5lbmdpbmVGYW1pbHkgPT09IFwiTVlTUUxcIiA/IFwibXlzcWxcIiA6IFwicG9zdGdyZXNcIlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjayB0byBwb3N0Z3JlcyBpZiBlbmdpbmUgaGFzbid0IGJlZW4gcHJvdmlkZWRcbiAgICAgIHRoaXMuZW5naW5lID0gXCJwb3N0Z3Jlc1wiXG4gICAgfVxuXG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gXCJSZHNTcWxcIiArIHNsdWdpZnkoXCIyOGI5ZTc5MS1hZjYwLTRhMzMtYmNhOC1mZmI2ZjMwZWY4YzVcIilcbiAgICB0aGlzLmhhbmRsZXIgPVxuICAgICAgKFN0YWNrLm9mKHRoaXMpLm5vZGUudHJ5RmluZENoaWxkKGZ1bmN0aW9uTmFtZSkgYXMgSUZ1bmN0aW9uKSA/P1xuICAgICAgdGhpcy5uZXdDdXN0b21SZXNvdXJjZUhhbmRsZXIoc2NvcGUsIGZ1bmN0aW9uTmFtZSwgcHJvcHMpXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjdXN0b21SZXNvdXJjZXMuUHJvdmlkZXIodGhpcywgXCJSZHNTcWxcIiwge1xuICAgICAgb25FdmVudEhhbmRsZXI6IHRoaXMuaGFuZGxlcixcbiAgICB9KVxuICAgIHRoaXMuc2VydmljZVRva2VuID0gcHJvdmlkZXIuc2VydmljZVRva2VuXG5cbiAgICAvLyBIYW5kbGUgZGF0YWJhc2UgY29ubmVjdGlvbiBzZXR1cFxuICAgIGlmIChpc0RzcWwpIHtcbiAgICAgIC8vIEZvciBEU1FMLCBncmFudCBJQU0gcGVybWlzc2lvbnMgaW5zdGVhZCBvZiBWUEMgc2VjdXJpdHkgZ3JvdXBzXG4gICAgICBjb25zdCBkc3FsQ2x1c3RlciA9IHByb3BzLmNsdXN0ZXIgYXMgZHNxbC5DZm5DbHVzdGVyXG4gICAgICB0aGlzLmhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcImRzcWw6RGJDb25uZWN0QWRtaW5cIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbZHNxbENsdXN0ZXIuYXR0clJlc291cmNlQXJuXSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhZGl0aW9uYWwgUkRTIHNldHVwIHdpdGggc2VjdXJpdHkgZ3JvdXBzIGFuZCBzZWNyZXRzXG4gICAgICB0aGlzLnNlY3JldCEuZ3JhbnRSZWFkKHRoaXMuaGFuZGxlcilcbiAgICAgIGlmICh0aGlzLnNlY3JldCEuZW5jcnlwdGlvbktleSkge1xuICAgICAgICAvLyBJdCBzZWVtcyB3ZSBuZWVkIHRvIGdyYW50IGV4cGxpY2l0IHBlcm1pc3Npb25cbiAgICAgICAgdGhpcy5zZWNyZXQhLmVuY3J5cHRpb25LZXkuZ3JhbnREZWNyeXB0KHRoaXMuaGFuZGxlcilcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jbHVzdGVyLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDbHVzdGVyIGRvZXMgbm90IGhhdmUgYSBzZWN1cml0eSBncm91cC5cIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBwcm9wcy5jbHVzdGVyLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzWzBdIVxuICAgICAgICB0aGlzLmhhbmRsZXIubm9kZS5kZWZhdWx0Q2hpbGQ/Lm5vZGUuYWRkRGVwZW5kZW5jeShzZWN1cml0eUdyb3VwKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5jbHVzdGVyKVxuICB9XG5cbiAgcHJvdGVjdGVkIG5ld0N1c3RvbVJlc291cmNlSGFuZGxlcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJkc1NxbFByb3BzXG4gICk6IGxhbWJkYS5Ob2RlanNGdW5jdGlvbiB7XG4gICAgY29uc3QgaXNEc3FsID0gaXNEc3FsQ2x1c3Rlcihwcm9wcy5jbHVzdGVyKVxuICAgIGNvbnN0IGhhbmRsZXJEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJcIilcbiAgICBjb25zdCBpbmRleF90cyA9IHBhdGguam9pbihoYW5kbGVyRGlyLCBcImluZGV4LnRzXCIpXG4gICAgY29uc3QgaW5kZXhfanMgPSBwYXRoLmpvaW4oaGFuZGxlckRpciwgXCJpbmRleC5qc1wiKVxuICAgIGxldCBlbnRyeTogc3RyaW5nXG5cbiAgICBpZiAoZXhpc3RzU3luYyhpbmRleF90cykpIHtcbiAgICAgIGVudHJ5ID0gaW5kZXhfdHNcbiAgICB9IGVsc2UgaWYgKGV4aXN0c1N5bmMoaW5kZXhfanMpKSB7XG4gICAgICBlbnRyeSA9IGluZGV4X2pzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVnbHkgaGFjayB0byBzdXBwb3J0IFNTVCAocG9zc2libHkgY2F1c2VkIGJ5IG15IGhhY2sgdG8gbWFrZSBTU1Qgd29yayB3aXRoIENvbW1vbkpTIGxpYnJhcmllcylcbiAgICAgIGVudHJ5ID0gcGF0aC5qb2luKFxuICAgICAgICBwYXRoLmRpcm5hbWUocHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfanNvbiB8fCBwcm9jZXNzLmN3ZCgpKSxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvY2RrLXJkcy1zcWwvbGliL2hhbmRsZXIvaW5kZXguanNcIlxuICAgICAgKVxuICAgIH1cbiAgICBsZXQgc3NsX29wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbiAgICBpZiAocHJvcHMuc3NsICE9PSB1bmRlZmluZWQgJiYgIXByb3BzLnNzbCkge1xuICAgICAgc3NsX29wdGlvbnMgPSB7XG4gICAgICAgIFNTTDogSlNPTi5zdHJpbmdpZnkocHJvcHMuc3NsKSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbG9nZ2VyID0gcHJvcHMubG9nZ2VyID8/IGZhbHNlXG5cbiAgICAvLyBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBjb25zdCBlbnZpcm9ubWVudDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIExPR0dFUjogbG9nZ2VyLnRvU3RyaW5nKCksXG4gICAgICAuLi5zc2xfb3B0aW9ucyxcbiAgICB9XG5cbiAgICAvLyBBZGQgRFNRTC1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBpZiAoaXNEc3FsKSB7XG4gICAgICBjb25zdCBkc3FsQ2x1c3RlciA9IHByb3BzLmNsdXN0ZXIgYXMgZHNxbC5DZm5DbHVzdGVyXG4gICAgICBjb25zdCBjbHVzdGVySWQgPSBkc3FsQ2x1c3Rlci5hdHRySWRlbnRpZmllclxuICAgICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2Yoc2NvcGUpLnJlZ2lvblxuICAgICAgZW52aXJvbm1lbnQuRFNRTF9FTkRQT0lOVCA9IGAke2NsdXN0ZXJJZH0uZHNxbC4ke3JlZ2lvbn0ub24uYXdzYFxuICAgICAgZW52aXJvbm1lbnQuRFNRTF9QT1JUID0gXCI1NDMyXCJcbiAgICB9XG5cbiAgICBjb25zdCBkZWxldGVQYXJhbWV0ZXJQb2xpY3kgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbXCJzc206RGVsZXRlUGFyYW1ldGVyXCJdLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOnNzbToke1N0YWNrLm9mKHNjb3BlKS5yZWdpb259OiR7U3RhY2sub2Yoc2NvcGUpLmFjY291bnR9OnBhcmFtZXRlci8qYCxcbiAgICAgIF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgIFwic3NtOlJlc291cmNlVGFnL2NyZWF0ZWQtYnlcIjogXCJjZGstcmRzLXNxbFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgY29uc3QgZm4gPSBuZXcgbGFtYmRhLk5vZGVqc0Z1bmN0aW9uKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMuZnVuY3Rpb25Qcm9wcyxcbiAgICAgIC8vIE9ubHkgY29uZmlndXJlIFZQQyBmb3IgdHJhZGl0aW9uYWwgUkRTXG4gICAgICAuLi4oaXNEc3FsXG4gICAgICAgID8ge31cbiAgICAgICAgOiB7XG4gICAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgZW50cnk6IGVudHJ5LFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQgPz8gcHJvcHMuZnVuY3Rpb25Qcm9wcz8udGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICAvLyBJbmNsdWRlIHRoZSBtaWdyYXRpb25zIGRpcmVjdG9yeSBpbiB0aGUgYnVuZGxlXG4gICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKF86IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBgY3VybCAtLXNpbGVudCAtZkwgaHR0cHM6Ly90cnVzdHN0b3JlLnBraS5yZHMuYW1hem9uYXdzLmNvbS9nbG9iYWwvZ2xvYmFsLWJ1bmRsZS5wZW0gLW8gJHtwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAgICAgICAgIFwiZ2xvYmFsLWJ1bmRsZS5wZW1cIlxuICAgICAgICAgICAgICApfWAsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhZnRlckJ1bmRsaW5nKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmVmb3JlSW5zdGFsbCgpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgICBkZWxldGVQYXJhbWV0ZXJQb2xpY3ksXG4gICAgICAgIC4uLihwcm9wcy5mdW5jdGlvblByb3BzPy5pbml0aWFsUG9saWN5ID8/IFtdKSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIC8vIE9ubHkgY29uZmlndXJlIHNlY3VyaXR5IGdyb3VwcyBmb3IgdHJhZGl0aW9uYWwgUkRTIChub3QgRFNRTClcbiAgICBpZiAoXG4gICAgICAhaXNEc3FsICYmXG4gICAgICAoIXByb3BzLmZ1bmN0aW9uUHJvcHM/LnNlY3VyaXR5R3JvdXBzIHx8XG4gICAgICAgIHByb3BzLmZ1bmN0aW9uUHJvcHM/LnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIGNvbnN0IHJkc0NsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZVxuICAgICAgcmRzQ2x1c3Rlci5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0RnJvbShcbiAgICAgICAgZm4sXG4gICAgICAgIFwiQWxsb3cgdGhlIHJkcyBzcWwgaGFuZGxlciB0byBjb25uZWN0IHRvIGRiXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gZm5cbiAgfVxufVxuXG5mdW5jdGlvbiBzbHVnaWZ5KHg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB4LnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKVxufVxuIl19
@@ -13,7 +13,7 @@ class Role extends aws_cdk_lib_1.CustomResource {
13
13
  properties: {
14
14
  Resource: enum_1.RdsSqlResource.ROLE,
15
15
  ResourceId: props.roleName,
16
- SecretArn: props.provider.secret.secretArn,
16
+ ...(props.provider.secret ? { SecretArn: props.provider.secret.secretArn } : {}),
17
17
  PasswordArn: props.passwordArn,
18
18
  DatabaseName: props.database ? props.database.databaseName : props.databaseName,
19
19
  EnableIamAuth: props.enableIamAuth,
@@ -25,4 +25,4 @@ class Role extends aws_cdk_lib_1.CustomResource {
25
25
  }
26
26
  }
27
27
  exports.Role = Role;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5jdXN0b20tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9sZS5jdXN0b20tcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTRDO0FBRzVDLGlDQUF1QztBQStDdkMsTUFBYSxJQUFLLFNBQVEsNEJBQWM7SUFDdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUN4RCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLE1BQU0seUNBQXlDLENBQUE7UUFDakQsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsSUFBSTtnQkFDN0IsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFDMUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUMvRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDbkM7U0FDRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkMsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0NBQ0Y7QUFuQkQsb0JBbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHsgSURhdGFiYXNlIH0gZnJvbSBcIi4vZGF0YWJhc2VcIlxuaW1wb3J0IHsgUmRzU3FsUmVzb3VyY2UgfSBmcm9tIFwiLi9lbnVtXCJcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBTUUwuXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEEgbmV3IHNlY3JldCBpcyBjcmVhdGVkIGZvciB0aGlzIHVzZXIuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgZW5jcnlwdCBpdCB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZEFybjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIHRoaXMgdXNlciBpcyBleHBlY3RlZCB0byB1c2UuXG4gICAqXG4gICAqIFNwZWNpZnkgbm9uZSBvZiBgZGF0YWJhc2VgIG9yIGBkYXRhYmFzZU5hbWVgIG9yIG9ubHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGNvbm5lY3Rpb24gdG8gYW55IGRhdGFiYXNlIGlzIGdyYW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlPzogSURhdGFiYXNlXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG5hbWUgdGhpcyB1c2VyIGlzIGV4cGVjdGVkIHRvIHVzZS5cbiAgICpcbiAgICogU3BlY2lmeSBub25lIG9mIGBkYXRhYmFzZWAgb3IgYGRhdGFiYXNlTmFtZWAgb3Igb25seSBvbmUgb2YgdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gY29ubmVjdGlvbiB0byBhbnkgZGF0YWJhc2UgaXMgZ3JhbnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBJQU0gYXV0aGVudGljYXRpb24gZm9yIHRoaXMgcm9sZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgLSB1c2UgcGFzc3dvcmQgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUlhbUF1dGg/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSB7XG4gICAgaWYgKHByb3BzLmRhdGFiYXNlICYmIHByb3BzLmRhdGFiYXNlTmFtZSkge1xuICAgICAgdGhyb3cgXCJTcGVjaWZ5IGVpdGhlciBkYXRhYmFzZSBvciBkYXRhYmFzZU5hbWVcIlxuICAgIH1cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuUk9MRSxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMucm9sZU5hbWUsXG4gICAgICAgIFNlY3JldEFybjogcHJvcHMucHJvdmlkZXIuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgUGFzc3dvcmRBcm46IHByb3BzLnBhc3N3b3JkQXJuLFxuICAgICAgICBEYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlID8gcHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lIDogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBFbmFibGVJYW1BdXRoOiBwcm9wcy5lbmFibGVJYW1BdXRoLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnByb3ZpZGVyKVxuICAgIGlmIChwcm9wcy5kYXRhYmFzZSkgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuZGF0YWJhc2UpXG4gIH1cbn1cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5jdXN0b20tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9sZS5jdXN0b20tcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTRDO0FBRzVDLGlDQUF1QztBQStDdkMsTUFBYSxJQUFLLFNBQVEsNEJBQWM7SUFDdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUN4RCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLE1BQU0seUNBQXlDLENBQUE7UUFDakQsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsSUFBSTtnQkFDN0IsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hGLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDL0UsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO2FBQ25DO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksS0FBSyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsQ0FBQztDQUNGO0FBbkJELG9CQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IElEYXRhYmFzZSB9IGZyb20gXCIuL2RhdGFiYXNlXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb2xlUHJvcHMge1xuICAvKipcbiAgICogUHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogUHJvdmlkZXJcblxuICAvKipcbiAgICogU1FMLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBIG5ldyBzZWNyZXQgaXMgY3JlYXRlZCBmb3IgdGhpcyB1c2VyLlxuICAgKlxuICAgKiBPcHRpb25hbGx5IGVuY3J5cHQgaXQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFzc3dvcmRBcm46IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSB0aGlzIHVzZXIgaXMgZXhwZWN0ZWQgdG8gdXNlLlxuICAgKlxuICAgKiBTcGVjaWZ5IG5vbmUgb2YgYGRhdGFiYXNlYCBvciBgZGF0YWJhc2VOYW1lYCBvciBvbmx5IG9uZSBvZiB0aGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBjb25uZWN0aW9uIHRvIGFueSBkYXRhYmFzZSBpcyBncmFudGVkXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZT86IElEYXRhYmFzZVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSBuYW1lIHRoaXMgdXNlciBpcyBleHBlY3RlZCB0byB1c2UuXG4gICAqXG4gICAqIFNwZWNpZnkgbm9uZSBvZiBgZGF0YWJhc2VgIG9yIGBkYXRhYmFzZU5hbWVgIG9yIG9ubHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGNvbm5lY3Rpb24gdG8gYW55IGRhdGFiYXNlIGlzIGdyYW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFbmFibGUgSUFNIGF1dGhlbnRpY2F0aW9uIGZvciB0aGlzIHJvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlIC0gdXNlIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmFibGVJYW1BdXRoPzogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgUm9sZSBleHRlbmRzIEN1c3RvbVJlc291cmNlIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvbGVQcm9wcykge1xuICAgIGlmIChwcm9wcy5kYXRhYmFzZSAmJiBwcm9wcy5kYXRhYmFzZU5hbWUpIHtcbiAgICAgIHRocm93IFwiU3BlY2lmeSBlaXRoZXIgZGF0YWJhc2Ugb3IgZGF0YWJhc2VOYW1lXCJcbiAgICB9XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLlJPTEUsXG4gICAgICAgIFJlc291cmNlSWQ6IHByb3BzLnJvbGVOYW1lLFxuICAgICAgICAuLi4ocHJvcHMucHJvdmlkZXIuc2VjcmV0ID8geyBTZWNyZXRBcm46IHByb3BzLnByb3ZpZGVyLnNlY3JldC5zZWNyZXRBcm4gfSA6IHt9KSxcbiAgICAgICAgUGFzc3dvcmRBcm46IHByb3BzLnBhc3N3b3JkQXJuLFxuICAgICAgICBEYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlID8gcHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lIDogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBFbmFibGVJYW1BdXRoOiBwcm9wcy5lbmFibGVJYW1BdXRoLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnByb3ZpZGVyKVxuICAgIGlmIChwcm9wcy5kYXRhYmFzZSkgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuZGF0YWJhc2UpXG4gIH1cbn1cbiJdfQ==
package/lib/role.d.ts CHANGED
@@ -65,6 +65,9 @@ export interface RoleProps {
65
65
  * configured for AWS IAM database authentication. The secret
66
66
  * will not contain a password field.
67
67
  *
68
+ * Note: For DSQL clusters, this property is ignored as DSQL always
69
+ * uses IAM authentication.
70
+ *
68
71
  * @default false - use password authentication
69
72
  */
70
73
  readonly enableIamAuth?: boolean;
@@ -76,7 +79,8 @@ export declare class Role extends Construct {
76
79
  readonly roleName: string;
77
80
  /**
78
81
  * The generated secret.
82
+ * Only available for non-DSQL clusters as DSQL uses IAM authentication.
79
83
  */
80
- readonly secret: ISecret;
84
+ readonly secret?: ISecret;
81
85
  constructor(scope: Construct, id: string, props: RoleProps);
82
86
  }