@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 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": 26
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": 25
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": 19
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": 22
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": 20
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": 21
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": 16
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": 17
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": 11
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": 12
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": 13
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.1.4",
3809
- "fingerprint": "yJHdE7r4KcbeWTgN/qI0yKMeKL/i66rWdfcS3FE88kE="
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 * as cdk from 'aws-cdk-lib';
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 cdk.StackProps {
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 declare class CodePipelineExecutionStateChangeNotificationStack extends cdk.Stack {
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 cdk = require("aws-cdk-lib");
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 sfn = require("aws-cdk-lib/aws-stepfunctions");
13
- const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
14
- class CodePipelineExecutionStateChangeNotificationStack extends cdk.Stack {
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 = crypto.createHash('shake256', { outputLength: 4 })
20
- .update(cdk.Names.uniqueId(this))
21
- .digest('hex');
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: `codepipeline-execution-state-change-notification-${random}-topic`,
25
- displayName: 'CodePipeline Execution state change Notification Topic',
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 [index, value] of emails.entries()) {
32
- new sns.Subscription(this, `SubscriptionEmail${index.toString().padStart(3, '0')}`, {
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 sfn.StateMachine(this, 'StateMachine', {
139
- stateMachineName: `codepipeline-exec-state-change-notification-${random}-machine`,
140
- timeout: cdk.Duration.minutes(5),
141
- definitionBody: sfn.DefinitionBody.fromChainable(initPipelineStateEmojisDefinition),
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: `codepipeline-exe-state-change-${random}-detection-event-rule`,
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.1.4" };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXN0YXRlLW1hY2hpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzb3VyY2VzL25vdGlmaWNhdGlvbi1zdGF0ZS1tYWNoaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvQztBQUVwQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBTzdELE1BQWEsd0JBQXlCLFNBQVEsR0FBRyxDQUFDLFlBQVk7SUFDNUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQztRQUM1RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLGNBQWMsRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFFcEIsaUJBQWlCO2dCQUNqQixNQUFNLE9BQU8sR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBRXhDLE1BQU0saUNBQWlDLEdBQWEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQ0FBa0MsRUFBRTtvQkFDMUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO3dCQUM1QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDaEMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3dCQUNoQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDL0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ2pDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3dCQUNoQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FB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LGFBQWEsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQztxQkFDcEcsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2dCQUU5RCx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFFbkQsNEJBQTRCO2dCQUM1QixNQUFNLGdCQUFnQixHQUFxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO29CQUN6RixLQUFLLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtvQkFDOUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO29CQUNoRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsZ0NBQWdDLENBQUM7b0JBQ3ZFLFVBQVUsRUFBRSxhQUFhO2lCQUMxQixDQUFDLENBQUM7Z0JBRUgsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRWhELGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBRTdFLENBQUMsQ0FBQyxFQUFFO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMUpELDREQTBKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHRhc2tzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvblN0YXRlTWFjaGluZVByb3BzIGV4dGVuZHMgc2ZuLlN0YXRlTWFjaGluZVByb3BzIHtcbiAgbm90aWZpY2F0aW9uVG9waWM6IHNucy5JVG9waWM7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TdGF0ZU1hY2hpbmUgZXh0ZW5kcyBzZm4uU3RhdGVNYWNoaW5lIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vdGlmaWNhdGlvblN0YXRlTWFjaGluZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGRlZmluaXRpb25Cb2R5OiAoKCkgPT4ge1xuXG4gICAgICAgIC8vIPCfkYcgR2V0IEFjY291bnRcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHNjb3BlKS5hY2NvdW50O1xuXG4gICAgICAgIGNvbnN0IGluaXRQaXBlbGluZVN0YXRlRW1vamlzRGVmaW5pdGlvbjogc2ZuLlBhc3MgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdJbml0UGlwZWxpbmVTdGF0ZUVtb2ppRGVmaW5pdGlvbicsIHtcbiAgICAgICAgICByZXN1bHQ6IHNmbi5SZXN1bHQuZnJvbU9iamVjdChbXG4gICAgICAgICAgICB7IG5hbWU6ICdTVEFSVEVEJywgZW1vamk6ICfwn6WzJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnU1VDQ0VFREVEJywgZW1vamk6ICfwn6SpJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnUkVTVU1FRCcsIGVtb2ppOiAn8J+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.1.4",
85
+ "version": "2.2.0",
84
86
  "jest": {
85
87
  "coverageProvider": "v8",
86
88
  "testMatch": [