cdk-rds-sql 4.1.0 → 5.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.
package/.jsii CHANGED
@@ -3781,7 +3781,7 @@
3781
3781
  },
3782
3782
  "name": "cdk-rds-sql",
3783
3783
  "readme": {
3784
- "markdown": "# About\n\nThis CDK construct library makes it possible to create databases,\nschemas, and roles in an Aurora Serverless (v1 and v2 are supported), RDS Database Cluster or Database Instance created\nin that stack.\n\nThis construct library is intended to be used in enterprise\nenvironments, and works in isolated subnets.\n\n<p align=\"left\">\n <a href=\"https://github.com/semantic-release/semantic-release\"><img src=\"https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release\" alt=semantic-release: angular\"></a>\n <a href=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml\"><img src=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml/badge.svg\" alt=\"Release badge\"></a>\n</p>\n\n# Requirements\n\n- CDK v2.\n\n# Installation\n\n npm i cdk-rds-sql\n\n# Usage\n\n## Provider\n\nFirst setup your VPC and create your cluster:\n\n```ts\nimport { Duration, RemovalPolicy } from \"aws-cdk-lib\"\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\"\nimport * as rds from \"aws-cdk-lib/aws-rds\"\n\nconst vpc = ec2.Vpc.fromLookup(this, \"Vpc\", {\n vpcId: this.node.tryGetContext(\"vpc-id\"),\n})\n\nconst cluster = new rds.ServerlessCluster(this, \"Cluster\", {\n vpc: vpc,\n vpcSubnets: {\n subnetType: ec2.SubnetType.PRIVATE_ISOLATED,\n },\n engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,\n parameterGroup: rds.ParameterGroup.fromParameterGroupName(\n this,\n \"ParameterGroup\",\n \"default.aurora-postgresql11\"\n ),\n removalPolicy: RemovalPolicy.DESTROY,\n scaling: {\n autoPause: Duration.minutes(60),\n minCapacity: rds.AuroraCapacityUnit.ACU_2,\n maxCapacity: rds.AuroraCapacityUnit.ACU_2,\n },\n})\n```\n\nThen create a provider which will connect to your database. For a cluster:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\nFor an instance:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n instance: instance,\n secret: cluster.secret!,\n})\n```\n\nThe provider will setup a lambda, which normally lives in the same VPC\nas the database. You can give a different VPC, as long as that VPC has\naccess to the VPC of the database. Only the provider lambda will talk\nto your database.\n\nThe provider will by default use the private isolated subnet of the\nVPC. This is a breaking change from the past, where the provider used\nthe default strategy, which may not have been the private isolated\nsubnet. But from an enterprise security point of view having third\nparty code run in an isolated network by default is better.\n\nYour isolated network must have a VPC endpoint to AWS Secrets Manager\nand possibly KMS as well. If you want to use a subnet with egress\naccess in case you have no such VPC endpoints, specify the subnet as\nfollows:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n vpcSubnets: {\n subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,\n },\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\n### Disabling SSL\n\nThe default connection to RDS is ssl enabled (this used to be disabled\nin versions below 4).\n\nYou can disable ssl by setting the `ssl` option to `false`:\n\n```ts\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n instance: instance,\n secret: cluster.secret!,\n ssl: false, // default is true\n})\n```\n\n## Roles\n\nCreate a postgres role (user) for a cluster as follows:\n\n```ts\nimport { Role } from \"cdk-rds-sql\"\n\nconst role = new Role(this, \"Role\", {\n provider: provider,\n roleName: \"myrole\",\n databaseName: \"mydb\",\n})\n```\n\nThis will automatically create a secret just like `ServerlessCluster`\ndoes, with all the connection info needed for this user. It's secret value is a JSON like:\n\n```json\n{\n \"dbClusterIdentifier\": \"teststack-clustereb1186t9-sh4wpqfdyfvu\",\n \"password\": \"very-long-and-boring\",\n \"dbname\": \"mydb\",\n \"engine\": \"postgres\",\n \"port\": 5432,\n \"host\": \"teststack-clustereb1186t9-sh4wpqfdyfvu.cluster-cgudolabssna.us-east-1.rds.amazonaws.com\",\n \"username\": \"myrole\"\n}\n```\n\nYou can access the secret via `role.secret`.\n\nInstead of `databaseName` you can also specify `database` to reference\nan existing database. The role will not be created until the database\nhas been created.\n\n## Database\n\nCreate a database as follows:\n\n```ts\nimport { Database } from \"cdk-rds-sql\"\n\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n```\n\nYou can provide an owner, which makes it easy to create database owned\nby a new user:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n owner: role,\n})\n```\n\n## Schema\n\nCreate a schema in the default database as follows:\n\n```ts\nimport { Schema } from \"cdk-rds-sql\"\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n})\n```\n\nOr in another database:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n})\n```\n\nOne may need a role permitted for using schema:\n\n```ts\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n role: role,\n})\n```\n\n## Sql\n\nYou can insert arbitrary SQL into your database with the `Sql` construct:\n\n```ts\nimport { Sql } from \"cdk-rds-sql\"\n\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: \"create table t (i int)\",\n})\n```\n\nCreate a table if it does not exist, and grant a role privileges:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n})\n```\n\nRollback sql on stack deletion:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n rollback: `\nDO $$BEGIN\n IF EXISTS (select from pg_database WHERE datname = 't') THEN\n IF EXISTS (select from pg_catalog.pg_roles WHERE rolname = 'myrole') THEN\n revoke select t from myrole;\n END IF;\n drop table t;\n END IF;\nEND$$;\n`,\n})\n```\n\nNote that there is no synchronisation between various `Sql`\nconstructs, in particular the order in your code does not determine\nthe order in which your SQL is executed. This happens in parallel,\nunless you specify an explicit dependency via `sql.node.addDepency()`.\n\nThere are a lot of concerns when using `Sql`:\n\n- When you update your Sql, your previous Sql is not \"rolled back\",\n the new Sql is simply executed again.\n- When you delete your `Sql` construct the rollback is executed if specified\n- When permission are granted via `Sql` they must be removed via rollback to succesfully remove the role\n- Currently the `Sql` constructs has less than 5 minutes to execute\n its work.\n- It is unknown how large your SQL can be.\n\n## Dependencies\n\nThis library manages dependencies, there is no need to specify\ndependencies except possibly for `Sql` constructs.\n\n# Working on this code\n\nThis code is managed by\n[projen](https://github.com/projen/projen/blob/main/README.md). In\naddition [pre-commit](https://pre-commit.com/) is used.\n\nSo after git clone and `npm ci` you would do:\n\n```\npre-commit install --install-hooks --hook-type commit-msg --hook-type pre-commit\n```\n\nto install the pre-commit hooks.\n\n## Testing\n\nTest code via projen with:\n\n npx projen test\n\nYou can run the sample stack with:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV1Stack\n\nOr for v2:\n\n npx cdk deploy TestServerlessV2Stack\n\nIf you want to use an existing vpc:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV2Stack\n\n# To do\n\n- Update role: will not revoke connect to previous database if database name has changed.\n- If the cluster is configured for autopausing, wake cluster up before doing any SQL operations.\n- We rename roles and database on update: is that actually the best\n thing? More change to get us into an irrecoverable situation??\n"
3784
+ "markdown": "# About\n\nThis CDK construct library makes it possible to create databases,\nschemas, and roles in an Aurora Serverless (v1 and v2 are supported), RDS Database Cluster or Database Instance created\nin that stack.\n\nThis construct library is intended to be used in enterprise\nenvironments, and works in isolated subnets.\n\n<p align=\"left\">\n <a href=\"https://github.com/semantic-release/semantic-release\"><img src=\"https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release\" alt=semantic-release: angular\"></a>\n <a href=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml\"><img src=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml/badge.svg\" alt=\"Release badge\"></a>\n</p>\n\n# Requirements\n\n- CDK v2.\n\n# Installation\n\n npm i cdk-rds-sql\n\n# Usage\n\n## Provider\n\nFirst setup your VPC and create your cluster:\n\n```ts\nimport { Duration, RemovalPolicy } from \"aws-cdk-lib\"\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\"\nimport * as rds from \"aws-cdk-lib/aws-rds\"\n\nconst vpc = ec2.Vpc.fromLookup(this, \"Vpc\", {\n vpcId: this.node.tryGetContext(\"vpc-id\"),\n})\n\nconst cluster = new rds.ServerlessCluster(this, \"Cluster\", {\n vpc: vpc,\n vpcSubnets: {\n subnetType: ec2.SubnetType.PRIVATE_ISOLATED,\n },\n engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,\n parameterGroup: rds.ParameterGroup.fromParameterGroupName(\n this,\n \"ParameterGroup\",\n \"default.aurora-postgresql11\"\n ),\n removalPolicy: RemovalPolicy.DESTROY,\n scaling: {\n autoPause: Duration.minutes(60),\n minCapacity: rds.AuroraCapacityUnit.ACU_2,\n maxCapacity: rds.AuroraCapacityUnit.ACU_2,\n },\n})\n```\n\nThen create a provider which will connect to your database. For a cluster:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\nFor an instance:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n instance: instance,\n secret: cluster.secret!,\n})\n```\n\nThe provider will setup a lambda, which normally lives in the same VPC\nas the database. You can give a different VPC, as long as that VPC has\naccess to the VPC of the database. Only the provider lambda will talk\nto your database.\n\nThe provider will by default use the private isolated subnet of the\nVPC. Your isolated network must have a VPC endpoint to AWS Secrets Manager\nand possibly KMS as well. If you want to use a subnet with egress\naccess in case you have no such VPC endpoints, specify the subnet as\nfollows:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n vpcSubnets: {\n subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,\n },\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\n### Disabling SSL\n\nThe default connection to RDS is ssl enabled (this used to be disabled\nin versions below 4).\n\nYou can disable ssl by setting the `ssl` option to `false`:\n\n```ts\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n instance: instance,\n secret: cluster.secret!,\n ssl: false, // default is true\n})\n```\n\n## Roles\n\nCreate a postgres role (user) for a cluster as follows:\n\n```ts\nimport { Role } from \"cdk-rds-sql\"\n\nconst role = new Role(this, \"Role\", {\n provider: provider,\n roleName: \"myrole\",\n databaseName: \"mydb\",\n})\n```\n\nThis will automatically create a secret just like `ServerlessCluster`\ndoes, with all the connection info needed for this user. It's secret value is a JSON like:\n\n```json\n{\n \"dbClusterIdentifier\": \"teststack-clustereb1186t9-sh4wpqfdyfvu\",\n \"password\": \"very-long-and-boring\",\n \"dbname\": \"mydb\",\n \"engine\": \"postgres\",\n \"port\": 5432,\n \"host\": \"teststack-clustereb1186t9-sh4wpqfdyfvu.cluster-cgudolabssna.us-east-1.rds.amazonaws.com\",\n \"username\": \"myrole\"\n}\n```\n\nYou can access the secret via `role.secret`.\n\nInstead of `databaseName` you can also specify `database` to reference\nan existing database. The role will not be created until the database\nhas been created.\n\n## Database\n\nCreate a database as follows:\n\n```ts\nimport { Database } from \"cdk-rds-sql\"\n\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n```\n\nYou can provide an owner, which makes it easy to create database owned\nby a new user:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n owner: role,\n})\n```\n\n## Schema\n\nCreate a schema in the default database as follows:\n\n```ts\nimport { Schema } from \"cdk-rds-sql\"\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n})\n```\n\nOr in another database:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n})\n```\n\nOne may need a role permitted for using schema:\n\n```ts\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n role: role,\n})\n```\n\n## Sql\n\nYou can insert arbitrary SQL into your database with the `Sql` construct:\n\n```ts\nimport { Sql } from \"cdk-rds-sql\"\n\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: \"create table t (i int)\",\n})\n```\n\nCreate a table if it does not exist, and grant a role privileges:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n})\n```\n\nRollback sql on stack deletion:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n rollback: `\nDO $$BEGIN\n IF EXISTS (select from pg_database WHERE datname = 't') THEN\n IF EXISTS (select from pg_catalog.pg_roles WHERE rolname = 'myrole') THEN\n revoke select t from myrole;\n END IF;\n drop table t;\n END IF;\nEND$$;\n`,\n})\n```\n\nNote that there is no synchronisation between various `Sql`\nconstructs, in particular the order in your code does not determine\nthe order in which your SQL is executed. This happens in parallel,\nunless you specify an explicit dependency via `sql.node.addDepency()`.\n\nThere are a lot of concerns when using `Sql`:\n\n- When you update your Sql, your previous Sql is not \"rolled back\",\n the new Sql is simply executed again.\n- When you delete your `Sql` construct the rollback is executed if specified\n- When permission are granted via `Sql` they must be removed via rollback to succesfully remove the role\n- Currently the `Sql` constructs has less than 5 minutes to execute\n its work.\n- It is unknown how large your SQL can be.\n\n## Dependencies\n\nThis library manages dependencies, there is no need to specify\ndependencies except possibly for `Sql` constructs.\n\n# Working on this code\n\nThis code is managed by\n[projen](https://github.com/projen/projen/blob/main/README.md). In\naddition [pre-commit](https://pre-commit.com/) is used.\n\nSo after git clone and `npm ci` you would do:\n\n```\npre-commit install --install-hooks --hook-type commit-msg --hook-type pre-commit\n```\n\nto install the pre-commit hooks.\n\n## Testing\n\nTest code via projen with:\n\n npx projen test\n\nYou can run the sample stack with:\n\n npx projen integ:deploy:serverless\n\nIf you want to use an existing vpc:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV2Stack\n\n# To do\n\n- Update role: will not revoke connect to previous database if database name has changed.\n- If the cluster is configured for autopausing, wake cluster up before doing any SQL operations.\n- We rename roles and database on update: is that actually the best\n thing? More change to get us into an irrecoverable situation??\n"
3785
3785
  },
3786
3786
  "repository": {
3787
3787
  "type": "git",
@@ -4043,7 +4043,7 @@
4043
4043
  },
4044
4044
  "locationInModule": {
4045
4045
  "filename": "src/provider.ts",
4046
- "line": 115
4046
+ "line": 114
4047
4047
  },
4048
4048
  "name": "newCustomResourceHandler",
4049
4049
  "parameters": [
@@ -4265,7 +4265,7 @@
4265
4265
  {
4266
4266
  "abstract": true,
4267
4267
  "docs": {
4268
- "default": "- true",
4268
+ "default": "- false",
4269
4269
  "stability": "stable",
4270
4270
  "summary": "Use SSL?"
4271
4271
  },
@@ -4303,7 +4303,7 @@
4303
4303
  "docs": {
4304
4304
  "default": "- the isolated subnet if not specified",
4305
4305
  "stability": "stable",
4306
- "summary": "Where to place the networkprovivder lambda within the VPC."
4306
+ "summary": "Where to place the network provider lambda within the VPC."
4307
4307
  },
4308
4308
  "immutable": true,
4309
4309
  "locationInModule": {
@@ -4832,6 +4832,6 @@
4832
4832
  "symbolId": "src/sql:SqlProps"
4833
4833
  }
4834
4834
  },
4835
- "version": "4.1.0",
4836
- "fingerprint": "A5xMqs9o86Qs5W8X9NMW1gU/DqWQW49VWG3jCXJFIIg="
4835
+ "version": "5.0.0",
4836
+ "fingerprint": "71eYxSBDDNDB/5TxQp4I2pkmIF+Ejc/1Idh1omPQdRs="
4837
4837
  }
package/README.md CHANGED
@@ -85,12 +85,7 @@ access to the VPC of the database. Only the provider lambda will talk
85
85
  to your database.
86
86
 
87
87
  The provider will by default use the private isolated subnet of the
88
- VPC. This is a breaking change from the past, where the provider used
89
- the default strategy, which may not have been the private isolated
90
- subnet. But from an enterprise security point of view having third
91
- party code run in an isolated network by default is better.
92
-
93
- Your isolated network must have a VPC endpoint to AWS Secrets Manager
88
+ VPC. Your isolated network must have a VPC endpoint to AWS Secrets Manager
94
89
  and possibly KMS as well. If you want to use a subnet with egress
95
90
  access in case you have no such VPC endpoints, specify the subnet as
96
91
  follows:
@@ -314,11 +309,7 @@ Test code via projen with:
314
309
 
315
310
  You can run the sample stack with:
316
311
 
317
- npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV1Stack
318
-
319
- Or for v2:
320
-
321
- npx cdk deploy TestServerlessV2Stack
312
+ npx projen integ:deploy:serverless
322
313
 
323
314
  If you want to use an existing vpc:
324
315
 
package/lib/database.js CHANGED
@@ -40,5 +40,5 @@ class Database extends aws_cdk_lib_1.CustomResource {
40
40
  }
41
41
  exports.Database = Database;
42
42
  _a = JSII_RTTI_SYMBOL_1;
43
- Database[_a] = { fqn: "cdk-rds-sql.Database", version: "4.1.0" };
43
+ Database[_a] = { fqn: "cdk-rds-sql.Database", version: "5.0.0" };
44
44
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLGlDQUF1QztBQTJCdkMsTUFBTSxnQkFBaUIsU0FBUSxzQkFBUztJQUd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFBO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQWEsUUFBUyxTQUFRLDRCQUFjO0lBWTFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxRQUFRO2dCQUNqQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzlCLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUMxQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO2FBQzdCO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtRQUN0QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDckM7SUFDSCxDQUFDO0lBMUJEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFlBQW9CO1FBQ3hFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3JDLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQTtJQUNKLENBQUM7O0FBUkgsNEJBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHsgUmRzU3FsUmVzb3VyY2UgfSBmcm9tIFwiLi9lbnVtXCJcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIlxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuL3JvbGVcIlxuXG5pbnRlcmZhY2UgRGF0YWJhc2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgZGF0YWJhc2UgdG8gY3JlYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGF0YWJhc2Ugb3duZXIuXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IFJvbGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVByb3BzIGV4dGVuZHMgRGF0YWJhc2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IFByb3ZpZGVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFiYXNlIHtcbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcbn1cblxuY2xhc3MgSW1wb3J0ZWREYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElEYXRhYmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZUF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBDdXN0b21SZXNvdXJjZSBpbXBsZW1lbnRzIElEYXRhYmFzZSB7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEYXRhYmFzZSBiYXNlZCB1cG9uIG5hbWUgb25seS4gVXNlIGZvciBpbXBvcnRpbmcgZXhpc3RpbmcgZGF0YWJhc2VzLlxuICAgKi9cbiAgc3RhdGljIGZyb21EYXRhYmFzZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZGF0YWJhc2VOYW1lOiBzdHJpbmcpOiBJRGF0YWJhc2Uge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWREYXRhYmFzZShzY29wZSwgaWQsIHtcbiAgICAgIGRhdGFiYXNlTmFtZTogZGF0YWJhc2VOYW1lLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlc291cmNlOiBSZHNTcWxSZXNvdXJjZS5EQVRBQkFTRSxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBTZWNyZXRBcm46IHByb3BzLnByb3ZpZGVyLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIE93bmVyOiBwcm9wcy5vd25lcj8ucm9sZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgICBpZiAocHJvcHMub3duZXIpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLm93bmVyKVxuICAgIH1cbiAgfVxufVxuIl19
package/lib/handler.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handler = void 0;
4
+ const fs = require("fs");
4
5
  const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
5
6
  const exponential_backoff_1 = require("exponential-backoff");
6
7
  const node_pg_format_1 = require("node-pg-format");
@@ -238,7 +239,15 @@ exports.handler = async (event) => {
238
239
  else {
239
240
  database = databaseName ?? secretValues.dbname; // connect to given database if possible, else to database mentioned in secret
240
241
  }
241
- const ssl = process.env.SSL ? JSON.parse(process.env.SSL) : true;
242
+ // Parse SSL option from env, if provided.
243
+ // If process.env.SSL is the string "false", disable SSL.
244
+ const isSslEnabled = process.env.SSL ? JSON.parse(process.env.SSL) : true;
245
+ const ssl = isSslEnabled
246
+ ? {
247
+ ca: fs.readFileSync(`${process.env.LAMBDA_TASK_ROOT}/global-bundle.pem`),
248
+ rejectUnauthorized: true,
249
+ }
250
+ : false;
242
251
  const params = {
243
252
  host: secretValues.host,
244
253
  port: secretValues.port,
@@ -246,9 +255,9 @@ exports.handler = async (event) => {
246
255
  password: secretValues.password,
247
256
  database: database,
248
257
  connectionTimeoutMillis: 30000,
249
- ssl: ssl,
258
+ ssl,
250
259
  };
251
- log(`Connecting to host ${params.host}: ${params.port}, database ${params.database} as ${params.user}`);
260
+ log(`Connecting to host ${params.host}:${params.port}${ssl ? " using a secure connection" : ""}, database ${params.database} as ${params.user}`);
252
261
  log("Executing SQL", sql);
253
262
  const pg_client = new pg_1.Client(params);
254
263
  await pg_client.connect();
@@ -308,4 +317,4 @@ const getPassword = async (arn) => {
308
317
  return json.password;
309
318
  }
310
319
  };
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUl3QztBQU14Qyw2REFBNkM7QUFDN0MsbURBQXVDO0FBQ3ZDLDJCQUF5QztBQUN6QyxpQ0FBdUM7QUFzRHZDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtBQUV0QixNQUFNLFNBQVMsR0FBYztJQUMzQixHQUFHLEVBQUU7UUFDSCxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsS0FBVyxFQUFFLEVBQUU7WUFDakMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFBO1FBQ3hCLENBQUM7UUFDRCxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBVSxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQzdDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQTtRQUN2QixDQUFDO0tBQ0Y7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsS0FBa0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sR0FBRyxHQUFhLENBQUMsdUJBQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO1lBQzVFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTthQUNqRjtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQztRQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBa0IsRUFBRSxhQUFxQixFQUFFLEtBQWtC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QUMsQ0FBQTtJQUNqRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDNUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0tBQ3JCO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgU2VjcmV0c01hbmFnZXJDbGllbnQsXG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZCxcbiAgR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiXG5pbXBvcnQge1xuICBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlQ3JlYXRlRXZlbnQsXG4gIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudCxcbiAgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZURlbGV0ZUV2ZW50LFxufSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5pbXBvcnQgeyBiYWNrT2ZmIH0gZnJvbSBcImV4cG9uZW50aWFsLWJhY2tvZmZcIlxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIm5vZGUtcGctZm9ybWF0XCJcbmltcG9ydCB7IENsaWVudCwgQ2xpZW50Q29uZmlnIH0gZnJvbSBcInBnXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5cbmludGVyZmFjZSBDdXN0b21SZXNvdXJjZVJlc3BvbnNlIHtcbiAgUGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nXG4gIERhdGE/OiBhbnlcbiAgTm9FY2hvPzogYm9vbGVhblxufVxuXG50eXBlIENyZWF0ZVJlc291cmNlSGFuZGxlciA9IChcbiAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICBwcm9wcz86IGFueVxuKSA9PiBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPlxudHlwZSBVcGRhdGVSZXNvdXJjZUhhbmRsZXIgPSAoXG4gIHJlc291cmNlSWQ6IHN0cmluZyxcbiAgb2xkUmVzb3VyY2VJZDogc3RyaW5nLFxuICBwcm9wcz86IGFueVxuKSA9PiBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdIHwgdm9pZD5cbnR5cGUgRGVsZXRlUmVzb3VyY2VIYW5kbGVyID0gKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM/OiBhbnkpID0+IHN0cmluZyB8IHN0cmluZ1tdIHwgdm9pZFxuXG50eXBlIEp1bXBUYWJsZSA9IHtcbiAgW2tleSBpbiBSZHNTcWxSZXNvdXJjZV06IHtcbiAgICBDcmVhdGU6IENyZWF0ZVJlc291cmNlSGFuZGxlclxuICAgIFVwZGF0ZTogVXBkYXRlUmVzb3VyY2VIYW5kbGVyXG4gICAgRGVsZXRlOiBEZWxldGVSZXNvdXJjZUhhbmRsZXJcbiAgfVxufVxuXG5pbnRlcmZhY2UgUm9sZVByb3BzIHtcbiAgLyoqXG4gICAqIFNlY3JldCBBUk4uXG4gICAqL1xuICBQYXNzd29yZEFybjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIHRvIHdoaWNoIHJvbGUgaXMgZ3JhbnRlZCBjb25uZWN0IHBlcm1pc3Npb25zLlxuICAgKi9cbiAgRGF0YWJhc2VOYW1lPzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXRhYmFzZVByb3BzIHtcbiAgT3duZXI6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF0YWJhc2VVcGRhdGVQcm9wcyBleHRlbmRzIERhdGFiYXNlUHJvcHMge1xuICBNYXN0ZXJPd25lcjogc3RyaW5nXG59XG5cbmludGVyZmFjZSBTY2hlbWFQcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCByb2xlIGlzIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gICAqL1xuICBSb2xlTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBtYXhBdHRlbXB0cyA9IDIwXG5cbmNvbnN0IGp1bXBUYWJsZTogSnVtcFRhYmxlID0ge1xuICBzcWw6IHtcbiAgICBDcmVhdGU6IChfOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuU3RhdGVtZW50XG4gICAgfSxcbiAgICBVcGRhdGU6IChfOiBzdHJpbmcsIF9fOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuU3RhdGVtZW50XG4gICAgfSxcbiAgICBEZWxldGU6IChfOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuUm9sbGJhY2tcbiAgICB9LFxuICB9LFxuICBzY2hlbWE6IHtcbiAgICBDcmVhdGU6IGFzeW5jIChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBTY2hlbWFQcm9wcykgPT4ge1xuICAgICAgY29uc3Qgc3FsOiBzdHJpbmdbXSA9IFtmb3JtYXQoXCJjcmVhdGUgc2NoZW1hIGlmIG5vdCBleGlzdHMgJUlcIiwgcmVzb3VyY2VJZCldXG4gICAgICBpZiAocHJvcHMuUm9sZU5hbWUpIHtcbiAgICAgICAgZ3JhbnRSb2xlRm9yU2NoZW1hKHJlc291cmNlSWQsIHByb3BzLlJvbGVOYW1lKS5mb3JFYWNoKChzdG10KSA9PiBzcWwucHVzaChzdG10KSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzcWxcbiAgICB9LFxuICAgIFVwZGF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgb2xkUmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogU2NoZW1hUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IHNxbDogc3RyaW5nW10gPSBbXVxuICAgICAgLy8gVE9ETzogcmV2b2tlIG9sZCByb2xlLW5hbWUgaWYgcHJvcHMuUm9sZU5hbWUgd2FzIHJlbW92ZWQgb3IgY2hhbmdlZFxuICAgICAgaWYgKHByb3BzLlJvbGVOYW1lKSB7XG4gICAgICAgIHJldm9rZVJvbGVGcm9tU2NoZW1hKG9sZFJlc291cmNlSWQsIHByb3BzLlJvbGVOYW1lKS5mb3JFYWNoKChzdG10KSA9PlxuICAgICAgICAgIHNxbC5wdXNoKHN0bXQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHNxbC5wdXNoKGZvcm1hdChcImFsdGVyIHNjaGVtYSAlSSByZW5hbWUgdG8gJUlcIiwgb2xkUmVzb3VyY2VJZCwgcmVzb3VyY2VJZCkpXG4gICAgICBpZiAocHJvcHMuUm9sZU5hbWUpIHtcbiAgICAgICAgZ3JhbnRSb2xlRm9yU2NoZW1hKHJlc291cmNlSWQsIHByb3BzLlJvbGVOYW1lKS5mb3JFYWNoKChzdG10KSA9PiBzcWwucHVzaChzdG10KSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzcWxcbiAgICB9LFxuICAgIERlbGV0ZTogKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFNjaGVtYVByb3BzKSA9PiB7XG4gICAgICBjb25zdCBzcWw6IHN0cmluZ1tdID0gW11cbiAgICAgIGlmIChwcm9wcy5Sb2xlTmFtZSkge1xuICAgICAgICByZXZva2VSb2xlRnJvbVNjaGVtYShyZXNvdXJjZUlkLCBwcm9wcy5Sb2xlTmFtZSkuZm9yRWFjaCgoc3RtdCkgPT4gc3FsLnB1c2goc3RtdCkpXG4gICAgICB9XG4gICAgICBzcWwucHVzaChmb3JtYXQoXCJkcm9wIHNjaGVtYSBpZiBleGlzdHMgJUkgY2FzY2FkZVwiLCByZXNvdXJjZUlkKSlcbiAgICAgIHJldHVybiBzcWxcbiAgICB9LFxuICB9LFxuICByb2xlOiB7XG4gICAgQ3JlYXRlOiBhc3luYyAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSA9PiB7XG4gICAgICBpZiAoIXByb3BzLlBhc3N3b3JkQXJuKSB0aHJvdyBcIk5vIFBhc3N3b3JkQXJuIHByb3ZpZGVkXCJcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gYXdhaXQgZ2V0UGFzc3dvcmQocHJvcHMuUGFzc3dvcmRBcm4pXG4gICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgY29uc3Qgc3FsID0gW1xuICAgICAgICAgIFwic3RhcnQgdHJhbnNhY3Rpb25cIixcbiAgICAgICAgICBmb3JtYXQoXCJjcmVhdGUgcm9sZSAlSSB3aXRoIGxvZ2luIHBhc3N3b3JkICVMXCIsIHJlc291cmNlSWQsIHBhc3N3b3JkKSxcbiAgICAgICAgXVxuICAgICAgICBpZiAocHJvcHMuRGF0YWJhc2VOYW1lKSB7XG4gICAgICAgICAgLy8gZ3JhbnQgY29ubmVjdCB0byBkYXRhYmFzZSBpZiBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgIHNxbC5wdXNoKFxuICAgICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgICBgRE8gJCRcbkJFR0lOXG4gIElGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICclcycgYW5kIGRhdGlzdGVtcGxhdGUgPSBmYWxzZSkgVEhFTlxuICAgIGdyYW50IGNvbm5lY3Qgb24gZGF0YWJhc2UgJUkgdG8gJUk7XG4gIEVORCBJRjtcbkVORCQkO2AsXG4gICAgICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICByZXNvdXJjZUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHNxbC5wdXNoKFwiY29tbWl0XCIpXG4gICAgICAgIHJldHVybiBzcWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGBDYW5ub3QgcGFyc2UgcGFzc3dvcmQgZnJvbSAke3Byb3BzLlBhc3N3b3JkQXJufWBcbiAgICAgIH1cbiAgICB9LFxuICAgIFVwZGF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgb2xkUmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSA9PiB7XG4gICAgICAvLyBUT0RPOiBpZiBkYXRhYmFzZSBuYW1lIGhhcyBjaGFuZ2VkIGluIE9sZFJlc291cmNlUHJvcGVydGllcywgcmV2b2tlIGNvbm5lY3RcbiAgICAgIGlmIChwcm9wcyAmJiBwcm9wcy5QYXNzd29yZEFybikge1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGF3YWl0IGdldFBhc3N3b3JkKHByb3BzLlBhc3N3b3JkQXJuKVxuICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICBjb25zdCBzcWwgPSBbXCJzdGFydCB0cmFuc2FjdGlvblwiXVxuICAgICAgICAgIGlmIChvbGRSZXNvdXJjZUlkICE9PSByZXNvdXJjZUlkKSB7XG4gICAgICAgICAgICBzcWwucHVzaChmb3JtYXQoXCJhbHRlciByb2xlICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgc3FsLnB1c2goZm9ybWF0KFwiYWx0ZXIgcm9sZSAlSSB3aXRoIHBhc3N3b3JkICVMXCIsIHJlc291cmNlSWQsIHBhc3N3b3JkKSlcbiAgICAgICAgICBpZiAocHJvcHMuRGF0YWJhc2VOYW1lKSB7XG4gICAgICAgICAgICBzcWwucHVzaChcbiAgICAgICAgICAgICAgZm9ybWF0KFwiZ3JhbnQgY29ubmVjdCBvbiBkYXRhYmFzZSAlSSB0byAlSVwiLCBwcm9wcy5EYXRhYmFzZU5hbWUsIHJlc291cmNlSWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIHNxbC5wdXNoKFwiY29tbWl0XCIpXG4gICAgICAgICAgcmV0dXJuIHNxbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGBDYW5ub3QgcGFyc2UgcGFzc3dvcmQgZnJvbSAke3Byb3BzLlBhc3N3b3JkQXJufWBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3FsID0gW1wic3RhcnQgdHJhbnNhY3Rpb25cIl1cbiAgICAgICAgaWYgKG9sZFJlc291cmNlSWQgIT09IHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzcWwucHVzaChmb3JtYXQoXCJhbHRlciByb2xlICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKSlcbiAgICAgICAgfVxuICAgICAgICBzcWwucHVzaChcbiAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICBgRE8gJCRcbkJFR0lOXG4gIElGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICclcycgYW5kIGRhdGlzdGVtcGxhdGUgPSBmYWxzZSkgVEhFTlxuICAgIGdyYW50IGNvbm5lY3Qgb24gZGF0YWJhc2UgJUkgdG8gJUk7XG4gIEVORCBJRjtcbkVORCQkO2AsXG4gICAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZUlkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIHNxbC5wdXNoKFwiY29tbWl0XCIpXG4gICAgICAgIHJldHVybiBzcWxcbiAgICAgIH1cbiAgICB9LFxuICAgIERlbGV0ZTogKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFJvbGVQcm9wcykgPT4ge1xuICAgICAgLy8gVE9ETzogaWYgdXNlciBpcyBvd25lciBvZiBhIGRhdGFiYXNlLCBhc3NpZ24gb3duZXJzaGlwIHRvIG1hc3RlciB1c2VyXG4gICAgICAvLyBUaGlzIHdpbGwgcmVxdWlyZSBhIHNwZWNpZmllZCBpbmhlcml0b3Igb24gcm9sZSBjcmVhdGlvblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJzdGFydCB0cmFuc2FjdGlvblwiLFxuICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgYERPICQkXG5CRUdJTlxuICBJRiBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2NhdGFsb2cucGdfcm9sZXMgV0hFUkUgcm9sbmFtZSA9ICclcycpIEFORCBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSAnJXMnKSBUSEVOXG4gICAgcmV2b2tlIGFsbCBwcml2aWxlZ2VzIG9uIGRhdGFiYXNlICVJIGZyb20gJUk7XG4gIEVORCBJRjtcbkVORCQkO2AsXG4gICAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgIHJlc291cmNlSWRcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0KFwiZHJvcCByb2xlIGlmIGV4aXN0cyAlSVwiLCByZXNvdXJjZUlkKSxcbiAgICAgICAgXCJjb21taXRcIixcbiAgICAgIF1cbiAgICB9LFxuICB9LFxuICBkYXRhYmFzZToge1xuICAgIENyZWF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IG93bmVyID0gcHJvcHMuT3duZXJcbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGZvcm1hdChcImNyZWF0ZSBkYXRhYmFzZSAlSVwiLCByZXNvdXJjZUlkKSxcbiAgICAgICAgICBmb3JtYXQoXCJhbHRlciBkYXRhYmFzZSAlSSBvd25lciB0byAlSVwiLCByZXNvdXJjZUlkLCBvd25lciksXG4gICAgICAgIF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQoXCJjcmVhdGUgZGF0YWJhc2UgJUlcIiwgcmVzb3VyY2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFVwZGF0ZTogYXN5bmMgKFxuICAgICAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICAgICAgb2xkUmVzb3VyY2VJZDogc3RyaW5nLFxuICAgICAgcHJvcHM6IERhdGFiYXNlVXBkYXRlUHJvcHNcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICBpZiAocmVzb3VyY2VJZCAhPT0gb2xkUmVzb3VyY2VJZCkge1xuICAgICAgICBpZiAocHJvcHMuTWFzdGVyT3duZXIpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgICAgICBmb3JtYXQoXCJhbHRlciBkYXRhYmFzZSAlSSBvd25lciB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCBwcm9wcy5NYXN0ZXJPd25lcilcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKFxuICAgICAgICAgIGZvcm1hdChcImFsdGVyIGRhdGFiYXNlICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjb25zdCBvd25lciA9IHByb3BzLk93bmVyXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKGZvcm1hdChcImFsdGVyIGRhdGFiYXNlICVJIG93bmVyIHRvICVJXCIsIHJlc291cmNlSWQsIHByb3BzLk93bmVyKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZW1lbnRzXG4gICAgfSxcbiAgICBEZWxldGU6IChyZXNvdXJjZUlkOiBzdHJpbmcsIG5ld093bmVyOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGZvcm1hdChcbiAgICAgICAgICBcInNlbGVjdCBwZ190ZXJtaW5hdGVfYmFja2VuZChwZ19zdGF0X2FjdGl2aXR5LnBpZCkgZnJvbSBwZ19zdGF0X2FjdGl2aXR5IHdoZXJlIGRhdG5hbWUgPSAlTFwiLFxuICAgICAgICAgIHJlc291cmNlSWRcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0KFxuICAgICAgICAgIFwiRE8gJCRCRUdJTlxcbklGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICclcycpIFRIRU4gYWx0ZXIgZGF0YWJhc2UgJUkgb3duZXIgdG8gJUk7IEVORCBJRjtcXG5FTkQkJDtcIixcbiAgICAgICAgICByZXNvdXJjZUlkLFxuICAgICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgICAgbmV3T3duZXJcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0KFwiZHJvcCBkYXRhYmFzZSBpZiBleGlzdHMgJUlcIiwgcmVzb3VyY2VJZCksXG4gICAgICBdXG4gICAgfSxcbiAgfSxcbn1cblxuY29uc3QgZ3JhbnRSb2xlRm9yU2NoZW1hID0gKHNjaGVtYTogc3RyaW5nLCByb2xlTmFtZTogc3RyaW5nKSA9PiBbXG4gIGZvcm1hdChcIkdSQU5UIFVTQUdFIE9OIFNDSEVNQSAlSSBUTyAlSVwiLCBzY2hlbWEsIHJvbGVOYW1lKSxcbiAgZm9ybWF0KFwiR1JBTlQgQ1JFQVRFIE9OIFNDSEVNQSAlSSBUTyAlSVwiLCBzY2hlbWEsIHJvbGVOYW1lKSxcbl1cbmNvbnN0IHJldm9rZVJvbGVGcm9tU2NoZW1hID0gKHNjaGVtYTogc3RyaW5nLCByb2xlTmFtZTogc3RyaW5nKSA9PiBbXG4gIGZvcm1hdChcIlJFVk9LRSBDUkVBVEUgT04gU0NIRU1BICVJIEZST00gJUlcIiwgc2NoZW1hLCByb2xlTmFtZSksXG4gIGZvcm1hdChcIlJFVk9LRSBBTEwgT04gU0NIRU1BICVJIEZST00gJUlcIiwgc2NoZW1hLCByb2xlTmFtZSksXG5dXG5cbmNvbnN0IGxvZyA9XG4gIHByb2Nlc3MuZW52LkxPR0dFUiA9PT0gXCJ0cnVlXCJcbiAgICA/IGNvbnNvbGUuZGVidWdcbiAgICA6IChfbWVzc2FnZT86IGFueSwgLi4uX29wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4ge31cblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoXG4gIGV2ZW50OlxuICAgIHwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUNyZWF0ZUV2ZW50XG4gICAgfCBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlVXBkYXRlRXZlbnRcbiAgICB8IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VEZWxldGVFdmVudFxuKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgbG9nKGV2ZW50KVxuXG4gIGNvbnN0IHJlcXVlc3RUeXBlID0gZXZlbnQuUmVxdWVzdFR5cGVcbiAgY29uc3QgcmVzb3VyY2U6IFJkc1NxbFJlc291cmNlID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlJlc291cmNlXG4gIGNvbnN0IHJlc291cmNlSWQgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuUmVzb3VyY2VJZFxuICBjb25zdCBkYXRhYmFzZU5hbWUgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRGF0YWJhc2VOYW1lXG5cbiAgaWYgKCFPYmplY3Qua2V5cyhqdW1wVGFibGUpLmluY2x1ZGVzKGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5SZXNvdXJjZSkpIHtcbiAgICB0aHJvdyBgUmVzb3VyY2UgdHlwZSAnJHtyZXNvdXJjZX0nIG5vdCByZWNvZ25pc2VkLmBcbiAgfVxuXG4gIGNvbnN0IHNlY3JldHNfY2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHt9KVxuICBjb25zdCBjb21tYW5kID0gbmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5TZWNyZXRBcm4sXG4gIH0pXG4gIC8vIEFzIHRoZSBJQU0gY3JlZGVudGlhbHMgY2FuIGJlIGNhY2hlZCwgYW4gdXBkYXRlIG1ha2RlIHZlcnkgcmVjZW50XG4gIC8vIGNvdWxkIG5vdCB5ZXQgYmUgYXZhaWxhYmxlLlxuICAvLyBTbyB3ZSByZXRyeSB0aGlzIGEgYml0LlxuICBsb2coXCJGZXRjaGluZyBzZWNyZXRcIilcbiAgY29uc3Qgc2VjcmV0OiBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQgPSBhd2FpdCBiYWNrT2ZmKFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlY3JldHNfY2xpZW50LnNlbmQoY29tbWFuZClcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2coXCJFcnJvciBmZXRjaGluZyBzZWNyZXQgJW9cIiwgZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbnVtT2ZBdHRlbXB0czogMTAsXG4gICAgICBzdGFydGluZ0RlbGF5OiA1MDAsXG4gICAgfVxuICApXG4gIGlmICghc2VjcmV0LlNlY3JldFN0cmluZykgdGhyb3cgXCJObyBzZWNyZXQgc3RyaW5nXCJcbiAgY29uc3Qgc2VjcmV0VmFsdWVzID0gSlNPTi5wYXJzZShzZWNyZXQuU2VjcmV0U3RyaW5nKVxuXG4gIGxldCBzcWw6IHN0cmluZyB8IHN0cmluZ1tdIHwgdm9pZFxuICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBcIkNyZWF0ZVwiOiB7XG4gICAgICBzcWwgPSBhd2FpdCBqdW1wVGFibGVbcmVzb3VyY2VdW3JlcXVlc3RUeXBlXShyZXNvdXJjZUlkLCBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMpXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIFwiVXBkYXRlXCI6IHtcbiAgICAgIGNvbnN0IG9sZFJlc291cmNlSWQgPSAoZXZlbnQgYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVVwZGF0ZUV2ZW50KVxuICAgICAgICAuUGh5c2ljYWxSZXNvdXJjZUlkXG4gICAgICBzcWwgPSBhd2FpdCBqdW1wVGFibGVbcmVzb3VyY2VdW3JlcXVlc3RUeXBlXShyZXNvdXJjZUlkLCBvbGRSZXNvdXJjZUlkLCB7XG4gICAgICAgIC4uLmV2ZW50LlJlc291cmNlUHJvcGVydGllcyxcbiAgICAgICAgTWFzdGVyT3duZXI6IHNlY3JldFZhbHVlcy51c2VybmFtZSxcbiAgICAgIH0pXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIFwiRGVsZXRlXCI6IHtcbiAgICAgIGlmIChyZXNvdXJjZSA9PT0gUmRzU3FsUmVzb3VyY2UuREFUQUJBU0UpIHtcbiAgICAgICAgc3FsID0ganVtcFRhYmxlW3Jlc291cmNlXVtyZXF1ZXN0VHlwZV0ocmVzb3VyY2VJZCwgc2VjcmV0VmFsdWVzLnVzZXJuYW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3FsID0ganVtcFRhYmxlW3Jlc291cmNlXVtyZXF1ZXN0VHlwZV0ocmVzb3VyY2VJZCwgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoc3FsKSB7XG4gICAgbGV0IGRhdGFiYXNlOiBzdHJpbmdcbiAgICBpZiAocmVzb3VyY2UgPT09IFJkc1NxbFJlc291cmNlLlJPTEUpIHtcbiAgICAgIGRhdGFiYXNlID0gc2VjcmV0VmFsdWVzLmRibmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhYmFzZSA9IGRhdGFiYXNlTmFtZSA/PyBzZWNyZXRWYWx1ZXMuZGJuYW1lIC8vIGNvbm5lY3QgdG8gZ2l2ZW4gZGF0YWJhc2UgaWYgcG9zc2libGUsIGVsc2UgdG8gZGF0YWJhc2UgbWVudGlvbmVkIGluIHNlY3JldFxuICAgIH1cbiAgICBjb25zdCBzc2wgPSBwcm9jZXNzLmVudi5TU0wgPyBKU09OLnBhcnNlKHByb2Nlc3MuZW52LlNTTCkgOiB0cnVlXG4gICAgY29uc3QgcGFyYW1zOiBDbGllbnRDb25maWcgPSB7XG4gICAgICBob3N0OiBzZWNyZXRWYWx1ZXMuaG9zdCxcbiAgICAgIHBvcnQ6IHNlY3JldFZhbHVlcy5wb3J0LFxuICAgICAgdXNlcjogc2VjcmV0VmFsdWVzLnVzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQ6IHNlY3JldFZhbHVlcy5wYXNzd29yZCxcbiAgICAgIGRhdGFiYXNlOiBkYXRhYmFzZSxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiAzMDAwMCwgLy8gcmV0dXJuIGFuIGVycm9yIGlmIGEgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQgd2l0aGluIDMwIHNlY29uZHNcbiAgICAgIHNzbDogc3NsLFxuICAgIH1cbiAgICBsb2coXG4gICAgICBgQ29ubmVjdGluZyB0byBob3N0ICR7cGFyYW1zLmhvc3R9OiAke3BhcmFtcy5wb3J0fSwgZGF0YWJhc2UgJHtwYXJhbXMuZGF0YWJhc2V9IGFzICR7cGFyYW1zLnVzZXJ9YFxuICAgIClcbiAgICBsb2coXCJFeGVjdXRpbmcgU1FMXCIsIHNxbClcbiAgICBjb25zdCBwZ19jbGllbnQgPSBuZXcgQ2xpZW50KHBhcmFtcylcbiAgICBhd2FpdCBwZ19jbGllbnQuY29ubmVjdCgpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJhY2tPZmYoXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNxbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBnX2NsaWVudC5xdWVyeShzcWwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHNxbC5tYXAoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBnX2NsaWVudC5xdWVyeShzdGF0ZW1lbnQpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcmV0cnk6IGVycm9yRmlsdGVyLFxuICAgICAgICAgIG51bU9mQXR0ZW1wdHM6IG1heEF0dGVtcHRzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHBnX2NsaWVudC5lbmQoKVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXNwb25zZTogQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSA9IHt9XG4gIC8vIEV4Y2VwdCBmb3IgdGhlIFNRTCByZXNvdXJjZSwgcmV0dXJuIHRoZSBuZXcgcmVzb3VyY2UgaWQuIFRoaXNcbiAgLy8gd2lsbCBjYXVzZSBhIGRlbGV0ZSB0byBiZSBzZW5kIGZvciB0aGUgb2xkIHJlc291cmNlLlxuICBpZiAocmVzb3VyY2UgIT09IFJkc1NxbFJlc291cmNlLlNRTCkge1xuICAgIHJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZCA9IHJlc291cmNlSWRcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBDdXN0b20gZXJyb3IgZmlsdGVyLCBtYWlubHkgdG8gcmV0cnkgcm9sZSBjcmVhdGlvbi5cbi8vIEZyZXF1ZW50bHkgc2VlIFwidHVwbGUgY29uY3VycmVudGx5IHVwZGF0ZWRcIiwgYW5kIGFkZGluZ1xuLy8gZGVwZW5kZW5jaWVzIGlzIHZlcnkgaGFyZCB0byBtYWtlIHdvcmsuXG5jb25zdCBlcnJvckZpbHRlciA9IChlcnJvcjogYW55LCBuZXh0QXR0ZW1wdE51bWJlcjogbnVtYmVyKSA9PiB7XG4gIC8vIFJldHJ5IG9ubHkgaWYgdGhlIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgXCJ0dXBsZSBjb25jdXJyZW50bHlcIlxuICAvLyBUaGlzIHdpbGwgY292ZXIgY29uY3VycmVudCB1cGRhdGVzIGFuZCBkZWxldGVzXG4gIGNvbnN0IHdpbGxSZXRyeSA9IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJ0dXBsZSBjb25jdXJyZW50bHlcIilcbiAgbG9nKFxuICAgIFwiRW5jb3VudGVyZWQgYW4gZXJyb3Igb24gYXR0ZW1wdCAlZC8lZCByZXRyeT0lcyBlcnJvcj1bJW9dXCIsXG4gICAgbmV4dEF0dGVtcHROdW1iZXIgLSAxLFxuICAgIG1heEF0dGVtcHRzLFxuICAgIHdpbGxSZXRyeSxcbiAgICBlcnJvclxuICApXG4gIHJldHVybiB3aWxsUmV0cnlcbn1cblxuLyoqXG4gKiBQYXJzZSBwYXNzd29yZCBmaWVsZCBmcm9tIHNlY3JldC4gUmV0dXJucyB2b2lkIG9uIGVycm9yLlxuICovXG5jb25zdCBnZXRQYXNzd29yZCA9IGFzeW5jIChhcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdm9pZD4gPT4ge1xuICBjb25zdCBzZWNyZXRzX2NsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSlcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgIFNlY3JldElkOiBhcm4sXG4gIH0pXG4gIGNvbnN0IHNlY3JldCA9IGF3YWl0IHNlY3JldHNfY2xpZW50LnNlbmQoY29tbWFuZClcbiAgaWYgKHNlY3JldC5TZWNyZXRTdHJpbmcpIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShzZWNyZXQuU2VjcmV0U3RyaW5nKVxuICAgIHJldHVybiBqc29uLnBhc3N3b3JkXG4gIH1cbn1cbiJdfQ==
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF3QjtBQUV4Qiw0RUFJd0M7QUFNeEMsNkRBQTZDO0FBQzdDLG1EQUF1QztBQUN2QywyQkFBeUM7QUFDekMsaUNBQXVDO0FBc0R2QyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUE7QUFFdEIsTUFBTSxTQUFTLEdBQWM7SUFDM0IsR0FBRyxFQUFFO1FBQ0gsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQVUsRUFBRSxLQUFXLEVBQUUsRUFBRTtZQUM3QyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUE7UUFDeEIsQ0FBQztRQUNELE1BQU0sRUFBRSxDQUFDLENBQVMsRUFBRSxLQUFXLEVBQUUsRUFBRTtZQUNqQyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFDdkIsQ0FBQztLQUNGO0lBQ0QsTUFBTSxFQUFFO1FBQ04sTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFrQixFQUFFLEtBQWtCLEVBQUUsRUFBRTtZQUN2RCxNQUFNLEdBQUcsR0FBYSxDQUFDLHVCQUFNLENBQUMsZ0NBQWdDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUM1RSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7YUFDakY7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUM7UUFDRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsYUFB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QVMsQ0FBQTtBQUNsQixDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQTBCLEVBQUU7SUFDaEUsTUFBTSxjQUFjLEdBQUcsSUFBSSw2Q0FBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLDhDQUFxQixDQUFDO1FBQ3hDLFFBQVEsRUFBRSxHQUFHO0tBQ2QsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2pELElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM1QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7S0FDckI7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwidGxzXCJcbmltcG9ydCB7XG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXJcIlxuaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUNyZWF0ZUV2ZW50LFxuICBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlVXBkYXRlRXZlbnQsXG4gIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VEZWxldGVFdmVudCxcbn0gZnJvbSBcImF3cy1sYW1iZGFcIlxuaW1wb3J0IHsgYmFja09mZiB9IGZyb20gXCJleHBvbmVudGlhbC1iYWNrb2ZmXCJcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJub2RlLXBnLWZvcm1hdFwiXG5pbXBvcnQgeyBDbGllbnQsIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuXG5pbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB7XG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZ1xuICBEYXRhPzogYW55XG4gIE5vRWNobz86IGJvb2xlYW5cbn1cblxudHlwZSBDcmVhdGVSZXNvdXJjZUhhbmRsZXIgPSAoXG4gIHJlc291cmNlSWQ6IHN0cmluZyxcbiAgcHJvcHM/OiBhbnlcbikgPT4gUHJvbWlzZTxzdHJpbmcgfCBzdHJpbmdbXT5cbnR5cGUgVXBkYXRlUmVzb3VyY2VIYW5kbGVyID0gKFxuICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gIG9sZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgcHJvcHM/OiBhbnlcbikgPT4gUHJvbWlzZTxzdHJpbmcgfCBzdHJpbmdbXSB8IHZvaWQ+XG50eXBlIERlbGV0ZVJlc291cmNlSGFuZGxlciA9IChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiBzdHJpbmcgfCBzdHJpbmdbXSB8IHZvaWRcblxudHlwZSBKdW1wVGFibGUgPSB7XG4gIFtrZXkgaW4gUmRzU3FsUmVzb3VyY2VdOiB7XG4gICAgQ3JlYXRlOiBDcmVhdGVSZXNvdXJjZUhhbmRsZXJcbiAgICBVcGRhdGU6IFVwZGF0ZVJlc291cmNlSGFuZGxlclxuICAgIERlbGV0ZTogRGVsZXRlUmVzb3VyY2VIYW5kbGVyXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTZWNyZXQgQVJOLlxuICAgKi9cbiAgUGFzc3dvcmRBcm46IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSB0byB3aGljaCByb2xlIGlzIGdyYW50ZWQgY29ubmVjdCBwZXJtaXNzaW9ucy5cbiAgICovXG4gIERhdGFiYXNlTmFtZT86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyB7XG4gIE93bmVyOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERhdGFiYXNlVXBkYXRlUHJvcHMgZXh0ZW5kcyBEYXRhYmFzZVByb3BzIHtcbiAgTWFzdGVyT3duZXI6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgU2NoZW1hUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgcm9sZSBpcyBncmFudGVkIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgUm9sZU5hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgbWF4QXR0ZW1wdHMgPSAyMFxuXG5jb25zdCBqdW1wVGFibGU6IEp1bXBUYWJsZSA9IHtcbiAgc3FsOiB7XG4gICAgQ3JlYXRlOiAoXzogc3RyaW5nLCBwcm9wcz86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLlN0YXRlbWVudFxuICAgIH0sXG4gICAgVXBkYXRlOiAoXzogc3RyaW5nLCBfXzogc3RyaW5nLCBwcm9wcz86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLlN0YXRlbWVudFxuICAgIH0sXG4gICAgRGVsZXRlOiAoXzogc3RyaW5nLCBwcm9wcz86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLlJvbGxiYWNrXG4gICAgfSxcbiAgfSxcbiAgc2NoZW1hOiB7XG4gICAgQ3JlYXRlOiBhc3luYyAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogU2NoZW1hUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IHNxbDogc3RyaW5nW10gPSBbZm9ybWF0KFwiY3JlYXRlIHNjaGVtYSBpZiBub3QgZXhpc3RzICVJXCIsIHJlc291cmNlSWQpXVxuICAgICAgaWYgKHByb3BzLlJvbGVOYW1lKSB7XG4gICAgICAgIGdyYW50Um9sZUZvclNjaGVtYShyZXNvdXJjZUlkLCBwcm9wcy5Sb2xlTmFtZSkuZm9yRWFjaCgoc3RtdCkgPT4gc3FsLnB1c2goc3RtdCkpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3FsXG4gICAgfSxcbiAgICBVcGRhdGU6IGFzeW5jIChyZXNvdXJjZUlkOiBzdHJpbmcsIG9sZFJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFNjaGVtYVByb3BzKSA9PiB7XG4gICAgICBjb25zdCBzcWw6IHN0cmluZ1tdID0gW11cbiAgICAgIC8vIFRPRE86IHJldm9rZSBvbGQgcm9sZS1uYW1lIGlmIHByb3BzLlJvbGVOYW1lIHdhcyByZW1vdmVkIG9yIGNoYW5nZWRcbiAgICAgIGlmIChwcm9wcy5Sb2xlTmFtZSkge1xuICAgICAgICByZXZva2VSb2xlRnJvbVNjaGVtYShvbGRSZXNvdXJjZUlkLCBwcm9wcy5Sb2xlTmFtZSkuZm9yRWFjaCgoc3RtdCkgPT5cbiAgICAgICAgICBzcWwucHVzaChzdG10KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBzcWwucHVzaChmb3JtYXQoXCJhbHRlciBzY2hlbWEgJUkgcmVuYW1lIHRvICVJXCIsIG9sZFJlc291cmNlSWQsIHJlc291cmNlSWQpKVxuICAgICAgaWYgKHByb3BzLlJvbGVOYW1lKSB7XG4gICAgICAgIGdyYW50Um9sZUZvclNjaGVtYShyZXNvdXJjZUlkLCBwcm9wcy5Sb2xlTmFtZSkuZm9yRWFjaCgoc3RtdCkgPT4gc3FsLnB1c2goc3RtdCkpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3FsXG4gICAgfSxcbiAgICBEZWxldGU6IChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBTY2hlbWFQcm9wcykgPT4ge1xuICAgICAgY29uc3Qgc3FsOiBzdHJpbmdbXSA9IFtdXG4gICAgICBpZiAocHJvcHMuUm9sZU5hbWUpIHtcbiAgICAgICAgcmV2b2tlUm9sZUZyb21TY2hlbWEocmVzb3VyY2VJZCwgcHJvcHMuUm9sZU5hbWUpLmZvckVhY2goKHN0bXQpID0+IHNxbC5wdXNoKHN0bXQpKVxuICAgICAgfVxuICAgICAgc3FsLnB1c2goZm9ybWF0KFwiZHJvcCBzY2hlbWEgaWYgZXhpc3RzICVJIGNhc2NhZGVcIiwgcmVzb3VyY2VJZCkpXG4gICAgICByZXR1cm4gc3FsXG4gICAgfSxcbiAgfSxcbiAgcm9sZToge1xuICAgIENyZWF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFJvbGVQcm9wcykgPT4ge1xuICAgICAgaWYgKCFwcm9wcy5QYXNzd29yZEFybikgdGhyb3cgXCJObyBQYXNzd29yZEFybiBwcm92aWRlZFwiXG4gICAgICBjb25zdCBwYXNzd29yZCA9IGF3YWl0IGdldFBhc3N3b3JkKHByb3BzLlBhc3N3b3JkQXJuKVxuICAgICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICAgIGNvbnN0IHNxbCA9IFtcbiAgICAgICAgICBcInN0YXJ0IHRyYW5zYWN0aW9uXCIsXG4gICAgICAgICAgZm9ybWF0KFwiY3JlYXRlIHJvbGUgJUkgd2l0aCBsb2dpbiBwYXNzd29yZCAlTFwiLCByZXNvdXJjZUlkLCBwYXNzd29yZCksXG4gICAgICAgIF1cbiAgICAgICAgaWYgKHByb3BzLkRhdGFiYXNlTmFtZSkge1xuICAgICAgICAgIC8vIGdyYW50IGNvbm5lY3QgdG8gZGF0YWJhc2UgaWYgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICBzcWwucHVzaChcbiAgICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgICAgYERPICQkXG5CRUdJTlxuICBJRiBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2RhdGFiYXNlIHdoZXJlIGRhdG5hbWUgPSAnJXMnIGFuZCBkYXRpc3RlbXBsYXRlID0gZmFsc2UpIFRIRU5cbiAgICBncmFudCBjb25uZWN0IG9uIGRhdGFiYXNlICVJIHRvICVJO1xuICBFTkQgSUY7XG5FTkQkJDtgLFxuICAgICAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VJZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBzcWwucHVzaChcImNvbW1pdFwiKVxuICAgICAgICByZXR1cm4gc3FsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBgQ2Fubm90IHBhcnNlIHBhc3N3b3JkIGZyb20gJHtwcm9wcy5QYXNzd29yZEFybn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBVcGRhdGU6IGFzeW5jIChyZXNvdXJjZUlkOiBzdHJpbmcsIG9sZFJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFJvbGVQcm9wcykgPT4ge1xuICAgICAgLy8gVE9ETzogaWYgZGF0YWJhc2UgbmFtZSBoYXMgY2hhbmdlZCBpbiBPbGRSZXNvdXJjZVByb3BlcnRpZXMsIHJldm9rZSBjb25uZWN0XG4gICAgICBpZiAocHJvcHMgJiYgcHJvcHMuUGFzc3dvcmRBcm4pIHtcbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSBhd2FpdCBnZXRQYXNzd29yZChwcm9wcy5QYXNzd29yZEFybilcbiAgICAgICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICAgICAgY29uc3Qgc3FsID0gW1wic3RhcnQgdHJhbnNhY3Rpb25cIl1cbiAgICAgICAgICBpZiAob2xkUmVzb3VyY2VJZCAhPT0gcmVzb3VyY2VJZCkge1xuICAgICAgICAgICAgc3FsLnB1c2goZm9ybWF0KFwiYWx0ZXIgcm9sZSAlSSByZW5hbWUgdG8gJUlcIiwgb2xkUmVzb3VyY2VJZCwgcmVzb3VyY2VJZCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNxbC5wdXNoKGZvcm1hdChcImFsdGVyIHJvbGUgJUkgd2l0aCBwYXNzd29yZCAlTFwiLCByZXNvdXJjZUlkLCBwYXNzd29yZCkpXG4gICAgICAgICAgaWYgKHByb3BzLkRhdGFiYXNlTmFtZSkge1xuICAgICAgICAgICAgc3FsLnB1c2goXG4gICAgICAgICAgICAgIGZvcm1hdChcImdyYW50IGNvbm5lY3Qgb24gZGF0YWJhc2UgJUkgdG8gJUlcIiwgcHJvcHMuRGF0YWJhc2VOYW1lLCByZXNvdXJjZUlkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzcWwucHVzaChcImNvbW1pdFwiKVxuICAgICAgICAgIHJldHVybiBzcWxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBgQ2Fubm90IHBhcnNlIHBhc3N3b3JkIGZyb20gJHtwcm9wcy5QYXNzd29yZEFybn1gXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNxbCA9IFtcInN0YXJ0IHRyYW5zYWN0aW9uXCJdXG4gICAgICAgIGlmIChvbGRSZXNvdXJjZUlkICE9PSByZXNvdXJjZUlkKSB7XG4gICAgICAgICAgc3FsLnB1c2goZm9ybWF0KFwiYWx0ZXIgcm9sZSAlSSByZW5hbWUgdG8gJUlcIiwgb2xkUmVzb3VyY2VJZCwgcmVzb3VyY2VJZCkpXG4gICAgICAgIH1cbiAgICAgICAgc3FsLnB1c2goXG4gICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgYERPICQkXG5CRUdJTlxuICBJRiBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2RhdGFiYXNlIHdoZXJlIGRhdG5hbWUgPSAnJXMnIGFuZCBkYXRpc3RlbXBsYXRlID0gZmFsc2UpIFRIRU5cbiAgICBncmFudCBjb25uZWN0IG9uIGRhdGFiYXNlICVJIHRvICVJO1xuICBFTkQgSUY7XG5FTkQkJDtgLFxuICAgICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgcmVzb3VyY2VJZFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBzcWwucHVzaChcImNvbW1pdFwiKVxuICAgICAgICByZXR1cm4gc3FsXG4gICAgICB9XG4gICAgfSxcbiAgICBEZWxldGU6IChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBSb2xlUHJvcHMpID0+IHtcbiAgICAgIC8vIFRPRE86IGlmIHVzZXIgaXMgb3duZXIgb2YgYSBkYXRhYmFzZSwgYXNzaWduIG93bmVyc2hpcCB0byBtYXN0ZXIgdXNlclxuICAgICAgLy8gVGhpcyB3aWxsIHJlcXVpcmUgYSBzcGVjaWZpZWQgaW5oZXJpdG9yIG9uIHJvbGUgY3JlYXRpb25cbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwic3RhcnQgdHJhbnNhY3Rpb25cIixcbiAgICAgICAgZm9ybWF0KFxuICAgICAgICAgIGBETyAkJFxuQkVHSU5cbiAgSUYgRVhJU1RTIChzZWxlY3QgZnJvbSBwZ19jYXRhbG9nLnBnX3JvbGVzIFdIRVJFIHJvbG5hbWUgPSAnJXMnKSBBTkQgRVhJU1RTIChzZWxlY3QgZnJvbSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRuYW1lID0gJyVzJykgVEhFTlxuICAgIHJldm9rZSBhbGwgcHJpdmlsZWdlcyBvbiBkYXRhYmFzZSAlSSBmcm9tICVJO1xuICBFTkQgSUY7XG5FTkQkJDtgLFxuICAgICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICByZXNvdXJjZUlkXG4gICAgICAgICksXG4gICAgICAgIGZvcm1hdChcImRyb3Agcm9sZSBpZiBleGlzdHMgJUlcIiwgcmVzb3VyY2VJZCksXG4gICAgICAgIFwiY29tbWl0XCIsXG4gICAgICBdXG4gICAgfSxcbiAgfSxcbiAgZGF0YWJhc2U6IHtcbiAgICBDcmVhdGU6IGFzeW5jIChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSA9PiB7XG4gICAgICBjb25zdCBvd25lciA9IHByb3BzLk93bmVyXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBmb3JtYXQoXCJjcmVhdGUgZGF0YWJhc2UgJUlcIiwgcmVzb3VyY2VJZCksXG4gICAgICAgICAgZm9ybWF0KFwiYWx0ZXIgZGF0YWJhc2UgJUkgb3duZXIgdG8gJUlcIiwgcmVzb3VyY2VJZCwgb3duZXIpLFxuICAgICAgICBdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZm9ybWF0KFwiY3JlYXRlIGRhdGFiYXNlICVJXCIsIHJlc291cmNlSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBVcGRhdGU6IGFzeW5jIChcbiAgICAgIHJlc291cmNlSWQ6IHN0cmluZyxcbiAgICAgIG9sZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgICAgIHByb3BzOiBEYXRhYmFzZVVwZGF0ZVByb3BzXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50czogc3RyaW5nW10gPSBbXVxuICAgICAgaWYgKHJlc291cmNlSWQgIT09IG9sZFJlc291cmNlSWQpIHtcbiAgICAgICAgaWYgKHByb3BzLk1hc3Rlck93bmVyKSB7XG4gICAgICAgICAgc3RhdGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgZm9ybWF0KFwiYWx0ZXIgZGF0YWJhc2UgJUkgb3duZXIgdG8gJUlcIiwgb2xkUmVzb3VyY2VJZCwgcHJvcHMuTWFzdGVyT3duZXIpXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlbWVudHMucHVzaChcbiAgICAgICAgICBmb3JtYXQoXCJhbHRlciBkYXRhYmFzZSAlSSByZW5hbWUgdG8gJUlcIiwgb2xkUmVzb3VyY2VJZCwgcmVzb3VyY2VJZClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3duZXIgPSBwcm9wcy5Pd25lclxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHN0YXRlbWVudHMucHVzaChmb3JtYXQoXCJhbHRlciBkYXRhYmFzZSAlSSBvd25lciB0byAlSVwiLCByZXNvdXJjZUlkLCBwcm9wcy5Pd25lcikpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVtZW50c1xuICAgIH0sXG4gICAgRGVsZXRlOiAocmVzb3VyY2VJZDogc3RyaW5nLCBuZXdPd25lcjogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgXCJzZWxlY3QgcGdfdGVybWluYXRlX2JhY2tlbmQocGdfc3RhdF9hY3Rpdml0eS5waWQpIGZyb20gcGdfc3RhdF9hY3Rpdml0eSB3aGVyZSBkYXRuYW1lID0gJUxcIixcbiAgICAgICAgICByZXNvdXJjZUlkXG4gICAgICAgICksXG4gICAgICAgIGZvcm1hdChcbiAgICAgICAgICBcIkRPICQkQkVHSU5cXG5JRiBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSAnJXMnKSBUSEVOIGFsdGVyIGRhdGFiYXNlICVJIG93bmVyIHRvICVJOyBFTkQgSUY7XFxuRU5EJCQ7XCIsXG4gICAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgICByZXNvdXJjZUlkLFxuICAgICAgICAgIG5ld093bmVyXG4gICAgICAgICksXG4gICAgICAgIGZvcm1hdChcImRyb3AgZGF0YWJhc2UgaWYgZXhpc3RzICVJXCIsIHJlc291cmNlSWQpLFxuICAgICAgXVxuICAgIH0sXG4gIH0sXG59XG5cbmNvbnN0IGdyYW50Um9sZUZvclNjaGVtYSA9IChzY2hlbWE6IHN0cmluZywgcm9sZU5hbWU6IHN0cmluZykgPT4gW1xuICBmb3JtYXQoXCJHUkFOVCBVU0FHRSBPTiBTQ0hFTUEgJUkgVE8gJUlcIiwgc2NoZW1hLCByb2xlTmFtZSksXG4gIGZvcm1hdChcIkdSQU5UIENSRUFURSBPTiBTQ0hFTUEgJUkgVE8gJUlcIiwgc2NoZW1hLCByb2xlTmFtZSksXG5dXG5jb25zdCByZXZva2VSb2xlRnJvbVNjaGVtYSA9IChzY2hlbWE6IHN0cmluZywgcm9sZU5hbWU6IHN0cmluZykgPT4gW1xuICBmb3JtYXQoXCJSRVZPS0UgQ1JFQVRFIE9OIFNDSEVNQSAlSSBGUk9NICVJXCIsIHNjaGVtYSwgcm9sZU5hbWUpLFxuICBmb3JtYXQoXCJSRVZPS0UgQUxMIE9OIFNDSEVNQSAlSSBGUk9NICVJXCIsIHNjaGVtYSwgcm9sZU5hbWUpLFxuXVxuXG5jb25zdCBsb2cgPVxuICBwcm9jZXNzLmVudi5MT0dHRVIgPT09IFwidHJ1ZVwiXG4gICAgPyBjb25zb2xlLmRlYnVnXG4gICAgOiAoX21lc3NhZ2U/OiBhbnksIC4uLl9vcHRpb25hbFBhcmFtczogYW55W10pID0+IHt9XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDpcbiAgICB8IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VDcmVhdGVFdmVudFxuICAgIHwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVVwZGF0ZUV2ZW50XG4gICAgfCBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRGVsZXRlRXZlbnRcbik6IFByb21pc2U8YW55PiA9PiB7XG4gIGxvZyhldmVudClcblxuICBjb25zdCByZXF1ZXN0VHlwZSA9IGV2ZW50LlJlcXVlc3RUeXBlXG4gIGNvbnN0IHJlc291cmNlOiBSZHNTcWxSZXNvdXJjZSA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5SZXNvdXJjZVxuICBjb25zdCByZXNvdXJjZUlkID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlJlc291cmNlSWRcbiAgY29uc3QgZGF0YWJhc2VOYW1lID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkRhdGFiYXNlTmFtZVxuXG4gIGlmICghT2JqZWN0LmtleXMoanVtcFRhYmxlKS5pbmNsdWRlcyhldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuUmVzb3VyY2UpKSB7XG4gICAgdGhyb3cgYFJlc291cmNlIHR5cGUgJyR7cmVzb3VyY2V9JyBub3QgcmVjb2duaXNlZC5gXG4gIH1cblxuICBjb25zdCBzZWNyZXRzX2NsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSlcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgIFNlY3JldElkOiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuU2VjcmV0QXJuLFxuICB9KVxuICAvLyBBcyB0aGUgSUFNIGNyZWRlbnRpYWxzIGNhbiBiZSBjYWNoZWQsIGFuIHVwZGF0ZSBtYWtkZSB2ZXJ5IHJlY2VudFxuICAvLyBjb3VsZCBub3QgeWV0IGJlIGF2YWlsYWJsZS5cbiAgLy8gU28gd2UgcmV0cnkgdGhpcyBhIGJpdC5cbiAgbG9nKFwiRmV0Y2hpbmcgc2VjcmV0XCIpXG4gIGNvbnN0IHNlY3JldDogR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0ID0gYXdhaXQgYmFja09mZihcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZWNyZXRzX2NsaWVudC5zZW5kKGNvbW1hbmQpXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nKFwiRXJyb3IgZmV0Y2hpbmcgc2VjcmV0ICVvXCIsIGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG51bU9mQXR0ZW1wdHM6IDEwLFxuICAgICAgc3RhcnRpbmdEZWxheTogNTAwLFxuICAgIH1cbiAgKVxuICBpZiAoIXNlY3JldC5TZWNyZXRTdHJpbmcpIHRocm93IFwiTm8gc2VjcmV0IHN0cmluZ1wiXG4gIGNvbnN0IHNlY3JldFZhbHVlcyA9IEpTT04ucGFyc2Uoc2VjcmV0LlNlY3JldFN0cmluZylcblxuICBsZXQgc3FsOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHZvaWRcbiAgc3dpdGNoIChyZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgXCJDcmVhdGVcIjoge1xuICAgICAgc3FsID0gYXdhaXQganVtcFRhYmxlW3Jlc291cmNlXVtyZXF1ZXN0VHlwZV0ocmVzb3VyY2VJZCwgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzKVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBcIlVwZGF0ZVwiOiB7XG4gICAgICBjb25zdCBvbGRSZXNvdXJjZUlkID0gKGV2ZW50IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudClcbiAgICAgICAgLlBoeXNpY2FsUmVzb3VyY2VJZFxuICAgICAgc3FsID0gYXdhaXQganVtcFRhYmxlW3Jlc291cmNlXVtyZXF1ZXN0VHlwZV0ocmVzb3VyY2VJZCwgb2xkUmVzb3VyY2VJZCwge1xuICAgICAgICAuLi5ldmVudC5SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgICAgIE1hc3Rlck93bmVyOiBzZWNyZXRWYWx1ZXMudXNlcm5hbWUsXG4gICAgICB9KVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBcIkRlbGV0ZVwiOiB7XG4gICAgICBpZiAocmVzb3VyY2UgPT09IFJkc1NxbFJlc291cmNlLkRBVEFCQVNFKSB7XG4gICAgICAgIHNxbCA9IGp1bXBUYWJsZVtyZXNvdXJjZV1bcmVxdWVzdFR5cGVdKHJlc291cmNlSWQsIHNlY3JldFZhbHVlcy51c2VybmFtZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNxbCA9IGp1bXBUYWJsZVtyZXNvdXJjZV1bcmVxdWVzdFR5cGVdKHJlc291cmNlSWQsIGV2ZW50LlJlc291cmNlUHJvcGVydGllcylcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHNxbCkge1xuICAgIGxldCBkYXRhYmFzZTogc3RyaW5nXG4gICAgaWYgKHJlc291cmNlID09PSBSZHNTcWxSZXNvdXJjZS5ST0xFKSB7XG4gICAgICBkYXRhYmFzZSA9IHNlY3JldFZhbHVlcy5kYm5hbWVcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YWJhc2UgPSBkYXRhYmFzZU5hbWUgPz8gc2VjcmV0VmFsdWVzLmRibmFtZSAvLyBjb25uZWN0IHRvIGdpdmVuIGRhdGFiYXNlIGlmIHBvc3NpYmxlLCBlbHNlIHRvIGRhdGFiYXNlIG1lbnRpb25lZCBpbiBzZWNyZXRcbiAgICB9XG4gICAgLy8gUGFyc2UgU1NMIG9wdGlvbiBmcm9tIGVudiwgaWYgcHJvdmlkZWQuXG4gICAgLy8gSWYgcHJvY2Vzcy5lbnYuU1NMIGlzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLCBkaXNhYmxlIFNTTC5cbiAgICBjb25zdCBpc1NzbEVuYWJsZWQgPSBwcm9jZXNzLmVudi5TU0wgPyBKU09OLnBhcnNlKHByb2Nlc3MuZW52LlNTTCkgOiB0cnVlXG4gICAgY29uc3Qgc3NsOiBDb25uZWN0aW9uT3B0aW9ucyB8IGZhbHNlID0gaXNTc2xFbmFibGVkXG4gICAgICA/IHtcbiAgICAgICAgICBjYTogZnMucmVhZEZpbGVTeW5jKGAke3Byb2Nlc3MuZW52LkxBTUJEQV9UQVNLX1JPT1R9L2dsb2JhbC1idW5kbGUucGVtYCksXG4gICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLCAvLyBUaGlzIGZvcmNlcyB0aGUgY2xpZW50IHRvIHZlcmlmeSB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuXG4gICAgICAgIH1cbiAgICAgIDogZmFsc2VcblxuICAgIGNvbnN0IHBhcmFtczogQ2xpZW50Q29uZmlnID0ge1xuICAgICAgaG9zdDogc2VjcmV0VmFsdWVzLmhvc3QsXG4gICAgICBwb3J0OiBzZWNyZXRWYWx1ZXMucG9ydCxcbiAgICAgIHVzZXI6IHNlY3JldFZhbHVlcy51c2VybmFtZSxcbiAgICAgIHBhc3N3b3JkOiBzZWNyZXRWYWx1ZXMucGFzc3dvcmQsXG4gICAgICBkYXRhYmFzZTogZGF0YWJhc2UsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogMzAwMDAsIC8vIHJldHVybiBhbiBlcnJvciBpZiBhIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkIHdpdGhpbiAzMCBzZWNvbmRzXG4gICAgICBzc2wsXG4gICAgfVxuICAgIGxvZyhcbiAgICAgIGBDb25uZWN0aW5nIHRvIGhvc3QgJHtwYXJhbXMuaG9zdH06JHtwYXJhbXMucG9ydH0ke1xuICAgICAgICBzc2wgPyBcIiB1c2luZyBhIHNlY3VyZSBjb25uZWN0aW9uXCIgOiBcIlwiXG4gICAgICB9LCBkYXRhYmFzZSAke3BhcmFtcy5kYXRhYmFzZX0gYXMgJHtwYXJhbXMudXNlcn1gXG4gICAgKVxuICAgIGxvZyhcIkV4ZWN1dGluZyBTUUxcIiwgc3FsKVxuICAgIGNvbnN0IHBnX2NsaWVudCA9IG5ldyBDbGllbnQocGFyYW1zKVxuICAgIGF3YWl0IHBnX2NsaWVudC5jb25uZWN0KClcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYmFja09mZihcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3FsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGdfY2xpZW50LnF1ZXJ5KHNxbClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNxbCkge1xuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgc3FsLm1hcCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGdfY2xpZW50LnF1ZXJ5KHN0YXRlbWVudClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByZXRyeTogZXJyb3JGaWx0ZXIsXG4gICAgICAgICAgbnVtT2ZBdHRlbXB0czogbWF4QXR0ZW1wdHMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcGdfY2xpZW50LmVuZCgpXG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3BvbnNlOiBDdXN0b21SZXNvdXJjZVJlc3BvbnNlID0ge31cbiAgLy8gRXhjZXB0IGZvciB0aGUgU1FMIHJlc291cmNlLCByZXR1cm4gdGhlIG5ldyByZXNvdXJjZSBpZC4gVGhpc1xuICAvLyB3aWxsIGNhdXNlIGEgZGVsZXRlIHRvIGJlIHNlbmQgZm9yIHRoZSBvbGQgcmVzb3VyY2UuXG4gIGlmIChyZXNvdXJjZSAhPT0gUmRzU3FsUmVzb3VyY2UuU1FMKSB7XG4gICAgcmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkID0gcmVzb3VyY2VJZFxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIEN1c3RvbSBlcnJvciBmaWx0ZXIsIG1haW5seSB0byByZXRyeSByb2xlIGNyZWF0aW9uLlxuLy8gRnJlcXVlbnRseSBzZWUgXCJ0dXBsZSBjb25jdXJyZW50bHkgdXBkYXRlZFwiLCBhbmQgYWRkaW5nXG4vLyBkZXBlbmRlbmNpZXMgaXMgdmVyeSBoYXJkIHRvIG1ha2Ugd29yay5cbmNvbnN0IGVycm9yRmlsdGVyID0gKGVycm9yOiBhbnksIG5leHRBdHRlbXB0TnVtYmVyOiBudW1iZXIpID0+IHtcbiAgLy8gUmV0cnkgb25seSBpZiB0aGUgZXJyb3IgbWVzc2FnZSBjb250YWlucyBcInR1cGxlIGNvbmN1cnJlbnRseVwiXG4gIC8vIFRoaXMgd2lsbCBjb3ZlciBjb25jdXJyZW50IHVwZGF0ZXMgYW5kIGRlbGV0ZXNcbiAgY29uc3Qgd2lsbFJldHJ5ID0gZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcInR1cGxlIGNvbmN1cnJlbnRseVwiKVxuICBsb2coXG4gICAgXCJFbmNvdW50ZXJlZCBhbiBlcnJvciBvbiBhdHRlbXB0ICVkLyVkIHJldHJ5PSVzIGVycm9yPVslb11cIixcbiAgICBuZXh0QXR0ZW1wdE51bWJlciAtIDEsXG4gICAgbWF4QXR0ZW1wdHMsXG4gICAgd2lsbFJldHJ5LFxuICAgIGVycm9yXG4gIClcbiAgcmV0dXJuIHdpbGxSZXRyeVxufVxuXG4vKipcbiAqIFBhcnNlIHBhc3N3b3JkIGZpZWxkIGZyb20gc2VjcmV0LiBSZXR1cm5zIHZvaWQgb24gZXJyb3IuXG4gKi9cbmNvbnN0IGdldFBhc3N3b3JkID0gYXN5bmMgKGFybjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB2b2lkPiA9PiB7XG4gIGNvbnN0IHNlY3JldHNfY2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHt9KVxuICBjb25zdCBjb21tYW5kID0gbmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IGFybixcbiAgfSlcbiAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgc2VjcmV0c19jbGllbnQuc2VuZChjb21tYW5kKVxuICBpZiAoc2VjcmV0LlNlY3JldFN0cmluZykge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHNlY3JldC5TZWNyZXRTdHJpbmcpXG4gICAgcmV0dXJuIGpzb24ucGFzc3dvcmRcbiAgfVxufVxuIl19
package/lib/provider.d.ts CHANGED
@@ -16,7 +16,7 @@ export interface RdsSqlProps {
16
16
  */
17
17
  readonly vpc: IVpc;
18
18
  /**
19
- * Where to place the networkprovivder lambda within the VPC.
19
+ * Where to place the network provider lambda within the VPC.
20
20
  *
21
21
  * @default - the isolated subnet if not specified
22
22
  */
@@ -56,7 +56,7 @@ export interface RdsSqlProps {
56
56
  /**
57
57
  * Use SSL?
58
58
  *
59
- * @default - true
59
+ * @default - false
60
60
  */
61
61
  readonly ssl?: boolean;
62
62
  }
package/lib/provider.js CHANGED
@@ -35,7 +35,6 @@ class Provider extends constructs_1.Construct {
35
35
  else {
36
36
  this.handler.node.defaultChild?.node.addDependency(props.cluster.connections.securityGroups[0]);
37
37
  }
38
- this.handler.connections.allowToDefaultPort(props.cluster);
39
38
  this.node.addDependency(props.cluster);
40
39
  }
41
40
  newCustomResourceHandler(scope, id, props) {
@@ -70,8 +69,21 @@ class Provider extends constructs_1.Construct {
70
69
  timeout: props.timeout ?? props.functionProps?.timeout ?? aws_cdk_lib_1.Duration.seconds(300),
71
70
  bundling: {
72
71
  sourceMap: true,
73
- sourcesContent: false,
74
72
  externalModules: ["pg-native"],
73
+ // Include the migrations directory in the bundle
74
+ commandHooks: {
75
+ beforeBundling(_, outputDir) {
76
+ return [
77
+ `curl --silent -fL https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem -o ${path.join(outputDir, "global-bundle.pem")}`,
78
+ ];
79
+ },
80
+ afterBundling() {
81
+ return [];
82
+ },
83
+ beforeInstall() {
84
+ return [];
85
+ },
86
+ },
75
87
  },
76
88
  environment: {
77
89
  LOGGER: logger.toString(),
@@ -79,13 +91,17 @@ class Provider extends constructs_1.Construct {
79
91
  ...ssl_options,
80
92
  },
81
93
  });
94
+ if (!props.functionProps?.securityGroups ||
95
+ props.functionProps?.securityGroups.length === 0) {
96
+ props.cluster.connections.allowDefaultPortFrom(fn, "Allow the rds sql handler to connect to db");
97
+ }
82
98
  return fn;
83
99
  }
84
100
  }
85
101
  exports.Provider = Provider;
86
102
  _a = JSII_RTTI_SYMBOL_1;
87
- Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "4.1.0" };
103
+ Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "5.0.0" };
88
104
  function slugify(x) {
89
105
  return x.replace(/[^a-zA-Z0-9]/g, "");
90
106
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQkFBK0I7QUFDL0IsNkJBQTRCO0FBQzVCLDZDQUE2QztBQUM3QyxpREFBdUU7QUFDdkUsdURBQTJEO0FBQzNELHdEQUF1RDtBQVF2RCxnRUFBK0Q7QUFDL0QsMkNBQXNDO0FBZ0V0QyxNQUFhLFFBQVMsU0FBUSxzQkFBUztJQU1yQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUU1QixNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7UUFDL0UsSUFBSSxDQUFDLE9BQU87WUFDVCxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBZTtnQkFDN0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFM0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDNUQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQTtRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUM3QixnREFBZ0Q7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QyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgSVZwYywgU3VibmV0VHlwZSwgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0IHsgSUZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvblByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7XG4gIElEYXRhYmFzZUNsdXN0ZXIsXG4gIElTZXJ2ZXJsZXNzQ2x1c3RlcixcbiAgSURhdGFiYXNlSW5zdGFuY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCJcbmltcG9ydCB7IElTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmRzU3FsUHJvcHMge1xuICAvKipcbiAgICogVlBDIG5ldHdvcmsgdG8gcGxhY2UgdGhlIHByb3ZpZGVyIGxhbWJkYS5cbiAgICpcbiAgICogTm9ybWFsbHkgdGhpcyBpcyB0aGUgVlBDIG9mIHlvdXIgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRnVuY3Rpb24gaXMgbm90IHBsYWNlZCB3aXRoaW4gYSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNcblxuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIG5ldHdvcmtwcm92aXZkZXIgbGFtYmRhIHdpdGhpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBpc29sYXRlZCBzdWJuZXQgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvblxuXG4gIC8qKlxuICAgKiBZb3VyIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlcjogSVNlcnZlcmxlc3NDbHVzdGVyIHwgSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlXG5cbiAgLyoqXG4gICAqIFNlY3JldCB0aGF0IGdyYW50cyBhY2Nlc3MgdG8geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogVXN1YWxseSB0aGlzIGlzIHlvdXIgY2x1c3RlcidzIG1hc3RlciBzZWNyZXQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ6IElTZWNyZXRcblxuICAvKipcbiAgICogVGltZW91dCBmb3IgbGFtYmRhIHRvIGRvIGl0cyB3b3JrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uXG5cbiAgLyoqXG4gICAqIExvZyBTUUwgc3RhdGVtZW50cy4gVGhpcyBpbmNsdWRlcyBwYXNzd29yZHMuIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dlcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uIHN1Y2ggYXMgdGhlIGxvZyBncm91cC4gSG93ZXZlcixcbiAgICogbGFtYmRhIGZ1bmN0aW9uIHByb3BlcnRpZXMgY29udHJvbGxlZCBieSBvdGhlciB7UmRzU3FsUHJvcHN9IHBhcmFtZXRlcnMgd2lsbCB0cnVtcFxuICAgKiBvcGlvbnMgc2V0IHZpYSB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbXB0eVxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE5vZGVqc0Z1bmN0aW9uUHJvcHNcblxuICAvKipcbiAgICogVXNlIFNTTD9cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBzc2w/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlVG9rZW46IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0OiBJU2VjcmV0XG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiBJRnVuY3Rpb25cbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXI6IElTZXJ2ZXJsZXNzQ2x1c3RlciB8IElEYXRhYmFzZUNsdXN0ZXIgfCBJRGF0YWJhc2VJbnN0YW5jZVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZHNTcWxQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLnNlY3JldCA9IHByb3BzLnNlY3JldFxuICAgIHRoaXMuY2x1c3RlciA9IHByb3BzLmNsdXN0ZXJcblxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IFwiUmRzU3FsXCIgKyBzbHVnaWZ5KFwiMjhiOWU3OTEtYWY2MC00YTMzLWJjYTgtZmZiNmYzMGVmOGM1XCIpXG4gICAgdGhpcy5oYW5kbGVyID1cbiAgICAgIChTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZChmdW5jdGlvbk5hbWUpIGFzIElGdW5jdGlvbikgPz9cbiAgICAgIHRoaXMubmV3Q3VzdG9tUmVzb3VyY2VIYW5kbGVyKHNjb3BlLCBmdW5jdGlvbk5hbWUsIHByb3BzKVxuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY3VzdG9tUmVzb3VyY2VzLlByb3ZpZGVyKHRoaXMsIFwiUmRzU3FsXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgfSlcbiAgICB0aGlzLnNlcnZpY2VUb2tlbiA9IHByb3ZpZGVyLnNlcnZpY2VUb2tlblxuICAgIHRoaXMuc2VjcmV0LmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpXG4gICAgaWYgKHRoaXMuc2VjcmV0LmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIC8vIEl0IHNlZW1zIHdlIG5lZWQgdG8gZ3JhbnQgZXhwbGljaXQgcGVybWlzc2lvblxuICAgICAgdGhpcy5zZWNyZXQuZW5jcnlwdGlvbktleS5ncmFudERlY3J5cHQodGhpcy5oYW5kbGVyKVxuICAgIH1cbiAgICBpZiAocHJvcHMuY2x1c3Rlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNsdXN0ZXIgZG9lcyBub3QgaGF2ZSBhIHNlY3VyaXR5IGdyb3VwLlwiKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIubm9kZS5kZWZhdWx0Q2hpbGQ/Lm5vZGUuYWRkRGVwZW5kZW5jeShcbiAgICAgICAgcHJvcHMuY2x1c3Rlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXVxuICAgICAgKVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZXIuY29ubmVjdGlvbnMuYWxsb3dUb0RlZmF1bHRQb3J0KHByb3BzLmNsdXN0ZXIpXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuY2x1c3RlcilcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXdDdXN0b21SZXNvdXJjZUhhbmRsZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBSZHNTcWxQcm9wc1xuICApOiBsYW1iZGEuTm9kZWpzRnVuY3Rpb24ge1xuICAgIGNvbnN0IHRzX2ZpbGVuYW1lID0gYCR7X19kaXJuYW1lfS9oYW5kbGVyLnRzYFxuICAgIGNvbnN0IGpzX2ZpbGVuYW1lID0gYCR7X19kaXJuYW1lfS9oYW5kbGVyLmpzYFxuICAgIGxldCBlbnRyeTogc3RyaW5nXG4gICAgaWYgKGV4aXN0c1N5bmModHNfZmlsZW5hbWUpKSB7XG4gICAgICBlbnRyeSA9IHRzX2ZpbGVuYW1lXG4gICAgfSBlbHNlIGlmIChleGlzdHNTeW5jKGpzX2ZpbGVuYW1lKSkge1xuICAgICAgZW50cnkgPSBqc19maWxlbmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVZ2x5IGhhY2sgdG8gc3VwcG9ydCBTU1QgKHBvc3NpYmx5IGNhdXNlZCBieSBteSBoYWNrIHRvIG1ha2UgU1NUIHdvcmsgd2l0aCBDb21tb25KUyBsaWJyYXJpZXMpXG4gICAgICBlbnRyeSA9IHBhdGguam9pbihcbiAgICAgICAgcGF0aC5kaXJuYW1lKHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX2pzb24gfHwgcHJvY2Vzcy5jd2QoKSksXG4gICAgICAgIFwibm9kZV9tb2R1bGVzL2Nkay1yZHMtc3FsL2xpYi9oYW5kbGVyLmpzXCJcbiAgICAgIClcbiAgICB9XG4gICAgbGV0IHNzbF9vcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgaWYgKHByb3BzLnNzbCAhPT0gdW5kZWZpbmVkICYmICFwcm9wcy5zc2wpIHtcbiAgICAgIHNzbF9vcHRpb25zID0ge1xuICAgICAgICBTU0w6IEpTT04uc3RyaW5naWZ5KHByb3BzLnNzbCksXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGxvZ2dlciA9IHByb3BzLmxvZ2dlciA/PyBmYWxzZVxuICAgIGNvbnN0IGZuID0gbmV3IGxhbWJkYS5Ob2RlanNGdW5jdGlvbihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLmZ1bmN0aW9uUHJvcHMsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICB9LFxuICAgICAgZW50cnk6IGVudHJ5LFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQgPz8gcHJvcHMuZnVuY3Rpb25Qcm9wcz8udGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgIHNvdXJjZXNDb250ZW50OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbXCJwZy1uYXRpdmVcIl0sXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgTE9HR0VSOiBsb2dnZXIudG9TdHJpbmcoKSxcbiAgICAgICAgTk9ERV9PUFRJT05TOiBcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsXG4gICAgICAgIC4uLnNzbF9vcHRpb25zLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHJldHVybiBmblxuICB9XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiXCIpXG59XG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQkFBK0I7QUFDL0IsNkJBQTRCO0FBQzVCLDZDQUE2QztBQUM3QyxpREFBdUU7QUFDdkUsdURBQTJEO0FBQzNELHdEQUF1RDtBQVF2RCxnRUFBK0Q7QUFDL0QsMkNBQXNDO0FBZ0V0QyxNQUFhLFFBQVMsU0FBUSxzQkFBUztJQU1yQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUU1QixNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7UUFDL0UsSUFBSSxDQUFDLE9BQU87WUFDVCxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBZTtnQkFDN0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFM0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDNUQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQTtRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUM3QixnREFBZ0Q7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LFlBQVksRUFBRSxzQkFBc0I7Z0JBQ3BDLEdBQUcsV0FBVzthQUNmO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsSUFDRSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsY0FBYztZQUNwQyxLQUFLLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUNoRDtZQUNBLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUM1QyxFQUFFLEVBQ0YsNENBQTRDLENBQzdDLENBQUE7U0FDRjtRQUVELE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQzs7QUE3R0gsNEJBOEdDOzs7QUFFRCxTQUFTLE9BQU8sQ0FBQyxDQUFTO0lBQ3hCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgSVZwYywgU3VibmV0VHlwZSwgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0IHsgSUZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvblByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7XG4gIElEYXRhYmFzZUNsdXN0ZXIsXG4gIElTZXJ2ZXJsZXNzQ2x1c3RlcixcbiAgSURhdGFiYXNlSW5zdGFuY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCJcbmltcG9ydCB7IElTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmRzU3FsUHJvcHMge1xuICAvKipcbiAgICogVlBDIG5ldHdvcmsgdG8gcGxhY2UgdGhlIHByb3ZpZGVyIGxhbWJkYS5cbiAgICpcbiAgICogTm9ybWFsbHkgdGhpcyBpcyB0aGUgVlBDIG9mIHlvdXIgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRnVuY3Rpb24gaXMgbm90IHBsYWNlZCB3aXRoaW4gYSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNcblxuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIG5ldHdvcmsgcHJvdmlkZXIgbGFtYmRhIHdpdGhpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBpc29sYXRlZCBzdWJuZXQgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvblxuXG4gIC8qKlxuICAgKiBZb3VyIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlcjogSVNlcnZlcmxlc3NDbHVzdGVyIHwgSURhdGFiYXNlQ2x1c3RlciB8IElEYXRhYmFzZUluc3RhbmNlXG5cbiAgLyoqXG4gICAqIFNlY3JldCB0aGF0IGdyYW50cyBhY2Nlc3MgdG8geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogVXN1YWxseSB0aGlzIGlzIHlvdXIgY2x1c3RlcidzIG1hc3RlciBzZWNyZXQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ6IElTZWNyZXRcblxuICAvKipcbiAgICogVGltZW91dCBmb3IgbGFtYmRhIHRvIGRvIGl0cyB3b3JrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uXG5cbiAgLyoqXG4gICAqIExvZyBTUUwgc3RhdGVtZW50cy4gVGhpcyBpbmNsdWRlcyBwYXNzd29yZHMuIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dlcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uLlxuICAgKlxuICAgKiBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBmdW5jdGlvbiBjdXN0b21pemF0aW9uIHN1Y2ggYXMgdGhlIGxvZyBncm91cC4gSG93ZXZlcixcbiAgICogbGFtYmRhIGZ1bmN0aW9uIHByb3BlcnRpZXMgY29udHJvbGxlZCBieSBvdGhlciB7UmRzU3FsUHJvcHN9IHBhcmFtZXRlcnMgd2lsbCB0cnVtcFxuICAgKiBvcGlvbnMgc2V0IHZpYSB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbXB0eVxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE5vZGVqc0Z1bmN0aW9uUHJvcHNcblxuICAvKipcbiAgICogVXNlIFNTTD9cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3NsPzogYm9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldDogSVNlY3JldFxuICBwdWJsaWMgcmVhZG9ubHkgaGFuZGxlcjogSUZ1bmN0aW9uXG4gIHB1YmxpYyByZWFkb25seSBjbHVzdGVyOiBJU2VydmVybGVzc0NsdXN0ZXIgfCBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2VcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzU3FsUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG4gICAgdGhpcy5zZWNyZXQgPSBwcm9wcy5zZWNyZXRcbiAgICB0aGlzLmNsdXN0ZXIgPSBwcm9wcy5jbHVzdGVyXG5cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBcIlJkc1NxbFwiICsgc2x1Z2lmeShcIjI4YjllNzkxLWFmNjAtNGEzMy1iY2E4LWZmYjZmMzBlZjhjNVwiKVxuICAgIHRoaXMuaGFuZGxlciA9XG4gICAgICAoU3RhY2sub2YodGhpcykubm9kZS50cnlGaW5kQ2hpbGQoZnVuY3Rpb25OYW1lKSBhcyBJRnVuY3Rpb24pID8/XG4gICAgICB0aGlzLm5ld0N1c3RvbVJlc291cmNlSGFuZGxlcihzY29wZSwgZnVuY3Rpb25OYW1lLCBwcm9wcylcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGN1c3RvbVJlc291cmNlcy5Qcm92aWRlcih0aGlzLCBcIlJkc1NxbFwiLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgIH0pXG4gICAgdGhpcy5zZXJ2aWNlVG9rZW4gPSBwcm92aWRlci5zZXJ2aWNlVG9rZW5cbiAgICB0aGlzLnNlY3JldC5ncmFudFJlYWQodGhpcy5oYW5kbGVyKVxuICAgIGlmICh0aGlzLnNlY3JldC5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICAvLyBJdCBzZWVtcyB3ZSBuZWVkIHRvIGdyYW50IGV4cGxpY2l0IHBlcm1pc3Npb25cbiAgICAgIHRoaXMuc2VjcmV0LmVuY3J5cHRpb25LZXkuZ3JhbnREZWNyeXB0KHRoaXMuaGFuZGxlcilcbiAgICB9XG4gICAgaWYgKHByb3BzLmNsdXN0ZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDbHVzdGVyIGRvZXMgbm90IGhhdmUgYSBzZWN1cml0eSBncm91cC5cIilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm5vZGUuZGVmYXVsdENoaWxkPy5ub2RlLmFkZERlcGVuZGVuY3koXG4gICAgICAgIHByb3BzLmNsdXN0ZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF1cbiAgICAgIClcbiAgICB9XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuY2x1c3RlcilcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXdDdXN0b21SZXNvdXJjZUhhbmRsZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBSZHNTcWxQcm9wc1xuICApOiBsYW1iZGEuTm9kZWpzRnVuY3Rpb24ge1xuICAgIGNvbnN0IHRzX2ZpbGVuYW1lID0gYCR7X19kaXJuYW1lfS9oYW5kbGVyLnRzYFxuICAgIGNvbnN0IGpzX2ZpbGVuYW1lID0gYCR7X19kaXJuYW1lfS9oYW5kbGVyLmpzYFxuICAgIGxldCBlbnRyeTogc3RyaW5nXG4gICAgaWYgKGV4aXN0c1N5bmModHNfZmlsZW5hbWUpKSB7XG4gICAgICBlbnRyeSA9IHRzX2ZpbGVuYW1lXG4gICAgfSBlbHNlIGlmIChleGlzdHNTeW5jKGpzX2ZpbGVuYW1lKSkge1xuICAgICAgZW50cnkgPSBqc19maWxlbmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVZ2x5IGhhY2sgdG8gc3VwcG9ydCBTU1QgKHBvc3NpYmx5IGNhdXNlZCBieSBteSBoYWNrIHRvIG1ha2UgU1NUIHdvcmsgd2l0aCBDb21tb25KUyBsaWJyYXJpZXMpXG4gICAgICBlbnRyeSA9IHBhdGguam9pbihcbiAgICAgICAgcGF0aC5kaXJuYW1lKHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX2pzb24gfHwgcHJvY2Vzcy5jd2QoKSksXG4gICAgICAgIFwibm9kZV9tb2R1bGVzL2Nkay1yZHMtc3FsL2xpYi9oYW5kbGVyLmpzXCJcbiAgICAgIClcbiAgICB9XG4gICAgbGV0IHNzbF9vcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgaWYgKHByb3BzLnNzbCAhPT0gdW5kZWZpbmVkICYmICFwcm9wcy5zc2wpIHtcbiAgICAgIHNzbF9vcHRpb25zID0ge1xuICAgICAgICBTU0w6IEpTT04uc3RyaW5naWZ5KHByb3BzLnNzbCksXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGxvZ2dlciA9IHByb3BzLmxvZ2dlciA/PyBmYWxzZVxuICAgIGNvbnN0IGZuID0gbmV3IGxhbWJkYS5Ob2RlanNGdW5jdGlvbihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLmZ1bmN0aW9uUHJvcHMsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICB9LFxuICAgICAgZW50cnk6IGVudHJ5LFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQgPz8gcHJvcHMuZnVuY3Rpb25Qcm9wcz8udGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgIGV4dGVybmFsTW9kdWxlczogW1wicGctbmF0aXZlXCJdLFxuICAgICAgICAvLyBJbmNsdWRlIHRoZSBtaWdyYXRpb25zIGRpcmVjdG9yeSBpbiB0aGUgYnVuZGxlXG4gICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKF86IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBgY3VybCAtLXNpbGVudCAtZkwgaHR0cHM6Ly90cnVzdHN0b3JlLnBraS5yZHMuYW1hem9uYXdzLmNvbS9nbG9iYWwvZ2xvYmFsLWJ1bmRsZS5wZW0gLW8gJHtwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAgICAgICAgIFwiZ2xvYmFsLWJ1bmRsZS5wZW1cIlxuICAgICAgICAgICAgICApfWAsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhZnRlckJ1bmRsaW5nKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmVmb3JlSW5zdGFsbCgpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIExPR0dFUjogbG9nZ2VyLnRvU3RyaW5nKCksXG4gICAgICAgIE5PREVfT1BUSU9OUzogXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLFxuICAgICAgICAuLi5zc2xfb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGlmIChcbiAgICAgICFwcm9wcy5mdW5jdGlvblByb3BzPy5zZWN1cml0eUdyb3VwcyB8fFxuICAgICAgcHJvcHMuZnVuY3Rpb25Qcm9wcz8uc2VjdXJpdHlHcm91cHMubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBwcm9wcy5jbHVzdGVyLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKFxuICAgICAgICBmbixcbiAgICAgICAgXCJBbGxvdyB0aGUgcmRzIHNxbCBoYW5kbGVyIHRvIGNvbm5lY3QgdG8gZGJcIlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBmblxuICB9XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTldL2csIFwiXCIpXG59XG4iXX0=
package/lib/role.js CHANGED
@@ -59,5 +59,5 @@ class Role extends constructs_1.Construct {
59
59
  }
60
60
  exports.Role = Role;
61
61
  _a = JSII_RTTI_SYMBOL_1;
62
- Role[_a] = { fqn: "cdk-rds-sql.Role", version: "4.1.0" };
62
+ Role[_a] = { fqn: "cdk-rds-sql.Role", version: "5.0.0" };
63
63
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQTJDO0FBRzNDLHVFQUFnRTtBQUNoRSwyQ0FBc0M7QUFHdEMsaUVBQW1FO0FBa0RuRSxNQUFhLElBQUssU0FBUSxzQkFBUztJQVdqQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELElBQ0UsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDdEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBRXhDLE1BQU0seUNBQXlDLENBQUE7UUFDakQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLElBQUksR0FBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRCLENBQUMsZUFBZTtZQUN2RSxDQUFDLENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE0QixDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQ3ZFLENBQUMsQ0FBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTZCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFBO1FBRTNFLE1BQU0sSUFBSSxHQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBNEIsQ0FBQyxlQUFlO1lBQ3ZFLENBQUMsQ0FBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRCLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDbkUsQ0FBQyxDQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUE7UUFFdkUsTUFBTSxVQUFVLEdBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE0QixDQUFDLGlCQUFpQjtZQUMvRSxDQUFDLENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE0QixDQUFDLGlCQUFpQjtZQUNoRSxDQUFDLENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE2QixDQUFDLGtCQUFrQixDQUFBO1FBRXBFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSwyQkFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDdkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxXQUFXLEVBQUUsc0NBQXNDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbkUsb0JBQW9CLEVBQUU7Z0JBQ3BCLGNBQWMsRUFBRSxFQUFFO2dCQUNsQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNuQyxtQkFBbUIsRUFBRSxVQUFVO29CQUMvQixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsSUFBSSxFQUFFLElBQUk7b0JBQ1YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2lCQUMxRSxDQUFDO2dCQUNGLGlCQUFpQixFQUFFLFVBQVU7Z0JBQzdCLGlCQUFpQixFQUFFLCtCQUErQjthQUNuRDtZQUNELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3hELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNsQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQzdCLGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUMvRDtJQUNILENBQUM7O0FBaEVILG9CQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMga21zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCJcbmltcG9ydCB7IElEYXRhYmFzZUNsdXN0ZXIsIElEYXRhYmFzZUluc3RhbmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIlxuaW1wb3J0IHsgSVNlY3JldCwgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBJRGF0YWJhc2UgfSBmcm9tIFwiLi9kYXRhYmFzZVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgYXMgQ3VzdG9tUmVzb3VyY2VSb2xlIH0gZnJvbSBcIi4vcm9sZS5jdXN0b20tcmVzb3VyY2VcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBTUUwuXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIHRoaXMgdXNlciBpcyBleHBlY3RlZCB0byB1c2UuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhYmFzZSBleGlzdHMsIGNvbm5lY3QgcHJpdmlsZWdlcyBhcmUgZ3JhbnRlZC5cbiAgICpcbiAgICogU3BlY2lmeSBub25lIG9mIGBkYXRhYmFzZWAgb3IgYGRhdGFiYXNlTmFtZWAgb3Igb25seSBvbmUgb2YgdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gY29ubmVjdGlvbiB0byBhbnkgZGF0YWJhc2UgaXMgZ3JhbnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBJRGF0YWJhc2VcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGF0YWJhc2UgbmFtZSB0aGlzIHVzZXIgaXMgZXhwZWN0ZWQgdG8gdXNlLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YWJhc2UgZXhpc3RzLCBjb25uZWN0IHByaXZpbGVnZXMgYXJlIGdyYW50ZWQuXG4gICAqXG4gICAqIFNwZWNpZnkgbm9uZSBvZiBgZGF0YWJhc2VgIG9yIGBkYXRhYmFzZU5hbWVgIG9yIG9ubHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGNvbm5lY3Rpb24gdG8gYW55IGRhdGFiYXNlIGlzIGdyYW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBIG5ldyBzZWNyZXQgaXMgY3JlYXRlZCBmb3IgdGhpcyB1c2VyLlxuICAgKlxuICAgKiBPcHRpb25hbGx5IGVuY3J5cHQgaXQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5XG5cbiAgLyoqXG4gICAqIEEgbmV3IHNlY3JldCBpcyBjcmVhdGVkIGZvciB0aGlzIHVzZXIuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgYWRkIHNlY3JldCBuYW1lIHRvIHRoZSBzZWNyZXQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXROYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSByb2xlIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgZ2VuZXJhdGVkIHNlY3JldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ6IElTZWNyZXRcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSB7XG4gICAgaWYgKFxuICAgICAgKHByb3BzLmRhdGFiYXNlICYmIHByb3BzLmRhdGFiYXNlTmFtZSkgfHxcbiAgICAgICghcHJvcHMuZGF0YWJhc2UgJiYgIXByb3BzLmRhdGFiYXNlTmFtZSlcbiAgICApXG4gICAgICB0aHJvdyBcIlNwZWNpZnkgZWl0aGVyIGRhdGFiYXNlIG9yIGRhdGFiYXNlTmFtZVwiXG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgaG9zdCA9IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmNsdXN0ZXJFbmRwb2ludFxuICAgICAgPyAocHJvcHMucHJvdmlkZXIuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyKS5jbHVzdGVyRW5kcG9pbnQuaG9zdG5hbWVcbiAgICAgIDogKHByb3BzLnByb3ZpZGVyLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmluc3RhbmNlRW5kcG9pbnQuaG9zdG5hbWVcblxuICAgIGNvbnN0IHBvcnQgPSAocHJvcHMucHJvdmlkZXIuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyKS5jbHVzdGVyRW5kcG9pbnRcbiAgICAgID8gKHByb3BzLnByb3ZpZGVyLmNsdXN0ZXIgYXMgSURhdGFiYXNlQ2x1c3RlcikuY2x1c3RlckVuZHBvaW50LnBvcnRcbiAgICAgIDogKHByb3BzLnByb3ZpZGVyLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmluc3RhbmNlRW5kcG9pbnQucG9ydFxuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmNsdXN0ZXJJZGVudGlmaWVyXG4gICAgICA/IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmNsdXN0ZXJJZGVudGlmaWVyXG4gICAgICA6IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUluc3RhbmNlKS5pbnN0YW5jZUlkZW50aWZpZXJcblxuICAgIHRoaXMuc2VjcmV0ID0gbmV3IFNlY3JldCh0aGlzLCBcIlNlY3JldFwiLCB7XG4gICAgICBzZWNyZXROYW1lOiBwcm9wcy5zZWNyZXROYW1lLFxuICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgR2VuZXJhdGVkIHNlY3JldCBmb3IgcG9zdGdyZXMgcm9sZSAke3Byb3BzLnJvbGVOYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBwYXNzd29yZExlbmd0aDogMzAsIC8vIE9yYWNsZSBwYXNzd29yZCBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMzAgY2hhcmFjdGVyc1xuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRiQ2x1c3RlcklkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgICAgZW5naW5lOiBcInBvc3RncmVzXCIsXG4gICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5yb2xlTmFtZSxcbiAgICAgICAgICBkYm5hbWU6IHByb3BzLmRhdGFiYXNlID8gcHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lIDogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICB9KSxcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIixcbiAgICAgICAgZXhjbHVkZUNoYXJhY3RlcnM6IFwiICUrfmAjJCYqKCl8W117fTo7PD4/IScvQFxcXCJcXFxcXCIsXG4gICAgICB9LFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBDdXN0b21SZXNvdXJjZVJvbGUodGhpcywgXCJQb3N0Z3Jlc1JvbGVcIiwge1xuICAgICAgcHJvdmlkZXI6IHByb3BzLnByb3ZpZGVyLFxuICAgICAgcm9sZU5hbWU6IHByb3BzLnJvbGVOYW1lLFxuICAgICAgcGFzc3dvcmRBcm46IHRoaXMuc2VjcmV0LnNlY3JldEFybixcbiAgICAgIGRhdGFiYXNlOiBwcm9wcy5kYXRhYmFzZSxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgIH0pXG4gICAgcm9sZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5zZWNyZXQpXG4gICAgdGhpcy5yb2xlTmFtZSA9IHByb3BzLnJvbGVOYW1lXG4gICAgdGhpcy5zZWNyZXQuZ3JhbnRSZWFkKHByb3BzLnByb3ZpZGVyLmhhbmRsZXIpXG4gICAgaWYgKHRoaXMuc2VjcmV0LmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIC8vIEl0IHNlZW1zIHdlIG5lZWQgdG8gZ3JhbnQgZXhwbGljaXQgcGVybWlzc2lvblxuICAgICAgdGhpcy5zZWNyZXQuZW5jcnlwdGlvbktleS5ncmFudERlY3J5cHQocHJvcHMucHJvdmlkZXIuaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/lib/schema.js CHANGED
@@ -27,5 +27,5 @@ class Schema extends aws_cdk_lib_1.CustomResource {
27
27
  }
28
28
  exports.Schema = Schema;
29
29
  _a = JSII_RTTI_SYMBOL_1;
30
- Schema[_a] = { fqn: "cdk-rds-sql.Schema", version: "4.1.0" };
30
+ Schema[_a] = { fqn: "cdk-rds-sql.Schema", version: "5.0.0" };
31
31
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUc1QyxpQ0FBdUM7QUE0QnZDLE1BQWEsTUFBTyxTQUFRLDRCQUFjO0lBR3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxNQUFNO2dCQUMvQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUMxQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RFLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUN2RDtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7UUFDbEMsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMzRCxJQUFJLEtBQUssQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JELENBQUM7O0FBbEJILHdCQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IElEYXRhYmFzZSB9IGZyb20gXCIuL2RhdGFiYXNlXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9yb2xlXCJcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgZGVmYXVsdCBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBJRGF0YWJhc2VcblxuICAvKipcbiAgICogU2NoZW1hIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBzY2hlbWFOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9uYWwgcm9sZSB0byBiZSBncmFudGVkIGZvciBtYW5hZ2luZyB0YWJsZXMgaW4gc2NoZW1hXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZVxufVxuXG5leHBvcnQgY2xhc3MgU2NoZW1hIGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNjaGVtYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLlNDSEVNQSxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMuc2NoZW1hTmFtZSxcbiAgICAgICAgU2VjcmV0QXJuOiBwcm9wcy5wcm92aWRlci5zZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgICBEYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlID8gcHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICBSb2xlTmFtZTogcHJvcHMucm9sZSA/IHByb3BzLnJvbGUucm9sZU5hbWUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5zY2hlbWFOYW1lID0gcHJvcHMuc2NoZW1hTmFtZVxuICAgIGlmIChwcm9wcy5kYXRhYmFzZSkgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuZGF0YWJhc2UpXG4gICAgaWYgKHByb3BzLnJvbGUpIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnJvbGUpXG4gIH1cbn1cbiJdfQ==
package/lib/sql.js CHANGED
@@ -24,5 +24,5 @@ class Sql extends aws_cdk_lib_1.CustomResource {
24
24
  }
25
25
  exports.Sql = Sql;
26
26
  _a = JSII_RTTI_SYMBOL_1;
27
- Sql[_a] = { fqn: "cdk-rds-sql.Sql", version: "4.1.0" };
27
+ Sql[_a] = { fqn: "cdk-rds-sql.Sql", version: "5.0.0" };
28
28
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUc1QyxpQ0FBdUM7QUEyQnZDLE1BQWEsR0FBSSxTQUFRLDRCQUFjO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDekMsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxxQkFBYyxDQUFDLEdBQUc7Z0JBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUMxQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksS0FBSyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsQ0FBQzs7QUFkSCxrQkFlQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IElEYXRhYmFzZSB9IGZyb20gXCIuL2RhdGFiYXNlXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBTcWxQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgZGVmYXVsdCBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBJRGF0YWJhc2VcblxuICAvKipcbiAgICogU1FMLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGVtZW50Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YXRtZW50IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHJlc291cmNlIGlzIGRlbGV0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTcWwgZXh0ZW5kcyBDdXN0b21SZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTcWxQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlc291cmNlOiBSZHNTcWxSZXNvdXJjZS5TUUwsXG4gICAgICAgIFNlY3JldEFybjogcHJvcHMucHJvdmlkZXIuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgRGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZSA/IHByb3BzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3RhdGVtZW50OiBwcm9wcy5zdGF0ZW1lbnQsXG4gICAgICAgIFJvbGxiYWNrOiBwcm9wcy5yb2xsYmFjayxcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgICBpZiAocHJvcHMuZGF0YWJhc2UpIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLmRhdGFiYXNlKVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -14,6 +14,8 @@
14
14
  "default": "npx projen default",
15
15
  "eject": "npx projen eject",
16
16
  "eslint": "npx projen eslint",
17
+ "integ:deploy:serverless": "npx projen integ:deploy:serverless",
18
+ "integ:destroy:serverless": "npx projen integ:destroy:serverless",
17
19
  "package": "npx projen package",
18
20
  "package-all": "npx projen package-all",
19
21
  "package:js": "npx projen package:js",
@@ -100,7 +102,7 @@
100
102
  "publishConfig": {
101
103
  "access": "public"
102
104
  },
103
- "version": "4.1.0",
105
+ "version": "5.0.0",
104
106
  "jest": {
105
107
  "coverageProvider": "v8",
106
108
  "testMatch": [