truemark-cdk-lib 0.0.3 → 0.0.6

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.
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./lib"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from './log-alarm';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./log-alarm"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xvZy1hbGFybSc7XG4iXX0=
@@ -0,0 +1,47 @@
1
+ import { Construct } from 'constructs';
2
+ import { Alarm, CreateAlarmOptions, IAlarmAction, IMetric } from 'aws-cdk-lib/aws-cloudwatch';
3
+ import { ILogGroup, MetricFilter } from 'aws-cdk-lib/aws-logs';
4
+ import { Duration } from 'aws-cdk-lib';
5
+ import { ITopic } from 'aws-cdk-lib/aws-sns';
6
+ /**
7
+ * Properties for LogAlarm
8
+ */
9
+ export interface LogAlarmProps extends CreateAlarmOptions {
10
+ /**
11
+ * The log group to watch.
12
+ *
13
+ * If not set, the alarm and metric are not created.
14
+ */
15
+ readonly logGroup: ILogGroup;
16
+ /**
17
+ * The log pattern to match.
18
+ */
19
+ readonly pattern: string;
20
+ /**
21
+ * The namespace of the metric to emit.
22
+ */
23
+ readonly metricNamespace?: string;
24
+ /**
25
+ * The name of the metric to emit.
26
+ *
27
+ * Default value is the id passed into the Construct.
28
+ */
29
+ readonly metricName?: string;
30
+ /**
31
+ * The period over which statistics are applied
32
+ *
33
+ * Default is 5 minutes.
34
+ */
35
+ readonly metricPeriod?: Duration;
36
+ }
37
+ /**
38
+ * Create a CloudWatch Alarm to trigger when log patterns are matched
39
+ */
40
+ export declare class LogAlarm extends Construct {
41
+ readonly alarm: Alarm;
42
+ readonly filter: MetricFilter;
43
+ readonly metric: IMetric;
44
+ constructor(scope: Construct, id: string, props: LogAlarmProps);
45
+ addAlarmActions(actions?: IAlarmAction[]): LogAlarm;
46
+ addAlarmTopics(topics?: ITopic[]): LogAlarm;
47
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogAlarm = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
6
+ const aws_logs_1 = require("aws-cdk-lib/aws-logs");
7
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
8
+ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
9
+ /**
10
+ * Create a CloudWatch Alarm to trigger when log patterns are matched
11
+ */
12
+ class LogAlarm extends constructs_1.Construct {
13
+ constructor(scope, id, props) {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h;
15
+ super(scope, id);
16
+ this.filter = new aws_logs_1.MetricFilter(this, (_a = props.metricName) !== null && _a !== void 0 ? _a : '' + 'Filter', {
17
+ logGroup: props.logGroup,
18
+ metricName: (_b = props.metricName) !== null && _b !== void 0 ? _b : id,
19
+ metricNamespace: (_c = props.metricNamespace) !== null && _c !== void 0 ? _c : 'TrueMark',
20
+ defaultValue: 0,
21
+ metricValue: "1",
22
+ filterPattern: {
23
+ logPatternString: props.pattern
24
+ }
25
+ });
26
+ this.metric = this.filter.metric({
27
+ statistic: 'Sum',
28
+ period: (_d = props.metricPeriod) !== null && _d !== void 0 ? _d : aws_cdk_lib_1.Duration.minutes(5),
29
+ });
30
+ this.alarm = new aws_cloudwatch_1.Alarm(this, (_e = props.metricName) !== null && _e !== void 0 ? _e : 'Alarm', {
31
+ metric: this.metric,
32
+ threshold: (_f = props.threshold) !== null && _f !== void 0 ? _f : 1,
33
+ comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
34
+ evaluationPeriods: props.evaluationPeriods,
35
+ datapointsToAlarm: (_g = props.datapointsToAlarm) !== null && _g !== void 0 ? _g : 1,
36
+ treatMissingData: (_h = props.treatMissingData) !== null && _h !== void 0 ? _h : aws_cloudwatch_1.TreatMissingData.MISSING
37
+ });
38
+ }
39
+ addAlarmActions(actions) {
40
+ actions === null || actions === void 0 ? void 0 : actions.forEach((action) => {
41
+ this.alarm.addAlarmAction(action);
42
+ });
43
+ return this;
44
+ }
45
+ addAlarmTopics(topics) {
46
+ topics === null || topics === void 0 ? void 0 : topics.forEach((topic) => {
47
+ this.alarm.addAlarmAction(new aws_cloudwatch_actions_1.SnsAction(topic));
48
+ });
49
+ return this;
50
+ }
51
+ }
52
+ exports.LogAlarm = LogAlarm;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWFsYXJtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nLWFsYXJtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFxQztBQUNyQywrREFPb0M7QUFDcEMsbURBQTZEO0FBQzdELDZDQUFxQztBQUVyQywrRUFBNkQ7QUF1QzdEOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFNckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjs7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksdUJBQVksQ0FBQyxJQUFJLFFBQUUsS0FBSyxDQUFDLFVBQVUsbUNBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRTtZQUNwRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsVUFBVSxRQUFFLEtBQUssQ0FBQyxVQUFVLG1DQUFFLEVBQUU7WUFDaEMsZUFBZSxRQUFFLEtBQUssQ0FBQyxlQUFlLG1DQUFFLFVBQVU7WUFDbEQsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsR0FBRztZQUNoQixhQUFhLEVBQUU7Z0JBQ2IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU87YUFDaEM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sUUFBRSxLQUFLLENBQUMsWUFBWSxtQ0FBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDaEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHNCQUFLLENBQUMsSUFBSSxRQUFFLEtBQUssQ0FBQyxVQUFVLG1DQUFFLE9BQU8sRUFBRTtZQUN0RCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsU0FBUyxRQUFFLEtBQUssQ0FBQyxTQUFTLG1DQUFFLENBQUM7WUFDN0Isa0JBQWtCLEVBQUUsbUNBQWtCLENBQUMsa0NBQWtDO1lBQ3pFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsaUJBQWlCLFFBQUUsS0FBSyxDQUFDLGlCQUFpQixtQ0FBRSxDQUFDO1lBQzdDLGdCQUFnQixRQUFFLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUUsaUNBQWdCLENBQUMsT0FBTztTQUNuRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQXdCO1FBQ3RDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDLEVBQUU7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBaUI7UUFDOUIsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksa0NBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ2pELENBQUMsRUFBRTtRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBL0NELDRCQStDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIEFsYXJtLFxuICBDb21wYXJpc29uT3BlcmF0b3IsXG4gIENyZWF0ZUFsYXJtT3B0aW9ucyxcbiAgSUFsYXJtQWN0aW9uLFxuICBJTWV0cmljLFxuICBUcmVhdE1pc3NpbmdEYXRhXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7SUxvZ0dyb3VwLCBNZXRyaWNGaWx0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7RHVyYXRpb259IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7SVRvcGljfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCB7U25zQWN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMb2dBbGFybVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0FsYXJtUHJvcHMgZXh0ZW5kcyBDcmVhdGVBbGFybU9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIHdhdGNoLlxuICAgKlxuICAgKiBJZiBub3Qgc2V0LCB0aGUgYWxhcm0gYW5kIG1ldHJpYyBhcmUgbm90IGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwLFxuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHBhdHRlcm4gdG8gbWF0Y2guXG4gICAqL1xuICByZWFkb25seSBwYXR0ZXJuOiBzdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1ldHJpYyB0byBlbWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljTmFtZXNwYWNlPzogc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWV0cmljIHRvIGVtaXQuXG4gICAqXG4gICAqIERlZmF1bHQgdmFsdWUgaXMgdGhlIGlkIHBhc3NlZCBpbnRvIHRoZSBDb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNOYW1lPzogc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgcGVyaW9kIG92ZXIgd2hpY2ggc3RhdGlzdGljcyBhcmUgYXBwbGllZFxuICAgKlxuICAgKiBEZWZhdWx0IGlzIDUgbWludXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY1BlcmlvZD86IER1cmF0aW9uXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBBbGFybSB0byB0cmlnZ2VyIHdoZW4gbG9nIHBhdHRlcm5zIGFyZSBtYXRjaGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dBbGFybSBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgcmVhZG9ubHkgYWxhcm06IEFsYXJtO1xuICByZWFkb25seSBmaWx0ZXI6IE1ldHJpY0ZpbHRlcjtcbiAgcmVhZG9ubHkgbWV0cmljOiBJTWV0cmljO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMb2dBbGFybVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmZpbHRlciA9IG5ldyBNZXRyaWNGaWx0ZXIodGhpcywgcHJvcHMubWV0cmljTmFtZT8/JycgKyAnRmlsdGVyJywge1xuICAgICAgbG9nR3JvdXA6IHByb3BzLmxvZ0dyb3VwLFxuICAgICAgbWV0cmljTmFtZTogcHJvcHMubWV0cmljTmFtZT8/aWQsXG4gICAgICBtZXRyaWNOYW1lc3BhY2U6IHByb3BzLm1ldHJpY05hbWVzcGFjZT8/J1RydWVNYXJrJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIG1ldHJpY1ZhbHVlOiBcIjFcIixcbiAgICAgIGZpbHRlclBhdHRlcm46IHtcbiAgICAgICAgbG9nUGF0dGVyblN0cmluZzogcHJvcHMucGF0dGVyblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXRyaWMgPSB0aGlzLmZpbHRlci5tZXRyaWMoe1xuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljUGVyaW9kPz9EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hbGFybSA9IG5ldyBBbGFybSh0aGlzLCBwcm9wcy5tZXRyaWNOYW1lPz8nQWxhcm0nLCB7XG4gICAgICBtZXRyaWM6IHRoaXMubWV0cmljLFxuICAgICAgdGhyZXNob2xkOiBwcm9wcy50aHJlc2hvbGQ/PzEsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IHByb3BzLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgZGF0YXBvaW50c1RvQWxhcm06IHByb3BzLmRhdGFwb2ludHNUb0FsYXJtPz8xLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogcHJvcHMudHJlYXRNaXNzaW5nRGF0YT8/VHJlYXRNaXNzaW5nRGF0YS5NSVNTSU5HXG4gICAgfSk7XG4gIH1cblxuICBhZGRBbGFybUFjdGlvbnMoYWN0aW9ucz86IElBbGFybUFjdGlvbltdKTogTG9nQWxhcm0ge1xuICAgIGFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgdGhpcy5hbGFybS5hZGRBbGFybUFjdGlvbihhY3Rpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQWxhcm1Ub3BpY3ModG9waWNzPzogSVRvcGljW10pOiBMb2dBbGFybSB7XG4gICAgdG9waWNzPy5mb3JFYWNoKCh0b3BpYykgPT4ge1xuICAgICAgdGhpcy5hbGFybS5hZGRBbGFybUFjdGlvbihuZXcgU25zQWN0aW9uKHRvcGljKSlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./lib"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from './standard-functions';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./standard-functions"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3N0YW5kYXJkLWZ1bmN0aW9ucyc7XG4iXX0=
@@ -0,0 +1,217 @@
1
+ import { Architecture, Function, Runtime, Tracing } from 'aws-cdk-lib/aws-lambda';
2
+ import { Construct } from 'constructs';
3
+ import * as logs from 'aws-cdk-lib/aws-logs';
4
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
5
+ import { Duration } from 'aws-cdk-lib';
6
+ import { IDashboardFactory, MonitoringFacade } from 'cdk-monitoring-constructs';
7
+ import { ITopic } from 'aws-cdk-lib/aws-sns';
8
+ import { IAlarmAction } from 'aws-cdk-lib/aws-cloudwatch';
9
+ import { LogAlarm } from '../../aws-cloudwatch';
10
+ export interface StandardFunctionAlarmProps {
11
+ /**
12
+ * Maximum 50th percentile latency
13
+ */
14
+ readonly p50Latency?: Duration;
15
+ /**
16
+ * Maximum 90th percentile latency
17
+ */
18
+ readonly p90Latency?: Duration;
19
+ /**
20
+ * Maximum 99th percentile latency
21
+ */
22
+ readonly p99Latency?: Duration;
23
+ /**
24
+ * Maximum number of faults
25
+ *
26
+ * @default 0
27
+ */
28
+ readonly maxFaults?: number;
29
+ /**
30
+ * Average number of faults
31
+ */
32
+ readonly avgFaults?: number;
33
+ /**
34
+ * Minimum transactions
35
+ */
36
+ readonly minTps?: number;
37
+ /**
38
+ * Maximum transactions
39
+ */
40
+ readonly maxTps?: number;
41
+ /**
42
+ * Maximum number of throttles
43
+ *
44
+ * @default 0
45
+ */
46
+ readonly maxThrottles?: number;
47
+ /**
48
+ * Average number of throttles
49
+ */
50
+ readonly avgThrottles?: number;
51
+ /**
52
+ * Maximum concurrent executions
53
+ */
54
+ readonly maxConcurrentExecutions?: number;
55
+ /**
56
+ * Amount of time data waits before being processed by the function.
57
+ * See https://aws.amazon.com/premiumsupport/knowledge-center/lambda-iterator-age/
58
+ */
59
+ readonly maxIteratorAge?: number;
60
+ /**
61
+ * Maximum amount of CPU time
62
+ */
63
+ readonly maxCpuTime?: Duration;
64
+ /**
65
+ * 90th percentile CPU time
66
+ */
67
+ readonly p90CpuTime?: Duration;
68
+ /**
69
+ * Average CPU time
70
+ */
71
+ readonly avgCpuTime?: Duration;
72
+ /**
73
+ * Maximum amount of memory
74
+ */
75
+ readonly maxMemory?: number;
76
+ /**
77
+ * 90th percentile memory
78
+ */
79
+ readonly p90Memory?: number;
80
+ /**
81
+ * Average memory
82
+ */
83
+ readonly avgMemory?: number;
84
+ /**
85
+ * Topics to send alarm notifications
86
+ */
87
+ readonly notifyTopics?: [ITopic];
88
+ /**
89
+ * Actions to send alarm notifications
90
+ */
91
+ readonly notifyActions?: [IAlarmAction];
92
+ /**
93
+ * Log pattern to match for metrics.
94
+ *
95
+ * @default '\\\[ERROR\\\]'
96
+ */
97
+ readonly metricLogPattern?: string;
98
+ /**
99
+ * Log pattern to match for the dashboard
100
+ *
101
+ * @default '"[ERROR]"'
102
+ */
103
+ readonly dashboardLogPattern?: string;
104
+ /**
105
+ * Maximum number of log events matching the pattern.
106
+ *
107
+ * @default 0 for Critical Alarm
108
+ */
109
+ readonly maxLogCount?: number;
110
+ }
111
+ export interface StandardFunctionProps {
112
+ /**
113
+ * Enable AWS X-Ray Tracing.
114
+ *
115
+ * @default Tracing.PASS_THROUGH
116
+ */
117
+ readonly tracing?: Tracing;
118
+ /**
119
+ * The number of days to retain logs.
120
+ *
121
+ * @default logs.RetentionDays.THREE_DAYS
122
+ */
123
+ readonly logRetention?: logs.RetentionDays;
124
+ /**
125
+ * The system architecture.
126
+ *
127
+ * @default Architecture.ARM_64
128
+ */
129
+ readonly architecture?: Architecture;
130
+ /**
131
+ * VPC network to place the lambda network interfaces
132
+ *
133
+ * @default - not placed in a VPC
134
+ */
135
+ readonly vpc?: ec2.IVpc;
136
+ /**
137
+ * Where to place the lambda inside the VPC. Only used if 'vpc' is supplied.
138
+ *
139
+ * @default - VPC default strategy is used if not specified
140
+ */
141
+ readonly vpcSubnets?: ec2.SubnetSelection;
142
+ /**
143
+ * Amount of memory in MB and proportionally CPU power to allocate.
144
+ *
145
+ * @default 768
146
+ */
147
+ readonly memorySize?: number;
148
+ /**
149
+ * Function execution time (in seconds) after which the Lambda terminates.
150
+ *
151
+ * @default Duration.seconds(30)
152
+ */
153
+ readonly timeout?: Duration;
154
+ /**
155
+ * Environment variables to make available.
156
+ */
157
+ readonly environment?: {
158
+ [key: string]: string;
159
+ };
160
+ /**
161
+ * A description of the function
162
+ */
163
+ readonly description?: string;
164
+ /**
165
+ * The DashboardFactory to use when generating CloudWatch dashboards.
166
+ *
167
+ * If not defined, dashboards are not generated.
168
+ */
169
+ readonly dashboardFactory?: IDashboardFactory;
170
+ /**
171
+ * Alarm thresholds for critical alarms.
172
+ *
173
+ * If no properties are provided, a set of default alarms are created.
174
+ */
175
+ readonly criticalAlarmProps?: StandardFunctionAlarmProps;
176
+ /**
177
+ * Alarm threshold for warning alarms.
178
+ *
179
+ * If no properties are provided, a set of default alarms are created.
180
+ */
181
+ readonly warningAlarmProps?: StandardFunctionAlarmProps;
182
+ }
183
+ export interface PythonFunctionProps extends StandardFunctionProps {
184
+ /**
185
+ * The runtime environment for the Lambda function. Must be one of the Python runtimes.
186
+ *
187
+ * @default Runtime.PYTHON_3_9
188
+ */
189
+ readonly runtime?: Runtime;
190
+ /**
191
+ * Location on the filesystem the Lambda assets are found.
192
+ *
193
+ * Example: path.join(__dirname, '..', 'mylambda')
194
+ */
195
+ readonly entry: string;
196
+ /**
197
+ * File containing the handler.
198
+ *
199
+ * @default 'index.py'
200
+ */
201
+ readonly index?: string;
202
+ /**
203
+ * Exported handler function
204
+ *
205
+ * @default 'handler'
206
+ */
207
+ readonly handler?: string;
208
+ }
209
+ export declare class PythonFunction extends Construct {
210
+ static readonly DEFAULT_LOG_METRIC_PATTERN = "\"[ERROR]\"";
211
+ static readonly DEFAULT_LOG_INSIGHTS_PATTERN = "\\[ERROR\\]";
212
+ readonly monitoring: MonitoringFacade;
213
+ readonly function: Function;
214
+ readonly criticalLogAlarm: LogAlarm;
215
+ readonly warningLogAlarm: LogAlarm;
216
+ constructor(scope: Construct, id: string, props: PythonFunctionProps);
217
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PythonFunction = void 0;
4
+ const fs = require("fs");
5
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
+ const constructs_1 = require("constructs");
7
+ const logs = require("aws-cdk-lib/aws-logs");
8
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
9
+ const cdk_monitoring_constructs_1 = require("cdk-monitoring-constructs");
10
+ const aws_cloudwatch_1 = require("../../aws-cloudwatch");
11
+ const aws_monitoring_1 = require("../../aws-monitoring");
12
+ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
+ const path = require("path");
14
+ function toAlarmProps(prop, warningThreshold, criticalThreshold, warningAlarmActions, criticalAlarmActions, warningDefaultThreshold, criticalDefaultThreshold) {
15
+ let alarmProps = {};
16
+ if (criticalThreshold !== undefined) {
17
+ alarmProps.Critical = {
18
+ [prop]: criticalThreshold,
19
+ actionsEnabled: true,
20
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
21
+ };
22
+ }
23
+ else if (criticalDefaultThreshold !== undefined) {
24
+ alarmProps.Critical = {
25
+ [prop]: criticalDefaultThreshold,
26
+ actionsEnabled: true,
27
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
28
+ };
29
+ }
30
+ if (warningThreshold !== undefined) {
31
+ alarmProps.Warning = {
32
+ [prop]: warningThreshold,
33
+ actionsEnabled: true,
34
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
35
+ };
36
+ }
37
+ else if (warningDefaultThreshold !== undefined) {
38
+ alarmProps.Warning = {
39
+ [prop]: warningDefaultThreshold,
40
+ actionsEnabled: true,
41
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
42
+ };
43
+ }
44
+ return Object.keys(alarmProps).length > 0 ? alarmProps : undefined;
45
+ }
46
+ class PythonFunction extends constructs_1.Construct {
47
+ constructor(scope, id, props) {
48
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
49
+ super(scope, id);
50
+ this.monitoring = new cdk_monitoring_constructs_1.MonitoringFacade(this, 'Monitoring', {
51
+ metricFactoryDefaults: {},
52
+ alarmFactoryDefaults: {
53
+ actionsEnabled: true,
54
+ alarmNamePrefix: scope.node.path.replace(/\//g, '-'),
55
+ },
56
+ dashboardFactory: props.dashboardFactory
57
+ });
58
+ let bundling = fs.existsSync(path.join(props.entry, 'requirements.txt')) ? {
59
+ image: (_b = (_a = props.runtime) === null || _a === void 0 ? void 0 : _a.bundlingImage) !== null && _b !== void 0 ? _b : aws_lambda_1.Runtime.PYTHON_3_9.bundlingImage,
60
+ command: [
61
+ 'bash', '-c', [
62
+ 'pip install --target /asset-output/ -r requirements.txt',
63
+ 'cp -ra * /asset-output/'
64
+ ].join('&&')
65
+ ],
66
+ outputType: aws_cdk_lib_1.BundlingOutput.NOT_ARCHIVED,
67
+ } : undefined;
68
+ this.function = new aws_lambda_1.Function(this, id, {
69
+ runtime: (_c = props.runtime) !== null && _c !== void 0 ? _c : aws_lambda_1.Runtime.PYTHON_3_9,
70
+ tracing: (_d = props.tracing) !== null && _d !== void 0 ? _d : aws_lambda_1.Tracing.PASS_THROUGH,
71
+ logRetention: (_e = props.logRetention) !== null && _e !== void 0 ? _e : logs.RetentionDays.THREE_DAYS,
72
+ architecture: (_f = props.architecture) !== null && _f !== void 0 ? _f : aws_lambda_1.Architecture.ARM_64,
73
+ vpc: props.vpc,
74
+ vpcSubnets: props.vpcSubnets,
75
+ memorySize: (_g = props.memorySize) !== null && _g !== void 0 ? _g : 768,
76
+ timeout: (_h = props.timeout) !== null && _h !== void 0 ? _h : aws_cdk_lib_1.Duration.seconds(30),
77
+ environment: props.environment,
78
+ description: props.description,
79
+ code: aws_lambda_1.Code.fromAsset(props.entry, { bundling }),
80
+ handler: ((_j = props.index) !== null && _j !== void 0 ? _j : 'index.py').replace('.py', '') + '.' + ((_k = props.handler) !== null && _k !== void 0 ? _k : 'handler')
81
+ });
82
+ const warnProps = props.warningAlarmProps;
83
+ const warnActions = [];
84
+ (_l = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyActions) === null || _l === void 0 ? void 0 : _l.forEach((action) => warnActions.push(action));
85
+ (_m = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyTopics) === null || _m === void 0 ? void 0 : _m.forEach((topic) => warnActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
86
+ const critProps = props.criticalAlarmProps;
87
+ const critActions = [];
88
+ (_o = critProps === null || critProps === void 0 ? void 0 : critProps.notifyActions) === null || _o === void 0 ? void 0 : _o.forEach((action) => critActions.push(action));
89
+ (_p = critProps === null || critProps === void 0 ? void 0 : critProps.notifyTopics) === null || _p === void 0 ? void 0 : _p.forEach((topic) => critActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
90
+ this.monitoring.monitorLambdaFunction({
91
+ lambdaFunction: this.function,
92
+ lambdaInsightsEnabled: true,
93
+ addToAlarmDashboard: true,
94
+ addToDetailDashboard: true,
95
+ addToSummaryDashboard: true,
96
+ addLatencyP50Alarm: toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p50Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p50Latency, warnActions, critActions),
97
+ addLatencyP90Alarm: toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p90Latency, warnActions, critActions),
98
+ addLatencyP99Alarm: toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p99Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p99Latency, warnActions, critActions),
99
+ addFaultCountAlarm: toAlarmProps('maxErrorCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxFaults, critProps === null || critProps === void 0 ? void 0 : critProps.maxFaults, warnActions, critActions, undefined, 0),
100
+ addFaultRateAlarm: toAlarmProps('maxErrorRate', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgFaults, critProps === null || critProps === void 0 ? void 0 : critProps.avgFaults, warnActions, critActions),
101
+ addLowTpsAlarm: toAlarmProps('minTps', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minTps, critProps === null || critProps === void 0 ? void 0 : critProps.minTps, warnActions, critActions),
102
+ addHighTpsAlarm: toAlarmProps('maxTps', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTps, critProps === null || critProps === void 0 ? void 0 : critProps.maxTps, warnActions, critActions),
103
+ addThrottlesCountAlarm: toAlarmProps('maxErrorCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxThrottles, critProps === null || critProps === void 0 ? void 0 : critProps.maxThrottles, warnActions, critActions, undefined, 0),
104
+ addThrottlesRateAlarm: toAlarmProps('maxErrorRate', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgThrottles, critProps === null || critProps === void 0 ? void 0 : critProps.avgThrottles, warnActions, critActions),
105
+ addConcurrentExecutionsCountAlarm: toAlarmProps('maxRunningTasks', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxConcurrentExecutions, critProps === null || critProps === void 0 ? void 0 : critProps.maxConcurrentExecutions, warnActions, critActions),
106
+ addMaxIteratorAgeAlarm: toAlarmProps('maxAgeInMillis', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIteratorAge, critProps === null || critProps === void 0 ? void 0 : critProps.maxIteratorAge, warnActions, critActions),
107
+ addEnhancedMonitoringMaxCpuTotalTimeAlarm: toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxCpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.maxCpuTime, warnActions, critActions),
108
+ addEnhancedMonitoringP90CpuTotalTimeAlarm: toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90CpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.p90CpuTime, warnActions, critActions),
109
+ addEnhancedMonitoringAvgCpuTotalTimeAlarm: toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgCpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.avgCpuTime, warnActions, critActions),
110
+ addEnhancedMonitoringMaxMemoryUtilizationAlarm: toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxMemory, critProps === null || critProps === void 0 ? void 0 : critProps.maxMemory, warnActions, critActions),
111
+ addEnhancedMonitoringP90MemoryUtilizationAlarm: toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90Memory, critProps === null || critProps === void 0 ? void 0 : critProps.p90Memory, warnActions, critActions),
112
+ addEnhancedMonitoringAvgMemoryUtilizationAlarm: toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgMemory, critProps === null || critProps === void 0 ? void 0 : critProps.avgMemory, warnActions, critActions),
113
+ });
114
+ // Add log monitoring to dashboard
115
+ let critMaxLogCount = (_r = (_q = props.criticalAlarmProps) === null || _q === void 0 ? void 0 : _q.maxLogCount) !== null && _r !== void 0 ? _r : 1;
116
+ let pattern = '';
117
+ if (critMaxLogCount > 0) {
118
+ pattern = (_t = (_s = props.criticalAlarmProps) === null || _s === void 0 ? void 0 : _s.dashboardLogPattern) !== null && _t !== void 0 ? _t : PythonFunction.DEFAULT_LOG_INSIGHTS_PATTERN;
119
+ }
120
+ if (((_u = props.warningAlarmProps) === null || _u === void 0 ? void 0 : _u.maxLogCount) !== undefined && pattern !== props.warningAlarmProps.dashboardLogPattern) {
121
+ pattern += (pattern !== '' ? '|' : '') + props.warningAlarmProps.dashboardLogPattern;
122
+ }
123
+ if (pattern !== '') {
124
+ this.monitoring.monitorLog({
125
+ logGroupName: this.function.logGroup.logGroupName,
126
+ pattern,
127
+ });
128
+ }
129
+ // Add critical log alarm
130
+ if (critMaxLogCount > 0) {
131
+ this.criticalLogAlarm = new aws_cloudwatch_1.LogAlarm(this, 'LogsCritical', {
132
+ logGroup: this.function.logGroup,
133
+ pattern: (_w = (_v = props.criticalAlarmProps) === null || _v === void 0 ? void 0 : _v.metricLogPattern) !== null && _w !== void 0 ? _w : PythonFunction.DEFAULT_LOG_METRIC_PATTERN,
134
+ threshold: critMaxLogCount,
135
+ evaluationPeriods: 3
136
+ });
137
+ if (((_x = props.criticalAlarmProps) === null || _x === void 0 ? void 0 : _x.notifyActions) !== undefined) {
138
+ this.criticalLogAlarm.addAlarmActions(props.criticalAlarmProps.notifyActions);
139
+ }
140
+ if (((_y = props.criticalAlarmProps) === null || _y === void 0 ? void 0 : _y.notifyTopics) !== undefined) {
141
+ this.criticalLogAlarm.addAlarmTopics(props.criticalAlarmProps.notifyTopics);
142
+ }
143
+ }
144
+ // Add warning log alarm
145
+ if (((_z = props.warningAlarmProps) === null || _z === void 0 ? void 0 : _z.maxLogCount) !== undefined && props.warningAlarmProps.maxLogCount > 0) {
146
+ this.warningLogAlarm = new aws_cloudwatch_1.LogAlarm(this, 'LogsWarning', {
147
+ logGroup: this.function.logGroup,
148
+ pattern: (_1 = (_0 = props.warningAlarmProps) === null || _0 === void 0 ? void 0 : _0.metricLogPattern) !== null && _1 !== void 0 ? _1 : PythonFunction.DEFAULT_LOG_METRIC_PATTERN,
149
+ threshold: props.warningAlarmProps.maxLogCount,
150
+ evaluationPeriods: 3
151
+ });
152
+ if (((_2 = props.warningAlarmProps) === null || _2 === void 0 ? void 0 : _2.notifyActions) !== undefined) {
153
+ this.warningLogAlarm.addAlarmActions(props.warningAlarmProps.notifyActions);
154
+ }
155
+ if (((_3 = props.warningAlarmProps) === null || _3 === void 0 ? void 0 : _3.notifyTopics) !== undefined) {
156
+ this.warningLogAlarm.addAlarmTopics(props.warningAlarmProps.notifyTopics);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ exports.PythonFunction = PythonFunction;
162
+ PythonFunction.DEFAULT_LOG_METRIC_PATTERN = '"[ERROR]"';
163
+ PythonFunction.DEFAULT_LOG_INSIGHTS_PATTERN = '\\\[ERROR\\\]';
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhbmRhcmQtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qix1REFBc0Y7QUFDdEYsMkNBQXFDO0FBQ3JDLDZDQUE2QztBQUU3Qyw2Q0FBc0U7QUFDdEUseUVBYW1DO0FBR25DLHlEQUE4QztBQUM5Qyx5REFBa0U7QUFDbEUsK0VBQTZEO0FBQzdELDZCQUE2QjtBQWtQN0IsU0FBUyxZQUFZLENBQ25CLElBQVksRUFDWixnQkFBb0MsRUFDcEMsaUJBQXFDLEVBQ3JDLG1CQUFvQyxFQUNwQyxvQkFBcUMsRUFDckMsdUJBQTJDLEVBQzNDLHdCQUE0QztJQUU1QyxJQUFJLFVBQVUsR0FBeUMsRUFBRSxDQUFBO0lBQ3pELElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO1FBQ25DLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUI7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUksNkNBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsQ0FBQztTQUNsRixDQUFBO0tBQ0Y7U0FBTSxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtRQUNqRCxVQUFVLENBQUMsUUFBUSxHQUFHO1lBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsd0JBQXdCO1lBQ2hDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGNBQWMsRUFBRSxJQUFJLDZDQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFDLENBQUM7U0FDbEYsQ0FBQTtLQUNGO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRztZQUNuQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQjtZQUN4QixjQUFjLEVBQUUsSUFBSTtZQUNwQixjQUFjLEVB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QzthQUM3RTtTQUNGO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksT0FBQSxLQUFLLENBQUMsaUJBQWlCLDBDQUFFLFdBQVcsTUFBSyxTQUFTLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDakcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLHlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtnQkFDdkQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtnQkFDaEMsT0FBTyxjQUFFLEtBQUssQ0FBQyxpQkFBaUIsMENBQUUsZ0JBQWdCLG1DQUFFLGNBQWMsQ0FBQywwQkFBMEI7Z0JBQzdGLFNBQVMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDOUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNyQixDQUFDLENBQUM7WUFDSCxJQUFJLE9BQUEsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxhQUFhLE1BQUssU0FBUyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDN0U7WUFDRCxJQUFJLE9BQUEsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxZQUFZLE1BQUssU0FBUyxFQUFFO2dCQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDM0U7U0FDRjtJQUNILENBQUM7O0FBaElILHdDQWlJQztBQS9IaUIseUNBQTBCLEdBQUcsV0FBVyxDQUFDO0FBQ3pDLDJDQUE0QixHQUFHLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSwgVHJhY2luZ30gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7QnVuZGxpbmdPcHRpb25zLCBCdW5kbGluZ091dHB1dCwgRHVyYXRpb259IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIEN1c3RvbUFsYXJtVGhyZXNob2xkLFxuICBEdXJhdGlvblRocmVzaG9sZCxcbiAgRXJyb3JDb3VudFRocmVzaG9sZCxcbiAgRXJyb3JSYXRlVGhyZXNob2xkLFxuICBIaWdoVHBzVGhyZXNob2xkLFxuICBJRGFzaGJvYXJkRmFjdG9yeSxcbiAgTGF0ZW5jeVRocmVzaG9sZCxcbiAgTG93VHBzVGhyZXNob2xkLFxuICBNYXhBZ2VUaHJlc2hvbGQsXG4gIE1vbml0b3JpbmdGYWNhZGUsXG4gIFJ1bm5pbmdUYXNrQ291bnRUaHJlc2hvbGQsXG4gIFVzYWdlVGhyZXNob2xkLFxufSBmcm9tICdjZGstbW9uaXRvcmluZy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7SVRvcGljfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCB7SUFsYXJtQWN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge0xvZ0FsYXJtfSBmcm9tICcuLi8uLi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge1N0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3l9IGZyb20gJy4uLy4uL2F3cy1tb25pdG9yaW5nJztcbmltcG9ydCB7U25zQWN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gtYWN0aW9uc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkRnVuY3Rpb25BbGFybVByb3BzIHtcblxuICAvKipcbiAgICogTWF4aW11bSA1MHRoIHBlcmNlbnRpbGUgbGF0ZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgcDUwTGF0ZW5jeT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIDkwdGggcGVyY2VudGlsZSBsYXRlbmN5XG4gICAqL1xuICByZWFkb25seSBwOTBMYXRlbmN5PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIE1heGltdW0gOTl0aCBwZXJjZW50aWxlIGxhdGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IHA5OUxhdGVuY3k/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgZmF1bHRzXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1heEZhdWx0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQXZlcmFnZSBudW1iZXIgb2YgZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBhdmdGYXVsdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gdHJhbnNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBtaW5UcHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gdHJhbnNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBtYXhUcHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHRocm90dGxlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICByZWFkb25seSBtYXhUaHJvdHRsZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF2ZXJhZ2UgbnVtYmVyIG9mIHRocm90dGxlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXZnVGhyb3R0bGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGNvbmN1cnJlbnQgZXhlY3V0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIGRhdGEgd2FpdHMgYmVmb3JlIGJlaW5nIHByb2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24uXG4gICAqIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL3ByZW1pdW1zdXBwb3J0L2tub3dsZWRnZS1jZW50ZXIvbGFtYmRhLWl0ZXJhdG9yLWFnZS9cbiAgICovXG4gIHJlYWRvbmx5IG1heEl0ZXJhdG9yQWdlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFtb3VudCBvZiBDUFUgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q3B1VGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiA5MHRoIHBlcmNlbnRpbGUgQ1BVIHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHA5MENwdVRpbWU/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQXZlcmFnZSBDUFUgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZnQ3B1VGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnlcbiAgICovXG4gIHJlYWRvbmx5IG1heE1lbW9yeT86IG51bWJlcjtcblxuICAvKipcbiAgICogOTB0aCBwZXJjZW50aWxlIG1lbW9yeVxuICAgKi9cbiAgcmVhZG9ubHkgcDkwTWVtb3J5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBdmVyYWdlIG1lbW9yeVxuICAgKi9cbiAgcmVhZG9ubHkgYXZnTWVtb3J5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUb3BpY3MgdG8gc2VuZCBhbGFybSBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZnlUb3BpY3M/OiBbSVRvcGljXTtcblxuICAvKipcbiAgICogQWN0aW9ucyB0byBzZW5kIGFsYXJtIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmeUFjdGlvbnM/OiBbSUFsYXJtQWN0aW9uXTtcblxuICAvKipcbiAgICogTG9nIHBhdHRlcm4gdG8gbWF0Y2ggZm9yIG1ldHJpY3MuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdcXFxcXFxbRVJST1JcXFxcXFxdJ1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljTG9nUGF0dGVybj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBMb2cgcGF0dGVybiB0byBtYXRjaCBmb3IgdGhlIGRhc2hib2FyZFxuICAgKlxuICAgKiBAZGVmYXVsdCAnXCJbRVJST1JdXCInXG4gICAqL1xuICByZWFkb25seSBkYXNoYm9hcmRMb2dQYXR0ZXJuPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGxvZyBldmVudHMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4uXG4gICAqXG4gICAqIEBkZWZhdWx0IDAgZm9yIENyaXRpY2FsIEFsYXJtXG4gICAqL1xuICByZWFkb25seSBtYXhMb2dDb3VudD86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkRnVuY3Rpb25Qcm9wcyB7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBBV1MgWC1SYXkgVHJhY2luZy5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhY2luZy5QQVNTX1RIUk9VR0hcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmc/OiBUcmFjaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5USFJFRV9EQVlTXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuQVJNXzY0XG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBsYW1iZGEgbmV0d29yayBpbnRlcmZhY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHBsYWNlZCBpbiBhIFZQQ1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBsYW1iZGEgaW5zaWRlIHRoZSBWUEMuIE9ubHkgdXNlZCBpZiAndnBjJyBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBWUEMgZGVmYXVsdCBzdHJhdGVneSBpcyB1c2VkIGlmIG5vdCBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgbWVtb3J5IGluIE1CIGFuZCBwcm9wb3J0aW9uYWxseSBDUFUgcG93ZXIgdG8gYWxsb2NhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDc2OFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gZXhlY3V0aW9uIHRpbWUgKGluIHNlY29uZHMpIGFmdGVyIHdoaWNoIHRoZSBMYW1iZGEgdGVybWluYXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG1ha2UgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBEYXNoYm9hcmRGYWN0b3J5IHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgQ2xvdWRXYXRjaCBkYXNoYm9hcmRzLlxuICAgKlxuICAgKiBJZiBub3QgZGVmaW5lZCwgZGFzaGJvYXJkcyBhcmUgbm90IGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRhc2hib2FyZEZhY3Rvcnk/OiBJRGFzaGJvYXJkRmFjdG9yeTtcblxuICAvKipcbiAgICogQWxhcm0gdGhyZXNob2xkcyBmb3IgY3JpdGljYWwgYWxhcm1zLlxuICAgKlxuICAgKiBJZiBubyBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCwgYSBzZXQgb2YgZGVmYXVsdCBhbGFybXMgYXJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBjcml0aWNhbEFsYXJtUHJvcHM/OiBTdGFuZGFyZEZ1bmN0aW9uQWxhcm1Qcm9wcztcblxuICAvKipcbiAgICogQWxhcm0gdGhyZXNob2xkIGZvciB3YXJuaW5nIGFsYXJtcy5cbiAgICpcbiAgICogSWYgbm8gcHJvcGVydGllcyBhcmUgcHJvdmlkZWQsIGEgc2V0IG9mIGRlZmF1bHQgYWxhcm1zIGFyZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgd2FybmluZ0FsYXJtUHJvcHM/OiBTdGFuZGFyZEZ1bmN0aW9uQWxhcm1Qcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25GdW5jdGlvblByb3BzIGV4dGVuZHMgU3RhbmRhcmRGdW5jdGlvblByb3BzIHtcblxuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24uIE11c3QgYmUgb25lIG9mIHRoZSBQeXRob24gcnVudGltZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJ1bnRpbWUuUFlUSE9OXzNfOVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9uIHRoZSBmaWxlc3lzdGVtIHRoZSBMYW1iZGEgYXNzZXRzIGFyZSBmb3VuZC5cbiAgICpcbiAgICogRXhhbXBsZTogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ215bGFtYmRhJylcbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5OiBzdHJpbmdcblxuICAvKipcbiAgICogRmlsZSBjb250YWluaW5nIHRoZSBoYW5kbGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaW5kZXgucHknXG4gICAqL1xuICByZWFkb25seSBpbmRleD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFeHBvcnRlZCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdoYW5kbGVyJ1xuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcj86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiB0b0FsYXJtUHJvcHMoXG4gIHByb3A6IHN0cmluZyxcbiAgd2FybmluZ1RocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uLFxuICBjcml0aWNhbFRocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uLFxuICB3YXJuaW5nQWxhcm1BY3Rpb25zPzogSUFsYXJtQWN0aW9uW10sXG4gIGNyaXRpY2FsQWxhcm1BY3Rpb25zPzogSUFsYXJtQWN0aW9uW10sXG4gIHdhcm5pbmdEZWZhdWx0VGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb24sXG4gIGNyaXRpY2FsRGVmYXVsdFRocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BbGFybVRocmVzaG9sZD4gfCB1bmRlZmluZWQge1xuICBsZXQgYWxhcm1Qcm9wczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWxhcm1UaHJlc2hvbGQ+ID0ge31cbiAgaWYgKGNyaXRpY2FsVGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICBhbGFybVByb3BzLkNyaXRpY2FsID0ge1xuICAgICAgW3Byb3BdOiBjcml0aWNhbFRocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiBjcml0aWNhbEFsYXJtQWN0aW9uc30pXG4gICAgfVxuICB9IGVsc2UgaWYgKGNyaXRpY2FsRGVmYXVsdFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5Dcml0aWNhbCA9IHtcbiAgICAgIFtwcm9wXTogY3JpdGljYWxEZWZhdWx0VGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IGNyaXRpY2FsQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH1cbiAgaWYgKHdhcm5pbmdUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuV2FybmluZyA9IHtcbiAgICAgIFtwcm9wXTogd2FybmluZ1RocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiB3YXJuaW5nQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAod2FybmluZ0RlZmF1bHRUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuV2FybmluZyA9IHtcbiAgICAgIFtwcm9wXTogd2FybmluZ0RlZmF1bHRUaHJlc2hvbGQsXG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbk92ZXJyaWRlOiBuZXcgU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneSh7YWN0aW9uczogd2FybmluZ0FsYXJtQWN0aW9uc30pXG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhhbGFybVByb3BzKS5sZW5ndGggPiAwID8gYWxhcm1Qcm9wcyA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY2xhc3MgUHl0aG9uRnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR19NRVRSSUNfUEFUVEVSTiA9ICdcIltFUlJPUl1cIic7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR19JTlNJR0hUU19QQVRURVJOID0gJ1xcXFxcXFtFUlJPUlxcXFxcXF0nO1xuICByZWFkb25seSBkZWNsYXJlIG1vbml0b3Jpbmc6IE1vbml0b3JpbmdGYWNhZGVcbiAgcmVhZG9ubHkgZGVjbGFyZSBmdW5jdGlvbjogRnVuY3Rpb247XG4gIHJlYWRvbmx5IGRlY2xhcmUgY3JpdGljYWxMb2dBbGFybTogTG9nQWxhcm07XG4gIHJlYWRvbmx5IGRlY2xhcmUgd2FybmluZ0xvZ0FsYXJtOiBMb2dBbGFybTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLm1vbml0b3JpbmcgPSBuZXcgTW9uaXRvcmluZ0ZhY2FkZSh0aGlzLCAnTW9uaXRvcmluZycsIHtcbiAgICAgIG1ldHJpY0ZhY3RvcnlEZWZhdWx0czoge30sXG4gICAgICBhbGFybUZhY3RvcnlEZWZhdWx0czoge1xuICAgICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgYWxhcm1OYW1lUHJlZml4OiBzY29wZS5ub2RlLnBhdGgucmVwbGFjZSgvXFwvL2csICctJyksXG4gICAgICB9LFxuICAgICAgZGFzaGJvYXJkRmFjdG9yeTogcHJvcHMuZGFzaGJvYXJkRmFjdG9yeVxuICAgIH0pO1xuXG4gICAgbGV0IGJ1bmRsaW5nOiBCdW5kbGluZ09wdGlvbnMgfCB1bmRlZmluZWQgPSBmcy5leGlzdHNTeW5jKHBhdGguam9pbihwcm9wcy5lbnRyeSwgJ3JlcXVpcmVtZW50cy50eHQnKSkgPyB7XG4gICAgICBpbWFnZTogcHJvcHMucnVudGltZT8uYnVuZGxpbmdJbWFnZT8/UnVudGltZS5QWVRIT05fM185LmJ1bmRsaW5nSW1hZ2UsXG4gICAgICBjb21tYW5kOiBbXG4gICAgICAgICdiYXNoJywgJy1jJywgW1xuICAgICAgICAgICdwaXAgaW5zdGFsbCAtLXRhcmdldCAvYXNzZXQtb3V0cHV0LyAtciByZXF1aXJlbWVudHMudHh0JyxcbiAgICAgICAgICAnY3AgLXJhICogL2Fzc2V0LW91dHB1dC8nXG4gICAgICAgIF0uam9pbignJiYnKVxuICAgICAgXSxcbiAgICAgIG91dHB1dFR5cGU6IEJ1bmRsaW5nT3V0cHV0Lk5PVF9BUkNISVZFRCxcbiAgICB9IDogdW5kZWZpbmVkXG5cbiAgICB0aGlzLmZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lPz9SdW50aW1lLlBZVEhPTl8zXzksXG4gICAgICB0cmFjaW5nOiBwcm9wcy50cmFjaW5nPz9UcmFjaW5nLlBBU1NfVEhST1VHSCxcbiAgICAgIGxvZ1JldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uPz9sb2dzLlJldGVudGlvbkRheXMuVEhSRUVfREFZUyxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvcHMuYXJjaGl0ZWN0dXJlPz9BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZT8/NzY4LFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dD8/RHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwcm9wcy5lbnRyeSwge2J1bmRsaW5nfSksXG4gICAgICBoYW5kbGVyOiAocHJvcHMuaW5kZXg/PydpbmRleC5weScpLnJlcGxhY2UoJy5weScsICcnKSArICcuJyArIChwcm9wcy5oYW5kbGVyPz8naGFuZGxlcicpXG4gICAgfSk7XG5cbiAgICBjb25zdCB3YXJuUHJvcHMgPSBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcztcbiAgICBjb25zdCB3YXJuQWN0aW9uczogSUFsYXJtQWN0aW9uW10gPSBbXTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gd2FybkFjdGlvbnMucHVzaChhY3Rpb24pKTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeVRvcGljcz8uZm9yRWFjaCgodG9waWMpID0+IHdhcm5BY3Rpb25zLnB1c2gobmV3IFNuc0FjdGlvbih0b3BpYykpKTtcbiAgICBjb25zdCBjcml0UHJvcHMgPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM7XG4gICAgY29uc3QgY3JpdEFjdGlvbnM6IElBbGFybUFjdGlvbltdID0gW107XG4gICAgY3JpdFByb3BzPy5ub3RpZnlBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGNyaXRBY3Rpb25zLnB1c2goYWN0aW9uKSk7XG4gICAgY3JpdFByb3BzPy5ub3RpZnlUb3BpY3M/LmZvckVhY2goKHRvcGljKSA9PiBjcml0QWN0aW9ucy5wdXNoKG5ldyBTbnNBY3Rpb24odG9waWMpKSk7XG5cbiAgICB0aGlzLm1vbml0b3JpbmcubW9uaXRvckxhbWJkYUZ1bmN0aW9uKHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmZ1bmN0aW9uLFxuICAgICAgbGFtYmRhSW5zaWdodHNFbmFibGVkOiB0cnVlLFxuICAgICAgYWRkVG9BbGFybURhc2hib2FyZDogdHJ1ZSxcbiAgICAgIGFkZFRvRGV0YWlsRGFzaGJvYXJkOiB0cnVlLFxuICAgICAgYWRkVG9TdW1tYXJ5RGFzaGJvYXJkOiB0cnVlLFxuICAgICAgYWRkTGF0ZW5jeVA1MEFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heExhdGVuY3knLCB3YXJuUHJvcHM/LnA1MExhdGVuY3ksIGNyaXRQcm9wcz8ucDUwTGF0ZW5jeSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBMYXRlbmN5VGhyZXNob2xkPixcbiAgICAgIGFkZExhdGVuY3lQOTBBbGFybTogdG9BbGFybVByb3BzKCdtYXhMYXRlbmN5Jywgd2FyblByb3BzPy5wOTBMYXRlbmN5LCBjcml0UHJvcHM/LnA5MExhdGVuY3ksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTGF0ZW5jeVRocmVzaG9sZD4sXG4gICAgICBhZGRMYXRlbmN5UDk5QWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TGF0ZW5jeScsIHdhcm5Qcm9wcz8ucDk5TGF0ZW5jeSwgY3JpdFByb3BzPy5wOTlMYXRlbmN5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIExhdGVuY3lUaHJlc2hvbGQ+LFxuICAgICAgYWRkRmF1bHRDb3VudEFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heEVycm9yQ291bnQnLCB3YXJuUHJvcHM/Lm1heEZhdWx0cywgY3JpdFByb3BzPy5tYXhGYXVsdHMsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCAwKSBhcyBSZWNvcmQ8c3RyaW5nLCBFcnJvckNvdW50VGhyZXNob2xkPixcbiAgICAgIGFkZEZhdWx0UmF0ZUFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heEVycm9yUmF0ZScsIHdhcm5Qcm9wcz8uYXZnRmF1bHRzLCBjcml0UHJvcHM/LmF2Z0ZhdWx0cywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBFcnJvclJhdGVUaHJlc2hvbGQ+LFxuICAgICAgYWRkTG93VHBzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWluVHBzJywgd2FyblByb3BzPy5taW5UcHMsIGNyaXRQcm9wcz8ubWluVHBzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIExvd1Rwc1RocmVzaG9sZD4sXG4gICAgICBhZGRIaWdoVHBzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4VHBzJywgd2FyblByb3BzPy5tYXhUcHMsIGNyaXRQcm9wcz8ubWF4VHBzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIEhpZ2hUcHNUaHJlc2hvbGQ+LFxuICAgICAgYWRkVGhyb3R0bGVzQ291bnRBbGFybTogdG9BbGFybVByb3BzKCdtYXhFcnJvckNvdW50Jywgd2FyblByb3BzPy5tYXhUaHJvdHRsZXMsIGNyaXRQcm9wcz8ubWF4VGhyb3R0bGVzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMsIHVuZGVmaW5lZCwgMCkgYXMgUmVjb3JkPHN0cmluZywgRXJyb3JDb3VudFRocmVzaG9sZD4sXG4gICAgICBhZGRUaHJvdHRsZXNSYXRlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RXJyb3JSYXRlJywgd2FyblByb3BzPy5hdmdUaHJvdHRsZXMsIGNyaXRQcm9wcz8uYXZnVGhyb3R0bGVzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIEVycm9yUmF0ZVRocmVzaG9sZD4sXG4gICAgICBhZGRDb25jdXJyZW50RXhlY3V0aW9uc0NvdW50QWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4UnVubmluZ1Rhc2tzJywgd2FyblByb3BzPy5tYXhDb25jdXJyZW50RXhlY3V0aW9ucywgY3JpdFByb3BzPy5tYXhDb25jdXJyZW50RXhlY3V0aW9ucywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBSdW5uaW5nVGFza0NvdW50VGhyZXNob2xkPixcbiAgICAgIGFkZE1heEl0ZXJhdG9yQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5NaWxsaXMnLCB3YXJuUHJvcHM/Lm1heEl0ZXJhdG9yQWdlLCBjcml0UHJvcHM/Lm1heEl0ZXJhdG9yQWdlLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIE1heEFnZVRocmVzaG9sZD4sXG4gICAgICBhZGRFbmhhbmNlZE1vbml0b3JpbmdNYXhDcHVUb3RhbFRpbWVBbGFybTogdG9BbGFybVByb3BzKCdtYXhEdXJhdGlvbicsIHdhcm5Qcm9wcz8ubWF4Q3B1VGltZSwgY3JpdFByb3BzPy5tYXhDcHVUaW1lLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIER1cmF0aW9uVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ1A5MENwdVRvdGFsVGltZUFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heER1cmF0aW9uJywgd2FyblByb3BzPy5wOTBDcHVUaW1lLCBjcml0UHJvcHM/LnA5MENwdVRpbWUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgRHVyYXRpb25UaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nQXZnQ3B1VG90YWxUaW1lQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RHVyYXRpb24nLCB3YXJuUHJvcHM/LmF2Z0NwdVRpbWUsIGNyaXRQcm9wcz8uYXZnQ3B1VGltZSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyAgUmVjb3JkPHN0cmluZywgRHVyYXRpb25UaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nTWF4TWVtb3J5VXRpbGl6YXRpb25BbGFybTogdG9BbGFybVByb3BzKCdtYXhVc2FnZVBlcmNlbnQnLCB3YXJuUHJvcHM/Lm1heE1lbW9yeSwgY3JpdFByb3BzPy5tYXhNZW1vcnksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgIFJlY29yZDxzdHJpbmcsIFVzYWdlVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ1A5ME1lbW9yeVV0aWxpemF0aW9uQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4VXNhZ2VQZXJjZW50Jywgd2FyblByb3BzPy5wOTBNZW1vcnksIGNyaXRQcm9wcz8ucDkwTWVtb3J5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIFVzYWdlVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ0F2Z01lbW9yeVV0aWxpemF0aW9uQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4VXNhZ2VQZXJjZW50Jywgd2FyblByb3BzPy5hdmdNZW1vcnksIGNyaXRQcm9wcz8uYXZnTWVtb3J5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIFVzYWdlVGhyZXNob2xkPixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBsb2cgbW9uaXRvcmluZyB0byBkYXNoYm9hcmRcbiAgICBsZXQgY3JpdE1heExvZ0NvdW50ID0gcHJvcHMuY3JpdGljYWxBbGFybVByb3BzPy5tYXhMb2dDb3VudD8/MVxuICAgIGxldCBwYXR0ZXJuID0gJyc7XG4gICAgaWYgKGNyaXRNYXhMb2dDb3VudCA+IDApIHtcbiAgICAgIHBhdHRlcm4gPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM/LmRhc2hib2FyZExvZ1BhdHRlcm4/P1B5dGhvbkZ1bmN0aW9uLkRFRkFVTFRfTE9HX0lOU0lHSFRTX1BBVFRFUk5cbiAgICB9XG4gICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5tYXhMb2dDb3VudCAhPT0gdW5kZWZpbmVkICYmIHBhdHRlcm4gIT09IHByb3BzLndhcm5pbmdBbGFybVByb3BzLmRhc2hib2FyZExvZ1BhdHRlcm4pIHtcbiAgICAgIHBhdHRlcm4gKz0gKHBhdHRlcm4gIT09ICcnID8gJ3wnIDogJycpICsgcHJvcHMud2FybmluZ0FsYXJtUHJvcHMuZGFzaGJvYXJkTG9nUGF0dGVyblxuICAgIH1cbiAgICBpZiAocGF0dGVybiAhPT0gJycpIHtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5tb25pdG9yTG9nKHtcbiAgICAgICAgbG9nR3JvdXBOYW1lOiB0aGlzLmZ1bmN0aW9uLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgcGF0dGVybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCBjcml0aWNhbCBsb2cgYWxhcm1cbiAgICBpZiAoY3JpdE1heExvZ0NvdW50ID4gMCkge1xuICAgICAgdGhpcy5jcml0aWNhbExvZ0FsYXJtID0gbmV3IExvZ0FsYXJtKHRoaXMsICdMb2dzQ3JpdGljYWwnLCB7XG4gICAgICAgIGxvZ0dyb3VwOiB0aGlzLmZ1bmN0aW9uLmxvZ0dyb3VwLFxuICAgICAgICBwYXR0ZXJuOiBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM/Lm1ldHJpY0xvZ1BhdHRlcm4/P1B5dGhvbkZ1bmN0aW9uLkRFRkFVTFRfTE9HX01FVFJJQ19QQVRURVJOLFxuICAgICAgICB0aHJlc2hvbGQ6IGNyaXRNYXhMb2dDb3VudCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDNcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcz8ubm90aWZ5QWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3JpdGljYWxMb2dBbGFybS5hZGRBbGFybUFjdGlvbnMocHJvcHMuY3JpdGljYWxBbGFybVByb3BzLm5vdGlmeUFjdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcz8ubm90aWZ5VG9waWNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jcml0aWNhbExvZ0FsYXJtLmFkZEFsYXJtVG9waWNzKHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcy5ub3RpZnlUb3BpY3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB3YXJuaW5nIGxvZyBhbGFybVxuICAgIGlmIChwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcz8ubWF4TG9nQ291bnQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5tYXhMb2dDb3VudCA+IDApIHtcbiAgICAgIHRoaXMud2FybmluZ0xvZ0FsYXJtID0gbmV3IExvZ0FsYXJtKHRoaXMsICdMb2dzV2FybmluZycsIHtcbiAgICAgICAgbG9nR3JvdXA6IHRoaXMuZnVuY3Rpb24ubG9nR3JvdXAsXG4gICAgICAgIHBhdHRlcm46IHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5tZXRyaWNMb2dQYXR0ZXJuPz9QeXRob25GdW5jdGlvbi5ERUZBVUxUX0xPR19NRVRSSUNfUEFUVEVSTixcbiAgICAgICAgdGhyZXNob2xkOiBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5tYXhMb2dDb3VudCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDNcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5ub3RpZnlBY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nQWxhcm0uYWRkQWxhcm1BY3Rpb25zKHByb3BzLndhcm5pbmdBbGFybVByb3BzLm5vdGlmeUFjdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5ub3RpZnlUb3BpY3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLndhcm5pbmdMb2dBbGFybS5hZGRBbGFybVRvcGljcyhwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5ub3RpZnlUb3BpY3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./lib"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from './standard-alarm-actions-strategy';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./standard-alarm-actions-strategy"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxvRUFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3N0YW5kYXJkLWFsYXJtLWFjdGlvbnMtc3RyYXRlZ3knO1xuIl19
@@ -0,0 +1,10 @@
1
+ import { AlarmActionStrategyProps, IAlarmActionStrategy } from "cdk-monitoring-constructs";
2
+ import { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
3
+ export interface StandardAlarmActionsStrategyProps {
4
+ readonly actions?: IAlarmAction[];
5
+ }
6
+ export declare class StandardAlarmActionsStrategy implements IAlarmActionStrategy {
7
+ protected readonly actions: IAlarmAction[];
8
+ constructor(props: StandardAlarmActionsStrategyProps);
9
+ addAlarmActions(props: AlarmActionStrategyProps): void;
10
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StandardAlarmActionsStrategy = void 0;
4
+ class StandardAlarmActionsStrategy {
5
+ constructor(props) {
6
+ var _a;
7
+ this.actions = (_a = props.actions) !== null && _a !== void 0 ? _a : [];
8
+ }
9
+ addAlarmActions(props) {
10
+ var _a;
11
+ (_a = this.actions) === null || _a === void 0 ? void 0 : _a.forEach((action) => {
12
+ props.alarm.addAlarmAction(action);
13
+ });
14
+ }
15
+ }
16
+ exports.StandardAlarmActionsStrategy = StandardAlarmActionsStrategy;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtYWxhcm0tYWN0aW9ucy1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YW5kYXJkLWFsYXJtLWFjdGlvbnMtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsTUFBYSw0QkFBNEI7SUFJdkMsWUFBWSxLQUF3Qzs7UUFDbEQsSUFBSSxDQUFDLE9BQU8sU0FBRyxLQUFLLENBQUMsT0FBTyxtQ0FBRSxFQUFFLENBQUE7SUFDbEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUErQjs7UUFDN0MsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQyxDQUFDLEVBQUU7SUFDTCxDQUFDO0NBQ0Y7QUFiRCxvRUFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWxhcm1BY3Rpb25TdHJhdGVneVByb3BzLCBJQWxhcm1BY3Rpb25TdHJhdGVneX0gZnJvbSBcImNkay1tb25pdG9yaW5nLWNvbnN0cnVjdHNcIjtcbmltcG9ydCB7SUFsYXJtQWN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5UHJvcHMge1xuICByZWFkb25seSBhY3Rpb25zPzogSUFsYXJtQWN0aW9uW107XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5IGltcGxlbWVudHMgSUFsYXJtQWN0aW9uU3RyYXRlZ3kge1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3Rpb25zOiBJQWxhcm1BY3Rpb25bXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneVByb3BzKSB7XG4gICAgdGhpcy5hY3Rpb25zID0gcHJvcHMuYWN0aW9ucz8/W11cbiAgfVxuXG4gIGFkZEFsYXJtQWN0aW9ucyhwcm9wczogQWxhcm1BY3Rpb25TdHJhdGVneVByb3BzKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgIHByb3BzLmFsYXJtLmFkZEFsYXJtQWN0aW9uKGFjdGlvbilcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./lib"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from './standard-queue';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./standard-queue"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3N0YW5kYXJkLXF1ZXVlJztcbiJdfQ==
@@ -0,0 +1,132 @@
1
+ import { Construct } from "constructs";
2
+ import { Duration } from "aws-cdk-lib";
3
+ import { Queue } from "aws-cdk-lib/aws-sqs";
4
+ import * as kms from 'aws-cdk-lib/aws-kms';
5
+ import { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
6
+ import { ITopic } from 'aws-cdk-lib/aws-sns';
7
+ import * as iam from "aws-cdk-lib/aws-iam";
8
+ import { MonitoringFacade, IDashboardFactory } from "cdk-monitoring-constructs";
9
+ /**
10
+ * Alarm properties for StandardQueue
11
+ */
12
+ export interface StandardQueueAlarmProps {
13
+ /**
14
+ * Minimum number of messages visible.
15
+ */
16
+ readonly minSize?: number;
17
+ /**
18
+ * Maximum number of messages visible.
19
+ */
20
+ readonly maxSize?: number;
21
+ /**
22
+ * Maximum approximate age of the oldest message in the queue.
23
+ *
24
+ * @default Duration.minutes(15) for critical alarm
25
+ */
26
+ readonly maxAge?: Duration;
27
+ /**
28
+ * Maximum time to drain the queue.
29
+ */
30
+ readonly maxTimeToDrain?: Duration;
31
+ /**
32
+ * Minimum number of incoming messages.
33
+ */
34
+ readonly minIncoming?: number;
35
+ /**
36
+ * Maximum number of incoming messages.
37
+ */
38
+ readonly maxIncoming?: number;
39
+ /**
40
+ * Maximum number of visible messages in the dead-letter queue
41
+ *
42
+ * @default 0 for critical alarm
43
+ */
44
+ readonly deadLetterQueueMaxSize?: number;
45
+ /**
46
+ * Maximum age of the oldest messages in the dead-letter queue
47
+ */
48
+ readonly deadLetterQueueMaxAge?: Duration;
49
+ /**
50
+ * Maximum number of incoming messages in the dead-letter queue
51
+ */
52
+ readonly deadLetterQueueMaxIncoming?: number;
53
+ /**
54
+ * Topics to send alarm notifications
55
+ */
56
+ readonly notifyTopics?: [ITopic];
57
+ /**
58
+ * Actions to send alarm notifications
59
+ */
60
+ readonly notifyActions?: [IAlarmAction];
61
+ }
62
+ /**
63
+ * Properties for a StandardQueue
64
+ */
65
+ export interface StandardQueueProps {
66
+ /**
67
+ * The number of seconds Amazon SQS retains a message. Value must be between
68
+ * 60 and 1209600 seconds (14 days).
69
+ *
70
+ * @default Duration.seconds(1209600)
71
+ *
72
+ */
73
+ readonly retentionPeriod?: Duration;
74
+ /**
75
+ * The number of seconds a consumer has to handle the message and delete it
76
+ * from the queue before it becomes visible again for another consumer. Value
77
+ * must be between 0 and 43200 seconds (12 hours).
78
+ *
79
+ * @default Duration.seconds(30)
80
+ */
81
+ readonly visibilityTimeout?: Duration;
82
+ /**
83
+ * The KMS key to use for encryption. If not set, the AWS master key for SQS
84
+ * will be used.
85
+ */
86
+ readonly encryptionMasterKey?: kms.IKey;
87
+ /**
88
+ * The length of time that Amazon SQS reuses a data key before calling KMS again.
89
+ * This value affects pricing as you are charged for KMS usage. Value must be
90
+ * between 60 and 86,400 seconds (24 hours).
91
+ *
92
+ * @default Duration.minutes(15)
93
+ */
94
+ readonly dataKeyReuse?: Duration;
95
+ /**
96
+ * The maximum number of times a message can be unsuccessful before being moved
97
+ * to the dead-letter queue. Set this value to -1 to disable the dead-letter queue.
98
+ *
99
+ * @default 3
100
+ */
101
+ readonly maxReceiveCount?: number;
102
+ /**
103
+ * The DashboardFactory to use when generating CloudWatch dashboards.
104
+ *
105
+ * If not defined, dashboards are not generated.
106
+ */
107
+ readonly dashboardFactory?: IDashboardFactory;
108
+ /**
109
+ * Alarm thresholds for critical alarms.
110
+ *
111
+ * If no properties are provided, a set of default alarms are created.
112
+ */
113
+ readonly criticalAlarmProps?: StandardQueueAlarmProps;
114
+ /**
115
+ * Alarm threshold for warning alarms.
116
+ *
117
+ * If no properties are provided, a set of default alarms are created.
118
+ */
119
+ readonly warningAlarmProps?: StandardQueueAlarmProps;
120
+ }
121
+ export declare class StandardQueue extends Construct {
122
+ static readonly DEFAULT_MAX_RECEIVE_COUNT = 3;
123
+ static readonly DEFAULT_RETENTION_PERIOD: Duration;
124
+ readonly monitoring: MonitoringFacade;
125
+ readonly queue: Queue;
126
+ readonly deadLetterQueue: Queue;
127
+ constructor(scope: Construct, id: string, props?: StandardQueueProps);
128
+ grantConsumeMessages(grantee: iam.IGrantable): iam.Grant;
129
+ grantSendMessages(grantee: iam.IGrantable): iam.Grant;
130
+ grantPurge(grantee: iam.IGrantable): iam.Grant;
131
+ grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
132
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StandardQueue = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
7
+ const cdk_monitoring_constructs_1 = require("cdk-monitoring-constructs");
8
+ const aws_monitoring_1 = require("../../aws-monitoring");
9
+ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
10
+ function toAlarmProps(prop, warningThreshold, criticalThreshold, warningAlarmActions, criticalAlarmActions, warningDefaultThreshold, criticalDefaultThreshold) {
11
+ let alarmProps = {};
12
+ if (criticalThreshold !== undefined) {
13
+ alarmProps.Critical = {
14
+ [prop]: criticalThreshold,
15
+ actionsEnabled: true,
16
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
17
+ };
18
+ }
19
+ else if (criticalDefaultThreshold !== undefined) {
20
+ alarmProps.Critical = {
21
+ [prop]: criticalDefaultThreshold,
22
+ actionsEnabled: true,
23
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
24
+ };
25
+ }
26
+ if (warningThreshold !== undefined) {
27
+ alarmProps.Warning = {
28
+ [prop]: warningThreshold,
29
+ actionsEnabled: true,
30
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
31
+ };
32
+ }
33
+ else if (warningDefaultThreshold !== undefined) {
34
+ alarmProps.Warning = {
35
+ [prop]: warningDefaultThreshold,
36
+ actionsEnabled: true,
37
+ actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
38
+ };
39
+ }
40
+ return Object.keys(alarmProps).length > 0 ? alarmProps : undefined;
41
+ }
42
+ class StandardQueue extends constructs_1.Construct {
43
+ constructor(scope, id, props = {}) {
44
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
45
+ super(scope, id);
46
+ this.monitoring = new cdk_monitoring_constructs_1.MonitoringFacade(this, 'Monitoring', {
47
+ metricFactoryDefaults: {},
48
+ alarmFactoryDefaults: {
49
+ actionsEnabled: true,
50
+ alarmNamePrefix: scope.node.path.replace(/\//g, '-')
51
+ },
52
+ dashboardFactory: props.dashboardFactory
53
+ });
54
+ const encryption = props.encryptionMasterKey === undefined ? aws_sqs_1.QueueEncryption.KMS_MANAGED : aws_sqs_1.QueueEncryption.KMS;
55
+ // Setup dead-letter queue
56
+ const maxReceiveCount = (_a = props.maxReceiveCount) !== null && _a !== void 0 ? _a : StandardQueue.DEFAULT_MAX_RECEIVE_COUNT;
57
+ if (maxReceiveCount > 0) {
58
+ this.deadLetterQueue = new aws_sqs_1.Queue(this, 'DeadLetter', {
59
+ encryption,
60
+ encryptionMasterKey: props.encryptionMasterKey,
61
+ dataKeyReuse: (_b = props.dataKeyReuse) !== null && _b !== void 0 ? _b : aws_cdk_lib_1.Duration.minutes(15),
62
+ retentionPeriod: StandardQueue.DEFAULT_RETENTION_PERIOD
63
+ });
64
+ }
65
+ // Setup queue
66
+ this.queue = new aws_sqs_1.Queue(this, id, {
67
+ encryption,
68
+ encryptionMasterKey: props.encryptionMasterKey,
69
+ dataKeyReuse: (_c = props.dataKeyReuse) !== null && _c !== void 0 ? _c : aws_cdk_lib_1.Duration.minutes(15),
70
+ retentionPeriod: (_d = props.retentionPeriod) !== null && _d !== void 0 ? _d : StandardQueue.DEFAULT_RETENTION_PERIOD,
71
+ deadLetterQueue: props.maxReceiveCount === undefined || props.maxReceiveCount <= 0 ? undefined : {
72
+ maxReceiveCount: props.maxReceiveCount,
73
+ queue: this.deadLetterQueue
74
+ },
75
+ visibilityTimeout: (_e = props.visibilityTimeout) !== null && _e !== void 0 ? _e : aws_cdk_lib_1.Duration.seconds(30),
76
+ });
77
+ const warnProps = props.warningAlarmProps;
78
+ const warnActions = [];
79
+ (_f = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyActions) === null || _f === void 0 ? void 0 : _f.forEach((action) => warnActions.push(action));
80
+ (_g = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyTopics) === null || _g === void 0 ? void 0 : _g.forEach((topic) => warnActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
81
+ const critProps = props.criticalAlarmProps;
82
+ const critActions = [];
83
+ (_h = critProps === null || critProps === void 0 ? void 0 : critProps.notifyActions) === null || _h === void 0 ? void 0 : _h.forEach((action) => critActions.push(action));
84
+ (_j = critProps === null || critProps === void 0 ? void 0 : critProps.notifyTopics) === null || _j === void 0 ? void 0 : _j.forEach((topic) => critActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
85
+ if (maxReceiveCount > 0) {
86
+ this.monitoring.monitorSqsQueueWithDlq({
87
+ queue: this.queue,
88
+ deadLetterQueue: this.deadLetterQueue,
89
+ addQueueMinSizeAlarm: toAlarmProps('minMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minSize, critProps === null || critProps === void 0 ? void 0 : critProps.minSize, warnActions, critActions),
90
+ addQueueMaxSizeAlarm: toAlarmProps('maxMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxSize, critProps === null || critProps === void 0 ? void 0 : critProps.maxSize, warnActions, critActions),
91
+ addQueueMaxMessageAgeAlarm: toAlarmProps('maxAgeInSeconds', (_k = warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxAge) === null || _k === void 0 ? void 0 : _k.toSeconds(), (_l = critProps === null || critProps === void 0 ? void 0 : critProps.maxAge) === null || _l === void 0 ? void 0 : _l.toSeconds(), warnActions, critActions, undefined, aws_cdk_lib_1.Duration.minutes(15).toSeconds()),
92
+ addQueueMaxTimeToDrainMessagesAlarm: toAlarmProps('maxTimeToDrain', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTimeToDrain, critProps === null || critProps === void 0 ? void 0 : critProps.maxTimeToDrain, warnActions, critActions),
93
+ addQueueMinIncomingMessagesAlarm: toAlarmProps('minIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.minIncoming, warnActions, critActions),
94
+ addQueueMaxIncomingMessagesAlarm: toAlarmProps('maxIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.maxIncoming, warnActions, critActions),
95
+ addDeadLetterQueueMaxSizeAlarm: toAlarmProps('maxMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.deadLetterQueueMaxSize, critProps === null || critProps === void 0 ? void 0 : critProps.deadLetterQueueMaxSize, warnActions, critActions, undefined, 0),
96
+ addDeadLetterQueueMaxMessageAgeAlarm: toAlarmProps('maxAgeInSeconds', (_m = warnProps === null || warnProps === void 0 ? void 0 : warnProps.deadLetterQueueMaxAge) === null || _m === void 0 ? void 0 : _m.toSeconds(), (_o = critProps === null || critProps === void 0 ? void 0 : critProps.deadLetterQueueMaxAge) === null || _o === void 0 ? void 0 : _o.toSeconds(), warnActions, critActions),
97
+ addDeadLetterQueueMaxIncomingMessagesAlarm: toAlarmProps('maxIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.deadLetterQueueMaxIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.deadLetterQueueMaxIncoming, warnActions, critActions),
98
+ addDeadLetterQueueToSummaryDashboard: this.queue !== undefined,
99
+ });
100
+ }
101
+ else {
102
+ this.monitoring.monitorSqsQueue({
103
+ queue: this.queue,
104
+ addQueueMinSizeAlarm: toAlarmProps('minMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minSize, critProps === null || critProps === void 0 ? void 0 : critProps.minSize, warnActions, critActions),
105
+ addQueueMaxSizeAlarm: toAlarmProps('maxMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxSize, critProps === null || critProps === void 0 ? void 0 : critProps.maxSize, warnActions, critActions),
106
+ addQueueMaxMessageAgeAlarm: toAlarmProps('maxAgeInSeconds', (_p = warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxAge) === null || _p === void 0 ? void 0 : _p.toSeconds(), (_q = critProps === null || critProps === void 0 ? void 0 : critProps.maxAge) === null || _q === void 0 ? void 0 : _q.toSeconds(), warnActions, critActions, undefined, aws_cdk_lib_1.Duration.minutes(15).toSeconds()),
107
+ addQueueMaxTimeToDrainMessagesAlarm: toAlarmProps('maxTimeToDrain', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTimeToDrain, critProps === null || critProps === void 0 ? void 0 : critProps.maxTimeToDrain, warnActions, critActions),
108
+ addQueueMinIncomingMessagesAlarm: toAlarmProps('minIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.minIncoming, warnActions, critActions),
109
+ addQueueMaxIncomingMessagesAlarm: toAlarmProps('maxIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.maxIncoming, warnActions, critActions)
110
+ });
111
+ }
112
+ }
113
+ grantConsumeMessages(grantee) {
114
+ return this.queue.grantConsumeMessages(grantee);
115
+ }
116
+ grantSendMessages(grantee) {
117
+ return this.queue.grantSendMessages(grantee);
118
+ }
119
+ grantPurge(grantee) {
120
+ return this.queue.grantPurge(grantee);
121
+ }
122
+ grant(grantee, ...actions) {
123
+ return this.queue.grant(grantee, ...actions);
124
+ }
125
+ }
126
+ exports.StandardQueue = StandardQueue;
127
+ StandardQueue.DEFAULT_MAX_RECEIVE_COUNT = 3;
128
+ StandardQueue.DEFAULT_RETENTION_PERIOD = aws_cdk_lib_1.Duration.seconds(1209600);
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFuZGFyZC1xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBcUM7QUFDckMsNkNBQXFDO0FBQ3JDLGlEQUEyRDtBQUszRCx5RUFTbUM7QUFDbkMseURBQWtFO0FBQ2xFLCtFQUE2RDtBQXVJN0QsU0FBUyxZQUFZLENBQ25CLElBQVksRUFDWixnQkFBb0MsRUFDcEMsaUJBQXFDLEVBQ3JDLG1CQUFvQyxFQUNwQyxvQkFBcUMsRUFDckMsdUJBQTJDLEVBQzNDLHdCQUE0QztJQUU1QyxJQUFJLFVBQVUsR0FBeUMsRUFBRSxDQUFBO0lBQ3pELElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO1FBQ25DLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUI7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUksNkNBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsQ0FBQztTQUNsRixDQUFBO0tBQ0Y7U0FBTSxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtRQUNqRCxVQUFVLENBQUMsUUFBUSxHQUFHO1lBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsd0JBQXdCO1lBQ2hDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGNBQWMsRUFBRSxJQUFJLDZDQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFDLENBQUM7U0FDbEYsQ0FBQTtLQUNGO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRztZQUNuQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQjtZQUN4QixjQUFjLEVBQUUsSUFBSTtZQUNwQixjQUFjLEVBQUUsSUFBSSw2Q0FBNEIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxDQUFDO1NBQ2pGLENB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R0gsc0NBbUdDO0FBakdpQix1Q0FBeUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsc0NBQXdCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7RHVyYXRpb259IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtRdWV1ZSwgUXVldWVFbmNyeXB0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHtJQWxhcm1BY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHtJVG9waWN9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBNYXhJbmNvbWluZ01lc3NhZ2VzQ291bnRUaHJlc2hvbGQsXG4gIE1heE1lc3NhZ2VBZ2VUaHJlc2hvbGQsXG4gIE1heE1lc3NhZ2VDb3VudFRocmVzaG9sZCxcbiAgTWF4VGltZVRvRHJhaW5UaHJlc2hvbGQsIE1pbkluY29taW5nTWVzc2FnZXNDb3VudFRocmVzaG9sZCxcbiAgTW9uaXRvcmluZ0ZhY2FkZSxcbiAgSURhc2hib2FyZEZhY3RvcnksXG4gIE1pbk1lc3NhZ2VDb3VudFRocmVzaG9sZCxcbiAgQ3VzdG9tQWxhcm1UaHJlc2hvbGRcbn0gZnJvbSBcImNkay1tb25pdG9yaW5nLWNvbnN0cnVjdHNcIjtcbmltcG9ydCB7U3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneX0gZnJvbSAnLi4vLi4vYXdzLW1vbml0b3JpbmcnO1xuaW1wb3J0IHtTbnNBY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zXCI7XG5cbi8qKlxuICogQWxhcm0gcHJvcGVydGllcyBmb3IgU3RhbmRhcmRRdWV1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkUXVldWVBbGFybVByb3BzIHtcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgbWVzc2FnZXMgdmlzaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pblNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHZpc2libGUuXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFwcHJveGltYXRlIGFnZSBvZiB0aGUgb2xkZXN0IG1lc3NhZ2UgaW4gdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KSBmb3IgY3JpdGljYWwgYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IG1heEFnZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHRpbWUgdG8gZHJhaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VGltZVRvRHJhaW4/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBtaW5JbmNvbWluZz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBtYXhJbmNvbWluZz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgdmlzaWJsZSBtZXNzYWdlcyBpbiB0aGUgZGVhZC1sZXR0ZXIgcXVldWVcbiAgICpcbiAgICogQGRlZmF1bHQgMCBmb3IgY3JpdGljYWwgYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZU1heFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gYWdlIG9mIHRoZSBvbGRlc3QgbWVzc2FnZXMgaW4gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlXG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVNYXhBZ2U/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMgaW4gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlXG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVNYXhJbmNvbWluZz86IG51bWJlcjtcblxuICAvKipcbiAgICogVG9waWNzIHRvIHNlbmQgYWxhcm0gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZ5VG9waWNzPzogW0lUb3BpY107XG5cbiAgLyoqXG4gICAqIEFjdGlvbnMgdG8gc2VuZCBhbGFybSBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZnlBY3Rpb25zPzogW0lBbGFybUFjdGlvbl07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBTdGFuZGFyZFF1ZXVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmRRdWV1ZVByb3BzIHtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIEFtYXpvbiBTUVMgcmV0YWlucyBhIG1lc3NhZ2UuIFZhbHVlIG11c3QgYmUgYmV0d2VlblxuICAgKiA2MCBhbmQgMTIwOTYwMCBzZWNvbmRzICgxNCBkYXlzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygxMjA5NjAwKVxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uUGVyaW9kPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhIGNvbnN1bWVyIGhhcyB0byBoYW5kbGUgdGhlIG1lc3NhZ2UgYW5kIGRlbGV0ZSBpdFxuICAgKiBmcm9tIHRoZSBxdWV1ZSBiZWZvcmUgaXQgYmVjb21lcyB2aXNpYmxlIGFnYWluIGZvciBhbm90aGVyIGNvbnN1bWVyLiBWYWx1ZVxuICAgKiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNDMyMDAgc2Vjb25kcyAoMTIgaG91cnMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eVRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uLiBJZiBub3Qgc2V0LCB0aGUgQVdTIG1hc3RlciBrZXkgZm9yIFNRU1xuICAgKiB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uTWFzdGVyS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGltZSB0aGF0IEFtYXpvbiBTUVMgcmV1c2VzIGEgZGF0YSBrZXkgYmVmb3JlIGNhbGxpbmcgS01TIGFnYWluLlxuICAgKiBUaGlzIHZhbHVlIGFmZmVjdHMgcHJpY2luZyBhcyB5b3UgYXJlIGNoYXJnZWQgZm9yIEtNUyB1c2FnZS4gVmFsdWUgbXVzdCBiZVxuICAgKiBiZXR3ZWVuIDYwIGFuZCA4Niw0MDAgc2Vjb25kcyAoMjQgaG91cnMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YUtleVJldXNlPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyBhIG1lc3NhZ2UgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBiZWZvcmUgYmVpbmcgbW92ZWRcbiAgICogdG8gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlLiBTZXQgdGhpcyB2YWx1ZSB0byAtMSB0byBkaXNhYmxlIHRoZSBkZWFkLWxldHRlciBxdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4UmVjZWl2ZUNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgRGFzaGJvYXJkRmFjdG9yeSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIENsb3VkV2F0Y2ggZGFzaGJvYXJkcy5cbiAgICpcbiAgICogSWYgbm90IGRlZmluZWQsIGRhc2hib2FyZHMgYXJlIG5vdCBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBkYXNoYm9hcmRGYWN0b3J5PzogSURhc2hib2FyZEZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZHMgZm9yIGNyaXRpY2FsIGFsYXJtcy5cbiAgICpcbiAgICogSWYgbm8gcHJvcGVydGllcyBhcmUgcHJvdmlkZWQsIGEgc2V0IG9mIGRlZmF1bHQgYWxhcm1zIGFyZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JpdGljYWxBbGFybVByb3BzPzogU3RhbmRhcmRRdWV1ZUFsYXJtUHJvcHM7XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZCBmb3Igd2FybmluZyBhbGFybXMuXG4gICAqXG4gICAqIElmIG5vIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkLCBhIHNldCBvZiBkZWZhdWx0IGFsYXJtcyBhcmUgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm5pbmdBbGFybVByb3BzPzogU3RhbmRhcmRRdWV1ZUFsYXJtUHJvcHM7XG59XG5cbmZ1bmN0aW9uIHRvQWxhcm1Qcm9wcyhcbiAgcHJvcDogc3RyaW5nLFxuICB3YXJuaW5nVGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb24sXG4gIGNyaXRpY2FsVGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb24sXG4gIHdhcm5pbmdBbGFybUFjdGlvbnM/OiBJQWxhcm1BY3Rpb25bXSxcbiAgY3JpdGljYWxBbGFybUFjdGlvbnM/OiBJQWxhcm1BY3Rpb25bXSxcbiAgd2FybmluZ0RlZmF1bHRUaHJlc2hvbGQ/OiBudW1iZXIgfCBEdXJhdGlvbixcbiAgY3JpdGljYWxEZWZhdWx0VGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb25cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFsYXJtVGhyZXNob2xkPiB8IHVuZGVmaW5lZCB7XG4gIGxldCBhbGFybVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BbGFybVRocmVzaG9sZD4gPSB7fVxuICBpZiAoY3JpdGljYWxUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuQ3JpdGljYWwgPSB7XG4gICAgICBbcHJvcF06IGNyaXRpY2FsVGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IGNyaXRpY2FsQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAoY3JpdGljYWxEZWZhdWx0VGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICBhbGFybVByb3BzLkNyaXRpY2FsID0ge1xuICAgICAgW3Byb3BdOiBjcml0aWNhbERlZmF1bHRUaHJlc2hvbGQsXG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbk92ZXJyaWRlOiBuZXcgU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneSh7YWN0aW9uczogY3JpdGljYWxBbGFybUFjdGlvbnN9KVxuICAgIH1cbiAgfVxuICBpZiAod2FybmluZ1RocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5XYXJuaW5nID0ge1xuICAgICAgW3Byb3BdOiB3YXJuaW5nVGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IHdhcm5pbmdBbGFybUFjdGlvbnN9KVxuICAgIH1cbiAgfSBlbHNlIGlmICh3YXJuaW5nRGVmYXVsdFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5XYXJuaW5nID0ge1xuICAgICAgW3Byb3BdOiB3YXJuaW5nRGVmYXVsdFRocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiB3YXJuaW5nQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGFsYXJtUHJvcHMpLmxlbmd0aCA+IDAgPyBhbGFybVByb3BzIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFF1ZXVlIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVhfUkVDRUlWRV9DT1VOVCA9IDM7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1JFVEVOVElPTl9QRVJJT0QgPSBEdXJhdGlvbi5zZWNvbmRzKDEyMDk2MDApO1xuXG4gIHJlYWRvbmx5IG1vbml0b3Jpbmc6IE1vbml0b3JpbmdGYWNhZGU7XG4gIHJlYWRvbmx5IHF1ZXVlOiBRdWV1ZTtcbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlOiBRdWV1ZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhbmRhcmRRdWV1ZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5tb25pdG9yaW5nID0gbmV3IE1vbml0b3JpbmdGYWNhZGUodGhpcywgJ01vbml0b3JpbmcnLCB7XG4gICAgICBtZXRyaWNGYWN0b3J5RGVmYXVsdHM6IHt9LFxuICAgICAgYWxhcm1GYWN0b3J5RGVmYXVsdHM6IHtcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGFsYXJtTmFtZVByZWZpeDogc2NvcGUubm9kZS5wYXRoLnJlcGxhY2UoL1xcLy9nLCAnLScpXG4gICAgICB9LFxuICAgICAgZGFzaGJvYXJkRmFjdG9yeTogcHJvcHMuZGFzaGJvYXJkRmFjdG9yeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbiA9IHByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkgPT09IHVuZGVmaW5lZCA/IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCA6IFF1ZXVlRW5jcnlwdGlvbi5LTVM7XG5cbiAgICAvLyBTZXR1cCBkZWFkLWxldHRlciBxdWV1ZVxuICAgIGNvbnN0IG1heFJlY2VpdmVDb3VudCA9IHByb3BzLm1heFJlY2VpdmVDb3VudD8/U3RhbmRhcmRRdWV1ZS5ERUZBVUxUX01BWF9SRUNFSVZFX0NPVU5UO1xuICAgIGlmIChtYXhSZWNlaXZlQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSA9IG5ldyBRdWV1ZSh0aGlzLCAnRGVhZExldHRlcicsIHtcbiAgICAgICAgZW5jcnlwdGlvbixcbiAgICAgICAgZW5jcnlwdGlvbk1hc3RlcktleTogcHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSxcbiAgICAgICAgZGF0YUtleVJldXNlOiBwcm9wcy5kYXRhS2V5UmV1c2U/P0R1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgICByZXRlbnRpb25QZXJpb2Q6IFN0YW5kYXJkUXVldWUuREVGQVVMVF9SRVRFTlRJT05fUEVSSU9EXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBxdWV1ZVxuICAgIHRoaXMucXVldWUgPSBuZXcgUXVldWUodGhpcywgaWQsIHtcbiAgICAgIGVuY3J5cHRpb24sXG4gICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBwcm9wcy5lbmNyeXB0aW9uTWFzdGVyS2V5LFxuICAgICAgZGF0YUtleVJldXNlOiBwcm9wcy5kYXRhS2V5UmV1c2U/P0R1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgcmV0ZW50aW9uUGVyaW9kOiBwcm9wcy5yZXRlbnRpb25QZXJpb2Q/P1N0YW5kYXJkUXVldWUuREVGQVVMVF9SRVRFTlRJT05fUEVSSU9ELFxuICAgICAgZGVhZExldHRlclF1ZXVlOiBwcm9wcy5tYXhSZWNlaXZlQ291bnQgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5tYXhSZWNlaXZlQ291bnQgPD0gMCA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBwcm9wcy5tYXhSZWNlaXZlQ291bnQsXG4gICAgICAgIHF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgfSxcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBwcm9wcy52aXNpYmlsaXR5VGltZW91dD8/RHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB3YXJuUHJvcHMgPSBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcztcbiAgICBjb25zdCB3YXJuQWN0aW9uczogSUFsYXJtQWN0aW9uW10gPSBbXTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gd2FybkFjdGlvbnMucHVzaChhY3Rpb24pKTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeVRvcGljcz8uZm9yRWFjaCgodG9waWMpID0+IHdhcm5BY3Rpb25zLnB1c2gobmV3IFNuc0FjdGlvbih0b3BpYykpKTtcbiAgICBjb25zdCBjcml0UHJvcHMgPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM7XG4gICAgY29uc3QgY3JpdEFjdGlvbnM6IElBbGFybUFjdGlvbltdID0gW107XG4gICAgY3JpdFByb3BzPy5ub3RpZnlBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGNyaXRBY3Rpb25zLnB1c2goYWN0aW9uKSk7XG4gICAgY3JpdFByb3BzPy5ub3RpZnlUb3BpY3M/LmZvckVhY2goKHRvcGljKSA9PiBjcml0QWN0aW9ucy5wdXNoKG5ldyBTbnNBY3Rpb24odG9waWMpKSk7XG5cbiAgICBpZiAobWF4UmVjZWl2ZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5tb25pdG9yaW5nLm1vbml0b3JTcXNRdWV1ZVdpdGhEbHEoe1xuICAgICAgICBxdWV1ZTogdGhpcy5xdWV1ZSxcbiAgICAgICAgZGVhZExldHRlclF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSxcbiAgICAgICAgYWRkUXVldWVNaW5TaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWluTWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5taW5TaXplLCBjcml0UHJvcHM/Lm1pblNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluTWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhTaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5tYXhTaXplLCBjcml0UHJvcHM/Lm1heFNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhNZXNzYWdlQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5TZWNvbmRzJywgd2FyblByb3BzPy5tYXhBZ2U/LnRvU2Vjb25kcygpLCBjcml0UHJvcHM/Lm1heEFnZT8udG9TZWNvbmRzKCksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCBEdXJhdGlvbi5taW51dGVzKDE1KS50b1NlY29uZHMoKSkgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUFnZVRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWF4VGltZVRvRHJhaW5NZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21heFRpbWVUb0RyYWluJywgd2FyblByb3BzPy5tYXhUaW1lVG9EcmFpbiwgY3JpdFByb3BzPy5tYXhUaW1lVG9EcmFpbiwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhUaW1lVG9EcmFpblRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWluSW5jb21pbmdNZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21pbkluY29taW5nTWVzc2FnZXNDb3VudCcsIHdhcm5Qcm9wcz8ubWluSW5jb21pbmcsIGNyaXRQcm9wcz8ubWluSW5jb21pbmcsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluSW5jb21pbmdNZXNzYWdlc0NvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhJbmNvbWluZ01lc3NhZ2VzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4SW5jb21pbmdNZXNzYWdlc0NvdW50Jywgd2FyblByb3BzPy5tYXhJbmNvbWluZywgY3JpdFByb3BzPy5tYXhJbmNvbWluZywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhJbmNvbWluZ01lc3NhZ2VzQ291bnRUaHJlc2hvbGQ+IHwgdW5kZWZpbmVkLFxuICAgICAgICBhZGREZWFkTGV0dGVyUXVldWVNYXhTaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5kZWFkTGV0dGVyUXVldWVNYXhTaXplLCBjcml0UHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heFNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCAwKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhNZXNzYWdlQ291bnRUaHJlc2hvbGQ+IHwgdW5kZWZpbmVkLFxuICAgICAgICBhZGREZWFkTGV0dGVyUXVldWVNYXhNZXNzYWdlQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5TZWNvbmRzJywgd2FyblByb3BzPy5kZWFkTGV0dGVyUXVldWVNYXhBZ2U/LnRvU2Vjb25kcygpLCBjcml0UHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heEFnZT8udG9TZWNvbmRzKCksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUFnZVRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZERlYWRMZXR0ZXJRdWV1ZU1heEluY29taW5nTWVzc2FnZXNBbGFybTogdG9BbGFybVByb3BzKCdtYXhJbmNvbWluZ01lc3NhZ2VzQ291bnQnLCB3YXJuUHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heEluY29taW5nLCBjcml0UHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heEluY29taW5nLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIE1heEluY29taW5nTWVzc2FnZXNDb3VudFRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZERlYWRMZXR0ZXJRdWV1ZVRvU3VtbWFyeURhc2hib2FyZDogdGhpcy5xdWV1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5tb25pdG9yU3FzUXVldWUoe1xuICAgICAgICBxdWV1ZTogdGhpcy5xdWV1ZSxcbiAgICAgICAgYWRkUXVldWVNaW5TaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWluTWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5taW5TaXplLCBjcml0UHJvcHM/Lm1pblNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluTWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhTaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5tYXhTaXplLCBjcml0UHJvcHM/Lm1heFNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhNZXNzYWdlQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5TZWNvbmRzJywgd2FyblByb3BzPy5tYXhBZ2U/LnRvU2Vjb25kcygpLCBjcml0UHJvcHM/Lm1heEFnZT8udG9TZWNvbmRzKCksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCBEdXJhdGlvbi5taW51dGVzKDE1KS50b1NlY29uZHMoKSkgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUFnZVRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWF4VGltZVRvRHJhaW5NZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21heFRpbWVUb0RyYWluJywgd2FyblByb3BzPy5tYXhUaW1lVG9EcmFpbiwgY3JpdFByb3BzPy5tYXhUaW1lVG9EcmFpbiwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhUaW1lVG9EcmFpblRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWluSW5jb21pbmdNZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21pbkluY29taW5nTWVzc2FnZXNDb3VudCcsIHdhcm5Qcm9wcz8ubWluSW5jb21pbmcsIGNyaXRQcm9wcz8ubWluSW5jb21pbmcsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluSW5jb21pbmdNZXNzYWdlc0NvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhJbmNvbWluZ01lc3NhZ2VzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4SW5jb21pbmdNZXNzYWdlc0NvdW50Jywgd2FyblByb3BzPy5tYXhJbmNvbWluZywgY3JpdFByb3BzPy5tYXhJbmNvbWluZywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhJbmNvbWluZ01lc3NhZ2VzQ291bnRUaHJlc2hvbGQ+IHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBncmFudENvbnN1bWVNZXNzYWdlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFNlbmRNZXNzYWdlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFB1cmdlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5ncmFudFB1cmdlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5ncmFudChncmFudGVlLCAuLi5hY3Rpb25zKTtcbiAgfVxufVxuIl19
package/index.d.ts CHANGED
@@ -1 +1,5 @@
1
+ export * as aws_cloudwatch from './aws-cloudwatch';
2
+ export * as aws_lambda from './aws-lambda';
3
+ export * as aws_monitoring from './aws-monitoring';
1
4
  export * as aws_route53 from './aws-route53';
5
+ export * as aws_sqs from './aws-sqs';
package/index.js CHANGED
@@ -1,4 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aws_cloudwatch = require("./aws-cloudwatch");
4
+ exports.aws_lambda = require("./aws-lambda");
5
+ exports.aws_monitoring = require("./aws-monitoring");
3
6
  exports.aws_route53 = require("./aws-route53");
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUE2QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGF3c19yb3V0ZTUzIGZyb20gJy4vYXdzLXJvdXRlNTMnO1xuXG4iXX0=
7
+ exports.aws_sqs = require("./aws-sqs");
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFtRDtBQUNuRCw2Q0FBMkM7QUFDM0MscURBQW1EO0FBQ25ELCtDQUE2QztBQUM3Qyx1Q0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBhd3NfY2xvdWR3YXRjaCBmcm9tICcuL2F3cy1jbG91ZHdhdGNoJztcbmV4cG9ydCAqIGFzIGF3c19sYW1iZGEgZnJvbSAnLi9hd3MtbGFtYmRhJztcbmV4cG9ydCAqIGFzIGF3c19tb25pdG9yaW5nIGZyb20gJy4vYXdzLW1vbml0b3JpbmcnO1xuZXhwb3J0ICogYXMgYXdzX3JvdXRlNTMgZnJvbSAnLi9hd3Mtcm91dGU1Myc7XG5leHBvcnQgKiBhcyBhd3Nfc3FzIGZyb20gJy4vYXdzLXNxcyc7XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "truemark-cdk-lib",
3
- "version": "0.0.3",
3
+ "version": "0.0.6",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "scripts": {
@@ -11,23 +11,35 @@
11
11
  "devDependencies": {
12
12
  "@types/jest": "^27.4.1",
13
13
  "@types/node": "10.17.27",
14
- "aws-cdk-lib": "2.23.0",
14
+ "aws-cdk-lib": "2.18.0",
15
15
  "constructs": "10.0.5",
16
16
  "jest": "^27.5.1",
17
17
  "ts-jest": "^27.1.4",
18
18
  "typescript": "~3.9.7"
19
19
  },
20
20
  "peerDependencies": {
21
- "aws-cdk-lib": "2.23.0",
21
+ "aws-cdk-lib": "^2.18.0",
22
22
  "constructs": "^10.0.5"
23
23
  },
24
24
  "exports": {
25
25
  ".": "./index.js",
26
26
  "./package.json": "./package.json",
27
- "./aws-route53": "./aws-route53/index.js"
27
+ "./aws-cloudwatch": "./aws-cloudwatch/index.js",
28
+ "./aws-lambda": "./aws-lambda/index.js",
29
+ "./aws-monitoring": "./aws-monitoring/index.js",
30
+ "./aws-route53": "./aws-route53/index.js",
31
+ "./aws-sqs": "./aws-sqs/index.js"
28
32
  },
29
33
  "publishConfig": {
30
34
  "access": "public"
31
35
  },
32
- "gitHead": "e6e9877fc7bfbcc6adff7c03151309192eb28ae8"
36
+ "dependencies": {
37
+ "@aws-cdk/aws-apigatewayv2-alpha": "^2.18.0-alpha.0",
38
+ "@aws-cdk/aws-apigatewayv2-integrations-alpha": "^2.18.0-alpha.0",
39
+ "@aws-cdk/aws-appsync-alpha": "^2.18.0-alpha.0",
40
+ "@aws-cdk/aws-redshift-alpha": "^2.18.0-alpha.0",
41
+ "@aws-cdk/aws-synthetics-alpha": "^2.18.0-alpha.0",
42
+ "cdk-monitoring-constructs": "^1.6.4"
43
+ },
44
+ "gitHead": "ec2b1a6828d5e4ed92aa664e90654a92aecc5e3b"
33
45
  }