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.
- package/.jsii +65 -19
- package/API.md +84 -2
- package/README.md +40 -2
- package/assets/funcs/auto-start-prevent.lambda/index.js +3540 -939
- package/assets/funcs/auto-start-prevent.lambda/index.js.map +4 -4
- package/lib/funcs/auto-start-prevent-function.js +2 -2
- package/lib/funcs/auto-start-prevent.lambda.d.ts +1 -0
- package/lib/funcs/auto-start-prevent.lambda.js +132 -94
- package/lib/funcs/core/auto-start-prevent.predicates.d.ts +28 -9
- package/lib/funcs/core/auto-start-prevent.predicates.js +44 -17
- package/lib/rds-database-auto-start-prevent-stack.d.ts +1 -1
- package/lib/rds-database-auto-start-prevent-stack.js +4 -3
- package/lib/rds-database-auto-start-preventer.d.ts +19 -1
- package/lib/rds-database-auto-start-preventer.js +71 -80
- package/lib/settings/consts.d.ts +19 -0
- package/lib/settings/consts.js +23 -0
- package/package.json +9 -6
|
@@ -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.
|
|
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 ===
|
|
107
|
-
detail.SourceType ===
|
|
108
|
-
detail.EventID ===
|
|
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 ===
|
|
118
|
-
detail.SourceType ===
|
|
119
|
-
detail.EventID ===
|
|
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 ===
|
|
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
|
|
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 = (
|
|
158
|
-
|
|
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 ===
|
|
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
|
|
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.
|
|
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,
|
|
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
|
|
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
|