@gammarers/aws-rds-database-auto-running-protection-stack 2.1.3 → 2.2.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.
- package/.jsii +72 -18
- package/API.md +39 -0
- package/lib/index.d.ts +6 -1
- package/lib/index.js +18 -109
- package/lib/resources/protection-state-machine.d.ts +9 -0
- package/lib/resources/protection-state-machine.js +192 -0
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -3726,7 +3726,7 @@
|
|
|
3726
3726
|
"kind": "interface",
|
|
3727
3727
|
"locationInModule": {
|
|
3728
3728
|
"filename": "src/index.ts",
|
|
3729
|
-
"line":
|
|
3729
|
+
"line": 29
|
|
3730
3730
|
},
|
|
3731
3731
|
"name": "CustomNaming",
|
|
3732
3732
|
"properties": [
|
|
@@ -3738,7 +3738,7 @@
|
|
|
3738
3738
|
"immutable": true,
|
|
3739
3739
|
"locationInModule": {
|
|
3740
3740
|
"filename": "src/index.ts",
|
|
3741
|
-
"line":
|
|
3741
|
+
"line": 35
|
|
3742
3742
|
},
|
|
3743
3743
|
"name": "startClusterEventCatchRuleName",
|
|
3744
3744
|
"type": {
|
|
@@ -3753,7 +3753,7 @@
|
|
|
3753
3753
|
"immutable": true,
|
|
3754
3754
|
"locationInModule": {
|
|
3755
3755
|
"filename": "src/index.ts",
|
|
3756
|
-
"line":
|
|
3756
|
+
"line": 33
|
|
3757
3757
|
},
|
|
3758
3758
|
"name": "startEventCatchRuleRoleName",
|
|
3759
3759
|
"type": {
|
|
@@ -3768,7 +3768,7 @@
|
|
|
3768
3768
|
"immutable": true,
|
|
3769
3769
|
"locationInModule": {
|
|
3770
3770
|
"filename": "src/index.ts",
|
|
3771
|
-
"line":
|
|
3771
|
+
"line": 34
|
|
3772
3772
|
},
|
|
3773
3773
|
"name": "startInstanceEventCatchRuleName",
|
|
3774
3774
|
"type": {
|
|
@@ -3783,7 +3783,7 @@
|
|
|
3783
3783
|
"immutable": true,
|
|
3784
3784
|
"locationInModule": {
|
|
3785
3785
|
"filename": "src/index.ts",
|
|
3786
|
-
"line":
|
|
3786
|
+
"line": 31
|
|
3787
3787
|
},
|
|
3788
3788
|
"name": "stateMachineName",
|
|
3789
3789
|
"type": {
|
|
@@ -3798,7 +3798,7 @@
|
|
|
3798
3798
|
"immutable": true,
|
|
3799
3799
|
"locationInModule": {
|
|
3800
3800
|
"filename": "src/index.ts",
|
|
3801
|
-
"line":
|
|
3801
|
+
"line": 32
|
|
3802
3802
|
},
|
|
3803
3803
|
"name": "stateMachineRoleName",
|
|
3804
3804
|
"type": {
|
|
@@ -3813,7 +3813,7 @@
|
|
|
3813
3813
|
"immutable": true,
|
|
3814
3814
|
"locationInModule": {
|
|
3815
3815
|
"filename": "src/index.ts",
|
|
3816
|
-
"line":
|
|
3816
|
+
"line": 30
|
|
3817
3817
|
},
|
|
3818
3818
|
"name": "type",
|
|
3819
3819
|
"type": {
|
|
@@ -3823,6 +3823,44 @@
|
|
|
3823
3823
|
],
|
|
3824
3824
|
"symbolId": "src/index:CustomNaming"
|
|
3825
3825
|
},
|
|
3826
|
+
"@gammarers/aws-rds-database-auto-running-protection-stack.Notifications": {
|
|
3827
|
+
"assembly": "@gammarers/aws-rds-database-auto-running-protection-stack",
|
|
3828
|
+
"datatype": true,
|
|
3829
|
+
"docs": {
|
|
3830
|
+
"stability": "stable"
|
|
3831
|
+
},
|
|
3832
|
+
"fqn": "@gammarers/aws-rds-database-auto-running-protection-stack.Notifications",
|
|
3833
|
+
"kind": "interface",
|
|
3834
|
+
"locationInModule": {
|
|
3835
|
+
"filename": "src/index.ts",
|
|
3836
|
+
"line": 18
|
|
3837
|
+
},
|
|
3838
|
+
"name": "Notifications",
|
|
3839
|
+
"properties": [
|
|
3840
|
+
{
|
|
3841
|
+
"abstract": true,
|
|
3842
|
+
"docs": {
|
|
3843
|
+
"stability": "stable"
|
|
3844
|
+
},
|
|
3845
|
+
"immutable": true,
|
|
3846
|
+
"locationInModule": {
|
|
3847
|
+
"filename": "src/index.ts",
|
|
3848
|
+
"line": 19
|
|
3849
|
+
},
|
|
3850
|
+
"name": "emails",
|
|
3851
|
+
"optional": true,
|
|
3852
|
+
"type": {
|
|
3853
|
+
"collection": {
|
|
3854
|
+
"elementtype": {
|
|
3855
|
+
"primitive": "string"
|
|
3856
|
+
},
|
|
3857
|
+
"kind": "array"
|
|
3858
|
+
}
|
|
3859
|
+
}
|
|
3860
|
+
}
|
|
3861
|
+
],
|
|
3862
|
+
"symbolId": "src/index:Notifications"
|
|
3863
|
+
},
|
|
3826
3864
|
"@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStack": {
|
|
3827
3865
|
"assembly": "@gammarers/aws-rds-database-auto-running-protection-stack",
|
|
3828
3866
|
"base": "aws-cdk-lib.Stack",
|
|
@@ -3836,7 +3874,7 @@
|
|
|
3836
3874
|
},
|
|
3837
3875
|
"locationInModule": {
|
|
3838
3876
|
"filename": "src/index.ts",
|
|
3839
|
-
"line":
|
|
3877
|
+
"line": 41
|
|
3840
3878
|
},
|
|
3841
3879
|
"parameters": [
|
|
3842
3880
|
{
|
|
@@ -3862,7 +3900,7 @@
|
|
|
3862
3900
|
"kind": "class",
|
|
3863
3901
|
"locationInModule": {
|
|
3864
3902
|
"filename": "src/index.ts",
|
|
3865
|
-
"line":
|
|
3903
|
+
"line": 40
|
|
3866
3904
|
},
|
|
3867
3905
|
"name": "RDSDatabaseAutoRunningProtectionStack",
|
|
3868
3906
|
"symbolId": "src/index:RDSDatabaseAutoRunningProtectionStack"
|
|
@@ -3880,7 +3918,7 @@
|
|
|
3880
3918
|
"kind": "interface",
|
|
3881
3919
|
"locationInModule": {
|
|
3882
3920
|
"filename": "src/index.ts",
|
|
3883
|
-
"line":
|
|
3921
|
+
"line": 22
|
|
3884
3922
|
},
|
|
3885
3923
|
"name": "RDSDatabaseAutoRunningProtectionStackProps",
|
|
3886
3924
|
"properties": [
|
|
@@ -3892,7 +3930,7 @@
|
|
|
3892
3930
|
"immutable": true,
|
|
3893
3931
|
"locationInModule": {
|
|
3894
3932
|
"filename": "src/index.ts",
|
|
3895
|
-
"line":
|
|
3933
|
+
"line": 23
|
|
3896
3934
|
},
|
|
3897
3935
|
"name": "targetResource",
|
|
3898
3936
|
"type": {
|
|
@@ -3907,7 +3945,7 @@
|
|
|
3907
3945
|
"immutable": true,
|
|
3908
3946
|
"locationInModule": {
|
|
3909
3947
|
"filename": "src/index.ts",
|
|
3910
|
-
"line":
|
|
3948
|
+
"line": 24
|
|
3911
3949
|
},
|
|
3912
3950
|
"name": "enableRule",
|
|
3913
3951
|
"optional": true,
|
|
@@ -3923,7 +3961,23 @@
|
|
|
3923
3961
|
"immutable": true,
|
|
3924
3962
|
"locationInModule": {
|
|
3925
3963
|
"filename": "src/index.ts",
|
|
3926
|
-
"line":
|
|
3964
|
+
"line": 25
|
|
3965
|
+
},
|
|
3966
|
+
"name": "notifications",
|
|
3967
|
+
"optional": true,
|
|
3968
|
+
"type": {
|
|
3969
|
+
"fqn": "@gammarers/aws-rds-database-auto-running-protection-stack.Notifications"
|
|
3970
|
+
}
|
|
3971
|
+
},
|
|
3972
|
+
{
|
|
3973
|
+
"abstract": true,
|
|
3974
|
+
"docs": {
|
|
3975
|
+
"stability": "stable"
|
|
3976
|
+
},
|
|
3977
|
+
"immutable": true,
|
|
3978
|
+
"locationInModule": {
|
|
3979
|
+
"filename": "src/index.ts",
|
|
3980
|
+
"line": 26
|
|
3927
3981
|
},
|
|
3928
3982
|
"name": "resourceNamingOption",
|
|
3929
3983
|
"optional": true,
|
|
@@ -3956,7 +4010,7 @@
|
|
|
3956
4010
|
"kind": "interface",
|
|
3957
4011
|
"locationInModule": {
|
|
3958
4012
|
"filename": "src/index.ts",
|
|
3959
|
-
"line":
|
|
4013
|
+
"line": 13
|
|
3960
4014
|
},
|
|
3961
4015
|
"name": "TargetResourceProperty",
|
|
3962
4016
|
"properties": [
|
|
@@ -3968,7 +4022,7 @@
|
|
|
3968
4022
|
"immutable": true,
|
|
3969
4023
|
"locationInModule": {
|
|
3970
4024
|
"filename": "src/index.ts",
|
|
3971
|
-
"line":
|
|
4025
|
+
"line": 14
|
|
3972
4026
|
},
|
|
3973
4027
|
"name": "tagKey",
|
|
3974
4028
|
"type": {
|
|
@@ -3983,7 +4037,7 @@
|
|
|
3983
4037
|
"immutable": true,
|
|
3984
4038
|
"locationInModule": {
|
|
3985
4039
|
"filename": "src/index.ts",
|
|
3986
|
-
"line":
|
|
4040
|
+
"line": 15
|
|
3987
4041
|
},
|
|
3988
4042
|
"name": "tagValues",
|
|
3989
4043
|
"type": {
|
|
@@ -3999,6 +4053,6 @@
|
|
|
3999
4053
|
"symbolId": "src/index:TargetResourceProperty"
|
|
4000
4054
|
}
|
|
4001
4055
|
},
|
|
4002
|
-
"version": "2.
|
|
4003
|
-
"fingerprint": "
|
|
4056
|
+
"version": "2.2.0",
|
|
4057
|
+
"fingerprint": "MLItT9uG0+ZXOgAxBC5sMqPuJPcDSGW2liOf02jX02U="
|
|
4004
4058
|
}
|
package/API.md
CHANGED
|
@@ -962,6 +962,34 @@ public readonly type: ResourceNamingType;
|
|
|
962
962
|
|
|
963
963
|
---
|
|
964
964
|
|
|
965
|
+
### Notifications <a name="Notifications" id="@gammarers/aws-rds-database-auto-running-protection-stack.Notifications"></a>
|
|
966
|
+
|
|
967
|
+
#### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-auto-running-protection-stack.Notifications.Initializer"></a>
|
|
968
|
+
|
|
969
|
+
```typescript
|
|
970
|
+
import { Notifications } from '@gammarers/aws-rds-database-auto-running-protection-stack'
|
|
971
|
+
|
|
972
|
+
const notifications: Notifications = { ... }
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
976
|
+
|
|
977
|
+
| **Name** | **Type** | **Description** |
|
|
978
|
+
| --- | --- | --- |
|
|
979
|
+
| <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.Notifications.property.emails">emails</a></code> | <code>string[]</code> | *No description.* |
|
|
980
|
+
|
|
981
|
+
---
|
|
982
|
+
|
|
983
|
+
##### `emails`<sup>Optional</sup> <a name="emails" id="@gammarers/aws-rds-database-auto-running-protection-stack.Notifications.property.emails"></a>
|
|
984
|
+
|
|
985
|
+
```typescript
|
|
986
|
+
public readonly emails: string[];
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
- *Type:* string[]
|
|
990
|
+
|
|
991
|
+
---
|
|
992
|
+
|
|
965
993
|
### RDSDatabaseAutoRunningProtectionStackProps <a name="RDSDatabaseAutoRunningProtectionStackProps" id="@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps"></a>
|
|
966
994
|
|
|
967
995
|
#### Initializer <a name="Initializer" id="@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.Initializer"></a>
|
|
@@ -988,6 +1016,7 @@ const rDSDatabaseAutoRunningProtectionStackProps: RDSDatabaseAutoRunningProtecti
|
|
|
988
1016
|
| <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.terminationProtection">terminationProtection</a></code> | <code>boolean</code> | Whether to enable termination protection for this stack. |
|
|
989
1017
|
| <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.targetResource">targetResource</a></code> | <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.TargetResourceProperty">TargetResourceProperty</a></code> | *No description.* |
|
|
990
1018
|
| <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.enableRule">enableRule</a></code> | <code>boolean</code> | *No description.* |
|
|
1019
|
+
| <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.notifications">notifications</a></code> | <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.Notifications">Notifications</a></code> | *No description.* |
|
|
991
1020
|
| <code><a href="#@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.resourceNamingOption">resourceNamingOption</a></code> | <code>@gammarers/aws-resource-naming.ResourceDefaultNaming \| @gammarers/aws-resource-naming.ResourceAutoNaming \| <a href="#@gammarers/aws-rds-database-auto-running-protection-stack.CustomNaming">CustomNaming</a></code> | *No description.* |
|
|
992
1021
|
|
|
993
1022
|
---
|
|
@@ -1222,6 +1251,16 @@ public readonly enableRule: boolean;
|
|
|
1222
1251
|
|
|
1223
1252
|
---
|
|
1224
1253
|
|
|
1254
|
+
##### `notifications`<sup>Optional</sup> <a name="notifications" id="@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.notifications"></a>
|
|
1255
|
+
|
|
1256
|
+
```typescript
|
|
1257
|
+
public readonly notifications: Notifications;
|
|
1258
|
+
```
|
|
1259
|
+
|
|
1260
|
+
- *Type:* <a href="#@gammarers/aws-rds-database-auto-running-protection-stack.Notifications">Notifications</a>
|
|
1261
|
+
|
|
1262
|
+
---
|
|
1263
|
+
|
|
1225
1264
|
##### `resourceNamingOption`<sup>Optional</sup> <a name="resourceNamingOption" id="@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStackProps.property.resourceNamingOption"></a>
|
|
1226
1265
|
|
|
1227
1266
|
```typescript
|
package/lib/index.d.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { ResourceAutoNaming, ResourceDefaultNaming, ResourceNamingType } from '@gammarers/aws-resource-naming';
|
|
2
2
|
import { Stack, StackProps } from 'aws-cdk-lib';
|
|
3
3
|
import { Construct } from 'constructs';
|
|
4
|
-
export
|
|
4
|
+
export { ResourceAutoNaming, ResourceDefaultNaming, ResourceNamingType as RDSDatabaseAutoRunningProtectionStackResourceNamingType };
|
|
5
5
|
export interface TargetResourceProperty {
|
|
6
6
|
readonly tagKey: string;
|
|
7
7
|
readonly tagValues: string[];
|
|
8
8
|
}
|
|
9
|
+
export interface Notifications {
|
|
10
|
+
readonly emails?: string[];
|
|
11
|
+
}
|
|
9
12
|
export interface RDSDatabaseAutoRunningProtectionStackProps extends StackProps {
|
|
10
13
|
readonly targetResource: TargetResourceProperty;
|
|
11
14
|
readonly enableRule?: boolean;
|
|
15
|
+
readonly notifications?: Notifications;
|
|
12
16
|
readonly resourceNamingOption?: ResourceNamingOption;
|
|
13
17
|
}
|
|
14
18
|
export interface CustomNaming {
|
|
@@ -19,6 +23,7 @@ export interface CustomNaming {
|
|
|
19
23
|
readonly startInstanceEventCatchRuleName: string;
|
|
20
24
|
readonly startClusterEventCatchRuleName: string;
|
|
21
25
|
}
|
|
26
|
+
export type ResourceNamingOption = ResourceDefaultNaming | ResourceAutoNaming | CustomNaming;
|
|
22
27
|
export declare class RDSDatabaseAutoRunningProtectionStack extends Stack {
|
|
23
28
|
constructor(scope: Construct, id: string, props: RDSDatabaseAutoRunningProtectionStackProps);
|
|
24
29
|
}
|
package/lib/index.js
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.RDSDatabaseAutoRunningProtectionStack = void 0;
|
|
4
|
+
exports.RDSDatabaseAutoRunningProtectionStack = exports.RDSDatabaseAutoRunningProtectionStackResourceNamingType = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const aws_resource_naming_1 = require("@gammarers/aws-resource-naming");
|
|
7
|
+
Object.defineProperty(exports, "RDSDatabaseAutoRunningProtectionStackResourceNamingType", { enumerable: true, get: function () { return aws_resource_naming_1.ResourceNamingType; } });
|
|
7
8
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
9
|
const events = require("aws-cdk-lib/aws-events");
|
|
9
10
|
const targets = require("aws-cdk-lib/aws-events-targets");
|
|
10
11
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
12
|
+
const sns = require("aws-cdk-lib/aws-sns");
|
|
13
|
+
const subscriptions = require("aws-cdk-lib/aws-sns-subscriptions");
|
|
14
|
+
const protection_state_machine_1 = require("./resources/protection-state-machine");
|
|
13
15
|
class RDSDatabaseAutoRunningProtectionStack extends aws_cdk_lib_1.Stack {
|
|
14
16
|
constructor(scope, id, props) {
|
|
15
17
|
super(scope, id, props);
|
|
16
|
-
// 👇 Get AWS account
|
|
17
|
-
const account = aws_cdk_lib_1.Stack.of(this).account;
|
|
18
|
-
//const region = Stack.of(this).region;
|
|
19
18
|
// 👇 Create random 8 length string
|
|
20
19
|
const random = aws_resource_naming_1.ResourceNaming.createRandomString(`${aws_cdk_lib_1.Names.uniqueId(scope)}.${aws_cdk_lib_1.Names.uniqueId(this)}`);
|
|
21
20
|
// 👇 Auto naeming
|
|
@@ -27,110 +26,20 @@ class RDSDatabaseAutoRunningProtectionStack extends aws_cdk_lib_1.Stack {
|
|
|
27
26
|
startClusterEventCatchRuleName: `rds-db-cluster-running-event-catch-${random}-rule`,
|
|
28
27
|
};
|
|
29
28
|
const names = aws_resource_naming_1.ResourceNaming.naming(autoNaming, props.resourceNamingOption);
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
29
|
+
// 👇 SNS Topic for notifications
|
|
30
|
+
const topic = new sns.Topic(this, 'NotificationTopic', {
|
|
31
|
+
topicName: names.notificationTopicName,
|
|
32
|
+
displayName: names.notificationTopicDisplayName,
|
|
33
33
|
});
|
|
34
|
-
//
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
]),
|
|
40
|
-
resultPath: '$.definition.statuses',
|
|
41
|
-
});
|
|
42
|
-
startingWait.next(statusesDefinition);
|
|
43
|
-
const describeDBInstancesTask = new tasks.CallAwsService(this, 'DescribeDBInstances', {
|
|
44
|
-
iamResources: [`arn:aws:rds:*:${account}:db:*`],
|
|
45
|
-
service: 'rds',
|
|
46
|
-
action: 'describeDBInstances',
|
|
47
|
-
parameters: {
|
|
48
|
-
DbInstanceIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
49
|
-
},
|
|
50
|
-
resultPath: '$.result.describe',
|
|
51
|
-
resultSelector: {
|
|
52
|
-
status: sfn.JsonPath.stringAt('$.DbInstances[0].DbInstanceStatus'),
|
|
53
|
-
identifier: sfn.JsonPath.stringAt('$.DbInstances[0].DbInstanceIdentifier'),
|
|
54
|
-
tags: sfn.JsonPath.stringAt('$.DbInstances[0].TagList'),
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
const stopDBInstanceTask = new tasks.CallAwsService(this, 'StopDBInstance', {
|
|
58
|
-
iamResources: [`arn:aws:rds:*:${account}:db:*`],
|
|
59
|
-
service: 'rds',
|
|
60
|
-
action: 'stopDBInstance',
|
|
61
|
-
parameters: {
|
|
62
|
-
DbInstanceIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
63
|
-
},
|
|
64
|
-
resultPath: '$.result.stop',
|
|
65
|
-
});
|
|
66
|
-
const describeDBClustersTask = new tasks.CallAwsService(this, 'DescribeDBClusters', {
|
|
67
|
-
iamResources: [`arn:aws:rds:*:${account}:cluster:*`],
|
|
68
|
-
service: 'rds',
|
|
69
|
-
action: 'describeDBClusters',
|
|
70
|
-
parameters: {
|
|
71
|
-
DbClusterIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
72
|
-
},
|
|
73
|
-
resultPath: '$.result.describe',
|
|
74
|
-
resultSelector: {
|
|
75
|
-
status: sfn.JsonPath.stringAt('$.DbClusters[0].Status'),
|
|
76
|
-
identifier: sfn.JsonPath.stringAt('$.DbClusters[0].DbClusterIdentifier'),
|
|
77
|
-
tags: sfn.JsonPath.stringAt('$.DbClusters[0].TagList'),
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
const stopDBClusterTask = new tasks.CallAwsService(this, 'StopDBCluster', {
|
|
81
|
-
iamResources: [`arn:aws:rds:*:${account}:cluster:*`],
|
|
82
|
-
service: 'rds',
|
|
83
|
-
action: 'stopDBCluster',
|
|
84
|
-
parameters: {
|
|
85
|
-
DbClusterIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
86
|
-
},
|
|
87
|
-
resultPath: '$.result.stop',
|
|
88
|
-
});
|
|
89
|
-
const describeTypeChoice = new sfn.Choice(this, 'DescribeTypeChoice')
|
|
90
|
-
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Instance Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'DB_INSTANCE'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0154')), describeDBInstancesTask)
|
|
91
|
-
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Cluster Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'CLUSTER'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0153')), describeDBClustersTask)
|
|
92
|
-
.otherwise(new sfn.Fail(this, 'UnknownType'));
|
|
93
|
-
statusesDefinition.next(describeTypeChoice);
|
|
94
|
-
const statusChangeWait = new sfn.Wait(this, 'StatusChangeWait', {
|
|
95
|
-
time: sfn.WaitTime.duration(aws_cdk_lib_1.Duration.minutes(5)),
|
|
96
|
-
});
|
|
97
|
-
statusChangeWait.next(describeTypeChoice);
|
|
98
|
-
stopDBInstanceTask.next(statusChangeWait);
|
|
99
|
-
stopDBClusterTask.next(statusChangeWait);
|
|
100
|
-
// 👇 Status Choice
|
|
101
|
-
const statusChoice = new sfn.Choice(this, 'StatusChoice')
|
|
102
|
-
// db instance stop on status.available
|
|
103
|
-
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Instance Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'DB_INSTANCE'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0154'), sfn.Condition.stringEquals('$.result.describe.status', 'available')), stopDBInstanceTask)
|
|
104
|
-
// db cluster stop on status.available
|
|
105
|
-
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Cluster Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'CLUSTER'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0153'), sfn.Condition.stringEquals('$.result.describe.status', 'available')), stopDBClusterTask)
|
|
106
|
-
// status change succeed, // todo: generate topic
|
|
107
|
-
.when(sfn.Condition.and(sfn.Condition.or(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Instance Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'DB_INSTANCE'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0154')), sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Cluster Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'CLUSTER'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0153'))), sfn.Condition.stringEquals('$.result.describe.status', 'stopped')), succeed)
|
|
108
|
-
.when(sfn.Condition.or(sfn.Condition.stringEquals('$.result.describe.status', 'starting'), sfn.Condition.stringEquals('$.result.describe.status', 'configuring-enhanced-monitoring'), sfn.Condition.stringEquals('$.result.describe.status', 'backing-up'), sfn.Condition.stringEquals('$.result.describe.status', 'modifying'), sfn.Condition.stringEquals('$.result.describe.status', 'stopping')), statusChangeWait)
|
|
109
|
-
.otherwise(new sfn.Fail(this, 'StatusFail', {
|
|
110
|
-
cause: 'db instance or cluster status fail.',
|
|
111
|
-
}));
|
|
112
|
-
// 👇 Tag Match
|
|
113
|
-
const tagMatchChoice = new sfn.Choice(this, 'ExistTagChoide')
|
|
114
|
-
.when(sfn.Condition.isPresent('$.result.describe.tags'), new sfn.Pass(this, 'ContainTagVlue', {
|
|
115
|
-
resultPath: '$.check.tag',
|
|
116
|
-
parameters: {
|
|
117
|
-
isContain: sfn.JsonPath.arrayContains(sfn.JsonPath.stringAt('$.params.tagValues'), sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringAt('$.result.describe.tags[?(@.Key == $.params.tagKey)].Value'), 0)),
|
|
118
|
-
},
|
|
119
|
-
}).next(new sfn.Choice(this, 'FilterTagChoise')
|
|
120
|
-
.when(sfn.Condition.booleanEquals('$.check.tag.isContain', true), statusChoice)
|
|
121
|
-
.otherwise(new sfn.Pass(this, 'NoTagMatch', {
|
|
122
|
-
comment: 'no tag match',
|
|
123
|
-
}))))
|
|
124
|
-
.otherwise(new sfn.Pass(this, 'NoTagsFound', {
|
|
125
|
-
comment: 'no tags found',
|
|
126
|
-
}));
|
|
127
|
-
// 👇 describe next tag found & match
|
|
128
|
-
describeDBInstancesTask.next(tagMatchChoice);
|
|
129
|
-
describeDBClustersTask.next(tagMatchChoice);
|
|
34
|
+
// 👇 Subscribe an email endpoint to the topic
|
|
35
|
+
const emails = props.notifications?.emails ?? [];
|
|
36
|
+
for (const email of emails) {
|
|
37
|
+
topic.addSubscription(new subscriptions.EmailSubscription(email));
|
|
38
|
+
}
|
|
130
39
|
// 👇 StepFunctions
|
|
131
|
-
const stateMachine = new
|
|
40
|
+
const stateMachine = new protection_state_machine_1.ProtectionStateMachine(this, 'StateMachine', {
|
|
132
41
|
stateMachineName: names.stateMachineName,
|
|
133
|
-
|
|
42
|
+
notificationTopic: topic,
|
|
134
43
|
});
|
|
135
44
|
if (names.stateMachineRoleName) {
|
|
136
45
|
const role = stateMachine.node.findChild('Role');
|
|
@@ -218,5 +127,5 @@ class RDSDatabaseAutoRunningProtectionStack extends aws_cdk_lib_1.Stack {
|
|
|
218
127
|
}
|
|
219
128
|
exports.RDSDatabaseAutoRunningProtectionStack = RDSDatabaseAutoRunningProtectionStack;
|
|
220
129
|
_a = JSII_RTTI_SYMBOL_1;
|
|
221
|
-
RDSDatabaseAutoRunningProtectionStack[_a] = { fqn: "@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStack", version: "2.
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBK0g7QUFDL0gsNkNBQWlFO0FBQ2pFLGlEQUFpRDtBQUNqRCwwREFBMEQ7QUFDMUQsMkNBQTJDO0FBQzNDLHFEQUFxRDtBQUNyRCw2REFBNkQ7QUF5QjdELE1BQWEscUNBQXNDLFNBQVEsbUJBQUs7SUFDOUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpRDtRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixxQkFBcUI7UUFDckIsTUFBTSxPQUFPLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLHVDQUF1QztRQUV2QyxtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsb0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLG1CQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLG1CQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRyxrQkFBa0I7UUFDbEIsTUFBTSxVQUFVLEdBQUc7WUFDakIsZ0JBQWdCLEVBQUUsNEJBQTRCLE1BQU0sZ0JBQWdCO1lBQ3BFLG9CQUFvQixFQUFFLDBDQUEwQyxNQUFNLE9BQU87WUFDN0UsMkJBQTJCLEVBQUUsbUNBQW1DLE1BQU0sT0FBTztZQUM3RSwrQkFBK0IsRUFBRSx1Q0FBdUMsTUFBTSxPQUFPO1lBQ3JGLDhCQUE4QixFQUFFLHNDQUFzQyxNQUFNLE9BQU87U0FDcEYsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLG9DQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsb0JBQTJELENBQUMsQ0FBQztRQUVuSCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFB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QztJQUNMLENBQUM7O0FBM1NILHNGQTRTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlQXV0b05hbWluZywgUmVzb3VyY2VEZWZhdWx0TmFtaW5nLCBSZXNvdXJjZU5hbWluZywgUmVzb3VyY2VOYW1pbmdUeXBlIH0gZnJvbSAnQGdhbW1hcmVycy9hd3MtcmVzb3VyY2UtbmFtaW5nJztcbmltcG9ydCB7IER1cmF0aW9uLCBOYW1lcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlTmFtaW5nT3B0aW9uID0gUmVzb3VyY2VEZWZhdWx0TmFtaW5nIHwgUmVzb3VyY2VBdXRvTmFtaW5nIHwgQ3VzdG9tTmFtaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlUHJvcGVydHkge1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSRFNEYXRhYmFzZUF1dG9SdW5uaW5nUHJvdGVjdGlvblN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlUHJvcGVydHk7XG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICByZWFkb25seSByZXNvdXJjZU5hbWluZ09wdGlvbj86IFJlc291cmNlTmFtaW5nT3B0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbU5hbWluZyB7XG4gIHJlYWRvbmx5IHR5cGU6IFJlc291cmNlTmFtaW5nVHlwZS5DVVNUT007XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lUm9sZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhcnRFdmVudENhdGNoUnVsZVJvbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXJ0SW5zdGFuY2VFdmVudENhdGNoUnVsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhcnRDbHVzdGVyRXZlbnRDYXRjaFJ1bGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBSRFNEYXRhYmFzZUF1dG9SdW5uaW5nUHJvdGVjdGlvblN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUkRTRGF0YWJhc2VBdXRvUnVubmluZ1Byb3RlY3Rpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyDwn5GHIEdldCBBV1MgYWNjb3VudFxuICAgIGNvbnN0IGFjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIC8vY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgcmFuZG9tIDggbGVuZ3RoIHN0cmluZ1xuICAgIGNvbnN0IHJhbmRvbSA9IFJlc291cmNlTmFtaW5nLmNyZWF0ZVJhbmRvbVN0cmluZyhgJHtOYW1lcy51bmlxdWVJZChzY29wZSl9LiR7TmFtZXMudW5pcXVlSWQodGhpcyl9YCk7XG4gICAgLy8g8J+RhyBBdXRvIG5hZW1pbmdcbiAgICBjb25zdCBhdXRvTmFtaW5nID0ge1xuICAgICAgc3RhdGVNYWNoaW5lTmFtZTogYHJkcy1kYi1hdXRvLXJ1bm5pbmctc3RvcC0ke3JhbmRvbX0tc3RhdGUtbWFjaGluZWAsXG4gICAgICBzdGF0ZU1hY2hpbmVSb2xlTmFtZTogYHJkcy1kYi1hdXRvLXJ1bm5pbmctc3RvcC1zdGF0ZS1tYWNoaW5lLSR7cmFuZG9tfS1yb2xlYCxcbiAgICAgIHN0YXJ0RXZlbnRDYXRjaFJ1bGVSb2xlTmFtZTogYHJkcy1kYi1hdXRvLXJ1bm5pbmctY2F0Y2gtZXZlbnQtJHtyYW5kb219LXJvbGVgLFxuICAgICAgc3RhcnRJbnN0YW5jZUV2ZW50Q2F0Y2hSdWxlTmFtZTogYHJkcy1kYi1pbnN0YW5jZS1ydW5uaW5nLWV2ZW50LWNhdGNoLSR7cmFuZG9tfS1ydWxlYCxcbiAgICAgIHN0YXJ0Q2x1c3RlckV2ZW50Q2F0Y2hSdWxlTmFtZTogYHJkcy1kYi1jbHVzdGVyLXJ1bm5pbmctZXZlbnQtY2F0Y2gtJHtyYW5kb219LXJ1bGVgLFxuICAgIH07XG4gICAgY29uc3QgbmFtZXMgPSBSZXNvdXJjZU5hbWluZy5uYW1pbmcoYXV0b05hbWluZywgcHJvcHMucmVzb3VyY2VOYW1pbmdPcHRpb24gYXMgUmVzb3VyY2VOYW1pbmcuUmVzb3VyY2VOYW1pbmdPcHRpb24pO1xuXG4gICAgY29uc3Qgc3VjY2VlZCA9IG5ldyBzZm4uU3VjY2VlZCh0aGlzLCAnU3VjY2VlZCcpO1xuXG4gICAgY29uc3Qgc3RhcnRpbmdXYWl0ID0gbmV3IHNmbi5XYWl0KHRoaXMsICdTdGFydGluZ1dhaXQnLCB7XG4gICAgICB0aW1lOiBzZm4uV2FpdFRpbWUuZHVyYXRpb24oRHVyYXRpb24ubWludXRlcygxKSksXG4gICAgfSk7XG5cbiAgICAvLyBTdGF0dXMgZGVmaW5pdGlvblxuICAgIGNvbnN0IHN0YXR1c2VzRGVmaW5pdGlvbjogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3ModGhpcywgJ1N0YXR1c2VzRGVmaW5pdGlvbicsIHtcbiAgICAgIHJlc3VsdDogc2ZuLlJlc3VsdC5mcm9tT2JqZWN0KFtcbiAgICAgICAgeyBuYW1lOiAnQVZBSUxBQkxFJywgZW1vamk6ICfwn6SpJywgc3RhdGU6ICdhdmFpbGFibGUnIH0sXG4gICAgICAgIHsgbmFtZTogJ0FVVE9TVE9QUEVEJywgZW1vamk6ICfwn5i0Jywgc3RhdGU6ICdzdG9wcGVkJyB9LFxuICAgICAgXSksXG4gICAgICByZXN1bHRQYXRoOiAnJC5kZWZpbml0aW9uLnN0YXR1c2VzJyxcbiAgICB9KTtcblxuICAgIHN0YXJ0aW5nV2FpdC5uZXh0KHN0YXR1c2VzRGVmaW5pdGlvbik7XG5cbiAgICBjb25zdCBkZXNjcmliZURCSW5zdGFuY2VzVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnRGVzY3JpYmVEQkluc3RhbmNlcycsIHtcbiAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06ZGI6KmBdLFxuICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICBhY3Rpb246ICdkZXNjcmliZURCSW5zdGFuY2VzJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRGJJbnN0YW5jZUlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlSWRlbnRpZmllcicpLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3VsdC5kZXNjcmliZScsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICBzdGF0dXM6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkluc3RhbmNlc1swXS5EYkluc3RhbmNlU3RhdHVzJyksXG4gICAgICAgIGlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkluc3RhbmNlc1swXS5EYkluc3RhbmNlSWRlbnRpZmllcicpLFxuICAgICAgICB0YWdzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGJJbnN0YW5jZXNbMF0uVGFnTGlzdCcpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0b3BEQkluc3RhbmNlVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnU3RvcERCSW5zdGFuY2UnLCB7XG4gICAgICBpYW1SZXNvdXJjZXM6IFtgYXJuOmF3czpyZHM6Kjoke2FjY291bnR9OmRiOipgXSxcbiAgICAgIHNlcnZpY2U6ICdyZHMnLFxuICAgICAgYWN0aW9uOiAnc3RvcERCSW5zdGFuY2UnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBEYkluc3RhbmNlSWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5Tb3VyY2VJZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQucmVzdWx0LnN0b3AnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzY3JpYmVEQkNsdXN0ZXJzVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAnRGVzY3JpYmVEQkNsdXN0ZXJzJywge1xuICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpjbHVzdGVyOipgXSxcbiAgICAgIHNlcnZpY2U6ICdyZHMnLFxuICAgICAgYWN0aW9uOiAnZGVzY3JpYmVEQkNsdXN0ZXJzJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRGJDbHVzdGVySWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5Tb3VyY2VJZGVudGlmaWVyJyksXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogJyQucmVzdWx0LmRlc2NyaWJlJyxcbiAgICAgIHJlc3VsdFNlbGVjdG9yOiB7XG4gICAgICAgIHN0YXR1czogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLkRiQ2x1c3RlcnNbMF0uU3RhdHVzJyksXG4gICAgICAgIGlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkNsdXN0ZXJzWzBdLkRiQ2x1c3RlcklkZW50aWZpZXInKSxcbiAgICAgICAgdGFnczogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLkRiQ2x1c3RlcnNbMF0uVGFnTGlzdCcpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0b3BEQkNsdXN0ZXJUYXNrID0gbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdTdG9wREJDbHVzdGVyJywge1xuICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpjbHVzdGVyOipgXSxcbiAgICAgIHNlcnZpY2U6ICdyZHMnLFxuICAgICAgYWN0aW9uOiAnc3RvcERCQ2x1c3RlcicsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIERiQ2x1c3RlcklkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlSWRlbnRpZmllcicpLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3VsdC5zdG9wJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlc2NyaWJlVHlwZUNob2ljZSA9IG5ldyBzZm4uQ2hvaWNlKHRoaXMsICdEZXNjcmliZVR5cGVDaG9pY2UnKVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5Tb3VyY2VUeXBlJywgJ0RCX0lOU1RBTkNFJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLkV2ZW50SUQnLCAnUkRTLUVWRU5ULTAxNTQnKSxcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpYmVEQkluc3RhbmNlc1Rhc2ssXG4gICAgICApXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLXR5cGUnLCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZScsICdDTFVTVEVSJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLkV2ZW50SUQnLCAnUkRTLUVWRU5ULTAxNTMnKSxcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpYmVEQkNsdXN0ZXJzVGFzayxcbiAgICAgIClcbiAgICAgIC5vdGhlcndpc2UobmV3IHNmbi5GYWlsKHRoaXMsICdVbmtub3duVHlwZScpKTtcblxuICAgIHN0YXR1c2VzRGVmaW5pdGlvbi5uZXh0KGRlc2NyaWJlVHlwZUNob2ljZSk7XG5cbiAgICBjb25zdCBzdGF0dXNDaGFuZ2VXYWl0ID0gbmV3IHNmbi5XYWl0KHRoaXMsICdTdGF0dXNDaGFuZ2VXYWl0Jywge1xuICAgICAgdGltZTogc2ZuLldhaXRUaW1lLmR1cmF0aW9uKER1cmF0aW9uLm1pbnV0ZXMoNSkpLFxuICAgIH0pO1xuXG4gICAgc3RhdHVzQ2hhbmdlV2FpdC5uZXh0KGRlc2NyaWJlVHlwZUNob2ljZSk7XG5cbiAgICBzdG9wREJJbnN0YW5jZVRhc2submV4dChzdGF0dXNDaGFuZ2VXYWl0KTtcblxuICAgIHN0b3BEQkNsdXN0ZXJUYXNrLm5leHQoc3RhdHVzQ2hhbmdlV2FpdCk7XG5cbiAgICAvLyDwn5GHIFN0YXR1cyBDaG9pY2VcbiAgICBjb25zdCBzdGF0dXNDaG9pY2UgPSBuZXcgc2ZuLkNob2ljZSh0aGlzLCAnU3RhdHVzQ2hvaWNlJylcbiAgICAgIC8vIGRiIGluc3RhbmNlIHN0b3Agb24gc3RhdHVzLmF2YWlsYWJsZVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5Tb3VyY2VUeXBlJywgJ0RCX0lOU1RBTkNFJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLkV2ZW50SUQnLCAnUkRTLUVWRU5ULTAxNTQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZGVzY3JpYmUuc3RhdHVzJywgJ2F2YWlsYWJsZScpLFxuICAgICAgICApLFxuICAgICAgICBzdG9wREJJbnN0YW5jZVRhc2ssXG4gICAgICApXG4gICAgICAvLyBkYiBjbHVzdGVyIHN0b3Agb24gc3RhdHVzLmF2YWlsYWJsZVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZVR5cGUnLCAnQ0xVU1RFUicpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5FdmVudElEJywgJ1JEUy1FVkVOVC0wMTUzJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucmVzdWx0LmRlc2NyaWJlLnN0YXR1cycsICdhdmFpbGFibGUnKSxcbiAgICAgICAgKSxcbiAgICAgICAgc3RvcERCQ2x1c3RlclRhc2ssXG4gICAgICApXG4gICAgICAvLyBzdGF0dXMgY2hhbmdlIHN1Y2NlZWQsIC8vIHRvZG86IGdlbmVyYXRlIHRvcGljXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwtdHlwZScsICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZVR5cGUnLCAnREJfSU5TVEFOQ0UnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLkV2ZW50SUQnLCAnUkRTLUVWRU5ULTAxNTQnKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLXR5cGUnLCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZVR5cGUnLCAnQ0xVU1RFUicpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuRXZlbnRJRCcsICdSRFMtRVZFTlQtMDE1MycpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnc3RvcHBlZCcpLFxuICAgICAgICApLFxuICAgICAgICBzdWNjZWVkLFxuICAgICAgKVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucmVzdWx0LmRlc2NyaWJlLnN0YXR1cycsICdzdGFydGluZycpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnY29uZmlndXJpbmctZW5oYW5jZWQtbW9uaXRvcmluZycpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnYmFja2luZy11cCcpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnbW9kaWZ5aW5nJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucmVzdWx0LmRlc2NyaWJlLnN0YXR1cycsICdzdG9wcGluZycpLFxuICAgICAgICApLFxuICAgICAgICBzdGF0dXNDaGFuZ2VXYWl0LFxuICAgICAgKVxuICAgICAgLm90aGVyd2lzZShuZXcgc2ZuLkZhaWwodGhpcywgJ1N0YXR1c0ZhaWwnLCB7XG4gICAgICAgIGNhdXNlOiAnZGIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMgZmFpbC4nLFxuICAgICAgfSkpO1xuXG4gICAgLy8g8J+RhyBUYWcgTWF0Y2hcbiAgICBjb25zdCB0YWdNYXRjaENob2ljZSA9IG5ldyBzZm4uQ2hvaWNlKHRoaXMsICdFeGlzdFRhZ0Nob2lkZScpXG4gICAgICAud2hlbihcbiAgICAgICAgc2ZuLkNvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzdWx0LmRlc2NyaWJlLnRhZ3MnKSxcbiAgICAgICAgbmV3IHNmbi5QYXNzKHRoaXMsICdDb250YWluVGFnVmx1ZScsIHtcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5jaGVjay50YWcnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGlzQ29udGFpbjogc2ZuLkpzb25QYXRoLmFycmF5Q29udGFpbnMoXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wYXJhbXMudGFnVmFsdWVzJyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnJlc3VsdC5kZXNjcmliZS50YWdzWz8oQC5LZXkgPT0gJC5wYXJhbXMudGFnS2V5KV0uVmFsdWUnKSwgMCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLm5leHQoXG4gICAgICAgICAgbmV3IHNmbi5DaG9pY2UodGhpcywgJ0ZpbHRlclRhZ0Nob2lzZScpXG4gICAgICAgICAgICAud2hlbihcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5ib29sZWFuRXF1YWxzKCckLmNoZWNrLnRhZy5pc0NvbnRhaW4nLCB0cnVlKSxcbiAgICAgICAgICAgICAgc3RhdHVzQ2hvaWNlLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm90aGVyd2lzZShcbiAgICAgICAgICAgICAgbmV3IHNmbi5QYXNzKHRoaXMsICdOb1RhZ01hdGNoJywge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdubyB0YWcgbWF0Y2gnLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKFxuICAgICAgICBuZXcgc2ZuLlBhc3ModGhpcywgJ05vVGFnc0ZvdW5kJywge1xuICAgICAgICAgIGNvbW1lbnQ6ICdubyB0YWdzIGZvdW5kJyxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgLy8g8J+RhyBkZXNjcmliZSBuZXh0IHRhZyBmb3VuZCAmIG1hdGNoXG4gICAgZGVzY3JpYmVEQkluc3RhbmNlc1Rhc2submV4dCh0YWdNYXRjaENob2ljZSk7XG4gICAgZGVzY3JpYmVEQkNsdXN0ZXJzVGFzay5uZXh0KHRhZ01hdGNoQ2hvaWNlKTtcblxuICAgIC8vIPCfkYcgU3RlcEZ1bmN0aW9uc1xuICAgIGNvbnN0IHN0YXRlTWFjaGluZSA9IG5ldyBzZm4uU3RhdGVNYWNoaW5lKHRoaXMsICdTdGF0ZU1hY2hpbmUnLCB7XG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lOiBuYW1lcy5zdGF0ZU1hY2hpbmVOYW1lLFxuICAgICAgZGVmaW5pdGlvbkJvZHk6IHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKHN0YXJ0aW5nV2FpdCksXG4gICAgfSk7XG4gICAgaWYgKG5hbWVzLnN0YXRlTWFjaGluZVJvbGVOYW1lKSB7XG4gICAgICBjb25zdCByb2xlID0gc3RhdGVNYWNoaW5lLm5vZGUuZmluZENoaWxkKCdSb2xlJykgYXMgaWFtLlJvbGU7XG4gICAgICBjb25zdCBjZm5Sb2xlID0gcm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBpYW0uQ2ZuUm9sZTtcbiAgICAgIGNmblJvbGUuYWRkUHJvcGVydHlPdmVycmlkZSgnUm9sZU5hbWUnLCBuYW1lcy5zdGF0ZU1hY2hpbmVSb2xlTmFtZSk7XG4gICAgICBjZm5Sb2xlLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ0Rlc2NyaXB0aW9uJywgJ3JkcyBkYXRhYmFzZSBhdXRvIHJ1bm5pbmcgc3RvcCBzdGF0ZSBtYWNoaW5lIHJvbGUuJyk7XG4gICAgICBjb25zdCBwb2xpY3kgPSByb2xlLm5vZGUuZmluZENoaWxkKCdEZWZhdWx0UG9saWN5JykgYXMgaWFtLlBvbGljeTtcbiAgICAgIGNvbnN0IGNmblBvbGljeSA9IHBvbGljeS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBpYW0uQ2ZuUG9saWN5O1xuICAgICAgY2ZuUG9saWN5LmFkZFByb3BlcnR5T3ZlcnJpZGUoJ1BvbGljeU5hbWUnLCBgcmRzLWRiLWF1dG8tcnVubmluZy1zdG9wLXN0YXRlLW1hY2hpbmUtJHtyYW5kb219LXBvbGljeWApO1xuICAgIH1cblxuICAgIGNvbnN0IGV4ZWNSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdFdmVudEV4ZWNSb2xlJywge1xuICAgICAgcm9sZU5hbWU6IG5hbWVzLnN0YXJ0RXZlbnRDYXRjaFJ1bGVSb2xlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnZGIgYXV0byBzdGFydCBjYXRjaCB3aXRoIHN0YXJ0IHN0YXRlIG1hY2hpbmUgZXZlbnQgcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZXZlbnRzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICdzdGF0ZS1tYWNoaW5lLWV4ZWMnOiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdzdGF0ZXM6U3RhcnRFeGVjdXRpb24nLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5hYmxlUnVsZTogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuZW5hYmxlUnVsZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVJ1bGU7XG4gICAgfSkoKTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIEluc3RhbmNlIEF1dG8gU3RhcnQgRXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCSW5zdGFuY2VFdmVudCcsIHtcbiAgICAgIHJ1bGVOYW1lOiBuYW1lcy5zdGFydEluc3RhbmNlRXZlbnRDYXRjaFJ1bGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdyZHMgZGIgaW5zdGFuY2UgcnVubmluZyBldmVudCBjYXRjaCBydWxlLicsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIEluc3RhbmNlIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTQnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLlNmblN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmUsIHtcbiAgICAgICAgICByb2xlOiBleGVjUm9sZSxcbiAgICAgICAgICBpbnB1dDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJCcpLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgICB0YWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIEluc3RhbmNlIEF1dG8gU3RhcnQgRXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCQ2x1c3RlckV2ZW50Jywge1xuICAgICAgcnVsZU5hbWU6IG5hbWVzLnN0YXJ0Q2x1c3RlckV2ZW50Q2F0Y2hSdWxlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnZGIgY2x1c3RlciBydW5uaW5nIGV2ZW50IGNhdGNoIHJ1bGUnLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLnJkcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ1JEUyBEQiBDbHVzdGVyIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTMnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLlNmblN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmUsIHtcbiAgICAgICAgICByb2xlOiBleGVjUm9sZSxcbiAgICAgICAgICBpbnB1dDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJCcpLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgICB0YWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
|
|
130
|
+
RDSDatabaseAutoRunningProtectionStack[_a] = { fqn: "@gammarers/aws-rds-database-auto-running-protection-stack.RDSDatabaseAutoRunningProtectionStack", version: "2.2.0" };
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBK0g7QUFVckQsd0lBVk4sd0NBQWtCLE9BVTJDO0FBVGpJLDZDQUF1RDtBQUN2RCxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsbUVBQW1FO0FBRW5FLG1GQUE4RTtBQStCOUUsTUFBYSxxQ0FBc0MsU0FBUSxtQkFBSztJQUM5RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlEO1FBQ3pGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxvQ0FBYyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsbUJBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksbUJBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLGtCQUFrQjtRQUNsQixNQUFNLFVBQVUsR0FBRztZQUNqQixnQkFBZ0IsRUFBRSw0QkFBNEIsTUFBTSxnQkFBZ0I7WUFDcEUsb0JBQW9CLEVBQUUsMENBQTBDLE1BQU0sT0FBTztZQUM3RSwyQkFBMkIsRUFBRSxtQ0FBbUMsTUFBTSxPQUFPO1lBQzdFLCtCQUErQixFQUFFLHVDQUF1QyxNQUFNLE9BQU87WUFDckYsOEJBQThCLEVBQUUsc0NBQXNDLE1BQU0sT0FBTztTQUNwRixDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsb0NBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxvQkFBMkQsQ0FBQyxDQUFDO1FBRW5ILGlDQUFpQztRQUNqQyxNQUFNLEtBQUssR0FBYyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ2hFLFNBQVMsRUFBRSxLQUFLLENB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZUF1dG9OYW1pbmcsIFJlc291cmNlRGVmYXVsdE5hbWluZywgUmVzb3VyY2VOYW1pbmcsIFJlc291cmNlTmFtaW5nVHlwZSB9IGZyb20gJ0BnYW1tYXJlcnMvYXdzLXJlc291cmNlLW5hbWluZyc7XG5pbXBvcnQgeyBOYW1lcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgKiBhcyBzdWJzY3JpcHRpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMtc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFByb3RlY3Rpb25TdGF0ZU1hY2hpbmUgfSBmcm9tICcuL3Jlc291cmNlcy9wcm90ZWN0aW9uLXN0YXRlLW1hY2hpbmUnO1xuXG5leHBvcnQgeyBSZXNvdXJjZUF1dG9OYW1pbmcsIFJlc291cmNlRGVmYXVsdE5hbWluZywgUmVzb3VyY2VOYW1pbmdUeXBlIGFzIFJEU0RhdGFiYXNlQXV0b1J1bm5pbmdQcm90ZWN0aW9uU3RhY2tSZXNvdXJjZU5hbWluZ1R5cGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZVByb3BlcnR5IHtcbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9ucyB7XG4gIHJlYWRvbmx5IGVtYWlscz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJEU0RhdGFiYXNlQXV0b1J1bm5pbmdQcm90ZWN0aW9uU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2VQcm9wZXJ0eTtcbiAgcmVhZG9ubHkgZW5hYmxlUnVsZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnM/OiBOb3RpZmljYXRpb25zO1xuICByZWFkb25seSByZXNvdXJjZU5hbWluZ09wdGlvbj86IFJlc291cmNlTmFtaW5nT3B0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbU5hbWluZyB7XG4gIHJlYWRvbmx5IHR5cGU6IFJlc291cmNlTmFtaW5nVHlwZS5DVVNUT007XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lUm9sZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhcnRFdmVudENhdGNoUnVsZVJvbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXJ0SW5zdGFuY2VFdmVudENhdGNoUnVsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhcnRDbHVzdGVyRXZlbnRDYXRjaFJ1bGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlTmFtaW5nT3B0aW9uID0gUmVzb3VyY2VEZWZhdWx0TmFtaW5nIHwgUmVzb3VyY2VBdXRvTmFtaW5nIHwgQ3VzdG9tTmFtaW5nO1xuXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvUnVubmluZ1Byb3RlY3Rpb25TdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1J1bm5pbmdQcm90ZWN0aW9uU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgcmFuZG9tIDggbGVuZ3RoIHN0cmluZ1xuICAgIGNvbnN0IHJhbmRvbSA9IFJlc291cmNlTmFtaW5nLmNyZWF0ZVJhbmRvbVN0cmluZyhgJHtOYW1lcy51bmlxdWVJZChzY29wZSl9LiR7TmFtZXMudW5pcXVlSWQodGhpcyl9YCk7XG4gICAgLy8g8J+RhyBBdXRvIG5hZW1pbmdcbiAgICBjb25zdCBhdXRvTmFtaW5nID0ge1xuICAgICAgc3RhdGVNYWNoaW5lTmFtZTogYHJkcy1kYi1hdXRvLXJ1bm5pbmctc3RvcC0ke3JhbmRvbX0tc3RhdGUtbWFjaGluZWAsXG4gICAgICBzdGF0ZU1hY2hpbmVSb2xlTmFtZTogYHJkcy1kYi1hdXRvLXJ1bm5pbmctc3RvcC1zdGF0ZS1tYWNoaW5lLSR7cmFuZG9tfS1yb2xlYCxcbiAgICAgIHN0YXJ0RXZlbnRDYXRjaFJ1bGVSb2xlTmFtZTogYHJkcy1kYi1hdXRvLXJ1bm5pbmctY2F0Y2gtZXZlbnQtJHtyYW5kb219LXJvbGVgLFxuICAgICAgc3RhcnRJbnN0YW5jZUV2ZW50Q2F0Y2hSdWxlTmFtZTogYHJkcy1kYi1pbnN0YW5jZS1ydW5uaW5nLWV2ZW50LWNhdGNoLSR7cmFuZG9tfS1ydWxlYCxcbiAgICAgIHN0YXJ0Q2x1c3RlckV2ZW50Q2F0Y2hSdWxlTmFtZTogYHJkcy1kYi1jbHVzdGVyLXJ1bm5pbmctZXZlbnQtY2F0Y2gtJHtyYW5kb219LXJ1bGVgLFxuICAgIH07XG4gICAgY29uc3QgbmFtZXMgPSBSZXNvdXJjZU5hbWluZy5uYW1pbmcoYXV0b05hbWluZywgcHJvcHMucmVzb3VyY2VOYW1pbmdPcHRpb24gYXMgUmVzb3VyY2VOYW1pbmcuUmVzb3VyY2VOYW1pbmdPcHRpb24pO1xuXG4gICAgLy8g8J+RhyBTTlMgVG9waWMgZm9yIG5vdGlmaWNhdGlvbnNcbiAgICBjb25zdCB0b3BpYzogc25zLlRvcGljID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnTm90aWZpY2F0aW9uVG9waWMnLCB7XG4gICAgICB0b3BpY05hbWU6IG5hbWVzLm5vdGlmaWNhdGlvblRvcGljTmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBuYW1lcy5ub3RpZmljYXRpb25Ub3BpY0Rpc3BsYXlOYW1lLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBTdWJzY3JpYmUgYW4gZW1haWwgZW5kcG9pbnQgdG8gdGhlIHRvcGljXG4gICAgY29uc3QgZW1haWxzID0gcHJvcHMubm90aWZpY2F0aW9ucz8uZW1haWxzID8/IFtdO1xuICAgIGZvciAoY29uc3QgZW1haWwgb2YgZW1haWxzKSB7XG4gICAgICB0b3BpYy5hZGRTdWJzY3JpcHRpb24obmV3IHN1YnNjcmlwdGlvbnMuRW1haWxTdWJzY3JpcHRpb24oZW1haWwpKTtcbiAgICB9XG5cbiAgICAvLyDwn5GHIFN0ZXBGdW5jdGlvbnNcbiAgICBjb25zdCBzdGF0ZU1hY2hpbmUgPSBuZXcgUHJvdGVjdGlvblN0YXRlTWFjaGluZSh0aGlzLCAnU3RhdGVNYWNoaW5lJywge1xuICAgICAgc3RhdGVNYWNoaW5lTmFtZTogbmFtZXMuc3RhdGVNYWNoaW5lTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvblRvcGljOiB0b3BpYyxcbiAgICB9KTtcbiAgICBpZiAobmFtZXMuc3RhdGVNYWNoaW5lUm9sZU5hbWUpIHtcbiAgICAgIGNvbnN0IHJvbGUgPSBzdGF0ZU1hY2hpbmUubm9kZS5maW5kQ2hpbGQoJ1JvbGUnKSBhcyBpYW0uUm9sZTtcbiAgICAgIGNvbnN0IGNmblJvbGUgPSByb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGlhbS5DZm5Sb2xlO1xuICAgICAgY2ZuUm9sZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdSb2xlTmFtZScsIG5hbWVzLnN0YXRlTWFjaGluZVJvbGVOYW1lKTtcbiAgICAgIGNmblJvbGUuYWRkUHJvcGVydHlPdmVycmlkZSgnRGVzY3JpcHRpb24nLCAncmRzIGRhdGFiYXNlIGF1dG8gcnVubmluZyBzdG9wIHN0YXRlIG1hY2hpbmUgcm9sZS4nKTtcbiAgICAgIGNvbnN0IHBvbGljeSA9IHJvbGUubm9kZS5maW5kQ2hpbGQoJ0RlZmF1bHRQb2xpY3knKSBhcyBpYW0uUG9saWN5O1xuICAgICAgY29uc3QgY2ZuUG9saWN5ID0gcG9saWN5Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGlhbS5DZm5Qb2xpY3k7XG4gICAgICBjZm5Qb2xpY3kuYWRkUHJvcGVydHlPdmVycmlkZSgnUG9saWN5TmFtZScsIGByZHMtZGItYXV0by1ydW5uaW5nLXN0b3Atc3RhdGUtbWFjaGluZS0ke3JhbmRvbX0tcG9saWN5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhlY1JvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0V2ZW50RXhlY1JvbGUnLCB7XG4gICAgICByb2xlTmFtZTogbmFtZXMuc3RhcnRFdmVudENhdGNoUnVsZVJvbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdkYiBhdXRvIHN0YXJ0IGNhdGNoIHdpdGggc3RhcnQgc3RhdGUgbWFjaGluZSBldmVudCByb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdldmVudHMuYW1hem9uYXdzLmNvbScpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgJ3N0YXRlLW1hY2hpbmUtZXhlYyc6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3N0YXRlczpTdGFydEV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbmFibGVSdWxlOiBib29sZWFuID0gKCgpID0+IHtcbiAgICAgIHJldHVybiBwcm9wcy5lbmFibGVSdWxlID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5hYmxlUnVsZTtcbiAgICB9KSgpO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgQXV0byBTdGFydCBFdmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJJbnN0YW5jZUV2ZW50Jywge1xuICAgICAgcnVsZU5hbWU6IG5hbWVzLnN0YXJ0SW5zdGFuY2VFdmVudENhdGNoUnVsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ3JkcyBkYiBpbnN0YW5jZSBydW5uaW5nIGV2ZW50IGNhdGNoIHJ1bGUuJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgSW5zdGFuY2UgRXZlbnQnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogWydSRFMtRVZFTlQtMDE1NCddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZSwge1xuICAgICAgICAgIHJvbGU6IGV4ZWNSb2xlLFxuICAgICAgICAgIGlucHV0OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgQXV0byBTdGFydCBFdmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBydWxlTmFtZTogbmFtZXMuc3RhcnRDbHVzdGVyRXZlbnRDYXRjaFJ1bGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdkYiBjbHVzdGVyIHJ1bm5pbmcgZXZlbnQgY2F0Y2ggcnVsZScsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIENsdXN0ZXIgRXZlbnQnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogWydSRFMtRVZFTlQtMDE1MyddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZSwge1xuICAgICAgICAgIHJvbGU6IGV4ZWNSb2xlLFxuICAgICAgICAgIGlucHV0OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as sns from 'aws-cdk-lib/aws-sns';
|
|
2
|
+
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
export interface ProtectionStateMachineProps extends sfn.StateMachineProps {
|
|
5
|
+
notificationTopic: sns.ITopic;
|
|
6
|
+
}
|
|
7
|
+
export declare class ProtectionStateMachine extends sfn.StateMachine {
|
|
8
|
+
constructor(scope: Construct, id: string, props: ProtectionStateMachineProps);
|
|
9
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProtectionStateMachine = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const sfn = require("aws-cdk-lib/aws-stepfunctions");
|
|
6
|
+
const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
|
|
7
|
+
class ProtectionStateMachine extends sfn.StateMachine {
|
|
8
|
+
constructor(scope, id, props) {
|
|
9
|
+
super(scope, id, {
|
|
10
|
+
...props,
|
|
11
|
+
definitionBody: (() => {
|
|
12
|
+
// 👇 Get AWS account
|
|
13
|
+
const account = aws_cdk_lib_1.Stack.of(scope).account;
|
|
14
|
+
//const region = Stack.of(this).region;
|
|
15
|
+
const stringMappingDefinition = new sfn.Pass(scope, 'StringMappingDefinition', {
|
|
16
|
+
result: sfn.Result.fromObject({
|
|
17
|
+
SourceType: [
|
|
18
|
+
{ key: 'CLUSTER', value: 'Cluster' },
|
|
19
|
+
{ key: 'DB_INSTANCE', value: 'Instance' },
|
|
20
|
+
],
|
|
21
|
+
}),
|
|
22
|
+
resultPath: '$.definition.mapping',
|
|
23
|
+
});
|
|
24
|
+
const prepareTopicValue = new sfn.Pass(scope, 'PrepareTopicValue', {
|
|
25
|
+
resultPath: '$.prepare.topic.values',
|
|
26
|
+
parameters: {
|
|
27
|
+
account: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.event.detail.SourceArn'), ':'), 4), // account
|
|
28
|
+
region: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.event.detail.SourceArn'), ':'), 3), // region
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
// 👇 Generate aws web console link
|
|
32
|
+
const generateConsoleLink = new sfn.Pass(scope, 'GenerateConsoleLink', {
|
|
33
|
+
resultPath: '$.Generate.Link',
|
|
34
|
+
parameters: {
|
|
35
|
+
Value: sfn.JsonPath.format('https://{}.console.aws.amazon.com/rds/home#database', sfn.JsonPath.stringAt('$.prepare.topic.values.region')),
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
prepareTopicValue.next(generateConsoleLink);
|
|
39
|
+
// 👇 Generate topic message
|
|
40
|
+
const generateTopicMessage = new sfn.Pass(scope, 'GenerateTopicMessage', {
|
|
41
|
+
resultPath: '$.Generate.Topic',
|
|
42
|
+
parameters: {
|
|
43
|
+
Subject: sfn.JsonPath.format('😴 [STOPPED] AWS RDS DB {} Auto Running Protected Notification [{}][{}]', sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringAt('$.definition.mapping.SourceType[?(@.key == $.event.detail.SourceType)].value'), 0), sfn.JsonPath.stringAt('$.prepare.topic.values.account'), sfn.JsonPath.stringAt('$.prepare.topic.values.region')),
|
|
44
|
+
TextMessage: sfn.JsonPath.format('Account : {}\nRegion : {}\nType : {}\nIdentifier : {}', sfn.JsonPath.stringAt('$.prepare.topic.values.account'), sfn.JsonPath.stringAt('$.prepare.topic.values.region'), sfn.JsonPath.stringAt('$.event.detail.SourceType'), sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier')),
|
|
45
|
+
SlackJsonMessage: {
|
|
46
|
+
attachments: [
|
|
47
|
+
{
|
|
48
|
+
color: '#36a64f',
|
|
49
|
+
pretext: sfn.JsonPath.format('AWS RDS DB {} Auto Running Protected Notification', sfn.JsonPath.stringAt('$.event.detail.SourceType')),
|
|
50
|
+
title: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
51
|
+
title_link: sfn.JsonPath.stringAt('$.Generate.Link.Value'),
|
|
52
|
+
text: sfn.JsonPath.format('AWS RDS DB {} {} Auto Running Protected', sfn.JsonPath.stringAt('$.event.detail.SourceType'), sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier')),
|
|
53
|
+
fields: [
|
|
54
|
+
{
|
|
55
|
+
title: 'Account',
|
|
56
|
+
value: sfn.JsonPath.stringAt('$.prepare.topic.values.account'),
|
|
57
|
+
short: true,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
title: 'Region',
|
|
61
|
+
value: sfn.JsonPath.stringAt('$.prepare.topic.values.region'),
|
|
62
|
+
short: true,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
title: 'Type',
|
|
66
|
+
value: sfn.JsonPath.stringAt('$.event.detail.SourceType'),
|
|
67
|
+
short: true,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
title: 'Identifier',
|
|
71
|
+
value: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
72
|
+
short: true,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
generateConsoleLink.next(generateTopicMessage);
|
|
81
|
+
// 👇 SNS Topic Publish
|
|
82
|
+
const publishMessage = new tasks.SnsPublish(scope, 'PublishMessage', {
|
|
83
|
+
topic: props.notificationTopic,
|
|
84
|
+
subject: sfn.JsonPath.stringAt('$.Generate.Topic.Subject'),
|
|
85
|
+
message: sfn.TaskInput.fromObject({
|
|
86
|
+
default: sfn.JsonPath.stringAt('$.Generate.Topic.TextMessage'),
|
|
87
|
+
email: sfn.JsonPath.stringAt('$.Generate.Topic.TextMessage'),
|
|
88
|
+
lambda: sfn.JsonPath.stringAt('$.Generate.Topic.SlackJsonMessage'),
|
|
89
|
+
}),
|
|
90
|
+
messagePerSubscriptionType: true,
|
|
91
|
+
resultPath: '$.snsResult',
|
|
92
|
+
});
|
|
93
|
+
generateTopicMessage.next(publishMessage);
|
|
94
|
+
const succeed = new sfn.Succeed(scope, 'Succeed');
|
|
95
|
+
publishMessage.next(succeed);
|
|
96
|
+
const startingWait = new sfn.Wait(scope, 'StartingWait', {
|
|
97
|
+
time: sfn.WaitTime.duration(aws_cdk_lib_1.Duration.minutes(1)),
|
|
98
|
+
});
|
|
99
|
+
startingWait.next(stringMappingDefinition);
|
|
100
|
+
const describeDBInstancesTask = new tasks.CallAwsService(scope, 'DescribeDBInstances', {
|
|
101
|
+
iamResources: [`arn:aws:rds:*:${account}:db:*`],
|
|
102
|
+
service: 'rds',
|
|
103
|
+
action: 'describeDBInstances',
|
|
104
|
+
parameters: {
|
|
105
|
+
DbInstanceIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
106
|
+
},
|
|
107
|
+
resultPath: '$.result.describe',
|
|
108
|
+
resultSelector: {
|
|
109
|
+
status: sfn.JsonPath.stringAt('$.DbInstances[0].DbInstanceStatus'),
|
|
110
|
+
identifier: sfn.JsonPath.stringAt('$.DbInstances[0].DbInstanceIdentifier'),
|
|
111
|
+
tags: sfn.JsonPath.stringAt('$.DbInstances[0].TagList'),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
const stopDBInstanceTask = new tasks.CallAwsService(scope, 'StopDBInstance', {
|
|
115
|
+
iamResources: [`arn:aws:rds:*:${account}:db:*`],
|
|
116
|
+
service: 'rds',
|
|
117
|
+
action: 'stopDBInstance',
|
|
118
|
+
parameters: {
|
|
119
|
+
DbInstanceIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
120
|
+
},
|
|
121
|
+
resultPath: '$.result.stop',
|
|
122
|
+
});
|
|
123
|
+
const describeDBClustersTask = new tasks.CallAwsService(scope, 'DescribeDBClusters', {
|
|
124
|
+
iamResources: [`arn:aws:rds:*:${account}:cluster:*`],
|
|
125
|
+
service: 'rds',
|
|
126
|
+
action: 'describeDBClusters',
|
|
127
|
+
parameters: {
|
|
128
|
+
DbClusterIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
129
|
+
},
|
|
130
|
+
resultPath: '$.result.describe',
|
|
131
|
+
resultSelector: {
|
|
132
|
+
status: sfn.JsonPath.stringAt('$.DbClusters[0].Status'),
|
|
133
|
+
identifier: sfn.JsonPath.stringAt('$.DbClusters[0].DbClusterIdentifier'),
|
|
134
|
+
tags: sfn.JsonPath.stringAt('$.DbClusters[0].TagList'),
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
const stopDBClusterTask = new tasks.CallAwsService(scope, 'StopDBCluster', {
|
|
138
|
+
iamResources: [`arn:aws:rds:*:${account}:cluster:*`],
|
|
139
|
+
service: 'rds',
|
|
140
|
+
action: 'stopDBCluster',
|
|
141
|
+
parameters: {
|
|
142
|
+
DbClusterIdentifier: sfn.JsonPath.stringAt('$.event.detail.SourceIdentifier'),
|
|
143
|
+
},
|
|
144
|
+
resultPath: '$.result.stop',
|
|
145
|
+
});
|
|
146
|
+
const describeTypeChoice = new sfn.Choice(scope, 'DescribeTypeChoice')
|
|
147
|
+
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Instance Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'DB_INSTANCE'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0154')), describeDBInstancesTask)
|
|
148
|
+
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Cluster Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'CLUSTER'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0153')), describeDBClustersTask)
|
|
149
|
+
.otherwise(new sfn.Fail(scope, 'UnknownType'));
|
|
150
|
+
stringMappingDefinition.next(describeTypeChoice);
|
|
151
|
+
const statusChangeWait = new sfn.Wait(scope, 'StatusChangeWait', {
|
|
152
|
+
time: sfn.WaitTime.duration(aws_cdk_lib_1.Duration.minutes(5)),
|
|
153
|
+
});
|
|
154
|
+
statusChangeWait.next(describeTypeChoice);
|
|
155
|
+
stopDBInstanceTask.next(statusChangeWait);
|
|
156
|
+
stopDBClusterTask.next(statusChangeWait);
|
|
157
|
+
// 👇 Status Choice
|
|
158
|
+
const statusChoice = new sfn.Choice(scope, 'StatusChoice')
|
|
159
|
+
// db instance stop on status.available
|
|
160
|
+
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Instance Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'DB_INSTANCE'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0154'), sfn.Condition.stringEquals('$.result.describe.status', 'available')), stopDBInstanceTask)
|
|
161
|
+
// db cluster stop on status.available
|
|
162
|
+
.when(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Cluster Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'CLUSTER'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0153'), sfn.Condition.stringEquals('$.result.describe.status', 'available')), stopDBClusterTask)
|
|
163
|
+
.when(sfn.Condition.and(sfn.Condition.or(sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Instance Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'DB_INSTANCE'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0154')), sfn.Condition.and(sfn.Condition.stringEquals('$.event.detail-type', 'RDS DB Cluster Event'), sfn.Condition.stringEquals('$.event.detail.SourceType', 'CLUSTER'), sfn.Condition.stringEquals('$.event.detail.EventID', 'RDS-EVENT-0153'))), sfn.Condition.stringEquals('$.result.describe.status', 'stopped')), prepareTopicValue)
|
|
164
|
+
.when(sfn.Condition.or(sfn.Condition.stringEquals('$.result.describe.status', 'starting'), sfn.Condition.stringEquals('$.result.describe.status', 'configuring-enhanced-monitoring'), sfn.Condition.stringEquals('$.result.describe.status', 'backing-up'), sfn.Condition.stringEquals('$.result.describe.status', 'modifying'), sfn.Condition.stringEquals('$.result.describe.status', 'stopping')), statusChangeWait)
|
|
165
|
+
.otherwise(new sfn.Fail(scope, 'StatusFail', {
|
|
166
|
+
cause: 'db instance or cluster status fail.',
|
|
167
|
+
}));
|
|
168
|
+
// 👇 Tag Match
|
|
169
|
+
const tagMatchChoice = new sfn.Choice(scope, 'ExistTagChoide')
|
|
170
|
+
.when(sfn.Condition.isPresent('$.result.describe.tags'), new sfn.Pass(scope, 'ContainTagVlue', {
|
|
171
|
+
resultPath: '$.check.tag',
|
|
172
|
+
parameters: {
|
|
173
|
+
isContain: sfn.JsonPath.arrayContains(sfn.JsonPath.stringAt('$.params.tagValues'), sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringAt('$.result.describe.tags[?(@.Key == $.params.tagKey)].Value'), 0)),
|
|
174
|
+
},
|
|
175
|
+
}).next(new sfn.Choice(scope, 'FilterTagChoise')
|
|
176
|
+
.when(sfn.Condition.booleanEquals('$.check.tag.isContain', true), statusChoice)
|
|
177
|
+
.otherwise(new sfn.Pass(scope, 'NoTagMatch', {
|
|
178
|
+
comment: 'no tag match',
|
|
179
|
+
}))))
|
|
180
|
+
.otherwise(new sfn.Pass(scope, 'NoTagsFound', {
|
|
181
|
+
comment: 'no tags found',
|
|
182
|
+
}));
|
|
183
|
+
// 👇 describe next tag found & match
|
|
184
|
+
describeDBInstancesTask.next(tagMatchChoice);
|
|
185
|
+
describeDBClustersTask.next(tagMatchChoice);
|
|
186
|
+
return sfn.DefinitionBody.fromChainable(startingWait);
|
|
187
|
+
})(),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.ProtectionStateMachine = ProtectionStateMachine;
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdGVjdGlvbi1zdGF0ZS1tYWNoaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jlc291cmNlcy9wcm90ZWN0aW9uLXN0YXRlLW1hY2hpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQThDO0FBRTlDLHFEQUFxRDtBQUNyRCw2REFBNkQ7QUFPN0QsTUFBYSxzQkFBdUIsU0FBUSxHQUFHLENBQUMsWUFBWTtJQUMxRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtDO1FBQzFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUVwQixxQkFBcUI7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsdUNBQXVDO2dCQUV2QyxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUseUJBQXlCLEVBQUU7b0JBQzdFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt3QkFDNUIsVUFBVSxFQUFFOzRCQUNWLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFOzRCQUNwQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTt5QkFDMUM7cUJBQ0YsQ0FBQztvQkFDRixVQUFVLEVBQUUsc0JBQXNCO2lCQUNuQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFO29CQUNqRSxVQUFVLEVBQUUsd0JBQXdCO29CQUNwQyxVQUFVLEVBQUU7d0JBQ1YsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdB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QixDQUFDLENBQ0gsQ0FBQztnQkFFSixxQ0FBcUM7Z0JBQ3JDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDN0Msc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUU1QyxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxFQUFFO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBdFNELHdEQXNTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgKiBhcyB0YXNrcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm90ZWN0aW9uU3RhdGVNYWNoaW5lUHJvcHMgZXh0ZW5kcyBzZm4uU3RhdGVNYWNoaW5lUHJvcHMge1xuICBub3RpZmljYXRpb25Ub3BpYzogc25zLklUb3BpYztcbn1cblxuZXhwb3J0IGNsYXNzIFByb3RlY3Rpb25TdGF0ZU1hY2hpbmUgZXh0ZW5kcyBzZm4uU3RhdGVNYWNoaW5lIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3RlY3Rpb25TdGF0ZU1hY2hpbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkZWZpbml0aW9uQm9keTogKCgpID0+IHtcblxuICAgICAgICAvLyDwn5GHIEdldCBBV1MgYWNjb3VudFxuICAgICAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2Yoc2NvcGUpLmFjY291bnQ7XG4gICAgICAgIC8vY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuXG4gICAgICAgIGNvbnN0IHN0cmluZ01hcHBpbmdEZWZpbml0aW9uID0gbmV3IHNmbi5QYXNzKHNjb3BlLCAnU3RyaW5nTWFwcGluZ0RlZmluaXRpb24nLCB7XG4gICAgICAgICAgcmVzdWx0OiBzZm4uUmVzdWx0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgU291cmNlVHlwZTogW1xuICAgICAgICAgICAgICB7IGtleTogJ0NMVVNURVInLCB2YWx1ZTogJ0NsdXN0ZXInIH0sXG4gICAgICAgICAgICAgIHsga2V5OiAnREJfSU5TVEFOQ0UnLCB2YWx1ZTogJ0luc3RhbmNlJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5kZWZpbml0aW9uLm1hcHBpbmcnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwcmVwYXJlVG9waWNWYWx1ZSA9IG5ldyBzZm4uUGFzcyhzY29wZSwgJ1ByZXBhcmVUb3BpY1ZhbHVlJywge1xuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnByZXBhcmUudG9waWMudmFsdWVzJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBhY2NvdW50OiBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdTcGxpdChzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZUFybicpLCAnOicpLCA0KSwgLy8gYWNjb3VudFxuICAgICAgICAgICAgcmVnaW9uOiBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdTcGxpdChzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZUFybicpLCAnOicpLCAzKSwgLy8gcmVnaW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g8J+RhyBHZW5lcmF0ZSBhd3Mgd2ViIGNvbnNvbGUgbGlua1xuICAgICAgICBjb25zdCBnZW5lcmF0ZUNvbnNvbGVMaW5rID0gbmV3IHNmbi5QYXNzKHNjb3BlLCAnR2VuZXJhdGVDb25zb2xlTGluaycsIHtcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5HZW5lcmF0ZS5MaW5rJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBWYWx1ZTogc2ZuLkpzb25QYXRoLmZvcm1hdCgnaHR0cHM6Ly97fS5jb25zb2xlLmF3cy5hbWF6b24uY29tL3Jkcy9ob21lI2RhdGFiYXNlJyxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLnJlZ2lvbicpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJlcGFyZVRvcGljVmFsdWUubmV4dChnZW5lcmF0ZUNvbnNvbGVMaW5rKTtcblxuICAgICAgICAvLyDwn5GHIEdlbmVyYXRlIHRvcGljIG1lc3NhZ2VcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVUb3BpY01lc3NhZ2UgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdHZW5lcmF0ZVRvcGljTWVzc2FnZScsIHtcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5HZW5lcmF0ZS5Ub3BpYycsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgU3ViamVjdDogc2ZuLkpzb25QYXRoLmZvcm1hdCgn8J+YtCBbU1RPUFBFRF0gQVdTIFJEUyBEQiB7fSBBdXRvIFJ1bm5pbmcgUHJvdGVjdGVkIE5vdGlmaWNhdGlvbiBbe31dW3t9XScsXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmRlZmluaXRpb24ubWFwcGluZy5Tb3VyY2VUeXBlWz8oQC5rZXkgPT0gJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZSldLnZhbHVlJyksIDApLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucHJlcGFyZS50b3BpYy52YWx1ZXMuYWNjb3VudCcpLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucHJlcGFyZS50b3BpYy52YWx1ZXMucmVnaW9uJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgVGV4dE1lc3NhZ2U6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ0FjY291bnQgOiB7fVxcblJlZ2lvbiA6IHt9XFxuVHlwZSA6IHt9XFxuSWRlbnRpZmllciA6IHt9JyxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLmFjY291bnQnKSxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnByZXBhcmUudG9waWMudmFsdWVzLnJlZ2lvbicpLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZVR5cGUnKSxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5Tb3VyY2VJZGVudGlmaWVyJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU2xhY2tKc29uTWVzc2FnZToge1xuICAgICAgICAgICAgICBhdHRhY2htZW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzM2YTY0ZicsXG4gICAgICAgICAgICAgICAgICBwcmV0ZXh0OiBzZm4uSnNvblBhdGguZm9ybWF0KCdBV1MgUkRTIERCIHt9IEF1dG8gUnVubmluZyBQcm90ZWN0ZWQgTm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5Tb3VyY2VUeXBlJyksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlSWRlbnRpZmllcicpLFxuICAgICAgICAgICAgICAgICAgdGl0bGVfbGluazogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLkdlbmVyYXRlLkxpbmsuVmFsdWUnKSxcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ0FXUyBSRFMgREIge30ge30gQXV0byBSdW5uaW5nIFByb3RlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZScpLFxuICAgICAgICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZUlkZW50aWZpZXInKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5hY2NvdW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1JlZ2lvbicsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwYXJlLnRvcGljLnZhbHVlcy5yZWdpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZScpLFxuICAgICAgICAgICAgICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5Tb3VyY2VJZGVudGlmaWVyJyksXG4gICAgICAgICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBnZW5lcmF0ZUNvbnNvbGVMaW5rLm5leHQoZ2VuZXJhdGVUb3BpY01lc3NhZ2UpO1xuXG4gICAgICAgIC8vIPCfkYcgU05TIFRvcGljIFB1Ymxpc2hcbiAgICAgICAgY29uc3QgcHVibGlzaE1lc3NhZ2UgPSBuZXcgdGFza3MuU25zUHVibGlzaChzY29wZSwgJ1B1Ymxpc2hNZXNzYWdlJywge1xuICAgICAgICAgIHRvcGljOiBwcm9wcy5ub3RpZmljYXRpb25Ub3BpYyxcbiAgICAgICAgICBzdWJqZWN0OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuR2VuZXJhdGUuVG9waWMuU3ViamVjdCcpLFxuICAgICAgICAgIG1lc3NhZ2U6IHNmbi5UYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICBkZWZhdWx0OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuR2VuZXJhdGUuVG9waWMuVGV4dE1lc3NhZ2UnKSxcbiAgICAgICAgICAgIGVtYWlsOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuR2VuZXJhdGUuVG9waWMuVGV4dE1lc3NhZ2UnKSxcbiAgICAgICAgICAgIGxhbWJkYTogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLkdlbmVyYXRlLlRvcGljLlNsYWNrSnNvbk1lc3NhZ2UnKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtZXNzYWdlUGVyU3Vic2NyaXB0aW9uVHlwZTogdHJ1ZSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5zbnNSZXN1bHQnLFxuICAgICAgICB9KTtcbiAgICAgICAgZ2VuZXJhdGVUb3BpY01lc3NhZ2UubmV4dChwdWJsaXNoTWVzc2FnZSk7XG5cbiAgICAgICAgY29uc3Qgc3VjY2VlZCA9IG5ldyBzZm4uU3VjY2VlZChzY29wZSwgJ1N1Y2NlZWQnKTtcblxuICAgICAgICBwdWJsaXNoTWVzc2FnZS5uZXh0KHN1Y2NlZWQpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0aW5nV2FpdCA9IG5ldyBzZm4uV2FpdChzY29wZSwgJ1N0YXJ0aW5nV2FpdCcsIHtcbiAgICAgICAgICB0aW1lOiBzZm4uV2FpdFRpbWUuZHVyYXRpb24oRHVyYXRpb24ubWludXRlcygxKSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YXJ0aW5nV2FpdC5uZXh0KHN0cmluZ01hcHBpbmdEZWZpbml0aW9uKTtcblxuICAgICAgICBjb25zdCBkZXNjcmliZURCSW5zdGFuY2VzVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZShzY29wZSwgJ0Rlc2NyaWJlREJJbnN0YW5jZXMnLCB7XG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpkYjoqYF0sXG4gICAgICAgICAgc2VydmljZTogJ3JkcycsXG4gICAgICAgICAgYWN0aW9uOiAnZGVzY3JpYmVEQkluc3RhbmNlcycsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgRGJJbnN0YW5jZUlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlSWRlbnRpZmllcicpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzdWx0LmRlc2NyaWJlJyxcbiAgICAgICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAgICAgc3RhdHVzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGJJbnN0YW5jZXNbMF0uRGJJbnN0YW5jZVN0YXR1cycpLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLkRiSW5zdGFuY2VzWzBdLkRiSW5zdGFuY2VJZGVudGlmaWVyJyksXG4gICAgICAgICAgICB0YWdzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGJJbnN0YW5jZXNbMF0uVGFnTGlzdCcpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN0b3BEQkluc3RhbmNlVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZShzY29wZSwgJ1N0b3BEQkluc3RhbmNlJywge1xuICAgICAgICAgIGlhbVJlc291cmNlczogW2Bhcm46YXdzOnJkczoqOiR7YWNjb3VudH06ZGI6KmBdLFxuICAgICAgICAgIHNlcnZpY2U6ICdyZHMnLFxuICAgICAgICAgIGFjdGlvbjogJ3N0b3BEQkluc3RhbmNlJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBEYkluc3RhbmNlSWRlbnRpZmllcjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5Tb3VyY2VJZGVudGlmaWVyJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXN1bHQuc3RvcCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlc2NyaWJlREJDbHVzdGVyc1Rhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsICdEZXNjcmliZURCQ2x1c3RlcnMnLCB7XG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpjbHVzdGVyOipgXSxcbiAgICAgICAgICBzZXJ2aWNlOiAncmRzJyxcbiAgICAgICAgICBhY3Rpb246ICdkZXNjcmliZURCQ2x1c3RlcnMnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIERiQ2x1c3RlcklkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuU291cmNlSWRlbnRpZmllcicpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzdWx0LmRlc2NyaWJlJyxcbiAgICAgICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAgICAgc3RhdHVzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGJDbHVzdGVyc1swXS5TdGF0dXMnKSxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkNsdXN0ZXJzWzBdLkRiQ2x1c3RlcklkZW50aWZpZXInKSxcbiAgICAgICAgICAgIHRhZ3M6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EYkNsdXN0ZXJzWzBdLlRhZ0xpc3QnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdG9wREJDbHVzdGVyVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZShzY29wZSwgJ1N0b3BEQkNsdXN0ZXInLCB7XG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6cmRzOio6JHthY2NvdW50fTpjbHVzdGVyOipgXSxcbiAgICAgICAgICBzZXJ2aWNlOiAncmRzJyxcbiAgICAgICAgICBhY3Rpb246ICdzdG9wREJDbHVzdGVyJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBEYkNsdXN0ZXJJZGVudGlmaWVyOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZUlkZW50aWZpZXInKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3VsdC5zdG9wJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGVzY3JpYmVUeXBlQ2hvaWNlID0gbmV3IHNmbi5DaG9pY2Uoc2NvcGUsICdEZXNjcmliZVR5cGVDaG9pY2UnKVxuICAgICAgICAgIC53aGVuKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZScsICdEQl9JTlNUQU5DRScpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuRXZlbnRJRCcsICdSRFMtRVZFTlQtMDE1NCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRlc2NyaWJlREJJbnN0YW5jZXNUYXNrLFxuICAgICAgICAgIClcbiAgICAgICAgICAud2hlbihcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24uYW5kKFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwtdHlwZScsICdSRFMgREIgQ2x1c3RlciBFdmVudCcpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZScsICdDTFVTVEVSJyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5FdmVudElEJywgJ1JEUy1FVkVOVC0wMTUzJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZGVzY3JpYmVEQkNsdXN0ZXJzVGFzayxcbiAgICAgICAgICApXG4gICAgICAgICAgLm90aGVyd2lzZShuZXcgc2ZuLkZhaWwoc2NvcGUsICdVbmtub3duVHlwZScpKTtcblxuICAgICAgICBzdHJpbmdNYXBwaW5nRGVmaW5pdGlvbi5uZXh0KGRlc2NyaWJlVHlwZUNob2ljZSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzQ2hhbmdlV2FpdCA9IG5ldyBzZm4uV2FpdChzY29wZSwgJ1N0YXR1c0NoYW5nZVdhaXQnLCB7XG4gICAgICAgICAgdGltZTogc2ZuLldhaXRUaW1lLmR1cmF0aW9uKER1cmF0aW9uLm1pbnV0ZXMoNSkpLFxuICAgICAgICB9KTtcblxuICAgICAgICBzdGF0dXNDaGFuZ2VXYWl0Lm5leHQoZGVzY3JpYmVUeXBlQ2hvaWNlKTtcblxuICAgICAgICBzdG9wREJJbnN0YW5jZVRhc2submV4dChzdGF0dXNDaGFuZ2VXYWl0KTtcblxuICAgICAgICBzdG9wREJDbHVzdGVyVGFzay5uZXh0KHN0YXR1c0NoYW5nZVdhaXQpO1xuXG4gICAgICAgIC8vIPCfkYcgU3RhdHVzIENob2ljZVxuICAgICAgICBjb25zdCBzdGF0dXNDaG9pY2UgPSBuZXcgc2ZuLkNob2ljZShzY29wZSwgJ1N0YXR1c0Nob2ljZScpXG4gICAgICAgICAgLy8gZGIgaW5zdGFuY2Ugc3RvcCBvbiBzdGF0dXMuYXZhaWxhYmxlXG4gICAgICAgICAgLndoZW4oXG4gICAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLXR5cGUnLCAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5Tb3VyY2VUeXBlJywgJ0RCX0lOU1RBTkNFJyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5FdmVudElEJywgJ1JEUy1FVkVOVC0wMTU0JyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnYXZhaWxhYmxlJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RvcERCSW5zdGFuY2VUYXNrLFxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBkYiBjbHVzdGVyIHN0b3Agb24gc3RhdHVzLmF2YWlsYWJsZVxuICAgICAgICAgIC53aGVuKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5Tb3VyY2VUeXBlJywgJ0NMVVNURVInKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLkV2ZW50SUQnLCAnUkRTLUVWRU5ULTAxNTMnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucmVzdWx0LmRlc2NyaWJlLnN0YXR1cycsICdhdmFpbGFibGUnKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdG9wREJDbHVzdGVyVGFzayxcbiAgICAgICAgICApXG4gICAgICAgICAgLndoZW4oXG4gICAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5vcihcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcpLFxuICAgICAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLlNvdXJjZVR5cGUnLCAnREJfSU5TVEFOQ0UnKSxcbiAgICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5FdmVudElEJywgJ1JEUy1FVkVOVC0wMTU0JyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC10eXBlJywgJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyksXG4gICAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuU291cmNlVHlwZScsICdDTFVTVEVSJyksXG4gICAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuRXZlbnRJRCcsICdSRFMtRVZFTlQtMDE1MycpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnc3RvcHBlZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHByZXBhcmVUb3BpY1ZhbHVlLCAvLyBnZW5lcmF0ZWQgJiBwdWJsaXNoIG1lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgICAgLndoZW4oXG4gICAgICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZGVzY3JpYmUuc3RhdHVzJywgJ3N0YXJ0aW5nJyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLnJlc3VsdC5kZXNjcmliZS5zdGF0dXMnLCAnY29uZmlndXJpbmctZW5oYW5jZWQtbW9uaXRvcmluZycpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZGVzY3JpYmUuc3RhdHVzJywgJ2JhY2tpbmctdXAnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucmVzdWx0LmRlc2NyaWJlLnN0YXR1cycsICdtb2RpZnlpbmcnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQucmVzdWx0LmRlc2NyaWJlLnN0YXR1cycsICdzdG9wcGluZycpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXR1c0NoYW5nZVdhaXQsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5vdGhlcndpc2UobmV3IHNmbi5GYWlsKHNjb3BlLCAnU3RhdHVzRmFpbCcsIHtcbiAgICAgICAgICAgIGNhdXNlOiAnZGIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMgZmFpbC4nLFxuICAgICAgICAgIH0pKTtcblxuICAgICAgICAvLyDwn5GHIFRhZyBNYXRjaFxuICAgICAgICBjb25zdCB0YWdNYXRjaENob2ljZSA9IG5ldyBzZm4uQ2hvaWNlKHNjb3BlLCAnRXhpc3RUYWdDaG9pZGUnKVxuICAgICAgICAgIC53aGVuKFxuICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5pc1ByZXNlbnQoJyQucmVzdWx0LmRlc2NyaWJlLnRhZ3MnKSxcbiAgICAgICAgICAgIG5ldyBzZm4uUGFzcyhzY29wZSwgJ0NvbnRhaW5UYWdWbHVlJywge1xuICAgICAgICAgICAgICByZXN1bHRQYXRoOiAnJC5jaGVjay50YWcnLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgaXNDb250YWluOiBzZm4uSnNvblBhdGguYXJyYXlDb250YWlucyhcbiAgICAgICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wYXJhbXMudGFnVmFsdWVzJyksXG4gICAgICAgICAgICAgICAgICBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5yZXN1bHQuZGVzY3JpYmUudGFnc1s/KEAuS2V5ID09ICQucGFyYW1zLnRhZ0tleSldLlZhbHVlJyksIDApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KS5uZXh0KFxuICAgICAgICAgICAgICBuZXcgc2ZuLkNob2ljZShzY29wZSwgJ0ZpbHRlclRhZ0Nob2lzZScpXG4gICAgICAgICAgICAgICAgLndoZW4oXG4gICAgICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLmJvb2xlYW5FcXVhbHMoJyQuY2hlY2sudGFnLmlzQ29udGFpbicsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgc3RhdHVzQ2hvaWNlLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKFxuICAgICAgICAgICAgICAgICAgbmV3IHNmbi5QYXNzKHNjb3BlLCAnTm9UYWdNYXRjaCcsIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudDogJ25vIHRhZyBtYXRjaCcsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm90aGVyd2lzZShcbiAgICAgICAgICAgIG5ldyBzZm4uUGFzcyhzY29wZSwgJ05vVGFnc0ZvdW5kJywge1xuICAgICAgICAgICAgICBjb21tZW50OiAnbm8gdGFncyBmb3VuZCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIC8vIPCfkYcgZGVzY3JpYmUgbmV4dCB0YWcgZm91bmQgJiBtYXRjaFxuICAgICAgICBkZXNjcmliZURCSW5zdGFuY2VzVGFzay5uZXh0KHRhZ01hdGNoQ2hvaWNlKTtcbiAgICAgICAgZGVzY3JpYmVEQkNsdXN0ZXJzVGFzay5uZXh0KHRhZ01hdGNoQ2hvaWNlKTtcblxuICAgICAgICByZXR1cm4gc2ZuLkRlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUoc3RhcnRpbmdXYWl0KTtcbiAgICAgIH0pKCksXG4gICAgfSk7XG4gIH1cbn0iXX0=
|