cdk-rds-sql 8.1.6 → 9.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.
@@ -1,6 +1,6 @@
1
1
  import { CustomResource } from "aws-cdk-lib";
2
- import { Construct } from "constructs";
3
- import { IProvider } from "./provider";
2
+ import type { Construct } from "constructs";
3
+ import { type IProvider } from "./provider";
4
4
  export interface IamGrantProps {
5
5
  /**
6
6
  * Provider.
package/lib/iam-grant.js CHANGED
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.IamGrant = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -7,6 +6,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
6
  const enum_1 = require("./enum");
8
7
  const provider_1 = require("./provider");
9
8
  class IamGrant extends aws_cdk_lib_1.CustomResource {
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-rds-sql.IamGrant", version: "9.0.0" };
10
10
  constructor(scope, id, props) {
11
11
  // IAM grants are only supported on DSQL
12
12
  if (props.provider.engine !== provider_1.DatabaseEngine.DSQL) {
@@ -25,6 +25,4 @@ class IamGrant extends aws_cdk_lib_1.CustomResource {
25
25
  }
26
26
  }
27
27
  exports.IamGrant = IamGrant;
28
- _a = JSII_RTTI_SYMBOL_1;
29
- IamGrant[_a] = { fqn: "cdk-rds-sql.IamGrant", version: "8.1.6" };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWdyYW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2lhbS1ncmFudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUU1QyxpQ0FBdUM7QUFDdkMseUNBQXNEO0FBbUJ0RCxNQUFhLFFBQVMsU0FBUSw0QkFBYztJQUMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELHdDQUF3QztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLHlCQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDYixnSEFBZ0gsQ0FDakgsQ0FBQTtRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDekMsWUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsU0FBUztnQkFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7YUFDL0I7U0FDRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDekMsQ0FBQzs7QUFuQkgsNEJBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHsgUmRzU3FsUmVzb3VyY2UgfSBmcm9tIFwiLi9lbnVtXCJcbmltcG9ydCB7IElQcm92aWRlciwgRGF0YWJhc2VFbmdpbmUgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSWFtR3JhbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJUHJvdmlkZXJcblxuICAvKipcbiAgICogRGF0YWJhc2Ugcm9sZSBuYW1lIHRvIGdyYW50IElBTSBhY2Nlc3MgdG8uXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIElBTSByZXNvdXJjZSBBUk4gKHJvbGUsIHVzZXIsIG9yIG90aGVyIElBTSBwcmluY2lwYWwpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VBcm46IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgSWFtR3JhbnQgZXh0ZW5kcyBDdXN0b21SZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJYW1HcmFudFByb3BzKSB7XG4gICAgLy8gSUFNIGdyYW50cyBhcmUgb25seSBzdXBwb3J0ZWQgb24gRFNRTFxuICAgIGlmIChwcm9wcy5wcm92aWRlci5lbmdpbmUgIT09IERhdGFiYXNlRW5naW5lLkRTUUwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJJQU0gZ3JhbnRzIGFyZSBvbmx5IHN1cHBvcnRlZCB3aXRoIERTUUwgY2x1c3RlcnMuIFVzZSByZWd1bGFyIGRhdGFiYXNlIGF1dGhlbnRpY2F0aW9uIGZvciBSRFMvQXVyb3JhIGNsdXN0ZXJzLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OkRzcWxJYW1HcmFudFwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuSUFNX0dSQU5ULFxuICAgICAgICBSb2xlTmFtZTogcHJvcHMucm9sZU5hbWUsXG4gICAgICAgIFJlc291cmNlQXJuOiBwcm9wcy5yZXNvdXJjZUFybixcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgfVxufVxuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWdyYW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2lhbS1ncmFudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQTRDO0FBRTVDLGlDQUF1QztBQUN2Qyx5Q0FBMkQ7QUFtQjNELE1BQWEsUUFBUyxTQUFRLDRCQUFjOztJQUMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELHdDQUF3QztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLHlCQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDYixnSEFBZ0gsQ0FDakgsQ0FBQTtRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDekMsWUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsU0FBUztnQkFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7YUFDL0I7U0FDRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDekMsQ0FBQzs7QUFuQkgsNEJBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuaW1wb3J0IHsgRGF0YWJhc2VFbmdpbmUsIHR5cGUgSVByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIlxuXG5leHBvcnQgaW50ZXJmYWNlIElhbUdyYW50UHJvcHMge1xuICAvKipcbiAgICogUHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogSVByb3ZpZGVyXG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHJvbGUgbmFtZSB0byBncmFudCBJQU0gYWNjZXNzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBJQU0gcmVzb3VyY2UgQVJOIChyb2xlLCB1c2VyLCBvciBvdGhlciBJQU0gcHJpbmNpcGFsKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlQXJuOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIElhbUdyYW50IGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWFtR3JhbnRQcm9wcykge1xuICAgIC8vIElBTSBncmFudHMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIERTUUxcbiAgICBpZiAocHJvcHMucHJvdmlkZXIuZW5naW5lICE9PSBEYXRhYmFzZUVuZ2luZS5EU1FMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiSUFNIGdyYW50cyBhcmUgb25seSBzdXBwb3J0ZWQgd2l0aCBEU1FMIGNsdXN0ZXJzLiBVc2UgcmVndWxhciBkYXRhYmFzZSBhdXRoZW50aWNhdGlvbiBmb3IgUkRTL0F1cm9yYSBjbHVzdGVycy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpEc3FsSWFtR3JhbnRcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLklBTV9HUkFOVCxcbiAgICAgICAgUm9sZU5hbWU6IHByb3BzLnJvbGVOYW1lLFxuICAgICAgICBSZXNvdXJjZUFybjogcHJvcHMucmVzb3VyY2VBcm4sXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gIH1cbn1cbiJdfQ==
package/lib/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
+ export * from "./database";
1
2
  export * from "./enum";
3
+ export * from "./iam-grant";
2
4
  export * from "./provider";
3
- export * from "./sql";
4
- export * from "./schema";
5
5
  export * from "./role";
6
- export * from "./database";
7
- export * from "./iam-grant";
6
+ export * from "./schema";
7
+ export * from "./sql";
package/lib/index.js CHANGED
@@ -14,11 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./database"), exports);
17
18
  __exportStar(require("./enum"), exports);
19
+ __exportStar(require("./iam-grant"), exports);
18
20
  __exportStar(require("./provider"), exports);
19
- __exportStar(require("./sql"), exports);
20
- __exportStar(require("./schema"), exports);
21
21
  __exportStar(require("./role"), exports);
22
- __exportStar(require("./database"), exports);
23
- __exportStar(require("./iam-grant"), exports);
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFzQjtBQUN0Qiw2Q0FBMEI7QUFDMUIsd0NBQXFCO0FBQ3JCLDJDQUF3QjtBQUN4Qix5Q0FBc0I7QUFDdEIsNkNBQTBCO0FBQzFCLDhDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VudW1cIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3FsXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NjaGVtYVwiXG5leHBvcnQgKiBmcm9tIFwiLi9yb2xlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2lhbS1ncmFudFwiXG4iXX0=
22
+ __exportStar(require("./schema"), exports);
23
+ __exportStar(require("./sql"), exports);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEwQjtBQUMxQix5Q0FBc0I7QUFDdEIsOENBQTJCO0FBQzNCLDZDQUEwQjtBQUMxQix5Q0FBc0I7QUFDdEIsMkNBQXdCO0FBQ3hCLHdDQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2VudW1cIlxuZXhwb3J0ICogZnJvbSBcIi4vaWFtLWdyYW50XCJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyXCJcbmV4cG9ydCAqIGZyb20gXCIuL3JvbGVcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2NoZW1hXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NxbFwiXG4iXX0=
package/lib/provider.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { Duration } from "aws-cdk-lib";
2
2
  import * as dsql from "aws-cdk-lib/aws-dsql";
3
- import { IVpc, SubnetSelection } from "aws-cdk-lib/aws-ec2";
4
- import { Function, FunctionOptions, IFunction } from "aws-cdk-lib/aws-lambda";
5
- import { IDatabaseCluster, IDatabaseInstance } from "aws-cdk-lib/aws-rds";
6
- import { ISecret } from "aws-cdk-lib/aws-secretsmanager";
3
+ import { type IVpc, type SubnetSelection } from "aws-cdk-lib/aws-ec2";
4
+ import { type FunctionOptions, type IFunction, Function as LambdaFunction } from "aws-cdk-lib/aws-lambda";
5
+ import type { IDatabaseCluster, IDatabaseInstance } from "aws-cdk-lib/aws-rds";
6
+ import type { ISecret } from "aws-cdk-lib/aws-secretsmanager";
7
7
  import { Construct } from "constructs";
8
8
  export interface RdsSqlProps {
9
9
  /**
@@ -121,5 +121,5 @@ export declare class Provider extends Construct implements IProvider {
121
121
  */
122
122
  readonly engine: string;
123
123
  constructor(scope: Construct, id: string, props: RdsSqlProps);
124
- protected newCustomResourceHandler(scope: Construct, id: string, props: RdsSqlProps): Function;
124
+ protected newCustomResourceHandler(scope: Construct, id: string, props: RdsSqlProps): LambdaFunction;
125
125
  }
package/lib/provider.js CHANGED
@@ -1,17 +1,49 @@
1
1
  "use strict";
2
- var _a;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.Provider = exports.DatabaseEngine = void 0;
5
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const fs_1 = require("fs");
7
- const path = require("path");
8
38
  const aws_cdk_lib_1 = require("aws-cdk-lib");
9
- const dsql = require("aws-cdk-lib/aws-dsql");
39
+ const dsql = __importStar(require("aws-cdk-lib/aws-dsql"));
10
40
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
11
- const iam = require("aws-cdk-lib/aws-iam");
41
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
12
42
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
13
- const customResources = require("aws-cdk-lib/custom-resources");
43
+ const customResources = __importStar(require("aws-cdk-lib/custom-resources"));
14
44
  const constructs_1 = require("constructs");
45
+ const fs_1 = require("fs");
46
+ const path = __importStar(require("path"));
15
47
  /**
16
48
  * Helper function to determine if a cluster is a DSQL cluster
17
49
  */
@@ -28,12 +60,23 @@ var DatabaseEngine;
28
60
  DatabaseEngine["DSQL"] = "dsql";
29
61
  })(DatabaseEngine || (exports.DatabaseEngine = DatabaseEngine = {}));
30
62
  class Provider extends constructs_1.Construct {
63
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-rds-sql.Provider", version: "9.0.0" };
31
64
  /**
32
65
  * Import an existing provider Lambda function
33
66
  */
34
67
  static fromProviderAttributes(scope, id, attrs) {
35
68
  return new ImportedProvider(scope, id, attrs);
36
69
  }
70
+ serviceToken;
71
+ secret;
72
+ handler;
73
+ cluster;
74
+ /**
75
+ * The engine like "postgres" or "mysql"
76
+ *
77
+ * @default - if we cannot determine this "postgres"
78
+ */
79
+ engine;
37
80
  constructor(scope, id, props) {
38
81
  super(scope, id);
39
82
  // Validate configuration
@@ -168,15 +211,11 @@ class Provider extends constructs_1.Construct {
168
211
  ...props.functionProps?.environment,
169
212
  ...environment,
170
213
  },
171
- initialPolicy: [
172
- deleteParameterPolicy,
173
- ...(props.functionProps?.initialPolicy ?? []),
174
- ],
214
+ initialPolicy: [deleteParameterPolicy, ...(props.functionProps?.initialPolicy ?? [])],
175
215
  });
176
216
  // Only configure security groups for traditional RDS (not DSQL)
177
217
  if (!isDsql &&
178
- (!props.functionProps?.securityGroups ||
179
- props.functionProps?.securityGroups.length === 0)) {
218
+ (!props.functionProps?.securityGroups || props.functionProps?.securityGroups.length === 0)) {
180
219
  const rdsCluster = props.cluster;
181
220
  rdsCluster.connections.allowDefaultPortFrom(fn, "Allow the rds sql handler to connect to db");
182
221
  }
@@ -184,9 +223,12 @@ class Provider extends constructs_1.Construct {
184
223
  }
185
224
  }
186
225
  exports.Provider = Provider;
187
- _a = JSII_RTTI_SYMBOL_1;
188
- Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "8.1.6" };
189
226
  class ImportedProvider extends constructs_1.Construct {
227
+ serviceToken;
228
+ handler;
229
+ secret;
230
+ engine;
231
+ cluster;
190
232
  constructor(scope, id, attrs) {
191
233
  super(scope, id);
192
234
  // Validate that either functionArn or functionName is provided
@@ -231,8 +273,7 @@ function resolveHandlerAssetDir() {
231
273
  path.join(packageRoot, "node_modules/cdk-rds-sql/lib/handler"),
232
274
  ];
233
275
  for (const dir of candidates) {
234
- if ((0, fs_1.existsSync)(path.join(dir, "index.js")) &&
235
- (0, fs_1.existsSync)(path.join(dir, "global-bundle.pem"))) {
276
+ if ((0, fs_1.existsSync)(path.join(dir, "index.js")) && (0, fs_1.existsSync)(path.join(dir, "global-bundle.pem"))) {
236
277
  return dir;
237
278
  }
238
279
  }
@@ -240,4 +281,4 @@ function resolveHandlerAssetDir() {
240
281
  "Run `pnpm exec projen build:handler` (or a full build) before synthesizing, " +
241
282
  "or reinstall cdk-rds-sql so lib/handler is present.");
242
283
  }
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQkFBK0I7QUFDL0IsNkJBQTRCO0FBQzVCLDZDQUE2QztBQUM3Qyw2Q0FBNEM7QUFDNUMsaURBQXVFO0FBQ3ZFLDJDQUEwQztBQUMxQyx1REFNK0I7QUFHL0IsZ0VBQStEO0FBQy9ELDJDQUFzQztBQUV0Qzs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUNwQixPQUErRDtJQUUvRCxPQUFPLE9BQU8sWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFBO0FBQzNDLENBQUM7QUF5RUQ7O0dBRUc7QUFDSCxJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDeEIsdUNBQXFCLENBQUE7SUFDckIsaUNBQWUsQ0FBQTtJQUNmLCtCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsY0FBYyw4QkFBZCxjQUFjLFFBSXpCO0FBaUNELE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBQ3JDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBeUI7UUFFekIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQWNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQix5QkFBeUI7UUFDekIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkVBQTJFLENBQzVFLENBQUE7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sSUFBSSxD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QUVELFNBQVMsT0FBTyxDQUFDLENBQVM7SUFDeEIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN2QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxzQkFBc0I7SUFDN0IsK0VBQStFO0lBQy9FLDBFQUEwRTtJQUMxRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQjtRQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1FBQzVDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFakIsTUFBTSxVQUFVLEdBQUc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHNDQUFzQyxDQUFDO0tBQy9ELENBQUE7SUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzdCLElBQ0UsSUFBQSxlQUFVLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdEMsSUFBQSxlQUFVLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUMvQyxDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0RBQWdELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7UUFDeEUsOEVBQThFO1FBQzlFLHFEQUFxRCxDQUN4RCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgZHNxbCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWRzcWxcIlxuaW1wb3J0IHsgSVZwYywgU3VibmV0VHlwZSwgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB7XG4gIENvZGUsXG4gIEZ1bmN0aW9uLFxuICBGdW5jdGlvbk9wdGlvbnMsXG4gIElGdW5jdGlvbixcbiAgUnVudGltZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHsgSURhdGFiYXNlQ2x1c3RlciwgSURhdGFiYXNlSW5zdGFuY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiXG5pbXBvcnQgeyBJU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBjbHVzdGVyIGlzIGEgRFNRTCBjbHVzdGVyXG4gKi9cbmZ1bmN0aW9uIGlzRHNxbENsdXN0ZXIoXG4gIGNsdXN0ZXI6IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZSB8IGRzcWwuQ2ZuQ2x1c3RlclxuKTogY2x1c3RlciBpcyBkc3FsLkNmbkNsdXN0ZXIge1xuICByZXR1cm4gY2x1c3RlciBpbnN0YW5jZW9mIGRzcWwuQ2ZuQ2x1c3RlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJkc1NxbFByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBwcm92aWRlciBsYW1iZGEuXG4gICAqXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgdGhlIFZQQyBvZiB5b3VyIGRhdGFiYXNlLlxuICAgKiBSZXF1aXJlZCB3aGVuIHlvdXIgZGF0YWJhc2UgaXMgb25seSBhY2Nlc3NpYmxlIGluIGEgVlBDLlxuICAgKiBOb3QgcmVxdWlyZWQgZm9yIERTUUwgYXMgaXQgdXNlcyBwdWJsaWMgZW5kcG9pbnRzIHdpdGggSUFNIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZ1bmN0aW9uIGlzIG5vdCBwbGFjZWQgd2l0aGluIGEgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwY1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBwbGFjZSB0aGUgbmV0d29yayBwcm92aWRlciBsYW1iZGEgd2l0aGluIHRoZSBWUEMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGlzb2xhdGVkIHN1Ym5ldCBpZiBub3Qgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogU3VibmV0U2VsZWN0aW9uXG5cbiAgLyoqXG4gICAqIFlvdXIgZGF0YWJhc2UgY2x1c3RlciBvciBpbnN0YW5jZS5cbiAgICogU3VwcG9ydHMgYm90aCB0cmFkaXRpb25hbCBSRFMvQXVyb3JhIGNsdXN0ZXJzIGFuZCBEU1FMIGNsdXN0ZXJzLlxuICAgKiAtIEZvciBSRFMvQXVyb3JhOiBzZWN1cml0eSBncm91cHMgd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGFjY2Vzc1xuICAgKiAtIEZvciBEU1FMOiBJQU0gYXV0aGVudGljYXRpb24gd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Ygc2VjcmV0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlcjogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlIHwgZHNxbC5DZm5DbHVzdGVyXG5cbiAgLyoqXG4gICAqIFNlY3JldCB0aGF0IGdyYW50cyBhY2Nlc3MgdG8geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogVXN1YWxseSB0aGlzIGlzIHlvdXIgY2x1c3RlcidzIG1hc3RlciBzZWNyZXQuXG4gICAqIE5vdCByZXF1aXJlZCB3aGVuIHJlbHlpbmcgb24gSUFNIGF1dGhlbnRpY2F0aW9uIChzdWNoIGFzIERTUUwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBmb3IgRFNRTCBjbHVzdGVycyB1c2luZyBJQU0gYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldD86IElTZWNyZXRcblxuICAvKipcbiAgICogVGltZW91dCBmb3IgbGFtYmRhIHRvIGRvIGl0cyB3b3JrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uXG5cbiAgLyoqXG4gICAqIExvZyBTUUwgc3RhdGVtZW50cy4gVGhpcyBpbmNsdWRlcyBwYXNzd29yZHMuIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dlcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uIHN1Y2ggYXMgdGhlIGxvZyBncm91cC4gSG93ZXZlcixcbiAgICogbGFtYmRhIGZ1bmN0aW9uIHByb3BlcnRpZXMgY29udHJvbGxlZCBieSBvdGhlciB7UmRzU3FsUHJvcHN9IHBhcmFtZXRlcnMgd2lsbCB0cnVtcFxuICAgKiBvcHRpb25zIHNldCB2aWEgdGhpcyBwYXJhbWV0ZXIuIFRoZSBoYW5kbGVyIGlzIHNoaXBwZWQgYXMgYSBwcmVidWlsdCBhc3NldDsgYnVuZGxpbmdcbiAgICogb3B0aW9ucyBmcm9tIE5vZGVqc0Z1bmN0aW9uIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVtcHR5XG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvblByb3BzPzogRnVuY3Rpb25PcHRpb25zXG5cbiAgLyoqXG4gICAqIFVzZSBTU0w/XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3NsPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBkYXRhYmFzZSBlbmdpbmVzXG4gKi9cbmV4cG9ydCBlbnVtIERhdGFiYXNlRW5naW5lIHtcbiAgUE9TVEdSRVMgPSBcInBvc3RncmVzXCIsXG4gIE1ZU1FMID0gXCJteXNxbFwiLFxuICBEU1FMID0gXCJkc3FsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb3ZpZGVyIHtcbiAgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcbiAgcmVhZG9ubHkgaGFuZGxlcjogSUZ1bmN0aW9uXG4gIHJlYWRvbmx5IHNlY3JldD86IElTZWNyZXRcbiAgcmVhZG9ubHkgZW5naW5lOiBzdHJpbmdcbiAgcmVhZG9ubHkgY2x1c3Rlcj86IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZSB8IGRzcWwuQ2ZuQ2x1c3RlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBFaXRoZXIgdGhlIEFSTiBvciBuYW1lIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFVzZSBmdW5jdGlvbkFybiBmb3IgY3Jvc3MtYWNjb3VudCBvciBjcm9zcy1yZWdpb24gc2NlbmFyaW9zLlxuICAgKiBVc2UgZnVuY3Rpb25OYW1lIGZvciBzYW1lLWFjY291bnQsIHNhbWUtcmVnaW9uIHNjZW5hcmlvcy5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uQXJuPzogc3RyaW5nXG4gIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBlbmdpbmU6IERhdGFiYXNlRW5naW5lXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjbHVzdGVyIGluZm9ybWF0aW9uIGZvciByb2xlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBXaGVuIGltcG9ydGluZyBhIHByb3ZpZGVyLCBjbHVzdGVyIGRldGFpbHMgYXJlIG9mdGVuIG5vdCBhdmFpbGFibGUuXG4gICAqIEhvd2V2ZXIsIHNvbWUgb3BlcmF0aW9ucyBsaWtlIHJvbGUgY3JlYXRpb24gcmVxdWlyZSBjbHVzdGVyIGVuZHBvaW50XG4gICAqIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGNvbm5lY3Rpb24gc2VjcmV0cy5cbiAgICpcbiAgICogSWYgeW91IHBsYW4gdG8gY3JlYXRlIHJvbGVzIHdpdGggdGhlIGltcG9ydGVkIHByb3ZpZGVyLCB5b3UgbXVzdFxuICAgKiBwcm92aWRlIHRoZSBjbHVzdGVyIHJlZmVyZW5jZS4gSWYgeW91IG9ubHkgcGxhbiB0byB1c2UgZXhpc3RpbmdcbiAgICogcm9sZXMsIGRhdGFiYXNlcywgc2NoZW1hcywgb3IgU1FMIG9wZXJhdGlvbnMsIHRoaXMgY2FuIGJlIG9taXR0ZWQuXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlIHwgZHNxbC5DZm5DbHVzdGVyXG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQcm92aWRlciB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgcHJvdmlkZXIgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICBzdGF0aWMgZnJvbVByb3ZpZGVyQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IFByb3ZpZGVyQXR0cmlidXRlc1xuICApOiBJUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRQcm92aWRlcihzY29wZSwgaWQsIGF0dHJzKVxuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ/OiBJU2VjcmV0XG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiBJRnVuY3Rpb25cbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXI/OiBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2UgfCBkc3FsLkNmbkNsdXN0ZXJcblxuICAvKipcbiAgICogVGhlIGVuZ2luZSBsaWtlIFwicG9zdGdyZXNcIiBvciBcIm15c3FsXCJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBpZiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoaXMgXCJwb3N0Z3Jlc1wiXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzU3FsUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgaXNEc3FsID0gaXNEc3FsQ2x1c3Rlcihwcm9wcy5jbHVzdGVyKVxuICAgIGlmICghaXNEc3FsICYmICFwcm9wcy5zZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFaXRoZXIgc2VjcmV0IChmb3IgdHJhZGl0aW9uYWwgUkRTKSBvciBjbHVzdGVyIHdpdGggRFNRTCBtdXN0IGJlIHByb3ZpZGVkXCJcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKCFpc0RzcWwgJiYgIXByb3BzLnZwYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciB0cmFkaXRpb25hbCBSRFMgZGF0YWJhc2VzXCIpXG4gICAgfVxuICAgIGlmIChpc0RzcWwgJiYgcHJvcHMuc2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwic2VjcmV0IHNob3VsZCBub3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyBEU1FMIGNsdXN0ZXIgKHVzZXMgSUFNIGF1dGhlbnRpY2F0aW9uKVwiXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5zZWNyZXQgPSBwcm9wcy5zZWNyZXRcbiAgICB0aGlzLmNsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyXG5cbiAgICAvLyBEZXRlcm1pbmUgZW5naW5lIGZyb20gY2x1c3Rlci9pbnN0YW5jZSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmdcbiAgICBpZiAoaXNEc3FsKSB7XG4gICAgICAvLyBEU1FMIGlzIGFsd2F5cyBQb3N0Z3JlU1FMLWNvbXBhdGlibGVcbiAgICAgIHRoaXMuZW5naW5lID0gRGF0YWJhc2VFbmdpbmUuRFNRTFxuICAgIH0gZWxzZSBpZiAoXCJjbHVzdGVySWRlbnRpZmllclwiIGluIHByb3BzLmNsdXN0ZXIpIHtcbiAgICAgIC8vIEl0J3MgYSBEYXRhYmFzZUNsdXN0ZXJcbiAgICAgIGNvbnN0IGNsdXN0ZXJFbmdpbmUgPSAocHJvcHMuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyKS5lbmdpbmVcbiAgICAgIHRoaXMuZW5naW5lID1cbiAgICAgICAgY2x1c3RlckVuZ2luZSAmJiBjbHVzdGVyRW5naW5lLmVuZ2luZUZhbWlseSA9PT0gXCJNWVNRTFwiXG4gICAgICAgICAgPyBEYXRhYmFzZUVuZ2luZS5NWVNRTFxuICAgICAgICAgIDogRGF0YWJhc2VFbmdpbmUuUE9TVEdSRVNcbiAgICB9IGVsc2UgaWYgKFwiaW5zdGFuY2VJZGVudGlmaWVyXCIgaW4gcHJvcHMuY2x1c3Rlcikge1xuICAgICAgLy8gSXQncyBhIERhdGFiYXNlSW5zdGFuY2VcbiAgICAgIGNvbnN0IGluc3RhbmNlRW5naW5lID0gKHByb3BzLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmVuZ2luZVxuICAgICAgdGhpcy5lbmdpbmUgPVxuICAgICAgICBpbnN0YW5jZUVuZ2luZSAmJiBpbnN0YW5jZUVuZ2luZS5lbmdpbmVGYW1pbHkgPT09IFwiTVlTUUxcIlxuICAgICAgICAgID8gRGF0YWJhc2VFbmdpbmUuTVlTUUxcbiAgICAgICAgICA6IERhdGFiYXNlRW5naW5lLlBPU1RHUkVTXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHBvc3RncmVzIGlmIGVuZ2luZSBoYXNuJ3QgYmVlbiBwcm92aWRlZFxuICAgICAgdGhpcy5lbmdpbmUgPSBEYXRhYmFzZUVuZ2luZS5QT1NUR1JFU1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IFwiUmRzU3FsXCIgKyBzbHVnaWZ5KFwiMjhiOWU3OTEtYWY2MC00YTMzLWJjYTgtZmZiNmYzMGVmOGM1XCIpXG4gICAgdGhpcy5oYW5kbGVyID1cbiAgICAgIChTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZChmdW5jdGlvbk5hbWUpIGFzIElGdW5jdGlvbikgPz9cbiAgICAgIHRoaXMubmV3Q3VzdG9tUmVzb3VyY2VIYW5kbGVyKHNjb3BlLCBmdW5jdGlvbk5hbWUsIHByb3BzKVxuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY3VzdG9tUmVzb3VyY2VzLlByb3ZpZGVyKHRoaXMsIFwiUmRzU3FsXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgfSlcbiAgICB0aGlzLnNlcnZpY2VUb2tlbiA9IHByb3ZpZGVyLnNlcnZpY2VUb2tlblxuXG4gICAgLy8gSGFuZGxlIGRhdGFiYXNlIGNvbm5lY3Rpb24gc2V0dXBcbiAgICBpZiAoaXNEc3FsKSB7XG4gICAgICAvLyBGb3IgRFNRTCwgZ3JhbnQgSUFNIHBlcm1pc3Npb25zIGluc3RlYWQgb2YgVlBDIHNlY3VyaXR5IGdyb3Vwc1xuICAgICAgY29uc3QgZHNxbENsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyIGFzIGRzcWwuQ2ZuQ2x1c3RlclxuICAgICAgdGhpcy5oYW5kbGVyLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXCJkc3FsOkRiQ29ubmVjdEFkbWluXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW2RzcWxDbHVzdGVyLmF0dHJSZXNvdXJjZUFybl0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyYWRpdGlvbmFsIFJEUyBzZXR1cCB3aXRoIHNlY3VyaXR5IGdyb3VwcyBhbmQgc2VjcmV0c1xuICAgICAgdGhpcy5zZWNyZXQhLmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpXG4gICAgICBpZiAodGhpcy5zZWNyZXQhLmVuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgLy8gSXQgc2VlbXMgd2UgbmVlZCB0byBncmFudCBleHBsaWNpdCBwZXJtaXNzaW9uXG4gICAgICAgIHRoaXMuc2VjcmV0IS5lbmNyeXB0aW9uS2V5LmdyYW50RGVjcnlwdCh0aGlzLmhhbmRsZXIpXG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuY2x1c3Rlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2x1c3RlciBkb2VzIG5vdCBoYXZlIGEgc2VjdXJpdHkgZ3JvdXAuXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzZWN1cml0eUdyb3VwID0gcHJvcHMuY2x1c3Rlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXSFcbiAgICAgICAgdGhpcy5oYW5kbGVyLm5vZGUuZGVmYXVsdENoaWxkPy5ub2RlLmFkZERlcGVuZGVuY3koc2VjdXJpdHlHcm91cClcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuY2x1c3RlcilcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXdDdXN0b21SZXNvdXJjZUhhbmRsZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBSZHNTcWxQcm9wc1xuICApOiBGdW5jdGlvbiB7XG4gICAgY29uc3QgaXNEc3FsID0gaXNEc3FsQ2x1c3Rlcihwcm9wcy5jbHVzdGVyKVxuICAgIGNvbnN0IGhhbmRsZXJEaXIgPSByZXNvbHZlSGFuZGxlckFzc2V0RGlyKClcblxuICAgIGxldCBzc2xfb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgIGlmIChwcm9wcy5zc2wgIT09IHVuZGVmaW5lZCAmJiAhcHJvcHMuc3NsKSB7XG4gICAgICBzc2xfb3B0aW9ucyA9IHtcbiAgICAgICAgU1NMOiBKU09OLnN0cmluZ2lmeShwcm9wcy5zc2wpLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBsb2dnZXIgPSBwcm9wcy5sb2dnZXIgPz8gZmFsc2VcblxuICAgIC8vIEJ1aWxkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IGVudmlyb25tZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgTE9HR0VSOiBsb2dnZXIudG9TdHJpbmcoKSxcbiAgICAgIC4uLnNzbF9vcHRpb25zLFxuICAgIH1cblxuICAgIC8vIEFkZCBEU1FMLXNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGlmIChpc0RzcWwpIHtcbiAgICAgIGNvbnN0IGRzcWxDbHVzdGVyID0gcHJvcHMuY2x1c3RlciBhcyBkc3FsLkNmbkNsdXN0ZXJcbiAgICAgIGNvbnN0IGNsdXN0ZXJJZCA9IGRzcWxDbHVzdGVyLmF0dHJJZGVudGlmaWVyXG4gICAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZihzY29wZSkucmVnaW9uXG4gICAgICBlbnZpcm9ubWVudC5EU1FMX0VORFBPSU5UID0gYCR7Y2x1c3RlcklkfS5kc3FsLiR7cmVnaW9ufS5vbi5hd3NgXG4gICAgICBlbnZpcm9ubWVudC5EU1FMX1BPUlQgPSBcIjU0MzJcIlxuICAgIH0gZWxzZSBpZiAocHJvcHMuc2VjcmV0KSB7XG4gICAgICAvLyBBZGQgc2VjcmV0IEFSTiB0byBlbnZpcm9ubWVudCBmb3IgdHJhZGl0aW9uYWwgUkRTXG4gICAgICBlbnZpcm9ubWVudC5TRUNSRVRfQVJOID0gcHJvcHMuc2VjcmV0LnNlY3JldEFyblxuICAgIH1cblxuICAgIGNvbnN0IHsgcGFydGl0aW9uLCByZWdpb246IHN0YWNrUmVnaW9uLCBhY2NvdW50IH0gPSBTdGFjay5vZihzY29wZSlcbiAgICBjb25zdCBkZWxldGVQYXJhbWV0ZXJQb2xpY3kgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbXCJzc206RGVsZXRlUGFyYW1ldGVyXCJdLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06c3NtOiR7c3RhY2tSZWdpb259OiR7YWNjb3VudH06cGFyYW1ldGVyLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgXCJzc206UmVzb3VyY2VUYWcvY3JlYXRlZC1ieVwiOiBcImNkay1yZHMtc3FsXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLmZ1bmN0aW9uUHJvcHMsXG4gICAgICAvLyBPbmx5IGNvbmZpZ3VyZSBWUEMgZm9yIHRyYWRpdGlvbmFsIFJEU1xuICAgICAgLi4uKGlzRHNxbFxuICAgICAgICA/IHt9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzID8/IHtcbiAgICAgICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgIC8vIFByZWJ1aWx0IGF0IHBhY2thZ2UgYnVpbGQgdGltZSDigJQgbm8gY29uc3VtZXItc2lkZSBlc2J1aWxkL3BucG0uXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChoYW5kbGVyRGlyLCB7XG4gICAgICAgIGV4Y2x1ZGU6IFtcIioudHNcIiwgXCIqLmQudHNcIiwgXCIqLm1hcFwiLCBcIi5naXRrZWVwXCJdLFxuICAgICAgfSksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0ID8/IHByb3BzLmZ1bmN0aW9uUHJvcHM/LnRpbWVvdXQgPz8gRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4ucHJvcHMuZnVuY3Rpb25Qcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgICAgZGVsZXRlUGFyYW1ldGVyUG9saWN5LFxuICAgICAgICAuLi4ocHJvcHMuZnVuY3Rpb25Qcm9wcz8uaW5pdGlhbFBvbGljeSA/PyBbXSksXG4gICAgICBdLFxuICAgIH0pXG5cbiAgICAvLyBPbmx5IGNvbmZpZ3VyZSBzZWN1cml0eSBncm91cHMgZm9yIHRyYWRpdGlvbmFsIFJEUyAobm90IERTUUwpXG4gICAgaWYgKFxuICAgICAgIWlzRHNxbCAmJlxuICAgICAgKCFwcm9wcy5mdW5jdGlvblByb3BzPy5zZWN1cml0eUdyb3VwcyB8fFxuICAgICAgICBwcm9wcy5mdW5jdGlvblByb3BzPy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPT09IDApXG4gICAgKSB7XG4gICAgICBjb25zdCByZHNDbHVzdGVyID0gcHJvcHMuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2VcbiAgICAgIHJkc0NsdXN0ZXIuY29ubmVjdGlvbnMuYWxsb3dEZWZhdWx0UG9ydEZyb20oXG4gICAgICAgIGZuLFxuICAgICAgICBcIkFsbG93IHRoZSByZHMgc3FsIGhhbmRsZXIgdG8gY29ubmVjdCB0byBkYlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuXG4gIH1cbn1cblxuY2xhc3MgSW1wb3J0ZWRQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQcm92aWRlciB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlVG9rZW46IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgaGFuZGxlcjogSUZ1bmN0aW9uXG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ/OiBJU2VjcmV0XG4gIHB1YmxpYyByZWFkb25seSBlbmdpbmU6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgY2x1c3Rlcj86IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZSB8IGRzcWwuQ2ZuQ2x1c3RlclxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBQcm92aWRlckF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IGVpdGhlciBmdW5jdGlvbkFybiBvciBmdW5jdGlvbk5hbWUgaXMgcHJvdmlkZWRcbiAgICBpZiAoIWF0dHJzLmZ1bmN0aW9uQXJuICYmICFhdHRycy5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBmdW5jdGlvbkFybiBvciBmdW5jdGlvbk5hbWUgbXVzdCBiZSBwcm92aWRlZFwiKVxuICAgIH1cbiAgICBpZiAoYXR0cnMuZnVuY3Rpb25Bcm4gJiYgYXR0cnMuZnVuY3Rpb25OYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlIGVpdGhlciBmdW5jdGlvbkFybiBvciBmdW5jdGlvbk5hbWUsIG5vdCBib3RoXCIpXG4gICAgfVxuXG4gICAgLy8gSW1wb3J0IHRoZSBleGlzdGluZyBMYW1iZGEgZnVuY3Rpb25cbiAgICB0aGlzLmhhbmRsZXIgPSBhdHRycy5mdW5jdGlvbkFyblxuICAgICAgPyBGdW5jdGlvbi5mcm9tRnVuY3Rpb25Bcm4odGhpcywgXCJIYW5kbGVyXCIsIGF0dHJzLmZ1bmN0aW9uQXJuKVxuICAgICAgOiBGdW5jdGlvbi5mcm9tRnVuY3Rpb25OYW1lKHRoaXMsIFwiSGFuZGxlclwiLCBhdHRycy5mdW5jdGlvbk5hbWUhKVxuXG4gICAgLy8gRGVyaXZlIHNlcnZpY2VUb2tlbiBieSB3cmFwcGluZyBpbiBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXJcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjdXN0b21SZXNvdXJjZXMuUHJvdmlkZXIodGhpcywgXCJQcm92aWRlclwiLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgIH0pXG4gICAgdGhpcy5zZXJ2aWNlVG9rZW4gPSBwcm92aWRlci5zZXJ2aWNlVG9rZW5cblxuICAgIHRoaXMuZW5naW5lID0gYXR0cnMuZW5naW5lXG4gICAgdGhpcy5zZWNyZXQgPSB1bmRlZmluZWQgLy8gSW1wb3J0ZWQgcHJvdmlkZXJzIGdldCBzZWNyZXQgZnJvbSBlbnZpcm9ubWVudFxuICAgIHRoaXMuY2x1c3RlciA9IGF0dHJzLmNsdXN0ZXIgLy8gT3B0aW9uYWwgY2x1c3RlciBmb3Igcm9sZSBjcmVhdGlvblxuICB9XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiXCIpXG59XG5cbi8qKlxuICogTG9jYXRlIHRoZSBwcmVidWlsdCBoYW5kbGVyIGFzc2V0IGRpcmVjdG9yeSAoaW5kZXguanMgKyBnbG9iYWwtYnVuZGxlLnBlbSkuXG4gKlxuICogUHJlZmVyIHRoZSBwYWNrYWdlLXJlbGF0aXZlIHBhdGggbmV4dCB0byB0aGlzIG1vZHVsZS4gRmFsbCBiYWNrIHRvIHRoZVxuICogaW5zdGFsbGVkIHBhY2thZ2UgdW5kZXIgbm9kZV9tb2R1bGVzIGZvciBsYXlvdXRzIChlLmcuIHNvbWUgU1NUIHNldHVwcylcbiAqIHdoZXJlIF9fZGlybmFtZSBkb2VzIG5vdCBzaXQgYmVzaWRlIHRoZSBwdWJsaXNoZWQgaGFuZGxlciBhc3NldHMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVIYW5kbGVyQXNzZXREaXIoKTogc3RyaW5nIHtcbiAgLy8gUHJlZmVyIHBhY2thZ2UuanNvbiBsb2NhdGlvbiB3aGVuIHNldDsgb3RoZXJ3aXNlIHRoZSBwcm9jZXNzIGN3ZCAoYXBwIHJvb3QpLlxuICAvLyBEbyBub3QgdXNlIHBhdGguZGlybmFtZShjd2QpIOKAlCB0aGF0IGluY29ycmVjdGx5IHdhbGtzIHVwIG9uZSBkaXJlY3RvcnkuXG4gIGNvbnN0IHBhY2thZ2VSb290ID0gcHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfanNvblxuICAgID8gcGF0aC5kaXJuYW1lKHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX2pzb24pXG4gICAgOiBwcm9jZXNzLmN3ZCgpXG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJcIiksXG4gICAgcGF0aC5qb2luKHBhY2thZ2VSb290LCBcIm5vZGVfbW9kdWxlcy9jZGstcmRzLXNxbC9saWIvaGFuZGxlclwiKSxcbiAgXVxuXG4gIGZvciAoY29uc3QgZGlyIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICBpZiAoXG4gICAgICBleGlzdHNTeW5jKHBhdGguam9pbihkaXIsIFwiaW5kZXguanNcIikpICYmXG4gICAgICBleGlzdHNTeW5jKHBhdGguam9pbihkaXIsIFwiZ2xvYmFsLWJ1bmRsZS5wZW1cIikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGlyXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBQcmVidWlsdCBoYW5kbGVyIGFzc2V0IG5vdCBmb3VuZCAobG9va2VkIGluOiAke2NhbmRpZGF0ZXMuam9pbihcIiwgXCIpfSkuIGAgK1xuICAgICAgXCJSdW4gYHBucG0gZXhlYyBwcm9qZW4gYnVpbGQ6aGFuZGxlcmAgKG9yIGEgZnVsbCBidWlsZCkgYmVmb3JlIHN5bnRoZXNpemluZywgXCIgK1xuICAgICAgXCJvciByZWluc3RhbGwgY2RrLXJkcy1zcWwgc28gbGliL2hhbmRsZXIgaXMgcHJlc2VudC5cIlxuICApXG59XG4iXX0=
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUE2QztBQUM3QywyREFBNEM7QUFDNUMsaURBQWlGO0FBQ2pGLHlEQUEwQztBQUMxQyx1REFNK0I7QUFHL0IsOEVBQStEO0FBQy9ELDJDQUFzQztBQUN0QywyQkFBK0I7QUFDL0IsMkNBQTRCO0FBRTVCOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQ3BCLE9BQStEO0lBRS9ELE9BQU8sT0FBTyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUE7QUFDM0MsQ0FBQztBQXlFRDs7R0FFRztBQUNILElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4Qix1Q0FBcUIsQ0FBQTtJQUNyQixpQ0FBZSxDQUFBO0lBQ2YsK0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekI7QUFpQ0QsTUFBYSxRQUFTLFNBQVEsc0JBQVM7O0lBQ3JDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBeUI7UUFFekIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVlLFlBQVksQ0FBUTtJQUNwQixNQUFNLENBQVU7SUFDaEIsT0FBTyxDQUFXO0lBQ2xCLE9BQU8sQ0FBeUQ7SUFFaEY7Ozs7T0FJRztJQUNhLE1BQU0sQ0FBUTtJQUU5QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIseUJBQXlCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0MsSUFB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QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7UUFDeEUsOEVBQThFO1FBQzlFLHFEQUFxRCxDQUN4RCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgKiBhcyBkc3FsIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHNxbFwiXG5pbXBvcnQgeyB0eXBlIElWcGMsIHR5cGUgU3VibmV0U2VsZWN0aW9uLCBTdWJuZXRUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB7XG4gIENvZGUsXG4gIHR5cGUgRnVuY3Rpb25PcHRpb25zLFxuICB0eXBlIElGdW5jdGlvbixcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIFJ1bnRpbWUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCB0eXBlIHsgSURhdGFiYXNlQ2x1c3RlciwgSURhdGFiYXNlSW5zdGFuY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiXG5pbXBvcnQgdHlwZSB7IElTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBjbHVzdGVyIGlzIGEgRFNRTCBjbHVzdGVyXG4gKi9cbmZ1bmN0aW9uIGlzRHNxbENsdXN0ZXIoXG4gIGNsdXN0ZXI6IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZSB8IGRzcWwuQ2ZuQ2x1c3RlclxuKTogY2x1c3RlciBpcyBkc3FsLkNmbkNsdXN0ZXIge1xuICByZXR1cm4gY2x1c3RlciBpbnN0YW5jZW9mIGRzcWwuQ2ZuQ2x1c3RlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJkc1NxbFByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBwcm92aWRlciBsYW1iZGEuXG4gICAqXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgdGhlIFZQQyBvZiB5b3VyIGRhdGFiYXNlLlxuICAgKiBSZXF1aXJlZCB3aGVuIHlvdXIgZGF0YWJhc2UgaXMgb25seSBhY2Nlc3NpYmxlIGluIGEgVlBDLlxuICAgKiBOb3QgcmVxdWlyZWQgZm9yIERTUUwgYXMgaXQgdXNlcyBwdWJsaWMgZW5kcG9pbnRzIHdpdGggSUFNIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZ1bmN0aW9uIGlzIG5vdCBwbGFjZWQgd2l0aGluIGEgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwY1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBwbGFjZSB0aGUgbmV0d29yayBwcm92aWRlciBsYW1iZGEgd2l0aGluIHRoZSBWUEMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGlzb2xhdGVkIHN1Ym5ldCBpZiBub3Qgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogU3VibmV0U2VsZWN0aW9uXG5cbiAgLyoqXG4gICAqIFlvdXIgZGF0YWJhc2UgY2x1c3RlciBvciBpbnN0YW5jZS5cbiAgICogU3VwcG9ydHMgYm90aCB0cmFkaXRpb25hbCBSRFMvQXVyb3JhIGNsdXN0ZXJzIGFuZCBEU1FMIGNsdXN0ZXJzLlxuICAgKiAtIEZvciBSRFMvQXVyb3JhOiBzZWN1cml0eSBncm91cHMgd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGFjY2Vzc1xuICAgKiAtIEZvciBEU1FMOiBJQU0gYXV0aGVudGljYXRpb24gd2lsbCBiZSB1c2VkIGluc3RlYWQgb2Ygc2VjcmV0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlcjogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlIHwgZHNxbC5DZm5DbHVzdGVyXG5cbiAgLyoqXG4gICAqIFNlY3JldCB0aGF0IGdyYW50cyBhY2Nlc3MgdG8geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogVXN1YWxseSB0aGlzIGlzIHlvdXIgY2x1c3RlcidzIG1hc3RlciBzZWNyZXQuXG4gICAqIE5vdCByZXF1aXJlZCB3aGVuIHJlbHlpbmcgb24gSUFNIGF1dGhlbnRpY2F0aW9uIChzdWNoIGFzIERTUUwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBmb3IgRFNRTCBjbHVzdGVycyB1c2luZyBJQU0gYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldD86IElTZWNyZXRcblxuICAvKipcbiAgICogVGltZW91dCBmb3IgbGFtYmRhIHRvIGRvIGl0cyB3b3JrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uXG5cbiAgLyoqXG4gICAqIExvZyBTUUwgc3RhdGVtZW50cy4gVGhpcyBpbmNsdWRlcyBwYXNzd29yZHMuIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dlcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uIHN1Y2ggYXMgdGhlIGxvZyBncm91cC4gSG93ZXZlcixcbiAgICogbGFtYmRhIGZ1bmN0aW9uIHByb3BlcnRpZXMgY29udHJvbGxlZCBieSBvdGhlciB7UmRzU3FsUHJvcHN9IHBhcmFtZXRlcnMgd2lsbCB0cnVtcFxuICAgKiBvcHRpb25zIHNldCB2aWEgdGhpcyBwYXJhbWV0ZXIuIFRoZSBoYW5kbGVyIGlzIHNoaXBwZWQgYXMgYSBwcmVidWlsdCBhc3NldDsgYnVuZGxpbmdcbiAgICogb3B0aW9ucyBmcm9tIE5vZGVqc0Z1bmN0aW9uIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVtcHR5XG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvblByb3BzPzogRnVuY3Rpb25PcHRpb25zXG5cbiAgLyoqXG4gICAqIFVzZSBTU0w/XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3NsPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBkYXRhYmFzZSBlbmdpbmVzXG4gKi9cbmV4cG9ydCBlbnVtIERhdGFiYXNlRW5naW5lIHtcbiAgUE9TVEdSRVMgPSBcInBvc3RncmVzXCIsXG4gIE1ZU1FMID0gXCJteXNxbFwiLFxuICBEU1FMID0gXCJkc3FsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb3ZpZGVyIHtcbiAgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcbiAgcmVhZG9ubHkgaGFuZGxlcjogSUZ1bmN0aW9uXG4gIHJlYWRvbmx5IHNlY3JldD86IElTZWNyZXRcbiAgcmVhZG9ubHkgZW5naW5lOiBzdHJpbmdcbiAgcmVhZG9ubHkgY2x1c3Rlcj86IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZSB8IGRzcWwuQ2ZuQ2x1c3RlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBFaXRoZXIgdGhlIEFSTiBvciBuYW1lIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFVzZSBmdW5jdGlvbkFybiBmb3IgY3Jvc3MtYWNjb3VudCBvciBjcm9zcy1yZWdpb24gc2NlbmFyaW9zLlxuICAgKiBVc2UgZnVuY3Rpb25OYW1lIGZvciBzYW1lLWFjY291bnQsIHNhbWUtcmVnaW9uIHNjZW5hcmlvcy5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uQXJuPzogc3RyaW5nXG4gIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBlbmdpbmU6IERhdGFiYXNlRW5naW5lXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjbHVzdGVyIGluZm9ybWF0aW9uIGZvciByb2xlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBXaGVuIGltcG9ydGluZyBhIHByb3ZpZGVyLCBjbHVzdGVyIGRldGFpbHMgYXJlIG9mdGVuIG5vdCBhdmFpbGFibGUuXG4gICAqIEhvd2V2ZXIsIHNvbWUgb3BlcmF0aW9ucyBsaWtlIHJvbGUgY3JlYXRpb24gcmVxdWlyZSBjbHVzdGVyIGVuZHBvaW50XG4gICAqIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGNvbm5lY3Rpb24gc2VjcmV0cy5cbiAgICpcbiAgICogSWYgeW91IHBsYW4gdG8gY3JlYXRlIHJvbGVzIHdpdGggdGhlIGltcG9ydGVkIHByb3ZpZGVyLCB5b3UgbXVzdFxuICAgKiBwcm92aWRlIHRoZSBjbHVzdGVyIHJlZmVyZW5jZS4gSWYgeW91IG9ubHkgcGxhbiB0byB1c2UgZXhpc3RpbmdcbiAgICogcm9sZXMsIGRhdGFiYXNlcywgc2NoZW1hcywgb3IgU1FMIG9wZXJhdGlvbnMsIHRoaXMgY2FuIGJlIG9taXR0ZWQuXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlIHwgZHNxbC5DZm5DbHVzdGVyXG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQcm92aWRlciB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgcHJvdmlkZXIgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICBzdGF0aWMgZnJvbVByb3ZpZGVyQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IFByb3ZpZGVyQXR0cmlidXRlc1xuICApOiBJUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRQcm92aWRlcihzY29wZSwgaWQsIGF0dHJzKVxuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ/OiBJU2VjcmV0XG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiBJRnVuY3Rpb25cbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXI/OiBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2UgfCBkc3FsLkNmbkNsdXN0ZXJcblxuICAvKipcbiAgICogVGhlIGVuZ2luZSBsaWtlIFwicG9zdGdyZXNcIiBvciBcIm15c3FsXCJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBpZiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoaXMgXCJwb3N0Z3Jlc1wiXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzU3FsUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgaXNEc3FsID0gaXNEc3FsQ2x1c3Rlcihwcm9wcy5jbHVzdGVyKVxuICAgIGlmICghaXNEc3FsICYmICFwcm9wcy5zZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBzZWNyZXQgKGZvciB0cmFkaXRpb25hbCBSRFMpIG9yIGNsdXN0ZXIgd2l0aCBEU1FMIG11c3QgYmUgcHJvdmlkZWRcIilcbiAgICB9XG4gICAgaWYgKCFpc0RzcWwgJiYgIXByb3BzLnZwYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciB0cmFkaXRpb25hbCBSRFMgZGF0YWJhc2VzXCIpXG4gICAgfVxuICAgIGlmIChpc0RzcWwgJiYgcHJvcHMuc2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwic2VjcmV0IHNob3VsZCBub3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyBEU1FMIGNsdXN0ZXIgKHVzZXMgSUFNIGF1dGhlbnRpY2F0aW9uKVwiXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5zZWNyZXQgPSBwcm9wcy5zZWNyZXRcbiAgICB0aGlzLmNsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyXG5cbiAgICAvLyBEZXRlcm1pbmUgZW5naW5lIGZyb20gY2x1c3Rlci9pbnN0YW5jZSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmdcbiAgICBpZiAoaXNEc3FsKSB7XG4gICAgICAvLyBEU1FMIGlzIGFsd2F5cyBQb3N0Z3JlU1FMLWNvbXBhdGlibGVcbiAgICAgIHRoaXMuZW5naW5lID0gRGF0YWJhc2VFbmdpbmUuRFNRTFxuICAgIH0gZWxzZSBpZiAoXCJjbHVzdGVySWRlbnRpZmllclwiIGluIHByb3BzLmNsdXN0ZXIpIHtcbiAgICAgIC8vIEl0J3MgYSBEYXRhYmFzZUNsdXN0ZXJcbiAgICAgIGNvbnN0IGNsdXN0ZXJFbmdpbmUgPSAocHJvcHMuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyKS5lbmdpbmVcbiAgICAgIHRoaXMuZW5naW5lID1cbiAgICAgICAgY2x1c3RlckVuZ2luZSAmJiBjbHVzdGVyRW5naW5lLmVuZ2luZUZhbWlseSA9PT0gXCJNWVNRTFwiXG4gICAgICAgICAgPyBEYXRhYmFzZUVuZ2luZS5NWVNRTFxuICAgICAgICAgIDogRGF0YWJhc2VFbmdpbmUuUE9TVEdSRVNcbiAgICB9IGVsc2UgaWYgKFwiaW5zdGFuY2VJZGVudGlmaWVyXCIgaW4gcHJvcHMuY2x1c3Rlcikge1xuICAgICAgLy8gSXQncyBhIERhdGFiYXNlSW5zdGFuY2VcbiAgICAgIGNvbnN0IGluc3RhbmNlRW5naW5lID0gKHByb3BzLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmVuZ2luZVxuICAgICAgdGhpcy5lbmdpbmUgPVxuICAgICAgICBpbnN0YW5jZUVuZ2luZSAmJiBpbnN0YW5jZUVuZ2luZS5lbmdpbmVGYW1pbHkgPT09IFwiTVlTUUxcIlxuICAgICAgICAgID8gRGF0YWJhc2VFbmdpbmUuTVlTUUxcbiAgICAgICAgICA6IERhdGFiYXNlRW5naW5lLlBPU1RHUkVTXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHBvc3RncmVzIGlmIGVuZ2luZSBoYXNuJ3QgYmVlbiBwcm92aWRlZFxuICAgICAgdGhpcy5lbmdpbmUgPSBEYXRhYmFzZUVuZ2luZS5QT1NUR1JFU1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IFwiUmRzU3FsXCIgKyBzbHVnaWZ5KFwiMjhiOWU3OTEtYWY2MC00YTMzLWJjYTgtZmZiNmYzMGVmOGM1XCIpXG4gICAgdGhpcy5oYW5kbGVyID1cbiAgICAgIChTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZChmdW5jdGlvbk5hbWUpIGFzIElGdW5jdGlvbikgPz9cbiAgICAgIHRoaXMubmV3Q3VzdG9tUmVzb3VyY2VIYW5kbGVyKHNjb3BlLCBmdW5jdGlvbk5hbWUsIHByb3BzKVxuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY3VzdG9tUmVzb3VyY2VzLlByb3ZpZGVyKHRoaXMsIFwiUmRzU3FsXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgfSlcbiAgICB0aGlzLnNlcnZpY2VUb2tlbiA9IHByb3ZpZGVyLnNlcnZpY2VUb2tlblxuXG4gICAgLy8gSGFuZGxlIGRhdGFiYXNlIGNvbm5lY3Rpb24gc2V0dXBcbiAgICBpZiAoaXNEc3FsKSB7XG4gICAgICAvLyBGb3IgRFNRTCwgZ3JhbnQgSUFNIHBlcm1pc3Npb25zIGluc3RlYWQgb2YgVlBDIHNlY3VyaXR5IGdyb3Vwc1xuICAgICAgY29uc3QgZHNxbENsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyIGFzIGRzcWwuQ2ZuQ2x1c3RlclxuICAgICAgdGhpcy5oYW5kbGVyLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXCJkc3FsOkRiQ29ubmVjdEFkbWluXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW2RzcWxDbHVzdGVyLmF0dHJSZXNvdXJjZUFybl0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyYWRpdGlvbmFsIFJEUyBzZXR1cCB3aXRoIHNlY3VyaXR5IGdyb3VwcyBhbmQgc2VjcmV0c1xuICAgICAgdGhpcy5zZWNyZXQhLmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpXG4gICAgICBpZiAodGhpcy5zZWNyZXQhLmVuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgLy8gSXQgc2VlbXMgd2UgbmVlZCB0byBncmFudCBleHBsaWNpdCBwZXJtaXNzaW9uXG4gICAgICAgIHRoaXMuc2VjcmV0IS5lbmNyeXB0aW9uS2V5LmdyYW50RGVjcnlwdCh0aGlzLmhhbmRsZXIpXG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuY2x1c3Rlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2x1c3RlciBkb2VzIG5vdCBoYXZlIGEgc2VjdXJpdHkgZ3JvdXAuXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzZWN1cml0eUdyb3VwID0gcHJvcHMuY2x1c3Rlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXSFcbiAgICAgICAgdGhpcy5oYW5kbGVyLm5vZGUuZGVmYXVsdENoaWxkPy5ub2RlLmFkZERlcGVuZGVuY3koc2VjdXJpdHlHcm91cClcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuY2x1c3RlcilcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXdDdXN0b21SZXNvdXJjZUhhbmRsZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBSZHNTcWxQcm9wc1xuICApOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgY29uc3QgaXNEc3FsID0gaXNEc3FsQ2x1c3Rlcihwcm9wcy5jbHVzdGVyKVxuICAgIGNvbnN0IGhhbmRsZXJEaXIgPSByZXNvbHZlSGFuZGxlckFzc2V0RGlyKClcblxuICAgIGxldCBzc2xfb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgIGlmIChwcm9wcy5zc2wgIT09IHVuZGVmaW5lZCAmJiAhcHJvcHMuc3NsKSB7XG4gICAgICBzc2xfb3B0aW9ucyA9IHtcbiAgICAgICAgU1NMOiBKU09OLnN0cmluZ2lmeShwcm9wcy5zc2wpLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBsb2dnZXIgPSBwcm9wcy5sb2dnZXIgPz8gZmFsc2VcblxuICAgIC8vIEJ1aWxkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IGVudmlyb25tZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgTE9HR0VSOiBsb2dnZXIudG9TdHJpbmcoKSxcbiAgICAgIC4uLnNzbF9vcHRpb25zLFxuICAgIH1cblxuICAgIC8vIEFkZCBEU1FMLXNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGlmIChpc0RzcWwpIHtcbiAgICAgIGNvbnN0IGRzcWxDbHVzdGVyID0gcHJvcHMuY2x1c3RlciBhcyBkc3FsLkNmbkNsdXN0ZXJcbiAgICAgIGNvbnN0IGNsdXN0ZXJJZCA9IGRzcWxDbHVzdGVyLmF0dHJJZGVudGlmaWVyXG4gICAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZihzY29wZSkucmVnaW9uXG4gICAgICBlbnZpcm9ubWVudC5EU1FMX0VORFBPSU5UID0gYCR7Y2x1c3RlcklkfS5kc3FsLiR7cmVnaW9ufS5vbi5hd3NgXG4gICAgICBlbnZpcm9ubWVudC5EU1FMX1BPUlQgPSBcIjU0MzJcIlxuICAgIH0gZWxzZSBpZiAocHJvcHMuc2VjcmV0KSB7XG4gICAgICAvLyBBZGQgc2VjcmV0IEFSTiB0byBlbnZpcm9ubWVudCBmb3IgdHJhZGl0aW9uYWwgUkRTXG4gICAgICBlbnZpcm9ubWVudC5TRUNSRVRfQVJOID0gcHJvcHMuc2VjcmV0LnNlY3JldEFyblxuICAgIH1cblxuICAgIGNvbnN0IHsgcGFydGl0aW9uLCByZWdpb246IHN0YWNrUmVnaW9uLCBhY2NvdW50IH0gPSBTdGFjay5vZihzY29wZSlcbiAgICBjb25zdCBkZWxldGVQYXJhbWV0ZXJQb2xpY3kgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbXCJzc206RGVsZXRlUGFyYW1ldGVyXCJdLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke3BhcnRpdGlvbn06c3NtOiR7c3RhY2tSZWdpb259OiR7YWNjb3VudH06cGFyYW1ldGVyLypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgXCJzc206UmVzb3VyY2VUYWcvY3JlYXRlZC1ieVwiOiBcImNkay1yZHMtc3FsXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLmZ1bmN0aW9uUHJvcHMsXG4gICAgICAvLyBPbmx5IGNvbmZpZ3VyZSBWUEMgZm9yIHRyYWRpdGlvbmFsIFJEU1xuICAgICAgLi4uKGlzRHNxbFxuICAgICAgICA/IHt9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzID8/IHtcbiAgICAgICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgIC8vIFByZWJ1aWx0IGF0IHBhY2thZ2UgYnVpbGQgdGltZSDigJQgbm8gY29uc3VtZXItc2lkZSBlc2J1aWxkL3BucG0uXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChoYW5kbGVyRGlyLCB7XG4gICAgICAgIGV4Y2x1ZGU6IFtcIioudHNcIiwgXCIqLmQudHNcIiwgXCIqLm1hcFwiLCBcIi5naXRrZWVwXCJdLFxuICAgICAgfSksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0ID8/IHByb3BzLmZ1bmN0aW9uUHJvcHM/LnRpbWVvdXQgPz8gRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4ucHJvcHMuZnVuY3Rpb25Qcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGluaXRpYWxQb2xpY3k6IFtkZWxldGVQYXJhbWV0ZXJQb2xpY3ksIC4uLihwcm9wcy5mdW5jdGlvblByb3BzPy5pbml0aWFsUG9saWN5ID8/IFtdKV0sXG4gICAgfSlcblxuICAgIC8vIE9ubHkgY29uZmlndXJlIHNlY3VyaXR5IGdyb3VwcyBmb3IgdHJhZGl0aW9uYWwgUkRTIChub3QgRFNRTClcbiAgICBpZiAoXG4gICAgICAhaXNEc3FsICYmXG4gICAgICAoIXByb3BzLmZ1bmN0aW9uUHJvcHM/LnNlY3VyaXR5R3JvdXBzIHx8IHByb3BzLmZ1bmN0aW9uUHJvcHM/LnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIGNvbnN0IHJkc0NsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZVxuICAgICAgcmRzQ2x1c3Rlci5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0RnJvbShmbiwgXCJBbGxvdyB0aGUgcmRzIHNxbCBoYW5kbGVyIHRvIGNvbm5lY3QgdG8gZGJcIilcbiAgICB9XG5cbiAgICByZXR1cm4gZm5cbiAgfVxufVxuXG5jbGFzcyBJbXBvcnRlZFByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVByb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiBJRnVuY3Rpb25cbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldD86IElTZWNyZXRcbiAgcHVibGljIHJlYWRvbmx5IGVuZ2luZTogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBjbHVzdGVyPzogSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlIHwgZHNxbC5DZm5DbHVzdGVyXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFByb3ZpZGVyQXR0cmlidXRlcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgZWl0aGVyIGZ1bmN0aW9uQXJuIG9yIGZ1bmN0aW9uTmFtZSBpcyBwcm92aWRlZFxuICAgIGlmICghYXR0cnMuZnVuY3Rpb25Bcm4gJiYgIWF0dHJzLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWl0aGVyIGZ1bmN0aW9uQXJuIG9yIGZ1bmN0aW9uTmFtZSBtdXN0IGJlIHByb3ZpZGVkXCIpXG4gICAgfVxuICAgIGlmIChhdHRycy5mdW5jdGlvbkFybiAmJiBhdHRycy5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3ZpZGUgZWl0aGVyIGZ1bmN0aW9uQXJuIG9yIGZ1bmN0aW9uTmFtZSwgbm90IGJvdGhcIilcbiAgICB9XG5cbiAgICAvLyBJbXBvcnQgdGhlIGV4aXN0aW5nIExhbWJkYSBmdW5jdGlvblxuICAgIHRoaXMuaGFuZGxlciA9IGF0dHJzLmZ1bmN0aW9uQXJuXG4gICAgICA/IExhbWJkYUZ1bmN0aW9uLmZyb21GdW5jdGlvbkFybih0aGlzLCBcIkhhbmRsZXJcIiwgYXR0cnMuZnVuY3Rpb25Bcm4pXG4gICAgICA6IExhbWJkYUZ1bmN0aW9uLmZyb21GdW5jdGlvbk5hbWUodGhpcywgXCJIYW5kbGVyXCIsIGF0dHJzLmZ1bmN0aW9uTmFtZSEpXG5cbiAgICAvLyBEZXJpdmUgc2VydmljZVRva2VuIGJ5IHdyYXBwaW5nIGluIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGN1c3RvbVJlc291cmNlcy5Qcm92aWRlcih0aGlzLCBcIlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgfSlcbiAgICB0aGlzLnNlcnZpY2VUb2tlbiA9IHByb3ZpZGVyLnNlcnZpY2VUb2tlblxuXG4gICAgdGhpcy5lbmdpbmUgPSBhdHRycy5lbmdpbmVcbiAgICB0aGlzLnNlY3JldCA9IHVuZGVmaW5lZCAvLyBJbXBvcnRlZCBwcm92aWRlcnMgZ2V0IHNlY3JldCBmcm9tIGVudmlyb25tZW50XG4gICAgdGhpcy5jbHVzdGVyID0gYXR0cnMuY2x1c3RlciAvLyBPcHRpb25hbCBjbHVzdGVyIGZvciByb2xlIGNyZWF0aW9uXG4gIH1cbn1cblxuZnVuY3Rpb24gc2x1Z2lmeSh4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4geC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIilcbn1cblxuLyoqXG4gKiBMb2NhdGUgdGhlIHByZWJ1aWx0IGhhbmRsZXIgYXNzZXQgZGlyZWN0b3J5IChpbmRleC5qcyArIGdsb2JhbC1idW5kbGUucGVtKS5cbiAqXG4gKiBQcmVmZXIgdGhlIHBhY2thZ2UtcmVsYXRpdmUgcGF0aCBuZXh0IHRvIHRoaXMgbW9kdWxlLiBGYWxsIGJhY2sgdG8gdGhlXG4gKiBpbnN0YWxsZWQgcGFja2FnZSB1bmRlciBub2RlX21vZHVsZXMgZm9yIGxheW91dHMgKGUuZy4gc29tZSBTU1Qgc2V0dXBzKVxuICogd2hlcmUgX19kaXJuYW1lIGRvZXMgbm90IHNpdCBiZXNpZGUgdGhlIHB1Ymxpc2hlZCBoYW5kbGVyIGFzc2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUhhbmRsZXJBc3NldERpcigpOiBzdHJpbmcge1xuICAvLyBQcmVmZXIgcGFja2FnZS5qc29uIGxvY2F0aW9uIHdoZW4gc2V0OyBvdGhlcndpc2UgdGhlIHByb2Nlc3MgY3dkIChhcHAgcm9vdCkuXG4gIC8vIERvIG5vdCB1c2UgcGF0aC5kaXJuYW1lKGN3ZCkg4oCUIHRoYXQgaW5jb3JyZWN0bHkgd2Fsa3MgdXAgb25lIGRpcmVjdG9yeS5cbiAgY29uc3QgcGFja2FnZVJvb3QgPSBwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9qc29uXG4gICAgPyBwYXRoLmRpcm5hbWUocHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfanNvbilcbiAgICA6IHByb2Nlc3MuY3dkKClcblxuICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlclwiKSxcbiAgICBwYXRoLmpvaW4ocGFja2FnZVJvb3QsIFwibm9kZV9tb2R1bGVzL2Nkay1yZHMtc3FsL2xpYi9oYW5kbGVyXCIpLFxuICBdXG5cbiAgZm9yIChjb25zdCBkaXIgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmIChleGlzdHNTeW5jKHBhdGguam9pbihkaXIsIFwiaW5kZXguanNcIikpICYmIGV4aXN0c1N5bmMocGF0aC5qb2luKGRpciwgXCJnbG9iYWwtYnVuZGxlLnBlbVwiKSkpIHtcbiAgICAgIHJldHVybiBkaXJcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFByZWJ1aWx0IGhhbmRsZXIgYXNzZXQgbm90IGZvdW5kIChsb29rZWQgaW46ICR7Y2FuZGlkYXRlcy5qb2luKFwiLCBcIil9KS4gYCArXG4gICAgICBcIlJ1biBgcG5wbSBleGVjIHByb2plbiBidWlsZDpoYW5kbGVyYCAob3IgYSBmdWxsIGJ1aWxkKSBiZWZvcmUgc3ludGhlc2l6aW5nLCBcIiArXG4gICAgICBcIm9yIHJlaW5zdGFsbCBjZGstcmRzLXNxbCBzbyBsaWIvaGFuZGxlciBpcyBwcmVzZW50LlwiXG4gIClcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { CustomResource } from "aws-cdk-lib";
2
- import { Construct } from "constructs";
3
- import { IDatabase } from "./database";
4
- import { IProvider } from "./provider";
2
+ import type { Construct } from "constructs";
3
+ import type { IDatabase } from "./database";
4
+ import type { IProvider } from "./provider";
5
5
  export interface RoleProps {
6
6
  /**
7
7
  * Provider.
@@ -39,6 +39,12 @@ export interface RoleProps {
39
39
  * @default false - use password authentication
40
40
  */
41
41
  readonly enableIamAuth?: boolean;
42
+ /**
43
+ * Maximum simultaneous connections for this MySQL/MariaDB user.
44
+ *
45
+ * @default undefined - no connection limit is applied
46
+ */
47
+ readonly maxUserConnections?: number;
42
48
  }
43
49
  export declare class Role extends CustomResource {
44
50
  constructor(scope: Construct, id: string, props: RoleProps);
@@ -17,6 +17,9 @@ class Role extends aws_cdk_lib_1.CustomResource {
17
17
  PasswordArn: props.passwordArn,
18
18
  DatabaseName: props.database ? props.database.databaseName : props.databaseName,
19
19
  EnableIamAuth: props.enableIamAuth,
20
+ ...(props.maxUserConnections !== undefined
21
+ ? { MaxUserConnections: props.maxUserConnections }
22
+ : {}),
20
23
  },
21
24
  });
22
25
  this.node.addDependency(props.provider);
@@ -25,4 +28,4 @@ class Role extends aws_cdk_lib_1.CustomResource {
25
28
  }
26
29
  }
27
30
  exports.Role = Role;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5jdXN0b20tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9sZS5jdXN0b20tcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTRDO0FBRzVDLGlDQUF1QztBQStDdkMsTUFBYSxJQUFLLFNBQVEsNEJBQWM7SUFDdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUN4RCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLE1BQU0seUNBQXlDLENBQUE7UUFDakQsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsSUFBSTtnQkFDN0IsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hGLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDL0UsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO2FBQ25DO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksS0FBSyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsQ0FBQztDQUNGO0FBbkJELG9CQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IElEYXRhYmFzZSB9IGZyb20gXCIuL2RhdGFiYXNlXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBJUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZVByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IElQcm92aWRlclxuXG4gIC8qKlxuICAgKiBTUUwuXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEEgbmV3IHNlY3JldCBpcyBjcmVhdGVkIGZvciB0aGlzIHVzZXIuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgZW5jcnlwdCBpdCB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZEFybjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIHRoaXMgdXNlciBpcyBleHBlY3RlZCB0byB1c2UuXG4gICAqXG4gICAqIFNwZWNpZnkgbm9uZSBvZiBgZGF0YWJhc2VgIG9yIGBkYXRhYmFzZU5hbWVgIG9yIG9ubHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGNvbm5lY3Rpb24gdG8gYW55IGRhdGFiYXNlIGlzIGdyYW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlPzogSURhdGFiYXNlXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG5hbWUgdGhpcyB1c2VyIGlzIGV4cGVjdGVkIHRvIHVzZS5cbiAgICpcbiAgICogU3BlY2lmeSBub25lIG9mIGBkYXRhYmFzZWAgb3IgYGRhdGFiYXNlTmFtZWAgb3Igb25seSBvbmUgb2YgdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gY29ubmVjdGlvbiB0byBhbnkgZGF0YWJhc2UgaXMgZ3JhbnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBJQU0gYXV0aGVudGljYXRpb24gZm9yIHRoaXMgcm9sZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgLSB1c2UgcGFzc3dvcmQgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUlhbUF1dGg/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSB7XG4gICAgaWYgKHByb3BzLmRhdGFiYXNlICYmIHByb3BzLmRhdGFiYXNlTmFtZSkge1xuICAgICAgdGhyb3cgXCJTcGVjaWZ5IGVpdGhlciBkYXRhYmFzZSBvciBkYXRhYmFzZU5hbWVcIlxuICAgIH1cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuUk9MRSxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMucm9sZU5hbWUsXG4gICAgICAgIC4uLihwcm9wcy5wcm92aWRlci5zZWNyZXQgPyB7IFNlY3JldEFybjogcHJvcHMucHJvdmlkZXIuc2VjcmV0LnNlY3JldEFybiB9IDoge30pLFxuICAgICAgICBQYXNzd29yZEFybjogcHJvcHMucGFzc3dvcmRBcm4sXG4gICAgICAgIERhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2UgPyBwcm9wcy5kYXRhYmFzZS5kYXRhYmFzZU5hbWUgOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIEVuYWJsZUlhbUF1dGg6IHByb3BzLmVuYWJsZUlhbUF1dGgsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgaWYgKHByb3BzLmRhdGFiYXNlKSB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5kYXRhYmFzZSlcbiAgfVxufVxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5jdXN0b20tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm9sZS5jdXN0b20tcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTRDO0FBRzVDLGlDQUF1QztBQXNEdkMsTUFBYSxJQUFLLFNBQVEsNEJBQWM7SUFDdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUN4RCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLE1BQU0seUNBQXlDLENBQUE7UUFDakQsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsSUFBSTtnQkFDN0IsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hGLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDL0UsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO2dCQUNsQyxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLFNBQVM7b0JBQ3hDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtvQkFDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksS0FBSyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsQ0FBQztDQUNGO0FBdEJELG9CQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHR5cGUgeyBJRGF0YWJhc2UgfSBmcm9tIFwiLi9kYXRhYmFzZVwiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuaW1wb3J0IHR5cGUgeyBJUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZVByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IElQcm92aWRlclxuXG4gIC8qKlxuICAgKiBTUUwuXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEEgbmV3IHNlY3JldCBpcyBjcmVhdGVkIGZvciB0aGlzIHVzZXIuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgZW5jcnlwdCBpdCB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZEFybjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIHRoaXMgdXNlciBpcyBleHBlY3RlZCB0byB1c2UuXG4gICAqXG4gICAqIFNwZWNpZnkgbm9uZSBvZiBgZGF0YWJhc2VgIG9yIGBkYXRhYmFzZU5hbWVgIG9yIG9ubHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGNvbm5lY3Rpb24gdG8gYW55IGRhdGFiYXNlIGlzIGdyYW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlPzogSURhdGFiYXNlXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG5hbWUgdGhpcyB1c2VyIGlzIGV4cGVjdGVkIHRvIHVzZS5cbiAgICpcbiAgICogU3BlY2lmeSBub25lIG9mIGBkYXRhYmFzZWAgb3IgYGRhdGFiYXNlTmFtZWAgb3Igb25seSBvbmUgb2YgdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gY29ubmVjdGlvbiB0byBhbnkgZGF0YWJhc2UgaXMgZ3JhbnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBJQU0gYXV0aGVudGljYXRpb24gZm9yIHRoaXMgcm9sZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgLSB1c2UgcGFzc3dvcmQgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUlhbUF1dGg/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIE1heGltdW0gc2ltdWx0YW5lb3VzIGNvbm5lY3Rpb25zIGZvciB0aGlzIE15U1FML01hcmlhREIgdXNlci5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gbm8gY29ubmVjdGlvbiBsaW1pdCBpcyBhcHBsaWVkXG4gICAqL1xuICByZWFkb25seSBtYXhVc2VyQ29ubmVjdGlvbnM/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIFJvbGUgZXh0ZW5kcyBDdXN0b21SZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb2xlUHJvcHMpIHtcbiAgICBpZiAocHJvcHMuZGF0YWJhc2UgJiYgcHJvcHMuZGF0YWJhc2VOYW1lKSB7XG4gICAgICB0aHJvdyBcIlNwZWNpZnkgZWl0aGVyIGRhdGFiYXNlIG9yIGRhdGFiYXNlTmFtZVwiXG4gICAgfVxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlc291cmNlOiBSZHNTcWxSZXNvdXJjZS5ST0xFLFxuICAgICAgICBSZXNvdXJjZUlkOiBwcm9wcy5yb2xlTmFtZSxcbiAgICAgICAgLi4uKHByb3BzLnByb3ZpZGVyLnNlY3JldCA/IHsgU2VjcmV0QXJuOiBwcm9wcy5wcm92aWRlci5zZWNyZXQuc2VjcmV0QXJuIH0gOiB7fSksXG4gICAgICAgIFBhc3N3b3JkQXJuOiBwcm9wcy5wYXNzd29yZEFybixcbiAgICAgICAgRGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZSA/IHByb3BzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSA6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgRW5hYmxlSWFtQXV0aDogcHJvcHMuZW5hYmxlSWFtQXV0aCxcbiAgICAgICAgLi4uKHByb3BzLm1heFVzZXJDb25uZWN0aW9ucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IE1heFVzZXJDb25uZWN0aW9uczogcHJvcHMubWF4VXNlckNvbm5lY3Rpb25zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgICBpZiAocHJvcHMuZGF0YWJhc2UpIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLmRhdGFiYXNlKVxuICB9XG59XG4iXX0=
package/lib/role.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import * as kms from "aws-cdk-lib/aws-kms";
2
- import { ISecret } from "aws-cdk-lib/aws-secretsmanager";
1
+ import type * as kms from "aws-cdk-lib/aws-kms";
2
+ import { type ISecret } from "aws-cdk-lib/aws-secretsmanager";
3
3
  import { Construct } from "constructs";
4
- import { IDatabase } from "./database";
5
- import { IProvider } from "./provider";
4
+ import type { IDatabase } from "./database";
5
+ import { type IProvider } from "./provider";
6
6
  export interface RoleProps {
7
7
  /**
8
8
  * Provider.
@@ -71,6 +71,23 @@ export interface RoleProps {
71
71
  * @default false - use password authentication
72
72
  */
73
73
  readonly enableIamAuth?: boolean;
74
+ /**
75
+ * Maximum simultaneous connections for this MySQL/MariaDB user.
76
+ *
77
+ * When set, create and update run
78
+ * `ALTER USER '<roleName>'@'%' WITH MAX_USER_CONNECTIONS <n>`.
79
+ * A later change, including a smaller number, is applied on update.
80
+ * `0` restores the server default (unlimited unless the global
81
+ * `max_user_connections` is set).
82
+ *
83
+ * Omit the property to leave the user unlimited. Omitting it does not
84
+ * clear a limit that was already applied; set `0` to do that.
85
+ *
86
+ * PostgreSQL and DSQL do not support this property and throw if it is set.
87
+ *
88
+ * @default undefined - no connection limit is applied
89
+ */
90
+ readonly maxUserConnections?: number;
74
91
  }
75
92
  export declare class Role extends Construct {
76
93
  /**