@ashishpandeyone/cdk-lambda-web-function 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +55 -81
- package/.jsii.tabl.json +1 -1
- package/API.md +21 -18
- package/README.md +22 -3
- package/assets/web-function-provider/index.js +23 -23
- package/lib/nodejs-web-function.js +1 -1
- package/lib/private/provider-protocol.d.ts +15 -0
- package/lib/private/provider-protocol.js +7 -2
- package/lib/private/resource-policy-statements.d.ts +23 -0
- package/lib/private/resource-policy-statements.js +112 -0
- package/lib/web-function-deployment.js +1 -1
- package/lib/web-function-endpoint.js +1 -1
- package/lib/web-function-grants.d.ts +3 -3
- package/lib/web-function-grants.js +8 -9
- package/lib/web-function-origin.d.ts +1 -1
- package/lib/web-function-origin.js +7 -9
- package/lib/web-function-revision.js +1 -1
- package/lib/web-function.d.ts +20 -19
- package/lib/web-function.js +35 -44
- package/package.json +1 -1
|
@@ -49,7 +49,7 @@ const web_function_1 = require("./web-function");
|
|
|
49
49
|
* bundle, and `NODE_OPTIONS=--enable-source-maps` when source maps are on.
|
|
50
50
|
*/
|
|
51
51
|
class NodejsWebFunction extends web_function_1.WebFunction {
|
|
52
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.
|
|
52
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.8" };
|
|
53
53
|
constructor(scope, id, props) {
|
|
54
54
|
const runtime = props.runtime ?? lambda.Runtime.NODEJS_24_X;
|
|
55
55
|
const entry = (0, bundling_1.resolveEntry)(props.entry);
|
|
@@ -110,3 +110,18 @@ export declare const EMPTY_ON_DELETE_TAG: {
|
|
|
110
110
|
export interface CodeBucketCleanupProperties {
|
|
111
111
|
readonly BucketName: string;
|
|
112
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Writes one stack's statements into a Web Function's resource policy, keeping every other writer's statements
|
|
115
|
+
* (Web Functions have no AddPermission: the policy is a single document, so writers merge into it).
|
|
116
|
+
*/
|
|
117
|
+
export declare const RESOURCE_POLICY_STATEMENTS_RESOURCE_TYPE = "Custom::LambdaWebResourcePolicyStatements";
|
|
118
|
+
export interface ResourcePolicyStatementsProperties {
|
|
119
|
+
readonly FunctionArn: string;
|
|
120
|
+
/** The statements this resource owns, each with a Sid unique in the function's policy. */
|
|
121
|
+
readonly Policy: {
|
|
122
|
+
readonly Statement: ReadonlyArray<{
|
|
123
|
+
readonly Sid: string;
|
|
124
|
+
readonly [key: string]: unknown;
|
|
125
|
+
}>;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* CloudFormation passes every scalar property to the handler as a string.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.EMPTY_ON_DELETE_TAG = exports.CODE_BUCKET_CLEANUP_RESOURCE_TYPE = exports.REGIONAL_ALARM_RESOURCE_TYPE = exports.ALARM_NAME_PREFIX = exports.TRAFFIC_SHIFT_RESOURCE_TYPE = exports.REVISION_CLEANUP_RESOURCE_TYPE = exports.ENDPOINT_LOOKUP_RESOURCE_TYPE = exports.LOG_GROUP_RESOURCE_TYPE = exports.CODE_RESOURCE_TYPE = void 0;
|
|
10
|
+
exports.RESOURCE_POLICY_STATEMENTS_RESOURCE_TYPE = exports.EMPTY_ON_DELETE_TAG = exports.CODE_BUCKET_CLEANUP_RESOURCE_TYPE = exports.REGIONAL_ALARM_RESOURCE_TYPE = exports.ALARM_NAME_PREFIX = exports.TRAFFIC_SHIFT_RESOURCE_TYPE = exports.REVISION_CLEANUP_RESOURCE_TYPE = exports.ENDPOINT_LOOKUP_RESOURCE_TYPE = exports.LOG_GROUP_RESOURCE_TYPE = exports.CODE_RESOURCE_TYPE = void 0;
|
|
11
11
|
exports.regionalDomainAttribute = regionalDomainAttribute;
|
|
12
12
|
/** Copies a code zip into the stack's code bucket and returns the object's version. */
|
|
13
13
|
exports.CODE_RESOURCE_TYPE = 'Custom::LambdaWebCode';
|
|
@@ -37,4 +37,9 @@ exports.CODE_BUCKET_CLEANUP_RESOURCE_TYPE = 'Custom::LambdaWebCodeBucketCleanup'
|
|
|
37
37
|
* resources the failed update created, so a cleanup resource added to an existing bucket never empties it on rollback.
|
|
38
38
|
*/
|
|
39
39
|
exports.EMPTY_ON_DELETE_TAG = { key: 'cdk-lambda-web:empty-on-delete', value: 'true' };
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Writes one stack's statements into a Web Function's resource policy, keeping every other writer's statements
|
|
42
|
+
* (Web Functions have no AddPermission: the policy is a single document, so writers merge into it).
|
|
43
|
+
*/
|
|
44
|
+
exports.RESOURCE_POLICY_STATEMENTS_RESOURCE_TYPE = 'Custom::LambdaWebResourcePolicyStatements';
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUEyQ0gsMERBRUM7QUEzQ0QsdUZBQXVGO0FBQzFFLFFBQUEsa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFjMUQsdUdBQXVHO0FBQzFGLFFBQUEsdUJBQXVCLEdBQUcsMkJBQTJCLENBQUM7QUFjbkUsZ0hBQWdIO0FBQ25HLFFBQUEsNkJBQTZCLEdBQUcsaUNBQWlDLENBQUM7QUFTL0UsZ0ZBQWdGO0FBQ2hGLFNBQWdCLHVCQUF1QixDQUFDLE1BQWM7SUFDcEQsT0FBTyxVQUFVLE1BQU0sRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtSEFBbUg7QUFDdEcsUUFBQSw4QkFBOEIsR0FBRyxrQ0FBa0MsQ0FBQztBQWFqRjs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBMkIzRSxrSEFBa0g7QUFDbEgsaUhBQWlIO0FBQ3BHLFFBQUEsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLFFBQUEsNEJBQTRCLEdBQUcsd0JBQXdCLENBQUM7QUFnQnJFLDBHQUEwRztBQUM3RixRQUFBLGlDQUFpQyxHQUFHLG9DQUFvQyxDQUFDO0FBRXRGOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBTTVGOzs7R0FHRztBQUNVLFFBQUEsd0NBQXdDLEdBQUcsMkNBQTJDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyYWN0IGJldHdlZW4gdGhlIGNvbnN0cnVjdHMgYW5kIHRoZSBjdXN0b20gcmVzb3VyY2UgaGFuZGxlciBpblxuICogYGhhbmRsZXJzL3dlYi1mdW5jdGlvbi1wcm92aWRlcmAuIEJvdGggc2lkZXMgaW1wb3J0IHRoaXMgZmlsZSwgc28gcmVzb3VyY2VcbiAqIHR5cGVzIGFuZCBwcm9wZXJ0eSBuYW1lcyBjYW4ndCBkcmlmdCBhcGFydC5cbiAqXG4gKiBDbG91ZEZvcm1hdGlvbiBwYXNzZXMgZXZlcnkgc2NhbGFyIHByb3BlcnR5IHRvIHRoZSBoYW5kbGVyIGFzIGEgc3RyaW5nLlxuICovXG5cbi8qKiBDb3BpZXMgYSBjb2RlIHppcCBpbnRvIHRoZSBzdGFjaydzIGNvZGUgYnVja2V0IGFuZCByZXR1cm5zIHRoZSBvYmplY3QncyB2ZXJzaW9uLiAqL1xuZXhwb3J0IGNvbnN0IENPREVfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkNvZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgU291cmNlQnVja2V0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IFNvdXJjZUtleTogc3RyaW5nO1xuICByZWFkb25seSBTb3VyY2VWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBEZXN0aW5hdGlvbkJ1Y2tldDogc3RyaW5nO1xuICByZWFkb25seSBEZXN0aW5hdGlvbktleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVBdHRyaWJ1dGVzIHtcbiAgcmVhZG9ubHkgVmVyc2lvbklkOiBzdHJpbmc7XG59XG5cbi8qKiBFbnN1cmVzIG9uZSBsb2cgZ3JvdXAgKGluIGFueSByZWdpb24pIGV4aXN0cyB3aXRoIHRoZSBnaXZlbiByZXRlbnRpb24sIGFuZCByZW1vdmVzIGl0IG9uIGRlbGV0ZS4gKi9cbmV4cG9ydCBjb25zdCBMT0dfR1JPVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkxvZ0dyb3VwJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dHcm91cFByb3BlcnRpZXMge1xuICByZWFkb25seSBSZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgTG9nR3JvdXBOYW1lOiBzdHJpbmc7XG4gIC8qKiBEYXlzLCBvciAnSW5maW5pdGUnIGZvciBubyByZXRlbnRpb24uICovXG4gIHJlYWRvbmx5IFJldGVudGlvbkluRGF5czogc3RyaW5nO1xuICByZWFkb25seSBSZW1vdmFsUG9saWN5OiAncmV0YWluJyB8ICdkZXN0cm95JztcbiAgLyoqIFNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcsIHNvIGVudmlyb25tZW50cyBzdGlsbCBzaHV0dGluZyBkb3duIGNhbiBmbHVzaCB0aGVpciBsYXN0IGxpbmVzLiAqL1xuICByZWFkb25seSBGbHVzaFdhaXRTZWNvbmRzOiBzdHJpbmc7XG4gIC8qKiBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGNoZWNraW5nIG9uY2UgbW9yZSB0aGF0IHRoZSBzZXJ2aWNlIGhhc24ndCByZS1jcmVhdGVkIHRoZSBncm91cC4gKi9cbiAgcmVhZG9ubHkgUmVjaGVja1dhaXRTZWNvbmRzOiBzdHJpbmc7XG59XG5cbi8qKiBSZWFkcyBhbiBlbmRwb2ludCdzIHBlci1yZWdpb24gZG9tYWluIG5hbWVzLCB3aGljaCBDbG91ZEZvcm1hdGlvbiBjYW4ndCBpbmRleCBvdXQgb2YgYFJlZ2lvbmFsRW5kcG9pbnRzYC4gKi9cbmV4cG9ydCBjb25zdCBFTkRQT0lOVF9MT09LVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkVuZHBvaW50TG9va3VwJztcblxuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludExvb2t1cFByb3BlcnRpZXMge1xuICByZWFkb25seSBGdW5jdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSBFbmRwb2ludE5hbWU6IHN0cmluZztcbiAgLyoqIENoYW5nZXMgd2hlbmV2ZXIgdGhlIGVuZHBvaW50IGlzIHJlcGxhY2VkLCBzbyB0aGUgbG9va3VwIHJ1bnMgYWdhaW4uICovXG4gIHJlYWRvbmx5IEVuZHBvaW50QXJuOiBzdHJpbmc7XG59XG5cbi8qKiBBdHRyaWJ1dGUgbmFtZSBob2xkaW5nIHRoZSBkb21haW4gb2Ygb25lIHJlZ2lvbiwgZS5nLiBgRG9tYWluLnVzLWVhc3QtMWAuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uYWxEb21haW5BdHRyaWJ1dGUocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERvbWFpbi4ke3JlZ2lvbn1gO1xufVxuXG4vKiogRGVsZXRlcyBhIGZ1bmN0aW9uJ3Mgb2xkZXN0IHJldmlzaW9ucyBiZXlvbmQgYSBjb3VudCwgZXhjZXB0IHRob3NlIHRoYXQgYXJlIGluIHVzZSBvciBtYXkgYmUgcm9sbGVkIGJhY2sgdG8uICovXG5leHBvcnQgY29uc3QgUkVWSVNJT05fQ0xFQU5VUF9SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6TGFtYmRhV2ViUmV2aXNpb25DbGVhbnVwJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXZpc2lvbkNsZWFudXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgRnVuY3Rpb25Bcm46IHN0cmluZztcbiAgLyoqIEhvdyBtYW55IG9mIHRoZSBuZXdlc3QgcmV2aXNpb25zIHRvIGtlZXAuICovXG4gIHJlYWRvbmx5IEtlZXA6IHN0cmluZztcbiAgLyoqXG4gICAqIFJldmlzaW9ucyB0aGUgdGVtcGxhdGUgdXNlcyAodGhlIGN1cnJlbnQgb25lIGFuZCBhbnkgYW4gZW5kcG9pbnQgcm91dGVzIHRvKS4gQWx3YXlzIGtlcHQsIGFuZCBvbiBhbiB1cGRhdGVcbiAgICogdGhlIHByZXZpb3VzIHRlbXBsYXRlJ3MgYXJlIGtlcHQgdG9vOiB0aGV5J3JlIHdoYXQgYSByb2xsYmFjayByb3V0ZXMgYmFjayB0by5cbiAgICovXG4gIHJlYWRvbmx5IFJldmlzaW9uSWRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNb3ZlcyBhbiBlbmRwb2ludCdzIHRyYWZmaWMgdG8gYSByZXZpc2lvbiBpbiBzdGVwcywgd2F0Y2hpbmcgYWxhcm1zIChjYW5hcnkgYW5kIGxpbmVhciBkZXBsb3ltZW50cykuXG4gKiBTZXJ2ZWQgYnkgdGhlIGRlcGxveW1lbnQgcHJvdmlkZXIgKGBoYW5kbGVycy93ZWItZnVuY3Rpb24tZGVwbG95bWVudGApLCBub3QgdGhlIHNoYXJlZCBwcm92aWRlcjogaXQgY2FuIHJ1biBmb3IgdXAgdG8gYW4gaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUZGSUNfU0hJRlRfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYlRyYWZmaWNTaGlmdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhZmZpY1NoaWZ0UHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IEZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEVuZHBvaW50TmFtZTogc3RyaW5nO1xuICAvKiogVGhlIHJldmlzaW9uIHRoYXQgZW5kcyB1cCB3aXRoIGFsbCBvZiB0aGUgZW5kcG9pbnQncyB0cmFmZmljLiAqL1xuICByZWFkb25seSBSZXZpc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcmV2aXNpb24ncyBzaGFyZSBvZiB0cmFmZmljIGF0IGVhY2ggc3RlcCwgaW4gcGVyY2VudCwgY29tbWEtc2VwYXJhdGVkOyB0aGUgbGFzdCBpcyAxMDAuICovXG4gIHJlYWRvbmx5IFN0ZXBzOiBzdHJpbmc7XG4gIC8qKiBTZWNvbmRzIGVhY2ggc3RlcCBzZXJ2ZXMgKGNvdW50ZWQgZnJvbSB3aGVuIGl0cyB1cGRhdGUgc3RhcnRlZCkgYmVmb3JlIHRoZSBuZXh0LiAqL1xuICByZWFkb25seSBXYWl0U2Vjb25kczogc3RyaW5nO1xuICAvKiogQWxhcm1zIChpbiBhbnkgcmVnaW9uKSB0aGF0IHN0b3AgdGhlIGRlcGxveW1lbnQgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIHdlaWdodHMuICovXG4gIHJlYWRvbmx5IEFsYXJtQXJucz86IHN0cmluZ1tdO1xuICAvKiogSGFzaCBvZiB0aGUgZW5kcG9pbnQncyBvdGhlciBzZXR0aW5nczogYW55IGVuZHBvaW50IGNoYW5nZSByZS1jaGVja3MgaXRzIHRyYWZmaWMgYmVmb3JlIENsb3VkRm9ybWF0aW9uIHdyaXRlcyBpdC4gKi9cbiAgcmVhZG9ubHkgRW5kcG9pbnRDb25maWc6IHN0cmluZztcbn1cblxuLyoqIFdoYXQgYG9uRXZlbnRgIGhhbmRzIHRvIGBpc0NvbXBsZXRlYCAodGhlIFByb3ZpZGVyIGZyYW1ld29yayBwYXNzZXMgaXQgYXMgYERhdGFgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhZmZpY1NoaWZ0U3RhdGUge1xuICAvKiogYG5vbmVgOiBub3RoaW5nIHRvIGRvOyBgc2hpZnRgOiBtb3ZpbmcgaW4gc3RlcHM7IGBzd2l0Y2hgOiBhbGwgYXQgb25jZSwgd2l0aG91dCBhbGFybXMgKHN0YWNrIHJvbGxiYWNrKS4gKi9cbiAgcmVhZG9ubHkgQWN0aW9uOiAnbm9uZScgfCAnc2hpZnQnIHwgJ3N3aXRjaCc7XG4gIC8qKiBgc2hpZnRgOiB0aGUgZW5kcG9pbnQncyB3ZWlnaHRzIGJlZm9yZSB0aGUgZGVwbG95bWVudCAoSlNPTiBgW3tyZXZpc2lvbklkLCB3ZWlnaHR9XWApLCByZXN0b3JlZCB3aGVuIGFuIGFsYXJtIGZpcmVzLiAqL1xuICByZWFkb25seSBQcmV2aW91c1dlaWdodHM/OiBzdHJpbmc7XG4gIC8qKiBgc3dpdGNoYDogdGhlIHdlaWdodHMgYmVpbmcgd3JpdHRlbiAoSlNPTiBgW3tyZXZpc2lvbklkLCB3ZWlnaHR9XWApLiAqL1xuICByZWFkb25seSBUYXJnZXRXZWlnaHRzPzogc3RyaW5nO1xufVxuXG4vKiogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGFsYXJtIGluIGFueSByZWdpb24gKENsb3VkRm9ybWF0aW9uIG9ubHkgY3JlYXRlcyBhbGFybXMgaW4gdGhlIHN0YWNrJ3MgcmVnaW9uKS4gKi9cbi8qKiBQcmVmaXggb2YgZXZlcnkgYWxhcm0gdGhpcyBsaWJyYXJ5IGNyZWF0ZXMgb3V0c2lkZSB0aGUgc3RhY2sncyByZWdpb247IHRoZSBwcm92aWRlcidzIElBTSBpcyBzY29wZWQgdG8gaXQuICovXG5leHBvcnQgY29uc3QgQUxBUk1fTkFNRV9QUkVGSVggPSAnTGFtYmRhV2ViLSc7XG5leHBvcnQgY29uc3QgUkVHSU9OQUxfQUxBUk1fUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkFsYXJtJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25hbEFsYXJtUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IFJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBBbGFybU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgQWxhcm1EZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogUHV0TWV0cmljQWxhcm0ncyBgTWV0cmljc2AsIGFzIEpTT04uICovXG4gIHJlYWRvbmx5IE1ldHJpY3M6IHN0cmluZztcbiAgcmVhZG9ubHkgVGhyZXNob2xkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEV2YWx1YXRpb25QZXJpb2RzOiBzdHJpbmc7XG4gIC8qKiBQdXRNZXRyaWNBbGFybSdzIGBDb21wYXJpc29uT3BlcmF0b3JgLiAqL1xuICByZWFkb25seSBDb21wYXJpc29uT3BlcmF0b3I6IHN0cmluZztcbiAgLyoqIFB1dE1ldHJpY0FsYXJtJ3MgYFRyZWF0TWlzc2luZ0RhdGFgLiAqL1xuICByZWFkb25seSBUcmVhdE1pc3NpbmdEYXRhOiBzdHJpbmc7XG59XG5cbi8qKiBFbXB0aWVzIHRoZSBzdGFjaydzIGNvZGUgYnVja2V0IChldmVyeSBvYmplY3QgdmVyc2lvbiBhbmQgZGVsZXRlIG1hcmtlcikgd2hlbiB0aGUgc3RhY2sgZGVsZXRlcyBpdC4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX0JVQ0tFVF9DTEVBTlVQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJDb2RlQnVja2V0Q2xlYW51cCc7XG5cbi8qKlxuICogVGFnIG9uIHRoZSBjb2RlIGJ1Y2tldCB0aGF0IGxldHMgdGhlIGNsZWFudXAgZW1wdHkgaXQuIEEgcm9sbGJhY2sgcmV2ZXJ0cyB0aGUgYnVja2V0J3MgdGFncyBiZWZvcmUgaXQgZGVsZXRlc1xuICogcmVzb3VyY2VzIHRoZSBmYWlsZWQgdXBkYXRlIGNyZWF0ZWQsIHNvIGEgY2xlYW51cCByZXNvdXJjZSBhZGRlZCB0byBhbiBleGlzdGluZyBidWNrZXQgbmV2ZXIgZW1wdGllcyBpdCBvbiByb2xsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNUFRZX09OX0RFTEVURV9UQUcgPSB7IGtleTogJ2Nkay1sYW1iZGEtd2ViOmVtcHR5LW9uLWRlbGV0ZScsIHZhbHVlOiAndHJ1ZScgfTtcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVja2V0Q2xlYW51cFByb3BlcnRpZXMge1xuICByZWFkb25seSBCdWNrZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV3JpdGVzIG9uZSBzdGFjaydzIHN0YXRlbWVudHMgaW50byBhIFdlYiBGdW5jdGlvbidzIHJlc291cmNlIHBvbGljeSwga2VlcGluZyBldmVyeSBvdGhlciB3cml0ZXIncyBzdGF0ZW1lbnRzXG4gKiAoV2ViIEZ1bmN0aW9ucyBoYXZlIG5vIEFkZFBlcm1pc3Npb246IHRoZSBwb2xpY3kgaXMgYSBzaW5nbGUgZG9jdW1lbnQsIHNvIHdyaXRlcnMgbWVyZ2UgaW50byBpdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVNPVVJDRV9QT0xJQ1lfU1RBVEVNRU5UU19SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6TGFtYmRhV2ViUmVzb3VyY2VQb2xpY3lTdGF0ZW1lbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVBvbGljeVN0YXRlbWVudHNQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgRnVuY3Rpb25Bcm46IHN0cmluZztcbiAgLyoqIFRoZSBzdGF0ZW1lbnRzIHRoaXMgcmVzb3VyY2Ugb3ducywgZWFjaCB3aXRoIGEgU2lkIHVuaXF1ZSBpbiB0aGUgZnVuY3Rpb24ncyBwb2xpY3kuICovXG4gIHJlYWRvbmx5IFBvbGljeTogeyByZWFkb25seSBTdGF0ZW1lbnQ6IFJlYWRvbmx5QXJyYXk8eyByZWFkb25seSBTaWQ6IHN0cmluZzsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93biB9PiB9O1xufVxuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CustomResource } from 'aws-cdk-lib';
|
|
2
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
/**
|
|
5
|
+
* The statements one stack adds to a Web Function's resource policy. A function has a single policy and Web Functions
|
|
6
|
+
* have no AddPermission, so each writing stack owns its statements (by Sid) and a custom resource merges them into the
|
|
7
|
+
* policy, keeping every other stack's statements: the function's stack, a distribution's stack, an importing stack.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ResourcePolicyStatements extends Construct {
|
|
10
|
+
/**
|
|
11
|
+
* The writer for `functionArn` in `scope`'s stack. In the function's own stack it's a child of `host` (the function);
|
|
12
|
+
* elsewhere a child of the stack, one per function.
|
|
13
|
+
*/
|
|
14
|
+
static of(scope: Construct, host: Construct, functionArn: string): ResourcePolicyStatements;
|
|
15
|
+
readonly resource: CustomResource;
|
|
16
|
+
private readonly document;
|
|
17
|
+
private readonly added;
|
|
18
|
+
private readonly sidPrefix;
|
|
19
|
+
private counter;
|
|
20
|
+
private constructor();
|
|
21
|
+
/** Adds a statement (a copy, with a Sid if it has none). An identical statement is only added once. */
|
|
22
|
+
add(statement: iam.PolicyStatement): void;
|
|
23
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ResourcePolicyStatements = void 0;
|
|
37
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
38
|
+
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
39
|
+
const constructs_1 = require("constructs");
|
|
40
|
+
const provider_1 = require("./provider");
|
|
41
|
+
const provider_protocol_1 = require("./provider-protocol");
|
|
42
|
+
const resource_policy_1 = require("./resource-policy");
|
|
43
|
+
/**
|
|
44
|
+
* The statements one stack adds to a Web Function's resource policy. A function has a single policy and Web Functions
|
|
45
|
+
* have no AddPermission, so each writing stack owns its statements (by Sid) and a custom resource merges them into the
|
|
46
|
+
* policy, keeping every other stack's statements: the function's stack, a distribution's stack, an importing stack.
|
|
47
|
+
*/
|
|
48
|
+
class ResourcePolicyStatements extends constructs_1.Construct {
|
|
49
|
+
/**
|
|
50
|
+
* The writer for `functionArn` in `scope`'s stack. In the function's own stack it's a child of `host` (the function);
|
|
51
|
+
* elsewhere a child of the stack, one per function.
|
|
52
|
+
*/
|
|
53
|
+
static of(scope, host, functionArn) {
|
|
54
|
+
const stack = aws_cdk_lib_1.Stack.of(scope);
|
|
55
|
+
const [parent, id] = aws_cdk_lib_1.Stack.of(host) === stack
|
|
56
|
+
? [host, 'ResourcePolicyStatements']
|
|
57
|
+
: [stack, `ResourcePolicyStatements${aws_cdk_lib_1.Names.uniqueId(host)}`];
|
|
58
|
+
return parent.node.tryFindChild(id)
|
|
59
|
+
?? new ResourcePolicyStatements(parent, id, functionArn, host);
|
|
60
|
+
}
|
|
61
|
+
resource;
|
|
62
|
+
document = new iam.PolicyDocument();
|
|
63
|
+
added = new Map();
|
|
64
|
+
sidPrefix;
|
|
65
|
+
counter = 0;
|
|
66
|
+
constructor(scope, id, functionArn, warnOn) {
|
|
67
|
+
super(scope, id);
|
|
68
|
+
// Generated Sids carry a hash of this writer's path, so two stacks' statements never share one.
|
|
69
|
+
this.sidPrefix = `Cdk${aws_cdk_lib_1.Names.uniqueId(this).slice(-8)}`;
|
|
70
|
+
const provider = (0, provider_1.webFunctionProvider)(this);
|
|
71
|
+
// Stable grant (see grantToProvider): any Web Function of this account, in any region (imports may be elsewhere).
|
|
72
|
+
(0, provider_1.grantToProvider)(provider, {
|
|
73
|
+
Action: ['lambda:GetResourcePolicy', 'lambda:PutResourcePolicy', 'lambda:DeleteResourcePolicy'],
|
|
74
|
+
Resource: aws_cdk_lib_1.Stack.of(this).formatArn({
|
|
75
|
+
service: 'lambda', region: '*', resource: 'web-function', resourceName: '*', arnFormat: aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME,
|
|
76
|
+
}),
|
|
77
|
+
});
|
|
78
|
+
this.resource = new aws_cdk_lib_1.CustomResource(this, 'Resource', {
|
|
79
|
+
serviceToken: provider.serviceToken,
|
|
80
|
+
resourceType: provider_protocol_1.RESOURCE_POLICY_STATEMENTS_RESOURCE_TYPE,
|
|
81
|
+
properties: { FunctionArn: functionArn, Policy: this.document },
|
|
82
|
+
});
|
|
83
|
+
this.node.addValidation({
|
|
84
|
+
validate: () => {
|
|
85
|
+
const json = aws_cdk_lib_1.Stack.of(this).resolve(this.document.toJSON());
|
|
86
|
+
const { errors, unscopedServices } = (0, resource_policy_1.inspectResourcePolicy)(json);
|
|
87
|
+
if (unscopedServices.length > 0) {
|
|
88
|
+
aws_cdk_lib_1.Annotations.of(warnOn).addWarningV2('@cdk-lambda-web:servicePrincipalWithoutSource', `The resource policy lets ${[...new Set(unscopedServices)].join(', ')} call the function from any account. Restrict it with sourceArn or sourceAccount (addPermission), or a principal with conditions.`);
|
|
89
|
+
}
|
|
90
|
+
const sids = (json?.Statement ?? []).map((s) => s.Sid);
|
|
91
|
+
const duplicates = [...new Set(sids.filter((sid, i) => sids.indexOf(sid) !== i))];
|
|
92
|
+
return [
|
|
93
|
+
...this.document.validateForResourcePolicy(),
|
|
94
|
+
...errors.map((e) => `resource policy: ${e}`),
|
|
95
|
+
...duplicates.map((sid) => `resource policy: more than one statement has Sid '${sid}'`),
|
|
96
|
+
];
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/** Adds a statement (a copy, with a Sid if it has none). An identical statement is only added once. */
|
|
101
|
+
add(statement) {
|
|
102
|
+
// Resolved for the comparison only: principals render a new token each time (e.g. ServicePrincipal).
|
|
103
|
+
const key = JSON.stringify(aws_cdk_lib_1.Stack.of(this).resolve(statement.toStatementJson()));
|
|
104
|
+
if (this.added.has(key))
|
|
105
|
+
return;
|
|
106
|
+
const sid = statement.sid ?? `${this.sidPrefix}${this.counter++}`;
|
|
107
|
+
this.added.set(key, sid);
|
|
108
|
+
this.document.addStatements(statement.sid ? statement : statement.copy({ sid }));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.ResourcePolicyStatements = ResourcePolicyStatements;
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcG9saWN5LXN0YXRlbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9yZXNvdXJjZS1wb2xpY3ktc3RhdGVtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBbUY7QUFDbkYseURBQTJDO0FBQzNDLDJDQUF1QztBQUN2Qyx5Q0FBa0U7QUFDbEUsMkRBQStFO0FBQy9FLHVEQUEwRDtBQUUxRDs7OztHQUlHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSxzQkFBUztJQUNyRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQWdCLEVBQUUsSUFBZSxFQUFFLFdBQW1CO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSztZQUMzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLDJCQUEyQixtQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsT0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQTBDO2VBQ3hFLElBQUksd0JBQXdCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVlLFFBQVEsQ0FBaUI7SUFDeEIsUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNsQyxTQUFTLENBQVM7SUFDM0IsT0FBTyxHQUFH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LEdBQUcsQ0FBQyxTQUE4QjtRQUN2QyxxR0FBcUc7UUFDckcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFDaEMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0Y7QUFsRUQsNERBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMsIEFybkZvcm1hdCwgQ3VzdG9tUmVzb3VyY2UsIE5hbWVzLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgZ3JhbnRUb1Byb3ZpZGVyLCB3ZWJGdW5jdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlcic7XG5pbXBvcnQgeyBSRVNPVVJDRV9QT0xJQ1lfU1RBVEVNRU5UU19SRVNPVVJDRV9UWVBFIH0gZnJvbSAnLi9wcm92aWRlci1wcm90b2NvbCc7XG5pbXBvcnQgeyBpbnNwZWN0UmVzb3VyY2VQb2xpY3kgfSBmcm9tICcuL3Jlc291cmNlLXBvbGljeSc7XG5cbi8qKlxuICogVGhlIHN0YXRlbWVudHMgb25lIHN0YWNrIGFkZHMgdG8gYSBXZWIgRnVuY3Rpb24ncyByZXNvdXJjZSBwb2xpY3kuIEEgZnVuY3Rpb24gaGFzIGEgc2luZ2xlIHBvbGljeSBhbmQgV2ViIEZ1bmN0aW9uc1xuICogaGF2ZSBubyBBZGRQZXJtaXNzaW9uLCBzbyBlYWNoIHdyaXRpbmcgc3RhY2sgb3ducyBpdHMgc3RhdGVtZW50cyAoYnkgU2lkKSBhbmQgYSBjdXN0b20gcmVzb3VyY2UgbWVyZ2VzIHRoZW0gaW50byB0aGVcbiAqIHBvbGljeSwga2VlcGluZyBldmVyeSBvdGhlciBzdGFjaydzIHN0YXRlbWVudHM6IHRoZSBmdW5jdGlvbidzIHN0YWNrLCBhIGRpc3RyaWJ1dGlvbidzIHN0YWNrLCBhbiBpbXBvcnRpbmcgc3RhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVBvbGljeVN0YXRlbWVudHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIHdyaXRlciBmb3IgYGZ1bmN0aW9uQXJuYCBpbiBgc2NvcGVgJ3Mgc3RhY2suIEluIHRoZSBmdW5jdGlvbidzIG93biBzdGFjayBpdCdzIGEgY2hpbGQgb2YgYGhvc3RgICh0aGUgZnVuY3Rpb24pO1xuICAgKiBlbHNld2hlcmUgYSBjaGlsZCBvZiB0aGUgc3RhY2ssIG9uZSBwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHNjb3BlOiBDb25zdHJ1Y3QsIGhvc3Q6IENvbnN0cnVjdCwgZnVuY3Rpb25Bcm46IHN0cmluZyk6IFJlc291cmNlUG9saWN5U3RhdGVtZW50cyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgW3BhcmVudCwgaWRdID0gU3RhY2sub2YoaG9zdCkgPT09IHN0YWNrXG4gICAgICA/IFtob3N0LCAnUmVzb3VyY2VQb2xpY3lTdGF0ZW1lbnRzJ11cbiAgICAgIDogW3N0YWNrLCBgUmVzb3VyY2VQb2xpY3lTdGF0ZW1lbnRzJHtOYW1lcy51bmlxdWVJZChob3N0KX1gXTtcbiAgICByZXR1cm4gKHBhcmVudC5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgUmVzb3VyY2VQb2xpY3lTdGF0ZW1lbnRzIHwgdW5kZWZpbmVkKVxuICAgICAgPz8gbmV3IFJlc291cmNlUG9saWN5U3RhdGVtZW50cyhwYXJlbnQsIGlkLCBmdW5jdGlvbkFybiwgaG9zdCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IEN1c3RvbVJlc291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFkZGVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaWRQcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSBjb3VudGVyID0gMDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGZ1bmN0aW9uQXJuOiBzdHJpbmcsIHdhcm5PbjogQ29uc3RydWN0KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBHZW5lcmF0ZWQgU2lkcyBjYXJyeSBhIGhhc2ggb2YgdGhpcyB3cml0ZXIncyBwYXRoLCBzbyB0d28gc3RhY2tzJyBzdGF0ZW1lbnRzIG5ldmVyIHNoYXJlIG9uZS5cbiAgICB0aGlzLnNpZFByZWZpeCA9IGBDZGske05hbWVzLnVuaXF1ZUlkKHRoaXMpLnNsaWNlKC04KX1gO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gd2ViRnVuY3Rpb25Qcm92aWRlcih0aGlzKTtcbiAgICAvLyBTdGFibGUgZ3JhbnQgKHNlZSBncmFudFRvUHJvdmlkZXIpOiBhbnkgV2ViIEZ1bmN0aW9uIG9mIHRoaXMgYWNjb3VudCwgaW4gYW55IHJlZ2lvbiAoaW1wb3J0cyBtYXkgYmUgZWxzZXdoZXJlKS5cbiAgICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHtcbiAgICAgIEFjdGlvbjogWydsYW1iZGE6R2V0UmVzb3VyY2VQb2xpY3knLCAnbGFtYmRhOlB1dFJlc291cmNlUG9saWN5JywgJ2xhbWJkYTpEZWxldGVSZXNvdXJjZVBvbGljeSddLFxuICAgICAgUmVzb3VyY2U6IFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdsYW1iZGEnLCByZWdpb246ICcqJywgcmVzb3VyY2U6ICd3ZWItZnVuY3Rpb24nLCByZXNvdXJjZU5hbWU6ICcqJywgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IFJFU09VUkNFX1BPTElDWV9TVEFURU1FTlRTX1JFU09VUkNFX1RZUEUsXG4gICAgICBwcm9wZXJ0aWVzOiB7IEZ1bmN0aW9uQXJuOiBmdW5jdGlvbkFybiwgUG9saWN5OiB0aGlzLmRvY3VtZW50IH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7XG4gICAgICB2YWxpZGF0ZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBqc29uID0gU3RhY2sub2YodGhpcykucmVzb2x2ZSh0aGlzLmRvY3VtZW50LnRvSlNPTigpKTtcbiAgICAgICAgY29uc3QgeyBlcnJvcnMsIHVuc2NvcGVkU2VydmljZXMgfSA9IGluc3BlY3RSZXNvdXJjZVBvbGljeShqc29uKTtcbiAgICAgICAgaWYgKHVuc2NvcGVkU2VydmljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIEFubm90YXRpb25zLm9mKHdhcm5PbikuYWRkV2FybmluZ1YyKCdAY2RrLWxhbWJkYS13ZWI6c2VydmljZVByaW5jaXBhbFdpdGhvdXRTb3VyY2UnLFxuICAgICAgICAgICAgYFRoZSByZXNvdXJjZSBwb2xpY3kgbGV0cyAke1suLi5uZXcgU2V0KHVuc2NvcGVkU2VydmljZXMpXS5qb2luKCcsICcpfSBjYWxsIHRoZSBmdW5jdGlvbiBmcm9tIGFueSBhY2NvdW50LiBSZXN0cmljdCBpdCB3aXRoIHNvdXJjZUFybiBvciBzb3VyY2VBY2NvdW50IChhZGRQZXJtaXNzaW9uKSwgb3IgYSBwcmluY2lwYWwgd2l0aCBjb25kaXRpb25zLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZHMgPSAoanNvbj8uU3RhdGVtZW50ID8/IFtdKS5tYXAoKHM6IHsgU2lkOiBzdHJpbmcgfSkgPT4gcy5TaWQpO1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVzID0gWy4uLm5ldyBTZXQoc2lkcy5maWx0ZXIoKHNpZDogc3RyaW5nLCBpOiBudW1iZXIpID0+IHNpZHMuaW5kZXhPZihzaWQpICE9PSBpKSldO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLnRoaXMuZG9jdW1lbnQudmFsaWRhdGVGb3JSZXNvdXJjZVBvbGljeSgpLFxuICAgICAgICAgIC4uLmVycm9ycy5tYXAoKGUpID0+IGByZXNvdXJjZSBwb2xpY3k6ICR7ZX1gKSxcbiAgICAgICAgICAuLi5kdXBsaWNhdGVzLm1hcCgoc2lkKSA9PiBgcmVzb3VyY2UgcG9saWN5OiBtb3JlIHRoYW4gb25lIHN0YXRlbWVudCBoYXMgU2lkICcke3NpZH0nYCksXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEFkZHMgYSBzdGF0ZW1lbnQgKGEgY29weSwgd2l0aCBhIFNpZCBpZiBpdCBoYXMgbm9uZSkuIEFuIGlkZW50aWNhbCBzdGF0ZW1lbnQgaXMgb25seSBhZGRlZCBvbmNlLiAqL1xuICBwdWJsaWMgYWRkKHN0YXRlbWVudDogaWFtLlBvbGljeVN0YXRlbWVudCk6IHZvaWQge1xuICAgIC8vIFJlc29sdmVkIGZvciB0aGUgY29tcGFyaXNvbiBvbmx5OiBwcmluY2lwYWxzIHJlbmRlciBhIG5ldyB0b2tlbiBlYWNoIHRpbWUgKGUuZy4gU2VydmljZVByaW5jaXBhbCkuXG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoU3RhY2sub2YodGhpcykucmVzb2x2ZShzdGF0ZW1lbnQudG9TdGF0ZW1lbnRKc29uKCkpKTtcbiAgICBpZiAodGhpcy5hZGRlZC5oYXMoa2V5KSkgcmV0dXJuO1xuICAgIGNvbnN0IHNpZCA9IHN0YXRlbWVudC5zaWQgPz8gYCR7dGhpcy5zaWRQcmVmaXh9JHt0aGlzLmNvdW50ZXIrK31gO1xuICAgIHRoaXMuYWRkZWQuc2V0KGtleSwgc2lkKTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZFN0YXRlbWVudHMoc3RhdGVtZW50LnNpZCA/IHN0YXRlbWVudCA6IHN0YXRlbWVudC5jb3B5KHsgc2lkIH0pKTtcbiAgfVxufVxuIl19
|
|
@@ -11,7 +11,7 @@ const MAX_STEPS = 20;
|
|
|
11
11
|
* How an endpoint moves its traffic to a new revision.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionDeployment {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.8" };
|
|
15
15
|
/**
|
|
16
16
|
* All traffic moves to the new revision at once, as soon as it's ready (the default).
|
|
17
17
|
*/
|
|
@@ -53,7 +53,7 @@ const web_function_grants_1 = require("./web-function-grants");
|
|
|
53
53
|
* Endpoints are created only through `WebFunction`, which owns their log groups in every region, so the constructor is private.
|
|
54
54
|
*/
|
|
55
55
|
class WebFunctionEndpoint extends constructs_1.Construct {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpoint", version: "0.1.
|
|
56
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpoint", version: "0.1.8" };
|
|
57
57
|
/**
|
|
58
58
|
* Creates an endpoint of a Web Function. Used by `WebFunction`.
|
|
59
59
|
*
|
|
@@ -6,7 +6,7 @@ import type { WebFunctionEndpoint } from './web-function-endpoint';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class WebFunctionGrants {
|
|
8
8
|
private readonly endpointArns;
|
|
9
|
-
private readonly webFunction
|
|
9
|
+
private readonly webFunction;
|
|
10
10
|
/**
|
|
11
11
|
* @internal
|
|
12
12
|
*/
|
|
@@ -16,7 +16,7 @@ export declare class WebFunctionGrants {
|
|
|
16
16
|
*
|
|
17
17
|
* @internal
|
|
18
18
|
*/
|
|
19
|
-
static _forEndpointArns(endpointArns: string[]): WebFunctionGrants;
|
|
19
|
+
static _forEndpointArns(endpointArns: string[], webFunction: IWebFunction): WebFunctionGrants;
|
|
20
20
|
private constructor();
|
|
21
21
|
/**
|
|
22
22
|
* Allows `grantee` to call the endpoint (`lambda:InvokeWebFunctionEndpoint`).
|
|
@@ -25,7 +25,7 @@ export declare class WebFunctionGrants {
|
|
|
25
25
|
* endpoint serves from, including a MULTI_REGION global URL.
|
|
26
26
|
*
|
|
27
27
|
* A grantee in the function's account gets an IAM policy statement. Another account or an AWS service also gets
|
|
28
|
-
* a statement in the function's resource policy
|
|
28
|
+
* a statement in the function's resource policy.
|
|
29
29
|
*/
|
|
30
30
|
invoke(grantee: iam.IGrantable): iam.Grant;
|
|
31
31
|
}
|
|
@@ -42,7 +42,7 @@ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
|
42
42
|
class WebFunctionGrants {
|
|
43
43
|
endpointArns;
|
|
44
44
|
webFunction;
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionGrants", version: "0.1.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionGrants", version: "0.1.8" };
|
|
46
46
|
/**
|
|
47
47
|
* @internal
|
|
48
48
|
*/
|
|
@@ -54,8 +54,8 @@ class WebFunctionGrants {
|
|
|
54
54
|
*
|
|
55
55
|
* @internal
|
|
56
56
|
*/
|
|
57
|
-
static _forEndpointArns(endpointArns) {
|
|
58
|
-
return new WebFunctionGrants(() => endpointArns);
|
|
57
|
+
static _forEndpointArns(endpointArns, webFunction) {
|
|
58
|
+
return new WebFunctionGrants(() => endpointArns, webFunction);
|
|
59
59
|
}
|
|
60
60
|
constructor(endpointArns, webFunction) {
|
|
61
61
|
this.endpointArns = endpointArns;
|
|
@@ -68,14 +68,13 @@ class WebFunctionGrants {
|
|
|
68
68
|
* endpoint serves from, including a MULTI_REGION global URL.
|
|
69
69
|
*
|
|
70
70
|
* A grantee in the function's account gets an IAM policy statement. Another account or an AWS service also gets
|
|
71
|
-
* a statement in the function's resource policy
|
|
71
|
+
* a statement in the function's resource policy.
|
|
72
72
|
*/
|
|
73
73
|
invoke(grantee) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
: iam.Grant.addToPrincipal(options);
|
|
74
|
+
return iam.Grant.addToPrincipalOrResource({
|
|
75
|
+
grantee, actions: ['lambda:InvokeWebFunctionEndpoint'], resourceArns: this.endpointArns(), resource: this.webFunction,
|
|
76
|
+
});
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
exports.WebFunctionGrants = WebFunctionGrants;
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLWdyYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItZnVuY3Rpb24tZ3JhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFJM0M7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQWlCUztJQUErQzs7SUFoQnBGOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUE2QixFQUFFLFdBQXlCO1FBQ2pGLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFzQixFQUFFLFdBQXlCO1FBQzlFLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFlBQXFDLFlBQTRCLEVBQW1CLFdBQXlCO1FBQXhFLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUFtQixnQkFBVyxHQUFYLFdBQVcsQ0FBYztJQUFHLENBQUM7SUFFakg7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsT0FBdUI7UUFDbkMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDO1lBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQ3RILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaENILDhDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSVdlYkZ1bmN0aW9uIH0gZnJvbSAnLi93ZWItZnVuY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBXZWJGdW5jdGlvbkVuZHBvaW50IH0gZnJvbSAnLi93ZWItZnVuY3Rpb24tZW5kcG9pbnQnO1xuXG4vKipcbiAqIEdyYW50cyBvbiBhIFdlYiBGdW5jdGlvbiBlbmRwb2ludC4gQWNjZXNzIHRoZW0gYXMgYGZuLmdyYW50c2AgKHRoZSBkZWZhdWx0IGVuZHBvaW50KSBvciBgZW5kcG9pbnQuZ3JhbnRzYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uR3JhbnRzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfZm9yRW5kcG9pbnQoZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQsIHdlYkZ1bmN0aW9uOiBJV2ViRnVuY3Rpb24pOiBXZWJGdW5jdGlvbkdyYW50cyB7XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbkdyYW50cygoKSA9PiBbZW5kcG9pbnQuZW5kcG9pbnRBcm5dLCB3ZWJGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIG9uIGVuZHBvaW50cyBrbm93biBvbmx5IGJ5IEFSTiAoYW4gaW1wb3J0ZWQgZnVuY3Rpb24ncykuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfZm9yRW5kcG9pbnRBcm5zKGVuZHBvaW50QXJuczogc3RyaW5nW10sIHdlYkZ1bmN0aW9uOiBJV2ViRnVuY3Rpb24pOiBXZWJGdW5jdGlvbkdyYW50cyB7XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbkdyYW50cygoKSA9PiBlbmRwb2ludEFybnMsIHdlYkZ1bmN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlbmRwb2ludEFybnM6ICgpID0+IHN0cmluZ1tdLCBwcml2YXRlIHJlYWRvbmx5IHdlYkZ1bmN0aW9uOiBJV2ViRnVuY3Rpb24pIHt9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBgZ3JhbnRlZWAgdG8gY2FsbCB0aGUgZW5kcG9pbnQgKGBsYW1iZGE6SW52b2tlV2ViRnVuY3Rpb25FbmRwb2ludGApLlxuICAgKlxuICAgKiBUaGUgZ3JhbnQgaXMgb24gdGhlIGVuZHBvaW50J3MgaG9tZS1yZWdpb24gQVJOLCB3aGljaCBJQU0gZXZhbHVhdGVzIGZvciBldmVyeSByZWdpb24gdGhlXG4gICAqIGVuZHBvaW50IHNlcnZlcyBmcm9tLCBpbmNsdWRpbmcgYSBNVUxUSV9SRUdJT04gZ2xvYmFsIFVSTC5cbiAgICpcbiAgICogQSBncmFudGVlIGluIHRoZSBmdW5jdGlvbidzIGFjY291bnQgZ2V0cyBhbiBJQU0gcG9saWN5IHN0YXRlbWVudC4gQW5vdGhlciBhY2NvdW50IG9yIGFuIEFXUyBzZXJ2aWNlIGFsc28gZ2V0c1xuICAgKiBhIHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb24ncyByZXNvdXJjZSBwb2xpY3kuXG4gICAqL1xuICBwdWJsaWMgaW52b2tlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsT3JSZXNvdXJjZSh7XG4gICAgICBncmFudGVlLCBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VXZWJGdW5jdGlvbkVuZHBvaW50J10sIHJlc291cmNlQXJuczogdGhpcy5lbmRwb2ludEFybnMoKSwgcmVzb3VyY2U6IHRoaXMud2ViRnVuY3Rpb24sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -57,7 +57,7 @@ export declare class WebFunctionOrigin extends cloudfront.OriginBase {
|
|
|
57
57
|
* (`always-amz-auth`, which keeps the viewer's `Authorization` header for your application), and the function's
|
|
58
58
|
* resource policy allows `cloudfront.amazonaws.com` to call this endpoint on behalf of this distribution only.
|
|
59
59
|
*
|
|
60
|
-
* The distribution
|
|
60
|
+
* The distribution can be in another stack than the function, in the same account.
|
|
61
61
|
*/
|
|
62
62
|
static withOriginAccessControl(endpoint: WebFunctionEndpoint, props?: WebFunctionOriginWithOacProps): cloudfront.IOrigin;
|
|
63
63
|
private readonly props;
|
|
@@ -54,13 +54,13 @@ const OPT_IN_REGIONS = [
|
|
|
54
54
|
* and only your distribution may call the endpoint. `new WebFunctionOrigin(endpoint)` is for a public (`NONE`) endpoint.
|
|
55
55
|
*/
|
|
56
56
|
class WebFunctionOrigin extends cloudfront.OriginBase {
|
|
57
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionOrigin", version: "0.1.
|
|
57
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionOrigin", version: "0.1.8" };
|
|
58
58
|
/**
|
|
59
59
|
* An origin for an `AWS_IAM` endpoint, with origin access control: CloudFront signs every request to the endpoint
|
|
60
60
|
* (`always-amz-auth`, which keeps the viewer's `Authorization` header for your application), and the function's
|
|
61
61
|
* resource policy allows `cloudfront.amazonaws.com` to call this endpoint on behalf of this distribution only.
|
|
62
62
|
*
|
|
63
|
-
* The distribution
|
|
63
|
+
* The distribution can be in another stack than the function, in the same account.
|
|
64
64
|
*/
|
|
65
65
|
static withOriginAccessControl(endpoint, props = {}) {
|
|
66
66
|
if (endpoint.authType !== enums_1.WebFunctionAuthType.AWS_IAM) {
|
|
@@ -107,15 +107,13 @@ class WebFunctionOriginWithOac extends cloudfront.OriginBase {
|
|
|
107
107
|
bind(scope, options) {
|
|
108
108
|
const config = super.bind(scope, options);
|
|
109
109
|
const stack = aws_cdk_lib_1.Stack.of(scope);
|
|
110
|
-
if (stack !== aws_cdk_lib_1.Stack.of(this.endpoint)) {
|
|
111
|
-
// The resource policy names the distribution, and the distribution names the endpoint: a reference cycle.
|
|
112
|
-
throw new Error(`${scope.node.path}: a distribution with a WebFunctionOrigin must be in the function's stack (${aws_cdk_lib_1.Stack.of(this.endpoint).stackName})`);
|
|
113
|
-
}
|
|
114
110
|
if (options.distributionId === undefined) {
|
|
115
111
|
throw new Error(`${scope.node.path}: a WebFunctionOrigin with origin access control must be used by a cloudfront.Distribution (its ID scopes the resource policy)`);
|
|
116
112
|
}
|
|
117
113
|
const oac = this.props.originAccessControl ?? this.sharedOriginAccessControl(stack);
|
|
118
|
-
|
|
114
|
+
// Written from the distribution's stack: the statement names the distribution, which names the endpoint, so a
|
|
115
|
+
// statement in the function's stack would make a reference cycle when the distribution is in another stack.
|
|
116
|
+
const result = this.endpoint.webFunction._addToResourcePolicyFrom(scope, new iam.PolicyStatement({
|
|
119
117
|
principals: [new iam.ServicePrincipal('cloudfront.amazonaws.com')],
|
|
120
118
|
actions: ['lambda:InvokeWebFunctionEndpoint'],
|
|
121
119
|
resources: [this.endpoint.endpointArn],
|
|
@@ -126,7 +124,7 @@ class WebFunctionOriginWithOac extends cloudfront.OriginBase {
|
|
|
126
124
|
},
|
|
127
125
|
}));
|
|
128
126
|
if (!result.statementAdded) {
|
|
129
|
-
throw new Error(`${scope.node.path}: could not add CloudFront to the resource policy of ${this.endpoint.webFunction.node.path}`);
|
|
127
|
+
throw new Error(`${scope.node.path}: could not add CloudFront to the resource policy of ${this.endpoint.webFunction.node.path} (the distribution must be in the function's account)`);
|
|
130
128
|
}
|
|
131
129
|
return { ...config, originProperty: { ...config.originProperty, originAccessControlId: oac.originAccessControlRef.originAccessControlId } };
|
|
132
130
|
}
|
|
@@ -198,4 +196,4 @@ function customOriginConfig(props) {
|
|
|
198
196
|
ipAddressType: props.ipAddressType,
|
|
199
197
|
};
|
|
200
198
|
}
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLW9yaWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItZnVuY3Rpb24tb3JpZ2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBa0U7QUFDbEUsdUVBQXlEO0FBQ3pELHlEQUEyQztBQUUzQyxtQ0FBdUU7QUFHdkU7OztHQUdHO0FBQ0gsTUFBTSxjQUFjLEdBQUc7SUFDckIsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQjtJQUM1SCxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYztDQUN4SSxDQUFDO0FBbURGOzs7OztHQUtHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxVQUFVLENBQUMsVUFBVTs7SUFDMUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHVCQUF1QixDQUFDLFFBQTZCLEVBQUUsUUFBdUMsRUFBRTtRQUM1RyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssMkJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxrRUFBa0UsUUFBUSxDQUFDLFFBQVEsMkVBQTJFLENBQUMsQ0FBQztRQUN2TSxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLCtCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25FLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFD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QUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFVBQVU7UUFDaEUsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRTtRQUNqRCxzQkFBc0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFO1FBQzNELGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtLQUNuQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBMYXp5LCBOYW1lcywgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgV2ViRnVuY3Rpb25BdXRoVHlwZSwgV2ViRnVuY3Rpb25FbmRwb2ludFR5cGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB0eXBlIHsgV2ViRnVuY3Rpb25FbmRwb2ludCB9IGZyb20gJy4vd2ViLWZ1bmN0aW9uLWVuZHBvaW50JztcblxuLyoqXG4gKiBSZWdpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuIENsb3VkRnJvbnQgY2FuJ3Qgc2lnbiBhIHJlcXVlc3QgdGhhdCBhIE1VTFRJX1JFR0lPTiBlbmRwb2ludCByb3V0ZXNcbiAqIHRvIG9uZSBvZiB0aGVtLCBzbyB0aGUgb3JpZ2luIHJldHVybnMgNDAzIChDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSwgTGFtYmRhIFdlYiBGdW5jdGlvbiBvcmlnaW5zLCAyMDI2LTEwKS5cbiAqL1xuY29uc3QgT1BUX0lOX1JFR0lPTlMgPSBbXG4gICdhZi1zb3V0aC0xJywgJ2FwLWVhc3QtMScsICdhcC1lYXN0LTInLCAnYXAtc291dGgtMicsICdhcC1zb3V0aGVhc3QtMycsICdhcC1zb3V0aGVhc3QtNCcsICdhcC1zb3V0aGVhc3QtNScsICdhcC1zb3V0aGVhc3QtNicsXG4gICdhcC1zb3V0aGVhc3QtNycsICdjYS13ZXN0LTEnLCAnZXUtY2VudHJhbC0yJywgJ2V1LXNvdXRoLTEnLCAnZXUtc291dGgtMicsICdpbC1jZW50cmFsLTEnLCAnbWUtY2VudHJhbC0xJywgJ21lLXNvdXRoLTEnLCAnbXgtY2VudHJhbC0xJyxcbl07XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBXZWIgRnVuY3Rpb24gZW5kcG9pbnQgb3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkZ1bmN0aW9uT3JpZ2luUHJvcHMgZXh0ZW5kcyBjbG91ZGZyb250Lk9yaWdpblByb3BzIHtcbiAgLyoqXG4gICAqIEZvciBhIGBQRVJfUkVHSU9OYCBlbmRwb2ludDogdGhlIHJlZ2lvbiB3aG9zZSBVUkwgQ2xvdWRGcm9udCBjYWxscy4gT25seSBvbmUgcmVnaW9uIHBlciBvcmlnaW47IHVzZSBhbiBvcmlnaW5cbiAgICogZ3JvdXAgb3Igb25lIG9yaWdpbiBwZXIgYmVoYXZpb3IgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGVuZHBvaW50J3MgaG9tZSByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGxvbmcgQ2xvdWRGcm9udCB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4uIEFib3ZlIDEyMCBzZWNvbmRzIG5lZWRzIGEgQ2xvdWRGcm9udCBxdW90YSBpbmNyZWFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIENsb3VkRnJvbnQga2VlcHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbiBvcGVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDUpXG4gICAqL1xuICByZWFkb25seSBrZWVwYWxpdmVUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFdoaWNoIElQIHByb3RvY29sIENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IE9yaWdpbklwQWRkcmVzc1R5cGUuSVBWNFxuICAgKi9cbiAgcmVhZG9ubHkgaXBBZGRyZXNzVHlwZT86IGNsb3VkZnJvbnQuT3JpZ2luSXBBZGRyZXNzVHlwZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIFdlYiBGdW5jdGlvbiBlbmRwb2ludCBvcmlnaW4gd2l0aCBvcmlnaW4gYWNjZXNzIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViRnVuY3Rpb25PcmlnaW5XaXRoT2FjUHJvcHMgZXh0ZW5kcyBXZWJGdW5jdGlvbk9yaWdpblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gYWNjZXNzIGNvbnRyb2wuIEl0IG11c3QgaGF2ZSBvcmlnaW4gdHlwZSBgbGFtYmRhYCwgc2lnbmluZyBiZWhhdmlvciBgYWx3YXlzLWFtei1hdXRoYCwgYW5kIHNpZ25pbmdcbiAgICogcHJvdG9jb2wgYHNpZ3Y0YCAoYSByZWdpb25hbCBlbmRwb2ludCkgb3IgYHNpZ3Y0YWAgKGEgYE1VTFRJX1JFR0lPTmAgZW5kcG9pbnQncyBnbG9iYWwgZG9tYWluKS4gQ2hlY2tlZCBhdFxuICAgKiBzeW50aGVzaXMgd2hlbiBpdCdzIGRlZmluZWQgaW4gdGhpcyBhcHAgKENESydzIGBGdW5jdGlvblVybE9yaWdpbkFjY2Vzc0NvbnRyb2xgIHNpZ25zIHdpdGggYGFsd2F5c2AsIHdoaWNoXG4gICAqIENsb3VkRnJvbnQgcmVqZWN0cyBmb3IgV2ViIEZ1bmN0aW9uIG9yaWdpbnMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9uZSBpcyBjcmVhdGVkIHBlciBzdGFjayBhbmQgc2lnbmluZyBwcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luQWNjZXNzQ29udHJvbD86IGNsb3VkZnJvbnQuSU9yaWdpbkFjY2Vzc0NvbnRyb2xSZWY7XG59XG5cbi8qKlxuICogQSBDbG91ZEZyb250IG9yaWdpbiBmb3IgYSBXZWIgRnVuY3Rpb24gZW5kcG9pbnQuXG4gKlxuICogVXNlIGBXZWJGdW5jdGlvbk9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbChlbmRwb2ludClgIGZvciBhbiBgQVdTX0lBTWAgZW5kcG9pbnQ6IENsb3VkRnJvbnQgc2lnbnMgZXZlcnkgcmVxdWVzdCxcbiAqIGFuZCBvbmx5IHlvdXIgZGlzdHJpYnV0aW9uIG1heSBjYWxsIHRoZSBlbmRwb2ludC4gYG5ldyBXZWJGdW5jdGlvbk9yaWdpbihlbmRwb2ludClgIGlzIGZvciBhIHB1YmxpYyAoYE5PTkVgKSBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uT3JpZ2luIGV4dGVuZHMgY2xvdWRmcm9udC5PcmlnaW5CYXNlIHtcbiAgLyoqXG4gICAqIEFuIG9yaWdpbiBmb3IgYW4gYEFXU19JQU1gIGVuZHBvaW50LCB3aXRoIG9yaWdpbiBhY2Nlc3MgY29udHJvbDogQ2xvdWRGcm9udCBzaWducyBldmVyeSByZXF1ZXN0IHRvIHRoZSBlbmRwb2ludFxuICAgKiAoYGFsd2F5cy1hbXotYXV0aGAsIHdoaWNoIGtlZXBzIHRoZSB2aWV3ZXIncyBgQXV0aG9yaXphdGlvbmAgaGVhZGVyIGZvciB5b3VyIGFwcGxpY2F0aW9uKSwgYW5kIHRoZSBmdW5jdGlvbidzXG4gICAqIHJlc291cmNlIHBvbGljeSBhbGxvd3MgYGNsb3VkZnJvbnQuYW1hem9uYXdzLmNvbWAgdG8gY2FsbCB0aGlzIGVuZHBvaW50IG9uIGJlaGFsZiBvZiB0aGlzIGRpc3RyaWJ1dGlvbiBvbmx5LlxuICAgKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdGhlIGZ1bmN0aW9uJ3Mgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGhPcmlnaW5BY2Nlc3NDb250cm9sKGVuZHBvaW50OiBXZWJGdW5jdGlvbkVuZHBvaW50LCBwcm9wczogV2ViRnVuY3Rpb25PcmlnaW5XaXRoT2FjUHJvcHMgPSB7fSk6IGNsb3VkZnJvbnQuSU9yaWdpbiB7XG4gICAgaWYgKGVuZHBvaW50LmF1dGhUeXBlICE9PSBXZWJGdW5jdGlvbkF1dGhUeXBlLkFXU19JQU0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbmRwb2ludC5ub2RlLnBhdGh9OiBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgbmVlZHMgYW4gQVdTX0lBTSBlbmRwb2ludCAodGhpcyBvbmUgaXMgJHtlbmRwb2ludC5hdXRoVHlwZX0sIHdoaWNoIExhbWJkYSBkb2Vzbid0IGF1dGhlbnRpY2F0ZSk7IHVzZSBuZXcgV2ViRnVuY3Rpb25PcmlnaW4oZW5kcG9pbnQpYCk7XG4gICAgfVxuICAgIGlmIChlbmRwb2ludC5lbmRwb2ludFR5cGUgPT09IFdlYkZ1bmN0aW9uRW5kcG9pbnRUeXBlLk1VTFRJX1JFR0lPTikge1xuICAgICAgY29uc3Qgb3B0SW4gPSBlbmRwb2ludC5yZWdpb25zLmZpbHRlcigocikgPT4gT1BUX0lOX1JFR0lPTlMuaW5jbHVkZXMocikpO1xuICAgICAgaWYgKG9wdEluLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VuZHBvaW50Lm5vZGUucGF0aH06IENsb3VkRnJvbnQgY2FuJ3Qgc2lnbiByZXF1ZXN0cyB0aGF0IGEgTVVMVElfUkVHSU9OIGVuZHBvaW50IHJvdXRlcyB0byBvcHQtaW4gcmVnaW9ucyAoJHtvcHRJbi5qb2luKCcsICcpfSk7IHVzZSBhIFBFUl9SRUdJT04gZW5kcG9pbnQgYW5kIG9uZSBvcmlnaW4gcGVyIHJlZ2lvbmApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uT3JpZ2luV2l0aE9hYyhlbmRwb2ludCwgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogV2ViRnVuY3Rpb25PcmlnaW5Qcm9wcztcblxuICBjb25zdHJ1Y3RvcihlbmRwb2ludDogV2ViRnVuY3Rpb25FbmRwb2ludCwgcHJvcHM6IFdlYkZ1bmN0aW9uT3JpZ2luUHJvcHMgPSB7fSkge1xuICAgIGlmIChlbmRwb2ludC5hdXRoVHlwZSA9PT0gV2ViRnVuY3Rpb25BdXRoVHlwZS5BV1NfSUFNKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW5kcG9pbnQubm9kZS5wYXRofTogQ2xvdWRGcm9udCBjYW4gb25seSBjYWxsIGFuIEFXU19JQU0gZW5kcG9pbnQgd2l0aCBvcmlnaW4gYWNjZXNzIGNvbnRyb2w7IHVzZSBXZWJGdW5jdGlvbk9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbChlbmRwb2ludClgKTtcbiAgICB9XG4gICAgc3VwZXIob3JpZ2luRG9tYWluTmFtZShlbmRwb2ludCwgcHJvcHMucmVnaW9uKSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlVGltZW91dHMoZW5kcG9pbnQsIHByb3BzKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVzcG9uc2VDb21wbGV0aW9uVGltZW91dFdpdGhSZWFkVGltZW91dChwcm9wcy5yZXNwb25zZUNvbXBsZXRpb25UaW1lb3V0LCBwcm9wcy5yZWFkVGltZW91dCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckN1c3RvbU9yaWdpbkNvbmZpZygpOiBjbG91ZGZyb250LkNmbkRpc3RyaWJ1dGlvbi5DdXN0b21PcmlnaW5Db25maWdQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGN1c3RvbU9yaWdpbkNvbmZpZyh0aGlzLnByb3BzKTtcbiAgfVxufVxuXG5jbGFzcyBXZWJGdW5jdGlvbk9yaWdpbldpdGhPYWMgZXh0ZW5kcyBjbG91ZGZyb250Lk9yaWdpbkJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHNpZ25pbmdQcm90b2NvbDogJ3NpZ3Y0JyB8ICdzaWd2NGEnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQsIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFdlYkZ1bmN0aW9uT3JpZ2luV2l0aE9hY1Byb3BzKSB7XG4gICAgc3VwZXIob3JpZ2luRG9tYWluTmFtZShlbmRwb2ludCwgcHJvcHMucmVnaW9uKSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlVGltZW91dHMoZW5kcG9pbnQsIHByb3BzKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVzcG9uc2VDb21wbGV0aW9uVGltZW91dFdpdGhSZWFkVGltZW91dChwcm9wcy5yZXNwb25zZUNvbXBsZXRpb25UaW1lb3V0LCBwcm9wcy5yZWFkVGltZW91dCk7XG4gICAgLy8gVGhlIGdsb2JhbCBkb21haW4gcm91dGVzIHRvIGFueSBvZiB0aGUgZW5kcG9pbnQncyByZWdpb25zLCBzbyBDbG91ZEZyb250IHNpZ25zIGZvciBhbGwgb2YgdGhlbS5cbiAgICB0aGlzLnNpZ25pbmdQcm90b2NvbCA9IGVuZHBvaW50LmVuZHBvaW50VHlwZSA9PT0gV2ViRnVuY3Rpb25FbmRwb2ludFR5cGUuTVVMVElfUkVHSU9OID8gJ3NpZ3Y0YScgOiAnc2lndjQnO1xuICAgIGlmIChwcm9wcy5vcmlnaW5BY2Nlc3NDb250cm9sKSBhc3NlcnRPcmlnaW5BY2Nlc3NDb250cm9sKGVuZHBvaW50LCBwcm9wcy5vcmlnaW5BY2Nlc3NDb250cm9sLCB0aGlzLnNpZ25pbmdQcm90b2NvbCk7XG4gIH1cblxuICBwdWJsaWMgYmluZChzY29wZTogQ29uc3RydWN0LCBvcHRpb25zOiBjbG91ZGZyb250Lk9yaWdpbkJpbmRPcHRpb25zKTogY2xvdWRmcm9udC5PcmlnaW5CaW5kQ29uZmlnIHtcbiAgICBjb25zdCBjb25maWcgPSBzdXBlci5iaW5kKHNjb3BlLCBvcHRpb25zKTtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBpZiAoc3RhY2sgIT09IFN0YWNrLm9mKHRoaXMuZW5kcG9pbnQpKSB7XG4gICAgICAvLyBUaGUgcmVzb3VyY2UgcG9saWN5IG5hbWVzIHRoZSBkaXN0cmlidXRpb24sIGFuZCB0aGUgZGlzdHJpYnV0aW9uIG5hbWVzIHRoZSBlbmRwb2ludDogYSByZWZlcmVuY2UgY3ljbGUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2NvcGUubm9kZS5wYXRofTogYSBkaXN0cmlidXRpb24gd2l0aCBhIFdlYkZ1bmN0aW9uT3JpZ2luIG11c3QgYmUgaW4gdGhlIGZ1bmN0aW9uJ3Mgc3RhY2sgKCR7U3RhY2sub2YodGhpcy5lbmRwb2ludCkuc3RhY2tOYW1lfSlgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGlzdHJpYnV0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Njb3BlLm5vZGUucGF0aH06IGEgV2ViRnVuY3Rpb25PcmlnaW4gd2l0aCBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgbXVzdCBiZSB1c2VkIGJ5IGEgY2xvdWRmcm9udC5EaXN0cmlidXRpb24gKGl0cyBJRCBzY29wZXMgdGhlIHJlc291cmNlIHBvbGljeSlgKTtcbiAgICB9XG4gICAgY29uc3Qgb2FjID0gdGhpcy5wcm9wcy5vcmlnaW5BY2Nlc3NDb250cm9sID8/IHRoaXMuc2hhcmVkT3JpZ2luQWNjZXNzQ29udHJvbChzdGFjayk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmVuZHBvaW50LndlYkZ1bmN0aW9uLmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgcHJpbmNpcGFsczogW25ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnY2xvdWRmcm9udC5hbWF6b25hd3MuY29tJyldLFxuICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlV2ViRnVuY3Rpb25FbmRwb2ludCddLFxuICAgICAgcmVzb3VyY2VzOiBbdGhpcy5lbmRwb2ludC5lbmRwb2ludEFybl0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICdhd3M6U291cmNlQXJuJzogc3RhY2suZm9ybWF0QXJuKHsgc2VydmljZTogJ2Nsb3VkZnJvbnQnLCByZWdpb246ICcnLCByZXNvdXJjZTogJ2Rpc3RyaWJ1dGlvbicsIHJlc291cmNlTmFtZTogb3B0aW9ucy5kaXN0cmlidXRpb25JZCB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICAgIGlmICghcmVzdWx0LnN0YXRlbWVudEFkZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2NvcGUubm9kZS5wYXRofTogY291bGQgbm90IGFkZCBDbG91ZEZyb250IHRvIHRoZSByZXNvdXJjZSBwb2xpY3kgb2YgJHt0aGlzLmVuZHBvaW50LndlYkZ1bmN0aW9uLm5vZGUucGF0aH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5jb25maWcsIG9yaWdpblByb3BlcnR5OiB7IC4uLmNvbmZpZy5vcmlnaW5Qcm9wZXJ0eSEsIG9yaWdpbkFjY2Vzc0NvbnRyb2xJZDogb2FjLm9yaWdpbkFjY2Vzc0NvbnRyb2xSZWYub3JpZ2luQWNjZXNzQ29udHJvbElkIH0gfTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJDdXN0b21PcmlnaW5Db25maWcoKTogY2xvdWRmcm9udC5DZm5EaXN0cmlidXRpb24uQ3VzdG9tT3JpZ2luQ29uZmlnUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBjdXN0b21PcmlnaW5Db25maWcodGhpcy5wcm9wcyk7XG4gIH1cblxuICAvKiogT25lIG9yaWdpbiBhY2Nlc3MgY29udHJvbCBwZXIgc3RhY2sgYW5kIHNpZ25pbmcgcHJvdG9jb2wsIHNoYXJlZCBieSB0aGUgc3RhY2sncyBXZWIgRnVuY3Rpb24gb3JpZ2lucy4gKi9cbiAgcHJpdmF0ZSBzaGFyZWRPcmlnaW5BY2Nlc3NDb250cm9sKHNjb3BlOiBTdGFjayk6IGNsb3VkZnJvbnQuSU9yaWdpbkFjY2Vzc0NvbnRyb2xSZWYge1xuICAgIGNvbnN0IGlkID0gYFdlYkZ1bmN0aW9uT3JpZ2luQWNjZXNzQ29udHJvbCR7dGhpcy5zaWduaW5nUHJvdG9jb2wgPT09ICdzaWd2NGEnID8gJ1NpZ1Y0YScgOiAnU2lnVjQnfWA7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzY29wZS5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgY2xvdWRmcm9udC5DZm5PcmlnaW5BY2Nlc3NDb250cm9sIHwgdW5kZWZpbmVkO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIGNvbnN0IG9hYzogY2xvdWRmcm9udC5DZm5PcmlnaW5BY2Nlc3NDb250cm9sID0gbmV3IGNsb3VkZnJvbnQuQ2ZuT3JpZ2luQWNjZXNzQ29udHJvbChzY29wZSwgaWQsIHtcbiAgICAgIG9yaWdpbkFjY2Vzc0NvbnRyb2xDb25maWc6IHtcbiAgICAgICAgLy8gVW5pcXVlIGluIHRoZSBhY2NvdW50LCBsaWtlIHRoZSBuYW1lcyBDREsgZ2VuZXJhdGVzIGZvciBpdHMgb3duIG9yaWdpbiBhY2Nlc3MgY29udHJvbHMuXG4gICAgICAgIG5hbWU6IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKG9hYywgeyBtYXhMZW5ndGg6IDY0IH0pIH0pLFxuICAgICAgICBkZXNjcmlwdGlvbjogYExhbWJkYSBXZWIgRnVuY3Rpb24gb3JpZ2lucyAoJHt0aGlzLnNpZ25pbmdQcm90b2NvbH0pYCxcbiAgICAgICAgLy8gVGhlIENESyBlbnVtcyBoYXZlIG5laXRoZXIgdmFsdWUgeWV0LiBMYW1iZGEgV2ViIEZ1bmN0aW9uIG9yaWdpbnMgYWNjZXB0IG9ubHkgYWx3YXlzLWFtei1hdXRoLlxuICAgICAgICBvcmlnaW5BY2Nlc3NDb250cm9sT3JpZ2luVHlwZTogJ2xhbWJkYScsXG4gICAgICAgIHNpZ25pbmdCZWhhdmlvcjogJ2Fsd2F5cy1hbXotYXV0aCcsXG4gICAgICAgIHNpZ25pbmdQcm90b2NvbDogdGhpcy5zaWduaW5nUHJvdG9jb2wsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBvYWM7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgYSBnaXZlbiBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgd2hlbiBpdHMgY29uZmlndXJhdGlvbiBpcyBrbm93biAob25lIGNyZWF0ZWQgaW4gdGhpcyBhcHAsIG5vdCBpbXBvcnRlZCk6XG4gKiBDbG91ZEZyb250IHJlamVjdHMgb3RoZXIgc2V0dGluZ3MgZm9yIGEgV2ViIEZ1bmN0aW9uIG9yaWdpbiBvbmx5IHdoZW4gdGhlIGRpc3RyaWJ1dGlvbiBkZXBsb3lzLlxuICovXG5mdW5jdGlvbiBhc3NlcnRPcmlnaW5BY2Nlc3NDb250cm9sKGVuZHBvaW50OiBXZWJGdW5jdGlvbkVuZHBvaW50LCBvYWM6IGNsb3VkZnJvbnQuSU9yaWdpbkFjY2Vzc0NvbnRyb2xSZWYsIHByb3RvY29sOiBzdHJpbmcpIHtcbiAgY29uc3QgY2ZuID0gb2FjIGluc3RhbmNlb2YgY2xvdWRmcm9udC5DZm5PcmlnaW5BY2Nlc3NDb250cm9sXG4gICAgPyBvYWNcbiAgICA6IG9hYy5ub2RlLmNoaWxkcmVuLmZpbmQoKGMpOiBjIGlzIGNsb3VkZnJvbnQuQ2ZuT3JpZ2luQWNjZXNzQ29udHJvbCA9PiBjIGluc3RhbmNlb2YgY2xvdWRmcm9udC5DZm5PcmlnaW5BY2Nlc3NDb250cm9sKTtcbiAgaWYgKGNmbiA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIGNvbnN0IGNvbmZpZyA9IFN0YWNrLm9mKGNmbikucmVzb2x2ZShjZm4ub3JpZ2luQWNjZXNzQ29udHJvbENvbmZpZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGV4cGVjdGVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBPcmlnaW5BY2Nlc3NDb250cm9sT3JpZ2luVHlwZTogJ2xhbWJkYScsIFNpZ25pbmdCZWhhdmlvcjogJ2Fsd2F5cy1hbXotYXV0aCcsIFNpZ25pbmdQcm90b2NvbDogcHJvdG9jb2wgfTtcbiAgY29uc3Qgd3JvbmcgPSBPYmplY3QuZW50cmllcyhleHBlY3RlZCkuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBjb25zdCBhY3R1YWwgPSBjb25maWdba2V5XSA/PyBjb25maWdba2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsga2V5LnNsaWNlKDEpXTtcbiAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ3N0cmluZycgJiYgYWN0dWFsICE9PSB2YWx1ZTtcbiAgfSk7XG4gIGlmICh3cm9uZy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2VuZHBvaW50Lm5vZGUucGF0aH06IHRoZSBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgJHtvYWMubm9kZS5wYXRofSBtdXN0IGhhdmUgJHt3cm9uZy5tYXAoKFtrLCB2XSkgPT4gYCR7a30gJyR7dn0nYCkuam9pbignLCAnKX0gZm9yIHRoaXMgZW5kcG9pbnRgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvcmlnaW5Eb21haW5OYW1lKGVuZHBvaW50OiBXZWJGdW5jdGlvbkVuZHBvaW50LCByZWdpb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocmVnaW9uID09PSB1bmRlZmluZWQpIHJldHVybiBlbmRwb2ludC5kb21haW5OYW1lO1xuICBpZiAoZW5kcG9pbnQuZW5kcG9pbnRUeXBlICE9PSBXZWJGdW5jdGlvbkVuZHBvaW50VHlwZS5QRVJfUkVHSU9OKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2VuZHBvaW50Lm5vZGUucGF0aH06IHJlZ2lvbiBpcyBvbmx5IGZvciBQRVJfUkVHSU9OIGVuZHBvaW50cyAodGhpcyBvbmUgaXMgJHtlbmRwb2ludC5lbmRwb2ludFR5cGV9KWApO1xuICB9XG4gIHJldHVybiBlbmRwb2ludC5yZWdpb25hbERvbWFpbk5hbWUocmVnaW9uKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lb3V0cyhlbmRwb2ludDogV2ViRnVuY3Rpb25FbmRwb2ludCwgcHJvcHM6IFdlYkZ1bmN0aW9uT3JpZ2luUHJvcHMpIHtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIFtbJ3JlYWRUaW1lb3V0JywgcHJvcHMucmVhZFRpbWVvdXRdLCBbJ2tlZXBhbGl2ZVRpbWVvdXQnLCBwcm9wcy5rZWVwYWxpdmVUaW1lb3V0XV0gYXMgY29uc3QpIHtcbiAgICBjb25zdCBzZWNvbmRzID0gdmFsdWU/LnRvU2Vjb25kcygpO1xuICAgIGlmIChzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChzZWNvbmRzKSAmJiAoIU51bWJlci5pc0ludGVnZXIoc2Vjb25kcykgfHwgc2Vjb25kcyA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW5kcG9pbnQubm9kZS5wYXRofTogJHtuYW1lfSBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIG9mIHNlY29uZHMsIGF0IGxlYXN0IDEsIGdvdCAke3NlY29uZHN9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGN1c3RvbU9yaWdpbkNvbmZpZyhwcm9wczogV2ViRnVuY3Rpb25PcmlnaW5Qcm9wcyk6IGNsb3VkZnJvbnQuQ2ZuRGlzdHJpYnV0aW9uLkN1c3RvbU9yaWdpbkNvbmZpZ1Byb3BlcnR5IHtcbiAgcmV0dXJuIHtcbiAgICBvcmlnaW5Qcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5PcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZLFxuICAgIG9yaWdpblNzbFByb3RvY29sczogW2Nsb3VkZnJvbnQuT3JpZ2luU3NsUG9saWN5LlRMU19WMV8yXSxcbiAgICBvcmlnaW5SZWFkVGltZW91dDogcHJvcHMucmVhZFRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgIG9yaWdpbktlZXBhbGl2ZVRpbWVvdXQ6IHByb3BzLmtlZXBhbGl2ZVRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgIGlwQWRkcmVzc1R5cGU6IHByb3BzLmlwQWRkcmVzc1R5cGUsXG4gIH07XG59XG4iXX0=
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLW9yaWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItZnVuY3Rpb24tb3JpZ2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBa0U7QUFDbEUsdUVBQXlEO0FBQ3pELHlEQUEyQztBQUUzQyxtQ0FBdUU7QUFJdkU7OztHQUdHO0FBQ0gsTUFBTSxjQUFjLEdBQUc7SUFDckIsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQjtJQUM1SCxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYztDQUN4SSxDQUFDO0FBbURGOzs7OztHQUtHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxVQUFVLENBQUMsVUFBVTs7SUFDMUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHVCQUF1QixDQUFDLFFBQTZCLEVBQUUsUUFBdUMsRUFBRTtRQUM1RyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssMkJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxrRUFBa0UsUUFBUSxDQUFDLFFBQVEsMkVBQTJFLENBQUMsQ0FBQztRQUN2TSxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLCtCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25FLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFD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RCxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7S0FDbkMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgTGF6eSwgTmFtZXMsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFdlYkZ1bmN0aW9uQXV0aFR5cGUsIFdlYkZ1bmN0aW9uRW5kcG9pbnRUeXBlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFdlYkZ1bmN0aW9uQmFzZSB9IGZyb20gJy4vd2ViLWZ1bmN0aW9uJztcbmltcG9ydCB0eXBlIHsgV2ViRnVuY3Rpb25FbmRwb2ludCB9IGZyb20gJy4vd2ViLWZ1bmN0aW9uLWVuZHBvaW50JztcblxuLyoqXG4gKiBSZWdpb25zIHRoYXQgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuIENsb3VkRnJvbnQgY2FuJ3Qgc2lnbiBhIHJlcXVlc3QgdGhhdCBhIE1VTFRJX1JFR0lPTiBlbmRwb2ludCByb3V0ZXNcbiAqIHRvIG9uZSBvZiB0aGVtLCBzbyB0aGUgb3JpZ2luIHJldHVybnMgNDAzIChDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSwgTGFtYmRhIFdlYiBGdW5jdGlvbiBvcmlnaW5zLCAyMDI2LTEwKS5cbiAqL1xuY29uc3QgT1BUX0lOX1JFR0lPTlMgPSBbXG4gICdhZi1zb3V0aC0xJywgJ2FwLWVhc3QtMScsICdhcC1lYXN0LTInLCAnYXAtc291dGgtMicsICdhcC1zb3V0aGVhc3QtMycsICdhcC1zb3V0aGVhc3QtNCcsICdhcC1zb3V0aGVhc3QtNScsICdhcC1zb3V0aGVhc3QtNicsXG4gICdhcC1zb3V0aGVhc3QtNycsICdjYS13ZXN0LTEnLCAnZXUtY2VudHJhbC0yJywgJ2V1LXNvdXRoLTEnLCAnZXUtc291dGgtMicsICdpbC1jZW50cmFsLTEnLCAnbWUtY2VudHJhbC0xJywgJ21lLXNvdXRoLTEnLCAnbXgtY2VudHJhbC0xJyxcbl07XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBXZWIgRnVuY3Rpb24gZW5kcG9pbnQgb3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkZ1bmN0aW9uT3JpZ2luUHJvcHMgZXh0ZW5kcyBjbG91ZGZyb250Lk9yaWdpblByb3BzIHtcbiAgLyoqXG4gICAqIEZvciBhIGBQRVJfUkVHSU9OYCBlbmRwb2ludDogdGhlIHJlZ2lvbiB3aG9zZSBVUkwgQ2xvdWRGcm9udCBjYWxscy4gT25seSBvbmUgcmVnaW9uIHBlciBvcmlnaW47IHVzZSBhbiBvcmlnaW5cbiAgICogZ3JvdXAgb3Igb25lIG9yaWdpbiBwZXIgYmVoYXZpb3IgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGVuZHBvaW50J3MgaG9tZSByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGxvbmcgQ2xvdWRGcm9udCB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4uIEFib3ZlIDEyMCBzZWNvbmRzIG5lZWRzIGEgQ2xvdWRGcm9udCBxdW90YSBpbmNyZWFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIENsb3VkRnJvbnQga2VlcHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbiBvcGVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDUpXG4gICAqL1xuICByZWFkb25seSBrZWVwYWxpdmVUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFdoaWNoIElQIHByb3RvY29sIENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IE9yaWdpbklwQWRkcmVzc1R5cGUuSVBWNFxuICAgKi9cbiAgcmVhZG9ubHkgaXBBZGRyZXNzVHlwZT86IGNsb3VkZnJvbnQuT3JpZ2luSXBBZGRyZXNzVHlwZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIFdlYiBGdW5jdGlvbiBlbmRwb2ludCBvcmlnaW4gd2l0aCBvcmlnaW4gYWNjZXNzIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViRnVuY3Rpb25PcmlnaW5XaXRoT2FjUHJvcHMgZXh0ZW5kcyBXZWJGdW5jdGlvbk9yaWdpblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gYWNjZXNzIGNvbnRyb2wuIEl0IG11c3QgaGF2ZSBvcmlnaW4gdHlwZSBgbGFtYmRhYCwgc2lnbmluZyBiZWhhdmlvciBgYWx3YXlzLWFtei1hdXRoYCwgYW5kIHNpZ25pbmdcbiAgICogcHJvdG9jb2wgYHNpZ3Y0YCAoYSByZWdpb25hbCBlbmRwb2ludCkgb3IgYHNpZ3Y0YWAgKGEgYE1VTFRJX1JFR0lPTmAgZW5kcG9pbnQncyBnbG9iYWwgZG9tYWluKS4gQ2hlY2tlZCBhdFxuICAgKiBzeW50aGVzaXMgd2hlbiBpdCdzIGRlZmluZWQgaW4gdGhpcyBhcHAgKENESydzIGBGdW5jdGlvblVybE9yaWdpbkFjY2Vzc0NvbnRyb2xgIHNpZ25zIHdpdGggYGFsd2F5c2AsIHdoaWNoXG4gICAqIENsb3VkRnJvbnQgcmVqZWN0cyBmb3IgV2ViIEZ1bmN0aW9uIG9yaWdpbnMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9uZSBpcyBjcmVhdGVkIHBlciBzdGFjayBhbmQgc2lnbmluZyBwcm90b2NvbFxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luQWNjZXNzQ29udHJvbD86IGNsb3VkZnJvbnQuSU9yaWdpbkFjY2Vzc0NvbnRyb2xSZWY7XG59XG5cbi8qKlxuICogQSBDbG91ZEZyb250IG9yaWdpbiBmb3IgYSBXZWIgRnVuY3Rpb24gZW5kcG9pbnQuXG4gKlxuICogVXNlIGBXZWJGdW5jdGlvbk9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbChlbmRwb2ludClgIGZvciBhbiBgQVdTX0lBTWAgZW5kcG9pbnQ6IENsb3VkRnJvbnQgc2lnbnMgZXZlcnkgcmVxdWVzdCxcbiAqIGFuZCBvbmx5IHlvdXIgZGlzdHJpYnV0aW9uIG1heSBjYWxsIHRoZSBlbmRwb2ludC4gYG5ldyBXZWJGdW5jdGlvbk9yaWdpbihlbmRwb2ludClgIGlzIGZvciBhIHB1YmxpYyAoYE5PTkVgKSBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uT3JpZ2luIGV4dGVuZHMgY2xvdWRmcm9udC5PcmlnaW5CYXNlIHtcbiAgLyoqXG4gICAqIEFuIG9yaWdpbiBmb3IgYW4gYEFXU19JQU1gIGVuZHBvaW50LCB3aXRoIG9yaWdpbiBhY2Nlc3MgY29udHJvbDogQ2xvdWRGcm9udCBzaWducyBldmVyeSByZXF1ZXN0IHRvIHRoZSBlbmRwb2ludFxuICAgKiAoYGFsd2F5cy1hbXotYXV0aGAsIHdoaWNoIGtlZXBzIHRoZSB2aWV3ZXIncyBgQXV0aG9yaXphdGlvbmAgaGVhZGVyIGZvciB5b3VyIGFwcGxpY2F0aW9uKSwgYW5kIHRoZSBmdW5jdGlvbidzXG4gICAqIHJlc291cmNlIHBvbGljeSBhbGxvd3MgYGNsb3VkZnJvbnQuYW1hem9uYXdzLmNvbWAgdG8gY2FsbCB0aGlzIGVuZHBvaW50IG9uIGJlaGFsZiBvZiB0aGlzIGRpc3RyaWJ1dGlvbiBvbmx5LlxuICAgKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIGNhbiBiZSBpbiBhbm90aGVyIHN0YWNrIHRoYW4gdGhlIGZ1bmN0aW9uLCBpbiB0aGUgc2FtZSBhY2NvdW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3aXRoT3JpZ2luQWNjZXNzQ29udHJvbChlbmRwb2ludDogV2ViRnVuY3Rpb25FbmRwb2ludCwgcHJvcHM6IFdlYkZ1bmN0aW9uT3JpZ2luV2l0aE9hY1Byb3BzID0ge30pOiBjbG91ZGZyb250LklPcmlnaW4ge1xuICAgIGlmIChlbmRwb2ludC5hdXRoVHlwZSAhPT0gV2ViRnVuY3Rpb25BdXRoVHlwZS5BV1NfSUFNKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW5kcG9pbnQubm9kZS5wYXRofTogb3JpZ2luIGFjY2VzcyBjb250cm9sIG5lZWRzIGFuIEFXU19JQU0gZW5kcG9pbnQgKHRoaXMgb25lIGlzICR7ZW5kcG9pbnQuYXV0aFR5cGV9LCB3aGljaCBMYW1iZGEgZG9lc24ndCBhdXRoZW50aWNhdGUpOyB1c2UgbmV3IFdlYkZ1bmN0aW9uT3JpZ2luKGVuZHBvaW50KWApO1xuICAgIH1cbiAgICBpZiAoZW5kcG9pbnQuZW5kcG9pbnRUeXBlID09PSBXZWJGdW5jdGlvbkVuZHBvaW50VHlwZS5NVUxUSV9SRUdJT04pIHtcbiAgICAgIGNvbnN0IG9wdEluID0gZW5kcG9pbnQucmVnaW9ucy5maWx0ZXIoKHIpID0+IE9QVF9JTl9SRUdJT05TLmluY2x1ZGVzKHIpKTtcbiAgICAgIGlmIChvcHRJbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbmRwb2ludC5ub2RlLnBhdGh9OiBDbG91ZEZyb250IGNhbid0IHNpZ24gcmVxdWVzdHMgdGhhdCBhIE1VTFRJX1JFR0lPTiBlbmRwb2ludCByb3V0ZXMgdG8gb3B0LWluIHJlZ2lvbnMgKCR7b3B0SW4uam9pbignLCAnKX0pOyB1c2UgYSBQRVJfUkVHSU9OIGVuZHBvaW50IGFuZCBvbmUgb3JpZ2luIHBlciByZWdpb25gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbk9yaWdpbldpdGhPYWMoZW5kcG9pbnQsIHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFdlYkZ1bmN0aW9uT3JpZ2luUHJvcHM7XG5cbiAgY29uc3RydWN0b3IoZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQsIHByb3BzOiBXZWJGdW5jdGlvbk9yaWdpblByb3BzID0ge30pIHtcbiAgICBpZiAoZW5kcG9pbnQuYXV0aFR5cGUgPT09IFdlYkZ1bmN0aW9uQXV0aFR5cGUuQVdTX0lBTSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VuZHBvaW50Lm5vZGUucGF0aH06IENsb3VkRnJvbnQgY2FuIG9ubHkgY2FsbCBhbiBBV1NfSUFNIGVuZHBvaW50IHdpdGggb3JpZ2luIGFjY2VzcyBjb250cm9sOyB1c2UgV2ViRnVuY3Rpb25PcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2woZW5kcG9pbnQpYCk7XG4gICAgfVxuICAgIHN1cGVyKG9yaWdpbkRvbWFpbk5hbWUoZW5kcG9pbnQsIHByb3BzLnJlZ2lvbiksIHByb3BzKTtcbiAgICB2YWxpZGF0ZVRpbWVvdXRzKGVuZHBvaW50LCBwcm9wcyk7XG4gICAgdGhpcy52YWxpZGF0ZVJlc3BvbnNlQ29tcGxldGlvblRpbWVvdXRXaXRoUmVhZFRpbWVvdXQocHJvcHMucmVzcG9uc2VDb21wbGV0aW9uVGltZW91dCwgcHJvcHMucmVhZFRpbWVvdXQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJDdXN0b21PcmlnaW5Db25maWcoKTogY2xvdWRmcm9udC5DZm5EaXN0cmlidXRpb24uQ3VzdG9tT3JpZ2luQ29uZmlnUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBjdXN0b21PcmlnaW5Db25maWcodGhpcy5wcm9wcyk7XG4gIH1cbn1cblxuY2xhc3MgV2ViRnVuY3Rpb25PcmlnaW5XaXRoT2FjIGV4dGVuZHMgY2xvdWRmcm9udC5PcmlnaW5CYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzaWduaW5nUHJvdG9jb2w6ICdzaWd2NCcgfCAnc2lndjRhJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50OiBXZWJGdW5jdGlvbkVuZHBvaW50LCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBXZWJGdW5jdGlvbk9yaWdpbldpdGhPYWNQcm9wcykge1xuICAgIHN1cGVyKG9yaWdpbkRvbWFpbk5hbWUoZW5kcG9pbnQsIHByb3BzLnJlZ2lvbiksIHByb3BzKTtcbiAgICB2YWxpZGF0ZVRpbWVvdXRzKGVuZHBvaW50LCBwcm9wcyk7XG4gICAgdGhpcy52YWxpZGF0ZVJlc3BvbnNlQ29tcGxldGlvblRpbWVvdXRXaXRoUmVhZFRpbWVvdXQocHJvcHMucmVzcG9uc2VDb21wbGV0aW9uVGltZW91dCwgcHJvcHMucmVhZFRpbWVvdXQpO1xuICAgIC8vIFRoZSBnbG9iYWwgZG9tYWluIHJvdXRlcyB0byBhbnkgb2YgdGhlIGVuZHBvaW50J3MgcmVnaW9ucywgc28gQ2xvdWRGcm9udCBzaWducyBmb3IgYWxsIG9mIHRoZW0uXG4gICAgdGhpcy5zaWduaW5nUHJvdG9jb2wgPSBlbmRwb2ludC5lbmRwb2ludFR5cGUgPT09IFdlYkZ1bmN0aW9uRW5kcG9pbnRUeXBlLk1VTFRJX1JFR0lPTiA/ICdzaWd2NGEnIDogJ3NpZ3Y0JztcbiAgICBpZiAocHJvcHMub3JpZ2luQWNjZXNzQ29udHJvbCkgYXNzZXJ0T3JpZ2luQWNjZXNzQ29udHJvbChlbmRwb2ludCwgcHJvcHMub3JpZ2luQWNjZXNzQ29udHJvbCwgdGhpcy5zaWduaW5nUHJvdG9jb2wpO1xuICB9XG5cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgb3B0aW9uczogY2xvdWRmcm9udC5PcmlnaW5CaW5kT3B0aW9ucyk6IGNsb3VkZnJvbnQuT3JpZ2luQmluZENvbmZpZyB7XG4gICAgY29uc3QgY29uZmlnID0gc3VwZXIuYmluZChzY29wZSwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgaWYgKG9wdGlvbnMuZGlzdHJpYnV0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Njb3BlLm5vZGUucGF0aH06IGEgV2ViRnVuY3Rpb25PcmlnaW4gd2l0aCBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgbXVzdCBiZSB1c2VkIGJ5IGEgY2xvdWRmcm9udC5EaXN0cmlidXRpb24gKGl0cyBJRCBzY29wZXMgdGhlIHJlc291cmNlIHBvbGljeSlgKTtcbiAgICB9XG4gICAgY29uc3Qgb2FjID0gdGhpcy5wcm9wcy5vcmlnaW5BY2Nlc3NDb250cm9sID8/IHRoaXMuc2hhcmVkT3JpZ2luQWNjZXNzQ29udHJvbChzdGFjayk7XG5cbiAgICAvLyBXcml0dGVuIGZyb20gdGhlIGRpc3RyaWJ1dGlvbidzIHN0YWNrOiB0aGUgc3RhdGVtZW50IG5hbWVzIHRoZSBkaXN0cmlidXRpb24sIHdoaWNoIG5hbWVzIHRoZSBlbmRwb2ludCwgc28gYVxuICAgIC8vIHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb24ncyBzdGFjayB3b3VsZCBtYWtlIGEgcmVmZXJlbmNlIGN5Y2xlIHdoZW4gdGhlIGRpc3RyaWJ1dGlvbiBpcyBpbiBhbm90aGVyIHN0YWNrLlxuICAgIGNvbnN0IHJlc3VsdCA9ICh0aGlzLmVuZHBvaW50LndlYkZ1bmN0aW9uIGFzIFdlYkZ1bmN0aW9uQmFzZSkuX2FkZFRvUmVzb3VyY2VQb2xpY3lGcm9tKHNjb3BlLCBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdjbG91ZGZyb250LmFtYXpvbmF3cy5jb20nKV0sXG4gICAgICBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VXZWJGdW5jdGlvbkVuZHBvaW50J10sXG4gICAgICByZXNvdXJjZXM6IFt0aGlzLmVuZHBvaW50LmVuZHBvaW50QXJuXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBzdGFjay5mb3JtYXRBcm4oeyBzZXJ2aWNlOiAnY2xvdWRmcm9udCcsIHJlZ2lvbjogJycsIHJlc291cmNlOiAnZGlzdHJpYnV0aW9uJywgcmVzb3VyY2VOYW1lOiBvcHRpb25zLmRpc3RyaWJ1dGlvbklkIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gICAgaWYgKCFyZXN1bHQuc3RhdGVtZW50QWRkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzY29wZS5ub2RlLnBhdGh9OiBjb3VsZCBub3QgYWRkIENsb3VkRnJvbnQgdG8gdGhlIHJlc291cmNlIHBvbGljeSBvZiAke3RoaXMuZW5kcG9pbnQud2ViRnVuY3Rpb24ubm9kZS5wYXRofSAodGhlIGRpc3RyaWJ1dGlvbiBtdXN0IGJlIGluIHRoZSBmdW5jdGlvbidzIGFjY291bnQpYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uY29uZmlnLCBvcmlnaW5Qcm9wZXJ0eTogeyAuLi5jb25maWcub3JpZ2luUHJvcGVydHkhLCBvcmlnaW5BY2Nlc3NDb250cm9sSWQ6IG9hYy5vcmlnaW5BY2Nlc3NDb250cm9sUmVmLm9yaWdpbkFjY2Vzc0NvbnRyb2xJZCB9IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyQ3VzdG9tT3JpZ2luQ29uZmlnKCk6IGNsb3VkZnJvbnQuQ2ZuRGlzdHJpYnV0aW9uLkN1c3RvbU9yaWdpbkNvbmZpZ1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY3VzdG9tT3JpZ2luQ29uZmlnKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgLyoqIE9uZSBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgcGVyIHN0YWNrIGFuZCBzaWduaW5nIHByb3RvY29sLCBzaGFyZWQgYnkgdGhlIHN0YWNrJ3MgV2ViIEZ1bmN0aW9uIG9yaWdpbnMuICovXG4gIHByaXZhdGUgc2hhcmVkT3JpZ2luQWNjZXNzQ29udHJvbChzY29wZTogU3RhY2spOiBjbG91ZGZyb250LklPcmlnaW5BY2Nlc3NDb250cm9sUmVmIHtcbiAgICBjb25zdCBpZCA9IGBXZWJGdW5jdGlvbk9yaWdpbkFjY2Vzc0NvbnRyb2wke3RoaXMuc2lnbmluZ1Byb3RvY29sID09PSAnc2lndjRhJyA/ICdTaWdWNGEnIDogJ1NpZ1Y0J31gO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2NvcGUubm9kZS50cnlGaW5kQ2hpbGQoaWQpIGFzIGNsb3VkZnJvbnQuQ2ZuT3JpZ2luQWNjZXNzQ29udHJvbCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgICBjb25zdCBvYWM6IGNsb3VkZnJvbnQuQ2ZuT3JpZ2luQWNjZXNzQ29udHJvbCA9IG5ldyBjbG91ZGZyb250LkNmbk9yaWdpbkFjY2Vzc0NvbnRyb2woc2NvcGUsIGlkLCB7XG4gICAgICBvcmlnaW5BY2Nlc3NDb250cm9sQ29uZmlnOiB7XG4gICAgICAgIC8vIFVuaXF1ZSBpbiB0aGUgYWNjb3VudCwgbGlrZSB0aGUgbmFtZXMgQ0RLIGdlbmVyYXRlcyBmb3IgaXRzIG93biBvcmlnaW4gYWNjZXNzIGNvbnRyb2xzLlxuICAgICAgICBuYW1lOiBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZShvYWMsIHsgbWF4TGVuZ3RoOiA2NCB9KSB9KSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBMYW1iZGEgV2ViIEZ1bmN0aW9uIG9yaWdpbnMgKCR7dGhpcy5zaWduaW5nUHJvdG9jb2x9KWAsXG4gICAgICAgIC8vIFRoZSBDREsgZW51bXMgaGF2ZSBuZWl0aGVyIHZhbHVlIHlldC4gTGFtYmRhIFdlYiBGdW5jdGlvbiBvcmlnaW5zIGFjY2VwdCBvbmx5IGFsd2F5cy1hbXotYXV0aC5cbiAgICAgICAgb3JpZ2luQWNjZXNzQ29udHJvbE9yaWdpblR5cGU6ICdsYW1iZGEnLFxuICAgICAgICBzaWduaW5nQmVoYXZpb3I6ICdhbHdheXMtYW16LWF1dGgnLFxuICAgICAgICBzaWduaW5nUHJvdG9jb2w6IHRoaXMuc2lnbmluZ1Byb3RvY29sLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gb2FjO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgZ2l2ZW4gb3JpZ2luIGFjY2VzcyBjb250cm9sIHdoZW4gaXRzIGNvbmZpZ3VyYXRpb24gaXMga25vd24gKG9uZSBjcmVhdGVkIGluIHRoaXMgYXBwLCBub3QgaW1wb3J0ZWQpOlxuICogQ2xvdWRGcm9udCByZWplY3RzIG90aGVyIHNldHRpbmdzIGZvciBhIFdlYiBGdW5jdGlvbiBvcmlnaW4gb25seSB3aGVuIHRoZSBkaXN0cmlidXRpb24gZGVwbG95cy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0T3JpZ2luQWNjZXNzQ29udHJvbChlbmRwb2ludDogV2ViRnVuY3Rpb25FbmRwb2ludCwgb2FjOiBjbG91ZGZyb250LklPcmlnaW5BY2Nlc3NDb250cm9sUmVmLCBwcm90b2NvbDogc3RyaW5nKSB7XG4gIGNvbnN0IGNmbiA9IG9hYyBpbnN0YW5jZW9mIGNsb3VkZnJvbnQuQ2ZuT3JpZ2luQWNjZXNzQ29udHJvbFxuICAgID8gb2FjXG4gICAgOiBvYWMubm9kZS5jaGlsZHJlbi5maW5kKChjKTogYyBpcyBjbG91ZGZyb250LkNmbk9yaWdpbkFjY2Vzc0NvbnRyb2wgPT4gYyBpbnN0YW5jZW9mIGNsb3VkZnJvbnQuQ2ZuT3JpZ2luQWNjZXNzQ29udHJvbCk7XG4gIGlmIChjZm4gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBjb25zdCBjb25maWcgPSBTdGFjay5vZihjZm4pLnJlc29sdmUoY2ZuLm9yaWdpbkFjY2Vzc0NvbnRyb2xDb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBleHBlY3RlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgT3JpZ2luQWNjZXNzQ29udHJvbE9yaWdpblR5cGU6ICdsYW1iZGEnLCBTaWduaW5nQmVoYXZpb3I6ICdhbHdheXMtYW16LWF1dGgnLCBTaWduaW5nUHJvdG9jb2w6IHByb3RvY29sIH07XG4gIGNvbnN0IHdyb25nID0gT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgY29uc3QgYWN0dWFsID0gY29uZmlnW2tleV0gPz8gY29uZmlnW2tleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGtleS5zbGljZSgxKV07XG4gICAgcmV0dXJuIHR5cGVvZiBhY3R1YWwgPT09ICdzdHJpbmcnICYmIGFjdHVhbCAhPT0gdmFsdWU7XG4gIH0pO1xuICBpZiAod3JvbmcubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtlbmRwb2ludC5ub2RlLnBhdGh9OiB0aGUgb3JpZ2luIGFjY2VzcyBjb250cm9sICR7b2FjLm5vZGUucGF0aH0gbXVzdCBoYXZlICR7d3JvbmcubWFwKChbaywgdl0pID0+IGAke2t9ICcke3Z9J2ApLmpvaW4oJywgJyl9IGZvciB0aGlzIGVuZHBvaW50YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb3JpZ2luRG9tYWluTmFtZShlbmRwb2ludDogV2ViRnVuY3Rpb25FbmRwb2ludCwgcmVnaW9uPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHJlZ2lvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZW5kcG9pbnQuZG9tYWluTmFtZTtcbiAgaWYgKGVuZHBvaW50LmVuZHBvaW50VHlwZSAhPT0gV2ViRnVuY3Rpb25FbmRwb2ludFR5cGUuUEVSX1JFR0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtlbmRwb2ludC5ub2RlLnBhdGh9OiByZWdpb24gaXMgb25seSBmb3IgUEVSX1JFR0lPTiBlbmRwb2ludHMgKHRoaXMgb25lIGlzICR7ZW5kcG9pbnQuZW5kcG9pbnRUeXBlfSlgKTtcbiAgfVxuICByZXR1cm4gZW5kcG9pbnQucmVnaW9uYWxEb21haW5OYW1lKHJlZ2lvbik7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZW91dHMoZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQsIHByb3BzOiBXZWJGdW5jdGlvbk9yaWdpblByb3BzKSB7XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBbWydyZWFkVGltZW91dCcsIHByb3BzLnJlYWRUaW1lb3V0XSwgWydrZWVwYWxpdmVUaW1lb3V0JywgcHJvcHMua2VlcGFsaXZlVGltZW91dF1dIGFzIGNvbnN0KSB7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHZhbHVlPy50b1NlY29uZHMoKTtcbiAgICBpZiAoc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoc2Vjb25kcykgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNlY29uZHMpIHx8IHNlY29uZHMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VuZHBvaW50Lm5vZGUucGF0aH06ICR7bmFtZX0gbXVzdCBiZSBhIHdob2xlIG51bWJlciBvZiBzZWNvbmRzLCBhdCBsZWFzdCAxLCBnb3QgJHtzZWNvbmRzfWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjdXN0b21PcmlnaW5Db25maWcocHJvcHM6IFdlYkZ1bmN0aW9uT3JpZ2luUHJvcHMpOiBjbG91ZGZyb250LkNmbkRpc3RyaWJ1dGlvbi5DdXN0b21PcmlnaW5Db25maWdQcm9wZXJ0eSB7XG4gIHJldHVybiB7XG4gICAgb3JpZ2luUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWSxcbiAgICBvcmlnaW5Tc2xQcm90b2NvbHM6IFtjbG91ZGZyb250Lk9yaWdpblNzbFBvbGljeS5UTFNfVjFfMl0sXG4gICAgb3JpZ2luUmVhZFRpbWVvdXQ6IHByb3BzLnJlYWRUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICBvcmlnaW5LZWVwYWxpdmVUaW1lb3V0OiBwcm9wcy5rZWVwYWxpdmVUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICBpcEFkZHJlc3NUeXBlOiBwcm9wcy5pcEFkZHJlc3NUeXBlLFxuICB9O1xufVxuIl19
|
|
@@ -11,7 +11,7 @@ const constructs_1 = require("constructs");
|
|
|
11
11
|
* only revisions within `revisionRetention`, or that an endpoint routes to, are kept.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionRevision extends constructs_1.Construct {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionRevision", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionRevision", version: "0.1.8" };
|
|
15
15
|
/**
|
|
16
16
|
* References an existing revision of `webFunction`, e.g. to pin an endpoint to it or split traffic with it.
|
|
17
17
|
*/
|
package/lib/web-function.d.ts
CHANGED
|
@@ -128,9 +128,9 @@ export interface WebFunctionProps extends WebFunctionOptions {
|
|
|
128
128
|
/**
|
|
129
129
|
* A Lambda Web Function, created in this app (`WebFunction`) or imported (`WebFunction.fromWebFunctionArn`).
|
|
130
130
|
*
|
|
131
|
-
* `addToResourcePolicy` adds to the function's resource policy (who else may call or manage it).
|
|
132
|
-
*
|
|
133
|
-
*
|
|
131
|
+
* `addToResourcePolicy` adds to the function's resource policy (who else may call or manage it). Each stack writes
|
|
132
|
+
* only its own statements into the function's single policy, so any stack in the function's account can add them,
|
|
133
|
+
* including one that imports the function. From another account, nothing is added (`statementAdded: false`).
|
|
134
134
|
*/
|
|
135
135
|
export interface IWebFunction extends IResource, lambda.IWebFunctionRef, iam.IResourceWithPolicy {
|
|
136
136
|
/**
|
|
@@ -149,9 +149,8 @@ export interface IWebFunction extends IResource, lambda.IWebFunctionRef, iam.IRe
|
|
|
149
149
|
* Allows `grantee` to call the function's endpoint (`lambda:InvokeWebFunctionEndpoint`): the default endpoint
|
|
150
150
|
* of a `WebFunction`; for an imported function, the endpoint named in its attributes, or every endpoint.
|
|
151
151
|
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
* changes: across accounts, the function's own resource policy must also allow the grantee.
|
|
152
|
+
* A grantee in the function's account gets an IAM policy statement; another account or an AWS service also gets a
|
|
153
|
+
* statement in the function's resource policy (not when the function itself is in another account than this stack).
|
|
155
154
|
* [disable-awslint:no-grants]
|
|
156
155
|
*/
|
|
157
156
|
grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
@@ -177,6 +176,7 @@ export interface WebFunctionAttributes {
|
|
|
177
176
|
/**
|
|
178
177
|
* The function's ARN, e.g. `arn:aws:lambda:us-east-1:111122223333:web-function/orders`. It may be in another
|
|
179
178
|
* region or account; across accounts, `grantInvoke` also needs the function's resource policy to allow the caller.
|
|
179
|
+
* A token (e.g. from another stack) is taken to be in this stack's account and region.
|
|
180
180
|
*
|
|
181
181
|
* @default - built from `webFunctionName`, in this stack's account and region
|
|
182
182
|
*/
|
|
@@ -239,9 +239,21 @@ export declare abstract class WebFunctionBase extends Resource implements IWebFu
|
|
|
239
239
|
*/
|
|
240
240
|
abstract grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
241
241
|
/**
|
|
242
|
-
* Adds a statement to the function's resource policy
|
|
242
|
+
* Adds a statement to the function's resource policy, e.g. to let another account manage the function.
|
|
243
|
+
* For invoking, prefer `addPermission` or `grantInvoke`.
|
|
244
|
+
*
|
|
245
|
+
* The function has a single resource policy. Each stack writes only its own statements into it, through a custom
|
|
246
|
+
* resource that merges them with every other stack's, and with statements added outside CloudFormation. From a
|
|
247
|
+
* stack in another account than the function, nothing is added.
|
|
248
|
+
*/
|
|
249
|
+
addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
|
|
250
|
+
/**
|
|
251
|
+
* Adds a statement to the function's resource policy from `scope`'s stack, e.g. the stack of a CloudFront
|
|
252
|
+
* distribution that uses the function.
|
|
253
|
+
*
|
|
254
|
+
* @internal
|
|
243
255
|
*/
|
|
244
|
-
|
|
256
|
+
_addToResourcePolicyFrom(scope: Construct, statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
|
|
245
257
|
/**
|
|
246
258
|
* A metric of this function's execution environments in `AWS/Lambda/Web` (dimension `FunctionName`), across all endpoints.
|
|
247
259
|
* For request and error counts, use the endpoint's metrics (`fn.endpoint.metricRequests()`).
|
|
@@ -323,7 +335,6 @@ export declare class WebFunction extends WebFunctionBase implements iam.IGrantab
|
|
|
323
335
|
private readonly resource;
|
|
324
336
|
private readonly revisionCleanup;
|
|
325
337
|
private readonly permissionIds;
|
|
326
|
-
private resourcePolicy?;
|
|
327
338
|
constructor(scope: Construct, id: string, props: WebFunctionProps);
|
|
328
339
|
/**
|
|
329
340
|
* Adds an endpoint (up to 10 per function), e.g. a public one next to an IAM-only one, or one pinned to an
|
|
@@ -352,16 +363,6 @@ export declare class WebFunction extends WebFunctionBase implements iam.IGrantab
|
|
|
352
363
|
* @param id the statement ID (`Sid`): letters and digits, unique within the function
|
|
353
364
|
*/
|
|
354
365
|
addPermission(id: string, permission: WebFunctionPermission): void;
|
|
355
|
-
/**
|
|
356
|
-
* Adds a statement to the function's resource policy, e.g. to let another account manage the function.
|
|
357
|
-
* For invoking, prefer `addPermission` or `grantInvoke`.
|
|
358
|
-
*
|
|
359
|
-
* The function has one resource policy (`AWS::Lambda::ResourcePolicy`), created on the first statement. This stack
|
|
360
|
-
* is its only writer: another stack or template can't also attach one, and changes made outside CloudFormation
|
|
361
|
-
* are overwritten by the next update of the policy.
|
|
362
|
-
*/
|
|
363
|
-
addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
|
|
364
|
-
private createResourcePolicy;
|
|
365
366
|
private createEndpoint;
|
|
366
367
|
private createLogGroups;
|
|
367
368
|
private logGroupIn;
|