@pwrdrvr/microapps-cdk 0.2.8 → 0.2.11
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 +1264 -165
- package/API.md +511 -8
- package/README.md +29 -0
- package/changelog.md +2 -0
- package/lib/MicroApps.d.ts +126 -105
- package/lib/MicroApps.d.ts.map +1 -0
- package/lib/MicroApps.js +32 -30
- package/lib/MicroAppsAPIGwy.d.ts +28 -61
- package/lib/MicroAppsAPIGwy.d.ts.map +1 -0
- package/lib/MicroAppsAPIGwy.js +17 -25
- package/lib/MicroAppsCF.d.ts +85 -104
- package/lib/MicroAppsCF.d.ts.map +1 -0
- package/lib/MicroAppsCF.js +58 -41
- package/lib/MicroAppsEdgeToOrigin.d.ts +108 -0
- package/lib/MicroAppsEdgeToOrigin.d.ts.map +1 -0
- package/lib/MicroAppsEdgeToOrigin.js +139 -0
- package/lib/MicroAppsS3.d.ts +19 -69
- package/lib/MicroAppsS3.d.ts.map +1 -0
- package/lib/MicroAppsS3.js +5 -32
- package/lib/MicroAppsSvcs.d.ts +58 -86
- package/lib/MicroAppsSvcs.d.ts.map +1 -0
- package/lib/MicroAppsSvcs.js +36 -95
- package/lib/MicroAppsTable.d.ts +60 -0
- package/lib/MicroAppsTable.d.ts.map +1 -0
- package/lib/MicroAppsTable.js +42 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +3 -1
- package/lib/microapps-deployer/index.js +174 -113
- package/lib/microapps-deployer/index.js.map +3 -3
- package/lib/microapps-router/index.js +54 -69
- 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 +29 -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/MicroAppsAPIGwy.d.ts
CHANGED
|
@@ -4,125 +4,92 @@ import * as acm from 'aws-cdk-lib/aws-certificatemanager';
|
|
|
4
4
|
import * as r53 from 'aws-cdk-lib/aws-route53';
|
|
5
5
|
import { Construct } from 'constructs';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @experimental
|
|
7
|
+
* Properties to initialize an instance of `MicroAppsAPIGwy`.
|
|
10
8
|
*/
|
|
11
9
|
export interface MicroAppsAPIGwyProps {
|
|
12
10
|
/**
|
|
13
|
-
*
|
|
11
|
+
* RemovalPolicy override for child resources
|
|
14
12
|
*
|
|
15
13
|
* Note: if set to DESTROY the S3 buckes will have `autoDeleteObjects` set to `true`
|
|
16
14
|
*
|
|
17
15
|
* @default - per resource default
|
|
18
|
-
* @experimental
|
|
19
16
|
*/
|
|
20
17
|
readonly removalPolicy?: RemovalPolicy;
|
|
21
18
|
/**
|
|
22
|
-
*
|
|
19
|
+
* CloudFront edge domain name
|
|
23
20
|
*
|
|
21
|
+
* @example apps.pwrdrvr.com
|
|
24
22
|
* @default auto-assigned
|
|
25
|
-
* @experimental
|
|
26
|
-
* @example
|
|
27
|
-
*
|
|
28
|
-
* apps.pwrdrvr.com
|
|
29
23
|
*/
|
|
30
24
|
readonly domainNameEdge?: string;
|
|
31
25
|
/**
|
|
32
|
-
*
|
|
26
|
+
* API Gateway origin domain name
|
|
33
27
|
*
|
|
28
|
+
* @example apps-origin.pwrdrvr.com
|
|
34
29
|
* @default auto-assigned
|
|
35
|
-
* @experimental
|
|
36
|
-
* @example
|
|
37
|
-
*
|
|
38
|
-
* apps-origin.pwrdrvr.com
|
|
39
30
|
*/
|
|
40
31
|
readonly domainNameOrigin?: string;
|
|
41
32
|
/**
|
|
42
|
-
*
|
|
33
|
+
* Optional asset name root
|
|
43
34
|
*
|
|
35
|
+
* @example microapps
|
|
44
36
|
* @default - resource names auto assigned
|
|
45
|
-
* @experimental
|
|
46
|
-
* @example
|
|
47
|
-
*
|
|
48
|
-
* microapps
|
|
49
37
|
*/
|
|
50
38
|
readonly assetNameRoot?: string;
|
|
51
39
|
/**
|
|
52
|
-
*
|
|
40
|
+
* Optional asset name suffix
|
|
53
41
|
*
|
|
42
|
+
* @example -dev-pr-12
|
|
54
43
|
* @default none
|
|
55
|
-
* @experimental
|
|
56
|
-
* @example
|
|
57
|
-
*
|
|
58
|
-
* -dev-pr-12
|
|
59
44
|
*/
|
|
60
45
|
readonly assetNameSuffix?: string;
|
|
61
46
|
/**
|
|
62
|
-
*
|
|
47
|
+
* Optional local region ACM certificate to use for API Gateway
|
|
48
|
+
* Note: required when using a custom domain
|
|
63
49
|
*
|
|
64
50
|
* @default none
|
|
65
|
-
* @experimental
|
|
66
51
|
*/
|
|
67
52
|
readonly certOrigin?: acm.ICertificate;
|
|
68
53
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* @experimental
|
|
54
|
+
* Route53 zone in which to create optional `domainNameEdge` record
|
|
72
55
|
*/
|
|
73
56
|
readonly r53Zone?: r53.IHostedZone;
|
|
74
57
|
/**
|
|
75
|
-
*
|
|
58
|
+
* Path prefix on the root of the API Gateway Stage
|
|
76
59
|
*
|
|
60
|
+
* @example dev/
|
|
77
61
|
* @default none
|
|
78
|
-
* @experimental
|
|
79
|
-
* @example
|
|
80
|
-
*
|
|
81
|
-
* dev/
|
|
82
62
|
*/
|
|
83
63
|
readonly rootPathPrefix?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Require IAM auth on API Gateway
|
|
66
|
+
*
|
|
67
|
+
* @default true
|
|
68
|
+
*/
|
|
69
|
+
readonly requireIAMAuthorization?: boolean;
|
|
84
70
|
}
|
|
85
71
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* @experimental
|
|
72
|
+
* Represents a MicroApps API Gateway
|
|
89
73
|
*/
|
|
90
74
|
export interface IMicroAppsAPIGwy {
|
|
91
75
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* @experimental
|
|
76
|
+
* Domain Name applied to API Gateway origin
|
|
95
77
|
*/
|
|
96
78
|
readonly dnAppsOrigin?: apigwy.IDomainName;
|
|
97
79
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* @experimental
|
|
80
|
+
* API Gateway
|
|
101
81
|
*/
|
|
102
82
|
readonly httpApi: apigwy.HttpApi;
|
|
103
83
|
}
|
|
104
84
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* @experimental
|
|
85
|
+
* Create a new MicroApps API Gateway HTTP API endpoint, optionally
|
|
86
|
+
* requiring IAM authorization
|
|
108
87
|
*/
|
|
109
88
|
export declare class MicroAppsAPIGwy extends Construct implements IMicroAppsAPIGwy {
|
|
110
89
|
private _dnAppsOrigin;
|
|
111
|
-
/**
|
|
112
|
-
* (experimental) Domain Name applied to API Gateway origin.
|
|
113
|
-
*
|
|
114
|
-
* @experimental
|
|
115
|
-
*/
|
|
116
90
|
get dnAppsOrigin(): apigwy.IDomainName | undefined;
|
|
117
91
|
private _httpApi;
|
|
118
|
-
/**
|
|
119
|
-
* (experimental) API Gateway.
|
|
120
|
-
*
|
|
121
|
-
* @experimental
|
|
122
|
-
*/
|
|
123
92
|
get httpApi(): apigwy.HttpApi;
|
|
124
|
-
|
|
125
|
-
* @experimental
|
|
126
|
-
*/
|
|
127
|
-
constructor(scope: Construct, id: string, props?: MicroAppsAPIGwyProps);
|
|
93
|
+
constructor(scope: Construct, id: string, props: MicroAppsAPIGwyProps);
|
|
128
94
|
}
|
|
95
|
+
//# sourceMappingURL=MicroAppsAPIGwy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicroAppsAPIGwy.d.ts","sourceRoot":"","sources":["../src/MicroAppsAPIGwy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iCAAiC,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAG1D,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;IAEnC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;OAIG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,SAAU,YAAW,gBAAgB;IACxE,OAAO,CAAC,aAAa,CAAgC;IACrD,IAAW,YAAY,IAAI,MAAM,CAAC,WAAW,GAAG,SAAS,CAExD;IAED,OAAO,CAAC,QAAQ,CAAiB;IACjC,IAAW,OAAO,IAAI,MAAM,CAAC,OAAO,CAEnC;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB;CAoLtE"}
|
package/lib/MicroAppsAPIGwy.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.MicroAppsAPIGwy = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const apigwy = require("@aws-cdk/aws-apigatewayv2-alpha");
|
|
7
|
+
const apigwyAuth = require("@aws-cdk/aws-apigatewayv2-authorizers-alpha");
|
|
7
8
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
9
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
9
10
|
const logs = require("aws-cdk-lib/aws-logs");
|
|
@@ -11,14 +12,10 @@ const r53 = require("aws-cdk-lib/aws-route53");
|
|
|
11
12
|
const r53targets = require("aws-cdk-lib/aws-route53-targets");
|
|
12
13
|
const constructs_1 = require("constructs");
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* @experimental
|
|
15
|
+
* Create a new MicroApps API Gateway HTTP API endpoint, optionally
|
|
16
|
+
* requiring IAM authorization
|
|
17
17
|
*/
|
|
18
18
|
class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
19
|
-
/**
|
|
20
|
-
* @experimental
|
|
21
|
-
*/
|
|
22
19
|
constructor(scope, id, props) {
|
|
23
20
|
super(scope, id);
|
|
24
21
|
if (props === undefined) {
|
|
@@ -28,15 +25,14 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
|
28
25
|
(props.r53Zone !== undefined && props.domainNameEdge === undefined)) {
|
|
29
26
|
throw new Error('If either of r53Zone or domainNameEdge are set then the other must be set');
|
|
30
27
|
}
|
|
31
|
-
if (
|
|
32
|
-
(
|
|
33
|
-
throw new Error('If either of domainNameOrigin or certOrigin are set then the other must be set');
|
|
28
|
+
if (props.domainNameOrigin !== undefined && props.certOrigin === undefined) {
|
|
29
|
+
throw new Error('If domainNameOrigin is set then certOrigin must be set');
|
|
34
30
|
}
|
|
35
31
|
if ((props.domainNameEdge === undefined && props.certOrigin !== undefined) ||
|
|
36
32
|
(props.domainNameEdge !== undefined && props.certOrigin === undefined)) {
|
|
37
|
-
throw new Error('If either of
|
|
33
|
+
throw new Error('If either of domainNameEdge or certOrigin are set then the other must be set');
|
|
38
34
|
}
|
|
39
|
-
const { r53Zone, domainNameEdge, domainNameOrigin, certOrigin, removalPolicy, assetNameRoot, assetNameSuffix, rootPathPrefix, } = props;
|
|
35
|
+
const { r53Zone, domainNameEdge, domainNameOrigin, certOrigin, removalPolicy, assetNameRoot, assetNameSuffix, rootPathPrefix, requireIAMAuthorization = true, } = props;
|
|
40
36
|
// API Gateway uses the `id` string as the gateway name without
|
|
41
37
|
// any randomization... we have to make sure the name is unique-ish
|
|
42
38
|
const apigatewayName = assetNameRoot
|
|
@@ -48,10 +44,13 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
|
48
44
|
this._httpApi = new apigwy.HttpApi(this, 'gwy', {
|
|
49
45
|
apiName: apigatewayName,
|
|
50
46
|
createDefaultStage: false,
|
|
47
|
+
defaultAuthorizer: requireIAMAuthorization ? new apigwyAuth.HttpIamAuthorizer() : undefined,
|
|
51
48
|
});
|
|
52
49
|
if (removalPolicy !== undefined) {
|
|
53
50
|
this._httpApi.applyRemovalPolicy(removalPolicy);
|
|
54
51
|
}
|
|
52
|
+
// This allows the Lambda @ Edge function to execute this api
|
|
53
|
+
aws_cdk_lib_1.Tags.of(this._httpApi).add('microapp-managed', 'true');
|
|
55
54
|
// Create the stage
|
|
56
55
|
const stage = new apigwy.HttpStage(this, 'stage', {
|
|
57
56
|
httpApi: this._httpApi,
|
|
@@ -59,6 +58,8 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
|
59
58
|
// If rootPathPrefix is not defined this will be the $default stage
|
|
60
59
|
stageName: rootPathPrefix,
|
|
61
60
|
});
|
|
61
|
+
// This allows the Lambda @ Edge function to execute this api
|
|
62
|
+
aws_cdk_lib_1.Tags.of(stage).add('microapp-managed', 'true');
|
|
62
63
|
if (domainNameEdge !== undefined && certOrigin !== undefined) {
|
|
63
64
|
// Create Custom Domains for API Gateway
|
|
64
65
|
const dnAppsEdge = new apigwy.DomainName(this, 'microapps-apps-edge-dn', {
|
|
@@ -97,8 +98,8 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
|
97
98
|
if (removalPolicy !== undefined) {
|
|
98
99
|
apiAccessLogs.applyRemovalPolicy(removalPolicy);
|
|
99
100
|
}
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
const cfnStage = stage.node.defaultChild;
|
|
102
|
+
cfnStage.accessLogSettings = {
|
|
102
103
|
destinationArn: apiAccessLogs.logGroupArn,
|
|
103
104
|
format: JSON.stringify({
|
|
104
105
|
requestId: '$context.requestId',
|
|
@@ -112,6 +113,7 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
|
112
113
|
protocol: '$context.protocol',
|
|
113
114
|
responseLength: '$context.responseLength',
|
|
114
115
|
domainName: '$context.domainName',
|
|
116
|
+
authorizerError: '$context.authorizer.error',
|
|
115
117
|
}),
|
|
116
118
|
};
|
|
117
119
|
// Create a logging role
|
|
@@ -156,24 +158,14 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
|
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
|
-
/**
|
|
160
|
-
* (experimental) Domain Name applied to API Gateway origin.
|
|
161
|
-
*
|
|
162
|
-
* @experimental
|
|
163
|
-
*/
|
|
164
161
|
get dnAppsOrigin() {
|
|
165
162
|
return this._dnAppsOrigin;
|
|
166
163
|
}
|
|
167
|
-
/**
|
|
168
|
-
* (experimental) API Gateway.
|
|
169
|
-
*
|
|
170
|
-
* @experimental
|
|
171
|
-
*/
|
|
172
164
|
get httpApi() {
|
|
173
165
|
return this._httpApi;
|
|
174
166
|
}
|
|
175
167
|
}
|
|
176
168
|
exports.MicroAppsAPIGwy = MicroAppsAPIGwy;
|
|
177
169
|
_a = JSII_RTTI_SYMBOL_1;
|
|
178
|
-
MicroAppsAPIGwy[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsAPIGwy", version: "0.2.
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQVBJR3d5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0FQSUd3eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUEwRDtBQUMxRCw2Q0FBbUQ7QUFHbkQsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsOERBQThEO0FBQzlELDJDQUF1Qzs7Ozs7O0FBdUN2QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7Ozs7SUFXNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUNFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUM7WUFDbkUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxFQUNuRTtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztTQUM5RjtRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO1lBQ3hFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxFQUN4RTtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLENBQ2pGLENBQUM7U0FDSDtRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztZQUN0RSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLEVBQ3RFO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FDYixnRkFBZ0YsQ0FDakYsQ0FBQztTQUNIO1FBRUQsTUFBTSxFQUNKLE9BQU8sRUFDUCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsRUFDZixjQUFjLEdBQ2YsR0FBRyxLQUFLLENBQUM7UUFFViwrREFBK0Q7UUFDL0QsbUVBQW1FO1FBQ25FLE1BQU0sY0FBYyxHQUFHLGFBQWE7WUFDbEMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxHQUFHLGVBQWUsRUFBRTtZQUN0QyxDQUFDLENBQUMsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksQ0FBQztRQUU1QyxFQUFFO1FBQ0Ysb0RBQW9EO1FBQ3BELEVBQUU7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQzlDLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLGtCQUFrQixFQUFFLEtBQUs7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDakQ7UUFFRCxtQkFBbUI7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDaEQsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3RCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLG1FQUFtRTtZQUNuRSxTQUFTLEVBQUUsY0FBYztTQUMxQixDQUFDLENBQUM7UUFFSCxJQUFJLGNBQWMsS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUM1RCx3Q0FBd0M7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRTtnQkFDdkUsVUFBVSxFQUFFLGNBQWM7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVO2FBQ3hCLENBQUMsQ0FBQztZQUNILElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtnQkFDL0IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzlDO1lBRUQsa0RBQWtEO1lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUN4RCxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ2xCLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBQ0gseUVBQXlFO1lBQ3pFLDRDQUE0QztZQUM1QyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksZ0JBQWdCLEtBQUssU0FBUyxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDNUQsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsV0FBVyxFQUFFLFVBQVU7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO2dCQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7UUFFRCxvQ0FBb0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDcEQsWUFBWSxFQUFFLGNBQWM7Z0JBQzFCLENBQUMsQ0FBQyxlQUFlLGNBQWMsRUFBRTtnQkFDakMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDN0MsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztTQUN4QyxDQUFDLENBQUM7UUFDSCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDL0IsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0Qsa0ZBQWtGO1FBQ2pGLEtBQXVDLENBQUMsaUJBQWlCLEdBQUc7WUFDM0QsY0FBYyxFQUFFLGFBQWEsQ0FBQyxXQUFXO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNyQixTQUFTLEVBQUUsb0JBQW9CO2dCQUMvQixTQUFTLEVBQUUsNkJBQTZCO2dCQUN4QyxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0QyxXQUFXLEVBQUUsc0JBQXNCO2dCQUNuQyxnQkFBZ0IsRUFBRSwyQkFBMkI7Z0JBQzdDLFVBQVUsRUFBRSxxQkFBcUI7Z0JBQ2pDLElBQUksRUFBRSxlQUFlO2dCQUNyQixNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixjQUFjLEVBQUUseUJBQXlCO2dCQUN6QyxVQUFVLEVBQUUscUJBQXFCO2FBQ2xDLENBQUM7U0FDSCxDQUFDO1FBRUYsd0JBQXdCO1FBQ3hCLG9EQUFvRDtRQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNwRCxlQUFlLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsbURBQW1ELENBQ3BEO2FBQ0Y7WUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7U0FDaEUsQ0FBQyxDQUFDO1FBQ0gsYUFBYSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4QyxFQUFFO1FBQ0YseURBQXlEO1FBQ3pELGdFQUFnRTtRQUNoRSw2REFBNkQ7UUFDN0QsMEJBQTBCO1FBQzFCLEVBQUU7UUFDRixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ3BDLE1BQU0sZUFBZSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3BFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUM5QixLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBQ0gseUVBQXlFO1lBQ3pFLDRDQUE0QztZQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO2dCQUMvQixlQUFlLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkQ7U0FDRjtRQUVELEVBQUU7UUFDRix5Q0FBeUM7UUFDekMsRUFBRTtRQUNGLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzNELElBQUksRUFBRSxPQUFPO2dCQUNiLFVBQVUsRUFBRSxnQkFBZ0I7Z0JBQzVCLE1BQU0sRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDaEMsSUFBSSxVQUFVLENBQUMsNEJBQTRCLENBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQ3hDLENBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQy9CLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQzs7Ozs7O0lBMUxELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQzs7Ozs7O0lBR0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDOztBQVRILDBDQTZMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFwaWd3eSBmcm9tICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWFscGhhJztcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYXBpZ3d5Y2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyByNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcjUzdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9BcHBzQVBJR3d5UHJvcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVFZGdlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXNzZXROYW1lUm9vdD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNlcnRPcmlnaW4/OiBhY20uSUNlcnRpZmljYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcjUzWm9uZT86IHI1My5JSG9zdGVkWm9uZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJvb3RQYXRoUHJlZml4Pzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSU1pY3JvQXBwc0FQSUd3eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRuQXBwc09yaWdpbj86IGFwaWd3eS5JRG9tYWluTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBodHRwQXBpOiBhcGlnd3kuSHR0cEFwaTtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIE1pY3JvQXBwc0FQSUd3eSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElNaWNyb0FwcHNBUElHd3kge1xuICBwcml2YXRlIF9kbkFwcHNPcmlnaW46IGFwaWd3eS5Eb21haW5OYW1lIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgZ2V0IGRuQXBwc09yaWdpbigpOiBhcGlnd3kuSURvbWFpbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kbkFwcHNPcmlnaW47XG4gIH1cblxuICBwcml2YXRlIF9odHRwQXBpOiBhcGlnd3kuSHR0cEFwaTtcbiAgcHVibGljIGdldCBodHRwQXBpKCk6IGFwaWd3eS5IdHRwQXBpIHtcbiAgICByZXR1cm4gdGhpcy5faHR0cEFwaTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogTWljcm9BcHBzQVBJR3d5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgY2Fubm90IGJlIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChwcm9wcy5yNTNab25lID09PSB1bmRlZmluZWQgJiYgcHJvcHMuZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgIChwcm9wcy5yNTNab25lICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZG9tYWluTmFtZUVkZ2UgPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSWYgZWl0aGVyIG9mIHI1M1pvbmUgb3IgZG9tYWluTmFtZUVkZ2UgYXJlIHNldCB0aGVuIHRoZSBvdGhlciBtdXN0IGJlIHNldCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChwcm9wcy5kb21haW5OYW1lT3JpZ2luID09PSB1bmRlZmluZWQgJiYgcHJvcHMuY2VydE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgKHByb3BzLmRvbWFpbk5hbWVPcmlnaW4gIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlaXRoZXIgb2YgZG9tYWluTmFtZU9yaWdpbiBvciBjZXJ0T3JpZ2luIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlaXRoZXIgb2YgZG9tYWluTmFtZU9yaWdpbiBvciBjZXJ0T3JpZ2luIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICByNTNab25lLFxuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgICBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgY2VydE9yaWdpbixcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gQVBJIEdhdGV3YXkgdXNlcyB0aGUgYGlkYCBzdHJpbmcgYXMgdGhlIGdhdGV3YXkgbmFtZSB3aXRob3V0XG4gICAgLy8gYW55IHJhbmRvbWl6YXRpb24uLi4gd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlLWlzaFxuICAgIGNvbnN0IGFwaWdhdGV3YXlOYW1lID0gYXNzZXROYW1lUm9vdFxuICAgICAgPyBgJHthc3NldE5hbWVSb290fSR7YXNzZXROYW1lU3VmZml4fWBcbiAgICAgIDogYCR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS1taWNyb2FwcHNgO1xuXG4gICAgLy9cbiAgICAvLyBBUElHYXRld2F5IGRvbWFpbiBuYW1lcyBmb3IgQ2xvdWRGcm9udCBhbmQgb3JpZ2luXG4gICAgLy9cbiAgICB0aGlzLl9odHRwQXBpID0gbmV3IGFwaWd3eS5IdHRwQXBpKHRoaXMsICdnd3knLCB7XG4gICAgICBhcGlOYW1lOiBhcGlnYXRld2F5TmFtZSxcbiAgICAgIGNyZWF0ZURlZmF1bHRTdGFnZTogZmFsc2UsXG4gICAgfSk7XG4gICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5faHR0cEFwaS5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBzdGFnZVxuICAgIGNvbnN0IHN0YWdlID0gbmV3IGFwaWd3eS5IdHRwU3RhZ2UodGhpcywgJ3N0YWdlJywge1xuICAgICAgaHR0cEFwaTogdGhpcy5faHR0cEFwaSxcbiAgICAgIGF1dG9EZXBsb3k6IHRydWUsXG4gICAgICAvLyBJZiByb290UGF0aFByZWZpeCBpcyBub3QgZGVmaW5lZCB0aGlzIHdpbGwgYmUgdGhlICRkZWZhdWx0IHN0YWdlXG4gICAgICBzdGFnZU5hbWU6IHJvb3RQYXRoUHJlZml4LFxuICAgIH0pO1xuXG4gICAgaWYgKGRvbWFpbk5hbWVFZGdlICE9PSB1bmRlZmluZWQgJiYgY2VydE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDcmVhdGUgQ3VzdG9tIERvbWFpbnMgZm9yIEFQSSBHYXRld2F5XG4gICAgICBjb25zdCBkbkFwcHNFZGdlID0gbmV3IGFwaWd3eS5Eb21haW5OYW1lKHRoaXMsICdtaWNyb2FwcHMtYXBwcy1lZGdlLWRuJywge1xuICAgICAgICBkb21haW5OYW1lOiBkb21haW5OYW1lRWRnZSxcbiAgICAgICAgY2VydGlmaWNhdGU6IGNlcnRPcmlnaW4sXG4gICAgICB9KTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZG5BcHBzRWRnZS5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZWRnZSBkb21haW4gbmFtZSBtYXBwaW5nIGZvciB0aGUgQVBJXG4gICAgICBjb25zdCBhcGlNYXBwaW5nID0gbmV3IGFwaWd3eS5BcGlNYXBwaW5nKHRoaXMsICdtYXBwaW5nJywge1xuICAgICAgICBhcGk6IHRoaXMuX2h0dHBBcGksXG4gICAgICAgIGRvbWFpbk5hbWU6IGRuQXBwc0VkZ2UsXG4gICAgICAgIHN0YWdlLFxuICAgICAgfSk7XG4gICAgICAvLyAyMDIyLTAxLTE2IC0gQ0RLIGlzIHN0aWxsIGdlbmVyYXRpbmcgQ2xvdWRGb3JtYXRpb24gd2l0aCBubyBkZXBlbmRlbmN5XG4gICAgICAvLyBiZXR3ZWVuIHRoZSBSNTMgUmVjb3JkU2V0IGFuZCB0aGUgTWFwcGluZ1xuICAgICAgYXBpTWFwcGluZy5ub2RlLmFkZERlcGVuZGVuY3koZG5BcHBzRWRnZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpbk5hbWVPcmlnaW4gIT09IHVuZGVmaW5lZCAmJiBjZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2RuQXBwc09yaWdpbiA9IG5ldyBhcGlnd3kuRG9tYWluTmFtZSh0aGlzLCAnb3JpZ2luLWRuJywge1xuICAgICAgICBkb21haW5OYW1lOiBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogY2VydE9yaWdpbixcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9kbkFwcHNPcmlnaW4uYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVuYWJsZSBhY2Nlc3MgbG9ncyBvbiBBUEkgR2F0ZXdheVxuICAgIGNvbnN0IGFwaUFjY2Vzc0xvZ3MgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnbG9ncycsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogYXBpZ2F0ZXdheU5hbWVcbiAgICAgICAgPyBgL2F3cy9hcGlnd3kvJHthcGlnYXRld2F5TmFtZX1gXG4gICAgICAgIDogYC9hd3MvYXBpZ3d5LyR7dGhpcy5odHRwQXBpLmh0dHBBcGlOYW1lfWAsXG4gICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgfSk7XG4gICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXBpQWNjZXNzTG9ncy5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IHN0YWdlID0gdGhpcy5faHR0cEFwaS5kZWZhdWx0U3RhZ2U/Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGFwaWd3eS5DZm5TdGFnZTtcbiAgICAoc3RhZ2UgYXMgdW5rbm93biBhcyBhcGlnd3ljZm4uQ2ZuU3RhZ2UpLmFjY2Vzc0xvZ1NldHRpbmdzID0ge1xuICAgICAgZGVzdGluYXRpb25Bcm46IGFwaUFjY2Vzc0xvZ3MubG9nR3JvdXBBcm4sXG4gICAgICBmb3JtYXQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmVxdWVzdElkOiAnJGNvbnRleHQucmVxdWVzdElkJyxcbiAgICAgICAgdXNlckFnZW50OiAnJGNvbnRleHQuaWRlbnRpdHkudXNlckFnZW50JyxcbiAgICAgICAgc291cmNlSXA6ICckY29udGV4dC5pZGVudGl0eS5zb3VyY2VJcCcsXG4gICAgICAgIHJlcXVlc3RUaW1lOiAnJGNvbnRleHQucmVxdWVzdFRpbWUnLFxuICAgICAgICByZXF1ZXN0VGltZUVwb2NoOiAnJGNvbnRleHQucmVxdWVzdFRpbWVFcG9jaCcsXG4gICAgICAgIGh0dHBNZXRob2Q6ICckY29udGV4dC5odHRwTWV0aG9kJyxcbiAgICAgICAgcGF0aDogJyRjb250ZXh0LnBhdGgnLFxuICAgICAgICBzdGF0dXM6ICckY29udGV4dC5zdGF0dXMnLFxuICAgICAgICBwcm90b2NvbDogJyRjb250ZXh0LnByb3RvY29sJyxcbiAgICAgICAgcmVzcG9uc2VMZW5ndGg6ICckY29udGV4dC5yZXNwb25zZUxlbmd0aCcsXG4gICAgICAgIGRvbWFpbk5hbWU6ICckY29udGV4dC5kb21haW5OYW1lJyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSBsb2dnaW5nIHJvbGVcbiAgICAvLyBUaXBzOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzExMTAwXG4gICAgY29uc3QgYXBpR3d5TG9nUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnbG9ncy1yb2xlJywge1xuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAnc2VydmljZS1yb2xlL0FtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncycsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICAgIGFwaUFjY2Vzc0xvZ3MuZ3JhbnRXcml0ZShhcGlHd3lMb2dSb2xlKTtcblxuICAgIC8vXG4gICAgLy8gTGV0IEFQSSBHYXRld2F5IGFjY2VwdCByZXF1ZXN0cyB1c2luZyBkb21haW5OYW1lT3JpZ2luXG4gICAgLy8gVGhhdCBpcyB0aGUgb3JpZ2luIFVSSSB0aGF0IENsb3VkRnJvbnQgdXNlcyBmb3IgdGhpcyBnYXRld2F5LlxuICAgIC8vIFRoZSBnYXRld2F5IHdpbGwgcmVmdXNlIHRoZSB0cmFmZmljIGlmIGl0IGRvZXNuJ3QgaGF2ZSB0aGVcbiAgICAvLyBkb21haW4gbmFtZSByZWdpc3RlcmVkLlxuICAgIC8vXG4gICAgaWYgKHRoaXMuX2RuQXBwc09yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBtYXBwaW5nQXBwc0FwaXMgPSBuZXcgYXBpZ3d5LkFwaU1hcHBpbmcodGhpcywgJ2FwaS1tYXAtb3JpZ2luJywge1xuICAgICAgICBhcGk6IHRoaXMuX2h0dHBBcGksXG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuX2RuQXBwc09yaWdpbixcbiAgICAgICAgc3RhZ2UsXG4gICAgICB9KTtcbiAgICAgIC8vIDIwMjItMDEtMTYgLSBDREsgaXMgc3RpbGwgZ2VuZXJhdGluZyBDbG91ZEZvcm1hdGlvbiB3aXRoIG5vIGRlcGVuZGVuY3lcbiAgICAgIC8vIGJldHdlZW4gdGhlIFI1MyBSZWNvcmRTZXQgYW5kIHRoZSBNYXBwaW5nXG4gICAgICBtYXBwaW5nQXBwc0FwaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuX2RuQXBwc09yaWdpbik7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcHBpbmdBcHBzQXBpcy5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIG9yaWdpbiBuYW1lIGZvciBBUEkgR2F0ZXdheVxuICAgIC8vXG4gICAgaWYgKHI1M1pvbmUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9kbkFwcHNPcmlnaW4pIHtcbiAgICAgIGNvbnN0IHJyQXBwc09yaWdpbiA9IG5ldyByNTMuQVJlY29yZCh0aGlzLCAnb3JpZ2luLWFyZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IHI1M1pvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICAgIHRhcmdldDogcjUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IHI1M3RhcmdldHMuQXBpR2F0ZXdheXYyRG9tYWluUHJvcGVydGllcyhcbiAgICAgICAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5yZWdpb25hbERvbWFpbk5hbWUsXG4gICAgICAgICAgICB0aGlzLl9kbkFwcHNPcmlnaW4ucmVnaW9uYWxIb3N0ZWRab25lSWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByckFwcHNPcmlnaW4uYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
170
|
+
MicroAppsAPIGwy[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsAPIGwy", version: "0.2.11" };
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQVBJR3d5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0FQSUd3eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUEwRDtBQUMxRCwwRUFBMEU7QUFDMUUsNkNBQXlEO0FBR3pELDJDQUEyQztBQUMzQyw2Q0FBNkM7QUFDN0MsK0NBQStDO0FBQy9DLDhEQUE4RDtBQUM5RCwyQ0FBdUM7QUEyRnZDOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQVc1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM5QztRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztZQUNuRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLEVBQ25FO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztTQUMzRTtRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztZQUN0RSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLEVBQ3RF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LENBQUMsNEJBQTRCLENBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQ3hDLENBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQy9CLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQztJQTVMRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFHRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBVEgsMENBK0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXBpZ3d5IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djItYWxwaGEnO1xuaW1wb3J0ICogYXMgYXBpZ3d5QXV0aCBmcm9tICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXJzLWFscGhhJztcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYXBpZ3d5Y2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyByNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcjUzdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBgTWljcm9BcHBzQVBJR3d5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWNyb0FwcHNBUElHd3lQcm9wcyB7XG4gIC8qKlxuICAgKiBSZW1vdmFsUG9saWN5IG92ZXJyaWRlIGZvciBjaGlsZCByZXNvdXJjZXNcbiAgICpcbiAgICogTm90ZTogaWYgc2V0IHRvIERFU1RST1kgdGhlIFMzIGJ1Y2tlcyB3aWxsIGhhdmUgYGF1dG9EZWxldGVPYmplY3RzYCBzZXQgdG8gYHRydWVgXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVyIHJlc291cmNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IGVkZ2UgZG9tYWluIG5hbWVcbiAgICpcbiAgICogQGV4YW1wbGUgYXBwcy5wd3JkcnZyLmNvbVxuICAgKiBAZGVmYXVsdCBhdXRvLWFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lRWRnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQVBJIEdhdGV3YXkgb3JpZ2luIGRvbWFpbiBuYW1lXG4gICAqXG4gICAqIEBleGFtcGxlIGFwcHMtb3JpZ2luLnB3cmRydnIuY29tXG4gICAqIEBkZWZhdWx0IGF1dG8tYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgcm9vdFxuICAgKlxuICAgKiBAZXhhbXBsZSBtaWNyb2FwcHNcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBuYW1lcyBhdXRvIGFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhc3NldCBuYW1lIHN1ZmZpeFxuICAgKlxuICAgKiBAZXhhbXBsZSAtZGV2LXByLTEyXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgbG9jYWwgcmVnaW9uIEFDTSBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIEFQSSBHYXRld2F5XG4gICAqIE5vdGU6IHJlcXVpcmVkIHdoZW4gdXNpbmcgYSBjdXN0b20gZG9tYWluXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNlcnRPcmlnaW4/OiBhY20uSUNlcnRpZmljYXRlO1xuXG4gIC8qKlxuICAgKiBSb3V0ZTUzIHpvbmUgaW4gd2hpY2ggdG8gY3JlYXRlIG9wdGlvbmFsIGBkb21haW5OYW1lRWRnZWAgcmVjb3JkXG4gICAqL1xuICByZWFkb25seSByNTNab25lPzogcjUzLklIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBQYXRoIHByZWZpeCBvbiB0aGUgcm9vdCBvZiB0aGUgQVBJIEdhdGV3YXkgU3RhZ2VcbiAgICpcbiAgICogQGV4YW1wbGUgZGV2L1xuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVxdWlyZSBJQU0gYXV0aCBvbiBBUEkgR2F0ZXdheVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSUFNQXV0aG9yaXphdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIE1pY3JvQXBwcyBBUEkgR2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNaWNyb0FwcHNBUElHd3kge1xuICAvKipcbiAgICogRG9tYWluIE5hbWUgYXBwbGllZCB0byBBUEkgR2F0ZXdheSBvcmlnaW5cbiAgICovXG4gIHJlYWRvbmx5IGRuQXBwc09yaWdpbj86IGFwaWd3eS5JRG9tYWluTmFtZTtcblxuICAvKipcbiAgICogQVBJIEdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBNaWNyb0FwcHMgQVBJIEdhdGV3YXkgSFRUUCBBUEkgZW5kcG9pbnQsIG9wdGlvbmFsbHlcbiAqIHJlcXVpcmluZyBJQU0gYXV0aG9yaXphdGlvblxuICovXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzQVBJR3d5IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU1pY3JvQXBwc0FQSUd3eSB7XG4gIHByaXZhdGUgX2RuQXBwc09yaWdpbjogYXBpZ3d5LkRvbWFpbk5hbWUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQgZG5BcHBzT3JpZ2luKCk6IGFwaWd3eS5JRG9tYWluTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RuQXBwc09yaWdpbjtcbiAgfVxuXG4gIHByaXZhdGUgX2h0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xuICBwdWJsaWMgZ2V0IGh0dHBBcGkoKTogYXBpZ3d5Lkh0dHBBcGkge1xuICAgIHJldHVybiB0aGlzLl9odHRwQXBpO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1pY3JvQXBwc0FQSUd3eVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BzIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMucjUzWm9uZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLmRvbWFpbk5hbWVFZGdlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMucjUzWm9uZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRvbWFpbk5hbWVFZGdlID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIGVpdGhlciBvZiByNTNab25lIG9yIGRvbWFpbk5hbWVFZGdlIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZG9tYWluTmFtZU9yaWdpbiAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNlcnRPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJZiBkb21haW5OYW1lT3JpZ2luIGlzIHNldCB0aGVuIGNlcnRPcmlnaW4gbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlaXRoZXIgb2YgZG9tYWluTmFtZUVkZ2Ugb3IgY2VydE9yaWdpbiBhcmUgc2V0IHRoZW4gdGhlIG90aGVyIG11c3QgYmUgc2V0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcjUzWm9uZSxcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIHJvb3RQYXRoUHJlZml4LFxuICAgICAgcmVxdWlyZUlBTUF1dGhvcml6YXRpb24gPSB0cnVlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIC8vIEFQSSBHYXRld2F5IHVzZXMgdGhlIGBpZGAgc3RyaW5nIGFzIHRoZSBnYXRld2F5IG5hbWUgd2l0aG91dFxuICAgIC8vIGFueSByYW5kb21pemF0aW9uLi4uIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBuYW1lIGlzIHVuaXF1ZS1pc2hcbiAgICBjb25zdCBhcGlnYXRld2F5TmFtZSA9IGFzc2V0TmFtZVJvb3RcbiAgICAgID8gYCR7YXNzZXROYW1lUm9vdH0ke2Fzc2V0TmFtZVN1ZmZpeH1gXG4gICAgICA6IGAke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0tbWljcm9hcHBzYDtcblxuICAgIC8vXG4gICAgLy8gQVBJR2F0ZXdheSBkb21haW4gbmFtZXMgZm9yIENsb3VkRnJvbnQgYW5kIG9yaWdpblxuICAgIC8vXG4gICAgdGhpcy5faHR0cEFwaSA9IG5ldyBhcGlnd3kuSHR0cEFwaSh0aGlzLCAnZ3d5Jywge1xuICAgICAgYXBpTmFtZTogYXBpZ2F0ZXdheU5hbWUsXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IGZhbHNlLFxuICAgICAgZGVmYXVsdEF1dGhvcml6ZXI6IHJlcXVpcmVJQU1BdXRob3JpemF0aW9uID8gbmV3IGFwaWd3eUF1dGguSHR0cElhbUF1dGhvcml6ZXIoKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9odHRwQXBpLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICB9XG4gICAgLy8gVGhpcyBhbGxvd3MgdGhlIExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGlzIGFwaVxuICAgIFRhZ3Mub2YodGhpcy5faHR0cEFwaSkuYWRkKCdtaWNyb2FwcC1tYW5hZ2VkJywgJ3RydWUnKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgc3RhZ2VcbiAgICBjb25zdCBzdGFnZSA9IG5ldyBhcGlnd3kuSHR0cFN0YWdlKHRoaXMsICdzdGFnZScsIHtcbiAgICAgIGh0dHBBcGk6IHRoaXMuX2h0dHBBcGksXG4gICAgICBhdXRvRGVwbG95OiB0cnVlLFxuICAgICAgLy8gSWYgcm9vdFBhdGhQcmVmaXggaXMgbm90IGRlZmluZWQgdGhpcyB3aWxsIGJlIHRoZSAkZGVmYXVsdCBzdGFnZVxuICAgICAgc3RhZ2VOYW1lOiByb290UGF0aFByZWZpeCxcbiAgICB9KTtcbiAgICAvLyBUaGlzIGFsbG93cyB0aGUgTGFtYmRhIEAgRWRnZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoaXMgYXBpXG4gICAgVGFncy5vZihzdGFnZSkuYWRkKCdtaWNyb2FwcC1tYW5hZ2VkJywgJ3RydWUnKTtcblxuICAgIGlmIChkb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNlcnRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3JlYXRlIEN1c3RvbSBEb21haW5zIGZvciBBUEkgR2F0ZXdheVxuICAgICAgY29uc3QgZG5BcHBzRWRnZSA9IG5ldyBhcGlnd3kuRG9tYWluTmFtZSh0aGlzLCAnbWljcm9hcHBzLWFwcHMtZWRnZS1kbicsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZUVkZ2UsXG4gICAgICAgIGNlcnRpZmljYXRlOiBjZXJ0T3JpZ2luLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRuQXBwc0VkZ2UuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIGVkZ2UgZG9tYWluIG5hbWUgbWFwcGluZyBmb3IgdGhlIEFQSVxuICAgICAgY29uc3QgYXBpTWFwcGluZyA9IG5ldyBhcGlnd3kuQXBpTWFwcGluZyh0aGlzLCAnbWFwcGluZycsIHtcbiAgICAgICAgYXBpOiB0aGlzLl9odHRwQXBpLFxuICAgICAgICBkb21haW5OYW1lOiBkbkFwcHNFZGdlLFxuICAgICAgICBzdGFnZSxcbiAgICAgIH0pO1xuICAgICAgLy8gMjAyMi0wMS0xNiAtIENESyBpcyBzdGlsbCBnZW5lcmF0aW5nIENsb3VkRm9ybWF0aW9uIHdpdGggbm8gZGVwZW5kZW5jeVxuICAgICAgLy8gYmV0d2VlbiB0aGUgUjUzIFJlY29yZFNldCBhbmQgdGhlIE1hcHBpbmdcbiAgICAgIGFwaU1hcHBpbmcubm9kZS5hZGREZXBlbmRlbmN5KGRuQXBwc0VkZ2UpO1xuICAgIH1cblxuICAgIGlmIChkb21haW5OYW1lT3JpZ2luICE9PSB1bmRlZmluZWQgJiYgY2VydE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kbkFwcHNPcmlnaW4gPSBuZXcgYXBpZ3d5LkRvbWFpbk5hbWUodGhpcywgJ29yaWdpbi1kbicsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZU9yaWdpbixcbiAgICAgICAgY2VydGlmaWNhdGU6IGNlcnRPcmlnaW4sXG4gICAgICB9KTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmFibGUgYWNjZXNzIGxvZ3Mgb24gQVBJIEdhdGV3YXlcbiAgICBjb25zdCBhcGlBY2Nlc3NMb2dzID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ2xvZ3MnLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGFwaWdhdGV3YXlOYW1lXG4gICAgICAgID8gYC9hd3MvYXBpZ3d5LyR7YXBpZ2F0ZXdheU5hbWV9YFxuICAgICAgICA6IGAvYXdzL2FwaWd3eS8ke3RoaXMuaHR0cEFwaS5odHRwQXBpTmFtZX1gLFxuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIH0pO1xuICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwaUFjY2Vzc0xvZ3MuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgIH1cbiAgICBjb25zdCBjZm5TdGFnZSA9IHN0YWdlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGFwaWd3eWNmbi5DZm5TdGFnZTtcbiAgICBjZm5TdGFnZS5hY2Nlc3NMb2dTZXR0aW5ncyA9IHtcbiAgICAgIGRlc3RpbmF0aW9uQXJuOiBhcGlBY2Nlc3NMb2dzLmxvZ0dyb3VwQXJuLFxuICAgICAgZm9ybWF0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJlcXVlc3RJZDogJyRjb250ZXh0LnJlcXVlc3RJZCcsXG4gICAgICAgIHVzZXJBZ2VudDogJyRjb250ZXh0LmlkZW50aXR5LnVzZXJBZ2VudCcsXG4gICAgICAgIHNvdXJjZUlwOiAnJGNvbnRleHQuaWRlbnRpdHkuc291cmNlSXAnLFxuICAgICAgICByZXF1ZXN0VGltZTogJyRjb250ZXh0LnJlcXVlc3RUaW1lJyxcbiAgICAgICAgcmVxdWVzdFRpbWVFcG9jaDogJyRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2gnLFxuICAgICAgICBodHRwTWV0aG9kOiAnJGNvbnRleHQuaHR0cE1ldGhvZCcsXG4gICAgICAgIHBhdGg6ICckY29udGV4dC5wYXRoJyxcbiAgICAgICAgc3RhdHVzOiAnJGNvbnRleHQuc3RhdHVzJyxcbiAgICAgICAgcHJvdG9jb2w6ICckY29udGV4dC5wcm90b2NvbCcsXG4gICAgICAgIHJlc3BvbnNlTGVuZ3RoOiAnJGNvbnRleHQucmVzcG9uc2VMZW5ndGgnLFxuICAgICAgICBkb21haW5OYW1lOiAnJGNvbnRleHQuZG9tYWluTmFtZScsXG4gICAgICAgIGF1dGhvcml6ZXJFcnJvcjogJyRjb250ZXh0LmF1dGhvcml6ZXIuZXJyb3InLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIGxvZ2dpbmcgcm9sZVxuICAgIC8vIFRpcHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTExMDBcbiAgICBjb25zdCBhcGlHd3lMb2dSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdsb2dzLXJvbGUnLCB7XG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgICdzZXJ2aWNlLXJvbGUvQW1hem9uQVBJR2F0ZXdheVB1c2hUb0Nsb3VkV2F0Y2hMb2dzJyxcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG4gICAgYXBpQWNjZXNzTG9ncy5ncmFudFdyaXRlKGFwaUd3eUxvZ1JvbGUpO1xuXG4gICAgLy9cbiAgICAvLyBMZXQgQVBJIEdhdGV3YXkgYWNjZXB0IHJlcXVlc3RzIHVzaW5nIGRvbWFpbk5hbWVPcmlnaW5cbiAgICAvLyBUaGF0IGlzIHRoZSBvcmlnaW4gVVJJIHRoYXQgQ2xvdWRGcm9udCB1c2VzIGZvciB0aGlzIGdhdGV3YXkuXG4gICAgLy8gVGhlIGdhdGV3YXkgd2lsbCByZWZ1c2UgdGhlIHRyYWZmaWMgaWYgaXQgZG9lc24ndCBoYXZlIHRoZVxuICAgIC8vIGRvbWFpbiBuYW1lIHJlZ2lzdGVyZWQuXG4gICAgLy9cbiAgICBpZiAodGhpcy5fZG5BcHBzT3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBpbmdBcHBzQXBpcyA9IG5ldyBhcGlnd3kuQXBpTWFwcGluZyh0aGlzLCAnYXBpLW1hcC1vcmlnaW4nLCB7XG4gICAgICAgIGFwaTogdGhpcy5faHR0cEFwaSxcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5fZG5BcHBzT3JpZ2luLFxuICAgICAgICBzdGFnZSxcbiAgICAgIH0pO1xuICAgICAgLy8gMjAyMi0wMS0xNiAtIENESyBpcyBzdGlsbCBnZW5lcmF0aW5nIENsb3VkRm9ybWF0aW9uIHdpdGggbm8gZGVwZW5kZW5jeVxuICAgICAgLy8gYmV0d2VlbiB0aGUgUjUzIFJlY29yZFNldCBhbmQgdGhlIE1hcHBpbmdcbiAgICAgIG1hcHBpbmdBcHBzQXBpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5fZG5BcHBzT3JpZ2luKTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFwcGluZ0FwcHNBcGlzLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIENyZWF0ZSB0aGUgb3JpZ2luIG5hbWUgZm9yIEFQSSBHYXRld2F5XG4gICAgLy9cbiAgICBpZiAocjUzWm9uZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2RuQXBwc09yaWdpbikge1xuICAgICAgY29uc3QgcnJBcHBzT3JpZ2luID0gbmV3IHI1My5BUmVjb3JkKHRoaXMsICdvcmlnaW4tYXJlY29yZCcsIHtcbiAgICAgICAgem9uZTogcjUzWm9uZSxcbiAgICAgICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZU9yaWdpbixcbiAgICAgICAgdGFyZ2V0OiByNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgcjUzdGFyZ2V0cy5BcGlHYXRld2F5djJEb21haW5Qcm9wZXJ0aWVzKFxuICAgICAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLnJlZ2lvbmFsRG9tYWluTmFtZSxcbiAgICAgICAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5yZWdpb25hbEhvc3RlZFpvbmVJZCxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJyQXBwc09yaWdpbi5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/MicroAppsCF.d.ts
CHANGED
|
@@ -7,112 +7,83 @@ import * as r53 from 'aws-cdk-lib/aws-route53';
|
|
|
7
7
|
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
8
8
|
import { Construct } from 'constructs';
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* @experimental
|
|
10
|
+
* Represents a MicroApps CloudFront
|
|
13
11
|
*/
|
|
14
12
|
export interface IMicroAppsCF {
|
|
15
13
|
/**
|
|
16
|
-
*
|
|
14
|
+
* The CloudFront distribution
|
|
17
15
|
*/
|
|
18
16
|
readonly cloudFrontDistro: cf.Distribution;
|
|
19
17
|
}
|
|
20
18
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* @experimental
|
|
19
|
+
* Properties to initialize an instance of `MicroAppsCF`.
|
|
24
20
|
*/
|
|
25
21
|
export interface MicroAppsCFProps {
|
|
26
22
|
/**
|
|
27
|
-
*
|
|
23
|
+
* RemovalPolicy override for child resources
|
|
28
24
|
*
|
|
29
25
|
* Note: if set to DESTROY the S3 buckes will have `autoDeleteObjects` set to `true`
|
|
30
26
|
*
|
|
31
27
|
* @default - per resource default
|
|
32
|
-
* @experimental
|
|
33
28
|
*/
|
|
34
29
|
readonly removalPolicy?: RemovalPolicy;
|
|
35
30
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* @experimental
|
|
31
|
+
* S3 bucket origin for deployed applications
|
|
39
32
|
*/
|
|
40
33
|
readonly bucketAppsOrigin: cforigins.S3Origin;
|
|
41
34
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @experimental
|
|
35
|
+
* S3 bucket for CloudFront logs
|
|
45
36
|
*/
|
|
46
37
|
readonly bucketLogs?: s3.IBucket;
|
|
47
38
|
/**
|
|
48
|
-
*
|
|
39
|
+
* CloudFront Distribution domain name
|
|
49
40
|
*
|
|
41
|
+
* @example apps.pwrdrvr.com
|
|
50
42
|
* @default auto-assigned
|
|
51
|
-
* @experimental
|
|
52
|
-
* @example
|
|
53
|
-
*
|
|
54
|
-
* apps.pwrdrvr.com
|
|
55
43
|
*/
|
|
56
44
|
readonly domainNameEdge?: string;
|
|
57
45
|
/**
|
|
58
|
-
*
|
|
46
|
+
* API Gateway custom origin domain name
|
|
59
47
|
*
|
|
48
|
+
* @example apps.pwrdrvr.com
|
|
60
49
|
* @default - retrieved from httpApi, if possible
|
|
61
|
-
* @experimental
|
|
62
|
-
* @example
|
|
63
|
-
*
|
|
64
|
-
* apps.pwrdrvr.com
|
|
65
50
|
*/
|
|
66
51
|
readonly domainNameOrigin?: string;
|
|
67
52
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @experimental
|
|
53
|
+
* API Gateway v2 HTTP API for apps
|
|
71
54
|
*/
|
|
72
55
|
readonly httpApi: apigwy.HttpApi;
|
|
73
56
|
/**
|
|
74
|
-
*
|
|
57
|
+
* Optional asset name root
|
|
75
58
|
*
|
|
59
|
+
* @example microapps
|
|
76
60
|
* @default - resource names auto assigned
|
|
77
|
-
* @experimental
|
|
78
|
-
* @example
|
|
79
|
-
*
|
|
80
|
-
* microapps
|
|
81
61
|
*/
|
|
82
62
|
readonly assetNameRoot?: string;
|
|
83
63
|
/**
|
|
84
|
-
*
|
|
64
|
+
* Optional asset name suffix
|
|
85
65
|
*
|
|
66
|
+
* @example -dev-pr-12
|
|
86
67
|
* @default none
|
|
87
|
-
* @experimental
|
|
88
|
-
* @example
|
|
89
|
-
*
|
|
90
|
-
* -dev-pr-12
|
|
91
68
|
*/
|
|
92
69
|
readonly assetNameSuffix?: string;
|
|
93
70
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* @experimental
|
|
71
|
+
* ACM Certificate that covers `domainNameEdge` name
|
|
97
72
|
*/
|
|
98
73
|
readonly certEdge?: acm.ICertificate;
|
|
99
74
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* @experimental
|
|
75
|
+
* Route53 zone in which to create optional `domainNameEdge` record
|
|
103
76
|
*/
|
|
104
77
|
readonly r53Zone?: r53.IHostedZone;
|
|
105
78
|
/**
|
|
106
|
-
*
|
|
79
|
+
* Path prefix on the root of the CloudFront distribution
|
|
107
80
|
*
|
|
108
|
-
* @
|
|
109
|
-
* @example
|
|
110
|
-
*
|
|
111
|
-
* dev/
|
|
81
|
+
* @example dev/
|
|
112
82
|
*/
|
|
113
83
|
readonly rootPathPrefix?: string;
|
|
114
84
|
/**
|
|
115
|
-
*
|
|
85
|
+
* Create an extra Behavior (Route) for /api/ that allows
|
|
86
|
+
* API routes to have a period in them.
|
|
116
87
|
*
|
|
117
88
|
* When false API routes with a period in the path will get routed to S3.
|
|
118
89
|
*
|
|
@@ -120,84 +91,83 @@ export interface MicroAppsCFProps {
|
|
|
120
91
|
* even if they have a period in the path.
|
|
121
92
|
*
|
|
122
93
|
* @default true
|
|
123
|
-
* @experimental
|
|
124
94
|
*/
|
|
125
95
|
readonly createAPIPathRoute?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Create an extra Behavior (Route) for /_next/data/
|
|
98
|
+
* This route is used by Next.js to load data from the API Gateway
|
|
99
|
+
* on `getServerSideProps` calls. The requests can end in `.json`,
|
|
100
|
+
* which would cause them to be routed to S3 if this route is not created.
|
|
101
|
+
*
|
|
102
|
+
* When false API routes with a period in the path will get routed to S3.
|
|
103
|
+
*
|
|
104
|
+
* When true API routes that contain /_next/data/ in the path will get routed to API Gateway
|
|
105
|
+
* even if they have a period in the path.
|
|
106
|
+
*
|
|
107
|
+
* @default true
|
|
108
|
+
*/
|
|
109
|
+
readonly createNextDataPathRoute?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Configuration of the edge to origin lambda functions
|
|
112
|
+
*
|
|
113
|
+
* @defaunt - no edge to API Gateway origin functions added
|
|
114
|
+
*/
|
|
115
|
+
readonly edgeToOriginLambdas?: cf.EdgeLambda[];
|
|
126
116
|
}
|
|
127
117
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* @experimental
|
|
118
|
+
* Options for the `CreateAPIOriginPolicy`
|
|
131
119
|
*/
|
|
132
120
|
export interface CreateAPIOriginPolicyOptions {
|
|
133
121
|
/**
|
|
134
|
-
*
|
|
122
|
+
* Optional asset name root
|
|
135
123
|
*
|
|
124
|
+
* @example microapps
|
|
136
125
|
* @default - resource names auto assigned
|
|
137
|
-
* @experimental
|
|
138
|
-
* @example
|
|
139
|
-
*
|
|
140
|
-
* microapps
|
|
141
126
|
*/
|
|
142
127
|
readonly assetNameRoot?: string;
|
|
143
128
|
/**
|
|
144
|
-
*
|
|
129
|
+
* Optional asset name suffix
|
|
145
130
|
*
|
|
131
|
+
* @example -dev-pr-12
|
|
146
132
|
* @default none
|
|
147
|
-
* @experimental
|
|
148
|
-
* @example
|
|
149
|
-
*
|
|
150
|
-
* -dev-pr-12
|
|
151
133
|
*/
|
|
152
134
|
readonly assetNameSuffix?: string;
|
|
153
135
|
/**
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
136
|
+
* Edge domain name used by CloudFront - If set a custom
|
|
137
|
+
* OriginRequestPolicy will be created that prevents
|
|
138
|
+
* the Host header from being passed to the origin.
|
|
157
139
|
*/
|
|
158
140
|
readonly domainNameEdge?: string;
|
|
159
141
|
}
|
|
160
142
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* @experimental
|
|
143
|
+
* Options for `AddRoutes`
|
|
164
144
|
*/
|
|
165
145
|
export interface AddRoutesOptions {
|
|
166
146
|
/**
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
* @experimental
|
|
147
|
+
* API Gateway CloudFront Origin for API calls
|
|
170
148
|
*/
|
|
171
149
|
readonly apiGwyOrigin: cf.IOrigin;
|
|
172
150
|
/**
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
* @experimental
|
|
151
|
+
* S3 Bucket CloudFront Origin for static assets
|
|
176
152
|
*/
|
|
177
153
|
readonly bucketAppsOrigin: cforigins.S3Origin;
|
|
178
154
|
/**
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* @experimental
|
|
155
|
+
* CloudFront Distribution to add the Behaviors (Routes) to
|
|
182
156
|
*/
|
|
183
157
|
readonly distro: cf.Distribution;
|
|
184
158
|
/**
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* @experimental
|
|
159
|
+
* Origin Request policy for API Gateway Origin
|
|
188
160
|
*/
|
|
189
161
|
readonly apigwyOriginRequestPolicy: cf.IOriginRequestPolicy;
|
|
190
162
|
/**
|
|
191
|
-
*
|
|
163
|
+
* Path prefix on the root of the CloudFront distribution
|
|
192
164
|
*
|
|
193
|
-
* @
|
|
194
|
-
* @example
|
|
195
|
-
*
|
|
196
|
-
* dev/
|
|
165
|
+
* @example dev/
|
|
197
166
|
*/
|
|
198
167
|
readonly rootPathPrefix?: string;
|
|
199
168
|
/**
|
|
200
|
-
*
|
|
169
|
+
* Create an extra Behavior (Route) for /api/ that allows
|
|
170
|
+
* API routes to have a period in them.
|
|
201
171
|
*
|
|
202
172
|
* When false API routes with a period in the path will get routed to S3.
|
|
203
173
|
*
|
|
@@ -205,18 +175,33 @@ export interface AddRoutesOptions {
|
|
|
205
175
|
* even if they have a period in the path.
|
|
206
176
|
*
|
|
207
177
|
* @default true
|
|
208
|
-
* @experimental
|
|
209
178
|
*/
|
|
210
179
|
readonly createAPIPathRoute?: boolean;
|
|
180
|
+
/**
|
|
181
|
+
* Create an extra Behavior (Route) for /_next/data/
|
|
182
|
+
* This route is used by Next.js to load data from the API Gateway
|
|
183
|
+
* on `getServerSideProps` calls. The requests can end in `.json`,
|
|
184
|
+
* which would cause them to be routed to S3 if this route is not created.
|
|
185
|
+
*
|
|
186
|
+
* When false API routes with a period in the path will get routed to S3.
|
|
187
|
+
*
|
|
188
|
+
* When true API routes that contain /_next/data/ in the path will get routed to API Gateway
|
|
189
|
+
* even if they have a period in the path.
|
|
190
|
+
*
|
|
191
|
+
* @default true
|
|
192
|
+
*/
|
|
193
|
+
readonly createNextDataPathRoute?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Edge lambdas to associate with the API Gateway routes
|
|
196
|
+
*/
|
|
197
|
+
readonly apigwyEdgeFunctions?: cf.EdgeLambda[];
|
|
211
198
|
}
|
|
212
199
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* @experimental
|
|
200
|
+
* Create a new MicroApps CloudFront Distribution.
|
|
216
201
|
*/
|
|
217
202
|
export declare class MicroAppsCF extends Construct implements IMicroAppsCF {
|
|
218
203
|
/**
|
|
219
|
-
*
|
|
204
|
+
* Create or get the origin request policy
|
|
220
205
|
*
|
|
221
206
|
* If a custom domain name is NOT used for the origin then a policy
|
|
222
207
|
* will be created.
|
|
@@ -225,22 +210,18 @@ export declare class MicroAppsCF extends Construct implements IMicroAppsCF {
|
|
|
225
210
|
* policy will be returned. This policy passes the Host header to the
|
|
226
211
|
* origin, which is fine when using a custom domain name on the origin.
|
|
227
212
|
*
|
|
228
|
-
* @
|
|
213
|
+
* @param _scope
|
|
214
|
+
* @param _props
|
|
229
215
|
*/
|
|
230
|
-
static createAPIOriginPolicy(
|
|
216
|
+
static createAPIOriginPolicy(_scope: Construct, _props: CreateAPIOriginPolicyOptions): cf.IOriginRequestPolicy;
|
|
231
217
|
/**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
* @
|
|
218
|
+
* Add API Gateway and S3 routes to an existing CloudFront Distribution
|
|
219
|
+
* @param _scope
|
|
220
|
+
* @param props
|
|
235
221
|
*/
|
|
236
222
|
static addRoutes(_scope: Construct, props: AddRoutesOptions): void;
|
|
237
223
|
private _cloudFrontDistro;
|
|
238
|
-
/**
|
|
239
|
-
* @experimental
|
|
240
|
-
*/
|
|
241
224
|
get cloudFrontDistro(): cf.Distribution;
|
|
242
|
-
/**
|
|
243
|
-
* @experimental
|
|
244
|
-
*/
|
|
245
225
|
constructor(scope: Construct, id: string, props: MicroAppsCFProps);
|
|
246
226
|
}
|
|
227
|
+
//# sourceMappingURL=MicroAppsCF.d.ts.map
|