@gammarers/aws-cloudfront-access-log-relocater 0.0.2 → 0.1.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
@@ -3690,6 +3690,100 @@
3690
3690
  }
3691
3691
  },
3692
3692
  "types": {
3693
+ "@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination": {
3694
+ "assembly": "@gammarers/aws-cloudfront-access-log-relocater",
3695
+ "datatype": true,
3696
+ "docs": {
3697
+ "stability": "stable"
3698
+ },
3699
+ "fqn": "@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination",
3700
+ "kind": "interface",
3701
+ "locationInModule": {
3702
+ "filename": "src/index.ts",
3703
+ "line": 19
3704
+ },
3705
+ "name": "AccessLogDestination",
3706
+ "properties": [
3707
+ {
3708
+ "abstract": true,
3709
+ "docs": {
3710
+ "stability": "stable"
3711
+ },
3712
+ "immutable": true,
3713
+ "locationInModule": {
3714
+ "filename": "src/index.ts",
3715
+ "line": 20
3716
+ },
3717
+ "name": "bucket",
3718
+ "type": {
3719
+ "fqn": "aws-cdk-lib.aws_s3.IBucket"
3720
+ }
3721
+ },
3722
+ {
3723
+ "abstract": true,
3724
+ "docs": {
3725
+ "stability": "stable"
3726
+ },
3727
+ "immutable": true,
3728
+ "locationInModule": {
3729
+ "filename": "src/index.ts",
3730
+ "line": 21
3731
+ },
3732
+ "name": "objectPrefix",
3733
+ "type": {
3734
+ "primitive": "string"
3735
+ }
3736
+ }
3737
+ ],
3738
+ "symbolId": "src/index:AccessLogDestination"
3739
+ },
3740
+ "@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource": {
3741
+ "assembly": "@gammarers/aws-cloudfront-access-log-relocater",
3742
+ "datatype": true,
3743
+ "docs": {
3744
+ "stability": "stable"
3745
+ },
3746
+ "fqn": "@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource",
3747
+ "kind": "interface",
3748
+ "locationInModule": {
3749
+ "filename": "src/index.ts",
3750
+ "line": 7
3751
+ },
3752
+ "name": "AccessLogSource",
3753
+ "properties": [
3754
+ {
3755
+ "abstract": true,
3756
+ "docs": {
3757
+ "stability": "stable"
3758
+ },
3759
+ "immutable": true,
3760
+ "locationInModule": {
3761
+ "filename": "src/index.ts",
3762
+ "line": 8
3763
+ },
3764
+ "name": "bucket",
3765
+ "type": {
3766
+ "fqn": "aws-cdk-lib.aws_s3.IBucket"
3767
+ }
3768
+ },
3769
+ {
3770
+ "abstract": true,
3771
+ "docs": {
3772
+ "stability": "stable"
3773
+ },
3774
+ "immutable": true,
3775
+ "locationInModule": {
3776
+ "filename": "src/index.ts",
3777
+ "line": 9
3778
+ },
3779
+ "name": "objectPrefix",
3780
+ "type": {
3781
+ "primitive": "string"
3782
+ }
3783
+ }
3784
+ ],
3785
+ "symbolId": "src/index:AccessLogSource"
3786
+ },
3693
3787
  "@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater": {
3694
3788
  "assembly": "@gammarers/aws-cloudfront-access-log-relocater",
3695
3789
  "base": "constructs.Construct",
@@ -3703,7 +3797,7 @@
3703
3797
  },
3704
3798
  "locationInModule": {
3705
3799
  "filename": "src/index.ts",
3706
- "line": 4
3800
+ "line": 31
3707
3801
  },
3708
3802
  "parameters": [
3709
3803
  {
@@ -3717,18 +3811,71 @@
3717
3811
  "type": {
3718
3812
  "primitive": "string"
3719
3813
  }
3814
+ },
3815
+ {
3816
+ "name": "props",
3817
+ "type": {
3818
+ "fqn": "@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps"
3819
+ }
3720
3820
  }
3721
3821
  ]
3722
3822
  },
3723
3823
  "kind": "class",
3724
3824
  "locationInModule": {
3725
3825
  "filename": "src/index.ts",
3726
- "line": 3
3826
+ "line": 30
3727
3827
  },
3728
3828
  "name": "CloudFrontAccessLogRelocater",
3729
3829
  "symbolId": "src/index:CloudFrontAccessLogRelocater"
3830
+ },
3831
+ "@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps": {
3832
+ "assembly": "@gammarers/aws-cloudfront-access-log-relocater",
3833
+ "datatype": true,
3834
+ "docs": {
3835
+ "stability": "stable"
3836
+ },
3837
+ "fqn": "@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps",
3838
+ "kind": "interface",
3839
+ "locationInModule": {
3840
+ "filename": "src/index.ts",
3841
+ "line": 25
3842
+ },
3843
+ "name": "CloudFrontAccessLogRelocaterProps",
3844
+ "properties": [
3845
+ {
3846
+ "abstract": true,
3847
+ "docs": {
3848
+ "stability": "stable"
3849
+ },
3850
+ "immutable": true,
3851
+ "locationInModule": {
3852
+ "filename": "src/index.ts",
3853
+ "line": 27
3854
+ },
3855
+ "name": "accessLogDestination",
3856
+ "type": {
3857
+ "fqn": "@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination"
3858
+ }
3859
+ },
3860
+ {
3861
+ "abstract": true,
3862
+ "docs": {
3863
+ "stability": "stable"
3864
+ },
3865
+ "immutable": true,
3866
+ "locationInModule": {
3867
+ "filename": "src/index.ts",
3868
+ "line": 26
3869
+ },
3870
+ "name": "accessLogSource",
3871
+ "type": {
3872
+ "fqn": "@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource"
3873
+ }
3874
+ }
3875
+ ],
3876
+ "symbolId": "src/index:CloudFrontAccessLogRelocaterProps"
3730
3877
  }
3731
3878
  },
3732
- "version": "0.0.2",
3733
- "fingerprint": "KVDx2BBZl5c3+qZ+33Ud528yT4rwU10gFK8/m4XtJAo="
3879
+ "version": "0.1.0",
3880
+ "fingerprint": "V7Hf+Hsr5oJEhvsH/WFl1nlzYUhKO2MA+Olz884GiEs="
3734
3881
  }
package/API.md CHANGED
@@ -9,13 +9,14 @@
9
9
  ```typescript
10
10
  import { CloudFrontAccessLogRelocater } from '@gammarers/aws-cloudfront-access-log-relocater'
11
11
 
12
- new CloudFrontAccessLogRelocater(scope: Construct, id: string)
12
+ new CloudFrontAccessLogRelocater(scope: Construct, id: string, props: CloudFrontAccessLogRelocaterProps)
13
13
  ```
14
14
 
15
15
  | **Name** | **Type** | **Description** |
16
16
  | --- | --- | --- |
17
17
  | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
18
18
  | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
19
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater.Initializer.parameter.props">props</a></code> | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps">CloudFrontAccessLogRelocaterProps</a></code> | *No description.* |
19
20
 
20
21
  ---
21
22
 
@@ -31,6 +32,12 @@ new CloudFrontAccessLogRelocater(scope: Construct, id: string)
31
32
 
32
33
  ---
33
34
 
35
+ ##### `props`<sup>Required</sup> <a name="props" id="@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater.Initializer.parameter.props"></a>
36
+
37
+ - *Type:* <a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps">CloudFrontAccessLogRelocaterProps</a>
38
+
39
+ ---
40
+
34
41
  #### Methods <a name="Methods" id="Methods"></a>
35
42
 
36
43
  | **Name** | **Description** |
@@ -94,6 +101,124 @@ The tree node.
94
101
  ---
95
102
 
96
103
 
104
+ ## Structs <a name="Structs" id="Structs"></a>
105
+
106
+ ### AccessLogDestination <a name="AccessLogDestination" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination"></a>
107
+
108
+ #### Initializer <a name="Initializer" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination.Initializer"></a>
109
+
110
+ ```typescript
111
+ import { AccessLogDestination } from '@gammarers/aws-cloudfront-access-log-relocater'
112
+
113
+ const accessLogDestination: AccessLogDestination = { ... }
114
+ ```
115
+
116
+ #### Properties <a name="Properties" id="Properties"></a>
117
+
118
+ | **Name** | **Type** | **Description** |
119
+ | --- | --- | --- |
120
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination.property.bucket">bucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | *No description.* |
121
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination.property.objectPrefix">objectPrefix</a></code> | <code>string</code> | *No description.* |
122
+
123
+ ---
124
+
125
+ ##### `bucket`<sup>Required</sup> <a name="bucket" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination.property.bucket"></a>
126
+
127
+ ```typescript
128
+ public readonly bucket: IBucket;
129
+ ```
130
+
131
+ - *Type:* aws-cdk-lib.aws_s3.IBucket
132
+
133
+ ---
134
+
135
+ ##### `objectPrefix`<sup>Required</sup> <a name="objectPrefix" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination.property.objectPrefix"></a>
136
+
137
+ ```typescript
138
+ public readonly objectPrefix: string;
139
+ ```
140
+
141
+ - *Type:* string
142
+
143
+ ---
144
+
145
+ ### AccessLogSource <a name="AccessLogSource" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource"></a>
146
+
147
+ #### Initializer <a name="Initializer" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource.Initializer"></a>
148
+
149
+ ```typescript
150
+ import { AccessLogSource } from '@gammarers/aws-cloudfront-access-log-relocater'
151
+
152
+ const accessLogSource: AccessLogSource = { ... }
153
+ ```
154
+
155
+ #### Properties <a name="Properties" id="Properties"></a>
156
+
157
+ | **Name** | **Type** | **Description** |
158
+ | --- | --- | --- |
159
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource.property.bucket">bucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | *No description.* |
160
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource.property.objectPrefix">objectPrefix</a></code> | <code>string</code> | *No description.* |
161
+
162
+ ---
163
+
164
+ ##### `bucket`<sup>Required</sup> <a name="bucket" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource.property.bucket"></a>
165
+
166
+ ```typescript
167
+ public readonly bucket: IBucket;
168
+ ```
169
+
170
+ - *Type:* aws-cdk-lib.aws_s3.IBucket
171
+
172
+ ---
173
+
174
+ ##### `objectPrefix`<sup>Required</sup> <a name="objectPrefix" id="@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource.property.objectPrefix"></a>
175
+
176
+ ```typescript
177
+ public readonly objectPrefix: string;
178
+ ```
179
+
180
+ - *Type:* string
181
+
182
+ ---
183
+
184
+ ### CloudFrontAccessLogRelocaterProps <a name="CloudFrontAccessLogRelocaterProps" id="@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps"></a>
185
+
186
+ #### Initializer <a name="Initializer" id="@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps.Initializer"></a>
187
+
188
+ ```typescript
189
+ import { CloudFrontAccessLogRelocaterProps } from '@gammarers/aws-cloudfront-access-log-relocater'
190
+
191
+ const cloudFrontAccessLogRelocaterProps: CloudFrontAccessLogRelocaterProps = { ... }
192
+ ```
193
+
194
+ #### Properties <a name="Properties" id="Properties"></a>
195
+
196
+ | **Name** | **Type** | **Description** |
197
+ | --- | --- | --- |
198
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps.property.accessLogDestination">accessLogDestination</a></code> | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination">AccessLogDestination</a></code> | *No description.* |
199
+ | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps.property.accessLogSource">accessLogSource</a></code> | <code><a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource">AccessLogSource</a></code> | *No description.* |
200
+
201
+ ---
202
+
203
+ ##### `accessLogDestination`<sup>Required</sup> <a name="accessLogDestination" id="@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps.property.accessLogDestination"></a>
204
+
205
+ ```typescript
206
+ public readonly accessLogDestination: AccessLogDestination;
207
+ ```
208
+
209
+ - *Type:* <a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogDestination">AccessLogDestination</a>
210
+
211
+ ---
212
+
213
+ ##### `accessLogSource`<sup>Required</sup> <a name="accessLogSource" id="@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocaterProps.property.accessLogSource"></a>
214
+
215
+ ```typescript
216
+ public readonly accessLogSource: AccessLogSource;
217
+ ```
218
+
219
+ - *Type:* <a href="#@gammarers/aws-cloudfront-access-log-relocater.AccessLogSource">AccessLogSource</a>
220
+
221
+ ---
97
222
 
98
223
 
99
224
 
package/lib/index.d.ts CHANGED
@@ -1,4 +1,17 @@
1
+ import * as s3 from 'aws-cdk-lib/aws-s3';
1
2
  import { Construct } from 'constructs';
3
+ export interface AccessLogSource {
4
+ readonly bucket: s3.IBucket;
5
+ readonly objectPrefix: string;
6
+ }
7
+ export interface AccessLogDestination {
8
+ readonly bucket: s3.IBucket;
9
+ readonly objectPrefix: string;
10
+ }
11
+ export interface CloudFrontAccessLogRelocaterProps {
12
+ readonly accessLogSource: AccessLogSource;
13
+ readonly accessLogDestination: AccessLogDestination;
14
+ }
2
15
  export declare class CloudFrontAccessLogRelocater extends Construct {
3
- constructor(scope: Construct, id: string);
16
+ constructor(scope: Construct, id: string, props: CloudFrontAccessLogRelocaterProps);
4
17
  }
package/lib/index.js CHANGED
@@ -3,13 +3,58 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.CloudFrontAccessLogRelocater = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const events = require("aws-cdk-lib/aws-events");
7
+ const targets = require("aws-cdk-lib/aws-events-targets");
6
8
  const constructs_1 = require("constructs");
9
+ const relocate_state_machine_1 = require("./resources/relocate-state-machine");
7
10
  class CloudFrontAccessLogRelocater extends constructs_1.Construct {
8
- constructor(scope, id) {
11
+ constructor(scope, id, props) {
9
12
  super(scope, id);
13
+ // 👇 relocate state machine(bukect object copy & delete)
14
+ const machine = new relocate_state_machine_1.RelocatorStateMachine(this, 'RelocatorStateMachine', {
15
+ accessLogSource: props.accessLogSource,
16
+ accessLogDestination: props.accessLogDestination,
17
+ });
18
+ // 👇 access log created event catch rule
19
+ new events.Rule(this, 'EventRule', {
20
+ // ruleName: `hac-cloudfront-log-output-${props.random}-event-rule`,
21
+ description: 'event rule.',
22
+ eventPattern: {
23
+ source: ['aws.s3'],
24
+ detailType: ['Object Created'],
25
+ detail: {
26
+ bucket: {
27
+ name: [props.accessLogSource.bucket.bucketName],
28
+ },
29
+ object: {
30
+ key: [
31
+ {
32
+ wildcard: `${props.accessLogSource.objectPrefix}/*.gz`,
33
+ },
34
+ ],
35
+ },
36
+ },
37
+ },
38
+ targets: [
39
+ new targets.SfnStateMachine(machine, {
40
+ input: events.RuleTargetInput.fromObject({
41
+ event: events.EventField.fromPath('$'),
42
+ params: {
43
+ accessLogDestination: {
44
+ bucketName: props.accessLogDestination.bucket.bucketName,
45
+ objectPrifix: props.accessLogDestination.objectPrefix,
46
+ },
47
+ },
48
+ }),
49
+ }),
50
+ ],
51
+ });
52
+ // input: events.RuleTargetInput.fromObject({
53
+ // event: events.RuleTargetInput.fromEventPath('$'),
54
+ // customKey: 'customValue',
10
55
  }
11
56
  }
12
57
  exports.CloudFrontAccessLogRelocater = CloudFrontAccessLogRelocater;
13
58
  _a = JSII_RTTI_SYMBOL_1;
14
- CloudFrontAccessLogRelocater[_a] = { fqn: "@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater", version: "0.0.2" };
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFFdkMsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUN6RCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLENBQUM7O0FBSEgsb0VBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGNsYXNzIENsb3VkRnJvbnRBY2Nlc3NMb2dSZWxvY2F0ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgfVxufSJdfQ==
59
+ CloudFrontAccessLogRelocater[_a] = { fqn: "@gammarers/aws-cloudfront-access-log-relocater.CloudFrontAccessLogRelocater", version: "0.1.0" };
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpREFBaUQ7QUFDakQsMERBQTBEO0FBRTFELDJDQUF1QztBQUN2QywrRUFBMkU7QUF5QjNFLE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFDekQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QztRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLHlEQUF5RDtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLDhDQUFxQixDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRTtZQUN2RSxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtTQUNqRCxDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDakMsb0VBQW9FO1lBQ3BFLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xCLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUM5QixNQUFNLEVBQUU7b0JBQ04sTUFBTSxFQUFFO3dCQUNOLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztxQkFDaEQ7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLEdBQUcsRUFBRTs0QkFDSDtnQ0FDRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVksT0FBTzs2QkFDdkQ7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO29CQUNuQyxLQUFLLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ3RDLE1BQU0sRUFBRTs0QkFDTixvQkFBb0IsRUFBRTtnQ0FDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVTtnQ0FDeEQsWUFBWSxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZOzZCQUN0RDt5QkFDRjtxQkFDRixDQUFDO2lCQUNILENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUNILCtDQUErQztRQUMvQyxvREFBb0Q7UUFDcEQsNEJBQTRCO0lBQzlCLENBQUM7O0FBL0NILG9FQWdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJlbG9jYXRvclN0YXRlTWFjaGluZSB9IGZyb20gJy4vcmVzb3VyY2VzL3JlbG9jYXRlLXN0YXRlLW1hY2hpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0xvZ1NvdXJjZSB7XG4gIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcbiAgcmVhZG9ubHkgb2JqZWN0UHJlZml4OiBzdHJpbmc7XG59XG5cbi8vIGV4cG9ydCBlbnVtIFBhcnRpdGlvbmluZ0Zvcm1hdFR5cGUge1xuLy8gICAvKiogeXl5eS9tbS9kZCAqL1xuLy8gICBISUVSQVJDSElDQUxfREFURV9QQVJUSVRJT05JTkdfRk9STUFULCBEZWZhdWx0XG4vLyAgIC8qKiB5PXl5eXkvbT1tbS9kPWRkICovXG4vLyAgIEtFWV9WQUxVRV9EQVRFX1BBUlRJVElPTklOR19GT1JNQVQsIEhpdmUgVHlwZVxuLy8gfVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uIHtcbiAgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICByZWFkb25seSBvYmplY3RQcmVmaXg6IHN0cmluZztcbiAgLy8gcmVhZG9ubHkgcGFydGl0aW9uaW5nRm9ybWF0VHlwZTogUGFydGl0aW9uaW5nRm9ybWF0VHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250QWNjZXNzTG9nUmVsb2NhdGVyUHJvcHMge1xuICByZWFkb25seSBhY2Nlc3NMb2dTb3VyY2U6IEFjY2Vzc0xvZ1NvdXJjZTtcbiAgcmVhZG9ubHkgYWNjZXNzTG9nRGVzdGluYXRpb246IEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udEFjY2Vzc0xvZ1JlbG9jYXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250QWNjZXNzTG9nUmVsb2NhdGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8g8J+RhyByZWxvY2F0ZSBzdGF0ZSBtYWNoaW5lKGJ1a2VjdCBvYmplY3QgY29weSAmIGRlbGV0ZSlcbiAgICBjb25zdCBtYWNoaW5lID0gbmV3IFJlbG9jYXRvclN0YXRlTWFjaGluZSh0aGlzLCAnUmVsb2NhdG9yU3RhdGVNYWNoaW5lJywge1xuICAgICAgYWNjZXNzTG9nU291cmNlOiBwcm9wcy5hY2Nlc3NMb2dTb3VyY2UsXG4gICAgICBhY2Nlc3NMb2dEZXN0aW5hdGlvbjogcHJvcHMuYWNjZXNzTG9nRGVzdGluYXRpb24sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIGFjY2VzcyBsb2cgY3JlYXRlZCBldmVudCBjYXRjaCBydWxlXG4gICAgbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdFdmVudFJ1bGUnLCB7XG4gICAgICAvLyBydWxlTmFtZTogYGhhYy1jbG91ZGZyb250LWxvZy1vdXRwdXQtJHtwcm9wcy5yYW5kb219LWV2ZW50LXJ1bGVgLFxuICAgICAgZGVzY3JpcHRpb246ICdldmVudCBydWxlLicsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5zMyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ09iamVjdCBDcmVhdGVkJ10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGJ1Y2tldDoge1xuICAgICAgICAgICAgbmFtZTogW3Byb3BzLmFjY2Vzc0xvZ1NvdXJjZS5idWNrZXQuYnVja2V0TmFtZV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2lsZGNhcmQ6IGAke3Byb3BzLmFjY2Vzc0xvZ1NvdXJjZS5vYmplY3RQcmVmaXh9LyouZ3pgLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuU2ZuU3RhdGVNYWNoaW5lKG1hY2hpbmUsIHtcbiAgICAgICAgICBpbnB1dDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJCcpLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIGFjY2Vzc0xvZ0Rlc3RpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgYnVja2V0TmFtZTogcHJvcHMuYWNjZXNzTG9nRGVzdGluYXRpb24uYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICAgICAgb2JqZWN0UHJpZml4OiBwcm9wcy5hY2Nlc3NMb2dEZXN0aW5hdGlvbi5vYmplY3RQcmVmaXgsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgLy8gICBpbnB1dDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAvLyBldmVudDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tRXZlbnRQYXRoKCckJyksXG4gICAgLy8gY3VzdG9tS2V5OiAnY3VzdG9tVmFsdWUnLFxuICB9XG59Il19
@@ -0,0 +1,18 @@
1
+ import * as s3 from 'aws-cdk-lib/aws-s3';
2
+ import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
3
+ import { Construct } from 'constructs';
4
+ export interface AccessLogSource {
5
+ readonly bucket: s3.IBucket;
6
+ readonly objectPrefix: string;
7
+ }
8
+ export interface AccessLogDestination {
9
+ readonly bucket: s3.IBucket;
10
+ readonly objectPrefix: string;
11
+ }
12
+ export interface RelocatorStateMachineProps extends sfn.StateMachineProps {
13
+ readonly accessLogSource: AccessLogSource;
14
+ readonly accessLogDestination: AccessLogDestination;
15
+ }
16
+ export declare class RelocatorStateMachine extends sfn.StateMachine {
17
+ constructor(scope: Construct, id: string, props: RelocatorStateMachineProps);
18
+ }
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelocatorStateMachine = void 0;
4
+ // import { Stack } from 'aws-cdk-lib';
5
+ // import * as sns from 'aws-cdk-lib/aws-sns';
6
+ const iam = require("aws-cdk-lib/aws-iam");
7
+ const sfn = require("aws-cdk-lib/aws-stepfunctions");
8
+ const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
9
+ class RelocatorStateMachine extends sfn.StateMachine {
10
+ constructor(scope, id, props) {
11
+ super(scope, id, {
12
+ ...props,
13
+ role: new iam.Role(scope, 'StateMachineRole', {
14
+ // roleName: `StepFunctionsExecutionRoleForS3Copy-${props.envName}`,
15
+ // description: "An IAM role for Step Functions to access AWS services",
16
+ assumedBy: new iam.ServicePrincipal('states.amazonaws.com'),
17
+ inlinePolicies: {
18
+ 'copy-object-policy': new iam.PolicyDocument({
19
+ statements: [
20
+ new iam.PolicyStatement({
21
+ effect: iam.Effect.ALLOW,
22
+ actions: [
23
+ 's3:GetObject',
24
+ 's3:ListBucket',
25
+ ],
26
+ resources: [
27
+ `${props.accessLogSource.bucket.bucketArn}/*`,
28
+ ],
29
+ }),
30
+ new iam.PolicyStatement({
31
+ effect: iam.Effect.ALLOW,
32
+ actions: [
33
+ 's3:PutObject',
34
+ 's3:ListBucket',
35
+ ],
36
+ resources: [
37
+ `${props.accessLogDestination.bucket.bucketArn}/*`,
38
+ ],
39
+ }),
40
+ ],
41
+ }),
42
+ 'delete-object-policy': new iam.PolicyDocument({
43
+ statements: [
44
+ new iam.PolicyStatement({
45
+ effect: iam.Effect.ALLOW,
46
+ actions: [
47
+ 's3:DeleteObject',
48
+ 's3:ListBucket',
49
+ ],
50
+ resources: [
51
+ `${props.accessLogSource.bucket.bucketArn}/*`,
52
+ ],
53
+ }),
54
+ ],
55
+ }),
56
+ },
57
+ }),
58
+ definitionBody: (() => {
59
+ // Get Source Bucket & objectKey
60
+ const getSourceBucketObject = new sfn.Pass(scope, 'GetSourceBucketObject', {
61
+ comment: 'Get Source Bucket Object Key with Split Object Key',
62
+ resultPath: '$.Result.Source',
63
+ parameters: {
64
+ BucketName: sfn.JsonPath.stringAt('$.event.detail.bucket.name'),
65
+ ObjectKey: sfn.JsonPath.stringAt('$.event.detail.object.key'),
66
+ SplitObjectLayers: sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.event.detail.object.key'), '/'),
67
+ },
68
+ });
69
+ const getSourceSplitObjectsLength = new sfn.Pass(scope, 'GetSourceSplitObjectsLength', {
70
+ resultPath: '$.Result.Source.SplitObjectLayer',
71
+ parameters: {
72
+ Length: sfn.JsonPath.arrayLength(sfn.JsonPath.stringAt('$.Result.Source.SplitObjectLayers')),
73
+ },
74
+ });
75
+ getSourceBucketObject.next(getSourceSplitObjectsLength);
76
+ const getSplitObjectFilenameIndex = new sfn.Pass(scope, 'GetSplitObjectFilenameIndex', {
77
+ resultPath: '$.Result.Source.Target.SplitObjectLayer',
78
+ parameters: {
79
+ Index: sfn.JsonPath.mathAdd(sfn.JsonPath.numberAt('$.Result.Source.SplitObjectLayer.Length'), -1),
80
+ },
81
+ });
82
+ getSourceSplitObjectsLength.next(getSplitObjectFilenameIndex);
83
+ const getSourceFilename = new sfn.Pass(scope, 'GetSourceFilename', {
84
+ resultPath: '$.Result.Source.Target.File',
85
+ parameters: {
86
+ Filename: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringAt('$.Result.Source.SplitObjectLayers'), sfn.JsonPath.numberAt('$.Result.Source.Target.SplitObjectLayer.Index')),
87
+ },
88
+ });
89
+ getSplitObjectFilenameIndex.next(getSourceFilename);
90
+ const getLogFilenameAttribute = new sfn.Pass(scope, 'GetLogFilenameAttribute', {
91
+ resultPath: '$.Result.Source.Target.File.Attribute',
92
+ parameters: {
93
+ DateHour: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.Result.Source.Target.File.Filename'), '.'), 1),
94
+ DistributionId: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.Result.Source.Target.File.Filename'), '.'), 0),
95
+ },
96
+ });
97
+ getSourceFilename.next(getLogFilenameAttribute);
98
+ const getDateFromFilenameAttribute = new sfn.Pass(scope, 'GetDateFromFilenameAttribute', {
99
+ resultPath: '$.Result.Date',
100
+ parameters: {
101
+ Year: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.Result.Source.Target.File.Attribute.DateHour'), '-'), 0),
102
+ Month: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.Result.Source.Target.File.Attribute.DateHour'), '-'), 1),
103
+ Day: sfn.JsonPath.arrayGetItem(sfn.JsonPath.stringSplit(sfn.JsonPath.stringAt('$.Result.Source.Target.File.Attribute.DateHour'), '-'), 2),
104
+ },
105
+ });
106
+ getLogFilenameAttribute.next(getDateFromFilenameAttribute);
107
+ // object cooy
108
+ const copyObjectTask = new tasks.CallAwsService(scope, 'CopyObjectTask', {
109
+ iamResources: [`${props.accessLogSource.bucket.bucketArn}/*`],
110
+ service: 's3',
111
+ action: 'copyObject',
112
+ parameters: {
113
+ CopySource: sfn.JsonPath.format('{}/{}', sfn.JsonPath.stringAt('$.Result.Source.BucketName'), sfn.JsonPath.stringAt('$.Result.Source.ObjectKey')),
114
+ Bucket: props.accessLogDestination.bucket.bucketName,
115
+ Key: sfn.JsonPath.format(`${props.accessLogDestination.objectPrefix}/{}/{}/{}/{}/{}`, sfn.JsonPath.stringAt('$.Result.Source.Target.File.Attribute.DistributionId'), sfn.JsonPath.stringAt('$.Result.Date.Year'), sfn.JsonPath.stringAt('$.Result.Date.Month'), sfn.JsonPath.stringAt('$.Result.Date.Day'), sfn.JsonPath.stringAt('$.Result.Source.Target.File.Filename')),
116
+ },
117
+ resultPath: '$.Result.CopyObject',
118
+ });
119
+ getDateFromFilenameAttribute.next(copyObjectTask);
120
+ // object delete
121
+ const deleteObjectTask = new tasks.CallAwsService(scope, 'DeleteObjectTask', {
122
+ iamResources: [`${props.accessLogSource.bucket.bucketArn}/*`],
123
+ service: 's3',
124
+ action: 'deleteObject',
125
+ parameters: {
126
+ Bucket: sfn.JsonPath.stringAt('$.Result.Source.BucketName'),
127
+ Key: sfn.JsonPath.stringAt('$.Result.Source.ObjectKey'),
128
+ },
129
+ resultPath: '$.Result.CopyObject',
130
+ });
131
+ copyObjectTask.next(deleteObjectTask);
132
+ const succeed = new sfn.Succeed(scope, 'Succeed');
133
+ deleteObjectTask.next(succeed);
134
+ return sfn.DefinitionBody.fromChainable(getSourceBucketObject);
135
+ })(),
136
+ });
137
+ }
138
+ }
139
+ exports.RelocatorStateMachine = RelocatorStateMachine;
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsb2NhdGUtc3RhdGUtbWFjaGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvdXJjZXMvcmVsb2NhdGUtc3RhdGUtbWFjaGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBdUM7QUFDdkMsOENBQThDO0FBQzlDLDJDQUEyQztBQUUzQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBbUI3RCxNQUFhLHFCQUFzQixTQUFRLEdBQUcsQ0FBQyxZQUFZO0lBQ3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtnQkFDNUMsb0VBQW9FO2dCQUNwRSx3RUFBd0U7Z0JBQ3hFLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDM0QsY0FBYyxFQUFFO29CQUNkLG9CQUFvQixFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQzt3QkFDM0MsVUFBVSxFQUFFOzRCQUNWLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztnQ0FDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztnQ0FDeEIsT0FBTyxFQUFFO29DQUNQLGNBQWM7b0NBQ2QsZUFBZTtpQ0FDaEI7Z0NBQ0QsU0FBUyxFQUFFO29DQUNULEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJO2lDQUM5Qzs2QkFDRixDQUFDOzRCQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztnQ0FDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztnQ0FDeEIsT0FBTyxFQUFFO29DQUNQLGNBQWM7b0NBQ2QsZUFBZTtpQ0FDaEI7Z0NBQ0QsU0FBUyxF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LDRCQUE0QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFbEQsZ0JBQWdCO2dCQUNoQixNQUFNLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7b0JBQzNFLFlBQVksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUM7b0JBQzdELE9BQU8sRUFBRSxJQUFJO29CQUNiLE1BQU0sRUFBRSxjQUFjO29CQUN0QixVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDO3dCQUMzRCxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUM7cUJBQ3hEO29CQUNELFVBQVUsRUFBRSxxQkFBcUI7aUJBQ2xDLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXRDLE1BQU0sT0FBTyxHQUFnQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUUvRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRS9CLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNqRSxDQUFDLENBQUMsRUFBRTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXBKRCxzREFvSkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbi8vIGltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzTG9nU291cmNlIHtcbiAgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICByZWFkb25seSBvYmplY3RQcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NMb2dEZXN0aW5hdGlvbiB7XG4gIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcbiAgcmVhZG9ubHkgb2JqZWN0UHJlZml4OiBzdHJpbmc7XG4gIC8vIHJlYWRvbmx5IHBhcnRpdGlvbmluZ0Zvcm1hdFR5cGU6IFBhcnRpdGlvbmluZ0Zvcm1hdFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVsb2NhdG9yU3RhdGVNYWNoaW5lUHJvcHMgZXh0ZW5kcyBzZm4uU3RhdGVNYWNoaW5lUHJvcHMge1xuICByZWFkb25seSBhY2Nlc3NMb2dTb3VyY2U6IEFjY2Vzc0xvZ1NvdXJjZTtcbiAgcmVhZG9ubHkgYWNjZXNzTG9nRGVzdGluYXRpb246IEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgUmVsb2NhdG9yU3RhdGVNYWNoaW5lIGV4dGVuZHMgc2ZuLlN0YXRlTWFjaGluZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZWxvY2F0b3JTdGF0ZU1hY2hpbmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByb2xlOiBuZXcgaWFtLlJvbGUoc2NvcGUsICdTdGF0ZU1hY2hpbmVSb2xlJywge1xuICAgICAgICAvLyByb2xlTmFtZTogYFN0ZXBGdW5jdGlvbnNFeGVjdXRpb25Sb2xlRm9yUzNDb3B5LSR7cHJvcHMuZW52TmFtZX1gLFxuICAgICAgICAvLyBkZXNjcmlwdGlvbjogXCJBbiBJQU0gcm9sZSBmb3IgU3RlcCBGdW5jdGlvbnMgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1wiLFxuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc3RhdGVzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICAnY29weS1vYmplY3QtcG9saWN5JzogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgJ3MzOkdldE9iamVjdCcsXG4gICAgICAgICAgICAgICAgICAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICAgIGAke3Byb3BzLmFjY2Vzc0xvZ1NvdXJjZS5idWNrZXQuYnVja2V0QXJufS8qYCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICdzMzpMaXN0QnVja2V0JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgICAgYCR7cHJvcHMuYWNjZXNzTG9nRGVzdGluYXRpb24uYnVja2V0LmJ1Y2tldEFybn0vKmAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgICdkZWxldGUtb2JqZWN0LXBvbGljeSc6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICdzMzpEZWxldGVPYmplY3QnLFxuICAgICAgICAgICAgICAgICAgJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICBgJHtwcm9wcy5hY2Nlc3NMb2dTb3VyY2UuYnVja2V0LmJ1Y2tldEFybn0vKmAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBkZWZpbml0aW9uQm9keTogKCgpID0+IHtcblxuICAgICAgICAvLyBHZXQgU291cmNlIEJ1Y2tldCAmIG9iamVjdEtleVxuICAgICAgICBjb25zdCBnZXRTb3VyY2VCdWNrZXRPYmplY3QgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdHZXRTb3VyY2VCdWNrZXRPYmplY3QnLCB7XG4gICAgICAgICAgY29tbWVudDogJ0dldCBTb3VyY2UgQnVja2V0IE9iamVjdCBLZXkgd2l0aCBTcGxpdCBPYmplY3QgS2V5JyxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuU291cmNlJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBCdWNrZXROYW1lOiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLmJ1Y2tldC5uYW1lJyksXG4gICAgICAgICAgICBPYmplY3RLZXk6IHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5ldmVudC5kZXRhaWwub2JqZWN0LmtleScpLFxuICAgICAgICAgICAgU3BsaXRPYmplY3RMYXllcnM6IHNmbi5Kc29uUGF0aC5zdHJpbmdTcGxpdChzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuZXZlbnQuZGV0YWlsLm9iamVjdC5rZXknKSwgJy8nKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZ2V0U291cmNlU3BsaXRPYmplY3RzTGVuZ3RoID0gbmV3IHNmbi5QYXNzKHNjb3BlLCAnR2V0U291cmNlU3BsaXRPYmplY3RzTGVuZ3RoJywge1xuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5Tb3VyY2UuU3BsaXRPYmplY3RMYXllcicsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgTGVuZ3RoOiBzZm4uSnNvblBhdGguYXJyYXlMZW5ndGgoc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5Tb3VyY2UuU3BsaXRPYmplY3RMYXllcnMnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGdldFNvdXJjZUJ1Y2tldE9iamVjdC5uZXh0KGdldFNvdXJjZVNwbGl0T2JqZWN0c0xlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3BsaXRPYmplY3RGaWxlbmFtZUluZGV4ID0gbmV3IHNmbi5QYXNzKHNjb3BlLCAnR2V0U3BsaXRPYmplY3RGaWxlbmFtZUluZGV4Jywge1xuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5Tb3VyY2UuVGFyZ2V0LlNwbGl0T2JqZWN0TGF5ZXInLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEluZGV4OiBzZm4uSnNvblBhdGgubWF0aEFkZChzZm4uSnNvblBhdGgubnVtYmVyQXQoJyQuUmVzdWx0LlNvdXJjZS5TcGxpdE9iamVjdExheWVyLkxlbmd0aCcpLCAtMSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGdldFNvdXJjZVNwbGl0T2JqZWN0c0xlbmd0aC5uZXh0KGdldFNwbGl0T2JqZWN0RmlsZW5hbWVJbmRleCk7XG5cbiAgICAgICAgY29uc3QgZ2V0U291cmNlRmlsZW5hbWUgPSBuZXcgc2ZuLlBhc3Moc2NvcGUsICdHZXRTb3VyY2VGaWxlbmFtZScsIHtcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5SZXN1bHQuU291cmNlLlRhcmdldC5GaWxlJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBGaWxlbmFtZTogc2ZuLkpzb25QYXRoLmFycmF5R2V0SXRlbShzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlNvdXJjZS5TcGxpdE9iamVjdExheWVycycpLCBzZm4uSnNvblBhdGgubnVtYmVyQXQoJyQuUmVzdWx0LlNvdXJjZS5UYXJnZXQuU3BsaXRPYmplY3RMYXllci5JbmRleCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZ2V0U3BsaXRPYmplY3RGaWxlbmFtZUluZGV4Lm5leHQoZ2V0U291cmNlRmlsZW5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGdldExvZ0ZpbGVuYW1lQXR0cmlidXRlID0gbmV3IHNmbi5QYXNzKHNjb3BlLCAnR2V0TG9nRmlsZW5hbWVBdHRyaWJ1dGUnLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LlNvdXJjZS5UYXJnZXQuRmlsZS5BdHRyaWJ1dGUnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIERhdGVIb3VyOiBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdTcGxpdChzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlNvdXJjZS5UYXJnZXQuRmlsZS5GaWxlbmFtZScpLCAnLicpLCAxKSxcbiAgICAgICAgICAgIERpc3RyaWJ1dGlvbklkOiBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdTcGxpdChzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlNvdXJjZS5UYXJnZXQuRmlsZS5GaWxlbmFtZScpLCAnLicpLCAwKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZ2V0U291cmNlRmlsZW5hbWUubmV4dChnZXRMb2dGaWxlbmFtZUF0dHJpYnV0ZSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RGF0ZUZyb21GaWxlbmFtZUF0dHJpYnV0ZSA9IG5ldyBzZm4uUGFzcyhzY29wZSwgJ0dldERhdGVGcm9tRmlsZW5hbWVBdHRyaWJ1dGUnLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LkRhdGUnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIFllYXI6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ1NwbGl0KHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQuU291cmNlLlRhcmdldC5GaWxlLkF0dHJpYnV0ZS5EYXRlSG91cicpLCAnLScpLCAwKSxcbiAgICAgICAgICAgIE1vbnRoOiBzZm4uSnNvblBhdGguYXJyYXlHZXRJdGVtKHNmbi5Kc29uUGF0aC5zdHJpbmdTcGxpdChzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlNvdXJjZS5UYXJnZXQuRmlsZS5BdHRyaWJ1dGUuRGF0ZUhvdXInKSwgJy0nKSwgMSksXG4gICAgICAgICAgICBEYXk6IHNmbi5Kc29uUGF0aC5hcnJheUdldEl0ZW0oc2ZuLkpzb25QYXRoLnN0cmluZ1NwbGl0KHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQuU291cmNlLlRhcmdldC5GaWxlLkF0dHJpYnV0ZS5EYXRlSG91cicpLCAnLScpLCAyKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZ2V0TG9nRmlsZW5hbWVBdHRyaWJ1dGUubmV4dChnZXREYXRlRnJvbUZpbGVuYW1lQXR0cmlidXRlKTtcblxuICAgICAgICAvLyBvYmplY3QgY29veVxuICAgICAgICBjb25zdCBjb3B5T2JqZWN0VGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZShzY29wZSwgJ0NvcHlPYmplY3RUYXNrJywge1xuICAgICAgICAgIGlhbVJlc291cmNlczogW2Ake3Byb3BzLmFjY2Vzc0xvZ1NvdXJjZS5idWNrZXQuYnVja2V0QXJufS8qYF0sXG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICBhY3Rpb246ICdjb3B5T2JqZWN0JyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBDb3B5U291cmNlOiBzZm4uSnNvblBhdGguZm9ybWF0KCd7fS97fScsXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQuU291cmNlLkJ1Y2tldE5hbWUnKSxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5Tb3VyY2UuT2JqZWN0S2V5JyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5hY2Nlc3NMb2dEZXN0aW5hdGlvbi5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIEtleTogc2ZuLkpzb25QYXRoLmZvcm1hdChgJHtwcm9wcy5hY2Nlc3NMb2dEZXN0aW5hdGlvbi5vYmplY3RQcmVmaXh9L3t9L3t9L3t9L3t9L3t9YCxcbiAgICAgICAgICAgICAgc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5Tb3VyY2UuVGFyZ2V0LkZpbGUuQXR0cmlidXRlLkRpc3RyaWJ1dGlvbklkJyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQuRGF0ZS5ZZWFyJyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQuRGF0ZS5Nb250aCcpLFxuICAgICAgICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LkRhdGUuRGF5JyksXG4gICAgICAgICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5SZXN1bHQuU291cmNlLlRhcmdldC5GaWxlLkZpbGVuYW1lJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQuUmVzdWx0LkNvcHlPYmplY3QnLFxuICAgICAgICB9KTtcbiAgICAgICAgZ2V0RGF0ZUZyb21GaWxlbmFtZUF0dHJpYnV0ZS5uZXh0KGNvcHlPYmplY3RUYXNrKTtcblxuICAgICAgICAvLyBvYmplY3QgZGVsZXRlXG4gICAgICAgIGNvbnN0IGRlbGV0ZU9iamVjdFRhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsICdEZWxldGVPYmplY3RUYXNrJywge1xuICAgICAgICAgIGlhbVJlc291cmNlczogW2Ake3Byb3BzLmFjY2Vzc0xvZ1NvdXJjZS5idWNrZXQuYnVja2V0QXJufS8qYF0sXG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICBhY3Rpb246ICdkZWxldGVPYmplY3QnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLlJlc3VsdC5Tb3VyY2UuQnVja2V0TmFtZScpLFxuICAgICAgICAgICAgS2V5OiBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuUmVzdWx0LlNvdXJjZS5PYmplY3RLZXknKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLlJlc3VsdC5Db3B5T2JqZWN0JyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvcHlPYmplY3RUYXNrLm5leHQoZGVsZXRlT2JqZWN0VGFzayk7XG5cbiAgICAgICAgY29uc3Qgc3VjY2VlZDogc2ZuLlN1Y2NlZWQgPSBuZXcgc2ZuLlN1Y2NlZWQoc2NvcGUsICdTdWNjZWVkJyk7XG5cbiAgICAgICAgZGVsZXRlT2JqZWN0VGFzay5uZXh0KHN1Y2NlZWQpO1xuXG4gICAgICAgIHJldHVybiBzZm4uRGVmaW5pdGlvbkJvZHkuZnJvbUNoYWluYWJsZShnZXRTb3VyY2VCdWNrZXRPYmplY3QpO1xuICAgICAgfSkoKSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
package/package.json CHANGED
@@ -72,7 +72,7 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "version": "0.0.2",
75
+ "version": "0.1.0",
76
76
  "jest": {
77
77
  "coverageProvider": "v8",
78
78
  "testMatch": [