rds-database-auto-start-preventer 0.4.4 → 0.5.1
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/.editorconfig +1 -1
- package/.jsii +32 -84
- package/API.md +43 -44
- package/README.md +70 -28
- package/assets/funcs/auto-start-prevent.lambda/index.js +1 -1
- package/assets/funcs/auto-start-prevent.lambda/index.js.map +2 -2
- package/lib/funcs/auto-start-prevent.lambda.d.ts +1 -1
- package/lib/funcs/auto-start-prevent.lambda.js +2 -2
- package/lib/funcs/core/auto-start-prevent.predicates.js +255 -0
- package/lib/index.d.ts +2 -2
- package/lib/index.js +3 -3
- package/lib/{stacks/rds-database-auto-start-prevent-stack.d.ts → rds-database-auto-start-prevent-stack.d.ts} +2 -8
- package/lib/rds-database-auto-start-prevent-stack.js +29 -0
- package/lib/{constructs/rds-database-auto-start-preventer.d.ts → rds-database-auto-start-preventer.d.ts} +2 -1
- package/lib/rds-database-auto-start-preventer.js +241 -0
- package/package.json +6 -8
- package/lib/constructs/rds-database-auto-start-preventer.js +0 -212
- package/lib/funcs/auto-start-prevent.predicates.js +0 -255
- package/lib/stacks/rds-database-auto-start-prevent-stack.js +0 -29
- /package/lib/funcs/{auto-start-prevent.predicates.d.ts → core/auto-start-prevent.predicates.d.ts} +0 -0
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Pure helpers for the RDS auto-start prevent Lambda.
|
|
4
|
-
* No AWS SDK, Durable context, env, or clock dependencies.
|
|
5
|
-
*/
|
|
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;
|
|
8
|
-
/** Minutes between describe calls while a status is transitional or stopping. */
|
|
9
|
-
exports.WAIT_INTERVAL_MINUTES = 5;
|
|
10
|
-
/**
|
|
11
|
-
* RDS statuses that indicate an in-progress transition.
|
|
12
|
-
* The handler waits {@link WAIT_INTERVAL_MINUTES} minutes while the resource remains in one of these states.
|
|
13
|
-
*/
|
|
14
|
-
exports.TRANSITIONAL_STATUSES = new Set([
|
|
15
|
-
'starting',
|
|
16
|
-
'configuring-enhanced-monitoring',
|
|
17
|
-
'backing-up',
|
|
18
|
-
'modifying',
|
|
19
|
-
'stopping',
|
|
20
|
-
]);
|
|
21
|
-
/**
|
|
22
|
-
* Returns true when the status is transitional and waiting should continue.
|
|
23
|
-
*
|
|
24
|
-
* @param status - Current DB instance or cluster status.
|
|
25
|
-
* @returns Whether the status is transitional.
|
|
26
|
-
*/
|
|
27
|
-
const isTransitionalStatus = (status) => exports.TRANSITIONAL_STATUSES.has(status);
|
|
28
|
-
exports.isTransitionalStatus = isTransitionalStatus;
|
|
29
|
-
/**
|
|
30
|
-
* Type guard for Slack credentials returned by `secretFetcher.getSecretValue`.
|
|
31
|
-
*
|
|
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.
|
|
34
|
-
*
|
|
35
|
-
* @param value - Value returned from the secret fetcher.
|
|
36
|
-
* @returns Whether value is a SlackSecret with non-empty token and channel.
|
|
37
|
-
*/
|
|
38
|
-
const isSlackSecret = (value) => {
|
|
39
|
-
if (typeof value !== 'object' || value == null) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
if (!('token' in value) || !('channel' in value)) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
return typeof value.token === 'string' &&
|
|
46
|
-
value.token.length > 0 &&
|
|
47
|
-
typeof value.channel === 'string' &&
|
|
48
|
-
value.channel.length > 0;
|
|
49
|
-
};
|
|
50
|
-
exports.isSlackSecret = isSlackSecret;
|
|
51
|
-
/**
|
|
52
|
-
* Type guard: input is `{ event, params }` as produced by the EventBridge target.
|
|
53
|
-
*
|
|
54
|
-
* @param input - Raw Lambda invocation payload.
|
|
55
|
-
* @returns Whether input has non-null event and params.
|
|
56
|
-
*/
|
|
57
|
-
const isAutoStartPreventInput = (input) => {
|
|
58
|
-
if (typeof input !== 'object' || input == null) {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
if (!('event' in input) || !('params' in input)) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
return input.event != null && input.params != null;
|
|
65
|
-
};
|
|
66
|
-
exports.isAutoStartPreventInput = isAutoStartPreventInput;
|
|
67
|
-
/**
|
|
68
|
-
* Normalizes invocation input to {@link AutoStartPreventInput}.
|
|
69
|
-
*
|
|
70
|
-
* @param input - `{ event, params }` from EventBridge InputTransformer (or the same shape on direct Invoke).
|
|
71
|
-
* @returns Event plus tag filter parameters.
|
|
72
|
-
* @throws When the payload is not `{ event, params }`.
|
|
73
|
-
*/
|
|
74
|
-
const normalizeInput = (input) => {
|
|
75
|
-
if ((0, exports.isAutoStartPreventInput)(input)) {
|
|
76
|
-
return input;
|
|
77
|
-
}
|
|
78
|
-
throw new Error('Invalid input: expected { event, params }.');
|
|
79
|
-
};
|
|
80
|
-
exports.normalizeInput = normalizeInput;
|
|
81
|
-
/**
|
|
82
|
-
* Returns true if the resource has a tag with the given key and a value in the allowed list.
|
|
83
|
-
*
|
|
84
|
-
* @param params - Tag key and allowed values.
|
|
85
|
-
* @param tags - Resource tag list (e.g. from DescribeDBInstances / DescribeDBClusters).
|
|
86
|
-
* @returns Whether the tag matches.
|
|
87
|
-
*/
|
|
88
|
-
const matchTag = (params, tags) => {
|
|
89
|
-
if (!tags || tags.length === 0) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
const value = tags.find(t => t.Key === params.tagKey)?.Value;
|
|
93
|
-
if (!value) {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
return params.tagValues.includes(value);
|
|
97
|
-
};
|
|
98
|
-
exports.matchTag = matchTag;
|
|
99
|
-
/**
|
|
100
|
-
* Whether the EventBridge detail identifies a supported DB instance auto-start event.
|
|
101
|
-
*
|
|
102
|
-
* @param detailType - EventBridge detail-type.
|
|
103
|
-
* @param detail - RDS event detail.
|
|
104
|
-
* @returns True for RDS-EVENT-0154 on a DB instance.
|
|
105
|
-
*/
|
|
106
|
-
const isDbInstanceAutoStart = (detailType, detail) => detailType === 'RDS DB Instance Event' &&
|
|
107
|
-
detail.SourceType === 'DB_INSTANCE' &&
|
|
108
|
-
detail.EventID === 'RDS-EVENT-0154';
|
|
109
|
-
exports.isDbInstanceAutoStart = isDbInstanceAutoStart;
|
|
110
|
-
/**
|
|
111
|
-
* Whether the EventBridge detail identifies a supported DB cluster auto-start event.
|
|
112
|
-
*
|
|
113
|
-
* @param detailType - EventBridge detail-type.
|
|
114
|
-
* @param detail - RDS event detail.
|
|
115
|
-
* @returns True for RDS-EVENT-0153 on a cluster.
|
|
116
|
-
*/
|
|
117
|
-
const isDbClusterAutoStart = (detailType, detail) => detailType === 'RDS DB Cluster Event' &&
|
|
118
|
-
detail.SourceType === 'CLUSTER' &&
|
|
119
|
-
detail.EventID === 'RDS-EVENT-0153';
|
|
120
|
-
exports.isDbClusterAutoStart = isDbClusterAutoStart;
|
|
121
|
-
/**
|
|
122
|
-
* Wait strategy while describing until the resource leaves transitional statuses.
|
|
123
|
-
*
|
|
124
|
-
* @param state - Latest wait state.
|
|
125
|
-
* @returns Continue at {@link WAIT_INTERVAL_MINUTES} while transitional; otherwise stop.
|
|
126
|
-
*/
|
|
127
|
-
const waitStrategyUntilStable = (state) => {
|
|
128
|
-
if ((0, exports.isTransitionalStatus)(state.status)) {
|
|
129
|
-
return { shouldContinue: true, delay: { minutes: exports.WAIT_INTERVAL_MINUTES } };
|
|
130
|
-
}
|
|
131
|
-
return { shouldContinue: false };
|
|
132
|
-
};
|
|
133
|
-
exports.waitStrategyUntilStable = waitStrategyUntilStable;
|
|
134
|
-
/**
|
|
135
|
-
* Wait strategy after StopDB* until the resource reaches `stopped`.
|
|
136
|
-
*
|
|
137
|
-
* @param state - Latest wait state.
|
|
138
|
-
* @returns Stop when `stopped`; continue at {@link WAIT_INTERVAL_MINUTES} while transitional.
|
|
139
|
-
* @throws When the status is neither stopped nor transitional.
|
|
140
|
-
*/
|
|
141
|
-
const waitStrategyUntilStopped = (state) => {
|
|
142
|
-
if (state.status === 'stopped') {
|
|
143
|
-
return { shouldContinue: false };
|
|
144
|
-
}
|
|
145
|
-
if ((0, exports.isTransitionalStatus)(state.status)) {
|
|
146
|
-
return { shouldContinue: true, delay: { minutes: exports.WAIT_INTERVAL_MINUTES } };
|
|
147
|
-
}
|
|
148
|
-
throw new Error(`Unexpected status while waiting for stop: ${state.status}`);
|
|
149
|
-
};
|
|
150
|
-
exports.waitStrategyUntilStopped = waitStrategyUntilStopped;
|
|
151
|
-
/**
|
|
152
|
-
* Decides the next action when tags matched and StopDB* has not been called yet.
|
|
153
|
-
*
|
|
154
|
-
* @param status - Status from the first describe after leaving transitional states.
|
|
155
|
-
* @returns Stop when `available`; no-op when already `stopped`; otherwise error.
|
|
156
|
-
*/
|
|
157
|
-
const decideAfterTagMatch = (status) => {
|
|
158
|
-
if (status === 'available') {
|
|
159
|
-
return { kind: 'stop' };
|
|
160
|
-
}
|
|
161
|
-
if (status === 'stopped') {
|
|
162
|
-
return {
|
|
163
|
-
kind: 'no-op',
|
|
164
|
-
result: {
|
|
165
|
-
action: 'no-op',
|
|
166
|
-
reason: 'already stopped',
|
|
167
|
-
status,
|
|
168
|
-
},
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
return {
|
|
172
|
-
kind: 'error',
|
|
173
|
-
message: `DB status is not stopped after processing: ${status}`,
|
|
174
|
-
};
|
|
175
|
-
};
|
|
176
|
-
exports.decideAfterTagMatch = decideAfterTagMatch;
|
|
177
|
-
/**
|
|
178
|
-
* Builds the no-op result used when tags do not match.
|
|
179
|
-
*
|
|
180
|
-
* @param status - Current resource status.
|
|
181
|
-
* @returns No-op result with tag mismatch reason.
|
|
182
|
-
*/
|
|
183
|
-
const tagMismatchNoOp = (status) => ({
|
|
184
|
-
action: 'no-op',
|
|
185
|
-
reason: 'tag not matched or not found',
|
|
186
|
-
status,
|
|
187
|
-
});
|
|
188
|
-
exports.tagMismatchNoOp = tagMismatchNoOp;
|
|
189
|
-
/**
|
|
190
|
-
* Parses region and account from an RDS resource ARN (`arn:aws:rds:region:account:...`).
|
|
191
|
-
*
|
|
192
|
-
* @param sourceArn - SourceArn from the RDS event detail.
|
|
193
|
-
* @returns Region and account id segments.
|
|
194
|
-
*/
|
|
195
|
-
const parseRdsSourceArn = (sourceArn) => {
|
|
196
|
-
const parts = sourceArn.split(':');
|
|
197
|
-
return {
|
|
198
|
-
region: parts[3] ?? '',
|
|
199
|
-
account: parts[4] ?? '',
|
|
200
|
-
};
|
|
201
|
-
};
|
|
202
|
-
exports.parseRdsSourceArn = parseRdsSourceArn;
|
|
203
|
-
/**
|
|
204
|
-
* Builds the Slack `chat.postMessage` payload after a successful stop.
|
|
205
|
-
*
|
|
206
|
-
* @param args - Channel and resource identity fields.
|
|
207
|
-
* @returns Arguments suitable for `WebClient.chat.postMessage`.
|
|
208
|
-
*/
|
|
209
|
-
const buildSlackStopNotification = (args) => ({
|
|
210
|
-
channel: args.channel,
|
|
211
|
-
attachments: [
|
|
212
|
-
{
|
|
213
|
-
color: '#36a64f',
|
|
214
|
-
pretext: `😴 Successfully stopped the automatically running RDS ${args.sourceType} ${args.sourceIdentifier}.`,
|
|
215
|
-
fields: [
|
|
216
|
-
{
|
|
217
|
-
title: 'Account',
|
|
218
|
-
value: args.account,
|
|
219
|
-
short: true,
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
title: 'Region',
|
|
223
|
-
value: args.region,
|
|
224
|
-
short: true,
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
title: 'Type',
|
|
228
|
-
value: args.sourceType,
|
|
229
|
-
short: true,
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
title: 'Identifier',
|
|
233
|
-
value: args.sourceIdentifier,
|
|
234
|
-
short: true,
|
|
235
|
-
},
|
|
236
|
-
],
|
|
237
|
-
},
|
|
238
|
-
],
|
|
239
|
-
});
|
|
240
|
-
exports.buildSlackStopNotification = buildSlackStopNotification;
|
|
241
|
-
/**
|
|
242
|
-
* Builds the success result after StopDB* reached `stopped`.
|
|
243
|
-
*
|
|
244
|
-
* @param args - Final status and identity fields.
|
|
245
|
-
* @returns StoppedResult for the handler return value.
|
|
246
|
-
*/
|
|
247
|
-
const buildStoppedResult = (args) => ({
|
|
248
|
-
action: 'stopped',
|
|
249
|
-
finalStatus: args.finalStatus,
|
|
250
|
-
account: args.account,
|
|
251
|
-
region: args.region,
|
|
252
|
-
identifier: args.identifier,
|
|
253
|
-
});
|
|
254
|
-
exports.buildStoppedResult = buildStoppedResult;
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBMkdILGlGQUFpRjtBQUNwRSxRQUFBLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUV2Qzs7O0dBR0c7QUFDVSxRQUFBLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNDLFVBQVU7SUFDVixpQ0FBaUM7SUFDakMsWUFBWTtJQUNaLFdBQVc7SUFDWCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFDSSxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBYyxFQUFXLEVBQUUsQ0FDOUQsNkJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRHZCLFFBQUEsb0JBQW9CLHdCQUNHO0FBRXBDOzs7Ozs7OztHQVFHO0FBQ0ksTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQXdCLEVBQUU7SUFDcEUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUNwQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1FBQ2pDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFD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QUFDSSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFLbEMsRUFBaUIsRUFBRSxDQUFDLENBQUM7SUFDcEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO0lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztJQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07SUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0NBQzVCLENBQUMsQ0FBQztBQVhVLFFBQUEsa0JBQWtCLHNCQVc1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVyZSBoZWxwZXJzIGZvciB0aGUgUkRTIGF1dG8tc3RhcnQgcHJldmVudCBMYW1iZGEuXG4gKiBObyBBV1MgU0RLLCBEdXJhYmxlIGNvbnRleHQsIGVudiwgb3IgY2xvY2sgZGVwZW5kZW5jaWVzLlxuICovXG5cbi8qKlxuICogRGV0YWlsIHBheWxvYWQgb2YgYW4gUkRTIGF1dG8tc3RhcnQgZXZlbnQgZnJvbSBFdmVudEJyaWRnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZHNBdXRvU3RhcnREZXRhaWwge1xuICAvKiogRXZlbnQgSUQ6IFJEUy1FVkVOVC0wMTU0IChEQiBpbnN0YW5jZSkgb3IgUkRTLUVWRU5ULTAxNTMgKERCIGNsdXN0ZXIpLiAqL1xuICBFdmVudElEOiAnUkRTLUVWRU5ULTAxNTQnIHwgJ1JEUy1FVkVOVC0wMTUzJztcbiAgLyoqIFJlc291cmNlIHR5cGUgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgU291cmNlVHlwZTogJ0RCX0lOU1RBTkNFJyB8ICdDTFVTVEVSJztcbiAgLyoqIEFSTiBvZiB0aGUgREIgaW5zdGFuY2Ugb3IgY2x1c3Rlci4gKi9cbiAgU291cmNlQXJuOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgZXZlbnQuICovXG4gIFNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSRFMgYXV0by1zdGFydCBldmVudCBhcyByZWNlaXZlZCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJkc0F1dG9TdGFydEV2ZW50IHtcbiAgJ2RldGFpbC10eXBlJzogJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcgfCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnO1xuICAnc291cmNlJzogJ2F3cy5yZHMnO1xuICAnZGV0YWlsJzogUmRzQXV0b1N0YXJ0RGV0YWlsO1xufVxuXG4vKipcbiAqIFRhZy1iYXNlZCBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0UGFyYW1zIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggb24gdGhlIHJlc291cmNlLiAqL1xuICB0YWdLZXk6IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgdGFnIHZhbHVlczsgdGhlIHJlc291cmNlIGlzIHByb2Nlc3NlZCBvbmx5IHdoZW4gaXRzIHRhZyB2YWx1ZSBpcyBpbiB0aGlzIGxpc3QuICovXG4gIHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2xhY2sgY3JlZGVudGlhbHMgc3RvcmVkIGluIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGFja1NlY3JldCB7XG4gIC8qKiBTbGFjayBib3Qgb3IgdXNlciBPQXV0aCB0b2tlbi4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIENoYW5uZWwgSUQgb3IgbmFtZSB0byBwb3N0IG5vdGlmaWNhdGlvbnMgdG8uICovXG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVkIGhhbmRsZXIgaW5wdXQ6IEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0UHJldmVudElucHV0IHtcbiAgZXZlbnQ6IFJkc0F1dG9TdGFydEV2ZW50O1xuICBwYXJhbXM6IEF1dG9TdGFydFBhcmFtcztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIG5vIHN0b3AgYWN0aW9uIHdhcyB0YWtlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb09wUmVzdWx0IHtcbiAgYWN0aW9uOiAnbm8tb3AnO1xuICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyB8ICdhbHJlYWR5IHN0b3BwZWQnO1xuICBzdGF0dXM6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIHRoaXMgaW52b2NhdGlvbiBjYWxsZWQgU3RvcERCKiBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BwZWRSZXN1bHQge1xuICBhY3Rpb246ICdzdG9wcGVkJztcbiAgZmluYWxTdGF0dXM6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFXUy1zdHlsZSB0YWcgKEtleS9WYWx1ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgS2V5Pzogc3RyaW5nO1xuICBWYWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGF0ZSBzbmFwc2hvdCB3aGlsZSB3YWl0aW5nIG9uIFJEUyBkZXNjcmliZSBBUElzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRTdGF0ZSB7XG4gIC8qKiBDdXJyZW50IERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgc3RhdHVzLiAqL1xuICBzdGF0dXM6IHN0cmluZztcbiAgLyoqIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgaWRlbnRpZmllci4gKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAvKiogVGFncyBmcm9tIHRoZSBkZXNjcmliZSByZXNwb25zZTsgcHJlc2VudCBvbiB0aGUgZmlyc3Qgd2FpdCBjaGVjayBvbmx5LiAqL1xuICB0YWdzPzogVGFnW107XG59XG5cbi8qKiBDb250aW51ZSB3YWl0aW5nIHdpdGggYSBkZWxheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGludWVXYWl0IHtcbiAgc2hvdWxkQ29udGludWU6IHRydWU7XG4gIGRlbGF5OiB7IG1pbnV0ZXM6IG51bWJlciB9O1xufVxuXG4vKiogU3RvcCB3YWl0aW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9wV2FpdCB7XG4gIHNob3VsZENvbnRpbnVlOiBmYWxzZTtcbn1cblxuLyoqIFJlc3VsdCBvZiBhIGR1cmFibGUgd2FpdFN0cmF0ZWd5LiAqL1xuZXhwb3J0IHR5cGUgV2FpdFN0cmF0ZWd5UmVzdWx0ID0gQ29udGludWVXYWl0IHwgU3RvcFdhaXQ7XG5cbi8qKiBNaW51dGVzIGJldHdlZW4gZGVzY3JpYmUgY2FsbHMgd2hpbGUgYSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsIG9yIHN0b3BwaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFdBSVRfSU5URVJWQUxfTUlOVVRFUyA9IDU7XG5cbi8qKlxuICogUkRTIHN0YXR1c2VzIHRoYXQgaW5kaWNhdGUgYW4gaW4tcHJvZ3Jlc3MgdHJhbnNpdGlvbi5cbiAqIFRoZSBoYW5kbGVyIHdhaXRzIHtAbGluayBXQUlUX0lOVEVSVkFMX01JTlVURVN9IG1pbnV0ZXMgd2hpbGUgdGhlIHJlc291cmNlIHJlbWFpbnMgaW4gb25lIG9mIHRoZXNlIHN0YXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQU5TSVRJT05BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1xuICAnc3RhcnRpbmcnLFxuICAnY29uZmlndXJpbmctZW5oYW5jZWQtbW9uaXRvcmluZycsXG4gICdiYWNraW5nLXVwJyxcbiAgJ21vZGlmeWluZycsXG4gICdzdG9wcGluZycsXG5dKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgc3RhdHVzIGlzIHRyYW5zaXRpb25hbCBhbmQgd2FpdGluZyBzaG91bGQgY29udGludWUuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIEN1cnJlbnQgREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgaXNUcmFuc2l0aW9uYWxTdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdHVzKTtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIGZvciBTbGFjayBjcmVkZW50aWFscyByZXR1cm5lZCBieSBgc2VjcmV0RmV0Y2hlci5nZXRTZWNyZXRWYWx1ZWAuXG4gKlxuICogYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlciBeMC43IHBhcnNlcyBTZWNyZXRTdHJpbmcgd2l0aCBxdWlldC1qc29uLXBhcnNlciBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBzdHJpbmcgb24gaW52YWxpZCBKU09OLCBzbyBjYWxsZXJzIG11c3QgdmFsaWRhdGUgc2hhcGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgc2VjcmV0IGZldGNoZXIuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHZhbHVlIGlzIGEgU2xhY2tTZWNyZXQgd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NsYWNrU2VjcmV0ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2xhY2tTZWNyZXQgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKCd0b2tlbicgaW4gdmFsdWUpIHx8ICEoJ2NoYW5uZWwnIGluIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHZhbHVlLnRva2VuID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRva2VuLmxlbmd0aCA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUuY2hhbm5lbCA9PT0gJ3N0cmluZycgJiZcbiAgICB2YWx1ZS5jaGFubmVsLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGB7IGV2ZW50LCBwYXJhbXMgfWAgYXMgcHJvZHVjZWQgYnkgdGhlIEV2ZW50QnJpZGdlIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBSYXcgTGFtYmRhIGludm9jYXRpb24gcGF5bG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgaW5wdXQgaGFzIG5vbi1udWxsIGV2ZW50IGFuZCBwYXJhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0F1dG9TdGFydFByZXZlbnRJbnB1dCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIEF1dG9TdGFydFByZXZlbnRJbnB1dCA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8IGlucHV0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCEoJ2V2ZW50JyBpbiBpbnB1dCkgfHwgISgncGFyYW1zJyBpbiBpbnB1dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlucHV0LmV2ZW50ICE9IG51bGwgJiYgaW5wdXQucGFyYW1zICE9IG51bGw7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgaW52b2NhdGlvbiBpbnB1dCB0byB7QGxpbmsgQXV0b1N0YXJ0UHJldmVudElucHV0fS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UgSW5wdXRUcmFuc2Zvcm1lciAob3IgdGhlIHNhbWUgc2hhcGUgb24gZGlyZWN0IEludm9rZSkuXG4gKiBAcmV0dXJucyBFdmVudCBwbHVzIHRhZyBmaWx0ZXIgcGFyYW1ldGVycy5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBub3QgYHsgZXZlbnQsIHBhcmFtcyB9YC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUlucHV0ID0gKGlucHV0OiB1bmtub3duKTogQXV0b1N0YXJ0UHJldmVudElucHV0ID0+IHtcbiAgaWYgKGlzQXV0b1N0YXJ0UHJldmVudElucHV0KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHsgZXZlbnQsIHBhcmFtcyB9LicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlc291cmNlIGhhcyBhIHRhZyB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIGEgdmFsdWUgaW4gdGhlIGFsbG93ZWQgbGlzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGFnIGtleSBhbmQgYWxsb3dlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gdGFncyAtIFJlc291cmNlIHRhZyBsaXN0IChlLmcuIGZyb20gRGVzY3JpYmVEQkluc3RhbmNlcyAvIERlc2NyaWJlREJDbHVzdGVycykuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB0YWcgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoVGFnID0gKHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zLCB0YWdzPzogVGFnW10pOiBib29sZWFuID0+IHtcbiAgaWYgKCF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFncy5maW5kKHQgPT4gdC5LZXkgPT09IHBhcmFtcy50YWdLZXkpPy5WYWx1ZTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcGFyYW1zLnRhZ1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGluc3RhbmNlIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTQgb24gYSBEQiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGJJbnN0YW5jZUF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0RCX0lOU1RBTkNFJyAmJlxuICBkZXRhaWwuRXZlbnRJRCA9PT0gJ1JEUy1FVkVOVC0wMTU0JztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBkZXRhaWwgaWRlbnRpZmllcyBhIHN1cHBvcnRlZCBEQiBjbHVzdGVyIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTMgb24gYSBjbHVzdGVyLlxuICovXG5leHBvcnQgY29uc3QgaXNEYkNsdXN0ZXJBdXRvU3RhcnQgPSAoXG4gIGRldGFpbFR5cGU6IFJkc0F1dG9TdGFydEV2ZW50WydkZXRhaWwtdHlwZSddLFxuICBkZXRhaWw6IFJkc0F1dG9TdGFydERldGFpbCxcbik6IGJvb2xlYW4gPT5cbiAgZGV0YWlsVHlwZSA9PT0gJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0NMVVNURVInICYmXG4gIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTMnO1xuXG4vKipcbiAqIFdhaXQgc3RyYXRlZ3kgd2hpbGUgZGVzY3JpYmluZyB1bnRpbCB0aGUgcmVzb3VyY2UgbGVhdmVzIHRyYW5zaXRpb25hbCBzdGF0dXNlcy5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgLSBMYXRlc3Qgd2FpdCBzdGF0ZS5cbiAqIEByZXR1cm5zIENvbnRpbnVlIGF0IHtAbGluayBXQUlUX0lOVEVSVkFMX01JTlVURVN9IHdoaWxlIHRyYW5zaXRpb25hbDsgb3RoZXJ3aXNlIHN0b3AuXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSA9IChzdGF0ZTogV2FpdFN0YXRlKTogV2FpdFN0cmF0ZWd5UmVzdWx0ID0+IHtcbiAgaWYgKGlzVHJhbnNpdGlvbmFsU3RhdHVzKHN0YXRlLnN0YXR1cykpIHtcbiAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogV0FJVF9JTlRFUlZBTF9NSU5VVEVTIH0gfTtcbiAgfVxuICByZXR1cm4geyBzaG91bGRDb250aW51ZTogZmFsc2UgfTtcbn07XG5cbi8qKlxuICogV2FpdCBzdHJhdGVneSBhZnRlciBTdG9wREIqIHVudGlsIHRoZSByZXNvdXJjZSByZWFjaGVzIGBzdG9wcGVkYC5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgLSBMYXRlc3Qgd2FpdCBzdGF0ZS5cbiAqIEByZXR1cm5zIFN0b3Agd2hlbiBgc3RvcHBlZGA7IGNvbnRpbnVlIGF0IHtAbGluayBXQUlUX0lOVEVSVkFMX01JTlVURVN9IHdoaWxlIHRyYW5zaXRpb25hbC5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgc3RhdHVzIGlzIG5laXRoZXIgc3RvcHBlZCBub3IgdHJhbnNpdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3Qgd2FpdFN0cmF0ZWd5VW50aWxTdG9wcGVkID0gKHN0YXRlOiBXYWl0U3RhdGUpOiBXYWl0U3RyYXRlZ3lSZXN1bHQgPT4ge1xuICBpZiAoc3RhdGUuc3RhdHVzID09PSAnc3RvcHBlZCcpIHtcbiAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogZmFsc2UgfTtcbiAgfVxuICBpZiAoaXNUcmFuc2l0aW9uYWxTdGF0dXMoc3RhdGUuc3RhdHVzKSkge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiB0cnVlLCBkZWxheTogeyBtaW51dGVzOiBXQUlUX0lOVEVSVkFMX01JTlVURVMgfSB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgd2hpbGUgd2FpdGluZyBmb3Igc3RvcDogJHtzdGF0ZS5zdGF0dXN9YCk7XG59O1xuXG4vKipcbiAqIERlY2lzaW9uIGFmdGVyIHRoZSBmaXJzdCBkZXNjcmliZSBhbmQgYSBzdWNjZXNzZnVsIHRhZyBtYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgQWZ0ZXJUYWdNYXRjaERlY2lzaW9uID1cbiAgfCB7IGtpbmQ6ICdzdG9wJyB9XG4gIHwgeyBraW5kOiAnbm8tb3AnOyByZXN1bHQ6IE5vT3BSZXN1bHQgfVxuICB8IHsga2luZDogJ2Vycm9yJzsgbWVzc2FnZTogc3RyaW5nIH07XG5cbi8qKlxuICogRGVjaWRlcyB0aGUgbmV4dCBhY3Rpb24gd2hlbiB0YWdzIG1hdGNoZWQgYW5kIFN0b3BEQiogaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFN0YXR1cyBmcm9tIHRoZSBmaXJzdCBkZXNjcmliZSBhZnRlciBsZWF2aW5nIHRyYW5zaXRpb25hbCBzdGF0ZXMuXG4gKiBAcmV0dXJucyBTdG9wIHdoZW4gYGF2YWlsYWJsZWA7IG5vLW9wIHdoZW4gYWxyZWFkeSBgc3RvcHBlZGA7IG90aGVyd2lzZSBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlY2lkZUFmdGVyVGFnTWF0Y2ggPSAoc3RhdHVzOiBzdHJpbmcpOiBBZnRlclRhZ01hdGNoRGVjaXNpb24gPT4ge1xuICBpZiAoc3RhdHVzID09PSAnYXZhaWxhYmxlJykge1xuICAgIHJldHVybiB7IGtpbmQ6ICdzdG9wJyB9O1xuICB9XG4gIGlmIChzdGF0dXMgPT09ICdzdG9wcGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAnbm8tb3AnLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGFjdGlvbjogJ25vLW9wJyxcbiAgICAgICAgcmVhc29uOiAnYWxyZWFkeSBzdG9wcGVkJyxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAga2luZDogJ2Vycm9yJyxcbiAgICBtZXNzYWdlOiBgREIgc3RhdHVzIGlzIG5vdCBzdG9wcGVkIGFmdGVyIHByb2Nlc3Npbmc6ICR7c3RhdHVzfWAsXG4gIH07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbm8tb3AgcmVzdWx0IHVzZWQgd2hlbiB0YWdzIGRvIG5vdCBtYXRjaC5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gQ3VycmVudCByZXNvdXJjZSBzdGF0dXMuXG4gKiBAcmV0dXJucyBOby1vcCByZXN1bHQgd2l0aCB0YWcgbWlzbWF0Y2ggcmVhc29uLlxuICovXG5leHBvcnQgY29uc3QgdGFnTWlzbWF0Y2hOb09wID0gKHN0YXR1czogc3RyaW5nKTogTm9PcFJlc3VsdCA9PiAoe1xuICBhY3Rpb246ICduby1vcCcsXG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnLFxuICBzdGF0dXMsXG59KTtcblxuLyoqXG4gKiBQYXJzZXMgcmVnaW9uIGFuZCBhY2NvdW50IGZyb20gYW4gUkRTIHJlc291cmNlIEFSTiAoYGFybjphd3M6cmRzOnJlZ2lvbjphY2NvdW50Oi4uLmApLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VBcm4gLSBTb3VyY2VBcm4gZnJvbSB0aGUgUkRTIGV2ZW50IGRldGFpbC5cbiAqIEByZXR1cm5zIFJlZ2lvbiBhbmQgYWNjb3VudCBpZCBzZWdtZW50cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUmRzU291cmNlQXJuID0gKHNvdXJjZUFybjogc3RyaW5nKTogeyByZWdpb246IHN0cmluZzsgYWNjb3VudDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBwYXJ0cyA9IHNvdXJjZUFybi5zcGxpdCgnOicpO1xuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogcGFydHNbM10gPz8gJycsXG4gICAgYWNjb3VudDogcGFydHNbNF0gPz8gJycsXG4gIH07XG59O1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIFNsYWNrIHN0b3Atc3VjY2VzcyBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncyB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgc291cmNlVHlwZTogUmRzQXV0b1N0YXJ0RGV0YWlsWydTb3VyY2VUeXBlJ107XG4gIHNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNsYWNrIGBjaGF0LnBvc3RNZXNzYWdlYCBwYXlsb2FkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gQ2hhbm5lbCBhbmQgcmVzb3VyY2UgaWRlbnRpdHkgZmllbGRzLlxuICogQHJldHVybnMgQXJndW1lbnRzIHN1aXRhYmxlIGZvciBgV2ViQ2xpZW50LmNoYXQucG9zdE1lc3NhZ2VgLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24gPSAoYXJnczogU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncykgPT4gKHtcbiAgY2hhbm5lbDogYXJncy5jaGFubmVsLFxuICBhdHRhY2htZW50czogW1xuICAgIHtcbiAgICAgIGNvbG9yOiAnIzM2YTY0ZicsXG4gICAgICBwcmV0ZXh0OiBg8J+YtCBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgYXV0b21hdGljYWxseSBydW5uaW5nIFJEUyAke2FyZ3Muc291cmNlVHlwZX0gJHthcmdzLnNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgdmFsdWU6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnUmVnaW9uJyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5yZWdpb24sXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ1R5cGUnLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZVR5cGUsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0lkZW50aWZpZXInLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59KTtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIHN1Y2Nlc3MgcmVzdWx0IGFmdGVyIFN0b3BEQiogcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBGaW5hbCBzdGF0dXMgYW5kIGlkZW50aXR5IGZpZWxkcy5cbiAqIEByZXR1cm5zIFN0b3BwZWRSZXN1bHQgZm9yIHRoZSBoYW5kbGVyIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU3RvcHBlZFJlc3VsdCA9IChhcmdzOiB7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn0pOiBTdG9wcGVkUmVzdWx0ID0+ICh7XG4gIGFjdGlvbjogJ3N0b3BwZWQnLFxuICBmaW5hbFN0YXR1czogYXJncy5maW5hbFN0YXR1cyxcbiAgYWNjb3VudDogYXJncy5hY2NvdW50LFxuICByZWdpb246IGFyZ3MucmVnaW9uLFxuICBpZGVudGlmaWVyOiBhcmdzLmlkZW50aWZpZXIsXG59KTtcbiJdfQ==
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RDSDatabaseAutoStartPreventStack = void 0;
|
|
4
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
-
const rds_database_auto_start_preventer_1 = require("../constructs/rds-database-auto-start-preventer");
|
|
7
|
-
/**
|
|
8
|
-
* CDK stack that deploys {@link RDSDatabaseAutoStartPreventer}.
|
|
9
|
-
*/
|
|
10
|
-
class RDSDatabaseAutoStartPreventStack extends aws_cdk_lib_1.Stack {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventStack", version: "0.4.4" };
|
|
12
|
-
/**
|
|
13
|
-
* Creates the stack and the RDSDatabaseAutoStartPreventer construct.
|
|
14
|
-
*
|
|
15
|
-
* @param scope - Parent construct.
|
|
16
|
-
* @param id - Stack id.
|
|
17
|
-
* @param props - Stack props (target resource, enable rule, secrets).
|
|
18
|
-
*/
|
|
19
|
-
constructor(scope, id, props) {
|
|
20
|
-
super(scope, id, props);
|
|
21
|
-
new rds_database_auto_start_preventer_1.RDSDatabaseAutoStartPreventer(this, 'RDSDatabaseAutoStartPreventer', {
|
|
22
|
-
targetResource: props.targetResource,
|
|
23
|
-
enableRule: props.enableRule,
|
|
24
|
-
secrets: props.secrets,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.RDSDatabaseAutoStartPreventStack = RDSDatabaseAutoStartPreventStack;
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGFja3MvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNkNBQWdEO0FBRWhELHVHQUF5SDtBQWN6SDs7R0FFRztBQUNILE1BQWEsZ0NBQWlDLFNBQVEsbUJBQUs7O0lBQ3pEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEM7UUFDcEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxpRUFBNkIsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7WUFDdkUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoQkgsNEVBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIsIFRhcmdldFJlc291cmNlLCBTZWNyZXRzIH0gZnJvbSAnLi4vY29uc3RydWN0cy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUkRTIGRhdGFiYXNlIGF1dG8gc3RhcnQgcHJldmVudCBDREsgc3RhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldCByZXNvdXJjZSBjcml0ZXJpYSBmb3IgUkRTIGluc3RhbmNlcy9jbHVzdGVycyB0byBwcm90ZWN0LiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVSdWxlPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgZm9yIG5vdGlmaWNhdGlvbnMuIE9taXQgc2xhY2tTZWNyZXROYW1lIHRvIHNraXAgU2xhY2suICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG59XG5cbi8qKlxuICogQ0RLIHN0YWNrIHRoYXQgZGVwbG95cyB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzdGFjayBhbmQgdGhlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gU3RhY2sgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFN0YWNrIHByb3BzICh0YXJnZXQgcmVzb3VyY2UsIGVuYWJsZSBydWxlLCBzZWNyZXRzKS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIodGhpcywgJ1JEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyJywge1xuICAgICAgdGFyZ2V0UmVzb3VyY2U6IHByb3BzLnRhcmdldFJlc291cmNlLFxuICAgICAgZW5hYmxlUnVsZTogcHJvcHMuZW5hYmxlUnVsZSxcbiAgICAgIHNlY3JldHM6IHByb3BzLnNlY3JldHMsXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
/package/lib/funcs/{auto-start-prevent.predicates.d.ts → core/auto-start-prevent.predicates.d.ts}
RENAMED
|
File without changes
|