@pwrdrvr/microapps-cdk 0.2.9 → 0.2.12

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.
Files changed (42) hide show
  1. package/.gitattributes +18 -18
  2. package/.jsii +1264 -165
  3. package/API.md +511 -8
  4. package/README.md +29 -0
  5. package/changelog.md +2 -0
  6. package/lib/MicroApps.d.ts +126 -105
  7. package/lib/MicroApps.d.ts.map +1 -0
  8. package/lib/MicroApps.js +32 -30
  9. package/lib/MicroAppsAPIGwy.d.ts +28 -61
  10. package/lib/MicroAppsAPIGwy.d.ts.map +1 -0
  11. package/lib/MicroAppsAPIGwy.js +14 -23
  12. package/lib/MicroAppsCF.d.ts +85 -104
  13. package/lib/MicroAppsCF.d.ts.map +1 -0
  14. package/lib/MicroAppsCF.js +58 -41
  15. package/lib/MicroAppsEdgeToOrigin.d.ts +108 -0
  16. package/lib/MicroAppsEdgeToOrigin.d.ts.map +1 -0
  17. package/lib/MicroAppsEdgeToOrigin.js +139 -0
  18. package/lib/MicroAppsS3.d.ts +19 -69
  19. package/lib/MicroAppsS3.d.ts.map +1 -0
  20. package/lib/MicroAppsS3.js +5 -32
  21. package/lib/MicroAppsSvcs.d.ts +58 -86
  22. package/lib/MicroAppsSvcs.d.ts.map +1 -0
  23. package/lib/MicroAppsSvcs.js +36 -95
  24. package/lib/MicroAppsTable.d.ts +60 -0
  25. package/lib/MicroAppsTable.d.ts.map +1 -0
  26. package/lib/MicroAppsTable.js +42 -0
  27. package/lib/index.d.ts +3 -0
  28. package/lib/index.d.ts.map +1 -0
  29. package/lib/index.js +3 -1
  30. package/lib/microapps-deployer/index.js +174 -113
  31. package/lib/microapps-deployer/index.js.map +3 -3
  32. package/lib/microapps-edge-to-origin/index.js +97 -0
  33. package/lib/microapps-edge-to-origin/index.js.map +7 -0
  34. package/lib/microapps-router/index.js +54 -69
  35. package/lib/microapps-router/index.js.map +3 -3
  36. package/lib/microapps-router/templates/appFrame.html +0 -0
  37. package/lib/utils/ReverseDomain.d.ts +1 -0
  38. package/lib/utils/ReverseDomain.d.ts.map +1 -0
  39. package/package.json +29 -24
  40. package/releasetag.txt +1 -0
  41. package/version.txt +1 -0
  42. package/patches/@aws-cdk+aws-apigatewayv2-alpha+2.8.0-alpha.0.patch +0 -39
@@ -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
- * (experimental) Properties to initialize an instance of `MicroAppsAPIGwy`.
8
- *
9
- * @experimental
7
+ * Properties to initialize an instance of `MicroAppsAPIGwy`.
10
8
  */
11
9
  export interface MicroAppsAPIGwyProps {
12
10
  /**
13
- * (experimental) RemovalPolicy override for child resources.
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
- * (experimental) CloudFront edge domain name.
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
- * (experimental) API Gateway origin domain name.
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
- * (experimental) Optional asset name root.
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
- * (experimental) Optional asset name suffix.
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
- * (experimental) Optional local region ACM certificate to use for API Gateway Note: required when using a custom domain.
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
- * (experimental) Route53 zone in which to create optional `domainNameEdge` record.
70
- *
71
- * @experimental
54
+ * Route53 zone in which to create optional `domainNameEdge` record
72
55
  */
73
56
  readonly r53Zone?: r53.IHostedZone;
74
57
  /**
75
- * (experimental) Path prefix on the root of the API Gateway Stage.
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
- * (experimental) Represents a MicroApps API Gateway.
87
- *
88
- * @experimental
72
+ * Represents a MicroApps API Gateway
89
73
  */
90
74
  export interface IMicroAppsAPIGwy {
91
75
  /**
92
- * (experimental) Domain Name applied to API Gateway origin.
93
- *
94
- * @experimental
76
+ * Domain Name applied to API Gateway origin
95
77
  */
96
78
  readonly dnAppsOrigin?: apigwy.IDomainName;
97
79
  /**
98
- * (experimental) API Gateway.
99
- *
100
- * @experimental
80
+ * API Gateway
101
81
  */
102
82
  readonly httpApi: apigwy.HttpApi;
103
83
  }
104
84
  /**
105
- * (experimental) Create a new MicroApps API Gateway HTTP API endpoint.
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"}
@@ -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
- * (experimental) Create a new MicroApps API Gateway HTTP API endpoint.
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 ((props.domainNameOrigin === undefined && props.certOrigin !== undefined) ||
32
- (props.domainNameOrigin !== undefined && props.certOrigin === undefined)) {
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 domainNameOrigin or certOrigin are set then the other must be set');
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', {
@@ -157,24 +158,14 @@ class MicroAppsAPIGwy extends constructs_1.Construct {
157
158
  }
158
159
  }
159
160
  }
160
- /**
161
- * (experimental) Domain Name applied to API Gateway origin.
162
- *
163
- * @experimental
164
- */
165
161
  get dnAppsOrigin() {
166
162
  return this._dnAppsOrigin;
167
163
  }
168
- /**
169
- * (experimental) API Gateway.
170
- *
171
- * @experimental
172
- */
173
164
  get httpApi() {
174
165
  return this._httpApi;
175
166
  }
176
167
  }
177
168
  exports.MicroAppsAPIGwy = MicroAppsAPIGwy;
178
169
  _a = JSII_RTTI_SYMBOL_1;
179
- MicroAppsAPIGwy[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsAPIGwy", version: "0.2.9" };
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQVBJR3d5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0FQSUd3eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUEwRDtBQUMxRCw2Q0FBbUQ7QUFHbkQsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsOERBQThEO0FBQzlELDJDQUF1Qzs7Ozs7O0FBdUN2QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7Ozs7SUFXNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUNFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUM7WUFDbkUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxFQUNuRTtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztTQUM5RjtRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO1lBQ3hFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxFQUN4RTtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLENBQ2pGLENBQUM7U0FDSDtRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztZQUN0RSxDQUFD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QUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDOzs7Ozs7SUFHRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBVEgsMENBOExDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXBpZ3d5IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djItYWxwaGEnO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBhcGlnd3ljZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mic7XG5pbXBvcnQgKiBhcyBhY20gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHI1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyByNTN0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBNaWNyb0FwcHNBUElHd3lQcm9wcyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG9tYWluTmFtZUVkZ2U/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG9tYWluTmFtZU9yaWdpbj86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhc3NldE5hbWVTdWZmaXg/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2VydE9yaWdpbj86IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByNTNab25lPzogcjUzLklIb3N0ZWRab25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcm9vdFBhdGhQcmVmaXg/OiBzdHJpbmc7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBJTWljcm9BcHBzQVBJR3d5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG5BcHBzT3JpZ2luPzogYXBpZ3d5LklEb21haW5OYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGh0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzQVBJR3d5IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU1pY3JvQXBwc0FQSUd3eSB7XG4gIHByaXZhdGUgX2RuQXBwc09yaWdpbjogYXBpZ3d5LkRvbWFpbk5hbWUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQgZG5BcHBzT3JpZ2luKCk6IGFwaWd3eS5JRG9tYWluTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RuQXBwc09yaWdpbjtcbiAgfVxuXG4gIHByaXZhdGUgX2h0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xuICBwdWJsaWMgZ2V0IGh0dHBBcGkoKTogYXBpZ3d5Lkh0dHBBcGkge1xuICAgIHJldHVybiB0aGlzLl9odHRwQXBpO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBNaWNyb0FwcHNBUElHd3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wcyBjYW5ub3QgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHByb3BzLnI1M1pvbmUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgKHByb3BzLnI1M1pvbmUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kb21haW5OYW1lRWRnZSA9PT0gdW5kZWZpbmVkKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJZiBlaXRoZXIgb2YgcjUzWm9uZSBvciBkb21haW5OYW1lRWRnZSBhcmUgc2V0IHRoZW4gdGhlIG90aGVyIG11c3QgYmUgc2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHByb3BzLmRvbWFpbk5hbWVPcmlnaW4gPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMuZG9tYWluTmFtZU9yaWdpbiAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNlcnRPcmlnaW4gPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVpdGhlciBvZiBkb21haW5OYW1lT3JpZ2luIG9yIGNlcnRPcmlnaW4gYXJlIHNldCB0aGVuIHRoZSBvdGhlciBtdXN0IGJlIHNldCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChwcm9wcy5kb21haW5OYW1lRWRnZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLmNlcnRPcmlnaW4gIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgIChwcm9wcy5kb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNlcnRPcmlnaW4gPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVpdGhlciBvZiBkb21haW5OYW1lT3JpZ2luIG9yIGNlcnRPcmlnaW4gYXJlIHNldCB0aGVuIHRoZSBvdGhlciBtdXN0IGJlIHNldCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHI1M1pvbmUsXG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBjZXJ0T3JpZ2luLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvLyBBUEkgR2F0ZXdheSB1c2VzIHRoZSBgaWRgIHN0cmluZyBhcyB0aGUgZ2F0ZXdheSBuYW1lIHdpdGhvdXRcbiAgICAvLyBhbnkgcmFuZG9taXphdGlvbi4uLiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB1bmlxdWUtaXNoXG4gICAgY29uc3QgYXBpZ2F0ZXdheU5hbWUgPSBhc3NldE5hbWVSb290XG4gICAgICA/IGAke2Fzc2V0TmFtZVJvb3R9JHthc3NldE5hbWVTdWZmaXh9YFxuICAgICAgOiBgJHtTdGFjay5vZih0aGlzKS5zdGFja05hbWV9LW1pY3JvYXBwc2A7XG5cbiAgICAvL1xuICAgIC8vIEFQSUdhdGV3YXkgZG9tYWluIG5hbWVzIGZvciBDbG91ZEZyb250IGFuZCBvcmlnaW5cbiAgICAvL1xuICAgIHRoaXMuX2h0dHBBcGkgPSBuZXcgYXBpZ3d5Lkh0dHBBcGkodGhpcywgJ2d3eScsIHtcbiAgICAgIGFwaU5hbWU6IGFwaWdhdGV3YXlOYW1lLFxuICAgICAgY3JlYXRlRGVmYXVsdFN0YWdlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9odHRwQXBpLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHN0YWdlXG4gICAgY29uc3Qgc3RhZ2UgPSBuZXcgYXBpZ3d5Lkh0dHBTdGFnZSh0aGlzLCAnc3RhZ2UnLCB7XG4gICAgICBodHRwQXBpOiB0aGlzLl9odHRwQXBpLFxuICAgICAgYXV0b0RlcGxveTogdHJ1ZSxcbiAgICAgIC8vIElmIHJvb3RQYXRoUHJlZml4IGlzIG5vdCBkZWZpbmVkIHRoaXMgd2lsbCBiZSB0aGUgJGRlZmF1bHQgc3RhZ2VcbiAgICAgIHN0YWdlTmFtZTogcm9vdFBhdGhQcmVmaXgsXG4gICAgfSk7XG5cbiAgICBpZiAoZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCAmJiBjZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENyZWF0ZSBDdXN0b20gRG9tYWlucyBmb3IgQVBJIEdhdGV3YXlcbiAgICAgIGNvbnN0IGRuQXBwc0VkZ2UgPSBuZXcgYXBpZ3d5LkRvbWFpbk5hbWUodGhpcywgJ21pY3JvYXBwcy1hcHBzLWVkZ2UtZG4nLCB7XG4gICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWVFZGdlLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogY2VydE9yaWdpbixcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkbkFwcHNFZGdlLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBlZGdlIGRvbWFpbiBuYW1lIG1hcHBpbmcgZm9yIHRoZSBBUElcbiAgICAgIGNvbnN0IGFwaU1hcHBpbmcgPSBuZXcgYXBpZ3d5LkFwaU1hcHBpbmcodGhpcywgJ21hcHBpbmcnLCB7XG4gICAgICAgIGFwaTogdGhpcy5faHR0cEFwaSxcbiAgICAgICAgZG9tYWluTmFtZTogZG5BcHBzRWRnZSxcbiAgICAgICAgc3RhZ2UsXG4gICAgICB9KTtcbiAgICAgIC8vIDIwMjItMDEtMTYgLSBDREsgaXMgc3RpbGwgZ2VuZXJhdGluZyBDbG91ZEZvcm1hdGlvbiB3aXRoIG5vIGRlcGVuZGVuY3lcbiAgICAgIC8vIGJldHdlZW4gdGhlIFI1MyBSZWNvcmRTZXQgYW5kIHRoZSBNYXBwaW5nXG4gICAgICBhcGlNYXBwaW5nLm5vZGUuYWRkRGVwZW5kZW5jeShkbkFwcHNFZGdlKTtcbiAgICB9XG5cbiAgICBpZiAoZG9tYWluTmFtZU9yaWdpbiAhPT0gdW5kZWZpbmVkICYmIGNlcnRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luID0gbmV3IGFwaWd3eS5Eb21haW5OYW1lKHRoaXMsICdvcmlnaW4tZG4nLCB7XG4gICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICAgIGNlcnRpZmljYXRlOiBjZXJ0T3JpZ2luLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW5hYmxlIGFjY2VzcyBsb2dzIG9uIEFQSSBHYXRld2F5XG4gICAgY29uc3QgYXBpQWNjZXNzTG9ncyA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdsb2dzJywge1xuICAgICAgbG9nR3JvdXBOYW1lOiBhcGlnYXRld2F5TmFtZVxuICAgICAgICA/IGAvYXdzL2FwaWd3eS8ke2FwaWdhdGV3YXlOYW1lfWBcbiAgICAgICAgOiBgL2F3cy9hcGlnd3kvJHt0aGlzLmh0dHBBcGkuaHR0cEFwaU5hbWV9YCxcbiAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICB9KTtcbiAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcGlBY2Nlc3NMb2dzLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICB9XG4gICAgY29uc3QgY2ZuU3RhZ2UgPSBzdGFnZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhcGlnd3ljZm4uQ2ZuU3RhZ2U7XG4gICAgY2ZuU3RhZ2UuYWNjZXNzTG9nU2V0dGluZ3MgPSB7XG4gICAgICBkZXN0aW5hdGlvbkFybjogYXBpQWNjZXNzTG9ncy5sb2dHcm91cEFybixcbiAgICAgIGZvcm1hdDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXF1ZXN0SWQ6ICckY29udGV4dC5yZXF1ZXN0SWQnLFxuICAgICAgICB1c2VyQWdlbnQ6ICckY29udGV4dC5pZGVudGl0eS51c2VyQWdlbnQnLFxuICAgICAgICBzb3VyY2VJcDogJyRjb250ZXh0LmlkZW50aXR5LnNvdXJjZUlwJyxcbiAgICAgICAgcmVxdWVzdFRpbWU6ICckY29udGV4dC5yZXF1ZXN0VGltZScsXG4gICAgICAgIHJlcXVlc3RUaW1lRXBvY2g6ICckY29udGV4dC5yZXF1ZXN0VGltZUVwb2NoJyxcbiAgICAgICAgaHR0cE1ldGhvZDogJyRjb250ZXh0Lmh0dHBNZXRob2QnLFxuICAgICAgICBwYXRoOiAnJGNvbnRleHQucGF0aCcsXG4gICAgICAgIHN0YXR1czogJyRjb250ZXh0LnN0YXR1cycsXG4gICAgICAgIHByb3RvY29sOiAnJGNvbnRleHQucHJvdG9jb2wnLFxuICAgICAgICByZXNwb25zZUxlbmd0aDogJyRjb250ZXh0LnJlc3BvbnNlTGVuZ3RoJyxcbiAgICAgICAgZG9tYWluTmFtZTogJyRjb250ZXh0LmRvbWFpbk5hbWUnLFxuICAgICAgICBhdXRob3JpemVyRXJyb3I6ICckY29udGV4dC5hdXRob3JpemVyLmVycm9yJyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSBsb2dnaW5nIHJvbGVcbiAgICAvLyBUaXBzOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzExMTAwXG4gICAgY29uc3QgYXBpR3d5TG9nUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnbG9ncy1yb2xlJywge1xuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAnc2VydmljZS1yb2xlL0FtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncycsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICAgIGFwaUFjY2Vzc0xvZ3MuZ3JhbnRXcml0ZShhcGlHd3lMb2dSb2xlKTtcblxuICAgIC8vXG4gICAgLy8gTGV0IEFQSSBHYXRld2F5IGFjY2VwdCByZXF1ZXN0cyB1c2luZyBkb21haW5OYW1lT3JpZ2luXG4gICAgLy8gVGhhdCBpcyB0aGUgb3JpZ2luIFVSSSB0aGF0IENsb3VkRnJvbnQgdXNlcyBmb3IgdGhpcyBnYXRld2F5LlxuICAgIC8vIFRoZSBnYXRld2F5IHdpbGwgcmVmdXNlIHRoZSB0cmFmZmljIGlmIGl0IGRvZXNuJ3QgaGF2ZSB0aGVcbiAgICAvLyBkb21haW4gbmFtZSByZWdpc3RlcmVkLlxuICAgIC8vXG4gICAgaWYgKHRoaXMuX2RuQXBwc09yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBtYXBwaW5nQXBwc0FwaXMgPSBuZXcgYXBpZ3d5LkFwaU1hcHBpbmcodGhpcywgJ2FwaS1tYXAtb3JpZ2luJywge1xuICAgICAgICBhcGk6IHRoaXMuX2h0dHBBcGksXG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuX2RuQXBwc09yaWdpbixcbiAgICAgICAgc3RhZ2UsXG4gICAgICB9KTtcbiAgICAgIC8vIDIwMjItMDEtMTYgLSBDREsgaXMgc3RpbGwgZ2VuZXJhdGluZyBDbG91ZEZvcm1hdGlvbiB3aXRoIG5vIGRlcGVuZGVuY3lcbiAgICAgIC8vIGJldHdlZW4gdGhlIFI1MyBSZWNvcmRTZXQgYW5kIHRoZSBNYXBwaW5nXG4gICAgICBtYXBwaW5nQXBwc0FwaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuX2RuQXBwc09yaWdpbik7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcHBpbmdBcHBzQXBpcy5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIG9yaWdpbiBuYW1lIGZvciBBUEkgR2F0ZXdheVxuICAgIC8vXG4gICAgaWYgKHI1M1pvbmUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9kbkFwcHNPcmlnaW4pIHtcbiAgICAgIGNvbnN0IHJyQXBwc09yaWdpbiA9IG5ldyByNTMuQVJlY29yZCh0aGlzLCAnb3JpZ2luLWFyZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IHI1M1pvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICAgIHRhcmdldDogcjUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IHI1M3RhcmdldHMuQXBpR2F0ZXdheXYyRG9tYWluUHJvcGVydGllcyhcbiAgICAgICAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5yZWdpb25hbERvbWFpbk5hbWUsXG4gICAgICAgICAgICB0aGlzLl9kbkFwcHNPcmlnaW4ucmVnaW9uYWxIb3N0ZWRab25lSWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByckFwcHNPcmlnaW4uYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
170
+ MicroAppsAPIGwy[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroAppsAPIGwy", version: "0.2.12" };
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzQVBJR3d5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwc0FQSUd3eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUEwRDtBQUMxRCwwRUFBMEU7QUFDMUUsNkNBQXlEO0FBR3pELDJDQUEyQztBQUMzQyw2Q0FBNkM7QUFDN0MsK0NBQStDO0FBQy9DLDhEQUE4RDtBQUM5RCwyQ0FBdUM7QUEyRnZDOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQVc1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM5QztRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztZQUNuRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLEVBQ25FO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztTQUMzRTtRQUVELElBQ0UsQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQztZQUN0RSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLEVBQ3RF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LENBQUMsNEJBQTRCLENBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQ3hDLENBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQy9CLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQztJQTVMRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFHRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O0FBVEgsMENBK0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXBpZ3d5IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djItYWxwaGEnO1xuaW1wb3J0ICogYXMgYXBpZ3d5QXV0aCBmcm9tICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXJzLWFscGhhJztcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYXBpZ3d5Y2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyByNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcjUzdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBgTWljcm9BcHBzQVBJR3d5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWNyb0FwcHNBUElHd3lQcm9wcyB7XG4gIC8qKlxuICAgKiBSZW1vdmFsUG9saWN5IG92ZXJyaWRlIGZvciBjaGlsZCByZXNvdXJjZXNcbiAgICpcbiAgICogTm90ZTogaWYgc2V0IHRvIERFU1RST1kgdGhlIFMzIGJ1Y2tlcyB3aWxsIGhhdmUgYGF1dG9EZWxldGVPYmplY3RzYCBzZXQgdG8gYHRydWVgXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVyIHJlc291cmNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IGVkZ2UgZG9tYWluIG5hbWVcbiAgICpcbiAgICogQGV4YW1wbGUgYXBwcy5wd3JkcnZyLmNvbVxuICAgKiBAZGVmYXVsdCBhdXRvLWFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lRWRnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQVBJIEdhdGV3YXkgb3JpZ2luIGRvbWFpbiBuYW1lXG4gICAqXG4gICAqIEBleGFtcGxlIGFwcHMtb3JpZ2luLnB3cmRydnIuY29tXG4gICAqIEBkZWZhdWx0IGF1dG8tYXNzaWduZWRcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgcm9vdFxuICAgKlxuICAgKiBAZXhhbXBsZSBtaWNyb2FwcHNcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBuYW1lcyBhdXRvIGFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhc3NldCBuYW1lIHN1ZmZpeFxuICAgKlxuICAgKiBAZXhhbXBsZSAtZGV2LXByLTEyXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgbG9jYWwgcmVnaW9uIEFDTSBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIEFQSSBHYXRld2F5XG4gICAqIE5vdGU6IHJlcXVpcmVkIHdoZW4gdXNpbmcgYSBjdXN0b20gZG9tYWluXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNlcnRPcmlnaW4/OiBhY20uSUNlcnRpZmljYXRlO1xuXG4gIC8qKlxuICAgKiBSb3V0ZTUzIHpvbmUgaW4gd2hpY2ggdG8gY3JlYXRlIG9wdGlvbmFsIGBkb21haW5OYW1lRWRnZWAgcmVjb3JkXG4gICAqL1xuICByZWFkb25seSByNTNab25lPzogcjUzLklIb3N0ZWRab25lO1xuXG4gIC8qKlxuICAgKiBQYXRoIHByZWZpeCBvbiB0aGUgcm9vdCBvZiB0aGUgQVBJIEdhdGV3YXkgU3RhZ2VcbiAgICpcbiAgICogQGV4YW1wbGUgZGV2L1xuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVxdWlyZSBJQU0gYXV0aCBvbiBBUEkgR2F0ZXdheVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSUFNQXV0aG9yaXphdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIE1pY3JvQXBwcyBBUEkgR2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNaWNyb0FwcHNBUElHd3kge1xuICAvKipcbiAgICogRG9tYWluIE5hbWUgYXBwbGllZCB0byBBUEkgR2F0ZXdheSBvcmlnaW5cbiAgICovXG4gIHJlYWRvbmx5IGRuQXBwc09yaWdpbj86IGFwaWd3eS5JRG9tYWluTmFtZTtcblxuICAvKipcbiAgICogQVBJIEdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBNaWNyb0FwcHMgQVBJIEdhdGV3YXkgSFRUUCBBUEkgZW5kcG9pbnQsIG9wdGlvbmFsbHlcbiAqIHJlcXVpcmluZyBJQU0gYXV0aG9yaXphdGlvblxuICovXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzQVBJR3d5IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU1pY3JvQXBwc0FQSUd3eSB7XG4gIHByaXZhdGUgX2RuQXBwc09yaWdpbjogYXBpZ3d5LkRvbWFpbk5hbWUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQgZG5BcHBzT3JpZ2luKCk6IGFwaWd3eS5JRG9tYWluTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RuQXBwc09yaWdpbjtcbiAgfVxuXG4gIHByaXZhdGUgX2h0dHBBcGk6IGFwaWd3eS5IdHRwQXBpO1xuICBwdWJsaWMgZ2V0IGh0dHBBcGkoKTogYXBpZ3d5Lkh0dHBBcGkge1xuICAgIHJldHVybiB0aGlzLl9odHRwQXBpO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1pY3JvQXBwc0FQSUd3eVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BzIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMucjUzWm9uZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLmRvbWFpbk5hbWVFZGdlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMucjUzWm9uZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRvbWFpbk5hbWVFZGdlID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIGVpdGhlciBvZiByNTNab25lIG9yIGRvbWFpbk5hbWVFZGdlIGFyZSBzZXQgdGhlbiB0aGUgb3RoZXIgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZG9tYWluTmFtZU9yaWdpbiAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNlcnRPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJZiBkb21haW5OYW1lT3JpZ2luIGlzIHNldCB0aGVuIGNlcnRPcmlnaW4gbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAocHJvcHMuZG9tYWluTmFtZUVkZ2UgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jZXJ0T3JpZ2luID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlaXRoZXIgb2YgZG9tYWluTmFtZUVkZ2Ugb3IgY2VydE9yaWdpbiBhcmUgc2V0IHRoZW4gdGhlIG90aGVyIG11c3QgYmUgc2V0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcjUzWm9uZSxcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIHJvb3RQYXRoUHJlZml4LFxuICAgICAgcmVxdWlyZUlBTUF1dGhvcml6YXRpb24gPSB0cnVlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIC8vIEFQSSBHYXRld2F5IHVzZXMgdGhlIGBpZGAgc3RyaW5nIGFzIHRoZSBnYXRld2F5IG5hbWUgd2l0aG91dFxuICAgIC8vIGFueSByYW5kb21pemF0aW9uLi4uIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBuYW1lIGlzIHVuaXF1ZS1pc2hcbiAgICBjb25zdCBhcGlnYXRld2F5TmFtZSA9IGFzc2V0TmFtZVJvb3RcbiAgICAgID8gYCR7YXNzZXROYW1lUm9vdH0ke2Fzc2V0TmFtZVN1ZmZpeH1gXG4gICAgICA6IGAke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0tbWljcm9hcHBzYDtcblxuICAgIC8vXG4gICAgLy8gQVBJR2F0ZXdheSBkb21haW4gbmFtZXMgZm9yIENsb3VkRnJvbnQgYW5kIG9yaWdpblxuICAgIC8vXG4gICAgdGhpcy5faHR0cEFwaSA9IG5ldyBhcGlnd3kuSHR0cEFwaSh0aGlzLCAnZ3d5Jywge1xuICAgICAgYXBpTmFtZTogYXBpZ2F0ZXdheU5hbWUsXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IGZhbHNlLFxuICAgICAgZGVmYXVsdEF1dGhvcml6ZXI6IHJlcXVpcmVJQU1BdXRob3JpemF0aW9uID8gbmV3IGFwaWd3eUF1dGguSHR0cElhbUF1dGhvcml6ZXIoKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9odHRwQXBpLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICB9XG4gICAgLy8gVGhpcyBhbGxvd3MgdGhlIExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGlzIGFwaVxuICAgIFRhZ3Mub2YodGhpcy5faHR0cEFwaSkuYWRkKCdtaWNyb2FwcC1tYW5hZ2VkJywgJ3RydWUnKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgc3RhZ2VcbiAgICBjb25zdCBzdGFnZSA9IG5ldyBhcGlnd3kuSHR0cFN0YWdlKHRoaXMsICdzdGFnZScsIHtcbiAgICAgIGh0dHBBcGk6IHRoaXMuX2h0dHBBcGksXG4gICAgICBhdXRvRGVwbG95OiB0cnVlLFxuICAgICAgLy8gSWYgcm9vdFBhdGhQcmVmaXggaXMgbm90IGRlZmluZWQgdGhpcyB3aWxsIGJlIHRoZSAkZGVmYXVsdCBzdGFnZVxuICAgICAgc3RhZ2VOYW1lOiByb290UGF0aFByZWZpeCxcbiAgICB9KTtcbiAgICAvLyBUaGlzIGFsbG93cyB0aGUgTGFtYmRhIEAgRWRnZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoaXMgYXBpXG4gICAgVGFncy5vZihzdGFnZSkuYWRkKCdtaWNyb2FwcC1tYW5hZ2VkJywgJ3RydWUnKTtcblxuICAgIGlmIChkb21haW5OYW1lRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNlcnRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3JlYXRlIEN1c3RvbSBEb21haW5zIGZvciBBUEkgR2F0ZXdheVxuICAgICAgY29uc3QgZG5BcHBzRWRnZSA9IG5ldyBhcGlnd3kuRG9tYWluTmFtZSh0aGlzLCAnbWljcm9hcHBzLWFwcHMtZWRnZS1kbicsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZUVkZ2UsXG4gICAgICAgIGNlcnRpZmljYXRlOiBjZXJ0T3JpZ2luLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRuQXBwc0VkZ2UuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIGVkZ2UgZG9tYWluIG5hbWUgbWFwcGluZyBmb3IgdGhlIEFQSVxuICAgICAgY29uc3QgYXBpTWFwcGluZyA9IG5ldyBhcGlnd3kuQXBpTWFwcGluZyh0aGlzLCAnbWFwcGluZycsIHtcbiAgICAgICAgYXBpOiB0aGlzLl9odHRwQXBpLFxuICAgICAgICBkb21haW5OYW1lOiBkbkFwcHNFZGdlLFxuICAgICAgICBzdGFnZSxcbiAgICAgIH0pO1xuICAgICAgLy8gMjAyMi0wMS0xNiAtIENESyBpcyBzdGlsbCBnZW5lcmF0aW5nIENsb3VkRm9ybWF0aW9uIHdpdGggbm8gZGVwZW5kZW5jeVxuICAgICAgLy8gYmV0d2VlbiB0aGUgUjUzIFJlY29yZFNldCBhbmQgdGhlIE1hcHBpbmdcbiAgICAgIGFwaU1hcHBpbmcubm9kZS5hZGREZXBlbmRlbmN5KGRuQXBwc0VkZ2UpO1xuICAgIH1cblxuICAgIGlmIChkb21haW5OYW1lT3JpZ2luICE9PSB1bmRlZmluZWQgJiYgY2VydE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kbkFwcHNPcmlnaW4gPSBuZXcgYXBpZ3d5LkRvbWFpbk5hbWUodGhpcywgJ29yaWdpbi1kbicsIHtcbiAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZU9yaWdpbixcbiAgICAgICAgY2VydGlmaWNhdGU6IGNlcnRPcmlnaW4sXG4gICAgICB9KTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmFibGUgYWNjZXNzIGxvZ3Mgb24gQVBJIEdhdGV3YXlcbiAgICBjb25zdCBhcGlBY2Nlc3NMb2dzID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ2xvZ3MnLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGFwaWdhdGV3YXlOYW1lXG4gICAgICAgID8gYC9hd3MvYXBpZ3d5LyR7YXBpZ2F0ZXdheU5hbWV9YFxuICAgICAgICA6IGAvYXdzL2FwaWd3eS8ke3RoaXMuaHR0cEFwaS5odHRwQXBpTmFtZX1gLFxuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIH0pO1xuICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwaUFjY2Vzc0xvZ3MuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgIH1cbiAgICBjb25zdCBjZm5TdGFnZSA9IHN0YWdlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGFwaWd3eWNmbi5DZm5TdGFnZTtcbiAgICBjZm5TdGFnZS5hY2Nlc3NMb2dTZXR0aW5ncyA9IHtcbiAgICAgIGRlc3RpbmF0aW9uQXJuOiBhcGlBY2Nlc3NMb2dzLmxvZ0dyb3VwQXJuLFxuICAgICAgZm9ybWF0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJlcXVlc3RJZDogJyRjb250ZXh0LnJlcXVlc3RJZCcsXG4gICAgICAgIHVzZXJBZ2VudDogJyRjb250ZXh0LmlkZW50aXR5LnVzZXJBZ2VudCcsXG4gICAgICAgIHNvdXJjZUlwOiAnJGNvbnRleHQuaWRlbnRpdHkuc291cmNlSXAnLFxuICAgICAgICByZXF1ZXN0VGltZTogJyRjb250ZXh0LnJlcXVlc3RUaW1lJyxcbiAgICAgICAgcmVxdWVzdFRpbWVFcG9jaDogJyRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2gnLFxuICAgICAgICBodHRwTWV0aG9kOiAnJGNvbnRleHQuaHR0cE1ldGhvZCcsXG4gICAgICAgIHBhdGg6ICckY29udGV4dC5wYXRoJyxcbiAgICAgICAgc3RhdHVzOiAnJGNvbnRleHQuc3RhdHVzJyxcbiAgICAgICAgcHJvdG9jb2w6ICckY29udGV4dC5wcm90b2NvbCcsXG4gICAgICAgIHJlc3BvbnNlTGVuZ3RoOiAnJGNvbnRleHQucmVzcG9uc2VMZW5ndGgnLFxuICAgICAgICBkb21haW5OYW1lOiAnJGNvbnRleHQuZG9tYWluTmFtZScsXG4gICAgICAgIGF1dGhvcml6ZXJFcnJvcjogJyRjb250ZXh0LmF1dGhvcml6ZXIuZXJyb3InLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIGxvZ2dpbmcgcm9sZVxuICAgIC8vIFRpcHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTExMDBcbiAgICBjb25zdCBhcGlHd3lMb2dSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdsb2dzLXJvbGUnLCB7XG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgICdzZXJ2aWNlLXJvbGUvQW1hem9uQVBJR2F0ZXdheVB1c2hUb0Nsb3VkV2F0Y2hMb2dzJyxcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG4gICAgYXBpQWNjZXNzTG9ncy5ncmFudFdyaXRlKGFwaUd3eUxvZ1JvbGUpO1xuXG4gICAgLy9cbiAgICAvLyBMZXQgQVBJIEdhdGV3YXkgYWNjZXB0IHJlcXVlc3RzIHVzaW5nIGRvbWFpbk5hbWVPcmlnaW5cbiAgICAvLyBUaGF0IGlzIHRoZSBvcmlnaW4gVVJJIHRoYXQgQ2xvdWRGcm9udCB1c2VzIGZvciB0aGlzIGdhdGV3YXkuXG4gICAgLy8gVGhlIGdhdGV3YXkgd2lsbCByZWZ1c2UgdGhlIHRyYWZmaWMgaWYgaXQgZG9lc24ndCBoYXZlIHRoZVxuICAgIC8vIGRvbWFpbiBuYW1lIHJlZ2lzdGVyZWQuXG4gICAgLy9cbiAgICBpZiAodGhpcy5fZG5BcHBzT3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBpbmdBcHBzQXBpcyA9IG5ldyBhcGlnd3kuQXBpTWFwcGluZyh0aGlzLCAnYXBpLW1hcC1vcmlnaW4nLCB7XG4gICAgICAgIGFwaTogdGhpcy5faHR0cEFwaSxcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5fZG5BcHBzT3JpZ2luLFxuICAgICAgICBzdGFnZSxcbiAgICAgIH0pO1xuICAgICAgLy8gMjAyMi0wMS0xNiAtIENESyBpcyBzdGlsbCBnZW5lcmF0aW5nIENsb3VkRm9ybWF0aW9uIHdpdGggbm8gZGVwZW5kZW5jeVxuICAgICAgLy8gYmV0d2VlbiB0aGUgUjUzIFJlY29yZFNldCBhbmQgdGhlIE1hcHBpbmdcbiAgICAgIG1hcHBpbmdBcHBzQXBpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5fZG5BcHBzT3JpZ2luKTtcbiAgICAgIGlmIChyZW1vdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFwcGluZ0FwcHNBcGlzLmFwcGx5UmVtb3ZhbFBvbGljeShyZW1vdmFsUG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIENyZWF0ZSB0aGUgb3JpZ2luIG5hbWUgZm9yIEFQSSBHYXRld2F5XG4gICAgLy9cbiAgICBpZiAocjUzWm9uZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2RuQXBwc09yaWdpbikge1xuICAgICAgY29uc3QgcnJBcHBzT3JpZ2luID0gbmV3IHI1My5BUmVjb3JkKHRoaXMsICdvcmlnaW4tYXJlY29yZCcsIHtcbiAgICAgICAgem9uZTogcjUzWm9uZSxcbiAgICAgICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZU9yaWdpbixcbiAgICAgICAgdGFyZ2V0OiByNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgcjUzdGFyZ2V0cy5BcGlHYXRld2F5djJEb21haW5Qcm9wZXJ0aWVzKFxuICAgICAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLnJlZ2lvbmFsRG9tYWluTmFtZSxcbiAgICAgICAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5yZWdpb25hbEhvc3RlZFpvbmVJZCxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJyQXBwc09yaWdpbi5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -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
- * (experimental) Represents a MicroApps CloudFront.
11
- *
12
- * @experimental
10
+ * Represents a MicroApps CloudFront
13
11
  */
14
12
  export interface IMicroAppsCF {
15
13
  /**
16
- * @experimental
14
+ * The CloudFront distribution
17
15
  */
18
16
  readonly cloudFrontDistro: cf.Distribution;
19
17
  }
20
18
  /**
21
- * (experimental) Properties to initialize an instance of `MicroAppsCF`.
22
- *
23
- * @experimental
19
+ * Properties to initialize an instance of `MicroAppsCF`.
24
20
  */
25
21
  export interface MicroAppsCFProps {
26
22
  /**
27
- * (experimental) RemovalPolicy override for child resources.
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
- * (experimental) S3 bucket origin for deployed applications.
37
- *
38
- * @experimental
31
+ * S3 bucket origin for deployed applications
39
32
  */
40
33
  readonly bucketAppsOrigin: cforigins.S3Origin;
41
34
  /**
42
- * (experimental) S3 bucket for CloudFront logs.
43
- *
44
- * @experimental
35
+ * S3 bucket for CloudFront logs
45
36
  */
46
37
  readonly bucketLogs?: s3.IBucket;
47
38
  /**
48
- * (experimental) CloudFront Distribution domain name.
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
- * (experimental) API Gateway custom origin domain name.
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
- * (experimental) API Gateway v2 HTTP API for apps.
69
- *
70
- * @experimental
53
+ * API Gateway v2 HTTP API for apps
71
54
  */
72
55
  readonly httpApi: apigwy.HttpApi;
73
56
  /**
74
- * (experimental) Optional asset name root.
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
- * (experimental) Optional asset name suffix.
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
- * (experimental) ACM Certificate that covers `domainNameEdge` name.
95
- *
96
- * @experimental
71
+ * ACM Certificate that covers `domainNameEdge` name
97
72
  */
98
73
  readonly certEdge?: acm.ICertificate;
99
74
  /**
100
- * (experimental) Route53 zone in which to create optional `domainNameEdge` record.
101
- *
102
- * @experimental
75
+ * Route53 zone in which to create optional `domainNameEdge` record
103
76
  */
104
77
  readonly r53Zone?: r53.IHostedZone;
105
78
  /**
106
- * (experimental) Path prefix on the root of the CloudFront distribution.
79
+ * Path prefix on the root of the CloudFront distribution
107
80
  *
108
- * @experimental
109
- * @example
110
- *
111
- * dev/
81
+ * @example dev/
112
82
  */
113
83
  readonly rootPathPrefix?: string;
114
84
  /**
115
- * (experimental) Create an extra Behavior (Route) for /api/ that allows API routes to have a period in them.
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
- * (experimental) Options for the `CreateAPIOriginPolicy`.
129
- *
130
- * @experimental
118
+ * Options for the `CreateAPIOriginPolicy`
131
119
  */
132
120
  export interface CreateAPIOriginPolicyOptions {
133
121
  /**
134
- * (experimental) Optional asset name root.
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
- * (experimental) Optional asset name suffix.
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
- * (experimental) Edge domain name used by CloudFront - If set a custom OriginRequestPolicy will be created that prevents the Host header from being passed to the origin.
155
- *
156
- * @experimental
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
- * (experimental) Options for `AddRoutes`.
162
- *
163
- * @experimental
143
+ * Options for `AddRoutes`
164
144
  */
165
145
  export interface AddRoutesOptions {
166
146
  /**
167
- * (experimental) API Gateway CloudFront Origin for API calls.
168
- *
169
- * @experimental
147
+ * API Gateway CloudFront Origin for API calls
170
148
  */
171
149
  readonly apiGwyOrigin: cf.IOrigin;
172
150
  /**
173
- * (experimental) S3 Bucket CloudFront Origin for static assets.
174
- *
175
- * @experimental
151
+ * S3 Bucket CloudFront Origin for static assets
176
152
  */
177
153
  readonly bucketAppsOrigin: cforigins.S3Origin;
178
154
  /**
179
- * (experimental) CloudFront Distribution to add the Behaviors (Routes) to.
180
- *
181
- * @experimental
155
+ * CloudFront Distribution to add the Behaviors (Routes) to
182
156
  */
183
157
  readonly distro: cf.Distribution;
184
158
  /**
185
- * (experimental) Origin Request policy for API Gateway Origin.
186
- *
187
- * @experimental
159
+ * Origin Request policy for API Gateway Origin
188
160
  */
189
161
  readonly apigwyOriginRequestPolicy: cf.IOriginRequestPolicy;
190
162
  /**
191
- * (experimental) Path prefix on the root of the CloudFront distribution.
163
+ * Path prefix on the root of the CloudFront distribution
192
164
  *
193
- * @experimental
194
- * @example
195
- *
196
- * dev/
165
+ * @example dev/
197
166
  */
198
167
  readonly rootPathPrefix?: string;
199
168
  /**
200
- * (experimental) Create an extra Behavior (Route) for /api/ that allows API routes to have a period in them.
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
- * (experimental) Create a new MicroApps CloudFront Distribution.
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
- * (experimental) Create or get the origin request policy.
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
- * @experimental
213
+ * @param _scope
214
+ * @param _props
229
215
  */
230
- static createAPIOriginPolicy(scope: Construct, props: CreateAPIOriginPolicyOptions): cf.IOriginRequestPolicy;
216
+ static createAPIOriginPolicy(_scope: Construct, _props: CreateAPIOriginPolicyOptions): cf.IOriginRequestPolicy;
231
217
  /**
232
- * (experimental) Add API Gateway and S3 routes to an existing CloudFront Distribution.
233
- *
234
- * @experimental
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicroAppsCF.d.ts","sourceRoot":"","sources":["../src/MicroAppsCF.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAO,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,YAAY,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;IAEnC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,yBAAyB,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,SAAU,YAAW,YAAY;IAChE;;;;;;;;;;;;OAYG;WACW,qBAAqB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,4BAA4B,GACnC,EAAE,CAAC,oBAAoB;IAqC1B;;;;OAIG;WACW,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB;IA0ElE,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,IAAW,gBAAgB,IAAI,EAAE,CAAC,YAAY,CAE7C;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB;CA+GlE"}