rds-database-auto-start-preventer 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,49 +1,29 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.RDSDatabaseAutoStartPreventer = void 0;
37
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
38
5
  const aws_cdk_lib_1 = require("aws-cdk-lib");
39
- const events = __importStar(require("aws-cdk-lib/aws-events"));
40
- const targets = __importStar(require("aws-cdk-lib/aws-events-targets"));
41
- const iam = __importStar(require("aws-cdk-lib/aws-iam"));
42
- const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
43
- const logs = __importStar(require("aws-cdk-lib/aws-logs"));
6
+ const aws_events_1 = require("aws-cdk-lib/aws-events");
7
+ const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
8
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
9
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
10
+ const aws_logs_1 = require("aws-cdk-lib/aws-logs");
44
11
  const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
45
12
  const constructs_1 = require("constructs");
13
+ const lambda_failure_detector_1 = require("lambda-failure-detector");
46
14
  const auto_start_prevent_function_1 = require("./funcs/auto-start-prevent-function");
15
+ const consts_1 = require("./settings/consts");
16
+ /** EventBridge retries when delivering an auto-start event to the Lambda alias. */
17
+ const EVENT_TARGET_RETRY_ATTEMPTS = 2;
18
+ /** Log-based failures watched when failure detection is enabled. */
19
+ const AUTO_START_PREVENT_LOG_FILTERS = [
20
+ {
21
+ id: 'AutoStartPreventFailed',
22
+ filterPattern: `"${consts_1.AUTO_START_PREVENT_FAILED_LOG_TERM}"`,
23
+ metricNamespace: 'RDSDatabaseAutoStartPreventer',
24
+ metricName: 'AutoStartPreventFailed',
25
+ },
26
+ ];
47
27
  /**
48
28
  * Returns true when a concrete string is empty or whitespace-only.
49
29
  * Unresolved CDK tokens are treated as present because their value is unknown at synthesis.
@@ -83,11 +63,13 @@ const validateProps = (props) => {
83
63
  * using `TagList` from `rds:DescribeDBInstances` / `rds:DescribeDBClusters`.
84
64
  * IAM grants account/region-scoped describe on `db` / `cluster` ARNs, and stop only
85
65
  * when `aws:ResourceTag` matches {@link TargetResource} (no Resource Groups Tagging API).
66
+ * CloudWatch failure alarms are created only when
67
+ * {@link RDSDatabaseAutoStartPreventerProps.failureDetection} is enabled.
86
68
  */
87
69
  class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
88
- static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.5.3" };
70
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.6.0" };
89
71
  /**
90
- * Creates the Durable Lambda, EventBridge rules, and IAM policies.
72
+ * Creates the Durable Lambda, EventBridge rules, IAM policies, and optional failure alarms.
91
73
  *
92
74
  * The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
93
75
  * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}. Tag filters are passed
@@ -105,12 +87,19 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
105
87
  const slackSecret = slackSecretName === undefined
106
88
  ? undefined
107
89
  : aws_secretsmanager_1.Secret.fromSecretNameV2(this, 'SlackSecret', slackSecretName);
108
- // Durable Functions-based Running Scheduler (previous Step Functions logic implemented in Lambda).
90
+ const autoStartPreventFunctionLogGroup = new aws_logs_1.LogGroup(this, 'AutoStartPreventFunctionLogGroup', {
91
+ retention: aws_logs_1.RetentionDays.THREE_MONTHS,
92
+ // Delete on failed create/rollback; retain after successful create (stack delete/replace).
93
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE,
94
+ });
95
+ // Durable Lambda that waits for the auto-started resource to settle, stops it when tags match,
96
+ // and posts to Slack after the stop when a Slack secret is configured.
109
97
  // Durable Execution requires Node.js 22+.
110
98
  const autoStartPreventFunction = new auto_start_prevent_function_1.AutoStartPreventFunction(this, 'AutoStartPreventFunction', {
111
99
  description: 'A function to prevent the RDS Database or Cluster from starting automatically.',
112
- architecture: lambda.Architecture.ARM_64,
113
- timeout: aws_cdk_lib_1.Duration.minutes(15),
100
+ architecture: aws_lambda_1.Architecture.ARM_64,
101
+ // Durable waits suspend the invocation, so this only covers the API calls between waits.
102
+ timeout: aws_cdk_lib_1.Duration.minutes(3),
114
103
  memorySize: 512,
115
104
  retryAttempts: 2,
116
105
  durableConfig: {
@@ -125,26 +114,22 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
125
114
  // Required by aws-lambda-secret-fetcher (^0.6+) when Slack is configured.
126
115
  paramsAndSecrets: slackSecret === undefined
127
116
  ? undefined
128
- : lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
117
+ : aws_lambda_1.ParamsAndSecretsLayerVersion.fromVersion(aws_lambda_1.ParamsAndSecretsVersions.V1_0_103, {
129
118
  cacheSize: 500,
130
- logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
119
+ logLevel: aws_lambda_1.ParamsAndSecretsLogLevel.INFO,
131
120
  }),
132
- role: new iam.Role(this, 'AutoStartPreventFunctionRole', {
121
+ role: new aws_iam_1.Role(this, 'AutoStartPreventFunctionRole', {
133
122
  description: 'A role to control the RDS Database or Cluster.',
134
- assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
123
+ assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
135
124
  managedPolicies: [
136
- iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
137
- iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicDurableExecutionRolePolicy'),
125
+ aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
126
+ aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicDurableExecutionRolePolicy'),
138
127
  ],
139
128
  }),
140
- logGroup: new logs.LogGroup(this, 'AutoStartPreventFunctionLogGroup', {
141
- retention: logs.RetentionDays.THREE_MONTHS,
142
- // Delete on failed create/rollback; retain after successful create (stack delete/replace).
143
- removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE,
144
- }),
145
- loggingFormat: lambda.LoggingFormat.JSON,
146
- systemLogLevelV2: lambda.SystemLogLevel.INFO,
147
- applicationLogLevelV2: lambda.ApplicationLogLevel.INFO,
129
+ logGroup: autoStartPreventFunctionLogGroup,
130
+ loggingFormat: aws_lambda_1.LoggingFormat.JSON,
131
+ systemLogLevelV2: aws_lambda_1.SystemLogLevel.INFO,
132
+ applicationLogLevelV2: aws_lambda_1.ApplicationLogLevel.INFO,
148
133
  });
149
134
  const rdsDbAndClusterArns = [
150
135
  aws_cdk_lib_1.Stack.of(this).formatArn({
@@ -161,9 +146,9 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
161
146
  }),
162
147
  ];
163
148
  // Describe stays without ResourceTag so TagList can be read for non-matching resources.
164
- autoStartPreventFunction.addToRolePolicy(new iam.PolicyStatement({
149
+ autoStartPreventFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
165
150
  sid: 'RdsDescribeForTagFilter',
166
- effect: iam.Effect.ALLOW,
151
+ effect: aws_iam_1.Effect.ALLOW,
167
152
  actions: [
168
153
  'rds:DescribeDBInstances',
169
154
  'rds:DescribeDBClusters',
@@ -171,9 +156,9 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
171
156
  resources: rdsDbAndClusterArns,
172
157
  }));
173
158
  // Stop is limited to db/cluster ARNs whose tag matches targetResource.
174
- autoStartPreventFunction.addToRolePolicy(new iam.PolicyStatement({
159
+ autoStartPreventFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
175
160
  sid: 'RdsStopTaggedTargets',
176
- effect: iam.Effect.ALLOW,
161
+ effect: aws_iam_1.Effect.ALLOW,
177
162
  actions: [
178
163
  'rds:StopDBInstance',
179
164
  'rds:StopDBCluster',
@@ -188,49 +173,55 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
188
173
  if (slackSecret !== undefined) {
189
174
  slackSecret.grantRead(autoStartPreventFunction);
190
175
  }
176
+ (0, lambda_failure_detector_1.createLambdaFailureDetector)(this, 'FailureDetection', {
177
+ failureDetection: props.failureDetection,
178
+ lambdaFunction: autoStartPreventFunction,
179
+ logGroup: autoStartPreventFunctionLogGroup,
180
+ logFilters: AUTO_START_PREVENT_LOG_FILTERS,
181
+ });
191
182
  // See: https://docs.aws.amazon.com/lambda/latest/dg/durable-getting-started-iac.html
192
183
  const autoStartPreventFunctionAlias = autoStartPreventFunction.addAlias('live');
193
184
  const enableRule = props.enableRule !== false;
194
185
  // Pass the EventBridge event and tag filter params to the Lambda target input.
195
- const lambdaInput = events.RuleTargetInput.fromObject({
196
- event: events.EventField.fromPath('$'),
186
+ const lambdaInput = aws_events_1.RuleTargetInput.fromObject({
187
+ event: aws_events_1.EventField.fromPath('$'),
197
188
  params: {
198
189
  tagKey: props.targetResource.tagKey,
199
190
  tagValues: props.targetResource.tagValues,
200
191
  },
201
192
  });
202
- // 👇 EventBridge by RDS DB Instance auto start event
203
- new events.Rule(this, 'DBInstanceEvent', {
204
- description: 'rds db instance auto start event catch rule.',
193
+ // EventBridge rule for DB instance auto-start events (RDS-EVENT-0154).
194
+ new aws_events_1.Rule(this, 'DBInstanceEvent', {
195
+ description: 'Catches RDS DB instance auto-start events (RDS-EVENT-0154).',
205
196
  enabled: enableRule,
206
197
  eventPattern: {
207
- source: ['aws.rds'],
208
- detailType: ['RDS DB Instance Event'],
198
+ source: [consts_1.RDS_EVENT_SOURCE],
199
+ detailType: [consts_1.DB_INSTANCE_AUTO_START_EVENT.detailType],
209
200
  detail: {
210
- EventID: ['RDS-EVENT-0154'],
201
+ EventID: [consts_1.DB_INSTANCE_AUTO_START_EVENT.eventId],
211
202
  },
212
203
  },
213
204
  targets: [
214
- new targets.LambdaFunction(autoStartPreventFunctionAlias, {
215
- retryAttempts: 2,
205
+ new aws_events_targets_1.LambdaFunction(autoStartPreventFunctionAlias, {
206
+ retryAttempts: EVENT_TARGET_RETRY_ATTEMPTS,
216
207
  event: lambdaInput,
217
208
  }),
218
209
  ],
219
210
  });
220
- // 👇 EventBridge by RDS DB Cluster auto start event
221
- new events.Rule(this, 'DBClusterEvent', {
222
- description: 'db cluster auto start event catch rule',
211
+ // EventBridge rule for DB cluster auto-start events (RDS-EVENT-0153).
212
+ new aws_events_1.Rule(this, 'DBClusterEvent', {
213
+ description: 'Catches RDS DB cluster auto-start events (RDS-EVENT-0153).',
223
214
  enabled: enableRule,
224
215
  eventPattern: {
225
- source: ['aws.rds'],
226
- detailType: ['RDS DB Cluster Event'],
216
+ source: [consts_1.RDS_EVENT_SOURCE],
217
+ detailType: [consts_1.DB_CLUSTER_AUTO_START_EVENT.detailType],
227
218
  detail: {
228
- EventID: ['RDS-EVENT-0153'],
219
+ EventID: [consts_1.DB_CLUSTER_AUTO_START_EVENT.eventId],
229
220
  },
230
221
  },
231
222
  targets: [
232
- new targets.LambdaFunction(autoStartPreventFunctionAlias, {
233
- retryAttempts: 2,
223
+ new aws_events_targets_1.LambdaFunction(autoStartPreventFunctionAlias, {
224
+ retryAttempts: EVENT_TARGET_RETRY_ATTEMPTS,
234
225
  event: lambdaInput,
235
226
  }),
236
227
  ],
@@ -238,4 +229,4 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
238
229
  }
239
230
  }
240
231
  exports.RDSDatabaseAutoStartPreventer = RDSDatabaseAutoStartPreventer;
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jkcy1kYXRhYmFzZS1hdXRvLXN0YXJ0LXByZXZlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQStFO0FBQy9FLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFDMUQseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MsdUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxxRkFBK0U7QUFzQy9FOzs7Ozs7R0FNRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUFXLEVBQUUsQ0FDN0MsQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUUxRDs7Ozs7R0FLRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBeUMsRUFBUSxFQUFFO0lBQ3hFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25ELElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlFLENB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UUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN0QyxXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELE9BQU8sRUFBRSxVQUFVO1lBQ25CLFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLFVBQVUsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNwQyxNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBOUpILHNFQStKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFybkZvcm1hdCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQtZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRhZy1iYXNlZCBjcml0ZXJpYSBldmFsdWF0ZWQgaW4gdGhlIExhbWJkYSBoYW5kbGVyIChub3Qgb24gdGhlIEV2ZW50QnJpZGdlIHJ1bGUpLlxuICogUmVzb3VyY2VzIHdob3NlIHRhZyB2YWx1ZSBmb3Ige0BsaW5rIFRhcmdldFJlc291cmNlLnRhZ0tleX0gaXMgbm90IGluXG4gKiB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzfSBhcmUgc2tpcHBlZCB3aXRob3V0IGNhbGxpbmcgU3RvcERCKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHRvIG1hdGNoIChlLmcuIFwiRW52aXJvbm1lbnRcIiwgXCJBdXRvU3RhcnRQcmV2ZW50XCIpLiAqL1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgLyoqIFRhZyB2YWx1ZXMgdGhhdCBpbmRpY2F0ZSB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIHByb3RlY3RlZCAoZS5nLiBbXCJwcm9kdWN0aW9uXCJdKS4gKi9cbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBzZWNyZXRzIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS5cbiAqIE9taXQge0BsaW5rIFNlY3JldHMuc2xhY2tTZWNyZXROYW1lfSB0byBza2lwIFNsYWNrIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0cyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGNvbnRhaW5pbmcgU2xhY2sgdG9rZW4gYW5kIGNoYW5uZWwuXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIGhhbmRsZXIgc3RvcHMgbWF0Y2hpbmcgUkRTIHJlc291cmNlcyBhbmQgZG9lcyBub3QgcG9zdCB0byBTbGFjay5cbiAgICovXG4gIHJlYWRvbmx5IHNsYWNrU2VjcmV0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvLXN0YXJ0IHByZXZlbnRlciBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGNyaXRlcmlhIGZvciBSRFMgaW5zdGFuY2VzL2NsdXN0ZXJzIHRvIHByb3RlY3QuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIHJ1bGVzIGFyZSBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyB1c2VkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBhIGNvbmNyZXRlIHN0cmluZyBpcyBlbXB0eSBvciB3aGl0ZXNwYWNlLW9ubHkuXG4gKiBVbnJlc29sdmVkIENESyB0b2tlbnMgYXJlIHRyZWF0ZWQgYXMgcHJlc2VudCBiZWNhdXNlIHRoZWlyIHZhbHVlIGlzIHVua25vd24gYXQgc3ludGhlc2lzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFByb3Agc3RyaW5nIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgYmxhbmsuXG4gKi9cbmNvbnN0IGlzQmxhbmtUZXh0ID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICFUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDA7XG5cbi8qKlxuICogUmVqZWN0cyBlbXB0eSB0YWcgZmlsdGVycyBhbmQgU2xhY2sgc2VjcmV0IG5hbWVzIGJlZm9yZSByZXNvdXJjZXMgYXJlIGNyZWF0ZWQuXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29uc3RydWN0IHByb3BzIHRvIHZhbGlkYXRlLlxuICogQHRocm93cyBXaGVuIHRhZ0tleSBvciBhIHRhZyB2YWx1ZSBpcyBibGFuaywgdGFnVmFsdWVzIGlzIGVtcHR5LCBvciBzbGFja1NlY3JldE5hbWUgaXMgcHJlc2VudCBidXQgYmxhbmsuXG4gKi9cbmNvbnN0IHZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpOiB2b2lkID0+IHtcbiAgaWYgKGlzQmxhbmtUZXh0KHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldFJlc291cmNlLnRhZ0tleSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgfVxuICBpZiAocHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUuJyk7XG4gIH1cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMpIHtcbiAgICBpZiAoaXNCbGFua1RleHQodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyBtdXN0IG5vdCBjb250YWluIGVtcHR5IHN0cmluZ3MuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHNsYWNrU2VjcmV0TmFtZSA9IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lO1xuICBpZiAoc2xhY2tTZWNyZXROYW1lICE9PSB1bmRlZmluZWQgJiYgaXNCbGFua1RleHQoc2xhY2tTZWNyZXROYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2VjcmV0cy5zbGFja1NlY3JldE5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSBydWxlcyBhbmQgYSBEdXJhYmxlIExhbWJkYSB0byBzdG9wIG1hdGNoaW5nIFJEUyByZXNvdXJjZXNcbiAqIGFmdGVyIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCAvIFJEUy1FVkVOVC0wMTUzKS5cbiAqXG4gKiBFdmVudEJyaWRnZSBydWxlcyBtYXRjaCBhbGwgYXV0by1zdGFydCBldmVudHM7IHRhZyBmaWx0ZXJpbmcgcnVucyBpbiB0aGUgaGFuZGxlclxuICogdXNpbmcgYFRhZ0xpc3RgIGZyb20gYHJkczpEZXNjcmliZURCSW5zdGFuY2VzYCAvIGByZHM6RGVzY3JpYmVEQkNsdXN0ZXJzYC5cbiAqIElBTSBncmFudHMgYWNjb3VudC9yZWdpb24tc2NvcGVkIGRlc2NyaWJlIG9uIGBkYmAgLyBgY2x1c3RlcmAgQVJOcywgYW5kIHN0b3Agb25seVxuICogd2hlbiBgYXdzOlJlc291cmNlVGFnYCBtYXRjaGVzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0gKG5vIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlciBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIER1cmFibGUgTGFtYmRhLCBFdmVudEJyaWRnZSBydWxlcywgYW5kIElBTSBwb2xpY2llcy5cbiAgICpcbiAgICogVGhlIExhbWJkYSByZWNlaXZlcyBgeyBldmVudCwgcGFyYW1zIH1gIHdoZXJlIGBwYXJhbXNgIGNhcnJpZXMgYHRhZ0tleWAgYW5kIGB0YWdWYWx1ZXNgXG4gICAqIGZyb20ge0BsaW5rIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMudGFyZ2V0UmVzb3VyY2V9LiBUYWcgZmlsdGVycyBhcmUgcGFzc2VkXG4gICAqIG9ubHkgdmlhIHRoYXQgcGF5bG9hZCAobm90IHZpYSBgVEFHX0tFWWAgLyBgVEFHX1ZBTFVFU2AgZW52aXJvbm1lbnQgdmFyaWFibGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUYXJnZXQgcmVzb3VyY2UgKHRhZyBrZXkvdmFsdWVzKSwgZW5hYmxlIHJ1bGUgZmxhZywgYW5kIHNlY3JldHMuXG4gICAqIEB0aHJvd3MgV2hlbiB0YWdLZXkgb3IgYSB0YWcgdmFsdWUgaXMgYmxhbmssIHRhZ1ZhbHVlcyBpcyBlbXB0eSwgb3Igc2xhY2tTZWNyZXROYW1lIGlzIHByZXNlbnQgYnV0IGJsYW5rLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXROYW1lID0gcHJvcHMuc2VjcmV0cy5zbGFja1NlY3JldE5hbWU7XG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBzbGFja1NlY3JldE5hbWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogU2VjcmV0LmZyb21TZWNyZXROYW1lVjIodGhpcywgJ1NsYWNrU2VjcmV0Jywgc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIC8vIER1cmFibGUgRnVuY3Rpb25zLWJhc2VkIFJ1bm5pbmcgU2NoZWR1bGVyIChwcmV2aW91cyBTdGVwIEZ1bmN0aW9ucyBsb2dpYyBpbXBsZW1lbnRlZCBpbiBMYW1iZGEpLlxuICAgIC8vIER1cmFibGUgRXhlY3V0aW9uIHJlcXVpcmVzIE5vZGUuanMgMjIrLlxuICAgIGNvbnN0IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbiA9IG5ldyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24odGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvbicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBmdW5jdGlvbiB0byBwcmV2ZW50IHRoZSBSRFMgRGF0YWJhc2Ugb3IgQ2x1c3RlciBmcm9tIHN0YXJ0aW5nIGF1dG9tYXRpY2FsbHkuJyxcbiAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICBkdXJhYmxlQ29uZmlnOiB7XG4gICAgICAgIGV4ZWN1dGlvblRpbWVvdXQ6IER1cmF0aW9uLmhvdXJzKDIpLFxuICAgICAgICByZXRlbnRpb25QZXJpb2Q6IER1cmF0aW9uLmRheXMoMSksXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHNsYWNrU2VjcmV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiB7XG4gICAgICAgICAgU0xBQ0tfU0VDUkVUX05BTUU6IHNsYWNrU2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICAgIH0sXG4gICAgICAvLyBSZXF1aXJlZCBieSBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyICheMC42Kykgd2hlbiBTbGFjayBpcyBjb25maWd1cmVkLlxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogc2xhY2tTZWNyZXQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLmZyb21WZXJzaW9uKGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgICBsb2dMZXZlbDogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5JTkZPLFxuICAgICAgICB9KSxcbiAgICAgIHJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uUm9sZScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIHJvbGUgdG8gY29udHJvbCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIuJyxcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRHVyYWJsZUV4ZWN1dGlvblJvbGVQb2xpY3knKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgICAvLyBEZWxldGUgb24gZmFpbGVkIGNyZWF0ZS9yb2xsYmFjazsgcmV0YWluIGFmdGVyIHN1Y2Nlc3NmdWwgY3JlYXRlIChzdGFjayBkZWxldGUvcmVwbGFjZSkuXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOX09OX1VQREFURV9PUl9ERUxFVEUsXG4gICAgICB9KSxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBzeXN0ZW1Mb2dMZXZlbFYyOiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuSU5GTyxcbiAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWxWMjogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICB9KTtcbiAgICBjb25zdCByZHNEYkFuZENsdXN0ZXJBcm5zID0gW1xuICAgICAgU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICAgIHJlc291cmNlOiAnZGInLFxuICAgICAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgIH0pLFxuICAgICAgU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICAgIHJlc291cmNlOiAnY2x1c3RlcicsXG4gICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgfSksXG4gICAgXTtcbiAgICAvLyBEZXNjcmliZSBzdGF5cyB3aXRob3V0IFJlc291cmNlVGFnIHNvIFRhZ0xpc3QgY2FuIGJlIHJlYWQgZm9yIG5vbi1tYXRjaGluZyByZXNvdXJjZXMuXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNEZXNjcmliZUZvclRhZ0ZpbHRlcicsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdyZHM6RGVzY3JpYmVEQkluc3RhbmNlcycsXG4gICAgICAgICdyZHM6RGVzY3JpYmVEQkNsdXN0ZXJzJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IHJkc0RiQW5kQ2x1c3RlckFybnMsXG4gICAgfSkpO1xuICAgIC8vIFN0b3AgaXMgbGltaXRlZCB0byBkYi9jbHVzdGVyIEFSTnMgd2hvc2UgdGFnIG1hdGNoZXMgdGFyZ2V0UmVzb3VyY2UuXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNTdG9wVGFnZ2VkVGFyZ2V0cycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdyZHM6U3RvcERCSW5zdGFuY2UnLFxuICAgICAgICAncmRzOlN0b3BEQkNsdXN0ZXInLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogcmRzRGJBbmRDbHVzdGVyQXJucyxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgW2Bhd3M6UmVzb3VyY2VUYWcvJHtwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXl9YF06IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICAgIGlmIChzbGFja1NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzbGFja1NlY3JldC5ncmFudFJlYWQoYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZ2V0dGluZy1zdGFydGVkLWlhYy5odG1sXG4gICAgY29uc3QgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMgPSBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIGNvbnN0IGVuYWJsZVJ1bGUgPSBwcm9wcy5lbmFibGVSdWxlICE9PSBmYWxzZTtcblxuICAgIC8vIFBhc3MgdGhlIEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtcyB0byB0aGUgTGFtYmRhIHRhcmdldCBpbnB1dC5cbiAgICBjb25zdCBsYW1iZGFJbnB1dCA9IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICBldmVudDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQnKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0YWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgdGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJJbnN0YW5jZUV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdyZHMgZGIgaW5zdGFuY2UgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlLicsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIEluc3RhbmNlIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTQnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIENsdXN0ZXIgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2RiIGNsdXN0ZXIgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgQ2x1c3RlciBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTUzJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jkcy1kYXRhYmFzZS1hdXRvLXN0YXJ0LXByZXZlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQStFO0FBQy9FLHVEQUEyRTtBQUMzRSx1RUFBZ0U7QUFDaEUsaURBQXFHO0FBQ3JHLHVEQVFnQztBQUNoQyxtREFBK0Q7QUFDL0QsdUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxxRUFBZ0g7QUFDaEgscUZBQStFO0FBQy9FLDhDQUsyQjtBQUUzQixtRkFBbUY7QUFDbkYsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUM7QUFFdEMsb0VBQW9FO0FBQ3BFLE1BQU0sOEJBQThCLEdBQXVCO0lBQ3pEO1FBQ0UsRUFBRSxFQUFFLHdCQUF3QjtRQUM1QixhQUFhLEVBQUUsSUFBSSwyQ0FBa0MsR0FBRztRQUN4RCxlQUFlLEVBQUUsK0JBQStCO1FBQ2hELFVBQVUsRUFBRSx3QkFBd0I7S0FDckM7Q0FDRixDQUFDO0FBcURGOzs7Ozs7R0FNRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUFXLEVBQUUsQ0FDN0MsQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUUxRDs7Ozs7R0FLRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBeUMsRUFBUSxFQUFFO0lBQ3hFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1B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MUIsVUFBVSxFQUFFLENBQUMscUNBQTRCLENBQUMsVUFBVSxDQUFDO2dCQUNyRCxNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLENBQUMscUNBQTRCLENBQUMsT0FBTyxDQUFDO2lCQUNoRDthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksbUNBQWMsQ0FBQyw2QkFBNkIsRUFBRTtvQkFDaEQsYUFBYSxFQUFFLDJCQUEyQjtvQkFDMUMsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxJQUFJLGlCQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQy9CLFdBQVcsRUFBRSw0REFBNEQ7WUFDekUsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLHlCQUFnQixDQUFDO2dCQUMxQixVQUFVLEVBQUUsQ0FBQyxvQ0FBMkIsQ0FBQyxVQUFVLENBQUM7Z0JBQ3BELE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsQ0FBQyxvQ0FBMkIsQ0FBQyxPQUFPLENBQUM7aUJBQy9DO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxtQ0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUNoRCxhQUFhLEVBQUUsMkJBQTJCO29CQUMxQyxLQUFLLEVBQUUsV0FBVztpQkFDbkIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF6S0gsc0VBMEtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJuRm9ybWF0LCBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRXZlbnRGaWVsZCwgUnVsZSwgUnVsZVRhcmdldElucHV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBFZmZlY3QsIE1hbmFnZWRQb2xpY3ksIFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25Mb2dMZXZlbCxcbiAgQXJjaGl0ZWN0dXJlLFxuICBMb2dnaW5nRm9ybWF0LFxuICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gIFBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucyxcbiAgU3lzdGVtTG9nTGV2ZWwsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBjcmVhdGVMYW1iZGFGYWlsdXJlRGV0ZWN0b3IsIExhbWJkYUZhaWx1cmVEZXRlY3Rpb24sIExvZ0ZhaWx1cmVGaWx0ZXIgfSBmcm9tICdsYW1iZGEtZmFpbHVyZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gfSBmcm9tICcuL2Z1bmNzL2F1dG8tc3RhcnQtcHJldmVudC1mdW5jdGlvbic7XG5pbXBvcnQge1xuICBBVVRPX1NUQVJUX1BSRVZFTlRfRkFJTEVEX0xPR19URVJNLFxuICBEQl9DTFVTVEVSX0FVVE9fU1RBUlRfRVZFTlQsXG4gIERCX0lOU1RBTkNFX0FVVE9fU1RBUlRfRVZFTlQsXG4gIFJEU19FVkVOVF9TT1VSQ0UsXG59IGZyb20gJy4vc2V0dGluZ3MvY29uc3RzJztcblxuLyoqIEV2ZW50QnJpZGdlIHJldHJpZXMgd2hlbiBkZWxpdmVyaW5nIGFuIGF1dG8tc3RhcnQgZXZlbnQgdG8gdGhlIExhbWJkYSBhbGlhcy4gKi9cbmNvbnN0IEVWRU5UX1RBUkdFVF9SRVRSWV9BVFRFTVBUUyA9IDI7XG5cbi8qKiBMb2ctYmFzZWQgZmFpbHVyZXMgd2F0Y2hlZCB3aGVuIGZhaWx1cmUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQuICovXG5jb25zdCBBVVRPX1NUQVJUX1BSRVZFTlRfTE9HX0ZJTFRFUlM6IExvZ0ZhaWx1cmVGaWx0ZXJbXSA9IFtcbiAge1xuICAgIGlkOiAnQXV0b1N0YXJ0UHJldmVudEZhaWxlZCcsXG4gICAgZmlsdGVyUGF0dGVybjogYFwiJHtBVVRPX1NUQVJUX1BSRVZFTlRfRkFJTEVEX0xPR19URVJNfVwiYCxcbiAgICBtZXRyaWNOYW1lc3BhY2U6ICdSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlcicsXG4gICAgbWV0cmljTmFtZTogJ0F1dG9TdGFydFByZXZlbnRGYWlsZWQnLFxuICB9LFxuXTtcblxuLyoqXG4gKiBUYWctYmFzZWQgY3JpdGVyaWEgZXZhbHVhdGVkIGluIHRoZSBMYW1iZGEgaGFuZGxlciAobm90IG9uIHRoZSBFdmVudEJyaWRnZSBydWxlKS5cbiAqIFJlc291cmNlcyB3aG9zZSB0YWcgdmFsdWUgZm9yIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdLZXl9IGlzIG5vdCBpblxuICoge0BsaW5rIFRhcmdldFJlc291cmNlLnRhZ1ZhbHVlc30gYXJlIHNraXBwZWQgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0UmVzb3VyY2Uge1xuICAvKiogVGFnIGtleSB0byBtYXRjaCAoZS5nLiBcIkVudmlyb25tZW50XCIsIFwiQXV0b1N0YXJ0UHJldmVudFwiKS4gKi9cbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBUYWcgdmFsdWVzIHRoYXQgaW5kaWNhdGUgdGhlIHJlc291cmNlIHNob3VsZCBiZSBwcm90ZWN0ZWQgKGUuZy4gW1wicHJvZHVjdGlvblwiXSkuICovXG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgc2VjcmV0cyBmb3Igbm90aWZpY2F0aW9ucyAoZS5nLiBTbGFjaykuXG4gKiBPbWl0IHtAbGluayBTZWNyZXRzLnNsYWNrU2VjcmV0TmFtZX0gdG8gc2tpcCBTbGFjayBub3RpZmljYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLlxuICAgKiBXaGVuIG9taXR0ZWQsIHRoZSBoYW5kbGVyIHN0b3BzIG1hdGNoaW5nIFJEUyByZXNvdXJjZXMgYW5kIGRvZXMgbm90IHBvc3QgdG8gU2xhY2suXG4gICAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0LWluIENsb3VkV2F0Y2ggZmFpbHVyZSBkZXRlY3Rpb24gZm9yIHRoZSBhdXRvLXN0YXJ0IHByZXZlbnQgTGFtYmRhLlxuICpcbiAqIFdoZW4gYGVuYWJsZWRgIGlzIHRydWUsIGNyZWF0ZXMgYWxhcm1zIG9uIHRoZSBMYW1iZGEgYEVycm9yc2AgYW5kIGBUaHJvdHRsZXNgIG1ldHJpY3MgYW5kIG9uXG4gKiBmYWlsZWQgZXhlY3V0aW9ucyBsb2dnZWQgYnkgdGhlIGhhbmRsZXIgKGN1c3RvbSBtZXRyaWMgYFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyYCAvIGBBdXRvU3RhcnRQcmV2ZW50RmFpbGVkYCkuXG4gKiBObyBTTlMgdG9waWMgaXMgY3JlYXRlZDsgYWxhcm1zIG5vdGlmeSBgYWxhcm1Ub3BpY2Agb25seSB3aGVuIGl0IGlzIHNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvU3RhcnRQcmV2ZW50RmFpbHVyZURldGVjdGlvblByb3BzIGV4dGVuZHMgTGFtYmRhRmFpbHVyZURldGVjdGlvbiB7fVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUkRTIGRhdGFiYXNlIGF1dG8tc3RhcnQgcHJldmVudGVyIGNvbnN0cnVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlclByb3BzIHtcbiAgLyoqIFRhZy1iYXNlZCB0YXJnZXQgcmVzb3VyY2UgY3JpdGVyaWEgZm9yIFJEUyBpbnN0YW5jZXMvY2x1c3RlcnMgdG8gcHJvdGVjdC4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlO1xuICAvKiogV2hldGhlciB0aGUgRXZlbnRCcmlkZ2UgcnVsZXMgYXJlIGVuYWJsZWQuIERlZmF1bHRzIHRvIHRydWUgaWYgb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlUnVsZT86IGJvb2xlYW47XG4gIC8qKiBTZWNyZXRzIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMgKGUuZy4gU2xhY2spLiAqL1xuICByZWFkb25seSBzZWNyZXRzOiBTZWNyZXRzO1xuICAvKipcbiAgICogQ2xvdWRXYXRjaCBmYWlsdXJlIGRldGVjdGlvbiBmb3IgdGhlIExhbWJkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gYWxhcm1zXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogQXV0b1N0YXJ0UHJldmVudEZhaWx1cmVEZXRlY3Rpb25Qcm9wcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBhIGNvbmNyZXRlIHN0cmluZyBpcyBlbXB0eSBvciB3aGl0ZXNwYWNlLW9ubHkuXG4gKiBVbnJlc29sdmVkIENESyB0b2tlbnMgYXJlIHRyZWF0ZWQgYXMgcHJlc2VudCBiZWNhdXNlIHRoZWlyIHZhbHVlIGlzIHVua25vd24gYXQgc3ludGhlc2lzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFByb3Agc3RyaW5nIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgYmxhbmsuXG4gKi9cbmNvbnN0IGlzQmxhbmtUZXh0ID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICFUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDA7XG5cbi8qKlxuICogUmVqZWN0cyBlbXB0eSB0YWcgZmlsdGVycyBhbmQgU2xhY2sgc2VjcmV0IG5hbWVzIGJlZm9yZSByZXNvdXJjZXMgYXJlIGNyZWF0ZWQuXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29uc3RydWN0IHByb3BzIHRvIHZhbGlkYXRlLlxuICogQHRocm93cyBXaGVuIHRhZ0tleSBvciBhIHRhZyB2YWx1ZSBpcyBibGFuaywgdGFnVmFsdWVzIGlzIGVtcHR5LCBvciBzbGFja1NlY3JldE5hbWUgaXMgcHJlc2VudCBidXQgYmxhbmsuXG4gKi9cbmNvbnN0IHZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpOiB2b2lkID0+IHtcbiAgaWYgKGlzQmxhbmtUZXh0KHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldFJlc291cmNlLnRhZ0tleSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgfVxuICBpZiAocHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUuJyk7XG4gIH1cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMpIHtcbiAgICBpZiAoaXNCbGFua1RleHQodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyBtdXN0IG5vdCBjb250YWluIGVtcHR5IHN0cmluZ3MuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHNsYWNrU2VjcmV0TmFtZSA9IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lO1xuICBpZiAoc2xhY2tTZWNyZXROYW1lICE9PSB1bmRlZmluZWQgJiYgaXNCbGFua1RleHQoc2xhY2tTZWNyZXROYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2VjcmV0cy5zbGFja1NlY3JldE5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSBydWxlcyBhbmQgYSBEdXJhYmxlIExhbWJkYSB0byBzdG9wIG1hdGNoaW5nIFJEUyByZXNvdXJjZXNcbiAqIGFmdGVyIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCAvIFJEUy1FVkVOVC0wMTUzKS5cbiAqXG4gKiBFdmVudEJyaWRnZSBydWxlcyBtYXRjaCBhbGwgYXV0by1zdGFydCBldmVudHM7IHRhZyBmaWx0ZXJpbmcgcnVucyBpbiB0aGUgaGFuZGxlclxuICogdXNpbmcgYFRhZ0xpc3RgIGZyb20gYHJkczpEZXNjcmliZURCSW5zdGFuY2VzYCAvIGByZHM6RGVzY3JpYmVEQkNsdXN0ZXJzYC5cbiAqIElBTSBncmFudHMgYWNjb3VudC9yZWdpb24tc2NvcGVkIGRlc2NyaWJlIG9uIGBkYmAgLyBgY2x1c3RlcmAgQVJOcywgYW5kIHN0b3Agb25seVxuICogd2hlbiBgYXdzOlJlc291cmNlVGFnYCBtYXRjaGVzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0gKG5vIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSkuXG4gKiBDbG91ZFdhdGNoIGZhaWx1cmUgYWxhcm1zIGFyZSBjcmVhdGVkIG9ubHkgd2hlblxuICoge0BsaW5rIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgRHVyYWJsZSBMYW1iZGEsIEV2ZW50QnJpZGdlIHJ1bGVzLCBJQU0gcG9saWNpZXMsIGFuZCBvcHRpb25hbCBmYWlsdXJlIGFsYXJtcy5cbiAgICpcbiAgICogVGhlIExhbWJkYSByZWNlaXZlcyBgeyBldmVudCwgcGFyYW1zIH1gIHdoZXJlIGBwYXJhbXNgIGNhcnJpZXMgYHRhZ0tleWAgYW5kIGB0YWdWYWx1ZXNgXG4gICAqIGZyb20ge0BsaW5rIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMudGFyZ2V0UmVzb3VyY2V9LiBUYWcgZmlsdGVycyBhcmUgcGFzc2VkXG4gICAqIG9ubHkgdmlhIHRoYXQgcGF5bG9hZCAobm90IHZpYSBgVEFHX0tFWWAgLyBgVEFHX1ZBTFVFU2AgZW52aXJvbm1lbnQgdmFyaWFibGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUYXJnZXQgcmVzb3VyY2UgKHRhZyBrZXkvdmFsdWVzKSwgZW5hYmxlIHJ1bGUgZmxhZywgYW5kIHNlY3JldHMuXG4gICAqIEB0aHJvd3MgV2hlbiB0YWdLZXkgb3IgYSB0YWcgdmFsdWUgaXMgYmxhbmssIHRhZ1ZhbHVlcyBpcyBlbXB0eSwgb3Igc2xhY2tTZWNyZXROYW1lIGlzIHByZXNlbnQgYnV0IGJsYW5rLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXROYW1lID0gcHJvcHMuc2VjcmV0cy5zbGFja1NlY3JldE5hbWU7XG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBzbGFja1NlY3JldE5hbWUgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogU2VjcmV0LmZyb21TZWNyZXROYW1lVjIodGhpcywgJ1NsYWNrU2VjcmV0Jywgc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIGNvbnN0IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5USFJFRV9NT05USFMsXG4gICAgICAvLyBEZWxldGUgb24gZmFpbGVkIGNyZWF0ZS9yb2xsYmFjazsgcmV0YWluIGFmdGVyIHN1Y2Nlc3NmdWwgY3JlYXRlIChzdGFjayBkZWxldGUvcmVwbGFjZSkuXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFLFxuICAgIH0pO1xuXG4gICAgLy8gRHVyYWJsZSBMYW1iZGEgdGhhdCB3YWl0cyBmb3IgdGhlIGF1dG8tc3RhcnRlZCByZXNvdXJjZSB0byBzZXR0bGUsIHN0b3BzIGl0IHdoZW4gdGFncyBtYXRjaCxcbiAgICAvLyBhbmQgcG9zdHMgdG8gU2xhY2sgYWZ0ZXIgdGhlIHN0b3Agd2hlbiBhIFNsYWNrIHNlY3JldCBpcyBjb25maWd1cmVkLlxuICAgIC8vIER1cmFibGUgRXhlY3V0aW9uIHJlcXVpcmVzIE5vZGUuanMgMjIrLlxuICAgIGNvbnN0IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbiA9IG5ldyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24odGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvbicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBmdW5jdGlvbiB0byBwcmV2ZW50IHRoZSBSRFMgRGF0YWJhc2Ugb3IgQ2x1c3RlciBmcm9tIHN0YXJ0aW5nIGF1dG9tYXRpY2FsbHkuJyxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIC8vIER1cmFibGUgd2FpdHMgc3VzcGVuZCB0aGUgaW52b2NhdGlvbiwgc28gdGhpcyBvbmx5IGNvdmVycyB0aGUgQVBJIGNhbGxzIGJldHdlZW4gd2FpdHMuXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDMpLFxuICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgIGR1cmFibGVDb25maWc6IHtcbiAgICAgICAgZXhlY3V0aW9uVGltZW91dDogRHVyYXRpb24uaG91cnMoMiksXG4gICAgICAgIHJldGVudGlvblBlcmlvZDogRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDogc2xhY2tTZWNyZXQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICBTTEFDS19TRUNSRVRfTkFNRTogc2xhY2tTZWNyZXQuc2VjcmV0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgIC8vIFJlcXVpcmVkIGJ5IGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgKF4wLjYrKSB3aGVuIFNsYWNrIGlzIGNvbmZpZ3VyZWQuXG4gICAgICBwYXJhbXNBbmRTZWNyZXRzOiBzbGFja1NlY3JldCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgICBsb2dMZXZlbDogUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IFJvbGUodGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvblJvbGUnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQSByb2xlIHRvIGNvbnRyb2wgdGhlIFJEUyBEYXRhYmFzZSBvciBDbHVzdGVyLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Mb2dHcm91cCxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IExvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IFN5c3RlbUxvZ0xldmVsLklORk8sXG4gICAgICBhcHBsaWNhdGlvbkxvZ0xldmVsVjI6IEFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICB9KTtcbiAgICBjb25zdCByZHNEYkFuZENsdXN0ZXJBcm5zID0gW1xuICAgICAgU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICAgIHJlc291cmNlOiAnZGInLFxuICAgICAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgIH0pLFxuICAgICAgU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICAgIHJlc291cmNlOiAnY2x1c3RlcicsXG4gICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgfSksXG4gICAgXTtcbiAgICAvLyBEZXNjcmliZSBzdGF5cyB3aXRob3V0IFJlc291cmNlVGFnIHNvIFRhZ0xpc3QgY2FuIGJlIHJlYWQgZm9yIG5vbi1tYXRjaGluZyByZXNvdXJjZXMuXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ1Jkc0Rlc2NyaWJlRm9yVGFnRmlsdGVyJyxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAncmRzOkRlc2NyaWJlREJJbnN0YW5jZXMnLFxuICAgICAgICAncmRzOkRlc2NyaWJlREJDbHVzdGVycycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiByZHNEYkFuZENsdXN0ZXJBcm5zLFxuICAgIH0pKTtcbiAgICAvLyBTdG9wIGlzIGxpbWl0ZWQgdG8gZGIvY2x1c3RlciBBUk5zIHdob3NlIHRhZyBtYXRjaGVzIHRhcmdldFJlc291cmNlLlxuICAgIGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNTdG9wVGFnZ2VkVGFyZ2V0cycsXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3JkczpTdG9wREJJbnN0YW5jZScsXG4gICAgICAgICdyZHM6U3RvcERCQ2x1c3RlcicsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiByZHNEYkFuZENsdXN0ZXJBcm5zLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICBbYGF3czpSZXNvdXJjZVRhZy8ke3Byb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleX1gXTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gICAgaWYgKHNsYWNrU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNsYWNrU2VjcmV0LmdyYW50UmVhZChhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24pO1xuICAgIH1cblxuICAgIGNyZWF0ZUxhbWJkYUZhaWx1cmVEZXRlY3Rvcih0aGlzLCAnRmFpbHVyZURldGVjdGlvbicsIHtcbiAgICAgIGZhaWx1cmVEZXRlY3Rpb246IHByb3BzLmZhaWx1cmVEZXRlY3Rpb24sXG4gICAgICBsYW1iZGFGdW5jdGlvbjogYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLFxuICAgICAgbG9nR3JvdXA6IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nRmlsdGVyczogQVVUT19TVEFSVF9QUkVWRU5UX0xPR19GSUxURVJTLFxuICAgIH0pO1xuXG4gICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9kdXJhYmxlLWdldHRpbmctc3RhcnRlZC1pYWMuaHRtbFxuICAgIGNvbnN0IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzID0gYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZEFsaWFzKCdsaXZlJyk7XG5cbiAgICBjb25zdCBlbmFibGVSdWxlID0gcHJvcHMuZW5hYmxlUnVsZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBQYXNzIHRoZSBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbXMgdG8gdGhlIExhbWJkYSB0YXJnZXQgaW5wdXQuXG4gICAgY29uc3QgbGFtYmRhSW5wdXQgPSBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICBldmVudDogRXZlbnRGaWVsZC5mcm9tUGF0aCgnJCcpLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIHRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICB0YWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFdmVudEJyaWRnZSBydWxlIGZvciBEQiBpbnN0YW5jZSBhdXRvLXN0YXJ0IGV2ZW50cyAoUkRTLUVWRU5ULTAxNTQpLlxuICAgIG5ldyBSdWxlKHRoaXMsICdEQkluc3RhbmNlRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0NhdGNoZXMgUkRTIERCIGluc3RhbmNlIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCkuJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbUkRTX0VWRU5UX1NPVVJDRV0sXG4gICAgICAgIGRldGFpbFR5cGU6IFtEQl9JTlNUQU5DRV9BVVRPX1NUQVJUX0VWRU5ULmRldGFpbFR5cGVdLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbREJfSU5TVEFOQ0VfQVVUT19TVEFSVF9FVkVOVC5ldmVudElkXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyBMYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IEVWRU5UX1RBUkdFVF9SRVRSWV9BVFRFTVBUUyxcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIERCIGNsdXN0ZXIgYXV0by1zdGFydCBldmVudHMgKFJEUy1FVkVOVC0wMTUzKS5cbiAgICBuZXcgUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0NhdGNoZXMgUkRTIERCIGNsdXN0ZXIgYXV0by1zdGFydCBldmVudHMgKFJEUy1FVkVOVC0wMTUzKS4nLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFtSRFNfRVZFTlRfU09VUkNFXSxcbiAgICAgICAgZGV0YWlsVHlwZTogW0RCX0NMVVNURVJfQVVUT19TVEFSVF9FVkVOVC5kZXRhaWxUeXBlXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogW0RCX0NMVVNURVJfQVVUT19TVEFSVF9FVkVOVC5ldmVudElkXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyBMYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IEVWRU5UX1RBUkdFVF9SRVRSWV9BVFRFTVBUUyxcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Values shared by the construct (EventBridge rules) and the Lambda handler (event checks).
3
+ */
4
+ /** EventBridge source for RDS events. */
5
+ export declare const RDS_EVENT_SOURCE = "aws.rds";
6
+ /** RDS DB instance auto-start event (RDS-EVENT-0154). */
7
+ export declare const DB_INSTANCE_AUTO_START_EVENT: {
8
+ readonly detailType: "RDS DB Instance Event";
9
+ readonly eventId: "RDS-EVENT-0154";
10
+ readonly sourceType: "DB_INSTANCE";
11
+ };
12
+ /** RDS DB cluster auto-start event (RDS-EVENT-0153). */
13
+ export declare const DB_CLUSTER_AUTO_START_EVENT: {
14
+ readonly detailType: "RDS DB Cluster Event";
15
+ readonly eventId: "RDS-EVENT-0153";
16
+ readonly sourceType: "CLUSTER";
17
+ };
18
+ /** Term logged by the handler when an execution fails; matched by the failure detection metric filter. */
19
+ export declare const AUTO_START_PREVENT_FAILED_LOG_TERM = "AutoStartPreventFailed";
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Values shared by the construct (EventBridge rules) and the Lambda handler (event checks).
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AUTO_START_PREVENT_FAILED_LOG_TERM = exports.DB_CLUSTER_AUTO_START_EVENT = exports.DB_INSTANCE_AUTO_START_EVENT = exports.RDS_EVENT_SOURCE = void 0;
7
+ /** EventBridge source for RDS events. */
8
+ exports.RDS_EVENT_SOURCE = 'aws.rds';
9
+ /** RDS DB instance auto-start event (RDS-EVENT-0154). */
10
+ exports.DB_INSTANCE_AUTO_START_EVENT = {
11
+ detailType: 'RDS DB Instance Event',
12
+ eventId: 'RDS-EVENT-0154',
13
+ sourceType: 'DB_INSTANCE',
14
+ };
15
+ /** RDS DB cluster auto-start event (RDS-EVENT-0153). */
16
+ exports.DB_CLUSTER_AUTO_START_EVENT = {
17
+ detailType: 'RDS DB Cluster Event',
18
+ eventId: 'RDS-EVENT-0153',
19
+ sourceType: 'CLUSTER',
20
+ };
21
+ /** Term logged by the handler when an execution fails; matched by the failure detection metric filter. */
22
+ exports.AUTO_START_PREVENT_FAILED_LOG_TERM = 'AutoStartPreventFailed';
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NldHRpbmdzL2NvbnN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILHlDQUF5QztBQUM1QixRQUFBLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUUxQyx5REFBeUQ7QUFDNUMsUUFBQSw0QkFBNEIsR0FBRztJQUMxQyxVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsVUFBVSxFQUFFLGFBQWE7Q0FDakIsQ0FBQztBQUVYLHdEQUF3RDtBQUMzQyxRQUFBLDJCQUEyQixHQUFHO0lBQ3pDLFVBQVUsRUFBRSxzQkFBc0I7SUFDbEMsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixVQUFVLEVBQUUsU0FBUztDQUNiLENBQUM7QUFFWCwwR0FBMEc7QUFDN0YsUUFBQSxrQ0FBa0MsR0FBRyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmFsdWVzIHNoYXJlZCBieSB0aGUgY29uc3RydWN0IChFdmVudEJyaWRnZSBydWxlcykgYW5kIHRoZSBMYW1iZGEgaGFuZGxlciAoZXZlbnQgY2hlY2tzKS5cbiAqL1xuXG4vKiogRXZlbnRCcmlkZ2Ugc291cmNlIGZvciBSRFMgZXZlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IFJEU19FVkVOVF9TT1VSQ0UgPSAnYXdzLnJkcyc7XG5cbi8qKiBSRFMgREIgaW5zdGFuY2UgYXV0by1zdGFydCBldmVudCAoUkRTLUVWRU5ULTAxNTQpLiAqL1xuZXhwb3J0IGNvbnN0IERCX0lOU1RBTkNFX0FVVE9fU1RBUlRfRVZFTlQgPSB7XG4gIGRldGFpbFR5cGU6ICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnLFxuICBldmVudElkOiAnUkRTLUVWRU5ULTAxNTQnLFxuICBzb3VyY2VUeXBlOiAnREJfSU5TVEFOQ0UnLFxufSBhcyBjb25zdDtcblxuLyoqIFJEUyBEQiBjbHVzdGVyIGF1dG8tc3RhcnQgZXZlbnQgKFJEUy1FVkVOVC0wMTUzKS4gKi9cbmV4cG9ydCBjb25zdCBEQl9DTFVTVEVSX0FVVE9fU1RBUlRfRVZFTlQgPSB7XG4gIGRldGFpbFR5cGU6ICdSRFMgREIgQ2x1c3RlciBFdmVudCcsXG4gIGV2ZW50SWQ6ICdSRFMtRVZFTlQtMDE1MycsXG4gIHNvdXJjZVR5cGU6ICdDTFVTVEVSJyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBUZXJtIGxvZ2dlZCBieSB0aGUgaGFuZGxlciB3aGVuIGFuIGV4ZWN1dGlvbiBmYWlsczsgbWF0Y2hlZCBieSB0aGUgZmFpbHVyZSBkZXRlY3Rpb24gbWV0cmljIGZpbHRlci4gKi9cbmV4cG9ydCBjb25zdCBBVVRPX1NUQVJUX1BSRVZFTlRfRkFJTEVEX0xPR19URVJNID0gJ0F1dG9TdGFydFByZXZlbnRGYWlsZWQnO1xuIl19
package/package.json CHANGED
@@ -40,7 +40,8 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@aws-sdk/client-rds": "^3.1063.0",
43
- "@aws/durable-execution-sdk-js": "^1.1.7",
43
+ "@aws/durable-execution-sdk-js": "^3.0.0",
44
+ "@aws/durable-execution-sdk-js-testing": "^1.3.2",
44
45
  "@gammarers/projen-projects": "^0.5.10",
45
46
  "@slack/web-api": "^6.13.0",
46
47
  "@stylistic/eslint-plugin": "^2",
@@ -50,7 +51,7 @@
50
51
  "@typescript-eslint/eslint-plugin": "^8",
51
52
  "@typescript-eslint/parser": "^8",
52
53
  "aws-cdk-lib": "2.232.0",
53
- "aws-lambda-secret-fetcher": "^0.8.0",
54
+ "aws-lambda-secret-fetcher": "^0.10.0",
54
55
  "aws-sdk-client-mock": "^4.1.0",
55
56
  "aws-sdk-client-mock-jest": "^4.1.0",
56
57
  "commit-and-tag-version": "^13",
@@ -66,15 +67,17 @@
66
67
  "jsii-docgen": "^10.5.0",
67
68
  "jsii-pacmak": "^1.142.0",
68
69
  "jsii-rosetta": "6.0.x",
70
+ "lambda-failure-detector": "0.2.3",
69
71
  "projen": "^0.104.27",
70
- "strict-env-resolver": "^0.7.1",
72
+ "strict-env-resolver": "^0.9.0",
71
73
  "ts-jest": "^29.4.15",
72
74
  "ts-node": "^10.9.2",
73
75
  "typescript": "6.0.x"
74
76
  },
75
77
  "peerDependencies": {
76
78
  "aws-cdk-lib": "^2.232.0",
77
- "constructs": "^10.5.1"
79
+ "constructs": "^10.5.1",
80
+ "lambda-failure-detector": "^0.2.3"
78
81
  },
79
82
  "keywords": [
80
83
  "aws",
@@ -97,7 +100,7 @@
97
100
  "publishConfig": {
98
101
  "access": "public"
99
102
  },
100
- "version": "0.5.3",
103
+ "version": "0.6.0",
101
104
  "jest": {
102
105
  "coverageProvider": "v8",
103
106
  "testMatch": [