rds-database-auto-start-preventer 0.5.2 → 0.6.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.
@@ -4,7 +4,14 @@
4
4
  * No AWS SDK, Durable context, env, or clock dependencies.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.buildStoppedResult = exports.buildSlackStopNotification = exports.parseRdsSourceArn = exports.tagMismatchNoOp = exports.decideAfterTagMatch = exports.waitStrategyUntilStopped = exports.waitStrategyUntilStable = exports.isDbClusterAutoStart = exports.isDbInstanceAutoStart = exports.matchTag = exports.normalizeInput = exports.isAutoStartPreventInput = exports.isSlackSecret = exports.isTransitionalStatus = exports.TRANSITIONAL_STATUSES = exports.WAIT_INTERVAL_MINUTES = void 0;
7
+ exports.buildStoppedResult = exports.buildSlackStopNotification = exports.parseRdsSourceArn = exports.tagMismatchNoOp = exports.decideAfterTagMatch = exports.waitStrategyUntilStopped = exports.waitStrategyUntilStable = exports.resolveResourceKind = exports.isDbClusterAutoStart = exports.isDbInstanceAutoStart = exports.matchTag = exports.normalizeInput = exports.isAutoStartPreventInput = exports.isSlackSecret = exports.isTransitionalStatus = exports.TRANSITIONAL_STATUSES = exports.WAIT_INTERVAL_MINUTES = exports.DB_STATUS = void 0;
8
+ const consts_1 = require("../../settings/consts");
9
+ /** RDS statuses the handler branches on, plus the fallback when a describe returns no resource. */
10
+ exports.DB_STATUS = {
11
+ AVAILABLE: 'available',
12
+ STOPPED: 'stopped',
13
+ UNKNOWN: 'unknown',
14
+ };
8
15
  /** Minutes between describe calls while a status is transitional or stopping. */
9
16
  exports.WAIT_INTERVAL_MINUTES = 5;
10
17
  /**
@@ -29,8 +36,8 @@ exports.isTransitionalStatus = isTransitionalStatus;
29
36
  /**
30
37
  * Type guard for Slack credentials returned by `secretFetcher.getSecretValue`.
31
38
  *
32
- * aws-lambda-secret-fetcher ^0.7 parses SecretString with quiet-json-parser and
33
- * falls back to the raw string on invalid JSON, so callers must validate shape.
39
+ * aws-lambda-secret-fetcher ^0.10 parses a string SecretString as JSON (already parsed values are
40
+ * returned as-is) and falls back to the raw string on invalid JSON, so callers must validate shape.
34
41
  *
35
42
  * @param value - Value returned from the secret fetcher.
36
43
  * @returns Whether value is a SlackSecret with non-empty token and channel.
@@ -103,9 +110,9 @@ exports.matchTag = matchTag;
103
110
  * @param detail - RDS event detail.
104
111
  * @returns True for RDS-EVENT-0154 on a DB instance.
105
112
  */
106
- const isDbInstanceAutoStart = (detailType, detail) => detailType === 'RDS DB Instance Event' &&
107
- detail.SourceType === 'DB_INSTANCE' &&
108
- detail.EventID === 'RDS-EVENT-0154';
113
+ const isDbInstanceAutoStart = (detailType, detail) => detailType === consts_1.DB_INSTANCE_AUTO_START_EVENT.detailType &&
114
+ detail.SourceType === consts_1.DB_INSTANCE_AUTO_START_EVENT.sourceType &&
115
+ detail.EventID === consts_1.DB_INSTANCE_AUTO_START_EVENT.eventId;
109
116
  exports.isDbInstanceAutoStart = isDbInstanceAutoStart;
110
117
  /**
111
118
  * Whether the EventBridge detail identifies a supported DB cluster auto-start event.
@@ -114,10 +121,28 @@ exports.isDbInstanceAutoStart = isDbInstanceAutoStart;
114
121
  * @param detail - RDS event detail.
115
122
  * @returns True for RDS-EVENT-0153 on a cluster.
116
123
  */
117
- const isDbClusterAutoStart = (detailType, detail) => detailType === 'RDS DB Cluster Event' &&
118
- detail.SourceType === 'CLUSTER' &&
119
- detail.EventID === 'RDS-EVENT-0153';
124
+ const isDbClusterAutoStart = (detailType, detail) => detailType === consts_1.DB_CLUSTER_AUTO_START_EVENT.detailType &&
125
+ detail.SourceType === consts_1.DB_CLUSTER_AUTO_START_EVENT.sourceType &&
126
+ detail.EventID === consts_1.DB_CLUSTER_AUTO_START_EVENT.eventId;
120
127
  exports.isDbClusterAutoStart = isDbClusterAutoStart;
128
+ /**
129
+ * Resolves which RDS resource type a supported auto-start event targets.
130
+ *
131
+ * @param detailType - EventBridge detail-type.
132
+ * @param detail - RDS event detail.
133
+ * @returns `instance` for RDS-EVENT-0154 on a DB instance; `cluster` for RDS-EVENT-0153 on a cluster.
134
+ * @throws When the detail-type, SourceType, and EventID do not form a supported auto-start event.
135
+ */
136
+ const resolveResourceKind = (detailType, detail) => {
137
+ if ((0, exports.isDbInstanceAutoStart)(detailType, detail)) {
138
+ return 'instance';
139
+ }
140
+ if ((0, exports.isDbClusterAutoStart)(detailType, detail)) {
141
+ return 'cluster';
142
+ }
143
+ throw new Error(`Unsupported event: detail-type=${detailType}, SourceType=${detail.SourceType}, EventID=${detail.EventID}`);
144
+ };
145
+ exports.resolveResourceKind = resolveResourceKind;
121
146
  /**
122
147
  * Wait strategy while describing until the resource leaves transitional statuses.
123
148
  *
@@ -139,7 +164,7 @@ exports.waitStrategyUntilStable = waitStrategyUntilStable;
139
164
  * @throws When the status is neither stopped nor transitional.
140
165
  */
141
166
  const waitStrategyUntilStopped = (state) => {
142
- if (state.status === 'stopped') {
167
+ if (state.status === exports.DB_STATUS.STOPPED) {
143
168
  return { shouldContinue: false };
144
169
  }
145
170
  if ((0, exports.isTransitionalStatus)(state.status)) {
@@ -151,14 +176,16 @@ exports.waitStrategyUntilStopped = waitStrategyUntilStopped;
151
176
  /**
152
177
  * Decides the next action when tags matched and StopDB* has not been called yet.
153
178
  *
154
- * @param status - Status from the first describe after leaving transitional states.
155
- * @returns Stop when `available`; no-op when already `stopped`; otherwise error.
179
+ * @param state - Status and identifier from the first describe after leaving transitional states.
180
+ * @returns Stop when `available`; no-op when already `stopped`; otherwise an error naming the
181
+ * identifier and status, because StopDB* cannot be called from any other status.
156
182
  */
157
- const decideAfterTagMatch = (status) => {
158
- if (status === 'available') {
183
+ const decideAfterTagMatch = (state) => {
184
+ const { status, identifier } = state;
185
+ if (status === exports.DB_STATUS.AVAILABLE) {
159
186
  return { kind: 'stop' };
160
187
  }
161
- if (status === 'stopped') {
188
+ if (status === exports.DB_STATUS.STOPPED) {
162
189
  return {
163
190
  kind: 'no-op',
164
191
  result: {
@@ -170,7 +197,7 @@ const decideAfterTagMatch = (status) => {
170
197
  }
171
198
  return {
172
199
  kind: 'error',
173
- message: `DB status is not stopped after processing: ${status}`,
200
+ message: `Cannot stop DB ${identifier}: status is ${status}, expected ${exports.DB_STATUS.AVAILABLE} or ${exports.DB_STATUS.STOPPED}.`,
174
201
  };
175
202
  };
176
203
  exports.decideAfterTagMatch = decideAfterTagMatch;
@@ -252,4 +279,4 @@ const buildStoppedResult = (args) => ({
252
279
  identifier: args.identifier,
253
280
  });
254
281
  exports.buildStoppedResult = buildStoppedResult;
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnVuY3MvY29yZS9hdXRvLXN0YXJ0LXByZXZlbnQucHJlZGljYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUEyR0gsaUZBQWlGO0FBQ3BFLFFBQUEscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRXZDOzs7R0FHRztBQUNVLFFBQUEscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0MsVUFBVTtJQUNWLGlDQUFpQztJQUNqQyxZQUFZO0lBQ1osV0FBVztJQUNYLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQVcsRUFBRSxDQUM5RCw2QkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFEdkIsUUFBQSxvQkFBb0Isd0JBQ0c7QUFFcEM7Ozs7Ozs7O0dBUUc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBd0IsRUFBRTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRO1FBQ3BDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVE7UUFDakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FB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Ozs7R0FLRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUtsQyxFQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwQixNQUFNLEVBQUUsU0FBUztJQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7SUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtJQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Q0FDNUIsQ0FBQyxDQUFDO0FBWFUsUUFBQSxrQkFBa0Isc0JBVzVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIHRoZSBSRFMgYXV0by1zdGFydCBwcmV2ZW50IExhbWJkYS5cbiAqIE5vIEFXUyBTREssIER1cmFibGUgY29udGV4dCwgZW52LCBvciBjbG9jayBkZXBlbmRlbmNpZXMuXG4gKi9cblxuLyoqXG4gKiBEZXRhaWwgcGF5bG9hZCBvZiBhbiBSRFMgYXV0by1zdGFydCBldmVudCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJkc0F1dG9TdGFydERldGFpbCB7XG4gIC8qKiBFdmVudCBJRDogUkRTLUVWRU5ULTAxNTQgKERCIGluc3RhbmNlKSBvciBSRFMtRVZFTlQtMDE1MyAoREIgY2x1c3RlcikuICovXG4gIEV2ZW50SUQ6ICdSRFMtRVZFTlQtMDE1NCcgfCAnUkRTLUVWRU5ULTAxNTMnO1xuICAvKiogUmVzb3VyY2UgdHlwZSB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LiAqL1xuICBTb3VyY2VUeXBlOiAnREJfSU5TVEFOQ0UnIHwgJ0NMVVNURVInO1xuICAvKiogQVJOIG9mIHRoZSBEQiBpbnN0YW5jZSBvciBjbHVzdGVyLiAqL1xuICBTb3VyY2VBcm46IHN0cmluZztcbiAgLyoqIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBldmVudC4gKi9cbiAgU291cmNlSWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJEUyBhdXRvLXN0YXJ0IGV2ZW50IGFzIHJlY2VpdmVkIGZyb20gRXZlbnRCcmlkZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RXZlbnQge1xuICAnZGV0YWlsLXR5cGUnOiAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyB8ICdSRFMgREIgQ2x1c3RlciBFdmVudCc7XG4gICdzb3VyY2UnOiAnYXdzLnJkcyc7XG4gICdkZXRhaWwnOiBSZHNBdXRvU3RhcnREZXRhaWw7XG59XG5cbi8qKlxuICogVGFnLWJhc2VkIGZpbHRlciBwYXJhbWV0ZXJzIGZvciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU3RhcnRQYXJhbXMge1xuICAvKiogVGFnIGtleSB0byBtYXRjaCBvbiB0aGUgcmVzb3VyY2UuICovXG4gIHRhZ0tleTogc3RyaW5nO1xuICAvKiogQWxsb3dlZCB0YWcgdmFsdWVzOyB0aGUgcmVzb3VyY2UgaXMgcHJvY2Vzc2VkIG9ubHkgd2hlbiBpdHMgdGFnIHZhbHVlIGlzIGluIHRoaXMgbGlzdC4gKi9cbiAgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTbGFjayBjcmVkZW50aWFscyBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsYWNrU2VjcmV0IHtcbiAgLyoqIFNsYWNrIGJvdCBvciB1c2VyIE9BdXRoIHRva2VuLiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbCBJRCBvciBuYW1lIHRvIHBvc3Qgbm90aWZpY2F0aW9ucyB0by4gKi9cbiAgY2hhbm5lbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZWQgaGFuZGxlciBpbnB1dDogRXZlbnRCcmlkZ2UgZXZlbnQgYW5kIHRhZyBmaWx0ZXIgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU3RhcnRQcmV2ZW50SW5wdXQge1xuICBldmVudDogUmRzQXV0b1N0YXJ0RXZlbnQ7XG4gIHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gbm8gc3RvcCBhY3Rpb24gd2FzIHRha2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vT3BSZXN1bHQge1xuICBhY3Rpb246ICduby1vcCc7XG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnIHwgJ2FscmVhZHkgc3RvcHBlZCc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gdGhpcyBpbnZvY2F0aW9uIGNhbGxlZCBTdG9wREIqIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcHBlZFJlc3VsdCB7XG4gIGFjdGlvbjogJ3N0b3BwZWQnO1xuICBmaW5hbFN0YXR1czogc3RyaW5nO1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVdTLXN0eWxlIHRhZyAoS2V5L1ZhbHVlKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuICBLZXk/OiBzdHJpbmc7XG4gIFZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YXRlIHNuYXBzaG90IHdoaWxlIHdhaXRpbmcgb24gUkRTIGRlc2NyaWJlIEFQSXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdFN0YXRlIHtcbiAgLyoqIEN1cnJlbnQgREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMuICovXG4gIHN0YXR1czogc3RyaW5nO1xuICAvKiogREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBpZGVudGlmaWVyLiAqL1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIC8qKiBUYWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlOyBwcmVzZW50IG9uIHRoZSBmaXJzdCB3YWl0IGNoZWNrIG9ubHkuICovXG4gIHRhZ3M/OiBUYWdbXTtcbn1cblxuLyoqIENvbnRpbnVlIHdhaXRpbmcgd2l0aCBhIGRlbGF5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250aW51ZVdhaXQge1xuICBzaG91bGRDb250aW51ZTogdHJ1ZTtcbiAgZGVsYXk6IHsgbWludXRlczogbnVtYmVyIH07XG59XG5cbi8qKiBTdG9wIHdhaXRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BXYWl0IHtcbiAgc2hvdWxkQ29udGludWU6IGZhbHNlO1xufVxuXG4vKiogUmVzdWx0IG9mIGEgZHVyYWJsZSB3YWl0U3RyYXRlZ3kuICovXG5leHBvcnQgdHlwZSBXYWl0U3RyYXRlZ3lSZXN1bHQgPSBDb250aW51ZVdhaXQgfCBTdG9wV2FpdDtcblxuLyoqIE1pbnV0ZXMgYmV0d2VlbiBkZXNjcmliZSBjYWxscyB3aGlsZSBhIHN0YXR1cyBpcyB0cmFuc2l0aW9uYWwgb3Igc3RvcHBpbmcuICovXG5leHBvcnQgY29uc3QgV0FJVF9JTlRFUlZBTF9NSU5VVEVTID0gNTtcblxuLyoqXG4gKiBSRFMgc3RhdHVzZXMgdGhhdCBpbmRpY2F0ZSBhbiBpbi1wcm9ncmVzcyB0cmFuc2l0aW9uLlxuICogVGhlIGhhbmRsZXIgd2FpdHMge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gbWludXRlcyB3aGlsZSB0aGUgcmVzb3VyY2UgcmVtYWlucyBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzLlxuICovXG5leHBvcnQgY29uc3QgVFJBTlNJVElPTkFMX1NUQVRVU0VTID0gbmV3IFNldChbXG4gICdzdGFydGluZycsXG4gICdjb25maWd1cmluZy1lbmhhbmNlZC1tb25pdG9yaW5nJyxcbiAgJ2JhY2tpbmctdXAnLFxuICAnbW9kaWZ5aW5nJyxcbiAgJ3N0b3BwaW5nJyxcbl0pO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsIGFuZCB3YWl0aW5nIHNob3VsZCBjb250aW51ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gQ3VycmVudCBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cy5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHN0YXR1cyBpcyB0cmFuc2l0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYW5zaXRpb25hbFN0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgVFJBTlNJVElPTkFMX1NUQVRVU0VTLmhhcyhzdGF0dXMpO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgZm9yIFNsYWNrIGNyZWRlbnRpYWxzIHJldHVybmVkIGJ5IGBzZWNyZXRGZXRjaGVyLmdldFNlY3JldFZhbHVlYC5cbiAqXG4gKiBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjcgcGFyc2VzIFNlY3JldFN0cmluZyB3aXRoIHF1aWV0LWpzb24tcGFyc2VyIGFuZFxuICogZmFsbHMgYmFjayB0byB0aGUgcmF3IHN0cmluZyBvbiBpbnZhbGlkIEpTT04sIHNvIGNhbGxlcnMgbXVzdCB2YWxpZGF0ZSBzaGFwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBzZWNyZXQgZmV0Y2hlci5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdmFsdWUgaXMgYSBTbGFja1NlY3JldCB3aXRoIG5vbi1lbXB0eSB0b2tlbiBhbmQgY2hhbm5lbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2xhY2tTZWNyZXQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTbGFja1NlY3JldCA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCEoJ3Rva2VuJyBpbiB2YWx1ZSkgfHwgISgnY2hhbm5lbCcgaW4gdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgdmFsdWUudG9rZW4gPT09ICdzdHJpbmcnICYmXG4gICAgdmFsdWUudG9rZW4ubGVuZ3RoID4gMCAmJlxuICAgIHR5cGVvZiB2YWx1ZS5jaGFubmVsID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLmNoYW5uZWwubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogVHlwZSBndWFyZDogaW5wdXQgaXMgYHsgZXZlbnQsIHBhcmFtcyB9YCBhcyBwcm9kdWNlZCBieSB0aGUgRXZlbnRCcmlkZ2UgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFJhdyBMYW1iZGEgaW52b2NhdGlvbiBwYXlsb2FkLlxuICogQHJldHVybnMgV2hldGhlciBpbnB1dCBoYXMgbm9uLW51bGwgZXZlbnQgYW5kIHBhcmFtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXV0b1N0YXJ0UHJldmVudElucHV0ID0gKGlucHV0OiB1bmtub3duKTogaW5wdXQgaXMgQXV0b1N0YXJ0UHJldmVudElucHV0ID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcgfHwgaW5wdXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoISgnZXZlbnQnIGluIGlucHV0KSB8fCAhKCdwYXJhbXMnIGluIGlucHV0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaW5wdXQuZXZlbnQgIT0gbnVsbCAmJiBpbnB1dC5wYXJhbXMgIT0gbnVsbDtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBpbnZvY2F0aW9uIGlucHV0IHRvIHtAbGluayBBdXRvU3RhcnRQcmV2ZW50SW5wdXR9LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgZnJvbSBFdmVudEJyaWRnZSBJbnB1dFRyYW5zZm9ybWVyIChvciB0aGUgc2FtZSBzaGFwZSBvbiBkaXJlY3QgSW52b2tlKS5cbiAqIEByZXR1cm5zIEV2ZW50IHBsdXMgdGFnIGZpbHRlciBwYXJhbWV0ZXJzLlxuICogQHRocm93cyBXaGVuIHRoZSBwYXlsb2FkIGlzIG5vdCBgeyBldmVudCwgcGFyYW1zIH1gLlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplSW5wdXQgPSAoaW5wdXQ6IHVua25vd24pOiBBdXRvU3RhcnRQcmV2ZW50SW5wdXQgPT4ge1xuICBpZiAoaXNBdXRvU3RhcnRQcmV2ZW50SW5wdXQoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgeyBldmVudCwgcGFyYW1zIH0uJyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzb3VyY2UgaGFzIGEgdGFnIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgYSB2YWx1ZSBpbiB0aGUgYWxsb3dlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUYWcga2V5IGFuZCBhbGxvd2VkIHZhbHVlcy5cbiAqIEBwYXJhbSB0YWdzIC0gUmVzb3VyY2UgdGFnIGxpc3QgKGUuZy4gZnJvbSBEZXNjcmliZURCSW5zdGFuY2VzIC8gRGVzY3JpYmVEQkNsdXN0ZXJzKS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHRhZyBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2hUYWcgPSAocGFyYW1zOiBBdXRvU3RhcnRQYXJhbXMsIHRhZ3M/OiBUYWdbXSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRhZ3MgfHwgdGFncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSB0YWdzLmZpbmQodCA9PiB0LktleSA9PT0gcGFyYW1zLnRhZ0tleSk/LlZhbHVlO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBwYXJhbXMudGFnVmFsdWVzLmluY2x1ZGVzKHZhbHVlKTtcbn07XG5cbi8qKlxuICogV2hldGhlciB0aGUgRXZlbnRCcmlkZ2UgZGV0YWlsIGlkZW50aWZpZXMgYSBzdXBwb3J0ZWQgREIgaW5zdGFuY2UgYXV0by1zdGFydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGV0YWlsVHlwZSAtIEV2ZW50QnJpZGdlIGRldGFpbC10eXBlLlxuICogQHBhcmFtIGRldGFpbCAtIFJEUyBldmVudCBkZXRhaWwuXG4gKiBAcmV0dXJucyBUcnVlIGZvciBSRFMtRVZFTlQtMDE1NCBvbiBhIERCIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgaXNEYkluc3RhbmNlQXV0b1N0YXJ0ID0gKFxuICBkZXRhaWxUeXBlOiBSZHNBdXRvU3RhcnRFdmVudFsnZGV0YWlsLXR5cGUnXSxcbiAgZGV0YWlsOiBSZHNBdXRvU3RhcnREZXRhaWwsXG4pOiBib29sZWFuID0+XG4gIGRldGFpbFR5cGUgPT09ICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnICYmXG4gIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnREJfSU5TVEFOQ0UnICYmXG4gIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTQnO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGNsdXN0ZXIgYXV0by1zdGFydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGV0YWlsVHlwZSAtIEV2ZW50QnJpZGdlIGRldGFpbC10eXBlLlxuICogQHBhcmFtIGRldGFpbCAtIFJEUyBldmVudCBkZXRhaWwuXG4gKiBAcmV0dXJucyBUcnVlIGZvciBSRFMtRVZFTlQtMDE1MyBvbiBhIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RiQ2x1c3RlckF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSAnUkRTIERCIENsdXN0ZXIgRXZlbnQnICYmXG4gIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnQ0xVU1RFUicgJiZcbiAgZGV0YWlsLkV2ZW50SUQgPT09ICdSRFMtRVZFTlQtMDE1Myc7XG5cbi8qKlxuICogV2FpdCBzdHJhdGVneSB3aGlsZSBkZXNjcmliaW5nIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgQ29udGludWUgYXQge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gd2hpbGUgdHJhbnNpdGlvbmFsOyBvdGhlcndpc2Ugc3RvcC5cbiAqL1xuZXhwb3J0IGNvbnN0IHdhaXRTdHJhdGVneVVudGlsU3RhYmxlID0gKHN0YXRlOiBXYWl0U3RhdGUpOiBXYWl0U3RyYXRlZ3lSZXN1bHQgPT4ge1xuICBpZiAoaXNUcmFuc2l0aW9uYWxTdGF0dXMoc3RhdGUuc3RhdHVzKSkge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiB0cnVlLCBkZWxheTogeyBtaW51dGVzOiBXQUlUX0lOVEVSVkFMX01JTlVURVMgfSB9O1xuICB9XG4gIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xufTtcblxuLyoqXG4gKiBXYWl0IHN0cmF0ZWd5IGFmdGVyIFN0b3BEQiogdW50aWwgdGhlIHJlc291cmNlIHJlYWNoZXMgYHN0b3BwZWRgLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgU3RvcCB3aGVuIGBzdG9wcGVkYDsgY29udGludWUgYXQge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gd2hpbGUgdHJhbnNpdGlvbmFsLlxuICogQHRocm93cyBXaGVuIHRoZSBzdGF0dXMgaXMgbmVpdGhlciBzdG9wcGVkIG5vciB0cmFuc2l0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQgPSAoc3RhdGU6IFdhaXRTdGF0ZSk6IFdhaXRTdHJhdGVneVJlc3VsdCA9PiB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdzdG9wcGVkJykge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICB9XG4gIGlmIChpc1RyYW5zaXRpb25hbFN0YXR1cyhzdGF0ZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IFdBSVRfSU5URVJWQUxfTUlOVVRFUyB9IH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyB3aGlsZSB3YWl0aW5nIGZvciBzdG9wOiAke3N0YXRlLnN0YXR1c31gKTtcbn07XG5cbi8qKlxuICogRGVjaXNpb24gYWZ0ZXIgdGhlIGZpcnN0IGRlc2NyaWJlIGFuZCBhIHN1Y2Nlc3NmdWwgdGFnIG1hdGNoLlxuICovXG5leHBvcnQgdHlwZSBBZnRlclRhZ01hdGNoRGVjaXNpb24gPVxuICB8IHsga2luZDogJ3N0b3AnIH1cbiAgfCB7IGtpbmQ6ICduby1vcCc7IHJlc3VsdDogTm9PcFJlc3VsdCB9XG4gIHwgeyBraW5kOiAnZXJyb3InOyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBEZWNpZGVzIHRoZSBuZXh0IGFjdGlvbiB3aGVuIHRhZ3MgbWF0Y2hlZCBhbmQgU3RvcERCKiBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gU3RhdHVzIGZyb20gdGhlIGZpcnN0IGRlc2NyaWJlIGFmdGVyIGxlYXZpbmcgdHJhbnNpdGlvbmFsIHN0YXRlcy5cbiAqIEByZXR1cm5zIFN0b3Agd2hlbiBgYXZhaWxhYmxlYDsgbm8tb3Agd2hlbiBhbHJlYWR5IGBzdG9wcGVkYDsgb3RoZXJ3aXNlIGVycm9yLlxuICovXG5leHBvcnQgY29uc3QgZGVjaWRlQWZ0ZXJUYWdNYXRjaCA9IChzdGF0dXM6IHN0cmluZyk6IEFmdGVyVGFnTWF0Y2hEZWNpc2lvbiA9PiB7XG4gIGlmIChzdGF0dXMgPT09ICdhdmFpbGFibGUnKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ3N0b3AnIH07XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICduby1vcCcsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICdhbHJlYWR5IHN0b3BwZWQnLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnZXJyb3InLFxuICAgIG1lc3NhZ2U6IGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtzdGF0dXN9YCxcbiAgfTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHRoZSBuby1vcCByZXN1bHQgdXNlZCB3aGVuIHRhZ3MgZG8gbm90IG1hdGNoLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBDdXJyZW50IHJlc291cmNlIHN0YXR1cy5cbiAqIEByZXR1cm5zIE5vLW9wIHJlc3VsdCB3aXRoIHRhZyBtaXNtYXRjaCByZWFzb24uXG4gKi9cbmV4cG9ydCBjb25zdCB0YWdNaXNtYXRjaE5vT3AgPSAoc3RhdHVzOiBzdHJpbmcpOiBOb09wUmVzdWx0ID0+ICh7XG4gIGFjdGlvbjogJ25vLW9wJyxcbiAgcmVhc29uOiAndGFnIG5vdCBtYXRjaGVkIG9yIG5vdCBmb3VuZCcsXG4gIHN0YXR1cyxcbn0pO1xuXG4vKipcbiAqIFBhcnNlcyByZWdpb24gYW5kIGFjY291bnQgZnJvbSBhbiBSRFMgcmVzb3VyY2UgQVJOIChgYXJuOmF3czpyZHM6cmVnaW9uOmFjY291bnQ6Li4uYCkuXG4gKlxuICogQHBhcmFtIHNvdXJjZUFybiAtIFNvdXJjZUFybiBmcm9tIHRoZSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgUmVnaW9uIGFuZCBhY2NvdW50IGlkIHNlZ21lbnRzLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VSZHNTb3VyY2VBcm4gPSAoc291cmNlQXJuOiBzdHJpbmcpOiB7IHJlZ2lvbjogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IHBhcnRzID0gc291cmNlQXJuLnNwbGl0KCc6Jyk7XG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiBwYXJ0c1szXSA/PyAnJyxcbiAgICBhY2NvdW50OiBwYXJ0c1s0XSA/PyAnJyxcbiAgfTtcbn07XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgU2xhY2sgc3RvcC1zdWNjZXNzIG5vdGlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGFja1N0b3BOb3RpZmljYXRpb25BcmdzIHtcbiAgY2hhbm5lbDogc3RyaW5nO1xuICBzb3VyY2VUeXBlOiBSZHNBdXRvU3RhcnREZXRhaWxbJ1NvdXJjZVR5cGUnXTtcbiAgc291cmNlSWRlbnRpZmllcjogc3RyaW5nO1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgU2xhY2sgYGNoYXQucG9zdE1lc3NhZ2VgIHBheWxvYWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHN0b3AuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBDaGFubmVsIGFuZCByZXNvdXJjZSBpZGVudGl0eSBmaWVsZHMuXG4gKiBAcmV0dXJucyBBcmd1bWVudHMgc3VpdGFibGUgZm9yIGBXZWJDbGllbnQuY2hhdC5wb3N0TWVzc2FnZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbiA9IChhcmdzOiBTbGFja1N0b3BOb3RpZmljYXRpb25BcmdzKSA9PiAoe1xuICBjaGFubmVsOiBhcmdzLmNoYW5uZWwsXG4gIGF0dGFjaG1lbnRzOiBbXG4gICAge1xuICAgICAgY29sb3I6ICcjMzZhNjRmJyxcbiAgICAgIHByZXRleHQ6IGDwn5i0IFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBhdXRvbWF0aWNhbGx5IHJ1bm5pbmcgUkRTICR7YXJncy5zb3VyY2VUeXBlfSAke2FyZ3Muc291cmNlSWRlbnRpZmllcn0uYCxcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdBY2NvdW50JyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5hY2NvdW50LFxuICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdSZWdpb24nLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnJlZ2lvbixcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnVHlwZScsXG4gICAgICAgICAgdmFsdWU6IGFyZ3Muc291cmNlVHlwZSxcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnSWRlbnRpZmllcicsXG4gICAgICAgICAgdmFsdWU6IGFyZ3Muc291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbn0pO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc3VjY2VzcyByZXN1bHQgYWZ0ZXIgU3RvcERCKiByZWFjaGVkIGBzdG9wcGVkYC5cbiAqXG4gKiBAcGFyYW0gYXJncyAtIEZpbmFsIHN0YXR1cyBhbmQgaWRlbnRpdHkgZmllbGRzLlxuICogQHJldHVybnMgU3RvcHBlZFJlc3VsdCBmb3IgdGhlIGhhbmRsZXIgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRTdG9wcGVkUmVzdWx0ID0gKGFyZ3M6IHtcbiAgZmluYWxTdGF0dXM6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xufSk6IFN0b3BwZWRSZXN1bHQgPT4gKHtcbiAgYWN0aW9uOiAnc3RvcHBlZCcsXG4gIGZpbmFsU3RhdHVzOiBhcmdzLmZpbmFsU3RhdHVzLFxuICBhY2NvdW50OiBhcmdzLmFjY291bnQsXG4gIHJlZ2lvbjogYXJncy5yZWdpb24sXG4gIGlkZW50aWZpZXI6IGFyZ3MuaWRlbnRpZmllcixcbn0pO1xuIl19
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnVuY3MvY29yZS9hdXRvLXN0YXJ0LXByZXZlbnQucHJlZGljYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxrREFJK0I7QUEyRy9CLG1HQUFtRztBQUN0RixRQUFBLFNBQVMsR0FBRztJQUN2QixTQUFTLEVBQUUsV0FBVztJQUN0QixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUM7QUFFWCxpRkFBaUY7QUFDcEUsUUFBQSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFdkM7OztHQUdHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMzQyxVQUFVO0lBQ1YsaUNBQWlDO0lBQ2pDLFlBQVk7SUFDWixXQUFXO0lBQ1gsVUFBVTtDQUNYLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0ksTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQWMsRUFBVyxFQUFFLENBQzlELDZCQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUR2QixRQUFBLG9CQUFvQix3QkFDRztBQUVwQzs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBYyxFQUF3QixFQUFFO0lBQ3BFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVE7UUFDcEMs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SUFBSSxDQUFDLFVBQVU7Q0FDNUIsQ0FBQyxDQUFDO0FBWFUsUUFBQSxrQkFBa0Isc0JBVzVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIHRoZSBSRFMgYXV0by1zdGFydCBwcmV2ZW50IExhbWJkYS5cbiAqIE5vIEFXUyBTREssIER1cmFibGUgY29udGV4dCwgZW52LCBvciBjbG9jayBkZXBlbmRlbmNpZXMuXG4gKi9cblxuaW1wb3J0IHtcbiAgREJfQ0xVU1RFUl9BVVRPX1NUQVJUX0VWRU5ULFxuICBEQl9JTlNUQU5DRV9BVVRPX1NUQVJUX0VWRU5ULFxuICBSRFNfRVZFTlRfU09VUkNFLFxufSBmcm9tICcuLi8uLi9zZXR0aW5ncy9jb25zdHMnO1xuXG4vKipcbiAqIERldGFpbCBwYXlsb2FkIG9mIGFuIFJEUyBhdXRvLXN0YXJ0IGV2ZW50IGZyb20gRXZlbnRCcmlkZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RGV0YWlsIHtcbiAgLyoqIEV2ZW50IElEOiBSRFMtRVZFTlQtMDE1NCAoREIgaW5zdGFuY2UpIG9yIFJEUy1FVkVOVC0wMTUzIChEQiBjbHVzdGVyKS4gKi9cbiAgRXZlbnRJRDogdHlwZW9mIERCX0lOU1RBTkNFX0FVVE9fU1RBUlRfRVZFTlQuZXZlbnRJZCB8IHR5cGVvZiBEQl9DTFVTVEVSX0FVVE9fU1RBUlRfRVZFTlQuZXZlbnRJZDtcbiAgLyoqIFJlc291cmNlIHR5cGUgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgU291cmNlVHlwZTogdHlwZW9mIERCX0lOU1RBTkNFX0FVVE9fU1RBUlRfRVZFTlQuc291cmNlVHlwZSB8IHR5cGVvZiBEQl9DTFVTVEVSX0FVVE9fU1RBUlRfRVZFTlQuc291cmNlVHlwZTtcbiAgLyoqIEFSTiBvZiB0aGUgREIgaW5zdGFuY2Ugb3IgY2x1c3Rlci4gKi9cbiAgU291cmNlQXJuOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgZXZlbnQuICovXG4gIFNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSRFMgYXV0by1zdGFydCBldmVudCBhcyByZWNlaXZlZCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJkc0F1dG9TdGFydEV2ZW50IHtcbiAgJ2RldGFpbC10eXBlJzogdHlwZW9mIERCX0lOU1RBTkNFX0FVVE9fU1RBUlRfRVZFTlQuZGV0YWlsVHlwZSB8IHR5cGVvZiBEQl9DTFVTVEVSX0FVVE9fU1RBUlRfRVZFTlQuZGV0YWlsVHlwZTtcbiAgJ3NvdXJjZSc6IHR5cGVvZiBSRFNfRVZFTlRfU09VUkNFO1xuICAnZGV0YWlsJzogUmRzQXV0b1N0YXJ0RGV0YWlsO1xufVxuXG4vKipcbiAqIFRhZy1iYXNlZCBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0UGFyYW1zIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggb24gdGhlIHJlc291cmNlLiAqL1xuICB0YWdLZXk6IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgdGFnIHZhbHVlczsgdGhlIHJlc291cmNlIGlzIHByb2Nlc3NlZCBvbmx5IHdoZW4gaXRzIHRhZyB2YWx1ZSBpcyBpbiB0aGlzIGxpc3QuICovXG4gIHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2xhY2sgY3JlZGVudGlhbHMgc3RvcmVkIGluIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGFja1NlY3JldCB7XG4gIC8qKiBTbGFjayBib3Qgb3IgdXNlciBPQXV0aCB0b2tlbi4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIENoYW5uZWwgSUQgb3IgbmFtZSB0byBwb3N0IG5vdGlmaWNhdGlvbnMgdG8uICovXG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVkIGhhbmRsZXIgaW5wdXQ6IEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0UHJldmVudElucHV0IHtcbiAgZXZlbnQ6IFJkc0F1dG9TdGFydEV2ZW50O1xuICBwYXJhbXM6IEF1dG9TdGFydFBhcmFtcztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIG5vIHN0b3AgYWN0aW9uIHdhcyB0YWtlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb09wUmVzdWx0IHtcbiAgYWN0aW9uOiAnbm8tb3AnO1xuICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyB8ICdhbHJlYWR5IHN0b3BwZWQnO1xuICBzdGF0dXM6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIHRoaXMgaW52b2NhdGlvbiBjYWxsZWQgU3RvcERCKiBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BwZWRSZXN1bHQge1xuICBhY3Rpb246ICdzdG9wcGVkJztcbiAgZmluYWxTdGF0dXM6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFXUy1zdHlsZSB0YWcgKEtleS9WYWx1ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgS2V5Pzogc3RyaW5nO1xuICBWYWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGF0ZSBzbmFwc2hvdCB3aGlsZSB3YWl0aW5nIG9uIFJEUyBkZXNjcmliZSBBUElzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRTdGF0ZSB7XG4gIC8qKiBDdXJyZW50IERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgc3RhdHVzLiAqL1xuICBzdGF0dXM6IHN0cmluZztcbiAgLyoqIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgaWRlbnRpZmllci4gKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAvKiogVGFncyBmcm9tIHRoZSBkZXNjcmliZSByZXNwb25zZTsgcHJlc2VudCBvbiB0aGUgZmlyc3Qgd2FpdCBjaGVjayBvbmx5LiAqL1xuICB0YWdzPzogVGFnW107XG59XG5cbi8qKiBDb250aW51ZSB3YWl0aW5nIHdpdGggYSBkZWxheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGludWVXYWl0IHtcbiAgc2hvdWxkQ29udGludWU6IHRydWU7XG4gIGRlbGF5OiB7IG1pbnV0ZXM6IG51bWJlciB9O1xufVxuXG4vKiogU3RvcCB3YWl0aW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9wV2FpdCB7XG4gIHNob3VsZENvbnRpbnVlOiBmYWxzZTtcbn1cblxuLyoqIFJlc3VsdCBvZiBhIGR1cmFibGUgd2FpdFN0cmF0ZWd5LiAqL1xuZXhwb3J0IHR5cGUgV2FpdFN0cmF0ZWd5UmVzdWx0ID0gQ29udGludWVXYWl0IHwgU3RvcFdhaXQ7XG5cbi8qKiBSRFMgc3RhdHVzZXMgdGhlIGhhbmRsZXIgYnJhbmNoZXMgb24sIHBsdXMgdGhlIGZhbGxiYWNrIHdoZW4gYSBkZXNjcmliZSByZXR1cm5zIG5vIHJlc291cmNlLiAqL1xuZXhwb3J0IGNvbnN0IERCX1NUQVRVUyA9IHtcbiAgQVZBSUxBQkxFOiAnYXZhaWxhYmxlJyxcbiAgU1RPUFBFRDogJ3N0b3BwZWQnLFxuICBVTktOT1dOOiAndW5rbm93bicsXG59IGFzIGNvbnN0O1xuXG4vKiogTWludXRlcyBiZXR3ZWVuIGRlc2NyaWJlIGNhbGxzIHdoaWxlIGEgc3RhdHVzIGlzIHRyYW5zaXRpb25hbCBvciBzdG9wcGluZy4gKi9cbmV4cG9ydCBjb25zdCBXQUlUX0lOVEVSVkFMX01JTlVURVMgPSA1O1xuXG4vKipcbiAqIFJEUyBzdGF0dXNlcyB0aGF0IGluZGljYXRlIGFuIGluLXByb2dyZXNzIHRyYW5zaXRpb24uXG4gKiBUaGUgaGFuZGxlciB3YWl0cyB7QGxpbmsgV0FJVF9JTlRFUlZBTF9NSU5VVEVTfSBtaW51dGVzIHdoaWxlIHRoZSByZXNvdXJjZSByZW1haW5zIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFOU0lUSU9OQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcbiAgJ3N0YXJ0aW5nJyxcbiAgJ2NvbmZpZ3VyaW5nLWVuaGFuY2VkLW1vbml0b3JpbmcnLFxuICAnYmFja2luZy11cCcsXG4gICdtb2RpZnlpbmcnLFxuICAnc3RvcHBpbmcnLFxuXSk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHN0YXR1cyBpcyB0cmFuc2l0aW9uYWwgYW5kIHdhaXRpbmcgc2hvdWxkIGNvbnRpbnVlLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBDdXJyZW50IERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgc3RhdHVzLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgc3RhdHVzIGlzIHRyYW5zaXRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVHJhbnNpdGlvbmFsU3RhdHVzID0gKHN0YXR1czogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBUUkFOU0lUSU9OQUxfU1RBVFVTRVMuaGFzKHN0YXR1cyk7XG5cbi8qKlxuICogVHlwZSBndWFyZCBmb3IgU2xhY2sgY3JlZGVudGlhbHMgcmV0dXJuZWQgYnkgYHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWVgLlxuICpcbiAqIGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgXjAuMTAgcGFyc2VzIGEgc3RyaW5nIFNlY3JldFN0cmluZyBhcyBKU09OIChhbHJlYWR5IHBhcnNlZCB2YWx1ZXMgYXJlXG4gKiByZXR1cm5lZCBhcy1pcykgYW5kIGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBzdHJpbmcgb24gaW52YWxpZCBKU09OLCBzbyBjYWxsZXJzIG11c3QgdmFsaWRhdGUgc2hhcGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgc2VjcmV0IGZldGNoZXIuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHZhbHVlIGlzIGEgU2xhY2tTZWNyZXQgd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NsYWNrU2VjcmV0ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2xhY2tTZWNyZXQgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKCd0b2tlbicgaW4gdmFsdWUpIHx8ICEoJ2NoYW5uZWwnIGluIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHZhbHVlLnRva2VuID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRva2VuLmxlbmd0aCA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUuY2hhbm5lbCA9PT0gJ3N0cmluZycgJiZcbiAgICB2YWx1ZS5jaGFubmVsLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGB7IGV2ZW50LCBwYXJhbXMgfWAgYXMgcHJvZHVjZWQgYnkgdGhlIEV2ZW50QnJpZGdlIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBSYXcgTGFtYmRhIGludm9jYXRpb24gcGF5bG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgaW5wdXQgaGFzIG5vbi1udWxsIGV2ZW50IGFuZCBwYXJhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0F1dG9TdGFydFByZXZlbnRJbnB1dCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIEF1dG9TdGFydFByZXZlbnRJbnB1dCA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8IGlucHV0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCEoJ2V2ZW50JyBpbiBpbnB1dCkgfHwgISgncGFyYW1zJyBpbiBpbnB1dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlucHV0LmV2ZW50ICE9IG51bGwgJiYgaW5wdXQucGFyYW1zICE9IG51bGw7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgaW52b2NhdGlvbiBpbnB1dCB0byB7QGxpbmsgQXV0b1N0YXJ0UHJldmVudElucHV0fS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UgSW5wdXRUcmFuc2Zvcm1lciAob3IgdGhlIHNhbWUgc2hhcGUgb24gZGlyZWN0IEludm9rZSkuXG4gKiBAcmV0dXJucyBFdmVudCBwbHVzIHRhZyBmaWx0ZXIgcGFyYW1ldGVycy5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBub3QgYHsgZXZlbnQsIHBhcmFtcyB9YC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUlucHV0ID0gKGlucHV0OiB1bmtub3duKTogQXV0b1N0YXJ0UHJldmVudElucHV0ID0+IHtcbiAgaWYgKGlzQXV0b1N0YXJ0UHJldmVudElucHV0KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHsgZXZlbnQsIHBhcmFtcyB9LicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlc291cmNlIGhhcyBhIHRhZyB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIGEgdmFsdWUgaW4gdGhlIGFsbG93ZWQgbGlzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGFnIGtleSBhbmQgYWxsb3dlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gdGFncyAtIFJlc291cmNlIHRhZyBsaXN0IChlLmcuIGZyb20gRGVzY3JpYmVEQkluc3RhbmNlcyAvIERlc2NyaWJlREJDbHVzdGVycykuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB0YWcgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoVGFnID0gKHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zLCB0YWdzPzogVGFnW10pOiBib29sZWFuID0+IHtcbiAgaWYgKCF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFncy5maW5kKHQgPT4gdC5LZXkgPT09IHBhcmFtcy50YWdLZXkpPy5WYWx1ZTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcGFyYW1zLnRhZ1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGluc3RhbmNlIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTQgb24gYSBEQiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGJJbnN0YW5jZUF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSBEQl9JTlNUQU5DRV9BVVRPX1NUQVJUX0VWRU5ULmRldGFpbFR5cGUgJiZcbiAgZGV0YWlsLlNvdXJjZVR5cGUgPT09IERCX0lOU1RBTkNFX0FVVE9fU1RBUlRfRVZFTlQuc291cmNlVHlwZSAmJlxuICBkZXRhaWwuRXZlbnRJRCA9PT0gREJfSU5TVEFOQ0VfQVVUT19TVEFSVF9FVkVOVC5ldmVudElkO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGNsdXN0ZXIgYXV0by1zdGFydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGV0YWlsVHlwZSAtIEV2ZW50QnJpZGdlIGRldGFpbC10eXBlLlxuICogQHBhcmFtIGRldGFpbCAtIFJEUyBldmVudCBkZXRhaWwuXG4gKiBAcmV0dXJucyBUcnVlIGZvciBSRFMtRVZFTlQtMDE1MyBvbiBhIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RiQ2x1c3RlckF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSBEQl9DTFVTVEVSX0FVVE9fU1RBUlRfRVZFTlQuZGV0YWlsVHlwZSAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gREJfQ0xVU1RFUl9BVVRPX1NUQVJUX0VWRU5ULnNvdXJjZVR5cGUgJiZcbiAgZGV0YWlsLkV2ZW50SUQgPT09IERCX0NMVVNURVJfQVVUT19TVEFSVF9FVkVOVC5ldmVudElkO1xuXG4vKiogUkRTIHJlc291cmNlIHR5cGUgdGFyZ2V0ZWQgYnkgYSBzdXBwb3J0ZWQgYXV0by1zdGFydCBldmVudC4gKi9cbmV4cG9ydCB0eXBlIFJlc291cmNlS2luZCA9ICdpbnN0YW5jZScgfCAnY2x1c3Rlcic7XG5cbi8qKlxuICogUmVzb2x2ZXMgd2hpY2ggUkRTIHJlc291cmNlIHR5cGUgYSBzdXBwb3J0ZWQgYXV0by1zdGFydCBldmVudCB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBkZXRhaWxUeXBlIC0gRXZlbnRCcmlkZ2UgZGV0YWlsLXR5cGUuXG4gKiBAcGFyYW0gZGV0YWlsIC0gUkRTIGV2ZW50IGRldGFpbC5cbiAqIEByZXR1cm5zIGBpbnN0YW5jZWAgZm9yIFJEUy1FVkVOVC0wMTU0IG9uIGEgREIgaW5zdGFuY2U7IGBjbHVzdGVyYCBmb3IgUkRTLUVWRU5ULTAxNTMgb24gYSBjbHVzdGVyLlxuICogQHRocm93cyBXaGVuIHRoZSBkZXRhaWwtdHlwZSwgU291cmNlVHlwZSwgYW5kIEV2ZW50SUQgZG8gbm90IGZvcm0gYSBzdXBwb3J0ZWQgYXV0by1zdGFydCBldmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXNvdXJjZUtpbmQgPSAoXG4gIGRldGFpbFR5cGU6IFJkc0F1dG9TdGFydEV2ZW50WydkZXRhaWwtdHlwZSddLFxuICBkZXRhaWw6IFJkc0F1dG9TdGFydERldGFpbCxcbik6IFJlc291cmNlS2luZCA9PiB7XG4gIGlmIChpc0RiSW5zdGFuY2VBdXRvU3RhcnQoZGV0YWlsVHlwZSwgZGV0YWlsKSkge1xuICAgIHJldHVybiAnaW5zdGFuY2UnO1xuICB9XG4gIGlmIChpc0RiQ2x1c3RlckF1dG9TdGFydChkZXRhaWxUeXBlLCBkZXRhaWwpKSB7XG4gICAgcmV0dXJuICdjbHVzdGVyJztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFVuc3VwcG9ydGVkIGV2ZW50OiBkZXRhaWwtdHlwZT0ke2RldGFpbFR5cGV9LCBTb3VyY2VUeXBlPSR7ZGV0YWlsLlNvdXJjZVR5cGV9LCBFdmVudElEPSR7ZGV0YWlsLkV2ZW50SUR9YCxcbiAgKTtcbn07XG5cbi8qKlxuICogV2FpdCBzdHJhdGVneSB3aGlsZSBkZXNjcmliaW5nIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgQ29udGludWUgYXQge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gd2hpbGUgdHJhbnNpdGlvbmFsOyBvdGhlcndpc2Ugc3RvcC5cbiAqL1xuZXhwb3J0IGNvbnN0IHdhaXRTdHJhdGVneVVudGlsU3RhYmxlID0gKHN0YXRlOiBXYWl0U3RhdGUpOiBXYWl0U3RyYXRlZ3lSZXN1bHQgPT4ge1xuICBpZiAoaXNUcmFuc2l0aW9uYWxTdGF0dXMoc3RhdGUuc3RhdHVzKSkge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiB0cnVlLCBkZWxheTogeyBtaW51dGVzOiBXQUlUX0lOVEVSVkFMX01JTlVURVMgfSB9O1xuICB9XG4gIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xufTtcblxuLyoqXG4gKiBXYWl0IHN0cmF0ZWd5IGFmdGVyIFN0b3BEQiogdW50aWwgdGhlIHJlc291cmNlIHJlYWNoZXMgYHN0b3BwZWRgLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgU3RvcCB3aGVuIGBzdG9wcGVkYDsgY29udGludWUgYXQge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gd2hpbGUgdHJhbnNpdGlvbmFsLlxuICogQHRocm93cyBXaGVuIHRoZSBzdGF0dXMgaXMgbmVpdGhlciBzdG9wcGVkIG5vciB0cmFuc2l0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQgPSAoc3RhdGU6IFdhaXRTdGF0ZSk6IFdhaXRTdHJhdGVneVJlc3VsdCA9PiB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgPT09IERCX1NUQVRVUy5TVE9QUEVEKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IGZhbHNlIH07XG4gIH1cbiAgaWYgKGlzVHJhbnNpdGlvbmFsU3RhdHVzKHN0YXRlLnN0YXR1cykpIHtcbiAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogV0FJVF9JTlRFUlZBTF9NSU5VVEVTIH0gfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIHdoaWxlIHdhaXRpbmcgZm9yIHN0b3A6ICR7c3RhdGUuc3RhdHVzfWApO1xufTtcblxuLyoqXG4gKiBEZWNpc2lvbiBhZnRlciB0aGUgZmlyc3QgZGVzY3JpYmUgYW5kIGEgc3VjY2Vzc2Z1bCB0YWcgbWF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIEFmdGVyVGFnTWF0Y2hEZWNpc2lvbiA9XG4gIHwgeyBraW5kOiAnc3RvcCcgfVxuICB8IHsga2luZDogJ25vLW9wJzsgcmVzdWx0OiBOb09wUmVzdWx0IH1cbiAgfCB7IGtpbmQ6ICdlcnJvcic7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXG4vKipcbiAqIERlY2lkZXMgdGhlIG5leHQgYWN0aW9uIHdoZW4gdGFncyBtYXRjaGVkIGFuZCBTdG9wREIqIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIFN0YXR1cyBhbmQgaWRlbnRpZmllciBmcm9tIHRoZSBmaXJzdCBkZXNjcmliZSBhZnRlciBsZWF2aW5nIHRyYW5zaXRpb25hbCBzdGF0ZXMuXG4gKiBAcmV0dXJucyBTdG9wIHdoZW4gYGF2YWlsYWJsZWA7IG5vLW9wIHdoZW4gYWxyZWFkeSBgc3RvcHBlZGA7IG90aGVyd2lzZSBhbiBlcnJvciBuYW1pbmcgdGhlXG4gKiBpZGVudGlmaWVyIGFuZCBzdGF0dXMsIGJlY2F1c2UgU3RvcERCKiBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYW55IG90aGVyIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlY2lkZUFmdGVyVGFnTWF0Y2ggPSAoc3RhdGU6IFdhaXRTdGF0ZSk6IEFmdGVyVGFnTWF0Y2hEZWNpc2lvbiA9PiB7XG4gIGNvbnN0IHsgc3RhdHVzLCBpZGVudGlmaWVyIH0gPSBzdGF0ZTtcbiAgaWYgKHN0YXR1cyA9PT0gREJfU1RBVFVTLkFWQUlMQUJMRSkge1xuICAgIHJldHVybiB7IGtpbmQ6ICdzdG9wJyB9O1xuICB9XG4gIGlmIChzdGF0dXMgPT09IERCX1NUQVRVUy5TVE9QUEVEKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICduby1vcCcsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICdhbHJlYWR5IHN0b3BwZWQnLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnZXJyb3InLFxuICAgIG1lc3NhZ2U6IGBDYW5ub3Qgc3RvcCBEQiAke2lkZW50aWZpZXJ9OiBzdGF0dXMgaXMgJHtzdGF0dXN9LCBleHBlY3RlZCAke0RCX1NUQVRVUy5BVkFJTEFCTEV9IG9yICR7REJfU1RBVFVTLlNUT1BQRUR9LmAsXG4gIH07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbm8tb3AgcmVzdWx0IHVzZWQgd2hlbiB0YWdzIGRvIG5vdCBtYXRjaC5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gQ3VycmVudCByZXNvdXJjZSBzdGF0dXMuXG4gKiBAcmV0dXJucyBOby1vcCByZXN1bHQgd2l0aCB0YWcgbWlzbWF0Y2ggcmVhc29uLlxuICovXG5leHBvcnQgY29uc3QgdGFnTWlzbWF0Y2hOb09wID0gKHN0YXR1czogc3RyaW5nKTogTm9PcFJlc3VsdCA9PiAoe1xuICBhY3Rpb246ICduby1vcCcsXG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnLFxuICBzdGF0dXMsXG59KTtcblxuLyoqXG4gKiBQYXJzZXMgcmVnaW9uIGFuZCBhY2NvdW50IGZyb20gYW4gUkRTIHJlc291cmNlIEFSTiAoYGFybjphd3M6cmRzOnJlZ2lvbjphY2NvdW50Oi4uLmApLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VBcm4gLSBTb3VyY2VBcm4gZnJvbSB0aGUgUkRTIGV2ZW50IGRldGFpbC5cbiAqIEByZXR1cm5zIFJlZ2lvbiBhbmQgYWNjb3VudCBpZCBzZWdtZW50cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUmRzU291cmNlQXJuID0gKHNvdXJjZUFybjogc3RyaW5nKTogeyByZWdpb246IHN0cmluZzsgYWNjb3VudDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBwYXJ0cyA9IHNvdXJjZUFybi5zcGxpdCgnOicpO1xuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogcGFydHNbM10gPz8gJycsXG4gICAgYWNjb3VudDogcGFydHNbNF0gPz8gJycsXG4gIH07XG59O1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIFNsYWNrIHN0b3Atc3VjY2VzcyBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncyB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgc291cmNlVHlwZTogUmRzQXV0b1N0YXJ0RGV0YWlsWydTb3VyY2VUeXBlJ107XG4gIHNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNsYWNrIGBjaGF0LnBvc3RNZXNzYWdlYCBwYXlsb2FkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gQ2hhbm5lbCBhbmQgcmVzb3VyY2UgaWRlbnRpdHkgZmllbGRzLlxuICogQHJldHVybnMgQXJndW1lbnRzIHN1aXRhYmxlIGZvciBgV2ViQ2xpZW50LmNoYXQucG9zdE1lc3NhZ2VgLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24gPSAoYXJnczogU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncykgPT4gKHtcbiAgY2hhbm5lbDogYXJncy5jaGFubmVsLFxuICBhdHRhY2htZW50czogW1xuICAgIHtcbiAgICAgIGNvbG9yOiAnIzM2YTY0ZicsXG4gICAgICBwcmV0ZXh0OiBg8J+YtCBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgYXV0b21hdGljYWxseSBydW5uaW5nIFJEUyAke2FyZ3Muc291cmNlVHlwZX0gJHthcmdzLnNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgdmFsdWU6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnUmVnaW9uJyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5yZWdpb24sXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ1R5cGUnLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZVR5cGUsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0lkZW50aWZpZXInLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59KTtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIHN1Y2Nlc3MgcmVzdWx0IGFmdGVyIFN0b3BEQiogcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBGaW5hbCBzdGF0dXMgYW5kIGlkZW50aXR5IGZpZWxkcy5cbiAqIEByZXR1cm5zIFN0b3BwZWRSZXN1bHQgZm9yIHRoZSBoYW5kbGVyIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU3RvcHBlZFJlc3VsdCA9IChhcmdzOiB7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn0pOiBTdG9wcGVkUmVzdWx0ID0+ICh7XG4gIGFjdGlvbjogJ3N0b3BwZWQnLFxuICBmaW5hbFN0YXR1czogYXJncy5maW5hbFN0YXR1cyxcbiAgYWNjb3VudDogYXJncy5hY2NvdW50LFxuICByZWdpb246IGFyZ3MucmVnaW9uLFxuICBpZGVudGlmaWVyOiBhcmdzLmlkZW50aWZpZXIsXG59KTtcbiJdfQ==
@@ -15,7 +15,7 @@ export declare class RDSDatabaseAutoStartPreventStack extends Stack {
15
15
  *
16
16
  * @param scope - Parent construct.
17
17
  * @param id - Stack id.
18
- * @param props - Stack props (target resource, enable rule, secrets).
18
+ * @param props - Stack props (target resource, enable rule, secrets, failure detection).
19
19
  */
20
20
  constructor(scope: Construct, id: string, props: RDSDatabaseAutoStartPreventStackProps);
21
21
  }
@@ -8,13 +8,13 @@ const rds_database_auto_start_preventer_1 = require("./rds-database-auto-start-p
8
8
  * CDK stack that deploys {@link RDSDatabaseAutoStartPreventer}.
9
9
  */
10
10
  class RDSDatabaseAutoStartPreventStack extends aws_cdk_lib_1.Stack {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventStack", version: "0.5.2" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventStack", version: "0.6.0" };
12
12
  /**
13
13
  * Creates the stack and the RDSDatabaseAutoStartPreventer construct.
14
14
  *
15
15
  * @param scope - Parent construct.
16
16
  * @param id - Stack id.
17
- * @param props - Stack props (target resource, enable rule, secrets).
17
+ * @param props - Stack props (target resource, enable rule, secrets, failure detection).
18
18
  */
19
19
  constructor(scope, id, props) {
20
20
  super(scope, id, props);
@@ -22,8 +22,9 @@ class RDSDatabaseAutoStartPreventStack extends aws_cdk_lib_1.Stack {
22
22
  targetResource: props.targetResource,
23
23
  enableRule: props.enableRule,
24
24
  secrets: props.secrets,
25
+ failureDetection: props.failureDetection,
25
26
  });
26
27
  }
27
28
  }
28
29
  exports.RDSDatabaseAutoStartPreventStack = RDSDatabaseAutoStartPreventStack;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBZ0Q7QUFFaEQsMkZBRzZDO0FBTzdDOztHQUVHO0FBQ0gsTUFBYSxnQ0FBaUMsU0FBUSxtQkFBSzs7SUFDekQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QztRQUNwRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLGlFQUE2QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRTtZQUN2RSxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWhCSCw0RUFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIsXG4gIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMsXG59IGZyb20gJy4vcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvIHN0YXJ0IHByZXZlbnQgQ0RLIHN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudFN0YWNrUHJvcHMgZXh0ZW5kcyBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlclByb3BzLCBTdGFja1Byb3BzIHt9XG5cbi8qKlxuICogQ0RLIHN0YWNrIHRoYXQgZGVwbG95cyB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzdGFjayBhbmQgdGhlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gU3RhY2sgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFN0YWNrIHByb3BzICh0YXJnZXQgcmVzb3VyY2UsIGVuYWJsZSBydWxlLCBzZWNyZXRzKS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIodGhpcywgJ1JEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyJywge1xuICAgICAgdGFyZ2V0UmVzb3VyY2U6IHByb3BzLnRhcmdldFJlc291cmNlLFxuICAgICAgZW5hYmxlUnVsZTogcHJvcHMuZW5hYmxlUnVsZSxcbiAgICAgIHNlY3JldHM6IHByb3BzLnNlY3JldHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBZ0Q7QUFFaEQsMkZBRzZDO0FBTzdDOztHQUVHO0FBQ0gsTUFBYSxnQ0FBaUMsU0FBUSxtQkFBSzs7SUFDekQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QztRQUNwRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLGlFQUE2QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRTtZQUN2RSxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBakJILDRFQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlcixcbiAgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyxcbn0gZnJvbSAnLi9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUkRTIGRhdGFiYXNlIGF1dG8gc3RhcnQgcHJldmVudCBDREsgc3RhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2tQcm9wcyBleHRlbmRzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMsIFN0YWNrUHJvcHMge31cblxuLyoqXG4gKiBDREsgc3RhY2sgdGhhdCBkZXBsb3lzIHtAbGluayBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlcn0uXG4gKi9cbmV4cG9ydCBjbGFzcyBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHN0YWNrIGFuZCB0aGUgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIgY29uc3RydWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBTdGFjayBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gU3RhY2sgcHJvcHMgKHRhcmdldCByZXNvdXJjZSwgZW5hYmxlIHJ1bGUsIHNlY3JldHMsIGZhaWx1cmUgZGV0ZWN0aW9uKS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIodGhpcywgJ1JEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyJywge1xuICAgICAgdGFyZ2V0UmVzb3VyY2U6IHByb3BzLnRhcmdldFJlc291cmNlLFxuICAgICAgZW5hYmxlUnVsZTogcHJvcHMuZW5hYmxlUnVsZSxcbiAgICAgIHNlY3JldHM6IHByb3BzLnNlY3JldHMsXG4gICAgICBmYWlsdXJlRGV0ZWN0aW9uOiBwcm9wcy5mYWlsdXJlRGV0ZWN0aW9uLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  import { Construct } from 'constructs';
2
+ import { LambdaFailureDetection } from 'lambda-failure-detector';
2
3
  /**
3
4
  * Tag-based criteria evaluated in the Lambda handler (not on the EventBridge rule).
4
5
  * Resources whose tag value for {@link TargetResource.tagKey} is not in
@@ -21,6 +22,15 @@ export interface Secrets {
21
22
  */
22
23
  readonly slackSecretName?: string;
23
24
  }
25
+ /**
26
+ * Opt-in CloudWatch failure detection for the auto-start prevent Lambda.
27
+ *
28
+ * When `enabled` is true, creates alarms on the Lambda `Errors` and `Throttles` metrics and on
29
+ * failed executions logged by the handler (custom metric `RDSDatabaseAutoStartPreventer` / `AutoStartPreventFailed`).
30
+ * No SNS topic is created; alarms notify `alarmTopic` only when it is set.
31
+ */
32
+ export interface AutoStartPreventFailureDetectionProps extends LambdaFailureDetection {
33
+ }
24
34
  /**
25
35
  * Props for the RDS database auto-start preventer construct.
26
36
  */
@@ -31,6 +41,12 @@ export interface RDSDatabaseAutoStartPreventerProps {
31
41
  readonly enableRule?: boolean;
32
42
  /** Secrets used for notifications (e.g. Slack). */
33
43
  readonly secrets: Secrets;
44
+ /**
45
+ * CloudWatch failure detection for the Lambda.
46
+ *
47
+ * @default no alarms
48
+ */
49
+ readonly failureDetection?: AutoStartPreventFailureDetectionProps;
34
50
  }
35
51
  /**
36
52
  * Deploys EventBridge rules and a Durable Lambda to stop matching RDS resources
@@ -40,10 +56,12 @@ export interface RDSDatabaseAutoStartPreventerProps {
40
56
  * using `TagList` from `rds:DescribeDBInstances` / `rds:DescribeDBClusters`.
41
57
  * IAM grants account/region-scoped describe on `db` / `cluster` ARNs, and stop only
42
58
  * when `aws:ResourceTag` matches {@link TargetResource} (no Resource Groups Tagging API).
59
+ * CloudWatch failure alarms are created only when
60
+ * {@link RDSDatabaseAutoStartPreventerProps.failureDetection} is enabled.
43
61
  */
44
62
  export declare class RDSDatabaseAutoStartPreventer extends Construct {
45
63
  /**
46
- * Creates the Durable Lambda, EventBridge rules, and IAM policies.
64
+ * Creates the Durable Lambda, EventBridge rules, IAM policies, and optional failure alarms.
47
65
  *
48
66
  * The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
49
67
  * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}. Tag filters are passed