cdk-rds-sql 7.0.2 → 7.2.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,60 @@ 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
+ // Use SecretArn from event properties, fallback to environment variable
117
+ const secretArn = event.ResourceProperties.SecretArn || process.env.SECRET_ARN
118
+ if (!secretArn) {
119
+ throw "SecretArn is required (not in event properties or environment)"
120
+ }
121
+
122
+ const command = new GetSecretValueCommand({
123
+ SecretId: secretArn,
124
+ })
125
+
126
+ log(`Fetching secret ${secretArn}`)
127
+ const secret: GetSecretValueCommandOutput = await backOff(
128
+ async () => {
129
+ try {
130
+ const result = await secrets_client.send(command)
131
+ return result
132
+ } catch (e) {
133
+ log("Error fetching secret %o", e)
134
+ throw e
135
+ }
136
+ },
137
+ {
138
+ numOfAttempts: 10,
139
+ startingDelay: 500,
106
140
  }
107
- },
108
- {
109
- numOfAttempts: 10,
110
- startingDelay: 500,
141
+ )
142
+ if (!secret.SecretString) {
143
+ throw `No secret string in ${secretArn}`
111
144
  }
112
- )
113
- if (!secret.SecretString) {
114
- throw `No secret string in ${event.ResourceProperties.SecretArn}`
145
+ secretValues = JSON.parse(secret.SecretString)
146
+
147
+ // Determine the database engine type
148
+ engine = secretValues.engine || "postgresql" // Default to postgresql if not specified
115
149
  }
116
- const secretValues = JSON.parse(secret.SecretString)
117
150
 
118
- // Determine the database engine type
119
- const engine = secretValues.engine || "postgresql" // Default to postgresql if not specified
120
151
  const dbEngine = EngineFactory.createEngine(engine)
121
152
 
122
153
  let sql: string | string[] | undefined
@@ -144,6 +175,12 @@ export const handler = async (
144
175
  case RdsSqlResource.SQL:
145
176
  sql = dbEngine.createSql(resourceId, toSqlEngineProps(event.ResourceProperties))
146
177
  break
178
+ case RdsSqlResource.IAM_GRANT:
179
+ sql = dbEngine.createIamGrant(
180
+ resourceId,
181
+ toIamGrantEngineProps(event.ResourceProperties)
182
+ )
183
+ break
147
184
  case RdsSqlResource.PARAMETER_PASSWORD:
148
185
  await handleParameterPassword(event.ResourceProperties)
149
186
  break
@@ -185,6 +222,16 @@ export const handler = async (
185
222
  toSqlEngineProps(event.ResourceProperties)
186
223
  )
187
224
  break
225
+ case RdsSqlResource.IAM_GRANT:
226
+ const iamUpdateEvent =
227
+ event as CloudFormationCustomResourceUpdateEvent<ResourceProperties>
228
+ sql = dbEngine.updateIamGrant(
229
+ resourceId,
230
+ oldResourceId,
231
+ toIamGrantEngineProps(event.ResourceProperties),
232
+ toIamGrantEngineProps(iamUpdateEvent.OldResourceProperties)
233
+ )
234
+ break
188
235
  case RdsSqlResource.PARAMETER_PASSWORD:
189
236
  await handleParameterPassword(event.ResourceProperties)
190
237
  sql = undefined // No SQL to execute
@@ -212,6 +259,12 @@ export const handler = async (
212
259
  case RdsSqlResource.SQL:
213
260
  sql = dbEngine.deleteSql(resourceId, toSqlEngineProps(event.ResourceProperties))
214
261
  break
262
+ case RdsSqlResource.IAM_GRANT:
263
+ sql = dbEngine.deleteIamGrant(
264
+ resourceId,
265
+ toIamGrantEngineProps(event.ResourceProperties)
266
+ )
267
+ break
215
268
  case RdsSqlResource.PARAMETER_PASSWORD:
216
269
  await deleteParameterPassword(event.ResourceProperties)
217
270
  break
@@ -222,7 +275,10 @@ export const handler = async (
222
275
 
223
276
  if (sql) {
224
277
  let database: string
225
- if (resource === RdsSqlResource.ROLE) {
278
+ if (engine === "dsql") {
279
+ // DSQL always uses 'postgres' database
280
+ database = "postgres"
281
+ } else if (resource === RdsSqlResource.ROLE) {
226
282
  database = secretValues.dbname
227
283
  } else {
228
284
  database = databaseName ?? secretValues.dbname // connect to given database if possible, else to database mentioned in secret
@@ -232,7 +288,7 @@ export const handler = async (
232
288
  host: secretValues.host,
233
289
  port: secretValues.port,
234
290
  user: secretValues.username,
235
- password: secretValues.password,
291
+ password: secretValues.password || "", // DSQL will generate token in engine
236
292
  database: database,
237
293
  }
238
294
 
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.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CustomResource } from "aws-cdk-lib";
2
2
  import { Construct } from "constructs";
3
- import { Provider } from "./provider";
3
+ import { IProvider } from "./provider";
4
4
  import { Role } from "./role";
5
5
  interface DatabaseAttributes {
6
6
  /**
@@ -16,7 +16,7 @@ export interface DatabaseProps extends DatabaseAttributes {
16
16
  /**
17
17
  * Provider.
18
18
  */
19
- readonly provider: Provider;
19
+ readonly provider: IProvider;
20
20
  }
21
21
  export interface IDatabase {
22
22
  readonly databaseName: string;
package/lib/database.js CHANGED
@@ -6,6 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
7
  const constructs_1 = require("constructs");
8
8
  const enum_1 = require("./enum");
9
+ const provider_1 = require("./provider");
9
10
  class ImportedDatabase extends constructs_1.Construct {
10
11
  constructor(scope, id, props) {
11
12
  super(scope, id);
@@ -22,12 +23,16 @@ class Database extends aws_cdk_lib_1.CustomResource {
22
23
  });
23
24
  }
24
25
  constructor(scope, id, props) {
26
+ // Check if using DSQL provider and forbid database creation
27
+ if (props.provider.engine === provider_1.DatabaseEngine.DSQL) {
28
+ throw new Error("Database creation is not supported with DSQL. DSQL always uses 'postgres' database.");
29
+ }
25
30
  super(scope, id, {
26
31
  serviceToken: props.provider.serviceToken,
27
32
  properties: {
28
33
  Resource: enum_1.RdsSqlResource.DATABASE,
29
34
  ResourceId: props.databaseName,
30
- SecretArn: props.provider.secret.secretArn,
35
+ ...(props.provider.secret ? { SecretArn: props.provider.secret.secretArn } : {}),
31
36
  Owner: props.owner?.roleName,
32
37
  },
33
38
  });
@@ -40,5 +45,5 @@ class Database extends aws_cdk_lib_1.CustomResource {
40
45
  }
41
46
  exports.Database = Database;
42
47
  _a = JSII_RTTI_SYMBOL_1;
43
- Database[_a] = { fqn: "cdk-rds-sql.Database", version: "7.0.2" };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLGlDQUF1QztBQTJCdkMsTUFBTSxnQkFBaUIsU0FBUSxzQkFBUztJQUd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFBO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQWEsUUFBUyxTQUFRLDRCQUFjO0lBQzFDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFlBQW9CO1FBQ3hFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3JDLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFJRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QyxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFjLENBQUMsUUFBUTtnQkFDakMsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFDMUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTthQUM3QjtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUE7UUFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLENBQUM7SUFDSCxDQUFDOztBQTNCSCw0QkE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vcm9sZVwiXG5cbmludGVyZmFjZSBEYXRhYmFzZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogTmFtZSBvZiBkYXRhYmFzZSB0byBjcmVhdGUuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSBvd25lci5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogUm9sZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMgZXh0ZW5kcyBEYXRhYmFzZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogUHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogUHJvdmlkZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YWJhc2Uge1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xufVxuXG5jbGFzcyBJbXBvcnRlZERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlQXR0cmlidXRlcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZSBleHRlbmRzIEN1c3RvbVJlc291cmNlIGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgLyoqXG4gICAqIFJldHVybiBhIERhdGFiYXNlIGJhc2VkIHVwb24gbmFtZSBvbmx5LiBVc2UgZm9yIGltcG9ydGluZyBleGlzdGluZyBkYXRhYmFzZXMuXG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGFiYXNlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBkYXRhYmFzZU5hbWU6IHN0cmluZyk6IElEYXRhYmFzZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZERhdGFiYXNlKHNjb3BlLCBpZCwge1xuICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLkRBVEFCQVNFLFxuICAgICAgICBSZXNvdXJjZUlkOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIFNlY3JldEFybjogcHJvcHMucHJvdmlkZXIuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgT3duZXI6IHByb3BzLm93bmVyPy5yb2xlTmFtZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICAgIGlmIChwcm9wcy5vd25lcikge1xuICAgICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMub3duZXIpXG4gICAgfVxuICB9XG59XG4iXX0=
48
+ Database[_a] = { fqn: "cdk-rds-sql.Database", version: "7.2.0" };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLGlDQUF1QztBQUN2Qyx5Q0FBc0Q7QUEwQnRELE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVM7SUFHdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFhLFFBQVMsU0FBUSw0QkFBYztJQUMxQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxZQUFvQjtRQUN4RSxPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNyQyxZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQUE7SUFDSixDQUFDO0lBSUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCw0REFBNEQ7UUFDNUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyx5QkFBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQ2IscUZBQXFGLENBQ3RGLENBQUE7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxRQUFRO2dCQUNqQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEYsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTthQUM3QjtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUE7UUFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLENBQUM7SUFDSCxDQUFDOztBQWxDSCw0QkFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuaW1wb3J0IHsgSVByb3ZpZGVyLCBEYXRhYmFzZUVuZ2luZSB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9yb2xlXCJcblxuaW50ZXJmYWNlIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGRhdGFiYXNlIHRvIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG93bmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI/OiBSb2xlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyBleHRlbmRzIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJUHJvdmlkZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YWJhc2Uge1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xufVxuXG5jbGFzcyBJbXBvcnRlZERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlQXR0cmlidXRlcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZSBleHRlbmRzIEN1c3RvbVJlc291cmNlIGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgLyoqXG4gICAqIFJldHVybiBhIERhdGFiYXNlIGJhc2VkIHVwb24gbmFtZSBvbmx5LiBVc2UgZm9yIGltcG9ydGluZyBleGlzdGluZyBkYXRhYmFzZXMuXG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGFiYXNlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBkYXRhYmFzZU5hbWU6IHN0cmluZyk6IElEYXRhYmFzZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZERhdGFiYXNlKHNjb3BlLCBpZCwge1xuICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgLy8gQ2hlY2sgaWYgdXNpbmcgRFNRTCBwcm92aWRlciBhbmQgZm9yYmlkIGRhdGFiYXNlIGNyZWF0aW9uXG4gICAgaWYgKHByb3BzLnByb3ZpZGVyLmVuZ2luZSA9PT0gRGF0YWJhc2VFbmdpbmUuRFNRTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkRhdGFiYXNlIGNyZWF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBEU1FMLiBEU1FMIGFsd2F5cyB1c2VzICdwb3N0Z3JlcycgZGF0YWJhc2UuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuREFUQUJBU0UsXG4gICAgICAgIFJlc291cmNlSWQ6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgLi4uKHByb3BzLnByb3ZpZGVyLnNlY3JldCA/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=