truemark-cdk-lib 0.0.4 → 0.0.5

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 './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
@@ -2,3 +2,4 @@ export * as aws_cloudwatch from './aws-cloudwatch';
2
2
  export * as aws_lambda from './aws-lambda';
3
3
  export * as aws_monitoring from './aws-monitoring';
4
4
  export * as aws_route53 from './aws-route53';
5
+ export * as aws_sqs from './aws-sqs';
package/index.js CHANGED
@@ -4,4 +4,5 @@ exports.aws_cloudwatch = require("./aws-cloudwatch");
4
4
  exports.aws_lambda = require("./aws-lambda");
5
5
  exports.aws_monitoring = require("./aws-monitoring");
6
6
  exports.aws_route53 = require("./aws-route53");
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFtRDtBQUNuRCw2Q0FBMkM7QUFDM0MscURBQW1EO0FBQ25ELCtDQUE2QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGF3c19jbG91ZHdhdGNoIGZyb20gJy4vYXdzLWNsb3Vkd2F0Y2gnO1xuZXhwb3J0ICogYXMgYXdzX2xhbWJkYSBmcm9tICcuL2F3cy1sYW1iZGEnO1xuZXhwb3J0ICogYXMgYXdzX21vbml0b3JpbmcgZnJvbSAnLi9hd3MtbW9uaXRvcmluZyc7XG5leHBvcnQgKiBhcyBhd3Nfcm91dGU1MyBmcm9tICcuL2F3cy1yb3V0ZTUzJztcbiJdfQ==
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.4",
3
+ "version": "0.0.5",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "scripts": {
@@ -24,10 +24,11 @@
24
24
  "exports": {
25
25
  ".": "./index.js",
26
26
  "./package.json": "./package.json",
27
- "./aws-route53": "./aws-route53/index.js",
28
- "./aws-monitoring": "./aws-monitoring/index.js",
27
+ "./aws-cloudwatch": "./aws-cloudwatch/index.js",
29
28
  "./aws-lambda": "./aws-lambda/index.js",
30
- "./aws-cloudwatch": "./aws-cloudwatch/index.js"
29
+ "./aws-monitoring": "./aws-monitoring/index.js",
30
+ "./aws-route53": "./aws-route53/index.js",
31
+ "./aws-sqs": "./aws-sqs/index.js"
31
32
  },
32
33
  "publishConfig": {
33
34
  "access": "public"
@@ -35,5 +36,5 @@
35
36
  "dependencies": {
36
37
  "cdk-monitoring-constructs": "^1.6.4"
37
38
  },
38
- "gitHead": "21b86e99ab77de7660d53d2a7b504c90af9c3810"
39
+ "gitHead": "ee103d9dd2e1d13bbd7f19dab14e42846400ba18"
39
40
  }