cdk-rds-sql 7.0.2 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lambda/handler.ts CHANGED
@@ -24,6 +24,7 @@ import {
24
24
  EngineRoleProperties,
25
25
  EngineSchemaProperties,
26
26
  EngineSqlProperties,
27
+ EngineIamGrantProperties,
27
28
  } from "./types"
28
29
  import { RdsSqlResource } from "../src/enum"
29
30
 
@@ -70,6 +71,13 @@ function toSqlEngineProps(props: ResourceProperties): EngineSqlProperties {
70
71
  return props
71
72
  }
72
73
 
74
+ function toIamGrantEngineProps(props: ResourceProperties): EngineIamGrantProperties {
75
+ if (props.Resource !== RdsSqlResource.IAM_GRANT) {
76
+ throw new Error(`Expected IAM_GRANT resource, got ${props.Resource}`)
77
+ }
78
+ return props
79
+ }
80
+
73
81
  export const handler = async (
74
82
  event:
75
83
  | CloudFormationCustomResourceCreateEvent<ResourceProperties>
@@ -86,37 +94,58 @@ export const handler = async (
86
94
  if (!Object.values(RdsSqlResource).includes(resource)) {
87
95
  throw `Resource type '${resource}' not recognised.`
88
96
  }
89
- if (!event.ResourceProperties.SecretArn) {
90
- throw "SecretArn is a required property"
91
- }
97
+ // Check if we're dealing with DSQL based on environment variables
98
+ const dsqlEndpoint = process.env.DSQL_ENDPOINT
99
+ const dsqlPort = process.env.DSQL_PORT
92
100
 
93
- const command = new GetSecretValueCommand({
94
- SecretId: event.ResourceProperties.SecretArn,
95
- })
101
+ let engine: string
102
+ let secretValues: any = {}
96
103
 
97
- log(`Fetching secret ${event.ResourceProperties.SecretArn}`)
98
- const secret: GetSecretValueCommandOutput = await backOff(
99
- async () => {
100
- try {
101
- const result = await secrets_client.send(command)
102
- return result
103
- } catch (e) {
104
- log("Error fetching secret %o", e)
105
- throw e
104
+ if (dsqlEndpoint) {
105
+ // DSQL configuration - use environment variables
106
+ log(`Using DSQL endpoint: ${dsqlEndpoint}`)
107
+ engine = "dsql"
108
+ secretValues = {
109
+ host: dsqlEndpoint,
110
+ port: parseInt(dsqlPort || "5432", 10),
111
+ username: "admin", // DSQL always uses admin user
112
+ engine: "dsql",
113
+ }
114
+ } else {
115
+ // Traditional RDS configuration - use secrets
116
+ if (!event.ResourceProperties.SecretArn) {
117
+ throw "SecretArn is a required property"
118
+ }
119
+
120
+ const command = new GetSecretValueCommand({
121
+ SecretId: event.ResourceProperties.SecretArn,
122
+ })
123
+
124
+ log(`Fetching secret ${event.ResourceProperties.SecretArn}`)
125
+ const secret: GetSecretValueCommandOutput = await backOff(
126
+ async () => {
127
+ try {
128
+ const result = await secrets_client.send(command)
129
+ return result
130
+ } catch (e) {
131
+ log("Error fetching secret %o", e)
132
+ throw e
133
+ }
134
+ },
135
+ {
136
+ numOfAttempts: 10,
137
+ startingDelay: 500,
106
138
  }
107
- },
108
- {
109
- numOfAttempts: 10,
110
- startingDelay: 500,
139
+ )
140
+ if (!secret.SecretString) {
141
+ throw `No secret string in ${event.ResourceProperties.SecretArn}`
111
142
  }
112
- )
113
- if (!secret.SecretString) {
114
- throw `No secret string in ${event.ResourceProperties.SecretArn}`
143
+ secretValues = JSON.parse(secret.SecretString)
144
+
145
+ // Determine the database engine type
146
+ engine = secretValues.engine || "postgresql" // Default to postgresql if not specified
115
147
  }
116
- const secretValues = JSON.parse(secret.SecretString)
117
148
 
118
- // Determine the database engine type
119
- const engine = secretValues.engine || "postgresql" // Default to postgresql if not specified
120
149
  const dbEngine = EngineFactory.createEngine(engine)
121
150
 
122
151
  let sql: string | string[] | undefined
@@ -144,6 +173,12 @@ export const handler = async (
144
173
  case RdsSqlResource.SQL:
145
174
  sql = dbEngine.createSql(resourceId, toSqlEngineProps(event.ResourceProperties))
146
175
  break
176
+ case RdsSqlResource.IAM_GRANT:
177
+ sql = dbEngine.createIamGrant(
178
+ resourceId,
179
+ toIamGrantEngineProps(event.ResourceProperties)
180
+ )
181
+ break
147
182
  case RdsSqlResource.PARAMETER_PASSWORD:
148
183
  await handleParameterPassword(event.ResourceProperties)
149
184
  break
@@ -185,6 +220,16 @@ export const handler = async (
185
220
  toSqlEngineProps(event.ResourceProperties)
186
221
  )
187
222
  break
223
+ case RdsSqlResource.IAM_GRANT:
224
+ const iamUpdateEvent =
225
+ event as CloudFormationCustomResourceUpdateEvent<ResourceProperties>
226
+ sql = dbEngine.updateIamGrant(
227
+ resourceId,
228
+ oldResourceId,
229
+ toIamGrantEngineProps(event.ResourceProperties),
230
+ toIamGrantEngineProps(iamUpdateEvent.OldResourceProperties)
231
+ )
232
+ break
188
233
  case RdsSqlResource.PARAMETER_PASSWORD:
189
234
  await handleParameterPassword(event.ResourceProperties)
190
235
  sql = undefined // No SQL to execute
@@ -212,6 +257,12 @@ export const handler = async (
212
257
  case RdsSqlResource.SQL:
213
258
  sql = dbEngine.deleteSql(resourceId, toSqlEngineProps(event.ResourceProperties))
214
259
  break
260
+ case RdsSqlResource.IAM_GRANT:
261
+ sql = dbEngine.deleteIamGrant(
262
+ resourceId,
263
+ toIamGrantEngineProps(event.ResourceProperties)
264
+ )
265
+ break
215
266
  case RdsSqlResource.PARAMETER_PASSWORD:
216
267
  await deleteParameterPassword(event.ResourceProperties)
217
268
  break
@@ -222,7 +273,10 @@ export const handler = async (
222
273
 
223
274
  if (sql) {
224
275
  let database: string
225
- if (resource === RdsSqlResource.ROLE) {
276
+ if (engine === "dsql") {
277
+ // DSQL always uses 'postgres' database
278
+ database = "postgres"
279
+ } else if (resource === RdsSqlResource.ROLE) {
226
280
  database = secretValues.dbname
227
281
  } else {
228
282
  database = databaseName ?? secretValues.dbname // connect to given database if possible, else to database mentioned in secret
@@ -232,7 +286,7 @@ export const handler = async (
232
286
  host: secretValues.host,
233
287
  port: secretValues.port,
234
288
  user: secretValues.username,
235
- password: secretValues.password,
289
+ password: secretValues.password || "", // DSQL will generate token in engine
236
290
  database: database,
237
291
  }
238
292
 
package/lambda/types.ts CHANGED
@@ -24,6 +24,10 @@ export interface EngineSqlProperties {
24
24
  readonly Rollback?: string
25
25
  }
26
26
 
27
+ export interface EngineIamGrantProperties {
28
+ readonly ResourceArn?: string
29
+ }
30
+
27
31
  // Common CloudFormation properties shared by all resources
28
32
  export interface CommonProperties
29
33
  extends CloudFormationCustomResourceResourcePropertiesCommon {
@@ -52,6 +56,11 @@ export interface SqlProperties extends CommonProperties, EngineSqlProperties {
52
56
  readonly Resource: RdsSqlResource.SQL
53
57
  }
54
58
 
59
+ export interface IamGrantProperties extends CommonProperties, EngineIamGrantProperties {
60
+ readonly Resource: RdsSqlResource.IAM_GRANT
61
+ readonly ResourceArn: string
62
+ }
63
+
55
64
  // Parameter password specific properties
56
65
  export interface ParameterPasswordProperties extends CommonProperties {
57
66
  readonly Resource: RdsSqlResource.PARAMETER_PASSWORD
@@ -65,6 +74,7 @@ export type ResourceProperties =
65
74
  | RoleProperties
66
75
  | SchemaProperties
67
76
  | SqlProperties
77
+ | IamGrantProperties
68
78
  | ParameterPasswordProperties
69
79
 
70
80
  // Custom resource response interface
package/lib/database.js CHANGED
@@ -4,8 +4,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Database = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const dsql = require("aws-cdk-lib/aws-dsql");
7
8
  const constructs_1 = require("constructs");
8
9
  const enum_1 = require("./enum");
10
+ /**
11
+ * Helper function to determine if a cluster is a DSQL cluster
12
+ */
13
+ function isDsqlCluster(cluster) {
14
+ return cluster instanceof dsql.CfnCluster;
15
+ }
9
16
  class ImportedDatabase extends constructs_1.Construct {
10
17
  constructor(scope, id, props) {
11
18
  super(scope, id);
@@ -22,12 +29,16 @@ class Database extends aws_cdk_lib_1.CustomResource {
22
29
  });
23
30
  }
24
31
  constructor(scope, id, props) {
32
+ // Check if using DSQL provider and forbid database creation
33
+ if (isDsqlCluster(props.provider.cluster)) {
34
+ throw new Error("Database creation is not supported with DSQL. DSQL always uses 'postgres' database.");
35
+ }
25
36
  super(scope, id, {
26
37
  serviceToken: props.provider.serviceToken,
27
38
  properties: {
28
39
  Resource: enum_1.RdsSqlResource.DATABASE,
29
40
  ResourceId: props.databaseName,
30
- SecretArn: props.provider.secret.secretArn,
41
+ ...(props.provider.secret ? { SecretArn: props.provider.secret.secretArn } : {}),
31
42
  Owner: props.owner?.roleName,
32
43
  },
33
44
  });
@@ -40,5 +51,5 @@ class Database extends aws_cdk_lib_1.CustomResource {
40
51
  }
41
52
  exports.Database = Database;
42
53
  _a = JSII_RTTI_SYMBOL_1;
43
- Database[_a] = { fqn: "cdk-rds-sql.Database", version: "7.0.2" };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLGlDQUF1QztBQTJCdkMsTUFBTSxnQkFBaUIsU0FBUSxzQkFBUztJQUd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFBO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQWEsUUFBUyxTQUFRLDRCQUFjO0lBQzFDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFlBQW9CO1FBQ3hFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3JDLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFJRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsUUFBUTtnQkFDakMsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFDMUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTthQUM3QjtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUE7UUFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLENBQUM7SUFDSCxDQUFDOztBQTNCSCw0QkE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vcm9sZVwiXG5cbmludGVyZmFjZSBEYXRhYmFzZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogTmFtZSBvZiBkYXRhYmFzZSB0byBjcmVhdGUuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSBvd25lci5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogUm9sZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMgZXh0ZW5kcyBEYXRhYmFzZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogUHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogUHJvdmlkZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YWJhc2Uge1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xufVxuXG5jbGFzcyBJbXBvcnRlZERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlQXR0cmlidXRlcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZSBleHRlbmRzIEN1c3RvbVJlc291cmNlIGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgLyoqXG4gICAqIFJldHVybiBhIERhdGFiYXNlIGJhc2VkIHVwb24gbmFtZSBvbmx5LiBVc2UgZm9yIGltcG9ydGluZyBleGlzdGluZyBkYXRhYmFzZXMuXG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGFiYXNlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBkYXRhYmFzZU5hbWU6IHN0cmluZyk6IElEYXRhYmFzZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZERhdGFiYXNlKHNjb3BlLCBpZCwge1xuICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLkRBVEFCQVNFLFxuICAgICAgICBSZXNvdXJjZUlkOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIFNlY3JldEFybjogcHJvcHMucHJvdmlkZXIuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgT3duZXI6IHByb3BzLm93bmVyPy5yb2xlTmFtZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICAgIGlmIChwcm9wcy5vd25lcikge1xuICAgICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMub3duZXIpXG4gICAgfVxuICB9XG59XG4iXX0=
54
+ Database[_a] = { fqn: "cdk-rds-sql.Database", version: "7.1.0" };
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsNkNBQTRDO0FBRTVDLDJDQUFzQztBQUN0QyxpQ0FBdUM7QUFJdkM7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsT0FBK0Q7SUFFL0QsT0FBTyxPQUFPLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQTtBQUMzQyxDQUFDO0FBeUJELE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVM7SUFHdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFhLFFBQVMsU0FBUSw0QkFBYztJQUMxQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxZQUFvQjtRQUN4RSxPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNyQyxZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQUE7SUFDSixDQUFDO0lBSUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCw0REFBNEQ7UUFDNUQsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUZBQXFGLENBQ3RGLENBQUE7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxRQUFRO2dCQUNqQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEYsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTthQUM3QjtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUE7UUFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLENBQUM7SUFDSCxDQUFDOztBQWxDSCw0QkFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgKiBhcyBkc3FsIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHNxbFwiXG5pbXBvcnQgeyBJRGF0YWJhc2VDbHVzdGVyLCBJRGF0YWJhc2VJbnN0YW5jZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9yb2xlXCJcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgY2x1c3RlciBpcyBhIERTUUwgY2x1c3RlclxuICovXG5mdW5jdGlvbiBpc0RzcWxDbHVzdGVyKFxuICBjbHVzdGVyOiBJRGF0YWJhc2VDbHVzdGVyIHwgSURhdGFiYXNlSW5zdGFuY2UgfCBkc3FsLkNmbkNsdXN0ZXJcbik6IGNsdXN0ZXIgaXMgZHNxbC5DZm5DbHVzdGVyIHtcbiAgcmV0dXJuIGNsdXN0ZXIgaW5zdGFuY2VvZiBkc3FsLkNmbkNsdXN0ZXJcbn1cblxuaW50ZXJmYWNlIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGRhdGFiYXNlIHRvIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG93bmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI/OiBSb2xlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyBleHRlbmRzIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhYmFzZSB7XG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG59XG5cbmNsYXNzIEltcG9ydGVkRGF0YWJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJRGF0YWJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VBdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlIGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2UgaW1wbGVtZW50cyBJRGF0YWJhc2Uge1xuICAvKipcbiAgICogUmV0dXJuIGEgRGF0YWJhc2UgYmFzZWQgdXBvbiBuYW1lIG9ubHkuIFVzZSBmb3IgaW1wb3J0aW5nIGV4aXN0aW5nIGRhdGFiYXNlcy5cbiAgICovXG4gIHN0YXRpYyBmcm9tRGF0YWJhc2VOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGRhdGFiYXNlTmFtZTogc3RyaW5nKTogSURhdGFiYXNlIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydGVkRGF0YWJhc2Uoc2NvcGUsIGlkLCB7XG4gICAgICBkYXRhYmFzZU5hbWU6IGRhdGFiYXNlTmFtZSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlUHJvcHMpIHtcbiAgICAvLyBDaGVjayBpZiB1c2luZyBEU1FMIHByb3ZpZGVyIGFuZCBmb3JiaWQgZGF0YWJhc2UgY3JlYXRpb25cbiAgICBpZiAoaXNEc3FsQ2x1c3Rlcihwcm9wcy5wcm92aWRlci5jbHVzdGVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkRhdGFiYXNlIGNyZWF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBEU1FMLiBEU1FMIGFsd2F5cyB1c2VzICdwb3N0Z3JlcycgZGF0YWJhc2UuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuREFUQUJBU0UsXG4gICAgICAgIFJlc291cmNlSWQ6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgLi4uKHByb3BzLnByb3ZpZGVyLnNlY3JldCA/IHsgU2VjcmV0QXJuOiBwcm9wcy5wcm92aWRlci5zZWNyZXQuc2VjcmV0QXJuIH0gOiB7fSksXG4gICAgICAgIE93bmVyOiBwcm9wcy5vd25lcj8ucm9sZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgICBpZiAocHJvcHMub3duZXIpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLm93bmVyKVxuICAgIH1cbiAgfVxufVxuIl19
package/lib/enum.d.ts CHANGED
@@ -3,5 +3,6 @@ export declare enum RdsSqlResource {
3
3
  ROLE = "role",
4
4
  SQL = "sql",
5
5
  DATABASE = "database",
6
- PARAMETER_PASSWORD = "parameter_password"
6
+ PARAMETER_PASSWORD = "parameter_password",
7
+ IAM_GRANT = "iam_grant"
7
8
  }
package/lib/enum.js CHANGED
@@ -8,5 +8,6 @@ var RdsSqlResource;
8
8
  RdsSqlResource["SQL"] = "sql";
9
9
  RdsSqlResource["DATABASE"] = "database";
10
10
  RdsSqlResource["PARAMETER_PASSWORD"] = "parameter_password";
11
+ RdsSqlResource["IAM_GRANT"] = "iam_grant";
11
12
  })(RdsSqlResource || (exports.RdsSqlResource = RdsSqlResource = {}));
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksY0FNWDtBQU5ELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQiwrQkFBYSxDQUFBO0lBQ2IsNkJBQVcsQ0FBQTtJQUNYLHVDQUFxQixDQUFBO0lBQ3JCLDJEQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFOVyxjQUFjLDhCQUFkLGNBQWMsUUFNekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBSZHNTcWxSZXNvdXJjZSB7XG4gIFNDSEVNQSA9IFwic2NoZW1hXCIsXG4gIFJPTEUgPSBcInJvbGVcIixcbiAgU1FMID0gXCJzcWxcIixcbiAgREFUQUJBU0UgPSBcImRhdGFiYXNlXCIsXG4gIFBBUkFNRVRFUl9QQVNTV09SRCA9IFwicGFyYW1ldGVyX3Bhc3N3b3JkXCIsXG59XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksY0FPWDtBQVBELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQiwrQkFBYSxDQUFBO0lBQ2IsNkJBQVcsQ0FBQTtJQUNYLHVDQUFxQixDQUFBO0lBQ3JCLDJEQUF5QyxDQUFBO0lBQ3pDLHlDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFQVyxjQUFjLDhCQUFkLGNBQWMsUUFPekIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBSZHNTcWxSZXNvdXJjZSB7XG4gIFNDSEVNQSA9IFwic2NoZW1hXCIsXG4gIFJPTEUgPSBcInJvbGVcIixcbiAgU1FMID0gXCJzcWxcIixcbiAgREFUQUJBU0UgPSBcImRhdGFiYXNlXCIsXG4gIFBBUkFNRVRFUl9QQVNTV09SRCA9IFwicGFyYW1ldGVyX3Bhc3N3b3JkXCIsXG4gIElBTV9HUkFOVCA9IFwiaWFtX2dyYW50XCIsXG59XG4iXX0=