@gammarers/aws-codepipeline-execution-state-change-notification-stack 2.1.4 → 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 +152 -13
- package/API.md +83 -0
- package/lib/index.d.ts +14 -3
- package/lib/index.js +28 -122
- package/lib/resources/notification-state-machine.d.ts +9 -0
- package/lib/resources/notification-state-machine.js +117 -0
- package/package.json +4 -2
package/.jsii
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@gammarers/aws-codesuite-state-change-detection-event-rules": "^2.0.6",
|
|
12
|
+
"@gammarers/aws-resource-naming": "^0.10.2",
|
|
12
13
|
"aws-cdk-lib": "^2.100.0",
|
|
13
14
|
"constructs": "^10.0.5"
|
|
14
15
|
},
|
|
@@ -105,6 +106,24 @@
|
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
},
|
|
109
|
+
"@gammarers/aws-resource-naming": {
|
|
110
|
+
"submodules": {
|
|
111
|
+
"@gammarers/aws-resource-naming.ResourceNaming": {}
|
|
112
|
+
},
|
|
113
|
+
"targets": {
|
|
114
|
+
"dotnet": {
|
|
115
|
+
"namespace": "Gammarers.Utils.AWS",
|
|
116
|
+
"packageId": "Gammarers.Utils.AWS.ResourceNaming"
|
|
117
|
+
},
|
|
118
|
+
"js": {
|
|
119
|
+
"npm": "@gammarers/aws-resource-naming"
|
|
120
|
+
},
|
|
121
|
+
"python": {
|
|
122
|
+
"distName": "gammarers.aws-resource-naming",
|
|
123
|
+
"module": "gammarers.aws_resource_naming"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
108
127
|
"aws-cdk-lib": {
|
|
109
128
|
"submodules": {
|
|
110
129
|
"aws-cdk-lib.alexa_ask": {
|
|
@@ -3617,7 +3636,7 @@
|
|
|
3617
3636
|
},
|
|
3618
3637
|
"locationInModule": {
|
|
3619
3638
|
"filename": "src/index.ts",
|
|
3620
|
-
"line":
|
|
3639
|
+
"line": 39
|
|
3621
3640
|
},
|
|
3622
3641
|
"parameters": [
|
|
3623
3642
|
{
|
|
@@ -3643,7 +3662,7 @@
|
|
|
3643
3662
|
"kind": "class",
|
|
3644
3663
|
"locationInModule": {
|
|
3645
3664
|
"filename": "src/index.ts",
|
|
3646
|
-
"line":
|
|
3665
|
+
"line": 38
|
|
3647
3666
|
},
|
|
3648
3667
|
"name": "CodePipelineExecutionStateChangeNotificationStack",
|
|
3649
3668
|
"symbolId": "src/index:CodePipelineExecutionStateChangeNotificationStack"
|
|
@@ -3661,7 +3680,7 @@
|
|
|
3661
3680
|
"kind": "interface",
|
|
3662
3681
|
"locationInModule": {
|
|
3663
3682
|
"filename": "src/index.ts",
|
|
3664
|
-
"line":
|
|
3683
|
+
"line": 21
|
|
3665
3684
|
},
|
|
3666
3685
|
"name": "CodePipelineExecutionStateChangeNotificationStackProps",
|
|
3667
3686
|
"properties": [
|
|
@@ -3673,7 +3692,7 @@
|
|
|
3673
3692
|
"immutable": true,
|
|
3674
3693
|
"locationInModule": {
|
|
3675
3694
|
"filename": "src/index.ts",
|
|
3676
|
-
"line":
|
|
3695
|
+
"line": 24
|
|
3677
3696
|
},
|
|
3678
3697
|
"name": "notifications",
|
|
3679
3698
|
"type": {
|
|
@@ -3688,7 +3707,7 @@
|
|
|
3688
3707
|
"immutable": true,
|
|
3689
3708
|
"locationInModule": {
|
|
3690
3709
|
"filename": "src/index.ts",
|
|
3691
|
-
"line":
|
|
3710
|
+
"line": 22
|
|
3692
3711
|
},
|
|
3693
3712
|
"name": "targetResource",
|
|
3694
3713
|
"type": {
|
|
@@ -3703,17 +3722,137 @@
|
|
|
3703
3722
|
"immutable": true,
|
|
3704
3723
|
"locationInModule": {
|
|
3705
3724
|
"filename": "src/index.ts",
|
|
3706
|
-
"line":
|
|
3725
|
+
"line": 23
|
|
3707
3726
|
},
|
|
3708
3727
|
"name": "enabled",
|
|
3709
3728
|
"optional": true,
|
|
3710
3729
|
"type": {
|
|
3711
3730
|
"primitive": "boolean"
|
|
3712
3731
|
}
|
|
3732
|
+
},
|
|
3733
|
+
{
|
|
3734
|
+
"abstract": true,
|
|
3735
|
+
"docs": {
|
|
3736
|
+
"stability": "stable"
|
|
3737
|
+
},
|
|
3738
|
+
"immutable": true,
|
|
3739
|
+
"locationInModule": {
|
|
3740
|
+
"filename": "src/index.ts",
|
|
3741
|
+
"line": 25
|
|
3742
|
+
},
|
|
3743
|
+
"name": "resourceNamingOption",
|
|
3744
|
+
"optional": true,
|
|
3745
|
+
"type": {
|
|
3746
|
+
"union": {
|
|
3747
|
+
"types": [
|
|
3748
|
+
{
|
|
3749
|
+
"fqn": "@gammarers/aws-resource-naming.ResourceDefaultNaming"
|
|
3750
|
+
},
|
|
3751
|
+
{
|
|
3752
|
+
"fqn": "@gammarers/aws-resource-naming.ResourceAutoNaming"
|
|
3753
|
+
},
|
|
3754
|
+
{
|
|
3755
|
+
"fqn": "@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming"
|
|
3756
|
+
}
|
|
3757
|
+
]
|
|
3758
|
+
}
|
|
3759
|
+
}
|
|
3713
3760
|
}
|
|
3714
3761
|
],
|
|
3715
3762
|
"symbolId": "src/index:CodePipelineExecutionStateChangeNotificationStackProps"
|
|
3716
3763
|
},
|
|
3764
|
+
"@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming": {
|
|
3765
|
+
"assembly": "@gammarers/aws-codepipeline-execution-state-change-notification-stack",
|
|
3766
|
+
"datatype": true,
|
|
3767
|
+
"docs": {
|
|
3768
|
+
"stability": "stable"
|
|
3769
|
+
},
|
|
3770
|
+
"fqn": "@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming",
|
|
3771
|
+
"kind": "interface",
|
|
3772
|
+
"locationInModule": {
|
|
3773
|
+
"filename": "src/index.ts",
|
|
3774
|
+
"line": 28
|
|
3775
|
+
},
|
|
3776
|
+
"name": "CustomNaming",
|
|
3777
|
+
"properties": [
|
|
3778
|
+
{
|
|
3779
|
+
"abstract": true,
|
|
3780
|
+
"docs": {
|
|
3781
|
+
"stability": "stable"
|
|
3782
|
+
},
|
|
3783
|
+
"immutable": true,
|
|
3784
|
+
"locationInModule": {
|
|
3785
|
+
"filename": "src/index.ts",
|
|
3786
|
+
"line": 32
|
|
3787
|
+
},
|
|
3788
|
+
"name": "notificationTopicDisplayName",
|
|
3789
|
+
"type": {
|
|
3790
|
+
"primitive": "string"
|
|
3791
|
+
}
|
|
3792
|
+
},
|
|
3793
|
+
{
|
|
3794
|
+
"abstract": true,
|
|
3795
|
+
"docs": {
|
|
3796
|
+
"stability": "stable"
|
|
3797
|
+
},
|
|
3798
|
+
"immutable": true,
|
|
3799
|
+
"locationInModule": {
|
|
3800
|
+
"filename": "src/index.ts",
|
|
3801
|
+
"line": 31
|
|
3802
|
+
},
|
|
3803
|
+
"name": "notificationTopicName",
|
|
3804
|
+
"type": {
|
|
3805
|
+
"primitive": "string"
|
|
3806
|
+
}
|
|
3807
|
+
},
|
|
3808
|
+
{
|
|
3809
|
+
"abstract": true,
|
|
3810
|
+
"docs": {
|
|
3811
|
+
"stability": "stable"
|
|
3812
|
+
},
|
|
3813
|
+
"immutable": true,
|
|
3814
|
+
"locationInModule": {
|
|
3815
|
+
"filename": "src/index.ts",
|
|
3816
|
+
"line": 33
|
|
3817
|
+
},
|
|
3818
|
+
"name": "pipelineEventDetectionRuleName",
|
|
3819
|
+
"type": {
|
|
3820
|
+
"primitive": "string"
|
|
3821
|
+
}
|
|
3822
|
+
},
|
|
3823
|
+
{
|
|
3824
|
+
"abstract": true,
|
|
3825
|
+
"docs": {
|
|
3826
|
+
"stability": "stable"
|
|
3827
|
+
},
|
|
3828
|
+
"immutable": true,
|
|
3829
|
+
"locationInModule": {
|
|
3830
|
+
"filename": "src/index.ts",
|
|
3831
|
+
"line": 30
|
|
3832
|
+
},
|
|
3833
|
+
"name": "stateMachineName",
|
|
3834
|
+
"type": {
|
|
3835
|
+
"primitive": "string"
|
|
3836
|
+
}
|
|
3837
|
+
},
|
|
3838
|
+
{
|
|
3839
|
+
"abstract": true,
|
|
3840
|
+
"docs": {
|
|
3841
|
+
"stability": "stable"
|
|
3842
|
+
},
|
|
3843
|
+
"immutable": true,
|
|
3844
|
+
"locationInModule": {
|
|
3845
|
+
"filename": "src/index.ts",
|
|
3846
|
+
"line": 29
|
|
3847
|
+
},
|
|
3848
|
+
"name": "type",
|
|
3849
|
+
"type": {
|
|
3850
|
+
"fqn": "@gammarers/aws-resource-naming.ResourceNamingType"
|
|
3851
|
+
}
|
|
3852
|
+
}
|
|
3853
|
+
],
|
|
3854
|
+
"symbolId": "src/index:CustomNaming"
|
|
3855
|
+
},
|
|
3717
3856
|
"@gammarers/aws-codepipeline-execution-state-change-notification-stack.NotificationsProperty": {
|
|
3718
3857
|
"assembly": "@gammarers/aws-codepipeline-execution-state-change-notification-stack",
|
|
3719
3858
|
"datatype": true,
|
|
@@ -3724,7 +3863,7 @@
|
|
|
3724
3863
|
"kind": "interface",
|
|
3725
3864
|
"locationInModule": {
|
|
3726
3865
|
"filename": "src/index.ts",
|
|
3727
|
-
"line":
|
|
3866
|
+
"line": 18
|
|
3728
3867
|
},
|
|
3729
3868
|
"name": "NotificationsProperty",
|
|
3730
3869
|
"properties": [
|
|
@@ -3736,7 +3875,7 @@
|
|
|
3736
3875
|
"immutable": true,
|
|
3737
3876
|
"locationInModule": {
|
|
3738
3877
|
"filename": "src/index.ts",
|
|
3739
|
-
"line":
|
|
3878
|
+
"line": 19
|
|
3740
3879
|
},
|
|
3741
3880
|
"name": "emails",
|
|
3742
3881
|
"optional": true,
|
|
@@ -3762,7 +3901,7 @@
|
|
|
3762
3901
|
"kind": "interface",
|
|
3763
3902
|
"locationInModule": {
|
|
3764
3903
|
"filename": "src/index.ts",
|
|
3765
|
-
"line":
|
|
3904
|
+
"line": 13
|
|
3766
3905
|
},
|
|
3767
3906
|
"name": "TargetResourceProperty",
|
|
3768
3907
|
"properties": [
|
|
@@ -3774,7 +3913,7 @@
|
|
|
3774
3913
|
"immutable": true,
|
|
3775
3914
|
"locationInModule": {
|
|
3776
3915
|
"filename": "src/index.ts",
|
|
3777
|
-
"line":
|
|
3916
|
+
"line": 14
|
|
3778
3917
|
},
|
|
3779
3918
|
"name": "tagKey",
|
|
3780
3919
|
"type": {
|
|
@@ -3789,7 +3928,7 @@
|
|
|
3789
3928
|
"immutable": true,
|
|
3790
3929
|
"locationInModule": {
|
|
3791
3930
|
"filename": "src/index.ts",
|
|
3792
|
-
"line":
|
|
3931
|
+
"line": 15
|
|
3793
3932
|
},
|
|
3794
3933
|
"name": "tagValues",
|
|
3795
3934
|
"type": {
|
|
@@ -3805,6 +3944,6 @@
|
|
|
3805
3944
|
"symbolId": "src/index:TargetResourceProperty"
|
|
3806
3945
|
}
|
|
3807
3946
|
},
|
|
3808
|
-
"version": "2.
|
|
3809
|
-
"fingerprint": "
|
|
3947
|
+
"version": "2.2.0",
|
|
3948
|
+
"fingerprint": "Klq5gc0W++HvNr8GgY6Sra2wQyW/NzsJyFOBB/ss3mg="
|
|
3810
3949
|
}
|
package/API.md
CHANGED
|
@@ -906,6 +906,7 @@ const codePipelineExecutionStateChangeNotificationStackProps: CodePipelineExecut
|
|
|
906
906
|
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStackProps.property.notifications">notifications</a></code> | <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.NotificationsProperty">NotificationsProperty</a></code> | *No description.* |
|
|
907
907
|
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStackProps.property.targetResource">targetResource</a></code> | <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.TargetResourceProperty">TargetResourceProperty</a></code> | *No description.* |
|
|
908
908
|
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStackProps.property.enabled">enabled</a></code> | <code>boolean</code> | *No description.* |
|
|
909
|
+
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStackProps.property.resourceNamingOption">resourceNamingOption</a></code> | <code>@gammarers/aws-resource-naming.ResourceDefaultNaming \| @gammarers/aws-resource-naming.ResourceAutoNaming \| <a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming">CustomNaming</a></code> | *No description.* |
|
|
909
910
|
|
|
910
911
|
---
|
|
911
912
|
|
|
@@ -1149,6 +1150,88 @@ public readonly enabled: boolean;
|
|
|
1149
1150
|
|
|
1150
1151
|
---
|
|
1151
1152
|
|
|
1153
|
+
##### `resourceNamingOption`<sup>Optional</sup> <a name="resourceNamingOption" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStackProps.property.resourceNamingOption"></a>
|
|
1154
|
+
|
|
1155
|
+
```typescript
|
|
1156
|
+
public readonly resourceNamingOption: ResourceDefaultNaming | ResourceAutoNaming | CustomNaming;
|
|
1157
|
+
```
|
|
1158
|
+
|
|
1159
|
+
- *Type:* @gammarers/aws-resource-naming.ResourceDefaultNaming | @gammarers/aws-resource-naming.ResourceAutoNaming | <a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming">CustomNaming</a>
|
|
1160
|
+
|
|
1161
|
+
---
|
|
1162
|
+
|
|
1163
|
+
### CustomNaming <a name="CustomNaming" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming"></a>
|
|
1164
|
+
|
|
1165
|
+
#### Initializer <a name="Initializer" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.Initializer"></a>
|
|
1166
|
+
|
|
1167
|
+
```typescript
|
|
1168
|
+
import { CustomNaming } from '@gammarers/aws-codepipeline-execution-state-change-notification-stack'
|
|
1169
|
+
|
|
1170
|
+
const customNaming: CustomNaming = { ... }
|
|
1171
|
+
```
|
|
1172
|
+
|
|
1173
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
1174
|
+
|
|
1175
|
+
| **Name** | **Type** | **Description** |
|
|
1176
|
+
| --- | --- | --- |
|
|
1177
|
+
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.notificationTopicDisplayName">notificationTopicDisplayName</a></code> | <code>string</code> | *No description.* |
|
|
1178
|
+
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.notificationTopicName">notificationTopicName</a></code> | <code>string</code> | *No description.* |
|
|
1179
|
+
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.pipelineEventDetectionRuleName">pipelineEventDetectionRuleName</a></code> | <code>string</code> | *No description.* |
|
|
1180
|
+
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.stateMachineName">stateMachineName</a></code> | <code>string</code> | *No description.* |
|
|
1181
|
+
| <code><a href="#@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.type">type</a></code> | <code>@gammarers/aws-resource-naming.ResourceNamingType</code> | *No description.* |
|
|
1182
|
+
|
|
1183
|
+
---
|
|
1184
|
+
|
|
1185
|
+
##### `notificationTopicDisplayName`<sup>Required</sup> <a name="notificationTopicDisplayName" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.notificationTopicDisplayName"></a>
|
|
1186
|
+
|
|
1187
|
+
```typescript
|
|
1188
|
+
public readonly notificationTopicDisplayName: string;
|
|
1189
|
+
```
|
|
1190
|
+
|
|
1191
|
+
- *Type:* string
|
|
1192
|
+
|
|
1193
|
+
---
|
|
1194
|
+
|
|
1195
|
+
##### `notificationTopicName`<sup>Required</sup> <a name="notificationTopicName" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.notificationTopicName"></a>
|
|
1196
|
+
|
|
1197
|
+
```typescript
|
|
1198
|
+
public readonly notificationTopicName: string;
|
|
1199
|
+
```
|
|
1200
|
+
|
|
1201
|
+
- *Type:* string
|
|
1202
|
+
|
|
1203
|
+
---
|
|
1204
|
+
|
|
1205
|
+
##### `pipelineEventDetectionRuleName`<sup>Required</sup> <a name="pipelineEventDetectionRuleName" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.pipelineEventDetectionRuleName"></a>
|
|
1206
|
+
|
|
1207
|
+
```typescript
|
|
1208
|
+
public readonly pipelineEventDetectionRuleName: string;
|
|
1209
|
+
```
|
|
1210
|
+
|
|
1211
|
+
- *Type:* string
|
|
1212
|
+
|
|
1213
|
+
---
|
|
1214
|
+
|
|
1215
|
+
##### `stateMachineName`<sup>Required</sup> <a name="stateMachineName" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.stateMachineName"></a>
|
|
1216
|
+
|
|
1217
|
+
```typescript
|
|
1218
|
+
public readonly stateMachineName: string;
|
|
1219
|
+
```
|
|
1220
|
+
|
|
1221
|
+
- *Type:* string
|
|
1222
|
+
|
|
1223
|
+
---
|
|
1224
|
+
|
|
1225
|
+
##### `type`<sup>Required</sup> <a name="type" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.CustomNaming.property.type"></a>
|
|
1226
|
+
|
|
1227
|
+
```typescript
|
|
1228
|
+
public readonly type: ResourceNamingType;
|
|
1229
|
+
```
|
|
1230
|
+
|
|
1231
|
+
- *Type:* @gammarers/aws-resource-naming.ResourceNamingType
|
|
1232
|
+
|
|
1233
|
+
---
|
|
1234
|
+
|
|
1152
1235
|
### NotificationsProperty <a name="NotificationsProperty" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.NotificationsProperty"></a>
|
|
1153
1236
|
|
|
1154
1237
|
#### Initializer <a name="Initializer" id="@gammarers/aws-codepipeline-execution-state-change-notification-stack.NotificationsProperty.Initializer"></a>
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ResourceAutoNaming, ResourceDefaultNaming, ResourceNamingType } from '@gammarers/aws-resource-naming';
|
|
2
|
+
import { Stack, StackProps } from 'aws-cdk-lib';
|
|
2
3
|
import { Construct } from 'constructs';
|
|
4
|
+
export { ResourceAutoNaming, ResourceDefaultNaming, ResourceNamingType as CodePipelineExecutionStateChangeNotificationStackResourceNamingType };
|
|
3
5
|
export interface TargetResourceProperty {
|
|
4
6
|
readonly tagKey: string;
|
|
5
7
|
readonly tagValues: string[];
|
|
@@ -7,11 +9,20 @@ export interface TargetResourceProperty {
|
|
|
7
9
|
export interface NotificationsProperty {
|
|
8
10
|
readonly emails?: string[];
|
|
9
11
|
}
|
|
10
|
-
export interface CodePipelineExecutionStateChangeNotificationStackProps extends
|
|
12
|
+
export interface CodePipelineExecutionStateChangeNotificationStackProps extends StackProps {
|
|
11
13
|
readonly targetResource: TargetResourceProperty;
|
|
12
14
|
readonly enabled?: boolean;
|
|
13
15
|
readonly notifications: NotificationsProperty;
|
|
16
|
+
readonly resourceNamingOption?: ResourceNamingOption;
|
|
14
17
|
}
|
|
15
|
-
export
|
|
18
|
+
export interface CustomNaming {
|
|
19
|
+
readonly type: ResourceNamingType.CUSTOM;
|
|
20
|
+
readonly stateMachineName: string;
|
|
21
|
+
readonly notificationTopicName: string;
|
|
22
|
+
readonly notificationTopicDisplayName: string;
|
|
23
|
+
readonly pipelineEventDetectionRuleName: string;
|
|
24
|
+
}
|
|
25
|
+
export type ResourceNamingOption = ResourceDefaultNaming | ResourceAutoNaming | CustomNaming;
|
|
26
|
+
export declare class CodePipelineExecutionStateChangeNotificationStack extends Stack {
|
|
16
27
|
constructor(scope: Construct, id: string, props: CodePipelineExecutionStateChangeNotificationStackProps);
|
|
17
28
|
}
|
package/lib/index.js
CHANGED
|
@@ -1,144 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.CodePipelineExecutionStateChangeNotificationStack = void 0;
|
|
4
|
+
exports.CodePipelineExecutionStateChangeNotificationStack = exports.CodePipelineExecutionStateChangeNotificationStackResourceNamingType = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const crypto = require("crypto");
|
|
7
6
|
const aws_codesuite_state_change_detection_event_rules_1 = require("@gammarers/aws-codesuite-state-change-detection-event-rules");
|
|
8
|
-
const
|
|
7
|
+
const aws_resource_naming_1 = require("@gammarers/aws-resource-naming");
|
|
8
|
+
Object.defineProperty(exports, "CodePipelineExecutionStateChangeNotificationStackResourceNamingType", { enumerable: true, get: function () { return aws_resource_naming_1.ResourceNamingType; } });
|
|
9
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
10
|
const events = require("aws-cdk-lib/aws-events");
|
|
10
11
|
const targets = require("aws-cdk-lib/aws-events-targets");
|
|
11
12
|
const sns = require("aws-cdk-lib/aws-sns");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
class CodePipelineExecutionStateChangeNotificationStack extends
|
|
13
|
+
const subscriptions = require("aws-cdk-lib/aws-sns-subscriptions");
|
|
14
|
+
const notification_state_machine_1 = require("./resources/notification-state-machine");
|
|
15
|
+
class CodePipelineExecutionStateChangeNotificationStack extends aws_cdk_lib_1.Stack {
|
|
15
16
|
constructor(scope, id, props) {
|
|
16
17
|
super(scope, id, props);
|
|
17
|
-
const account = cdk.Stack.of(this).account;
|
|
18
18
|
// 👇 Create random 8 length string
|
|
19
|
-
const random =
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
const random = aws_resource_naming_1.ResourceNaming.createRandomString(`${aws_cdk_lib_1.Names.uniqueId(scope)}.${aws_cdk_lib_1.Names.uniqueId(this)}`);
|
|
20
|
+
// 👇 Auto naeming
|
|
21
|
+
const autoNaming = {
|
|
22
|
+
stateMachineName: `codepipeline-exec-state-change-notification-${random}-machine`,
|
|
23
|
+
notificationTopicName: `codepipeline-execution-state-change-notification-${random}-topic`,
|
|
24
|
+
notificationTopicDisplayName: 'CodePipeline Execution state change Notification Topic',
|
|
25
|
+
pipelineEventDetectionRuleName: `codepipeline-exe-state-change-${random}-detection-event-rule`,
|
|
26
|
+
};
|
|
27
|
+
// 👇 Resource Names
|
|
28
|
+
const names = aws_resource_naming_1.ResourceNaming.naming(autoNaming, props.resourceNamingOption);
|
|
22
29
|
// 👇 SNS Topic for notifications
|
|
23
30
|
const topic = new sns.Topic(this, 'NotificationTopic', {
|
|
24
|
-
topicName:
|
|
25
|
-
displayName:
|
|
31
|
+
topicName: names.notificationTopicName,
|
|
32
|
+
displayName: names.notificationTopicDisplayName,
|
|
26
33
|
});
|
|
27
34
|
// const secret = cdk.SecretValue.secretsManager('my-email-array-secret');
|
|
28
35
|
// const emails = JSON.parse(secret.unsafeUnwrap()) as string[];
|
|
29
36
|
// Subscribe an email endpoint to the topic
|
|
30
37
|
const emails = props.notifications.emails ?? [];
|
|
31
|
-
for (const
|
|
32
|
-
|
|
33
|
-
topic,
|
|
34
|
-
protocol: sns.SubscriptionProtocol.EMAIL,
|
|
35
|
-
endpoint: value,
|
|
36
|
-
});
|
|
38
|
+
for (const email of emails) {
|
|
39
|
+
topic.addSubscription(new subscriptions.EmailSubscription(email));
|
|
37
40
|
}
|
|
38
41
|
// Subscribe a HTTP endpoint (Slack Webhook) to the topic
|
|
39
42
|
// topic.addSubscription(new subs.UrlSubscription('https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'));
|
|
40
|
-
const initPipelineStateEmojisDefinition = new sfn.Pass(this, 'InitPipelineStateEmojiDefinition', {
|
|
41
|
-
result: sfn.Result.fromObject([
|
|
42
|
-
{ name: 'STARTED', emoji: '🥳' },
|
|
43
|
-
{ name: 'SUCCEEDED', emoji: '🤩' },
|
|
44
|
-
{ name: 'RESUMED', emoji: '🤔' },
|
|
45
|
-
{ name: 'FAILED', emoji: '😫' },
|
|
46
|
-
{ name: 'STOPPING', emoji: '😮' },
|
|
47
|
-
{ name: 'STOPPED', emoji: '😌' },
|
|
48
|
-
{ name: 'SUPERSEDED', emoji: '🧐' },
|
|
49
|
-
]),
|
|
50
|
-
resultPath: '$.Definition.StateEmojis',
|
|
51
|
-
});
|
|
52
|
-
const succeed = new sfn.Succeed(this, 'Succeed');
|
|
53
|
-
// describe pipeline
|
|
54
|
-
const getPipeline = new tasks.CallAwsService(this, 'GetPipeline', {
|
|
55
|
-
iamResources: [`arn:aws:codepipeline:*:${account}:*`],
|
|
56
|
-
service: 'codepipeline',
|
|
57
|
-
action: 'getPipeline',
|
|
58
|
-
parameters: {
|
|
59
|
-
Name: sfn.JsonPath.stringAt('$.event.detail.pipeline'),
|
|
60
|
-
},
|
|
61
|
-
resultPath: '$.Result.Pipeline',
|
|
62
|
-
resultSelector: {
|
|
63
|
-
Arn: sfn.JsonPath.stringAt('$.Metadata.PipelineArn'),
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
initPipelineStateEmojisDefinition.next(getPipeline);
|
|
67
|
-
// 👇 Get Resources from resource arn list
|
|
68
|
-
const getResourceTagMappingList = new tasks.CallAwsService(this, 'GetResourceTagMappingList', {
|
|
69
|
-
service: 'resourcegroupstaggingapi',
|
|
70
|
-
action: 'getResources',
|
|
71
|
-
parameters: {
|
|
72
|
-
// ResourceARNList: sfn.JsonPath.listAt('$.resources'),
|
|
73
|
-
ResourceTypeFilters: ['codepipeline:pipeline'], // ResourceTypeFilters is not allowed when providing a ResourceARNList
|
|
74
|
-
TagFilters: [
|
|
75
|
-
{
|
|
76
|
-
Key: sfn.JsonPath.stringAt('$.params.tagKey'),
|
|
77
|
-
Values: sfn.JsonPath.stringAt('$.params.tagValues'),
|
|
78
|
-
},
|
|
79
|
-
], // TagFilters is not allowed when providing a ResourceARNList
|
|
80
|
-
},
|
|
81
|
-
iamAction: 'tag:GetResources',
|
|
82
|
-
iamResources: ['*'],
|
|
83
|
-
resultPath: '$.Result.GetMatchTagResource',
|
|
84
|
-
resultSelector: {
|
|
85
|
-
Arns: sfn.JsonPath.stringAt('$..ResourceTagMappingList[*].ResourceARN'),
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
// getTags.addCatch()
|
|
89
|
-
getPipeline.next(getResourceTagMappingList);
|
|
90
|
-
// 👇 Is in
|
|
91
|
-
const checkTagFilterArnsContain = new sfn.Pass(this, 'CheckTagFilterArnsContain', {
|
|
92
|
-
parameters: {
|
|
93
|
-
Is: sfn.JsonPath.arrayContains(sfn.JsonPath.stringAt('$.Result.GetMatchTagResource.Arns'), sfn.JsonPath.stringAt('$.Result.Pipeline.Arn')),
|
|
94
|
-
},
|
|
95
|
-
resultPath: '$.Result.TagFilterArnsContain',
|
|
96
|
-
});
|
|
97
|
-
getResourceTagMappingList.next(checkTagFilterArnsContain);
|
|
98
|
-
// 👇 Create pipeline URL
|
|
99
|
-
const generatePipelineUrl = new sfn.Pass(this, 'GeneratePipelineUrl', {
|
|
100
|
-
resultPath: '$.Generate.PipelineUrl',
|
|
101
|
-
parameters: {
|
|
102
|
-
Value: sfn.JsonPath.format('https://{}.console.aws.amazon.com/codesuite/codepipeline/pipelines/{}/view?region={}', sfn.JsonPath.stringAt('$.event.region'), sfn.JsonPath.stringAt('$.event.detail.pipeline'), sfn.JsonPath.stringAt('$.event.region')),
|
|
103
|
-
},
|
|
104
|
-
});
|
|
105
|
-
const generateTopicSubject = new sfn.Pass(this, 'GenerateTopicSubject', {
|
|
106
|
-
resultPath: '$.Generate.Topic.Subject',
|
|
107
|
-
parameters: {
|
|
108
|
-
Value: sfn.JsonPath.format('{} [{}] AWS CodePipeline Pipeline Execution State Notification [{}][{}]', sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringAt('$.Definition.StateEmojis[?(@.name == $.event.detail.state)].emoji'), 0), sfn.JsonPath.stringAt('$.event.detail.state'), sfn.JsonPath.stringAt('$.event.account'), sfn.JsonPath.stringAt('$.event.region')),
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
generatePipelineUrl.next(generateTopicSubject);
|
|
112
|
-
// 👇 Make send default & email message
|
|
113
|
-
const generateTopicTextMessage = new sfn.Pass(this, 'GeneratedPipelineMessage', {
|
|
114
|
-
resultPath: '$.Generate.Topic.Message',
|
|
115
|
-
parameters: {
|
|
116
|
-
Value: sfn.JsonPath.format('Account : {}\nRegion : {}\nPipeline : {}\nState : {}\nTime : {}\nURL : {}\n', sfn.JsonPath.stringAt('$.event.account'), sfn.JsonPath.stringAt('$.event.region'), sfn.JsonPath.stringAt('$.event.detail.pipeline'), sfn.JsonPath.stringAt('$.event.detail.state'), sfn.JsonPath.stringAt('$.event.time'), sfn.JsonPath.stringAt('$.Generate.PipelineUrl.Value')),
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
generateTopicSubject.next(generateTopicTextMessage);
|
|
120
|
-
// 👇 Choice state for message
|
|
121
|
-
const checkPipelineStateMatch = new sfn.Choice(this, 'CheckPipelineStateMatch')
|
|
122
|
-
.when(sfn.Condition.or(sfn.Condition.stringEquals('$.event.detail.state', 'STARTED'), sfn.Condition.stringEquals('$.event.detail.state', 'SUCCEEDED'), sfn.Condition.stringEquals('$.event.detail.state', 'RESUMED'), sfn.Condition.stringEquals('$.event.detail.state', 'FAILED'), sfn.Condition.stringEquals('$.event.detail.state', 'STOPPING'), sfn.Condition.stringEquals('$.event.detail.state', 'STOPPED'), sfn.Condition.stringEquals('$.event.detail.state', 'SUPERSEDED')), generatePipelineUrl)
|
|
123
|
-
.otherwise(new sfn.Pass(this, 'UnMatchStatus'));
|
|
124
|
-
const checkFoundTagMatch = new sfn.Choice(this, 'CheckFoundTagMatch')
|
|
125
|
-
.when(sfn.Condition.booleanEquals('$.Result.TagFilterArnsContain.Is', true), checkPipelineStateMatch)
|
|
126
|
-
.otherwise(new sfn.Pass(this, 'UnMatchPipelineTagFilter'));
|
|
127
|
-
checkTagFilterArnsContain.next(checkFoundTagMatch);
|
|
128
|
-
// 👇 Send notification task
|
|
129
|
-
const sendNotification = new tasks.SnsPublish(this, 'SendNotification', {
|
|
130
|
-
topic: topic,
|
|
131
|
-
subject: sfn.JsonPath.stringAt('$.Generate.Topic.Subject.Value'),
|
|
132
|
-
message: sfn.TaskInput.fromJsonPathAt('$.Generate.Topic.Message.Value'),
|
|
133
|
-
resultPath: '$.snsResult',
|
|
134
|
-
});
|
|
135
|
-
generateTopicTextMessage.next(sendNotification);
|
|
136
|
-
sendNotification.next(succeed);
|
|
137
43
|
// 👇 Create State Machine
|
|
138
|
-
const stateMachine = new
|
|
139
|
-
stateMachineName:
|
|
140
|
-
timeout:
|
|
141
|
-
|
|
44
|
+
const stateMachine = new notification_state_machine_1.NotificationStateMachine(this, 'StateMachine', {
|
|
45
|
+
stateMachineName: names.stateMachineName,
|
|
46
|
+
timeout: aws_cdk_lib_1.Duration.minutes(5),
|
|
47
|
+
notificationTopic: topic,
|
|
142
48
|
});
|
|
143
49
|
// 👇 Rule state
|
|
144
50
|
//enabled
|
|
@@ -147,7 +53,7 @@ class CodePipelineExecutionStateChangeNotificationStack extends cdk.Stack {
|
|
|
147
53
|
})();
|
|
148
54
|
// 👇 Create EventBridge Rule
|
|
149
55
|
new aws_codesuite_state_change_detection_event_rules_1.CodePipelineExecutionStateChangeDetectionEventRule(this, 'EventRule', {
|
|
150
|
-
ruleName:
|
|
56
|
+
ruleName: names.pipelineEventDetectionRuleName,
|
|
151
57
|
enabled: enableRule,
|
|
152
58
|
targets: [
|
|
153
59
|
new targets.SfnStateMachine(stateMachine, {
|
|
@@ -165,5 +71,5 @@ class CodePipelineExecutionStateChangeNotificationStack extends cdk.Stack {
|
|
|
165
71
|
}
|
|
166
72
|
exports.CodePipelineExecutionStateChangeNotificationStack = CodePipelineExecutionStateChangeNotificationStack;
|
|
167
73
|
_a = JSII_RTTI_SYMBOL_1;
|
|
168
|
-
CodePipelineExecutionStateChangeNotificationStack[_a] = { fqn: "@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStack", version: "2.
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsa0lBQWlJO0FBQ2pJLG1DQUFtQztBQUNuQyxpREFBaUQ7QUFDakQsMERBQTBEO0FBQzFELDJDQUEyQztBQUMzQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBaUI3RCxNQUFhLGlEQUFrRCxTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQzlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkQ7UUFDckcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRTNDLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUN0RSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpCLGlDQUFpQztRQUNqQyxNQUFNLEtBQUssR0FBYyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ2hFLFNBQVMsRUFBRSxvREFBb0QsTUFBTSxRQUFRO1lBQzdFLFdBQVcsRUFBRSx3REFBd0Q7U0FDdEUsQ0FBQyxDQUFDO1FBRUgsNkVBQTZFO1FBQzdFLG1FQUFtRTtRQUVuRSwyQ0FBMkM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2hELEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFN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RSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ3RDLE1BQU0sRUFBRTs0QkFDTixNQUFNLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNOzRCQUNuQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTO3lCQUMxQztxQkFDRixDQUFDO2lCQUNILENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBM01ILDhHQTRNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhdGVDaGFuZ2VEZXRlY3Rpb25FdmVudFJ1bGUgfSBmcm9tICdAZ2FtbWFyZXJzL2F3cy1jb2Rlc3VpdGUtc3RhdGUtY2hhbmdlLWRldGVjdGlvbi1ldmVudC1ydWxlcyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHRhc2tzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlUHJvcGVydHkge1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25zUHJvcGVydHkge1xuICByZWFkb25seSBlbWFpbHM/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25TdGFja1Byb3BzIGV4dGVuZHMgY2RrLlN0YWNrUHJvcHMge1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2VQcm9wZXJ0eTtcbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGNsYXNzIENvZGVQaXBlbGluZUV4ZWN1dGlvblN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBhY2NvdW50ID0gY2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG5cbiAgICAvLyDwn5GHIENyZWF0ZSByYW5kb20gOCBsZW5ndGggc3RyaW5nXG4gICAgY29uc3QgcmFuZG9tOiBzdHJpbmcgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hha2UyNTYnLCB7IG91dHB1dExlbmd0aDogNCB9KVxuICAgICAgLnVwZGF0ZShjZGsuTmFtZXMudW5pcXVlSWQodGhpcykpXG4gICAgICAuZGlnZXN0KCdoZXgnKTtcblxuICAgIC8vIPCfkYcgU05TIFRvcGljIGZvciBub3RpZmljYXRpb25zXG4gICAgY29uc3QgdG9waWM6IHNucy5Ub3BpYyA9IG5ldyBzbnMuVG9waWModGhpcywgJ05vdGlmaWNhdGlvblRvcGljJywge1xuICAgICAgdG9waWNOYW1lOiBgY29kZXBpcGVsaW5lLWV4ZWN1dGlvbi1zdGF0ZS1jaGFuZ2Utbm90aWZpY2F0aW9uLSR7cmFuZG9tfS10b3BpY2AsXG4gICAgICBkaXNwbGF5TmFtZTogJ0NvZGVQaXBlbGluZSBFeGVjdXRpb24gc3RhdGUgY2hhbmdlIE5vdGlmaWNhdGlvbiBUb3BpYycsXG4gICAgfSk7XG5cbiAgICAvLyAgICBjb25zdCBzZWNyZXQgPSBjZGsuU2VjcmV0VmFsdWUuc2VjcmV0c01hbmFnZXIoJ215LWVtYWlsLWFycmF5LXNlY3JldCcpO1xuICAgIC8vICAgIGNvbnN0IGVtYWlscyA9IEpTT04ucGFyc2Uoc2VjcmV0LnVuc2FmZVVud3JhcCgpKSBhcyBzdHJpbmdbXTtcblxuICAgIC8vIFN1YnNjcmliZSBhbiBlbWFpbCBlbmRwb2ludCB0byB0aGUgdG9waWNcbiAgICBjb25zdCBlbWFpbHMgPSBwcm9wcy5ub3RpZmljYXRpb25zLmVtYWlscyA/PyBbXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmFsdWVdIG9mIGVtYWlscy5lbnRyaWVzKCkpIHtcbiAgICAgIG5ldyBzbnMuU3Vic2NyaXB0aW9uKHRoaXMsIGBTdWJzY3JpcHRpb25FbWFpbCR7aW5kZXgudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpfWAsIHtcbiAgICAgICAgdG9waWMsXG4gICAgICAgIHByb3RvY29sOiBzbnMuU3Vic2NyaXB0aW9uUHJvdG9jb2wuRU1BSUwsXG4gICAgICAgIGVuZHBvaW50OiB2YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmliZSBhIEhUVFAgZW5kcG9pbnQgKFNsYWNrIFdlYmhvb2spIHRvIHRoZSB0b3BpY1xuICAgIC8vIHRvcGljLmFkZFN1YnNjcmlwdGlvbihuZXcgc3Vicy5VcmxTdWJzY3JpcHRpb24oJ2h0dHBzOi8vaG9va3Muc2xhY2suY29tL3NlcnZpY2VzL1lPVVIvU0xBQ0svV0VCSE9PSycpKTtcblxuICAgIGNvbnN0IGluaXRQaXBlbGluZVN0YXRlRW1vamlzRGVmaW5pdGlvbjogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3ModGhpcywgJ0luaXRQaXBlbGluZVN0YXRlRW1vamlEZWZpbml0aW9uJywge1xuICAgICAgcmVzdWx0OiBzZm4uUmVzdWx0LmZyb21PYmplY3QoW1xuICAgICAgICB7IG5hbWU6ICdTVEFSVEVEJywgZW1vamk6ICfwn6WzJyB9LFxuICAgICAgICB7IG5hbWU6ICdTVUNDRUVERUQnLCBlbW9qaTogJ/CfpKknIH0sXG4gICAgICAgIHsgbmFtZTogJ1JFU1VNRUQnLCBlbW9qaTogJ/CfpJQnIH0sXG4gICAgICAgIHsgbmFtZTogJ0ZBSUxFRCcsIGVtb2ppOiAn8J+YqycgfSxcbiAgICAgICAgeyBuYW1lOiAnU1RPUFBJTkcnLCBlbW9qaTogJ/CfmK4nIH0sXG4gICAgICAgIHsgbmFtZTogJ1NUT1BQRUQnLCBlbW9qaTogJ/CfmIwnIH0sXG4gICAgICAgIHsgbmFtZTogJ1NVUEVSU0VERUQnLCBlbW9qaTogJ/Cfp5AnIH0sXG4gICAgICBdKSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLkRlZmluaXRpb24uU3RhdGVFbW9qaXMnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VlZDogc2ZuLlN1Y2NlZWQgPSBuZXcgc2ZuLlN1Y2NlZWQodGhpcywgJ1N1Y2NlZWQnKTtcblxuICAgIC8vIGRlc2NyaWJlIHBpcGVsaW5lXG4gICAgY29uc3QgZ2V0UGlwZWxpbmUgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0dldFBpcGVsaW5lJywge1xuICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6Y29kZXBpcGVsaW5lOio6JHthY2NvdW50fToqYF0sXG4gICAgICBzZXJ2aWNlOiAnY29kZXBpcGVsaW5lJyxcbiAgICAgIGFjdGlvbjogJ2dldFBpcGVsaW5lJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgTmFtZTogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5waXBlbGluZScpLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5QaXBlbGluZScsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICBBcm46IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5NZXRhZGF0YS5QaXBlbGluZUFybicpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpbml0UGlwZWxpbmVTdGF0ZUVtb2ppc0RlZmluaXRpb24ubmV4dChnZXRQaXBlbGluZSk7XG5cbiAgICAvLyDwn5GHIEdldCBSZXNvdXJjZXMgZnJvbSByZXNvdXJjZSBhcm4gbGlzdFxuICAgIGNvbnN0IGdldFJlc291cmNlVGFnTWFwcGluZ0xpc3Q6IHRhc2tzLkNhbGxBd3NTZXJ2aWNlID0gbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHRoaXMsICdHZXRSZXNvdXJjZVRhZ01hcHBpbmdMaXN0Jywge1xuICAgICAgc2VydmljZTogJ3Jlc291cmNlZ3JvdXBzdGFnZ2luZ2FwaScsXG4gICAgICBhY3Rpb246ICdnZXRSZXNvdXJjZXMnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAvLyBSZXNvdXJjZUFSTkxpc3Q6IHNmbi5Kc29uUGF0aC5saXN0QXQoJyQucmVzb3VyY2VzJyksXG4gICAgICAgIFJlc291cmNlVHlwZUZpbHRlcnM6IFsnY29kZXBpcGVsaW5lOnBpcGVsaW5lJ10sIC8vIFJlc291cmNlVHlwZUZpbHRlcnMgaXMgbm90IGFsbG93ZWQgd2hlbiBwcm92aWRpbmcgYSBSZXNvdXJjZUFSTkxpc3RcbiAgICAgICAgVGFnRmlsdGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIEtleTogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnBhcmFtcy50YWdLZXknKSxcbiAgICAgICAgICAgIFZhbHVlczogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnBhcmFtcy50YWdWYWx1ZXMnKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLCAvLyBUYWdGaWx0ZXJzIGlzIG5vdCBhbGxvd2VkIHdoZW4gcHJvdmlkaW5nIGEgUmVzb3VyY2VBUk5MaXN0XG4gICAgICB9LFxuICAgICAgaWFtQWN0aW9uOiAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBpYW1SZXNvdXJjZXM6IFsnKiddLFxuICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LkdldE1hdGNoVGFnUmVzb3VyY2UnLFxuICAgICAgcmVzdWx0U2VsZWN0b3I6IHtcbiAgICAgICAgQXJuczogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLi5SZXNvdXJjZVRhZ01hcHBpbmdMaXN0WypdLlJlc291cmNlQVJOJyksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIC8vIGdldFRhZ3MuYWRkQ2F0Y2goKVxuICAgIGdldFBpcGVsaW5lLm5leHQoZ2V0UmVzb3VyY2VUYWdNYXBwaW5nTGlzdCk7XG5cbiAgICAvLyDwn5GHIElzIGluXG4gICAgY29uc3QgY2hlY2tUYWdGaWx0ZXJBcm5zQ29udGFpbjogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3ModGhpcywgJ0NoZWNrVGFnRmlsdGVyQXJuc0NvbnRhaW4nLCB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIElzOiBzZm4uSnNvblBhdGguYXJyYXlDb250YWlucyhzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LkdldE1hdGNoVGFnUmVzb3VyY2UuQXJucycpLCBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlBpcGVsaW5lLkFybicpKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuVGFnRmlsdGVyQXJuc0NvbnRhaW4nLFxuICAgIH0pO1xuXG4gICAgZ2V0UmVzb3VyY2VUYWdNYXBwaW5nTGlzdC5uZXh0KGNoZWNrVGFnRmlsdGVyQXJuc0NvbnRhaW4pO1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgcGlwZWxpbmUgVVJMXG4gICAgY29uc3QgZ2VuZXJhdGVQaXBlbGluZVVybCA9IG5ldyBzZm4uUGFzcyh0aGlzLCAnR2VuZXJhdGVQaXBlbGluZVVybCcsIHtcbiAgICAgIHJlc3VsdFBhdGg6ICckLkdlbmVyYXRlLlBpcGVsaW5lVXJsJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgVmFsdWU6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ2h0dHBzOi8ve30uY29uc29sZS5hd3MuYW1hem9uLmNvbS9jb2Rlc3VpdGUvY29kZXBpcGVsaW5lL3BpcGVsaW5lcy97fS92aWV3P3JlZ2lvbj17fScsXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LnJlZ2lvbicpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwucGlwZWxpbmUnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQucmVnaW9uJyksXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVUb3BpY1N1YmplY3QgPSBuZXcgc2ZuLlBhc3ModGhpcywgJ0dlbmVyYXRlVG9waWNTdWJqZWN0Jywge1xuICAgICAgcmVzdWx0UGF0aDogJyQuR2VuZXJhdGUuVG9waWMuU3ViamVjdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIFZhbHVlOiBzZm4uSnNvblBhdGguZm9ybWF0KCd7fSBbe31dIEFXUyBDb2RlUGlwZWxpbmUgUGlwZWxpbmUgRXhlY3V0aW9uIFN0YXRlIE5vdGlmaWNhdGlvbiBbe31dW3t9XScsXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuRGVmaW5pdGlvbi5TdGF0ZUVtb2ppc1s/KEAubmFtZSA9PSAkLmV2ZW50LmRldGFpbC5zdGF0ZSldLmVtb2ppJyksIDApLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuc3RhdGUnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuYWNjb3VudCcpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5yZWdpb24nKSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBnZW5lcmF0ZVBpcGVsaW5lVXJsLm5leHQoZ2VuZXJhdGVUb3BpY1N1YmplY3QpO1xuXG4gICAgLy8g8J+RhyBNYWtlIHNlbmQgZGVmYXVsdCAmIGVtYWlsIG1lc3NhZ2VcbiAgICBjb25zdCBnZW5lcmF0ZVRvcGljVGV4dE1lc3NhZ2U6IHNmbi5QYXNzID0gbmV3IHNmbi5QYXNzKHRoaXMsICdHZW5lcmF0ZWRQaXBlbGluZU1lc3NhZ2UnLCB7XG4gICAgICByZXN1bHRQYXRoOiAnJC5HZW5lcmF0ZS5Ub3BpYy5NZXNzYWdlJyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgVmFsdWU6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ0FjY291bnQgOiB7fVxcblJlZ2lvbiA6IHt9XFxuUGlwZWxpbmUgOiB7fVxcblN0YXRlIDoge31cXG5UaW1lIDoge31cXG5VUkwgOiB7fVxcbicsXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmFjY291bnQnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQucmVnaW9uJyksXG4gICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5waXBlbGluZScpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuc3RhdGUnKSxcbiAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQudGltZScpLFxuICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5HZW5lcmF0ZS5QaXBlbGluZVVybC5WYWx1ZScpLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGdlbmVyYXRlVG9waWNTdWJqZWN0Lm5leHQoZ2VuZXJhdGVUb3BpY1RleHRNZXNzYWdlKTtcblxuICAgIC8vIPCfkYcgQ2hvaWNlIHN0YXRlIGZvciBtZXNzYWdlXG4gICAgY29uc3QgY2hlY2tQaXBlbGluZVN0YXRlTWF0Y2g6IHNmbi5DaG9pY2UgPSBuZXcgc2ZuLkNob2ljZSh0aGlzLCAnQ2hlY2tQaXBlbGluZVN0YXRlTWF0Y2gnKVxuICAgICAgLndoZW4oXG4gICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1NUQVJURUQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuc3RhdGUnLCAnU1VDQ0VFREVEJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1JFU1VNRUQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuc3RhdGUnLCAnRkFJTEVEJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1NUT1BQSU5HJyksXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1NUT1BQRUQnKSxcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuc3RhdGUnLCAnU1VQRVJTRURFRCcpLFxuICAgICAgICApLFxuICAgICAgICBnZW5lcmF0ZVBpcGVsaW5lVXJsLFxuICAgICAgKVxuICAgICAgLm90aGVyd2lzZShuZXcgc2ZuLlBhc3ModGhpcywgJ1VuTWF0Y2hTdGF0dXMnKSk7XG5cbiAgICBjb25zdCBjaGVja0ZvdW5kVGFnTWF0Y2ggPSBuZXcgc2ZuLkNob2ljZSh0aGlzLCAnQ2hlY2tGb3VuZFRhZ01hdGNoJylcbiAgICAgIC53aGVuKHNmbi5Db25kaXRpb24uYm9vbGVhbkVxdWFscygnJC5SZXN1bHQuVGFnRmlsdGVyQXJuc0NvbnRhaW4uSXMnLCB0cnVlKSwgY2hlY2tQaXBlbGluZVN0YXRlTWF0Y2gpXG4gICAgICAub3RoZXJ3aXNlKG5ldyBzZm4uUGFzcyh0aGlzLCAnVW5NYXRjaFBpcGVsaW5lVGFnRmlsdGVyJykpO1xuXG4gICAgY2hlY2tUYWdGaWx0ZXJBcm5zQ29udGFpbi5uZXh0KGNoZWNrRm91bmRUYWdNYXRjaCk7XG5cbiAgICAvLyDwn5GHIFNlbmQgbm90aWZpY2F0aW9uIHRhc2tcbiAgICBjb25zdCBzZW5kTm90aWZpY2F0aW9uOiB0YXNrcy5TbnNQdWJsaXNoID0gbmV3IHRhc2tzLlNuc1B1Ymxpc2godGhpcywgJ1NlbmROb3RpZmljYXRpb24nLCB7XG4gICAgICB0b3BpYzogdG9waWMsXG4gICAgICBzdWJqZWN0OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuR2VuZXJhdGUuVG9waWMuU3ViamVjdC5WYWx1ZScpLFxuICAgICAgbWVzc2FnZTogc2ZuLlRhc2tJbnB1dC5mcm9tSnNvblBhdGhBdCgnJC5HZW5lcmF0ZS5Ub3BpYy5NZXNzYWdlLlZhbHVlJyksXG4gICAgICByZXN1bHRQYXRoOiAnJC5zbnNSZXN1bHQnLFxuICAgIH0pO1xuXG4gICAgZ2VuZXJhdGVUb3BpY1RleHRNZXNzYWdlLm5leHQoc2VuZE5vdGlmaWNhdGlvbik7XG5cbiAgICBzZW5kTm90aWZpY2F0aW9uLm5leHQoc3VjY2VlZCk7XG5cbiAgICAvLyDwn5GHIENyZWF0ZSBTdGF0ZSBNYWNoaW5lXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lOiBzZm4uU3RhdGVNYWNoaW5lID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIHN0YXRlTWFjaGluZU5hbWU6IGBjb2RlcGlwZWxpbmUtZXhlYy1zdGF0ZS1jaGFuZ2Utbm90aWZpY2F0aW9uLSR7cmFuZG9tfS1tYWNoaW5lYCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgZGVmaW5pdGlvbkJvZHk6IHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKGluaXRQaXBlbGluZVN0YXRlRW1vamlzRGVmaW5pdGlvbiksXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIFJ1bGUgc3RhdGVcbiAgICAvL2VuYWJsZWRcbiAgICBjb25zdCBlbmFibGVSdWxlOiBib29sZWFuID0gKCgpID0+IHtcbiAgICAgIHJldHVybiBwcm9wcz8uZW5hYmxlZCA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZWQ7XG4gICAgfSkoKTtcblxuICAgIC8vIPCfkYcgQ3JlYXRlIEV2ZW50QnJpZGdlIFJ1bGVcbiAgICBuZXcgQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhdGVDaGFuZ2VEZXRlY3Rpb25FdmVudFJ1bGUodGhpcywgJ0V2ZW50UnVsZScsIHtcbiAgICAgIHJ1bGVOYW1lOiBgY29kZXBpcGVsaW5lLWV4ZS1zdGF0ZS1jaGFuZ2UtJHtyYW5kb219LWRldGVjdGlvbi1ldmVudC1ydWxlYCxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLlNmblN0YXRlTWFjaGluZShzdGF0ZU1hY2hpbmUsIHtcbiAgICAgICAgICBpbnB1dDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJCcpLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgICB0YWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
74
|
+
CodePipelineExecutionStateChangeNotificationStack[_a] = { fqn: "@gammarers/aws-codepipeline-execution-state-change-notification-stack.CodePipelineExecutionStateChangeNotificationStack", version: "2.2.0" };
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrSUFBaUk7QUFDakksd0VBQStIO0FBU3JELG9KQVROLHdDQUFrQixPQVN1RDtBQVI3SSw2Q0FBaUU7QUFDakUsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCwyQ0FBMkM7QUFDM0MsbUVBQW1FO0FBRW5FLHVGQUFrRjtBQTZCbEYsTUFBYSxpREFBa0QsU0FBUSxtQkFBSztJQUMxRSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZEO1FBQ3JHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxvQ0FBYyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsbUJBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksbUJBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLGtCQUFrQjtRQUNsQixNQUFNLFVBQVUsR0FBRztZQUNqQixnQkFBZ0IsRUFBRSwrQ0FBK0MsTUFBTSxVQUFVO1lBQ2pGLHFCQUFxQixFQUFFLG9EQUFvRCxNQUFNLFFBQVE7WUFDekYsNEJBQTRCLEVBQUUsd0RBQXdEO1lBQ3RGLDhCQUE4QixFQUFFLGlDQUFpQyxNQUFNLHVCQUF1QjtTQUMvRixDQUFDO1FBQ0Ysb0JBQW9CO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLG9DQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsb0JBQTJELENBQUMsQ0FBQztRQUVuSCxpQ0FBaUM7UUFDakMsTUFBTSxLQUFLLEdBQWMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUNoRSxTQUFTLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtZQUN0QyxXQUFXLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjtTQUNoRCxDQUFDLENBQUM7UUFFSCw2RUFBNkU7UUFDN0UsbUVBQW1FO1FBRW5FLDJDQUEyQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDaEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksYUFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCwwR0FBMEc7UUFFMUcsMEJBQTBCO1FBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUkscURBQXdCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN0RSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsaUJBQWlCLEVBQUUsS0FBSztTQUN6QixDQUFDLENBQUM7UUFFSCxnQkFBZ0I7UUFDaEIsU0FBUztRQUNULE1BQU0sVUFBVSxHQUFZLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE9BQU8sS0FBSyxFQUFFLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsNkJBQTZCO1FBQzdCLElBQUkscUdBQWtELENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN4RSxRQUFRLEVBQUUsS0FBSyxDQUFDLDhCQUE4QjtZQUM5QyxPQUFPLEVBQUUsVUFBVTtZQUNuQixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRTtvQkFDeEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO3dCQUN2QyxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUN0QyxNQUFNLEVBQUU7NEJBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTTs0QkFDbkMsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUzt5QkFDMUM7cUJBQ0YsQ0FBQztpQkFDSCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQS9ESCw4R0FnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZURldGVjdGlvbkV2ZW50UnVsZSB9IGZyb20gJ0BnYW1tYXJlcnMvYXdzLWNvZGVzdWl0ZS1zdGF0ZS1jaGFuZ2UtZGV0ZWN0aW9uLWV2ZW50LXJ1bGVzJztcbmltcG9ydCB7IFJlc291cmNlQXV0b05hbWluZywgUmVzb3VyY2VEZWZhdWx0TmFtaW5nLCBSZXNvdXJjZU5hbWluZywgUmVzb3VyY2VOYW1pbmdUeXBlIH0gZnJvbSAnQGdhbW1hcmVycy9hd3MtcmVzb3VyY2UtbmFtaW5nJztcbmltcG9ydCB7IER1cmF0aW9uLCBOYW1lcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgKiBhcyBzdWJzY3JpcHRpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMtc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblN0YXRlTWFjaGluZSB9IGZyb20gJy4vcmVzb3VyY2VzL25vdGlmaWNhdGlvbi1zdGF0ZS1tYWNoaW5lJztcblxuZXhwb3J0IHsgUmVzb3VyY2VBdXRvTmFtaW5nLCBSZXNvdXJjZURlZmF1bHROYW1pbmcsIFJlc291cmNlTmFtaW5nVHlwZSBhcyBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvblN0YWNrUmVzb3VyY2VOYW1pbmdUeXBlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0UmVzb3VyY2VQcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnNQcm9wZXJ0eSB7XG4gIHJlYWRvbmx5IGVtYWlscz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvblN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlUHJvcGVydHk7XG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zUHJvcGVydHk7XG4gIHJlYWRvbmx5IHJlc291cmNlTmFtaW5nT3B0aW9uPzogUmVzb3VyY2VOYW1pbmdPcHRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tTmFtaW5nIHtcbiAgcmVhZG9ubHkgdHlwZTogUmVzb3VyY2VOYW1pbmdUeXBlLkNVU1RPTTtcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBub3RpZmljYXRpb25Ub3BpY05hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNEaXNwbGF5TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwaXBlbGluZUV2ZW50RGV0ZWN0aW9uUnVsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VOYW1pbmdPcHRpb24gPSBSZXNvdXJjZURlZmF1bHROYW1pbmcgfCBSZXNvdXJjZUF1dG9OYW1pbmcgfCBDdXN0b21OYW1pbmc7XG5cbmV4cG9ydCBjbGFzcyBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGF0ZUNoYW5nZU5vdGlmaWNhdGlvblN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhdGVDaGFuZ2VOb3RpZmljYXRpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyDwn5GHIENyZWF0ZSByYW5kb20gOCBsZW5ndGggc3RyaW5nXG4gICAgY29uc3QgcmFuZG9tID0gUmVzb3VyY2VOYW1pbmcuY3JlYXRlUmFuZG9tU3RyaW5nKGAke05hbWVzLnVuaXF1ZUlkKHNjb3BlKX0uJHtOYW1lcy51bmlxdWVJZCh0aGlzKX1gKTtcbiAgICAvLyDwn5GHIEF1dG8gbmFlbWluZ1xuICAgIGNvbnN0IGF1dG9OYW1pbmcgPSB7XG4gICAgICBzdGF0ZU1hY2hpbmVOYW1lOiBgY29kZXBpcGVsaW5lLWV4ZWMtc3RhdGUtY2hhbmdlLW5vdGlmaWNhdGlvbi0ke3JhbmRvbX0tbWFjaGluZWAsXG4gICAgICBub3RpZmljYXRpb25Ub3BpY05hbWU6IGBjb2RlcGlwZWxpbmUtZXhlY3V0aW9uLXN0YXRlLWNoYW5nZS1ub3RpZmljYXRpb24tJHtyYW5kb219LXRvcGljYCxcbiAgICAgIG5vdGlmaWNhdGlvblRvcGljRGlzcGxheU5hbWU6ICdDb2RlUGlwZWxpbmUgRXhlY3V0aW9uIHN0YXRlIGNoYW5nZSBOb3RpZmljYXRpb24gVG9waWMnLFxuICAgICAgcGlwZWxpbmVFdmVudERldGVjdGlvblJ1bGVOYW1lOiBgY29kZXBpcGVsaW5lLWV4ZS1zdGF0ZS1jaGFuZ2UtJHtyYW5kb219LWRldGVjdGlvbi1ldmVudC1ydWxlYCxcbiAgICB9O1xuICAgIC8vIPCfkYcgUmVzb3VyY2UgTmFtZXNcbiAgICBjb25zdCBuYW1lcyA9IFJlc291cmNlTmFtaW5nLm5hbWluZyhhdXRvTmFtaW5nLCBwcm9wcy5yZXNvdXJjZU5hbWluZ09wdGlvbiBhcyBSZXNvdXJjZU5hbWluZy5SZXNvdXJjZU5hbWluZ09wdGlvbik7XG5cbiAgICAvLyDwn5GHIFNOUyBUb3BpYyBmb3Igbm90aWZpY2F0aW9uc1xuICAgIGNvbnN0IHRvcGljOiBzbnMuVG9waWMgPSBuZXcgc25zLlRvcGljKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIHtcbiAgICAgIHRvcGljTmFtZTogbmFtZXMubm90aWZpY2F0aW9uVG9waWNOYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IG5hbWVzLm5vdGlmaWNhdGlvblRvcGljRGlzcGxheU5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyAgICBjb25zdCBzZWNyZXQgPSBjZGsuU2VjcmV0VmFsdWUuc2VjcmV0c01hbmFnZXIoJ215LWVtYWlsLWFycmF5LXNlY3JldCcpO1xuICAgIC8vICAgIGNvbnN0IGVtYWlscyA9IEpTT04ucGFyc2Uoc2VjcmV0LnVuc2FmZVVud3JhcCgpKSBhcyBzdHJpbmdbXTtcblxuICAgIC8vIFN1YnNjcmliZSBhbiBlbWFpbCBlbmRwb2ludCB0byB0aGUgdG9waWNcbiAgICBjb25zdCBlbWFpbHMgPSBwcm9wcy5ub3RpZmljYXRpb25zLmVtYWlscyA/PyBbXTtcbiAgICBmb3IgKGNvbnN0IGVtYWlsIG9mIGVtYWlscykge1xuICAgICAgdG9waWMuYWRkU3Vic2NyaXB0aW9uKG5ldyBzdWJzY3JpcHRpb25zLkVtYWlsU3Vic2NyaXB0aW9uKGVtYWlsKSk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaWJlIGEgSFRUUCBlbmRwb2ludCAoU2xhY2sgV2ViaG9vaykgdG8gdGhlIHRvcGljXG4gICAgLy8gdG9waWMuYWRkU3Vic2NyaXB0aW9uKG5ldyBzdWJzLlVybFN1YnNjcmlwdGlvbignaHR0cHM6Ly9ob29rcy5zbGFjay5jb20vc2VydmljZXMvWU9VUi9TTEFDSy9XRUJIT09LJykpO1xuXG4gICAgLy8g8J+RhyBDcmVhdGUgU3RhdGUgTWFjaGluZVxuICAgIGNvbnN0IHN0YXRlTWFjaGluZSA9IG5ldyBOb3RpZmljYXRpb25TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIHN0YXRlTWFjaGluZU5hbWU6IG5hbWVzLnN0YXRlTWFjaGluZU5hbWUsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgbm90aWZpY2F0aW9uVG9waWM6IHRvcGljLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBSdWxlIHN0YXRlXG4gICAgLy9lbmFibGVkXG4gICAgY29uc3QgZW5hYmxlUnVsZTogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHM/LmVuYWJsZWQgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVkO1xuICAgIH0pKCk7XG5cbiAgICAvLyDwn5GHIENyZWF0ZSBFdmVudEJyaWRnZSBSdWxlXG4gICAgbmV3IENvZGVQaXBlbGluZUV4ZWN1dGlvblN0YXRlQ2hhbmdlRGV0ZWN0aW9uRXZlbnRSdWxlKHRoaXMsICdFdmVudFJ1bGUnLCB7XG4gICAgICBydWxlTmFtZTogbmFtZXMucGlwZWxpbmVFdmVudERldGVjdGlvblJ1bGVOYW1lLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZSwge1xuICAgICAgICAgIGlucHV0OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -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 NotificationStateMachineProps extends sfn.StateMachineProps {
|
|
5
|
+
notificationTopic: sns.ITopic;
|
|
6
|
+
}
|
|
7
|
+
export declare class NotificationStateMachine extends sfn.StateMachine {
|
|
8
|
+
constructor(scope: Construct, id: string, props: NotificationStateMachineProps);
|
|
9
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotificationStateMachine = 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 NotificationStateMachine extends sfn.StateMachine {
|
|
8
|
+
constructor(scope, id, props) {
|
|
9
|
+
super(scope, id, {
|
|
10
|
+
...props,
|
|
11
|
+
definitionBody: (() => {
|
|
12
|
+
// 👇 Get Account
|
|
13
|
+
const account = aws_cdk_lib_1.Stack.of(scope).account;
|
|
14
|
+
const initPipelineStateEmojisDefinition = new sfn.Pass(scope, 'InitPipelineStateEmojiDefinition', {
|
|
15
|
+
result: sfn.Result.fromObject([
|
|
16
|
+
{ name: 'STARTED', emoji: '🥳' },
|
|
17
|
+
{ name: 'SUCCEEDED', emoji: '🤩' },
|
|
18
|
+
{ name: 'RESUMED', emoji: '🤔' },
|
|
19
|
+
{ name: 'FAILED', emoji: '😫' },
|
|
20
|
+
{ name: 'STOPPING', emoji: '😮' },
|
|
21
|
+
{ name: 'STOPPED', emoji: '😌' },
|
|
22
|
+
{ name: 'SUPERSEDED', emoji: '🧐' },
|
|
23
|
+
]),
|
|
24
|
+
resultPath: '$.Definition.StateEmojis',
|
|
25
|
+
});
|
|
26
|
+
const succeed = new sfn.Succeed(scope, 'Succeed');
|
|
27
|
+
// describe pipeline
|
|
28
|
+
const getPipeline = new tasks.CallAwsService(scope, 'GetPipeline', {
|
|
29
|
+
iamResources: [`arn:aws:codepipeline:*:${account}:*`],
|
|
30
|
+
service: 'codepipeline',
|
|
31
|
+
action: 'getPipeline',
|
|
32
|
+
parameters: {
|
|
33
|
+
Name: sfn.JsonPath.stringAt('$.event.detail.pipeline'),
|
|
34
|
+
},
|
|
35
|
+
resultPath: '$.Result.Pipeline',
|
|
36
|
+
resultSelector: {
|
|
37
|
+
Arn: sfn.JsonPath.stringAt('$.Metadata.PipelineArn'),
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
initPipelineStateEmojisDefinition.next(getPipeline);
|
|
41
|
+
// 👇 Get Resources from resource arn list
|
|
42
|
+
const getResourceTagMappingList = new tasks.CallAwsService(scope, 'GetResourceTagMappingList', {
|
|
43
|
+
service: 'resourcegroupstaggingapi',
|
|
44
|
+
action: 'getResources',
|
|
45
|
+
parameters: {
|
|
46
|
+
// ResourceARNList: sfn.JsonPath.listAt('$.resources'),
|
|
47
|
+
ResourceTypeFilters: ['codepipeline:pipeline'], // ResourceTypeFilters is not allowed when providing a ResourceARNList
|
|
48
|
+
TagFilters: [
|
|
49
|
+
{
|
|
50
|
+
Key: sfn.JsonPath.stringAt('$.params.tagKey'),
|
|
51
|
+
Values: sfn.JsonPath.stringAt('$.params.tagValues'),
|
|
52
|
+
},
|
|
53
|
+
], // TagFilters is not allowed when providing a ResourceARNList
|
|
54
|
+
},
|
|
55
|
+
iamAction: 'tag:GetResources',
|
|
56
|
+
iamResources: ['*'],
|
|
57
|
+
resultPath: '$.Result.GetMatchTagResource',
|
|
58
|
+
resultSelector: {
|
|
59
|
+
Arns: sfn.JsonPath.stringAt('$..ResourceTagMappingList[*].ResourceARN'),
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
// getTags.addCatch()
|
|
63
|
+
getPipeline.next(getResourceTagMappingList);
|
|
64
|
+
// 👇 Is in
|
|
65
|
+
const checkTagFilterArnsContain = new sfn.Pass(scope, 'CheckTagFilterArnsContain', {
|
|
66
|
+
parameters: {
|
|
67
|
+
Is: sfn.JsonPath.arrayContains(sfn.JsonPath.stringAt('$.Result.GetMatchTagResource.Arns'), sfn.JsonPath.stringAt('$.Result.Pipeline.Arn')),
|
|
68
|
+
},
|
|
69
|
+
resultPath: '$.Result.TagFilterArnsContain',
|
|
70
|
+
});
|
|
71
|
+
getResourceTagMappingList.next(checkTagFilterArnsContain);
|
|
72
|
+
// 👇 Create pipeline URL
|
|
73
|
+
const generatePipelineUrl = new sfn.Pass(scope, 'GeneratePipelineUrl', {
|
|
74
|
+
resultPath: '$.Generate.PipelineUrl',
|
|
75
|
+
parameters: {
|
|
76
|
+
Value: sfn.JsonPath.format('https://{}.console.aws.amazon.com/codesuite/codepipeline/pipelines/{}/view?region={}', sfn.JsonPath.stringAt('$.event.region'), sfn.JsonPath.stringAt('$.event.detail.pipeline'), sfn.JsonPath.stringAt('$.event.region')),
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
const generateTopicSubject = new sfn.Pass(scope, 'GenerateTopicSubject', {
|
|
80
|
+
resultPath: '$.Generate.Topic.Subject',
|
|
81
|
+
parameters: {
|
|
82
|
+
Value: sfn.JsonPath.format('{} [{}] AWS CodePipeline Pipeline Execution State Notification [{}][{}]', sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringAt('$.Definition.StateEmojis[?(@.name == $.event.detail.state)].emoji'), 0), sfn.JsonPath.stringAt('$.event.detail.state'), sfn.JsonPath.stringAt('$.event.account'), sfn.JsonPath.stringAt('$.event.region')),
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
generatePipelineUrl.next(generateTopicSubject);
|
|
86
|
+
// 👇 Make send default & email message
|
|
87
|
+
const generateTopicTextMessage = new sfn.Pass(scope, 'GeneratedPipelineMessage', {
|
|
88
|
+
resultPath: '$.Generate.Topic.Message',
|
|
89
|
+
parameters: {
|
|
90
|
+
Value: sfn.JsonPath.format('Account : {}\nRegion : {}\nPipeline : {}\nState : {}\nTime : {}\nURL : {}\n', sfn.JsonPath.stringAt('$.event.account'), sfn.JsonPath.stringAt('$.event.region'), sfn.JsonPath.stringAt('$.event.detail.pipeline'), sfn.JsonPath.stringAt('$.event.detail.state'), sfn.JsonPath.stringAt('$.event.time'), sfn.JsonPath.stringAt('$.Generate.PipelineUrl.Value')),
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
generateTopicSubject.next(generateTopicTextMessage);
|
|
94
|
+
// 👇 Choice state for message
|
|
95
|
+
const checkPipelineStateMatch = new sfn.Choice(scope, 'CheckPipelineStateMatch')
|
|
96
|
+
.when(sfn.Condition.or(sfn.Condition.stringEquals('$.event.detail.state', 'STARTED'), sfn.Condition.stringEquals('$.event.detail.state', 'SUCCEEDED'), sfn.Condition.stringEquals('$.event.detail.state', 'RESUMED'), sfn.Condition.stringEquals('$.event.detail.state', 'FAILED'), sfn.Condition.stringEquals('$.event.detail.state', 'STOPPING'), sfn.Condition.stringEquals('$.event.detail.state', 'STOPPED'), sfn.Condition.stringEquals('$.event.detail.state', 'SUPERSEDED')), generatePipelineUrl)
|
|
97
|
+
.otherwise(new sfn.Pass(scope, 'UnMatchStatus'));
|
|
98
|
+
const checkFoundTagMatch = new sfn.Choice(scope, 'CheckFoundTagMatch')
|
|
99
|
+
.when(sfn.Condition.booleanEquals('$.Result.TagFilterArnsContain.Is', true), checkPipelineStateMatch)
|
|
100
|
+
.otherwise(new sfn.Pass(scope, 'UnMatchPipelineTagFilter'));
|
|
101
|
+
checkTagFilterArnsContain.next(checkFoundTagMatch);
|
|
102
|
+
// 👇 Send notification task
|
|
103
|
+
const sendNotification = new tasks.SnsPublish(scope, 'SendNotification', {
|
|
104
|
+
topic: props.notificationTopic,
|
|
105
|
+
subject: sfn.JsonPath.stringAt('$.Generate.Topic.Subject.Value'),
|
|
106
|
+
message: sfn.TaskInput.fromJsonPathAt('$.Generate.Topic.Message.Value'),
|
|
107
|
+
resultPath: '$.snsResult',
|
|
108
|
+
});
|
|
109
|
+
generateTopicTextMessage.next(sendNotification);
|
|
110
|
+
sendNotification.next(succeed);
|
|
111
|
+
return sfn.DefinitionBody.fromChainable(initPipelineStateEmojisDefinition);
|
|
112
|
+
})(),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.NotificationStateMachine = NotificationStateMachine;
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXN0YXRlLW1hY2hpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzb3VyY2VzL25vdGlmaWNhdGlvbi1zdGF0ZS1tYWNoaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvQztBQUVwQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBTzdELE1BQWEsd0JBQXlCLFNBQVEsR0FBRyxDQUFDLFlBQVk7SUFDNUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQztRQUM1RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLGNBQWMsRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFFcEIsaUJBQWlCO2dCQUNqQixNQUFNLE9BQU8sR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBRXhDLE1BQU0saUNBQWlDLEdBQWEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQ0FBa0MsRUFBRTtvQkFDMUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO3dCQUM1QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDaEMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3dCQUNoQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDL0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ2pDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3dCQUNoQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDcEMsQ0FBQztvQkFDRixVQUFVLEVBQUUsMEJBQTBCO2lCQUN2QyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxPQUFPLEdBQWdCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRS9ELG9CQUFvQjtnQkFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUU7b0JBQ2pFLFlBQVksRUFBRSxDQUFDLDBCQUEwQixPQUFPLElBQUksQ0FBQztvQkFDckQsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLE1BQU0sRUFBRSxhQUFhO29CQUNyQixVQUFVLEVBQUU7d0JBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO3FCQUN2RDtvQkFDRCxVQUFVLEVBQUUsbUJBQW1CO29CQUMvQixjQUFjLEVBQUU7d0JBQ2QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDO3FCQUNyRDtpQkFDRixDQUFDLENBQUM7Z0JBQ0gsaUNBQWlDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVwRCwwQ0FBMEM7Z0JBQzFDLE1BQU0seUJBQXlCLEdBQXlCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7b0JBQ25ILE9BQU8sRUFBRSwwQkFBMEI7b0JBQ25DLE1BQU0sRUFBRSxjQUFjO29CQUN0QixVQUFVLEVBQUU7d0JBQ1YsdURBQXVEO3dCQUN2RCxtQkFBbUIsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsc0VBQXNFO3dCQUN0SCxVQUFVLEVBQUU7NEJBQ1Y7Z0NBQ0UsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dDQUM3QyxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUM7NkJBQ3BEO3lCQUNGLEVBQUUsNkRBQTZEO3FCQUNqRTtvQkFDRCxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQ25CLFVBQVUsRUFBRSw4QkFBOEI7b0JBQzFDLGNBQWMsRUFBRTt3QkFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUM7cUJBQ3hFO2lCQUNGLENBQUMsQ0FBQztnQkFDSCxxQkFBcUI7Z0JBQ3JCLFdBQVcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFFNUMsV0FBVztnQkFDWCxNQUFNLHlCQUF5QixHQUFhLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7b0JBQzNGLFVBQVUsRUFBRTt3QkFDVixFQUFFLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUNBQW1DLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO3FCQUMzSTtvQkFDRCxVQUFVLEVBQUUsK0JBQStCO2lCQUM1QyxDQUFDLENBQUM7Z0JBRUgseUJBQXlCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBRTFELHlCQUF5QjtnQkFDekIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFO29CQUNyRSxVQUFVLEVBQUUsd0JBQXdCO29CQUNwQyxVQUFVLEVBQUU7d0JBQ1YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHNGQUFzRixFQUMvRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN2QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUNoRCxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN4QztxQkFDRjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFFO29CQUN2RSxVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxVQUFVLEVBQUU7d0JBQ1YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHlFQUF5RSxFQUNsRyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxtRUFBbUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN4SCxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxFQUM3QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN4QztxQkFDRjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBRS9DLHVDQUF1QztnQkFDdkMsTUFBTSx3QkFBd0IsR0FBYSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLDBCQUEwQixFQUFFO29CQUN6RixVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxVQUFVLEVBQUU7d0JBQ1YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLDZFQUE2RSxFQUN0RyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN2QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUNoRCxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxFQUM3QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFDckMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsQ0FDdEQ7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILG9CQUFvQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUVwRCw4QkFBOEI7Z0JBQzlCLE1BQU0sdUJBQXVCLEdBQWUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQztxQkFDekYsSUFBSSxDQUNILEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUNkLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxFQUM3RCxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLENBQUMsRUFDL0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLEVBQzdELEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxFQUM1RCxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLENBQUMsRUFDOUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLEVBQzdELEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLFlBQVksQ0FBQyxDQUNqRSxFQUNELG1CQUFtQixDQUNwQjtxQkFDQSxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO2dCQUVuRCxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUM7cUJBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQztxQkFDcEcsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2dCQUU5RCx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFFbkQsNEJBQTRCO2dCQUM1QixNQUFNLGdCQUFnQixHQUFxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO29CQUN6RixLQUFLLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtvQkFDOUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO29CQUNoRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsZ0NBQWdDLENBQUM7b0JBQ3ZFLFVBQVUsRUFBRSxhQUFhO2lCQUMxQixDQUFDLENBQUM7Z0JBRUgsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRWhELGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBRTdFLENBQUMsQ0FBQyxFQUFFO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMUpELDREQTBKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHRhc2tzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvblN0YXRlTWFjaGluZVByb3BzIGV4dGVuZHMgc2ZuLlN0YXRlTWFjaGluZVByb3BzIHtcbiAgbm90aWZpY2F0aW9uVG9waWM6IHNucy5JVG9waWM7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TdGF0ZU1hY2hpbmUgZXh0ZW5kcyBzZm4uU3RhdGVNYWNoaW5lIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vdGlmaWNhdGlvblN0YXRlTWFjaGluZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGRlZmluaXRpb25Cb2R5OiAoKCkgPT4ge1xuXG4gICAgICAgIC8vIPCfkYcgR2V0IEFjY291bnRcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHNjb3BlKS5hY2NvdW50O1xuXG4gICAgICAgIGNvbnN0IGluaXRQaXBlbGluZVN0YXRlRW1vamlzRGVmaW5pdGlvbjogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdJbml0UGlwZWxpbmVTdGF0ZUVtb2ppRGVmaW5pdGlvbicsIHtcbiAgICAgICAgICByZXN1bHQ6IHNmbi5SZXN1bHQuZnJvbU9iamVjdChbXG4gICAgICAgICAgICB7IG5hbWU6ICdTVEFSVEVEJywgZW1vamk6ICfwn6WzJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnU1VDQ0VFREVEJywgZW1vamk6ICfwn6SpJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnUkVTVU1FRCcsIGVtb2ppOiAn8J+klCcgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0ZBSUxFRCcsIGVtb2ppOiAn8J+YqycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1NUT1BQSU5HJywgZW1vamk6ICfwn5iuJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnU1RPUFBFRCcsIGVtb2ppOiAn8J+YjCcgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1NVUEVSU0VERUQnLCBlbW9qaTogJ/Cfp5AnIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuRGVmaW5pdGlvbi5TdGF0ZUVtb2ppcycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN1Y2NlZWQ6IHNmbi5TdWNjZWVkID0gbmV3IHNmbi5TdWNjZWVkKHNjb3BlLCAnU3VjY2VlZCcpO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlIHBpcGVsaW5lXG4gICAgICAgIGNvbnN0IGdldFBpcGVsaW5lID0gbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKHNjb3BlLCAnR2V0UGlwZWxpbmUnLCB7XG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbYGFybjphd3M6Y29kZXBpcGVsaW5lOio6JHthY2NvdW50fToqYF0sXG4gICAgICAgICAgc2VydmljZTogJ2NvZGVwaXBlbGluZScsXG4gICAgICAgICAgYWN0aW9uOiAnZ2V0UGlwZWxpbmUnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIE5hbWU6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwucGlwZWxpbmUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5QaXBlbGluZScsXG4gICAgICAgICAgcmVzdWx0U2VsZWN0b3I6IHtcbiAgICAgICAgICAgIEFybjogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLk1ldGFkYXRhLlBpcGVsaW5lQXJuJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGluaXRQaXBlbGluZVN0YXRlRW1vamlzRGVmaW5pdGlvbi5uZXh0KGdldFBpcGVsaW5lKTtcblxuICAgICAgICAvLyDwn5GHIEdldCBSZXNvdXJjZXMgZnJvbSByZXNvdXJjZSBhcm4gbGlzdFxuICAgICAgICBjb25zdCBnZXRSZXNvdXJjZVRhZ01hcHBpbmdMaXN0OiB0YXNrcy5DYWxsQXdzU2VydmljZSA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZShzY29wZSwgJ0dldFJlc291cmNlVGFnTWFwcGluZ0xpc3QnLCB7XG4gICAgICAgICAgc2VydmljZTogJ3Jlc291cmNlZ3JvdXBzdGFnZ2luZ2FwaScsXG4gICAgICAgICAgYWN0aW9uOiAnZ2V0UmVzb3VyY2VzJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAvLyBSZXNvdXJjZUFSTkxpc3Q6IHNmbi5Kc29uUGF0aC5saXN0QXQoJyQucmVzb3VyY2VzJyksXG4gICAgICAgICAgICBSZXNvdXJjZVR5cGVGaWx0ZXJzOiBbJ2NvZGVwaXBlbGluZTpwaXBlbGluZSddLCAvLyBSZXNvdXJjZVR5cGVGaWx0ZXJzIGlzIG5vdCBhbGxvd2VkIHdoZW4gcHJvdmlkaW5nIGEgUmVzb3VyY2VBUk5MaXN0XG4gICAgICAgICAgICBUYWdGaWx0ZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBLZXk6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5wYXJhbXMudGFnS2V5JyksXG4gICAgICAgICAgICAgICAgVmFsdWVzOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQucGFyYW1zLnRhZ1ZhbHVlcycpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSwgLy8gVGFnRmlsdGVycyBpcyBub3QgYWxsb3dlZCB3aGVuIHByb3ZpZGluZyBhIFJlc291cmNlQVJOTGlzdFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaWFtQWN0aW9uOiAndGFnOkdldFJlc291cmNlcycsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuR2V0TWF0Y2hUYWdSZXNvdXJjZScsXG4gICAgICAgICAgcmVzdWx0U2VsZWN0b3I6IHtcbiAgICAgICAgICAgIEFybnM6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC4uUmVzb3VyY2VUYWdNYXBwaW5nTGlzdFsqXS5SZXNvdXJjZUFSTicpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBnZXRUYWdzLmFkZENhdGNoKClcbiAgICAgICAgZ2V0UGlwZWxpbmUubmV4dChnZXRSZXNvdXJjZVRhZ01hcHBpbmdMaXN0KTtcblxuICAgICAgICAvLyDwn5GHIElzIGluXG4gICAgICAgIGNvbnN0IGNoZWNrVGFnRmlsdGVyQXJuc0NvbnRhaW46IHNmbi5QYXNzID0gbmV3IHNmbi5QYXNzKHNjb3BlLCAnQ2hlY2tUYWdGaWx0ZXJBcm5zQ29udGFpbicsIHtcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBJczogc2ZuLkpzb25QYXRoLmFycmF5Q29udGFpbnMoc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5HZXRNYXRjaFRhZ1Jlc291cmNlLkFybnMnKSwgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5QaXBlbGluZS5Bcm4nKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuVGFnRmlsdGVyQXJuc0NvbnRhaW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICBnZXRSZXNvdXJjZVRhZ01hcHBpbmdMaXN0Lm5leHQoY2hlY2tUYWdGaWx0ZXJBcm5zQ29udGFpbik7XG5cbiAgICAgICAgLy8g8J+RhyBDcmVhdGUgcGlwZWxpbmUgVVJMXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlUGlwZWxpbmVVcmwgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdHZW5lcmF0ZVBpcGVsaW5lVXJsJywge1xuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLkdlbmVyYXRlLlBpcGVsaW5lVXJsJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBWYWx1ZTogc2ZuLkpzb25QYXRoLmZvcm1hdCgnaHR0cHM6Ly97fS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2NvZGVzdWl0ZS9jb2RlcGlwZWxpbmUvcGlwZWxpbmVzL3t9L3ZpZXc/cmVnaW9uPXt9JyxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LnJlZ2lvbicpLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLnBpcGVsaW5lJyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5yZWdpb24nKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVUb3BpY1N1YmplY3QgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdHZW5lcmF0ZVRvcGljU3ViamVjdCcsIHtcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5HZW5lcmF0ZS5Ub3BpYy5TdWJqZWN0JyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBWYWx1ZTogc2ZuLkpzb25QYXRoLmZvcm1hdCgne30gW3t9XSBBV1MgQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBOb3RpZmljYXRpb24gW3t9XVt7fV0nLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5EZWZpbml0aW9uLlN0YXRlRW1vamlzWz8oQC5uYW1lID09ICQuZXZlbnQuZGV0YWlsLnN0YXRlKV0uZW1vamknKSwgMCksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwuc3RhdGUnKSxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmFjY291bnQnKSxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LnJlZ2lvbicpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBnZW5lcmF0ZVBpcGVsaW5lVXJsLm5leHQoZ2VuZXJhdGVUb3BpY1N1YmplY3QpO1xuXG4gICAgICAgIC8vIPCfkYcgTWFrZSBzZW5kIGRlZmF1bHQgJiBlbWFpbCBtZXNzYWdlXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlVG9waWNUZXh0TWVzc2FnZTogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdHZW5lcmF0ZWRQaXBlbGluZU1lc3NhZ2UnLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuR2VuZXJhdGUuVG9waWMuTWVzc2FnZScsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgVmFsdWU6IHNmbi5Kc29uUGF0aC5mb3JtYXQoJ0FjY291bnQgOiB7fVxcblJlZ2lvbiA6IHt9XFxuUGlwZWxpbmUgOiB7fVxcblN0YXRlIDoge31cXG5UaW1lIDoge31cXG5VUkwgOiB7fVxcbicsXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5hY2NvdW50JyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5yZWdpb24nKSxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLmV2ZW50LmRldGFpbC5waXBlbGluZScpLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC50aW1lJyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5HZW5lcmF0ZS5QaXBlbGluZVVybC5WYWx1ZScpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBnZW5lcmF0ZVRvcGljU3ViamVjdC5uZXh0KGdlbmVyYXRlVG9waWNUZXh0TWVzc2FnZSk7XG5cbiAgICAgICAgLy8g8J+RhyBDaG9pY2Ugc3RhdGUgZm9yIG1lc3NhZ2VcbiAgICAgICAgY29uc3QgY2hlY2tQaXBlbGluZVN0YXRlTWF0Y2g6IHNmbi5DaG9pY2UgPSBuZXcgc2ZuLkNob2ljZShzY29wZSwgJ0NoZWNrUGlwZWxpbmVTdGF0ZU1hdGNoJylcbiAgICAgICAgICAud2hlbihcbiAgICAgICAgICAgIHNmbi5Db25kaXRpb24ub3IoXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5zdGF0ZScsICdTVEFSVEVEJyksXG4gICAgICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKCckLmV2ZW50LmRldGFpbC5zdGF0ZScsICdTVUNDRUVERUQnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1JFU1VNRUQnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ0ZBSUxFRCcpLFxuICAgICAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5ldmVudC5kZXRhaWwuc3RhdGUnLCAnU1RPUFBJTkcnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1NUT1BQRUQnKSxcbiAgICAgICAgICAgICAgc2ZuLkNvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQuZXZlbnQuZGV0YWlsLnN0YXRlJywgJ1NVUEVSU0VERUQnKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBnZW5lcmF0ZVBpcGVsaW5lVXJsLFxuICAgICAgICAgIClcbiAgICAgICAgICAub3RoZXJ3aXNlKG5ldyBzZm4uUGFzcyhzY29wZSwgJ1VuTWF0Y2hTdGF0dXMnKSk7XG5cbiAgICAgICAgY29uc3QgY2hlY2tGb3VuZFRhZ01hdGNoID0gbmV3IHNmbi5DaG9pY2Uoc2NvcGUsICdDaGVja0ZvdW5kVGFnTWF0Y2gnKVxuICAgICAgICAgIC53aGVuKHNmbi5Db25kaXRpb24uYm9vbGVhbkVxdWFscygnJC5SZXN1bHQuVGFnRmlsdGVyQXJuc0NvbnRhaW4uSXMnLCB0cnVlKSwgY2hlY2tQaXBlbGluZVN0YXRlTWF0Y2gpXG4gICAgICAgICAgLm90aGVyd2lzZShuZXcgc2ZuLlBhc3Moc2NvcGUsICdVbk1hdGNoUGlwZWxpbmVUYWdGaWx0ZXInKSk7XG5cbiAgICAgICAgY2hlY2tUYWdGaWx0ZXJBcm5zQ29udGFpbi5uZXh0KGNoZWNrRm91bmRUYWdNYXRjaCk7XG5cbiAgICAgICAgLy8g8J+RhyBTZW5kIG5vdGlmaWNhdGlvbiB0YXNrXG4gICAgICAgIGNvbnN0IHNlbmROb3RpZmljYXRpb246IHRhc2tzLlNuc1B1Ymxpc2ggPSBuZXcgdGFza3MuU25zUHVibGlzaChzY29wZSwgJ1NlbmROb3RpZmljYXRpb24nLCB7XG4gICAgICAgICAgdG9waWM6IHByb3BzLm5vdGlmaWNhdGlvblRvcGljLFxuICAgICAgICAgIHN1YmplY3Q6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5HZW5lcmF0ZS5Ub3BpYy5TdWJqZWN0LlZhbHVlJyksXG4gICAgICAgICAgbWVzc2FnZTogc2ZuLlRhc2tJbnB1dC5mcm9tSnNvblBhdGhBdCgnJC5HZW5lcmF0ZS5Ub3BpYy5NZXNzYWdlLlZhbHVlJyksXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuc25zUmVzdWx0JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZ2VuZXJhdGVUb3BpY1RleHRNZXNzYWdlLm5leHQoc2VuZE5vdGlmaWNhdGlvbik7XG5cbiAgICAgICAgc2VuZE5vdGlmaWNhdGlvbi5uZXh0KHN1Y2NlZWQpO1xuICAgICAgICByZXR1cm4gc2ZuLkRlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUoaW5pdFBpcGVsaW5lU3RhdGVFbW9qaXNEZWZpbml0aW9uKTtcblxuICAgICAgfSkoKSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
|
package/package.json
CHANGED
|
@@ -59,11 +59,13 @@
|
|
|
59
59
|
"typescript": "5.5.x"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
+
"@gammarers/aws-resource-naming": "^0.10.2",
|
|
62
63
|
"aws-cdk-lib": "^2.100.0",
|
|
63
64
|
"constructs": "^10.0.5"
|
|
64
65
|
},
|
|
65
66
|
"dependencies": {
|
|
66
|
-
"@gammarers/aws-codesuite-state-change-detection-event-rules": "^2.0.6"
|
|
67
|
+
"@gammarers/aws-codesuite-state-change-detection-event-rules": "^2.0.6",
|
|
68
|
+
"@gammarers/aws-resource-naming": "^0.10.2"
|
|
67
69
|
},
|
|
68
70
|
"keywords": [
|
|
69
71
|
"aws",
|
|
@@ -80,7 +82,7 @@
|
|
|
80
82
|
"publishConfig": {
|
|
81
83
|
"access": "public"
|
|
82
84
|
},
|
|
83
|
-
"version": "2.
|
|
85
|
+
"version": "2.2.0",
|
|
84
86
|
"jest": {
|
|
85
87
|
"coverageProvider": "v8",
|
|
86
88
|
"testMatch": [
|