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,5 +1,5 @@
|
|
|
1
1
|
import { DurableContext } from '@aws/durable-execution-sdk-js';
|
|
2
|
-
import { NoOpResult, StoppedResult } from './auto-start-prevent.predicates';
|
|
2
|
+
import { NoOpResult, StoppedResult } from './core/auto-start-prevent.predicates';
|
|
3
3
|
/**
|
|
4
4
|
* Durable Lambda handler for RDS auto-start prevention.
|
|
5
5
|
*
|
|
@@ -6,7 +6,7 @@ const client_rds_1 = require("@aws-sdk/client-rds");
|
|
|
6
6
|
const web_api_1 = require("@slack/web-api");
|
|
7
7
|
const aws_lambda_secret_fetcher_1 = require("aws-lambda-secret-fetcher");
|
|
8
8
|
const strict_env_resolver_1 = require("strict-env-resolver");
|
|
9
|
-
const auto_start_prevent_predicates_1 = require("./auto-start-prevent.predicates");
|
|
9
|
+
const auto_start_prevent_predicates_1 = require("./core/auto-start-prevent.predicates");
|
|
10
10
|
/** Shared RDS client for describe and stop API calls. */
|
|
11
11
|
const rdsClient = new client_rds_1.RDSClient({});
|
|
12
12
|
/**
|
|
@@ -169,4 +169,4 @@ const processAutoStartPrevent = async (input, context) => {
|
|
|
169
169
|
};
|
|
170
170
|
exports.processAutoStartPrevent = processAutoStartPrevent;
|
|
171
171
|
exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(exports.processAutoStartPrevent);
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQUMxRCw2REFBdUU7QUFDdkUsbUZBa0J5QztBQUV6Qyx5REFBeUQ7QUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLEtBQWMsRUFDZCxPQUF1QixFQUNjLEVBQUU7SUFDdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDhDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBELE1BQU0sZUFBZSxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLEVBQUUsSUFBSTtRQUNWLE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxJQUFJLFdBQW9DLENBQUM7SUFDekMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNFLE9BQU8seUNBQWEsQ0FBQyxjQUFjLENBQWMsZUFBZSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBQSw2Q0FBYSxFQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSxxREFBcUIsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBQSxvREFBb0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLFVBQVUsZ0JBQWdCLE1BQU0sQ0FBQyxVQUFVLGFBQWEsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRyxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUNsRixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuQyw2RkFBNkY7SUFDN0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQ2xELEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztnQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztnQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2dCQUMvRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztZQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTO1lBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjtZQUNuRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTtTQUN4QyxDQUFDO0lBQ0osQ0FBQyxFQUNEO1FBQ0UsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDcEM7UUFDRCxZQUFZLEVBQUUsdURBQXVCO0tBQ3RDLENBQ0YsQ0FBQztJQUVGLHFFQUFxRTtJQUNyRSxJQUFJLENBQUMsSUFBQSx3Q0FBUSxFQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLElBQUEsK0NBQWUsRUFBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRXZDLHlEQUF5RDtJQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFBLG1EQUFtQixFQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDbEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLGtDQUFxQixDQUFDO29CQUN4QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQy9DLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbEIsSUFBSSxpQ0FBb0IsQ0FBQztvQkFDdkIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDN0MsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDNUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztvQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDOUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0YsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztvQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2lCQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztnQkFDNUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM3QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVM7Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjthQUNwRSxDQUFDO1FBQ0osQ0FBQyxFQUNEO1lBQ0UsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtnQkFDNUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2FBQ3JDO1lBQ0QsWUFBWSxFQUFFLHdEQUF3QjtTQUN2QyxDQUNGLENBQUM7UUFFRixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELHFHQUFxRztJQUNyRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLGlEQUFpQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoRSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQzVCLElBQUEsMERBQTBCLEVBQUM7Z0JBQ3pCLE9BQU87Z0JBQ1AsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxPQUFPO2dCQUNQLE1BQU07YUFDUCxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBQSxrREFBa0IsRUFBQztRQUN4QixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFyTFcsUUFBQSx1QkFBdUIsMkJBcUxsQztBQUVXLFFBQUEsT0FBTyxHQUFHLElBQUEsK0NBQW9CLEVBQUMsK0JBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhEdXJhYmxlRXhlY3V0aW9uLCBEdXJhYmxlQ29udGV4dCB9IGZyb20gJ0Bhd3MvZHVyYWJsZS1leGVjdXRpb24tc2RrLWpzJztcbmltcG9ydCB7XG4gIFJEU0NsaWVudCxcbiAgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQsXG4gIFN0b3BEQkluc3RhbmNlQ29tbWFuZCxcbiAgU3RvcERCQ2x1c3RlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yZHMnO1xuaW1wb3J0IHsgV2ViQ2xpZW50IH0gZnJvbSAnQHNsYWNrL3dlYi1hcGknO1xuaW1wb3J0IHsgc2VjcmV0RmV0Y2hlciB9IGZyb20gJ2F3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXInO1xuaW1wb3J0IHsgU3RyaWN0RW52UmVzb2x2ZXIsIFN0cmljdEVudlR5cGUgfSBmcm9tICdzdHJpY3QtZW52LXJlc29sdmVyJztcbmltcG9ydCB7XG4gIGJ1aWxkU2xhY2tTdG9wTm90aWZpY2F0aW9uLFxuICBidWlsZFN0b3BwZWRSZXN1bHQsXG4gIGRlY2lkZUFmdGVyVGFnTWF0Y2gsXG4gIGlzRGJDbHVzdGVyQXV0b1N0YXJ0LFxuICBpc0RiSW5zdGFuY2VBdXRvU3RhcnQsXG4gIGlzU2xhY2tTZWNyZXQsXG4gIG1hdGNoVGFnLFxuICBub3JtYWxpemVJbnB1dCxcbiAgTm9PcFJlc3VsdCxcbiAgcGFyc2VSZHNTb3VyY2VBcm4sXG4gIFdhaXRTdGF0ZSxcbiAgU2xhY2tTZWNyZXQsXG4gIFN0b3BwZWRSZXN1bHQsXG4gIFRhZyxcbiAgdGFnTWlzbWF0Y2hOb09wLFxuICB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSxcbiAgd2FpdFN0cmF0ZWd5VW50aWxTdG9wcGVkLFxufSBmcm9tICcuL2F1dG8tc3RhcnQtcHJldmVudC5wcmVkaWNhdGVzJztcblxuLyoqIFNoYXJlZCBSRFMgY2xpZW50IGZvciBkZXNjcmliZSBhbmQgc3RvcCBBUEkgY2FsbHMuICovXG5jb25zdCByZHNDbGllbnQgPSBuZXcgUkRTQ2xpZW50KHt9KTtcblxuLyoqXG4gKiBEdXJhYmxlIExhbWJkYSBoYW5kbGVyIGZvciBSRFMgYXV0by1zdGFydCBwcmV2ZW50aW9uLlxuICpcbiAqIFdvcmtmbG93OlxuICogMS4gV2FpdCAxIG1pbnV0ZSwgdGhlbiB3YWl0IG9uIERlc2NyaWJlREIqIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICogMi4gUmVhZCB0YWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlIGBUYWdMaXN0YDsgc2tpcCB3aGVuIHtAbGluayBtYXRjaFRhZ30gcmV0dXJucyBmYWxzZS5cbiAqIDMuIElmIHN0YXR1cyBpcyBgYXZhaWxhYmxlYCwgY2FsbCBTdG9wREIqIGFuZCB3YWl0IHVudGlsIGBzdG9wcGVkYC5cbiAqIDQuIElmIGFscmVhZHkgYHN0b3BwZWRgIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLCByZXR1cm4ge0BsaW5rIE5vT3BSZXN1bHR9IChubyBTbGFjayBub3RpZmljYXRpb24pLlxuICogNS4gV2hlbiBgU0xBQ0tfU0VDUkVUX05BTUVgIGlzIHNldCwgcG9zdCB0byBTbGFjayBvbmx5IGFmdGVyIFN0b3BEQiogd2FzIGludm9rZWQgYW5kIHRoZSByZXNvdXJjZSByZWFjaGVkIGBzdG9wcGVkYC4gV2hlbiBpdCBpcyB1bnNldCwgc2tpcCBTbGFjay5cbiAqXG4gKiBUYWcgbWF0Y2hpbmcgdXNlcyBSRFMgRGVzY3JpYmUgQVBJcyBvbmx5OyBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkgaXMgbm90IHVzZWQuXG4gKlxuICogQHBhcmFtIGlucHV0IC0gYHsgZXZlbnQsIHBhcmFtcyB9YCBmcm9tIEV2ZW50QnJpZGdlIElucHV0VHJhbnNmb3JtZXIgKHNhbWUgc2hhcGUgcmVxdWlyZWQgZm9yIGRpcmVjdCBJbnZva2UpLlxuICogQHBhcmFtIGNvbnRleHQgLSBEdXJhYmxlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBzdGVwcyBhbmQgd2FpdHMuXG4gKiBAcmV0dXJucyB7QGxpbmsgU3RvcHBlZFJlc3VsdH0gb3Ige0BsaW5rIE5vT3BSZXN1bHR9LlxuICogQHRocm93cyBXaGVuIHRoZSBwYXlsb2FkIGlzIGludmFsaWQsIHRoZSBldmVudCBpcyB1bnN1cHBvcnRlZCwgYSBjb25maWd1cmVkIFNsYWNrIHNlY3JldCBpcyBpbnZhbGlkLCBvciBzdG9wIGRpZCBub3QgcmVhY2ggYHN0b3BwZWRgLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0F1dG9TdGFydFByZXZlbnQgPSBhc3luYyAoXG4gIGlucHV0OiB1bmtub3duLFxuICBjb250ZXh0OiBEdXJhYmxlQ29udGV4dCxcbik6IFByb21pc2U8U3RvcHBlZFJlc3VsdCB8IE5vT3BSZXN1bHQ+ID0+IHtcbiAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gIGNvbnN0IHsgZGV0YWlsLCAnZGV0YWlsLXR5cGUnOiBkZXRhaWxUeXBlIH0gPSBldmVudDtcblxuICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlKCdTTEFDS19TRUNSRVRfTkFNRScsIFN0cmljdEVudlR5cGUuU3RyaW5nLCB7XG4gICAgdHJpbTogdHJ1ZSxcbiAgICBkZWZhdWx0OiAnJyxcbiAgfSk7XG4gIC8vIFJlcXVpcmVzIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIEV4dGVuc2lvbiAoUGFyYW1zQW5kU2VjcmV0cyBsYXllcikgYW5kXG4gIC8vIEFXU19TRVNTSU9OX1RPS0VOIGZyb20gdGhlIExhbWJkYSBydW50aW1lIChhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjYrKS5cbiAgbGV0IHNsYWNrU2VjcmV0OiBTbGFja1NlY3JldCB8IHVuZGVmaW5lZDtcbiAgaWYgKHNsYWNrU2VjcmV0TmFtZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWU8U2xhY2tTZWNyZXQ+KHNsYWNrU2VjcmV0TmFtZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpc1NsYWNrU2VjcmV0KHNsYWNrU2VjcmV0VmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGJlIEpTT04gd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gICAgfVxuICAgIHNsYWNrU2VjcmV0ID0gc2xhY2tTZWNyZXRWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzSW5zdGFuY2UgPSBpc0RiSW5zdGFuY2VBdXRvU3RhcnQoZGV0YWlsVHlwZSwgZGV0YWlsKTtcbiAgY29uc3QgaXNDbHVzdGVyID0gaXNEYkNsdXN0ZXJBdXRvU3RhcnQoZGV0YWlsVHlwZSwgZGV0YWlsKTtcblxuICBpZiAoIWlzSW5zdGFuY2UgJiYgIWlzQ2x1c3Rlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBldmVudDogZGV0YWlsLXR5cGU9JHtkZXRhaWxUeXBlfSwgU291cmNlVHlwZT0ke2RldGFpbC5Tb3VyY2VUeXBlfSwgRXZlbnRJRD0ke2RldGFpbC5FdmVudElEfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluaXRpYWwgZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBkZXNjcmliZSAoYWxsb3dzIFJEUyB0byByZXBvcnQgYSBzdGFibGUgc3RhdHVzKS5cbiAgYXdhaXQgY29udGV4dC53YWl0KHsgbWludXRlczogMSB9KTtcblxuICAvLyBXYWl0IHVudGlsIHRoZSByZXNvdXJjZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc2l0aW9uYWwgc3RhdHVzOyBjYXB0dXJlIHN0YXR1cyBhbmQgVGFnTGlzdC5cbiAgY29uc3QgZmlyc3REZXNjcmliZSA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxXYWl0U3RhdGU+KFxuICAgIGFzeW5jIChfc3RhdGUsIF9jdHgpID0+IHtcbiAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiBkYj8uREJJbnN0YW5jZVN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIHRhZ3M6IChkYj8uVGFnTGlzdCA/PyBbXSkgYXMgVGFnW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCh7XG4gICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBjbHVzdGVyPy5TdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICB0YWdzOiAoY2x1c3Rlcj8uVGFnTGlzdCA/PyBbXSkgYXMgVGFnW10sXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIHN0YXR1czogJ3N0YXJ0aW5nJyxcbiAgICAgICAgaWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICB9LFxuICAgICAgd2FpdFN0cmF0ZWd5OiB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSxcbiAgICB9LFxuICApO1xuXG4gIC8vIFNraXAgd2hlbiBUYWdMaXN0IGlzIG1pc3Npbmcgb3IgZG9lcyBub3QgbWF0Y2ggdGFnS2V5IC8gdGFnVmFsdWVzLlxuICBpZiAoIW1hdGNoVGFnKHBhcmFtcywgZmlyc3REZXNjcmliZS50YWdzKSkge1xuICAgIHJldHVybiB0YWdNaXNtYXRjaE5vT3AoZmlyc3REZXNjcmliZS5zdGF0dXMpO1xuICB9XG5cbiAgbGV0IGRpZFN0b3AgPSBmYWxzZTtcbiAgbGV0IGZpbmFsU3RhdHVzID0gZmlyc3REZXNjcmliZS5zdGF0dXM7XG5cbiAgLy8gV2hlbiBhdmFpbGFibGUsIGludm9rZSBTdG9wREIqIGFuZCB3YWl0IHVudGlsIHN0b3BwZWQuXG4gIGNvbnN0IGFmdGVyVGFnTWF0Y2ggPSBkZWNpZGVBZnRlclRhZ01hdGNoKGZpcnN0RGVzY3JpYmUuc3RhdHVzKTtcbiAgaWYgKGFmdGVyVGFnTWF0Y2gua2luZCA9PT0gJ3N0b3AnKSB7XG4gICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1pbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IFN0b3BEQkluc3RhbmNlQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgY29udGV4dC5zdGVwKCdzdG9wLWRiLWNsdXN0ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBTdG9wREJDbHVzdGVyQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3BwZWQgPSBhd2FpdCBjb250ZXh0LndhaXRGb3JDb25kaXRpb248V2FpdFN0YXRlPihcbiAgICAgIGFzeW5jIChfc3RhdGUsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCh7XG4gICAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBkYj8uREJJbnN0YW5jZVN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZURCQ2x1c3RlcnNDb21tYW5kKHtcbiAgICAgICAgICAgIERCQ2x1c3RlcklkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gcmVzLkRCQ2x1c3RlcnM/LlswXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IGNsdXN0ZXI/LlN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgICAgaWRlbnRpZmllcjogY2x1c3Rlcj8uREJDbHVzdGVySWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHN0YXR1czogZmlyc3REZXNjcmliZS5zdGF0dXMsXG4gICAgICAgICAgaWRlbnRpZmllcjogZmlyc3REZXNjcmliZS5pZGVudGlmaWVyLFxuICAgICAgICB9LFxuICAgICAgICB3YWl0U3RyYXRlZ3k6IHdhaXRTdHJhdGVneVVudGlsU3RvcHBlZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGRpZFN0b3AgPSB0cnVlO1xuICAgIGZpbmFsU3RhdHVzID0gc3RvcHBlZC5zdGF0dXM7XG4gIH1cblxuICAvLyBBbHJlYWR5IHN0b3BwZWQgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiogKGUuZy4gc3RvcHBlZCBieSBhbm90aGVyIHByb2Nlc3MpIOKAlCBubyBTbGFjayBub3RpZmljYXRpb24uXG4gIGlmICghZGlkU3RvcCkge1xuICAgIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICduby1vcCcpIHtcbiAgICAgIHJldHVybiBhZnRlclRhZ01hdGNoLnJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGFmdGVyVGFnTWF0Y2gua2luZCA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGFmdGVyVGFnTWF0Y2gubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFpbCB3aGVuIFN0b3BEQiogd2FzIGNhbGxlZCBidXQgdGhlIHJlc291cmNlIGRpZCBub3QgcmVhY2ggc3RvcHBlZC5cbiAgaWYgKGZpbmFsU3RhdHVzICE9PSAnc3RvcHBlZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERCIHN0YXR1cyBpcyBub3Qgc3RvcHBlZCBhZnRlciBwcm9jZXNzaW5nOiAke2ZpbmFsU3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgeyByZWdpb24sIGFjY291bnQgfSA9IHBhcnNlUmRzU291cmNlQXJuKGRldGFpbC5Tb3VyY2VBcm4pO1xuXG4gIGlmIChzbGFja1NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0LmNoYW5uZWw7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFdlYkNsaWVudChzbGFja1NlY3JldC50b2tlbik7XG4gICAgYXdhaXQgY29udGV4dC5zdGVwKCdwb3N0LXNsYWNrLW1lc3NhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGNsaWVudC5jaGF0LnBvc3RNZXNzYWdlKFxuICAgICAgICBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICBzb3VyY2VUeXBlOiBkZXRhaWwuU291cmNlVHlwZSxcbiAgICAgICAgICBzb3VyY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkU3RvcHBlZFJlc3VsdCh7XG4gICAgZmluYWxTdGF0dXMsXG4gICAgYWNjb3VudCxcbiAgICByZWdpb24sXG4gICAgaWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSB3aXRoRHVyYWJsZUV4ZWN1dGlvbihwcm9jZXNzQXV0b1N0YXJ0UHJldmVudCk7XG4iXX0=
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQUMxRCw2REFBdUU7QUFDdkUsd0ZBa0I4QztBQUU5Qyx5REFBeUQ7QUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLEtBQWMsRUFDZCxPQUF1QixFQUNjLEVBQUU7SUFDdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDhDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBELE1BQU0sZUFBZSxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLEVBQUUsSUFBSTtRQUNWLE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxJQUFJLFdBQW9DLENBQUM7SUFDekMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNFLE9BQU8seUNBQWEsQ0FBQyxjQUFjLENBQWMsZUFBZSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBQSw2Q0FBYSxFQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSxxREFBcUIsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBQSxvREFBb0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLFVBQVUsZ0JBQWdCLE1BQU0sQ0FBQyxVQUFVLGFBQWEsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRyxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUNsRixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuQyw2RkFBNkY7SUFDN0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQ2xELEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztnQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztnQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2dCQUMvRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztZQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTO1lBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjtZQUNuRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTtTQUN4QyxDQUFDO0lBQ0osQ0FBQyxFQUNEO1FBQ0UsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDcEM7UUFDRCxZQUFZLEVBQUUsdURBQXVCO0tBQ3RDLENBQ0YsQ0FBQztJQUVGLHFFQUFxRTtJQUNyRSxJQUFJLENBQUMsSUFBQSx3Q0FBUSxFQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLElBQUEsK0NBQWUsRUFBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRXZDLHlEQUF5RDtJQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFBLG1EQUFtQixFQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDbEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLGtDQUFxQixDQUFDO29CQUN4QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQy9DLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbEIsSUFBSSxpQ0FBb0IsQ0FBQztvQkFDdkIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDN0MsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDNUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztvQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDOUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0YsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztvQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2lCQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztnQkFDNUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM3QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVM7Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjthQUNwRSxDQUFDO1FBQ0osQ0FBQyxFQUNEO1lBQ0UsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtnQkFDNUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2FBQ3JDO1lBQ0QsWUFBWSxFQUFFLHdEQUF3QjtTQUN2QyxDQUNGLENBQUM7UUFFRixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELHFHQUFxRztJQUNyRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLGlEQUFpQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoRSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQzVCLElBQUEsMERBQTBCLEVBQUM7Z0JBQ3pCLE9BQU87Z0JBQ1AsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxPQUFPO2dCQUNQLE1BQU07YUFDUCxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBQSxrREFBa0IsRUFBQztRQUN4QixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFyTFcsUUFBQSx1QkFBdUIsMkJBcUxsQztBQUVXLFFBQUEsT0FBTyxHQUFHLElBQUEsK0NBQW9CLEVBQUMsK0JBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhEdXJhYmxlRXhlY3V0aW9uLCBEdXJhYmxlQ29udGV4dCB9IGZyb20gJ0Bhd3MvZHVyYWJsZS1leGVjdXRpb24tc2RrLWpzJztcbmltcG9ydCB7XG4gIFJEU0NsaWVudCxcbiAgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQsXG4gIFN0b3BEQkluc3RhbmNlQ29tbWFuZCxcbiAgU3RvcERCQ2x1c3RlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yZHMnO1xuaW1wb3J0IHsgV2ViQ2xpZW50IH0gZnJvbSAnQHNsYWNrL3dlYi1hcGknO1xuaW1wb3J0IHsgc2VjcmV0RmV0Y2hlciB9IGZyb20gJ2F3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXInO1xuaW1wb3J0IHsgU3RyaWN0RW52UmVzb2x2ZXIsIFN0cmljdEVudlR5cGUgfSBmcm9tICdzdHJpY3QtZW52LXJlc29sdmVyJztcbmltcG9ydCB7XG4gIGJ1aWxkU2xhY2tTdG9wTm90aWZpY2F0aW9uLFxuICBidWlsZFN0b3BwZWRSZXN1bHQsXG4gIGRlY2lkZUFmdGVyVGFnTWF0Y2gsXG4gIGlzRGJDbHVzdGVyQXV0b1N0YXJ0LFxuICBpc0RiSW5zdGFuY2VBdXRvU3RhcnQsXG4gIGlzU2xhY2tTZWNyZXQsXG4gIG1hdGNoVGFnLFxuICBub3JtYWxpemVJbnB1dCxcbiAgTm9PcFJlc3VsdCxcbiAgcGFyc2VSZHNTb3VyY2VBcm4sXG4gIFdhaXRTdGF0ZSxcbiAgU2xhY2tTZWNyZXQsXG4gIFN0b3BwZWRSZXN1bHQsXG4gIFRhZyxcbiAgdGFnTWlzbWF0Y2hOb09wLFxuICB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSxcbiAgd2FpdFN0cmF0ZWd5VW50aWxTdG9wcGVkLFxufSBmcm9tICcuL2NvcmUvYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMnO1xuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIER1cmFibGUgTGFtYmRhIGhhbmRsZXIgZm9yIFJEUyBhdXRvLXN0YXJ0IHByZXZlbnRpb24uXG4gKlxuICogV29ya2Zsb3c6XG4gKiAxLiBXYWl0IDEgbWludXRlLCB0aGVuIHdhaXQgb24gRGVzY3JpYmVEQiogdW50aWwgdGhlIHJlc291cmNlIGxlYXZlcyB0cmFuc2l0aW9uYWwgc3RhdHVzZXMuXG4gKiAyLiBSZWFkIHRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2UgYFRhZ0xpc3RgOyBza2lwIHdoZW4ge0BsaW5rIG1hdGNoVGFnfSByZXR1cm5zIGZhbHNlLlxuICogMy4gSWYgc3RhdHVzIGlzIGBhdmFpbGFibGVgLCBjYWxsIFN0b3BEQiogYW5kIHdhaXQgdW50aWwgYHN0b3BwZWRgLlxuICogNC4gSWYgYWxyZWFkeSBgc3RvcHBlZGAgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiosIHJldHVybiB7QGxpbmsgTm9PcFJlc3VsdH0gKG5vIFNsYWNrIG5vdGlmaWNhdGlvbikuXG4gKiA1LiBXaGVuIGBTTEFDS19TRUNSRVRfTkFNRWAgaXMgc2V0LCBwb3N0IHRvIFNsYWNrIG9ubHkgYWZ0ZXIgU3RvcERCKiB3YXMgaW52b2tlZCBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLiBXaGVuIGl0IGlzIHVuc2V0LCBza2lwIFNsYWNrLlxuICpcbiAqIFRhZyBtYXRjaGluZyB1c2VzIFJEUyBEZXNjcmliZSBBUElzIG9ubHk7IFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBpcyBub3QgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UgSW5wdXRUcmFuc2Zvcm1lciAoc2FtZSBzaGFwZSByZXF1aXJlZCBmb3IgZGlyZWN0IEludm9rZSkuXG4gKiBAcGFyYW0gY29udGV4dCAtIER1cmFibGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHN0ZXBzIGFuZCB3YWl0cy5cbiAqIEByZXR1cm5zIHtAbGluayBTdG9wcGVkUmVzdWx0fSBvciB7QGxpbmsgTm9PcFJlc3VsdH0uXG4gKiBAdGhyb3dzIFdoZW4gdGhlIHBheWxvYWQgaXMgaW52YWxpZCwgdGhlIGV2ZW50IGlzIHVuc3VwcG9ydGVkLCBhIGNvbmZpZ3VyZWQgU2xhY2sgc2VjcmV0IGlzIGludmFsaWQsIG9yIHN0b3AgZGlkIG5vdCByZWFjaCBgc3RvcHBlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQXV0b1N0YXJ0UHJldmVudCA9IGFzeW5jIChcbiAgaW5wdXQ6IHVua25vd24sXG4gIGNvbnRleHQ6IER1cmFibGVDb250ZXh0LFxuKTogUHJvbWlzZTxTdG9wcGVkUmVzdWx0IHwgTm9PcFJlc3VsdD4gPT4ge1xuICBjb25zdCB7IGV2ZW50LCBwYXJhbXMgfSA9IG5vcm1hbGl6ZUlucHV0KGlucHV0KTtcbiAgY29uc3QgeyBkZXRhaWwsICdkZXRhaWwtdHlwZSc6IGRldGFpbFR5cGUgfSA9IGV2ZW50O1xuXG4gIGNvbnN0IHNsYWNrU2VjcmV0TmFtZSA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmUoJ1NMQUNLX1NFQ1JFVF9OQU1FJywgU3RyaWN0RW52VHlwZS5TdHJpbmcsIHtcbiAgICB0cmltOiB0cnVlLFxuICAgIGRlZmF1bHQ6ICcnLFxuICB9KTtcbiAgLy8gUmVxdWlyZXMgQVdTIFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgRXh0ZW5zaW9uIChQYXJhbXNBbmRTZWNyZXRzIGxheWVyKSBhbmRcbiAgLy8gQVdTX1NFU1NJT05fVE9LRU4gZnJvbSB0aGUgTGFtYmRhIHJ1bnRpbWUgKGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgXjAuNispLlxuICBsZXQgc2xhY2tTZWNyZXQ6IFNsYWNrU2VjcmV0IHwgdW5kZWZpbmVkO1xuICBpZiAoc2xhY2tTZWNyZXROYW1lLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzbGFja1NlY3JldFZhbHVlID0gYXdhaXQgY29udGV4dC5zdGVwKCdmZXRjaC1zbGFjay1zZWNyZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gc2VjcmV0RmV0Y2hlci5nZXRTZWNyZXRWYWx1ZTxTbGFja1NlY3JldD4oc2xhY2tTZWNyZXROYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoIWlzU2xhY2tTZWNyZXQoc2xhY2tTZWNyZXRWYWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2xhY2sgc2VjcmV0IG11c3QgYmUgSlNPTiB3aXRoIG5vbi1lbXB0eSB0b2tlbiBhbmQgY2hhbm5lbC4nKTtcbiAgICB9XG4gICAgc2xhY2tTZWNyZXQgPSBzbGFja1NlY3JldFZhbHVlO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YW5jZSA9IGlzRGJJbnN0YW5jZUF1dG9TdGFydChkZXRhaWxUeXBlLCBkZXRhaWwpO1xuICBjb25zdCBpc0NsdXN0ZXIgPSBpc0RiQ2x1c3RlckF1dG9TdGFydChkZXRhaWxUeXBlLCBkZXRhaWwpO1xuXG4gIGlmICghaXNJbnN0YW5jZSAmJiAhaXNDbHVzdGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuc3VwcG9ydGVkIGV2ZW50OiBkZXRhaWwtdHlwZT0ke2RldGFpbFR5cGV9LCBTb3VyY2VUeXBlPSR7ZGV0YWlsLlNvdXJjZVR5cGV9LCBFdmVudElEPSR7ZGV0YWlsLkV2ZW50SUR9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gSW5pdGlhbCBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IGRlc2NyaWJlIChhbGxvd3MgUkRTIHRvIHJlcG9ydCBhIHN0YWJsZSBzdGF0dXMpLlxuICBhd2FpdCBjb250ZXh0LndhaXQoeyBtaW51dGVzOiAxIH0pO1xuXG4gIC8vIFdhaXQgdW50aWwgdGhlIHJlc291cmNlIGlzIG5vIGxvbmdlciBpbiBhIHRyYW5zaXRpb25hbCBzdGF0dXM7IGNhcHR1cmUgc3RhdHVzIGFuZCBUYWdMaXN0LlxuICBjb25zdCBmaXJzdERlc2NyaWJlID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFdhaXRTdGF0ZT4oXG4gICAgYXN5bmMgKF9zdGF0ZSwgX2N0eCkgPT4ge1xuICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlREJJbnN0YW5jZXNDb21tYW5kKHtcbiAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IGRiPy5EQkluc3RhbmNlU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgdGFnczogKGRiPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBEZXNjcmliZURCQ2x1c3RlcnNDb21tYW5kKHtcbiAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGNsdXN0ZXI/LlN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgIHRhZ3M6IChjbHVzdGVyPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgIH07XG4gICAgfSxcbiAgICB7XG4gICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgc3RhdHVzOiAnc3RhcnRpbmcnLFxuICAgICAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgIH0sXG4gICAgICB3YWl0U3RyYXRlZ3k6IHdhaXRTdHJhdGVneVVudGlsU3RhYmxlLFxuICAgIH0sXG4gICk7XG5cbiAgLy8gU2tpcCB3aGVuIFRhZ0xpc3QgaXMgbWlzc2luZyBvciBkb2VzIG5vdCBtYXRjaCB0YWdLZXkgLyB0YWdWYWx1ZXMuXG4gIGlmICghbWF0Y2hUYWcocGFyYW1zLCBmaXJzdERlc2NyaWJlLnRhZ3MpKSB7XG4gICAgcmV0dXJuIHRhZ01pc21hdGNoTm9PcChmaXJzdERlc2NyaWJlLnN0YXR1cyk7XG4gIH1cblxuICBsZXQgZGlkU3RvcCA9IGZhbHNlO1xuICBsZXQgZmluYWxTdGF0dXMgPSBmaXJzdERlc2NyaWJlLnN0YXR1cztcblxuICAvLyBXaGVuIGF2YWlsYWJsZSwgaW52b2tlIFN0b3BEQiogYW5kIHdhaXQgdW50aWwgc3RvcHBlZC5cbiAgY29uc3QgYWZ0ZXJUYWdNYXRjaCA9IGRlY2lkZUFmdGVyVGFnTWF0Y2goZmlyc3REZXNjcmliZS5zdGF0dXMpO1xuICBpZiAoYWZ0ZXJUYWdNYXRjaC5raW5kID09PSAnc3RvcCcpIHtcbiAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgYXdhaXQgY29udGV4dC5zdGVwKCdzdG9wLWRiLWluc3RhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgU3RvcERCSW5zdGFuY2VDb21tYW5kKHtcbiAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBjb250ZXh0LnN0ZXAoJ3N0b3AtZGItY2x1c3RlcicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IFN0b3BEQkNsdXN0ZXJDb21tYW5kKHtcbiAgICAgICAgICAgIERCQ2x1c3RlcklkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcHBlZCA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxXYWl0U3RhdGU+KFxuICAgICAgYXN5bmMgKF9zdGF0ZSwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlc2NyaWJlREJJbnN0YW5jZXNDb21tYW5kKHtcbiAgICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkYiA9IHJlcy5EQkluc3RhbmNlcz8uWzBdO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IGRiPy5EQkluc3RhbmNlU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGRiPy5EQkluc3RhbmNlSWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBmaXJzdERlc2NyaWJlLmlkZW50aWZpZXIsXG4gICAgICAgIH0sXG4gICAgICAgIHdhaXRTdHJhdGVneTogd2FpdFN0cmF0ZWd5VW50aWxTdG9wcGVkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgZGlkU3RvcCA9IHRydWU7XG4gICAgZmluYWxTdGF0dXMgPSBzdG9wcGVkLnN0YXR1cztcbiAgfVxuXG4gIC8vIEFscmVhZHkgc3RvcHBlZCB3aXRob3V0IGNhbGxpbmcgU3RvcERCKiAoZS5nLiBzdG9wcGVkIGJ5IGFub3RoZXIgcHJvY2Vzcykg4oCUIG5vIFNsYWNrIG5vdGlmaWNhdGlvbi5cbiAgaWYgKCFkaWRTdG9wKSB7XG4gICAgaWYgKGFmdGVyVGFnTWF0Y2gua2luZCA9PT0gJ25vLW9wJykge1xuICAgICAgcmV0dXJuIGFmdGVyVGFnTWF0Y2gucmVzdWx0O1xuICAgIH1cbiAgICBpZiAoYWZ0ZXJUYWdNYXRjaC5raW5kID09PSAnZXJyb3InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYWZ0ZXJUYWdNYXRjaC5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvLyBGYWlsIHdoZW4gU3RvcERCKiB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVzb3VyY2UgZGlkIG5vdCByZWFjaCBzdG9wcGVkLlxuICBpZiAoZmluYWxTdGF0dXMgIT09ICdzdG9wcGVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgREIgc3RhdHVzIGlzIG5vdCBzdG9wcGVkIGFmdGVyIHByb2Nlc3Npbmc6ICR7ZmluYWxTdGF0dXN9YCk7XG4gIH1cblxuICBjb25zdCB7IHJlZ2lvbiwgYWNjb3VudCB9ID0gcGFyc2VSZHNTb3VyY2VBcm4oZGV0YWlsLlNvdXJjZUFybik7XG5cbiAgaWYgKHNsYWNrU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjaGFubmVsID0gc2xhY2tTZWNyZXQuY2hhbm5lbDtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgV2ViQ2xpZW50KHNsYWNrU2VjcmV0LnRva2VuKTtcbiAgICBhd2FpdCBjb250ZXh0LnN0ZXAoJ3Bvc3Qtc2xhY2stbWVzc2FnZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gY2xpZW50LmNoYXQucG9zdE1lc3NhZ2UoXG4gICAgICAgIGJ1aWxkU2xhY2tTdG9wTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgIHNvdXJjZVR5cGU6IGRldGFpbC5Tb3VyY2VUeXBlLFxuICAgICAgICAgIHNvdXJjZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIGFjY291bnQsXG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYnVpbGRTdG9wcGVkUmVzdWx0KHtcbiAgICBmaW5hbFN0YXR1cyxcbiAgICBhY2NvdW50LFxuICAgIHJlZ2lvbixcbiAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IHdpdGhEdXJhYmxlRXhlY3V0aW9uKHByb2Nlc3NBdXRvU3RhcnRQcmV2ZW50KTtcbiJdfQ==
|
|
@@ -0,0 +1,255 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnVuY3MvY29yZS9hdXRvLXN0YXJ0LXByZXZlbnQucHJlZGljYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUEyR0gsaUZBQWlGO0FBQ3BFLFFBQUEscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRXZDOzs7R0FHRztBQUNVLFFBQUEscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0MsVUFBVTtJQUNWLGlDQUFpQztJQUNqQyxZQUFZO0lBQ1osV0FBVztJQUNYLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQVcsRUFBRSxDQUM5RCw2QkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFEdkIsUUFBQSxvQkFBb0Isd0JBQ0c7QUFFcEM7Ozs7Ozs7O0dBUUc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBd0IsRUFBRTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRO1FBQ3BDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVE7UUFDakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FB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Ozs7R0FLRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUtsQyxFQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwQixNQUFNLEVBQUUsU0FBUztJQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7SUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtJQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Q0FDNUIsQ0FBQyxDQUFDO0FBWFUsUUFBQSxrQkFBa0Isc0JBVzVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIHRoZSBSRFMgYXV0by1zdGFydCBwcmV2ZW50IExhbWJkYS5cbiAqIE5vIEFXUyBTREssIER1cmFibGUgY29udGV4dCwgZW52LCBvciBjbG9jayBkZXBlbmRlbmNpZXMuXG4gKi9cblxuLyoqXG4gKiBEZXRhaWwgcGF5bG9hZCBvZiBhbiBSRFMgYXV0by1zdGFydCBldmVudCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJkc0F1dG9TdGFydERldGFpbCB7XG4gIC8qKiBFdmVudCBJRDogUkRTLUVWRU5ULTAxNTQgKERCIGluc3RhbmNlKSBvciBSRFMtRVZFTlQtMDE1MyAoREIgY2x1c3RlcikuICovXG4gIEV2ZW50SUQ6ICdSRFMtRVZFTlQtMDE1NCcgfCAnUkRTLUVWRU5ULTAxNTMnO1xuICAvKiogUmVzb3VyY2UgdHlwZSB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LiAqL1xuICBTb3VyY2VUeXBlOiAnREJfSU5TVEFOQ0UnIHwgJ0NMVVNURVInO1xuICAvKiogQVJOIG9mIHRoZSBEQiBpbnN0YW5jZSBvciBjbHVzdGVyLiAqL1xuICBTb3VyY2VBcm46IHN0cmluZztcbiAgLyoqIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgaWRlbnRpZmllciBmcm9tIHRoZSBldmVudC4gKi9cbiAgU291cmNlSWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJEUyBhdXRvLXN0YXJ0IGV2ZW50IGFzIHJlY2VpdmVkIGZyb20gRXZlbnRCcmlkZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RXZlbnQge1xuICAnZGV0YWlsLXR5cGUnOiAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyB8ICdSRFMgREIgQ2x1c3RlciBFdmVudCc7XG4gICdzb3VyY2UnOiAnYXdzLnJkcyc7XG4gICdkZXRhaWwnOiBSZHNBdXRvU3RhcnREZXRhaWw7XG59XG5cbi8qKlxuICogVGFnLWJhc2VkIGZpbHRlciBwYXJhbWV0ZXJzIGZvciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU3RhcnRQYXJhbXMge1xuICAvKiogVGFnIGtleSB0byBtYXRjaCBvbiB0aGUgcmVzb3VyY2UuICovXG4gIHRhZ0tleTogc3RyaW5nO1xuICAvKiogQWxsb3dlZCB0YWcgdmFsdWVzOyB0aGUgcmVzb3VyY2UgaXMgcHJvY2Vzc2VkIG9ubHkgd2hlbiBpdHMgdGFnIHZhbHVlIGlzIGluIHRoaXMgbGlzdC4gKi9cbiAgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTbGFjayBjcmVkZW50aWFscyBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsYWNrU2VjcmV0IHtcbiAgLyoqIFNsYWNrIGJvdCBvciB1c2VyIE9BdXRoIHRva2VuLiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbCBJRCBvciBuYW1lIHRvIHBvc3Qgbm90aWZpY2F0aW9ucyB0by4gKi9cbiAgY2hhbm5lbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZWQgaGFuZGxlciBpbnB1dDogRXZlbnRCcmlkZ2UgZXZlbnQgYW5kIHRhZyBmaWx0ZXIgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU3RhcnRQcmV2ZW50SW5wdXQge1xuICBldmVudDogUmRzQXV0b1N0YXJ0RXZlbnQ7XG4gIHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gbm8gc3RvcCBhY3Rpb24gd2FzIHRha2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vT3BSZXN1bHQge1xuICBhY3Rpb246ICduby1vcCc7XG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnIHwgJ2FscmVhZHkgc3RvcHBlZCc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gdGhpcyBpbnZvY2F0aW9uIGNhbGxlZCBTdG9wREIqIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcHBlZFJlc3VsdCB7XG4gIGFjdGlvbjogJ3N0b3BwZWQnO1xuICBmaW5hbFN0YXR1czogc3RyaW5nO1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVdTLXN0eWxlIHRhZyAoS2V5L1ZhbHVlKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuICBLZXk/OiBzdHJpbmc7XG4gIFZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YXRlIHNuYXBzaG90IHdoaWxlIHdhaXRpbmcgb24gUkRTIGRlc2NyaWJlIEFQSXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdFN0YXRlIHtcbiAgLyoqIEN1cnJlbnQgREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMuICovXG4gIHN0YXR1czogc3RyaW5nO1xuICAvKiogREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBpZGVudGlmaWVyLiAqL1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIC8qKiBUYWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlOyBwcmVzZW50IG9uIHRoZSBmaXJzdCB3YWl0IGNoZWNrIG9ubHkuICovXG4gIHRhZ3M/OiBUYWdbXTtcbn1cblxuLyoqIENvbnRpbnVlIHdhaXRpbmcgd2l0aCBhIGRlbGF5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250aW51ZVdhaXQge1xuICBzaG91bGRDb250aW51ZTogdHJ1ZTtcbiAgZGVsYXk6IHsgbWludXRlczogbnVtYmVyIH07XG59XG5cbi8qKiBTdG9wIHdhaXRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BXYWl0IHtcbiAgc2hvdWxkQ29udGludWU6IGZhbHNlO1xufVxuXG4vKiogUmVzdWx0IG9mIGEgZHVyYWJsZSB3YWl0U3RyYXRlZ3kuICovXG5leHBvcnQgdHlwZSBXYWl0U3RyYXRlZ3lSZXN1bHQgPSBDb250aW51ZVdhaXQgfCBTdG9wV2FpdDtcblxuLyoqIE1pbnV0ZXMgYmV0d2VlbiBkZXNjcmliZSBjYWxscyB3aGlsZSBhIHN0YXR1cyBpcyB0cmFuc2l0aW9uYWwgb3Igc3RvcHBpbmcuICovXG5leHBvcnQgY29uc3QgV0FJVF9JTlRFUlZBTF9NSU5VVEVTID0gNTtcblxuLyoqXG4gKiBSRFMgc3RhdHVzZXMgdGhhdCBpbmRpY2F0ZSBhbiBpbi1wcm9ncmVzcyB0cmFuc2l0aW9uLlxuICogVGhlIGhhbmRsZXIgd2FpdHMge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gbWludXRlcyB3aGlsZSB0aGUgcmVzb3VyY2UgcmVtYWlucyBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzLlxuICovXG5leHBvcnQgY29uc3QgVFJBTlNJVElPTkFMX1NUQVRVU0VTID0gbmV3IFNldChbXG4gICdzdGFydGluZycsXG4gICdjb25maWd1cmluZy1lbmhhbmNlZC1tb25pdG9yaW5nJyxcbiAgJ2JhY2tpbmctdXAnLFxuICAnbW9kaWZ5aW5nJyxcbiAgJ3N0b3BwaW5nJyxcbl0pO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsIGFuZCB3YWl0aW5nIHNob3VsZCBjb250aW51ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gQ3VycmVudCBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cy5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHN0YXR1cyBpcyB0cmFuc2l0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYW5zaXRpb25hbFN0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgVFJBTlNJVElPTkFMX1NUQVRVU0VTLmhhcyhzdGF0dXMpO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgZm9yIFNsYWNrIGNyZWRlbnRpYWxzIHJldHVybmVkIGJ5IGBzZWNyZXRGZXRjaGVyLmdldFNlY3JldFZhbHVlYC5cbiAqXG4gKiBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjcgcGFyc2VzIFNlY3JldFN0cmluZyB3aXRoIHF1aWV0LWpzb24tcGFyc2VyIGFuZFxuICogZmFsbHMgYmFjayB0byB0aGUgcmF3IHN0cmluZyBvbiBpbnZhbGlkIEpTT04sIHNvIGNhbGxlcnMgbXVzdCB2YWxpZGF0ZSBzaGFwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBzZWNyZXQgZmV0Y2hlci5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdmFsdWUgaXMgYSBTbGFja1NlY3JldCB3aXRoIG5vbi1lbXB0eSB0b2tlbiBhbmQgY2hhbm5lbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2xhY2tTZWNyZXQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTbGFja1NlY3JldCA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCEoJ3Rva2VuJyBpbiB2YWx1ZSkgfHwgISgnY2hhbm5lbCcgaW4gdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgdmFsdWUudG9rZW4gPT09ICdzdHJpbmcnICYmXG4gICAgdmFsdWUudG9rZW4ubGVuZ3RoID4gMCAmJlxuICAgIHR5cGVvZiB2YWx1ZS5jaGFubmVsID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLmNoYW5uZWwubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogVHlwZSBndWFyZDogaW5wdXQgaXMgYHsgZXZlbnQsIHBhcmFtcyB9YCBhcyBwcm9kdWNlZCBieSB0aGUgRXZlbnRCcmlkZ2UgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFJhdyBMYW1iZGEgaW52b2NhdGlvbiBwYXlsb2FkLlxuICogQHJldHVybnMgV2hldGhlciBpbnB1dCBoYXMgbm9uLW51bGwgZXZlbnQgYW5kIHBhcmFtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXV0b1N0YXJ0UHJldmVudElucHV0ID0gKGlucHV0OiB1bmtub3duKTogaW5wdXQgaXMgQXV0b1N0YXJ0UHJldmVudElucHV0ID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcgfHwgaW5wdXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoISgnZXZlbnQnIGluIGlucHV0KSB8fCAhKCdwYXJhbXMnIGluIGlucHV0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaW5wdXQuZXZlbnQgIT0gbnVsbCAmJiBpbnB1dC5wYXJhbXMgIT0gbnVsbDtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBpbnZvY2F0aW9uIGlucHV0IHRvIHtAbGluayBBdXRvU3RhcnRQcmV2ZW50SW5wdXR9LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgZnJvbSBFdmVudEJyaWRnZSBJbnB1dFRyYW5zZm9ybWVyIChvciB0aGUgc2FtZSBzaGFwZSBvbiBkaXJlY3QgSW52b2tlKS5cbiAqIEByZXR1cm5zIEV2ZW50IHBsdXMgdGFnIGZpbHRlciBwYXJhbWV0ZXJzLlxuICogQHRocm93cyBXaGVuIHRoZSBwYXlsb2FkIGlzIG5vdCBgeyBldmVudCwgcGFyYW1zIH1gLlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplSW5wdXQgPSAoaW5wdXQ6IHVua25vd24pOiBBdXRvU3RhcnRQcmV2ZW50SW5wdXQgPT4ge1xuICBpZiAoaXNBdXRvU3RhcnRQcmV2ZW50SW5wdXQoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgeyBldmVudCwgcGFyYW1zIH0uJyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzb3VyY2UgaGFzIGEgdGFnIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgYSB2YWx1ZSBpbiB0aGUgYWxsb3dlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUYWcga2V5IGFuZCBhbGxvd2VkIHZhbHVlcy5cbiAqIEBwYXJhbSB0YWdzIC0gUmVzb3VyY2UgdGFnIGxpc3QgKGUuZy4gZnJvbSBEZXNjcmliZURCSW5zdGFuY2VzIC8gRGVzY3JpYmVEQkNsdXN0ZXJzKS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHRhZyBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2hUYWcgPSAocGFyYW1zOiBBdXRvU3RhcnRQYXJhbXMsIHRhZ3M/OiBUYWdbXSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRhZ3MgfHwgdGFncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSB0YWdzLmZpbmQodCA9PiB0LktleSA9PT0gcGFyYW1zLnRhZ0tleSk/LlZhbHVlO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBwYXJhbXMudGFnVmFsdWVzLmluY2x1ZGVzKHZhbHVlKTtcbn07XG5cbi8qKlxuICogV2hldGhlciB0aGUgRXZlbnRCcmlkZ2UgZGV0YWlsIGlkZW50aWZpZXMgYSBzdXBwb3J0ZWQgREIgaW5zdGFuY2UgYXV0by1zdGFydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGV0YWlsVHlwZSAtIEV2ZW50QnJpZGdlIGRldGFpbC10eXBlLlxuICogQHBhcmFtIGRldGFpbCAtIFJEUyBldmVudCBkZXRhaWwuXG4gKiBAcmV0dXJucyBUcnVlIGZvciBSRFMtRVZFTlQtMDE1NCBvbiBhIERCIGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgaXNEYkluc3RhbmNlQXV0b1N0YXJ0ID0gKFxuICBkZXRhaWxUeXBlOiBSZHNBdXRvU3RhcnRFdmVudFsnZGV0YWlsLXR5cGUnXSxcbiAgZGV0YWlsOiBSZHNBdXRvU3RhcnREZXRhaWwsXG4pOiBib29sZWFuID0+XG4gIGRldGFpbFR5cGUgPT09ICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnICYmXG4gIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnREJfSU5TVEFOQ0UnICYmXG4gIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTQnO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGNsdXN0ZXIgYXV0by1zdGFydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGV0YWlsVHlwZSAtIEV2ZW50QnJpZGdlIGRldGFpbC10eXBlLlxuICogQHBhcmFtIGRldGFpbCAtIFJEUyBldmVudCBkZXRhaWwuXG4gKiBAcmV0dXJucyBUcnVlIGZvciBSRFMtRVZFTlQtMDE1MyBvbiBhIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RiQ2x1c3RlckF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSAnUkRTIERCIENsdXN0ZXIgRXZlbnQnICYmXG4gIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnQ0xVU1RFUicgJiZcbiAgZGV0YWlsLkV2ZW50SUQgPT09ICdSRFMtRVZFTlQtMDE1Myc7XG5cbi8qKlxuICogV2FpdCBzdHJhdGVneSB3aGlsZSBkZXNjcmliaW5nIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgQ29udGludWUgYXQge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gd2hpbGUgdHJhbnNpdGlvbmFsOyBvdGhlcndpc2Ugc3RvcC5cbiAqL1xuZXhwb3J0IGNvbnN0IHdhaXRTdHJhdGVneVVudGlsU3RhYmxlID0gKHN0YXRlOiBXYWl0U3RhdGUpOiBXYWl0U3RyYXRlZ3lSZXN1bHQgPT4ge1xuICBpZiAoaXNUcmFuc2l0aW9uYWxTdGF0dXMoc3RhdGUuc3RhdHVzKSkge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiB0cnVlLCBkZWxheTogeyBtaW51dGVzOiBXQUlUX0lOVEVSVkFMX01JTlVURVMgfSB9O1xuICB9XG4gIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xufTtcblxuLyoqXG4gKiBXYWl0IHN0cmF0ZWd5IGFmdGVyIFN0b3BEQiogdW50aWwgdGhlIHJlc291cmNlIHJlYWNoZXMgYHN0b3BwZWRgLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgU3RvcCB3aGVuIGBzdG9wcGVkYDsgY29udGludWUgYXQge0BsaW5rIFdBSVRfSU5URVJWQUxfTUlOVVRFU30gd2hpbGUgdHJhbnNpdGlvbmFsLlxuICogQHRocm93cyBXaGVuIHRoZSBzdGF0dXMgaXMgbmVpdGhlciBzdG9wcGVkIG5vciB0cmFuc2l0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQgPSAoc3RhdGU6IFdhaXRTdGF0ZSk6IFdhaXRTdHJhdGVneVJlc3VsdCA9PiB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdzdG9wcGVkJykge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICB9XG4gIGlmIChpc1RyYW5zaXRpb25hbFN0YXR1cyhzdGF0ZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IFdBSVRfSU5URVJWQUxfTUlOVVRFUyB9IH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyB3aGlsZSB3YWl0aW5nIGZvciBzdG9wOiAke3N0YXRlLnN0YXR1c31gKTtcbn07XG5cbi8qKlxuICogRGVjaXNpb24gYWZ0ZXIgdGhlIGZpcnN0IGRlc2NyaWJlIGFuZCBhIHN1Y2Nlc3NmdWwgdGFnIG1hdGNoLlxuICovXG5leHBvcnQgdHlwZSBBZnRlclRhZ01hdGNoRGVjaXNpb24gPVxuICB8IHsga2luZDogJ3N0b3AnIH1cbiAgfCB7IGtpbmQ6ICduby1vcCc7IHJlc3VsdDogTm9PcFJlc3VsdCB9XG4gIHwgeyBraW5kOiAnZXJyb3InOyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBEZWNpZGVzIHRoZSBuZXh0IGFjdGlvbiB3aGVuIHRhZ3MgbWF0Y2hlZCBhbmQgU3RvcERCKiBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gU3RhdHVzIGZyb20gdGhlIGZpcnN0IGRlc2NyaWJlIGFmdGVyIGxlYXZpbmcgdHJhbnNpdGlvbmFsIHN0YXRlcy5cbiAqIEByZXR1cm5zIFN0b3Agd2hlbiBgYXZhaWxhYmxlYDsgbm8tb3Agd2hlbiBhbHJlYWR5IGBzdG9wcGVkYDsgb3RoZXJ3aXNlIGVycm9yLlxuICovXG5leHBvcnQgY29uc3QgZGVjaWRlQWZ0ZXJUYWdNYXRjaCA9IChzdGF0dXM6IHN0cmluZyk6IEFmdGVyVGFnTWF0Y2hEZWNpc2lvbiA9PiB7XG4gIGlmIChzdGF0dXMgPT09ICdhdmFpbGFibGUnKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ3N0b3AnIH07XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICduby1vcCcsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICdhbHJlYWR5IHN0b3BwZWQnLFxuICAgICAgICBzdGF0dXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnZXJyb3InLFxuICAgIG1lc3NhZ2U6IGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtzdGF0dXN9YCxcbiAgfTtcbn07XG5cbi8qKlxuICogQnVpbGRzIHRoZSBuby1vcCByZXN1bHQgdXNlZCB3aGVuIHRhZ3MgZG8gbm90IG1hdGNoLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBDdXJyZW50IHJlc291cmNlIHN0YXR1cy5cbiAqIEByZXR1cm5zIE5vLW9wIHJlc3VsdCB3aXRoIHRhZyBtaXNtYXRjaCByZWFzb24uXG4gKi9cbmV4cG9ydCBjb25zdCB0YWdNaXNtYXRjaE5vT3AgPSAoc3RhdHVzOiBzdHJpbmcpOiBOb09wUmVzdWx0ID0+ICh7XG4gIGFjdGlvbjogJ25vLW9wJyxcbiAgcmVhc29uOiAndGFnIG5vdCBtYXRjaGVkIG9yIG5vdCBmb3VuZCcsXG4gIHN0YXR1cyxcbn0pO1xuXG4vKipcbiAqIFBhcnNlcyByZWdpb24gYW5kIGFjY291bnQgZnJvbSBhbiBSRFMgcmVzb3VyY2UgQVJOIChgYXJuOmF3czpyZHM6cmVnaW9uOmFjY291bnQ6Li4uYCkuXG4gKlxuICogQHBhcmFtIHNvdXJjZUFybiAtIFNvdXJjZUFybiBmcm9tIHRoZSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgUmVnaW9uIGFuZCBhY2NvdW50IGlkIHNlZ21lbnRzLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VSZHNTb3VyY2VBcm4gPSAoc291cmNlQXJuOiBzdHJpbmcpOiB7IHJlZ2lvbjogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IHBhcnRzID0gc291cmNlQXJuLnNwbGl0KCc6Jyk7XG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiBwYXJ0c1szXSA/PyAnJyxcbiAgICBhY2NvdW50OiBwYXJ0c1s0XSA/PyAnJyxcbiAgfTtcbn07XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgU2xhY2sgc3RvcC1zdWNjZXNzIG5vdGlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGFja1N0b3BOb3RpZmljYXRpb25BcmdzIHtcbiAgY2hhbm5lbDogc3RyaW5nO1xuICBzb3VyY2VUeXBlOiBSZHNBdXRvU3RhcnREZXRhaWxbJ1NvdXJjZVR5cGUnXTtcbiAgc291cmNlSWRlbnRpZmllcjogc3RyaW5nO1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgU2xhY2sgYGNoYXQucG9zdE1lc3NhZ2VgIHBheWxvYWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHN0b3AuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBDaGFubmVsIGFuZCByZXNvdXJjZSBpZGVudGl0eSBmaWVsZHMuXG4gKiBAcmV0dXJucyBBcmd1bWVudHMgc3VpdGFibGUgZm9yIGBXZWJDbGllbnQuY2hhdC5wb3N0TWVzc2FnZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbiA9IChhcmdzOiBTbGFja1N0b3BOb3RpZmljYXRpb25BcmdzKSA9PiAoe1xuICBjaGFubmVsOiBhcmdzLmNoYW5uZWwsXG4gIGF0dGFjaG1lbnRzOiBbXG4gICAge1xuICAgICAgY29sb3I6ICcjMzZhNjRmJyxcbiAgICAgIHByZXRleHQ6IGDwn5i0IFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBhdXRvbWF0aWNhbGx5IHJ1bm5pbmcgUkRTICR7YXJncy5zb3VyY2VUeXBlfSAke2FyZ3Muc291cmNlSWRlbnRpZmllcn0uYCxcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdBY2NvdW50JyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5hY2NvdW50LFxuICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdSZWdpb24nLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnJlZ2lvbixcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnVHlwZScsXG4gICAgICAgICAgdmFsdWU6IGFyZ3Muc291cmNlVHlwZSxcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnSWRlbnRpZmllcicsXG4gICAgICAgICAgdmFsdWU6IGFyZ3Muc291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbn0pO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc3VjY2VzcyByZXN1bHQgYWZ0ZXIgU3RvcERCKiByZWFjaGVkIGBzdG9wcGVkYC5cbiAqXG4gKiBAcGFyYW0gYXJncyAtIEZpbmFsIHN0YXR1cyBhbmQgaWRlbnRpdHkgZmllbGRzLlxuICogQHJldHVybnMgU3RvcHBlZFJlc3VsdCBmb3IgdGhlIGhhbmRsZXIgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRTdG9wcGVkUmVzdWx0ID0gKGFyZ3M6IHtcbiAgZmluYWxTdGF0dXM6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xufSk6IFN0b3BwZWRSZXN1bHQgPT4gKHtcbiAgYWN0aW9uOiAnc3RvcHBlZCcsXG4gIGZpbmFsU3RhdHVzOiBhcmdzLmZpbmFsU3RhdHVzLFxuICBhY2NvdW50OiBhcmdzLmFjY291bnQsXG4gIHJlZ2lvbjogYXJncy5yZWdpb24sXG4gIGlkZW50aWZpZXI6IGFyZ3MuaWRlbnRpZmllcixcbn0pO1xuIl19
|
package/lib/index.d.ts
CHANGED
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module rds-database-auto-start-preventer
|
|
9
9
|
*/
|
|
10
|
-
export * from './
|
|
11
|
-
export * from './
|
|
10
|
+
export * from './rds-database-auto-start-preventer';
|
|
11
|
+
export * from './rds-database-auto-start-prevent-stack';
|
package/lib/index.js
CHANGED
|
@@ -23,6 +23,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
*
|
|
24
24
|
* @module rds-database-auto-start-preventer
|
|
25
25
|
*/
|
|
26
|
-
__exportStar(require("./
|
|
27
|
-
__exportStar(require("./
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
__exportStar(require("./rds-database-auto-start-preventer"), exports);
|
|
27
|
+
__exportStar(require("./rds-database-auto-start-prevent-stack"), exports);
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsc0VBQW9EO0FBQ3BELDBFQUF3RCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUkRTIERhdGFiYXNlIEF1dG8gU3RhcnQgUHJldmVudGVyIOKAlCBDREsgY29uc3RydWN0IGxpYnJhcnkuXG4gKlxuICogU3RvcHMgUkRTIERCIGluc3RhbmNlcyBhbmQgY2x1c3RlcnMgYWZ0ZXIgQVdTIGF1dG8tc3RhcnQgZXZlbnRzLiBUaGUgaGFuZGxlclxuICogZmlsdGVycyBieSB0YWdzIGFuZCwgd2hlbiBhIFNsYWNrIHNlY3JldCBuYW1lIGlzIHNldCwgcG9zdHMgdG8gU2xhY2sgYWZ0ZXIgYVxuICogc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBtb2R1bGUgcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyJztcbmV4cG9ydCAqIGZyb20gJy4vcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjayc7XG4iXX0=
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import { Stack, StackProps } from 'aws-cdk-lib';
|
|
2
2
|
import { Construct } from 'constructs';
|
|
3
|
-
import {
|
|
3
|
+
import { RDSDatabaseAutoStartPreventerProps } from './rds-database-auto-start-preventer';
|
|
4
4
|
/**
|
|
5
5
|
* Props for the RDS database auto start prevent CDK stack.
|
|
6
6
|
*/
|
|
7
|
-
export interface RDSDatabaseAutoStartPreventStackProps extends StackProps {
|
|
8
|
-
/** Tag-based target resource criteria for RDS instances/clusters to protect. */
|
|
9
|
-
readonly targetResource: TargetResource;
|
|
10
|
-
/** Whether the EventBridge rules are enabled. Defaults to true if omitted. */
|
|
11
|
-
readonly enableRule?: boolean;
|
|
12
|
-
/** Secrets for notifications. Omit slackSecretName to skip Slack. */
|
|
13
|
-
readonly secrets: Secrets;
|
|
7
|
+
export interface RDSDatabaseAutoStartPreventStackProps extends RDSDatabaseAutoStartPreventerProps, StackProps {
|
|
14
8
|
}
|
|
15
9
|
/**
|
|
16
10
|
* CDK stack that deploys {@link RDSDatabaseAutoStartPreventer}.
|
|
@@ -0,0 +1,29 @@
|
|
|
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("./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.5.1" };
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBZ0Q7QUFFaEQsMkZBRzZDO0FBTzdDOztHQUVHO0FBQ0gsTUFBYSxnQ0FBaUMsU0FBUSxtQkFBSzs7SUFDekQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QztRQUNwRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLGlFQUE2QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRTtZQUN2RSxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWhCSCw0RUFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIsXG4gIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMsXG59IGZyb20gJy4vcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvIHN0YXJ0IHByZXZlbnQgQ0RLIHN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudFN0YWNrUHJvcHMgZXh0ZW5kcyBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlclByb3BzLCBTdGFja1Byb3BzIHt9XG5cbi8qKlxuICogQ0RLIHN0YWNrIHRoYXQgZGVwbG95cyB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzdGFjayBhbmQgdGhlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gU3RhY2sgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFN0YWNrIHByb3BzICh0YXJnZXQgcmVzb3VyY2UsIGVuYWJsZSBydWxlLCBzZWNyZXRzKS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIodGhpcywgJ1JEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyJywge1xuICAgICAgdGFyZ2V0UmVzb3VyY2U6IHByb3BzLnRhcmdldFJlc291cmNlLFxuICAgICAgZW5hYmxlUnVsZTogcHJvcHMuZW5hYmxlUnVsZSxcbiAgICAgIHNlY3JldHM6IHByb3BzLnNlY3JldHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -38,7 +38,8 @@ export interface RDSDatabaseAutoStartPreventerProps {
|
|
|
38
38
|
*
|
|
39
39
|
* EventBridge rules match all auto-start events; tag filtering runs in the handler
|
|
40
40
|
* using `TagList` from `rds:DescribeDBInstances` / `rds:DescribeDBClusters`.
|
|
41
|
-
* IAM grants
|
|
41
|
+
* IAM grants account/region-scoped describe on `db` / `cluster` ARNs, and stop only
|
|
42
|
+
* when `aws:ResourceTag` matches {@link TargetResource} (no Resource Groups Tagging API).
|
|
42
43
|
*/
|
|
43
44
|
export declare class RDSDatabaseAutoStartPreventer extends Construct {
|
|
44
45
|
/**
|