@pwrdrvr/microapps-cdk 0.2.7 → 0.2.10
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/.gitattributes +18 -18
- package/.jsii +193 -30
- package/API.md +0 -0
- package/README.md +1 -1
- package/changelog.md +2 -0
- package/lib/MicroApps.d.ts +62 -109
- package/lib/MicroApps.d.ts.map +1 -0
- package/lib/MicroApps.js +5 -28
- package/lib/MicroAppsAPIGwy.d.ts +20 -60
- package/lib/MicroAppsAPIGwy.d.ts.map +1 -0
- package/lib/MicroAppsAPIGwy.js +9 -24
- package/lib/MicroAppsCF.d.ts +45 -105
- package/lib/MicroAppsCF.d.ts.map +1 -0
- package/lib/MicroAppsCF.js +9 -16
- package/lib/MicroAppsS3.d.ts +17 -70
- package/lib/MicroAppsS3.d.ts.map +1 -0
- package/lib/MicroAppsS3.js +3 -33
- package/lib/MicroAppsSvcs.d.ts +36 -86
- package/lib/MicroAppsSvcs.d.ts.map +1 -0
- package/lib/MicroAppsSvcs.js +12 -81
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/microapps-deployer/index.js +173 -113
- package/lib/microapps-deployer/index.js.map +3 -3
- package/lib/microapps-router/index.js +50 -66
- package/lib/microapps-router/index.js.map +3 -3
- package/lib/microapps-router/templates/appFrame.html +0 -0
- package/lib/utils/ReverseDomain.d.ts +1 -0
- package/lib/utils/ReverseDomain.d.ts.map +1 -0
- package/package.json +27 -24
- package/releasetag.txt +1 -0
- package/version.txt +1 -0
- package/patches/@aws-cdk+aws-apigatewayv2-alpha+2.8.0-alpha.0.patch +0 -39
package/lib/MicroAppsS3.d.ts
CHANGED
|
@@ -4,142 +4,89 @@ import * as cforigins from 'aws-cdk-lib/aws-cloudfront-origins';
|
|
|
4
4
|
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
5
5
|
import { Construct } from 'constructs';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @experimental
|
|
7
|
+
* Represents a MicroApps S3
|
|
10
8
|
*/
|
|
11
9
|
export interface IMicroAppsS3 {
|
|
12
10
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* @experimental
|
|
11
|
+
* S3 bucket for deployed applications
|
|
16
12
|
*/
|
|
17
13
|
readonly bucketApps: s3.IBucket;
|
|
18
14
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* @experimental
|
|
15
|
+
* CloudFront Origin Access Identity for the deployed applications bucket
|
|
22
16
|
*/
|
|
23
17
|
readonly bucketAppsOAI: cf.OriginAccessIdentity;
|
|
24
18
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* @experimental
|
|
19
|
+
* CloudFront Origin for the deployed applications bucket
|
|
28
20
|
*/
|
|
29
21
|
readonly bucketAppsOrigin: cforigins.S3Origin;
|
|
30
22
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* @experimental
|
|
23
|
+
* S3 bucket for staged applications (prior to deploy)
|
|
34
24
|
*/
|
|
35
25
|
readonly bucketAppsStaging: s3.IBucket;
|
|
36
26
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @experimental
|
|
27
|
+
* S3 bucket for CloudFront logs
|
|
40
28
|
*/
|
|
41
29
|
readonly bucketLogs: s3.IBucket;
|
|
42
30
|
}
|
|
43
31
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* @experimental
|
|
32
|
+
* Properties to initialize an instance of `MicroAppsS3`.
|
|
47
33
|
*/
|
|
48
34
|
export interface MicroAppsS3Props {
|
|
49
35
|
/**
|
|
50
|
-
*
|
|
36
|
+
* RemovalPolicy override for child resources
|
|
51
37
|
*
|
|
52
38
|
* Note: if set to DESTROY the S3 buckets will have `autoDeleteObjects` set to `true`
|
|
53
39
|
*
|
|
54
40
|
* @default - per resource default
|
|
55
|
-
* @experimental
|
|
56
41
|
*/
|
|
57
42
|
readonly removalPolicy?: RemovalPolicy;
|
|
58
43
|
/**
|
|
59
|
-
*
|
|
44
|
+
* S3 deployed apps bucket name
|
|
60
45
|
*
|
|
61
46
|
* @default auto-assigned
|
|
62
|
-
* @experimental
|
|
63
47
|
*/
|
|
64
48
|
readonly bucketAppsName?: string;
|
|
65
49
|
/**
|
|
66
|
-
*
|
|
50
|
+
* S3 staging apps bucket name
|
|
67
51
|
*
|
|
68
52
|
* @default auto-assigned
|
|
69
|
-
* @experimental
|
|
70
53
|
*/
|
|
71
54
|
readonly bucketAppsStagingName?: string;
|
|
72
55
|
/**
|
|
73
|
-
*
|
|
56
|
+
* S3 logs bucket name
|
|
74
57
|
*
|
|
75
58
|
* @default auto-assigned
|
|
76
|
-
* @experimental
|
|
77
59
|
*/
|
|
78
60
|
readonly bucketLogsName?: string;
|
|
79
61
|
/**
|
|
80
|
-
*
|
|
62
|
+
* Optional asset name root
|
|
81
63
|
*
|
|
64
|
+
* @example microapps
|
|
82
65
|
* @default - resource names auto assigned
|
|
83
|
-
* @experimental
|
|
84
|
-
* @example
|
|
85
|
-
*
|
|
86
|
-
* microapps
|
|
87
66
|
*/
|
|
88
67
|
readonly assetNameRoot?: string;
|
|
89
68
|
/**
|
|
90
|
-
*
|
|
69
|
+
* Optional asset name suffix
|
|
91
70
|
*
|
|
71
|
+
* @example -dev-pr-12
|
|
92
72
|
* @default none
|
|
93
|
-
* @experimental
|
|
94
|
-
* @example
|
|
95
|
-
*
|
|
96
|
-
* -dev-pr-12
|
|
97
73
|
*/
|
|
98
74
|
readonly assetNameSuffix?: string;
|
|
99
75
|
}
|
|
100
76
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* @experimental
|
|
77
|
+
* Create a new MicroApps S3 Bucket.
|
|
104
78
|
*/
|
|
105
79
|
export declare class MicroAppsS3 extends Construct implements IMicroAppsS3 {
|
|
106
80
|
private _bucketApps;
|
|
107
|
-
/**
|
|
108
|
-
* (experimental) S3 bucket for deployed applications.
|
|
109
|
-
*
|
|
110
|
-
* @experimental
|
|
111
|
-
*/
|
|
112
81
|
get bucketApps(): s3.IBucket;
|
|
113
82
|
private _bucketAppsOAI;
|
|
114
|
-
/**
|
|
115
|
-
* (experimental) CloudFront Origin Access Identity for the deployed applications bucket.
|
|
116
|
-
*
|
|
117
|
-
* @experimental
|
|
118
|
-
*/
|
|
119
83
|
get bucketAppsOAI(): cf.OriginAccessIdentity;
|
|
120
84
|
private _bucketAppsOrigin;
|
|
121
|
-
/**
|
|
122
|
-
* (experimental) CloudFront Origin for the deployed applications bucket.
|
|
123
|
-
*
|
|
124
|
-
* @experimental
|
|
125
|
-
*/
|
|
126
85
|
get bucketAppsOrigin(): cforigins.S3Origin;
|
|
127
86
|
private _bucketAppsStaging;
|
|
128
|
-
/**
|
|
129
|
-
* (experimental) S3 bucket for staged applications (prior to deploy).
|
|
130
|
-
*
|
|
131
|
-
* @experimental
|
|
132
|
-
*/
|
|
133
87
|
get bucketAppsStaging(): s3.IBucket;
|
|
134
88
|
private _bucketLogs;
|
|
135
|
-
/**
|
|
136
|
-
* (experimental) S3 bucket for CloudFront logs.
|
|
137
|
-
*
|
|
138
|
-
* @experimental
|
|
139
|
-
*/
|
|
140
89
|
get bucketLogs(): s3.IBucket;
|
|
141
|
-
/**
|
|
142
|
-
* @experimental
|
|
143
|
-
*/
|
|
144
90
|
constructor(scope: Construct, id: string, props?: MicroAppsS3Props);
|
|
145
91
|
}
|
|
92
|
+
//# sourceMappingURL=MicroAppsS3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicroAppsS3.d.ts","sourceRoot":"","sources":["../src/MicroAppsS3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAEhD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,SAAU,YAAW,YAAY;IAChE,OAAO,CAAC,WAAW,CAAa;IAChC,IAAW,UAAU,IAAI,EAAE,CAAC,OAAO,CAElC;IAED,OAAO,CAAC,cAAc,CAA0B;IAChD,IAAW,aAAa,IAAI,EAAE,CAAC,oBAAoB,CAElD;IAED,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,IAAW,gBAAgB,IAAI,SAAS,CAAC,QAAQ,CAEhD;IAED,OAAO,CAAC,kBAAkB,CAAa;IACvC,IAAW,iBAAiB,IAAI,EAAE,CAAC,OAAO,CAEzC;IAED,OAAO,CAAC,WAAW,CAAa;IAChC,IAAW,UAAU,IAAI,EAAE,CAAC,OAAO,CAElC;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB;CAgDnE"}
|
package/lib/MicroAppsS3.js
CHANGED
|
@@ -9,14 +9,9 @@ const cforigins = require("aws-cdk-lib/aws-cloudfront-origins");
|
|
|
9
9
|
const s3 = require("aws-cdk-lib/aws-s3");
|
|
10
10
|
const constructs_1 = require("constructs");
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* @experimental
|
|
12
|
+
* Create a new MicroApps S3 Bucket.
|
|
15
13
|
*/
|
|
16
14
|
class MicroAppsS3 extends constructs_1.Construct {
|
|
17
|
-
/**
|
|
18
|
-
* @experimental
|
|
19
|
-
*/
|
|
20
15
|
constructor(scope, id, props) {
|
|
21
16
|
super(scope, id);
|
|
22
17
|
if (props === undefined) {
|
|
@@ -58,48 +53,23 @@ class MicroAppsS3 extends constructs_1.Construct {
|
|
|
58
53
|
originAccessIdentity: this.bucketAppsOAI,
|
|
59
54
|
});
|
|
60
55
|
}
|
|
61
|
-
/**
|
|
62
|
-
* (experimental) S3 bucket for deployed applications.
|
|
63
|
-
*
|
|
64
|
-
* @experimental
|
|
65
|
-
*/
|
|
66
56
|
get bucketApps() {
|
|
67
57
|
return this._bucketApps;
|
|
68
58
|
}
|
|
69
|
-
/**
|
|
70
|
-
* (experimental) CloudFront Origin Access Identity for the deployed applications bucket.
|
|
71
|
-
*
|
|
72
|
-
* @experimental
|
|
73
|
-
*/
|
|
74
59
|
get bucketAppsOAI() {
|
|
75
60
|
return this._bucketAppsOAI;
|
|
76
61
|
}
|
|
77
|
-
/**
|
|
78
|
-
* (experimental) CloudFront Origin for the deployed applications bucket.
|
|
79
|
-
*
|
|
80
|
-
* @experimental
|
|
81
|
-
*/
|
|
82
62
|
get bucketAppsOrigin() {
|
|
83
63
|
return this._bucketAppsOrigin;
|
|
84
64
|
}
|
|
85
|
-
/**
|
|
86
|
-
* (experimental) S3 bucket for staged applications (prior to deploy).
|
|
87
|
-
*
|
|
88
|
-
* @experimental
|
|
89
|
-
*/
|
|
90
65
|
get bucketAppsStaging() {
|
|
91
66
|
return this._bucketAppsStaging;
|
|
92
67
|
}
|
|
93
|
-
/**
|
|
94
|
-
* (experimental) S3 bucket for CloudFront logs.
|
|
95
|
-
*
|
|
96
|
-
* @experimental
|
|
97
|
-
*/
|
|
98
68
|
get bucketLogs() {
|
|
99
69
|
return this._bucketLogs;
|
|
100
70
|
}
|
|
101
71
|
}
|
|
102
72
|
exports.MicroAppsS3 = MicroAppsS3;
|
|
103
73
|
_a = JSII_RTTI_SYMBOL_1;
|
|
104
|
-
MicroAppsS3[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsS3", version: "0.2.
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
MicroAppsS3[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsS3", version: "0.2.10" };
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzUzMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWljcm9BcHBzUzMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBbUZ2Qzs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBMEJ4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVoRSx3REFBd0Q7UUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLEtBQUssMkJBQWEsQ0FBQyxPQUFPLENBQUM7UUFFbEUsRUFBRTtRQUNGLGdEQUFnRDtRQUNoRCxFQUFFO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUM3QyxVQUFVLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDaEMsaUJBQWlCLEVBQUUsaUJBQWlCO1lBQ3BDLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFFSCxFQUFFO1FBQ0Ysc0JBQXNCO1FBQ3RCLEVBQUU7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzdDLFVBQVUsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7WUFDcEMsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN2RCxVQUFVLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtZQUN2QyxpQkFBaUIsRUFBRSxpQkFBaUI7WUFDcEMsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDN0QsT0FBTyxFQUFFLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3hGLENBQUMsQ0FBQztRQUNILElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBdkVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUdELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFHRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBR0QsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDOztBQXhCSCxrQ0EwRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2YgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgY2ZvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBNaWNyb0FwcHMgUzNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWljcm9BcHBzUzMge1xuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBkZXBsb3llZCBhcHBsaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFwcHM6IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgT3JpZ2luIEFjY2VzcyBJZGVudGl0eSBmb3IgdGhlIGRlcGxveWVkIGFwcGxpY2F0aW9ucyBidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFwcHNPQUk6IGNmLk9yaWdpbkFjY2Vzc0lkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IE9yaWdpbiBmb3IgdGhlIGRlcGxveWVkIGFwcGxpY2F0aW9ucyBidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFwcHNPcmlnaW46IGNmb3JpZ2lucy5TM09yaWdpbjtcblxuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBzdGFnZWQgYXBwbGljYXRpb25zIChwcmlvciB0byBkZXBsb3kpXG4gICAqL1xuICByZWFkb25seSBidWNrZXRBcHBzU3RhZ2luZzogczMuSUJ1Y2tldDtcblxuICAvKipcbiAgICogUzMgYnVja2V0IGZvciBDbG91ZEZyb250IGxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldExvZ3M6IHMzLklCdWNrZXQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIGBNaWNyb0FwcHNTM2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9BcHBzUzNQcm9wcyB7XG4gIC8qKlxuICAgKiBSZW1vdmFsUG9saWN5IG92ZXJyaWRlIGZvciBjaGlsZCByZXNvdXJjZXNcbiAgICpcbiAgICogTm90ZTogaWYgc2V0IHRvIERFU1RST1kgdGhlIFMzIGJ1Y2tldHMgd2lsbCBoYXZlIGBhdXRvRGVsZXRlT2JqZWN0c2Agc2V0IHRvIGB0cnVlYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBlciByZXNvdXJjZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogUzMgZGVwbG95ZWQgYXBwcyBidWNrZXQgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvLWFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBidWNrZXRBcHBzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUzMgc3RhZ2luZyBhcHBzIGJ1Y2tldCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8tYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFwcHNTdGFnaW5nTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUzMgbG9ncyBidWNrZXQgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvLWFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBidWNrZXRMb2dzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgYXNzZXQgbmFtZSByb290XG4gICAqXG4gICAqIEBleGFtcGxlIG1pY3JvYXBwc1xuICAgKiBAZGVmYXVsdCAtIHJlc291cmNlIG5hbWVzIGF1dG8gYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgc3VmZml4XG4gICAqXG4gICAqIEBleGFtcGxlIC1kZXYtcHItMTJcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBNaWNyb0FwcHMgUzMgQnVja2V0LlxuICovXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzUzMgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTWljcm9BcHBzUzMge1xuICBwcml2YXRlIF9idWNrZXRBcHBzOiBzMy5JQnVja2V0O1xuICBwdWJsaWMgZ2V0IGJ1Y2tldEFwcHMoKTogczMuSUJ1Y2tldCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1Y2tldEFwcHM7XG4gIH1cblxuICBwcml2YXRlIF9idWNrZXRBcHBzT0FJOiBjZi5PcmlnaW5BY2Nlc3NJZGVudGl0eTtcbiAgcHVibGljIGdldCBidWNrZXRBcHBzT0FJKCk6IGNmLk9yaWdpbkFjY2Vzc0lkZW50aXR5IHtcbiAgICByZXR1cm4gdGhpcy5fYnVja2V0QXBwc09BSTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1Y2tldEFwcHNPcmlnaW46IGNmb3JpZ2lucy5TM09yaWdpbjtcbiAgcHVibGljIGdldCBidWNrZXRBcHBzT3JpZ2luKCk6IGNmb3JpZ2lucy5TM09yaWdpbiB7XG4gICAgcmV0dXJuIHRoaXMuX2J1Y2tldEFwcHNPcmlnaW47XG4gIH1cblxuICBwcml2YXRlIF9idWNrZXRBcHBzU3RhZ2luZzogczMuSUJ1Y2tldDtcbiAgcHVibGljIGdldCBidWNrZXRBcHBzU3RhZ2luZygpOiBzMy5JQnVja2V0IHtcbiAgICByZXR1cm4gdGhpcy5fYnVja2V0QXBwc1N0YWdpbmc7XG4gIH1cblxuICBwcml2YXRlIF9idWNrZXRMb2dzOiBzMy5JQnVja2V0O1xuICBwdWJsaWMgZ2V0IGJ1Y2tldExvZ3MoKTogczMuSUJ1Y2tldCB7XG4gICAgcmV0dXJuIHRoaXMuX2J1Y2tldExvZ3M7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IE1pY3JvQXBwc1MzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlbW92YWxQb2xpY3ksIGFzc2V0TmFtZVJvb3QsIGFzc2V0TmFtZVN1ZmZpeCB9ID0gcHJvcHM7XG5cbiAgICAvLyBVc2UgQXV0by1EZWxldGUgUzNCdWNrZXQgaWYgcmVtb3ZhbCBwb2xpY3kgaXMgREVTVFJPWVxuICAgIGNvbnN0IHMzQXV0b0RlbGV0ZUl0ZW1zID0gcmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuXG4gICAgLy9cbiAgICAvLyBTMyBCdWNrZXQgZm9yIExvZ2dpbmcgLSBVc2FibGUgYnkgbWFueSBzdGFja3NcbiAgICAvL1xuICAgIHRoaXMuX2J1Y2tldExvZ3MgPSBuZXcgczMuQnVja2V0KHRoaXMsICdsb2dzJywge1xuICAgICAgYnVja2V0TmFtZTogcHJvcHMuYnVja2V0TG9nc05hbWUsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogczNBdXRvRGVsZXRlSXRlbXMsXG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBTMyBCdWNrZXRzIGZvciBBcHBzXG4gICAgLy9cbiAgICB0aGlzLl9idWNrZXRBcHBzID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnYXBwcycsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldEFwcHNOYW1lLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHMzQXV0b0RlbGV0ZUl0ZW1zLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcbiAgICB0aGlzLl9idWNrZXRBcHBzU3RhZ2luZyA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ3N0YWdpbmcnLCB7XG4gICAgICBidWNrZXROYW1lOiBwcm9wcy5idWNrZXRBcHBzU3RhZ2luZ05hbWUsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogczNBdXRvRGVsZXRlSXRlbXMsXG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIFMzIE9yaWdpbiBJZGVudGl0eVxuICAgIHRoaXMuX2J1Y2tldEFwcHNPQUkgPSBuZXcgY2YuT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcywgJ29haScsIHtcbiAgICAgIGNvbW1lbnQ6IGFzc2V0TmFtZVJvb3QgIT09IHVuZGVmaW5lZCA/IGAke2Fzc2V0TmFtZVJvb3R9JHthc3NldE5hbWVTdWZmaXh9YCA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9idWNrZXRBcHBzT0FJLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgT3JpZ2luIGZvciBDbG91ZEZyb250XG4gICAgdGhpcy5fYnVja2V0QXBwc09yaWdpbiA9IG5ldyBjZm9yaWdpbnMuUzNPcmlnaW4odGhpcy5fYnVja2V0QXBwcywge1xuICAgICAgb3JpZ2luQWNjZXNzSWRlbnRpdHk6IHRoaXMuYnVja2V0QXBwc09BSSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
package/lib/MicroAppsSvcs.d.ts
CHANGED
|
@@ -6,82 +6,65 @@ import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
|
6
6
|
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
7
7
|
import { Construct } from 'constructs';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @experimental
|
|
9
|
+
* Properties to initialize an instance of `MicroAppsSvcs`.
|
|
12
10
|
*/
|
|
13
11
|
export interface MicroAppsSvcsProps {
|
|
14
12
|
/**
|
|
15
|
-
*
|
|
13
|
+
* RemovalPolicy override for child resources
|
|
16
14
|
*
|
|
17
15
|
* Note: if set to DESTROY the S3 buckes will have `autoDeleteObjects` set to `true`
|
|
18
16
|
*
|
|
19
17
|
* @default - per resource default
|
|
20
|
-
* @experimental
|
|
21
18
|
*/
|
|
22
19
|
readonly removalPolicy?: RemovalPolicy;
|
|
23
20
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @experimental
|
|
21
|
+
* S3 bucket for deployed applications
|
|
27
22
|
*/
|
|
28
23
|
readonly bucketApps: s3.IBucket;
|
|
29
24
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @experimental
|
|
25
|
+
* CloudFront Origin Access Identity for the deployed applications bucket
|
|
33
26
|
*/
|
|
34
27
|
readonly bucketAppsOAI: cf.OriginAccessIdentity;
|
|
35
28
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* @experimental
|
|
29
|
+
* S3 bucket for staged applications (prior to deploy)
|
|
39
30
|
*/
|
|
40
31
|
readonly bucketAppsStaging: s3.IBucket;
|
|
41
32
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @experimental
|
|
33
|
+
* API Gateway v2 HTTP for Router and app
|
|
45
34
|
*/
|
|
46
35
|
readonly httpApi: apigwy.HttpApi;
|
|
47
36
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* @experimental
|
|
37
|
+
* Application environment, passed as `NODE_ENV`
|
|
38
|
+
* to the Router and Deployer Lambda functions
|
|
51
39
|
*/
|
|
52
40
|
readonly appEnv: string;
|
|
53
41
|
/**
|
|
54
|
-
*
|
|
42
|
+
* Optional asset name root
|
|
55
43
|
*
|
|
44
|
+
* @example microapps
|
|
56
45
|
* @default - resource names auto assigned
|
|
57
|
-
* @experimental
|
|
58
|
-
* @example
|
|
59
|
-
*
|
|
60
|
-
* microapps
|
|
61
46
|
*/
|
|
62
47
|
readonly assetNameRoot?: string;
|
|
63
48
|
/**
|
|
64
|
-
*
|
|
49
|
+
* Optional asset name suffix
|
|
65
50
|
*
|
|
51
|
+
* @example -dev-pr-12
|
|
66
52
|
* @default none
|
|
67
|
-
* @experimental
|
|
68
|
-
* @example
|
|
69
|
-
*
|
|
70
|
-
* -dev-pr-12
|
|
71
53
|
*/
|
|
72
54
|
readonly assetNameSuffix?: string;
|
|
73
55
|
/**
|
|
74
|
-
*
|
|
56
|
+
* Use a strict S3 Bucket Policy that prevents applications
|
|
57
|
+
* from reading/writing/modifying/deleting files in the S3 Bucket
|
|
58
|
+
* outside of the path that is specific to their app/version.
|
|
75
59
|
*
|
|
76
60
|
* This setting should be used when applications are less than
|
|
77
61
|
* fully trusted.
|
|
78
62
|
*
|
|
79
63
|
* @default false
|
|
80
|
-
* @experimental
|
|
81
64
|
*/
|
|
82
65
|
readonly s3StrictBucketPolicy?: boolean;
|
|
83
66
|
/**
|
|
84
|
-
*
|
|
67
|
+
* Applies when using s3StrictBucketPolicy = true
|
|
85
68
|
*
|
|
86
69
|
* IAM Role or IAM User names to exclude from the DENY rules on the S3 Bucket Policy.
|
|
87
70
|
*
|
|
@@ -90,15 +73,13 @@ export interface MicroAppsSvcsProps {
|
|
|
90
73
|
* Typically any admin roles / users that need to view or manage the S3 Bucket
|
|
91
74
|
* would be added to this list.
|
|
92
75
|
*
|
|
93
|
-
* @
|
|
94
|
-
* @experimental
|
|
95
|
-
* @example
|
|
76
|
+
* @example ['arn:aws:iam::1234567890123:role/AdminAccess', 'arn:aws:iam::1234567890123:user/MyAdminUser']
|
|
96
77
|
*
|
|
97
|
-
*
|
|
78
|
+
* @see s3PolicyBypassAROAs
|
|
98
79
|
*/
|
|
99
80
|
readonly s3PolicyBypassPrincipalARNs?: string[];
|
|
100
81
|
/**
|
|
101
|
-
*
|
|
82
|
+
* Applies when using s3StrictBucketPolicy = true
|
|
102
83
|
*
|
|
103
84
|
* AROAs of the IAM Role to exclude from the DENY rules on the S3 Bucket Policy.
|
|
104
85
|
* This allows sessions that assume the IAM Role to be excluded from the
|
|
@@ -117,95 +98,64 @@ export interface MicroAppsSvcsProps {
|
|
|
117
98
|
* wildcard matches and does not do wildcard matches implicitly either.
|
|
118
99
|
*
|
|
119
100
|
* The AROA must be used because there are only 3 Principal variables available:
|
|
120
|
-
*
|
|
121
|
-
*
|
|
101
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable
|
|
102
|
+
* aws:username, aws:userid, aws:PrincipalTag
|
|
122
103
|
*
|
|
123
104
|
* For an assumed role, aws:username is blank, aws:userid is:
|
|
124
|
-
*
|
|
105
|
+
* [unique id AKA AROA for Role]:[session name]
|
|
125
106
|
*
|
|
126
107
|
* Table of unique ID prefixes such as AROA:
|
|
127
|
-
*
|
|
108
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-prefixes
|
|
128
109
|
*
|
|
129
110
|
* The name of the role is simply not available for an assumed role and, if it was,
|
|
130
111
|
* a complicated comparison would be requierd to prevent exclusion
|
|
131
112
|
* of applying the Deny Rule to roles from other accounts.
|
|
132
113
|
*
|
|
133
114
|
* To get the AROA with the AWS CLI:
|
|
134
|
-
*
|
|
135
|
-
*
|
|
115
|
+
* aws iam get-role --role-name ROLE-NAME
|
|
116
|
+
* aws iam get-user -–user-name USER-NAME
|
|
136
117
|
*
|
|
137
|
-
* @
|
|
138
|
-
* @experimental
|
|
139
|
-
* @example
|
|
118
|
+
* @example [ 'AROA1234567890123' ]
|
|
140
119
|
*
|
|
141
|
-
*
|
|
120
|
+
* @see s3StrictBucketPolicy
|
|
142
121
|
*/
|
|
143
122
|
readonly s3PolicyBypassAROAs?: string[];
|
|
144
123
|
/**
|
|
145
|
-
*
|
|
124
|
+
* Path prefix on the root of the deployment
|
|
146
125
|
*
|
|
126
|
+
* @example dev/
|
|
147
127
|
* @default none
|
|
148
|
-
* @experimental
|
|
149
|
-
* @example
|
|
150
|
-
*
|
|
151
|
-
* dev/
|
|
152
128
|
*/
|
|
153
129
|
readonly rootPathPrefix?: string;
|
|
154
130
|
}
|
|
155
131
|
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* @experimental
|
|
132
|
+
* Represents a MicroApps Services
|
|
159
133
|
*/
|
|
160
134
|
export interface IMicroAppsSvcs {
|
|
161
135
|
/**
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* @experimental
|
|
136
|
+
* DynamoDB table used by Router, Deployer, and Release console app
|
|
165
137
|
*/
|
|
166
138
|
readonly table: dynamodb.ITable;
|
|
167
139
|
/**
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* @experimental
|
|
140
|
+
* Lambda function for the Deployer
|
|
171
141
|
*/
|
|
172
142
|
readonly deployerFunc: lambda.IFunction;
|
|
173
143
|
/**
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
* @experimental
|
|
144
|
+
* Lambda function for the Router
|
|
177
145
|
*/
|
|
178
146
|
readonly routerFunc: lambda.IFunction;
|
|
179
147
|
}
|
|
180
148
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* @experimental
|
|
149
|
+
* Create a new MicroApps Services construct, including the Deployer
|
|
150
|
+
* and Router Lambda Functions, and the DynamoDB Table used by both.
|
|
184
151
|
*/
|
|
185
152
|
export declare class MicroAppsSvcs extends Construct implements IMicroAppsSvcs {
|
|
186
153
|
private _table;
|
|
187
|
-
/**
|
|
188
|
-
* (experimental) DynamoDB table used by Router, Deployer, and Release console app.
|
|
189
|
-
*
|
|
190
|
-
* @experimental
|
|
191
|
-
*/
|
|
192
154
|
get table(): dynamodb.ITable;
|
|
193
155
|
private _deployerFunc;
|
|
194
|
-
/**
|
|
195
|
-
* (experimental) Lambda function for the Deployer.
|
|
196
|
-
*
|
|
197
|
-
* @experimental
|
|
198
|
-
*/
|
|
199
156
|
get deployerFunc(): lambda.IFunction;
|
|
200
157
|
private _routerFunc;
|
|
201
|
-
/**
|
|
202
|
-
* (experimental) Lambda function for the Router.
|
|
203
|
-
*
|
|
204
|
-
* @experimental
|
|
205
|
-
*/
|
|
206
158
|
get routerFunc(): lambda.IFunction;
|
|
207
|
-
/**
|
|
208
|
-
* @experimental
|
|
209
|
-
*/
|
|
210
159
|
constructor(scope: Construct, id: string, props?: MicroAppsSvcsProps);
|
|
211
160
|
}
|
|
161
|
+
//# sourceMappingURL=MicroAppsSvcs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicroAppsSvcs.d.ts","sourceRoot":"","sources":["../src/MicroAppsSvcs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,iCAAiC,CAAC;AAE1D,OAAO,EAAiB,aAAa,EAAS,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AAErD,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAGjD,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAEhD;;OAEG;IACH,QAAQ,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;;;;;;OASG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC;CACvC;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,SAAU,YAAW,cAAc;IACpE,OAAO,CAAC,MAAM,CAAiB;IAC/B,IAAW,KAAK,IAAI,QAAQ,CAAC,MAAM,CAElC;IAED,OAAO,CAAC,aAAa,CAAkB;IACvC,IAAW,YAAY,IAAI,MAAM,CAAC,SAAS,CAE1C;IAED,OAAO,CAAC,WAAW,CAAkB;IACrC,IAAW,UAAU,IAAI,MAAM,CAAC,SAAS,CAExC;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,kBAAkB;CAwarE"}
|