@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.
@@ -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.6" };
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUEyQ0gsMERBRUM7QUEzQ0QsdUZBQXVGO0FBQzFFLFFBQUEsa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFjMUQsdUdBQXVHO0FBQzFGLFFBQUEsdUJBQXVCLEdBQUcsMkJBQTJCLENBQUM7QUFjbkUsZ0hBQWdIO0FBQ25HLFFBQUEsNkJBQTZCLEdBQUcsaUNBQWlDLENBQUM7QUFTL0UsZ0ZBQWdGO0FBQ2hGLFNBQWdCLHVCQUF1QixDQUFDLE1BQWM7SUFDcEQsT0FBTyxVQUFVLE1BQU0sRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtSEFBbUg7QUFDdEcsUUFBQSw4QkFBOEIsR0FBRyxrQ0FBa0MsQ0FBQztBQWFqRjs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBMkIzRSxrSEFBa0g7QUFDbEgsaUhBQWlIO0FBQ3BHLFFBQUEsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLFFBQUEsNEJBQTRCLEdBQUcsd0JBQXdCLENBQUM7QUFnQnJFLDBHQUEwRztBQUM3RixRQUFBLGlDQUFpQyxHQUFHLG9DQUFvQyxDQUFDO0FBRXRGOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cmFjdCBiZXR3ZWVuIHRoZSBjb25zdHJ1Y3RzIGFuZCB0aGUgY3VzdG9tIHJlc291cmNlIGhhbmRsZXIgaW5cbiAqIGBoYW5kbGVycy93ZWItZnVuY3Rpb24tcHJvdmlkZXJgLiBCb3RoIHNpZGVzIGltcG9ydCB0aGlzIGZpbGUsIHNvIHJlc291cmNlXG4gKiB0eXBlcyBhbmQgcHJvcGVydHkgbmFtZXMgY2FuJ3QgZHJpZnQgYXBhcnQuXG4gKlxuICogQ2xvdWRGb3JtYXRpb24gcGFzc2VzIGV2ZXJ5IHNjYWxhciBwcm9wZXJ0eSB0byB0aGUgaGFuZGxlciBhcyBhIHN0cmluZy5cbiAqL1xuXG4vKiogQ29waWVzIGEgY29kZSB6aXAgaW50byB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCBhbmQgcmV0dXJucyB0aGUgb2JqZWN0J3MgdmVyc2lvbi4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJDb2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IFNvdXJjZUJ1Y2tldDogc3RyaW5nO1xuICByZWFkb25seSBTb3VyY2VLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgU291cmNlVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgRGVzdGluYXRpb25CdWNrZXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgRGVzdGluYXRpb25LZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IFZlcnNpb25JZDogc3RyaW5nO1xufVxuXG4vKiogRW5zdXJlcyBvbmUgbG9nIGdyb3VwIChpbiBhbnkgcmVnaW9uKSBleGlzdHMgd2l0aCB0aGUgZ2l2ZW4gcmV0ZW50aW9uLCBhbmQgcmVtb3ZlcyBpdCBvbiBkZWxldGUuICovXG5leHBvcnQgY29uc3QgTE9HX0dST1VQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJMb2dHcm91cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nR3JvdXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IExvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICAvKiogRGF5cywgb3IgJ0luZmluaXRlJyBmb3Igbm8gcmV0ZW50aW9uLiAqL1xuICByZWFkb25seSBSZXRlbnRpb25JbkRheXM6IHN0cmluZztcbiAgcmVhZG9ubHkgUmVtb3ZhbFBvbGljeTogJ3JldGFpbicgfCAnZGVzdHJveSc7XG4gIC8qKiBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nLCBzbyBlbnZpcm9ubWVudHMgc3RpbGwgc2h1dHRpbmcgZG93biBjYW4gZmx1c2ggdGhlaXIgbGFzdCBsaW5lcy4gKi9cbiAgcmVhZG9ubHkgRmx1c2hXYWl0U2Vjb25kczogc3RyaW5nO1xuICAvKiogU2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjaGVja2luZyBvbmNlIG1vcmUgdGhhdCB0aGUgc2VydmljZSBoYXNuJ3QgcmUtY3JlYXRlZCB0aGUgZ3JvdXAuICovXG4gIHJlYWRvbmx5IFJlY2hlY2tXYWl0U2Vjb25kczogc3RyaW5nO1xufVxuXG4vKiogUmVhZHMgYW4gZW5kcG9pbnQncyBwZXItcmVnaW9uIGRvbWFpbiBuYW1lcywgd2hpY2ggQ2xvdWRGb3JtYXRpb24gY2FuJ3QgaW5kZXggb3V0IG9mIGBSZWdpb25hbEVuZHBvaW50c2AuICovXG5leHBvcnQgY29uc3QgRU5EUE9JTlRfTE9PS1VQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJFbmRwb2ludExvb2t1cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5kcG9pbnRMb29rdXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgRnVuY3Rpb25Bcm46IHN0cmluZztcbiAgcmVhZG9ubHkgRW5kcG9pbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBDaGFuZ2VzIHdoZW5ldmVyIHRoZSBlbmRwb2ludCBpcyByZXBsYWNlZCwgc28gdGhlIGxvb2t1cCBydW5zIGFnYWluLiAqL1xuICByZWFkb25seSBFbmRwb2ludEFybjogc3RyaW5nO1xufVxuXG4vKiogQXR0cmlidXRlIG5hbWUgaG9sZGluZyB0aGUgZG9tYWluIG9mIG9uZSByZWdpb24sIGUuZy4gYERvbWFpbi51cy1lYXN0LTFgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvbmFsRG9tYWluQXR0cmlidXRlKHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBEb21haW4uJHtyZWdpb259YDtcbn1cblxuLyoqIERlbGV0ZXMgYSBmdW5jdGlvbidzIG9sZGVzdCByZXZpc2lvbnMgYmV5b25kIGEgY291bnQsIGV4Y2VwdCB0aG9zZSB0aGF0IGFyZSBpbiB1c2Ugb3IgbWF5IGJlIHJvbGxlZCBiYWNrIHRvLiAqL1xuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYlJldmlzaW9uQ2xlYW51cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aXNpb25DbGVhbnVwUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IEZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSBvZiB0aGUgbmV3ZXN0IHJldmlzaW9ucyB0byBrZWVwLiAqL1xuICByZWFkb25seSBLZWVwOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXZpc2lvbnMgdGhlIHRlbXBsYXRlIHVzZXMgKHRoZSBjdXJyZW50IG9uZSBhbmQgYW55IGFuIGVuZHBvaW50IHJvdXRlcyB0bykuIEFsd2F5cyBrZXB0LCBhbmQgb24gYW4gdXBkYXRlXG4gICAqIHRoZSBwcmV2aW91cyB0ZW1wbGF0ZSdzIGFyZSBrZXB0IHRvbzogdGhleSdyZSB3aGF0IGEgcm9sbGJhY2sgcm91dGVzIGJhY2sgdG8uXG4gICAqL1xuICByZWFkb25seSBSZXZpc2lvbklkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTW92ZXMgYW4gZW5kcG9pbnQncyB0cmFmZmljIHRvIGEgcmV2aXNpb24gaW4gc3RlcHMsIHdhdGNoaW5nIGFsYXJtcyAoY2FuYXJ5IGFuZCBsaW5lYXIgZGVwbG95bWVudHMpLlxuICogU2VydmVkIGJ5IHRoZSBkZXBsb3ltZW50IHByb3ZpZGVyIChgaGFuZGxlcnMvd2ViLWZ1bmN0aW9uLWRlcGxveW1lbnRgKSwgbm90IHRoZSBzaGFyZWQgcHJvdmlkZXI6IGl0IGNhbiBydW4gZm9yIHVwIHRvIGFuIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFGRklDX1NISUZUX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJUcmFmZmljU2hpZnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTaGlmdFByb3BlcnRpZXMge1xuICByZWFkb25seSBGdW5jdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSBFbmRwb2ludE5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSByZXZpc2lvbiB0aGF0IGVuZHMgdXAgd2l0aCBhbGwgb2YgdGhlIGVuZHBvaW50J3MgdHJhZmZpYy4gKi9cbiAgcmVhZG9ubHkgUmV2aXNpb25JZDogc3RyaW5nO1xuICAvKiogVGhlIHJldmlzaW9uJ3Mgc2hhcmUgb2YgdHJhZmZpYyBhdCBlYWNoIHN0ZXAsIGluIHBlcmNlbnQsIGNvbW1hLXNlcGFyYXRlZDsgdGhlIGxhc3QgaXMgMTAwLiAqL1xuICByZWFkb25seSBTdGVwczogc3RyaW5nO1xuICAvKiogU2Vjb25kcyBlYWNoIHN0ZXAgc2VydmVzIChjb3VudGVkIGZyb20gd2hlbiBpdHMgdXBkYXRlIHN0YXJ0ZWQpIGJlZm9yZSB0aGUgbmV4dC4gKi9cbiAgcmVhZG9ubHkgV2FpdFNlY29uZHM6IHN0cmluZztcbiAgLyoqIEFsYXJtcyAoaW4gYW55IHJlZ2lvbikgdGhhdCBzdG9wIHRoZSBkZXBsb3ltZW50IGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyB3ZWlnaHRzLiAqL1xuICByZWFkb25seSBBbGFybUFybnM/OiBzdHJpbmdbXTtcbiAgLyoqIEhhc2ggb2YgdGhlIGVuZHBvaW50J3Mgb3RoZXIgc2V0dGluZ3M6IGFueSBlbmRwb2ludCBjaGFuZ2UgcmUtY2hlY2tzIGl0cyB0cmFmZmljIGJlZm9yZSBDbG91ZEZvcm1hdGlvbiB3cml0ZXMgaXQuICovXG4gIHJlYWRvbmx5IEVuZHBvaW50Q29uZmlnOiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IGBvbkV2ZW50YCBoYW5kcyB0byBgaXNDb21wbGV0ZWAgKHRoZSBQcm92aWRlciBmcmFtZXdvcmsgcGFzc2VzIGl0IGFzIGBEYXRhYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTaGlmdFN0YXRlIHtcbiAgLyoqIGBub25lYDogbm90aGluZyB0byBkbzsgYHNoaWZ0YDogbW92aW5nIGluIHN0ZXBzOyBgc3dpdGNoYDogYWxsIGF0IG9uY2UsIHdpdGhvdXQgYWxhcm1zIChzdGFjayByb2xsYmFjaykuICovXG4gIHJlYWRvbmx5IEFjdGlvbjogJ25vbmUnIHwgJ3NoaWZ0JyB8ICdzd2l0Y2gnO1xuICAvKiogYHNoaWZ0YDogdGhlIGVuZHBvaW50J3Mgd2VpZ2h0cyBiZWZvcmUgdGhlIGRlcGxveW1lbnQgKEpTT04gYFt7cmV2aXNpb25JZCwgd2VpZ2h0fV1gKSwgcmVzdG9yZWQgd2hlbiBhbiBhbGFybSBmaXJlcy4gKi9cbiAgcmVhZG9ubHkgUHJldmlvdXNXZWlnaHRzPzogc3RyaW5nO1xuICAvKiogYHN3aXRjaGA6IHRoZSB3ZWlnaHRzIGJlaW5nIHdyaXR0ZW4gKEpTT04gYFt7cmV2aXNpb25JZCwgd2VpZ2h0fV1gKS4gKi9cbiAgcmVhZG9ubHkgVGFyZ2V0V2VpZ2h0cz86IHN0cmluZztcbn1cblxuLyoqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBhbGFybSBpbiBhbnkgcmVnaW9uIChDbG91ZEZvcm1hdGlvbiBvbmx5IGNyZWF0ZXMgYWxhcm1zIGluIHRoZSBzdGFjaydzIHJlZ2lvbikuICovXG4vKiogUHJlZml4IG9mIGV2ZXJ5IGFsYXJtIHRoaXMgbGlicmFyeSBjcmVhdGVzIG91dHNpZGUgdGhlIHN0YWNrJ3MgcmVnaW9uOyB0aGUgcHJvdmlkZXIncyBJQU0gaXMgc2NvcGVkIHRvIGl0LiAqL1xuZXhwb3J0IGNvbnN0IEFMQVJNX05BTUVfUFJFRklYID0gJ0xhbWJkYVdlYi0nO1xuZXhwb3J0IGNvbnN0IFJFR0lPTkFMX0FMQVJNX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJBbGFybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uYWxBbGFybVByb3BlcnRpZXMge1xuICByZWFkb25seSBSZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgQWxhcm1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEFsYXJtRGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFB1dE1ldHJpY0FsYXJtJ3MgYE1ldHJpY3NgLCBhcyBKU09OLiAqL1xuICByZWFkb25seSBNZXRyaWNzOiBzdHJpbmc7XG4gIHJlYWRvbmx5IFRocmVzaG9sZDogc3RyaW5nO1xuICByZWFkb25seSBFdmFsdWF0aW9uUGVyaW9kczogc3RyaW5nO1xuICAvKiogUHV0TWV0cmljQWxhcm0ncyBgQ29tcGFyaXNvbk9wZXJhdG9yYC4gKi9cbiAgcmVhZG9ubHkgQ29tcGFyaXNvbk9wZXJhdG9yOiBzdHJpbmc7XG4gIC8qKiBQdXRNZXRyaWNBbGFybSdzIGBUcmVhdE1pc3NpbmdEYXRhYC4gKi9cbiAgcmVhZG9ubHkgVHJlYXRNaXNzaW5nRGF0YTogc3RyaW5nO1xufVxuXG4vKiogRW1wdGllcyB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCAoZXZlcnkgb2JqZWN0IHZlcnNpb24gYW5kIGRlbGV0ZSBtYXJrZXIpIHdoZW4gdGhlIHN0YWNrIGRlbGV0ZXMgaXQuICovXG5leHBvcnQgY29uc3QgQ09ERV9CVUNLRVRfQ0xFQU5VUF9SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6TGFtYmRhV2ViQ29kZUJ1Y2tldENsZWFudXAnO1xuXG4vKipcbiAqIFRhZyBvbiB0aGUgY29kZSBidWNrZXQgdGhhdCBsZXRzIHRoZSBjbGVhbnVwIGVtcHR5IGl0LiBBIHJvbGxiYWNrIHJldmVydHMgdGhlIGJ1Y2tldCdzIHRhZ3MgYmVmb3JlIGl0IGRlbGV0ZXNcbiAqIHJlc291cmNlcyB0aGUgZmFpbGVkIHVwZGF0ZSBjcmVhdGVkLCBzbyBhIGNsZWFudXAgcmVzb3VyY2UgYWRkZWQgdG8gYW4gZXhpc3RpbmcgYnVja2V0IG5ldmVyIGVtcHRpZXMgaXQgb24gcm9sbGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PTl9ERUxFVEVfVEFHID0geyBrZXk6ICdjZGstbGFtYmRhLXdlYjplbXB0eS1vbi1kZWxldGUnLCB2YWx1ZTogJ3RydWUnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1Y2tldENsZWFudXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgQnVja2V0TmFtZTogc3RyaW5nO1xufVxuIl19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcG9saWN5LXN0YXRlbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9yZXNvdXJjZS1wb2xpY3ktc3RhdGVtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBbUY7QUFDbkYseURBQTJDO0FBQzNDLDJDQUF1QztBQUN2Qyx5Q0FBa0U7QUFDbEUsMkRBQStFO0FBQy9FLHVEQUEwRDtBQUUxRDs7OztHQUlHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSxzQkFBUztJQUNyRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQWdCLEVBQUUsSUFBZSxFQUFFLFdBQW1CO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSztZQUMzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLDJCQUEyQixtQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsT0FBUSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQTBDO2VBQ3hFLElBQUksd0JBQXdCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVlLFFBQVEsQ0FBaUI7SUFDeEIsUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNsQyxTQUFTLENBQVM7SUFDM0IsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUVwQixZQUFvQixLQUFnQixFQUFFLEVBQVUsRUFBRSxXQUFtQixFQUFFLE1BQWlCO1FBQ3RGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsZ0dBQWdHO1FBQ2hHLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxtQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLElBQUEsOEJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0Msa0hBQWtIO1FBQ2xILElBQUEsMEJBQWUsRUFBQyxRQUFRLEVBQUU7WUFDeEIsTUFBTSxFQUFFLENBQUMsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLENBQUM7WUFDL0YsUUFBUSxFQUFFLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7YUFDdEgsQ0FBQztTQUNILENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDbkQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLFlBQVksRUFBRSw0REFBd0M7WUFDdEQsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtTQUNoRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzVELE1BQU0sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFBLHVDQUFxQixFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMseUJBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLCtDQUErQyxFQUNqRiw0QkFBNEIsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1JQUFtSSxDQUFDLENBQUM7Z0JBQzlNLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEcsT0FBTztvQkFDTCxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEVBQUU7b0JBQzVDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO29CQUM3QyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLHFEQUFxRCxHQUFHLEdBQUcsQ0FBQztpQkFDeEYsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUdBQXVHO0lBQ2hHLEdBQUcsQ0FBQyxTQUE4QjtRQUN2QyxxR0FBcUc7UUFDckcsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFDaEMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0Y7QUFsRUQsNERBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMsIEFybkZvcm1hdCwgQ3VzdG9tUmVzb3VyY2UsIE5hbWVzLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgZ3JhbnRUb1Byb3ZpZGVyLCB3ZWJGdW5jdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlcic7XG5pbXBvcnQgeyBSRVNPVVJDRV9QT0xJQ1lfU1RBVEVNRU5UU19SRVNPVVJDRV9UWVBFIH0gZnJvbSAnLi9wcm92aWRlci1wcm90b2NvbCc7XG5pbXBvcnQgeyBpbnNwZWN0UmVzb3VyY2VQb2xpY3kgfSBmcm9tICcuL3Jlc291cmNlLXBvbGljeSc7XG5cbi8qKlxuICogVGhlIHN0YXRlbWVudHMgb25lIHN0YWNrIGFkZHMgdG8gYSBXZWIgRnVuY3Rpb24ncyByZXNvdXJjZSBwb2xpY3kuIEEgZnVuY3Rpb24gaGFzIGEgc2luZ2xlIHBvbGljeSBhbmQgV2ViIEZ1bmN0aW9uc1xuICogaGF2ZSBubyBBZGRQZXJtaXNzaW9uLCBzbyBlYWNoIHdyaXRpbmcgc3RhY2sgb3ducyBpdHMgc3RhdGVtZW50cyAoYnkgU2lkKSBhbmQgYSBjdXN0b20gcmVzb3VyY2UgbWVyZ2VzIHRoZW0gaW50byB0aGVcbiAqIHBvbGljeSwga2VlcGluZyBldmVyeSBvdGhlciBzdGFjaydzIHN0YXRlbWVudHM6IHRoZSBmdW5jdGlvbidzIHN0YWNrLCBhIGRpc3RyaWJ1dGlvbidzIHN0YWNrLCBhbiBpbXBvcnRpbmcgc3RhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVBvbGljeVN0YXRlbWVudHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIHdyaXRlciBmb3IgYGZ1bmN0aW9uQXJuYCBpbiBgc2NvcGVgJ3Mgc3RhY2suIEluIHRoZSBmdW5jdGlvbidzIG93biBzdGFjayBpdCdzIGEgY2hpbGQgb2YgYGhvc3RgICh0aGUgZnVuY3Rpb24pO1xuICAgKiBlbHNld2hlcmUgYSBjaGlsZCBvZiB0aGUgc3RhY2ssIG9uZSBwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHNjb3BlOiBDb25zdHJ1Y3QsIGhvc3Q6IENvbnN0cnVjdCwgZnVuY3Rpb25Bcm46IHN0cmluZyk6IFJlc291cmNlUG9saWN5U3RhdGVtZW50cyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgW3BhcmVudCwgaWRdID0gU3RhY2sub2YoaG9zdCkgPT09IHN0YWNrXG4gICAgICA/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.6" };
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.6" };
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 (not for an imported function's endpoints).
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.6" };
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 (not for an imported function's endpoints).
71
+ * a statement in the function's resource policy.
72
72
  */
73
73
  invoke(grantee) {
74
- const options = { grantee, actions: ['lambda:InvokeWebFunctionEndpoint'], resourceArns: this.endpointArns() };
75
- return this.webFunction
76
- ? iam.Grant.addToPrincipalOrResource({ ...options, resource: this.webFunction })
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLWdyYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItZnVuY3Rpb24tZ3JhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFJM0M7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQWlCUztJQUErQzs7SUFoQnBGOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUE2QixFQUFFLFdBQXlCO1FBQ2pGLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFzQjtRQUNuRCxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFlBQXFDLFlBQTRCLEVBQW1CLFdBQTBCO1FBQXpFLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUFtQixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtJQUFHLENBQUM7SUFFbEg7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsT0FBdUI7UUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDOUcsT0FBTyxJQUFJLENBQUMsV0FBVztZQUNyQixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEYsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O0FBakNILDhDQWtDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSVdlYkZ1bmN0aW9uIH0gZnJvbSAnLi93ZWItZnVuY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBXZWJGdW5jdGlvbkVuZHBvaW50IH0gZnJvbSAnLi93ZWItZnVuY3Rpb24tZW5kcG9pbnQnO1xuXG4vKipcbiAqIEdyYW50cyBvbiBhIFdlYiBGdW5jdGlvbiBlbmRwb2ludC4gQWNjZXNzIHRoZW0gYXMgYGZuLmdyYW50c2AgKHRoZSBkZWZhdWx0IGVuZHBvaW50KSBvciBgZW5kcG9pbnQuZ3JhbnRzYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uR3JhbnRzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfZm9yRW5kcG9pbnQoZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQsIHdlYkZ1bmN0aW9uOiBJV2ViRnVuY3Rpb24pOiBXZWJGdW5jdGlvbkdyYW50cyB7XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbkdyYW50cygoKSA9PiBbZW5kcG9pbnQuZW5kcG9pbnRBcm5dLCB3ZWJGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIG9uIGVuZHBvaW50cyBrbm93biBvbmx5IGJ5IEFSTiAoYW4gaW1wb3J0ZWQgZnVuY3Rpb24ncykuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfZm9yRW5kcG9pbnRBcm5zKGVuZHBvaW50QXJuczogc3RyaW5nW10pOiBXZWJGdW5jdGlvbkdyYW50cyB7XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbkdyYW50cygoKSA9PiBlbmRwb2ludEFybnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50QXJuczogKCkgPT4gc3RyaW5nW10sIHByaXZhdGUgcmVhZG9ubHkgd2ViRnVuY3Rpb24/OiBJV2ViRnVuY3Rpb24pIHt9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBgZ3JhbnRlZWAgdG8gY2FsbCB0aGUgZW5kcG9pbnQgKGBsYW1iZGE6SW52b2tlV2ViRnVuY3Rpb25FbmRwb2ludGApLlxuICAgKlxuICAgKiBUaGUgZ3JhbnQgaXMgb24gdGhlIGVuZHBvaW50J3MgaG9tZS1yZWdpb24gQVJOLCB3aGljaCBJQU0gZXZhbHVhdGVzIGZvciBldmVyeSByZWdpb24gdGhlXG4gICAqIGVuZHBvaW50IHNlcnZlcyBmcm9tLCBpbmNsdWRpbmcgYSBNVUxUSV9SRUdJT04gZ2xvYmFsIFVSTC5cbiAgICpcbiAgICogQSBncmFudGVlIGluIHRoZSBmdW5jdGlvbidzIGFjY291bnQgZ2V0cyBhbiBJQU0gcG9saWN5IHN0YXRlbWVudC4gQW5vdGhlciBhY2NvdW50IG9yIGFuIEFXUyBzZXJ2aWNlIGFsc28gZ2V0c1xuICAgKiBhIHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb24ncyByZXNvdXJjZSBwb2xpY3kgKG5vdCBmb3IgYW4gaW1wb3J0ZWQgZnVuY3Rpb24ncyBlbmRwb2ludHMpLlxuICAgKi9cbiAgcHVibGljIGludm9rZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgZ3JhbnRlZSwgYWN0aW9uczogWydsYW1iZGE6SW52b2tlV2ViRnVuY3Rpb25FbmRwb2ludCddLCByZXNvdXJjZUFybnM6IHRoaXMuZW5kcG9pbnRBcm5zKCkgfTtcbiAgICByZXR1cm4gdGhpcy53ZWJGdW5jdGlvblxuICAgICAgPyBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWxPclJlc291cmNlKHsgLi4ub3B0aW9ucywgcmVzb3VyY2U6IHRoaXMud2ViRnVuY3Rpb24gfSlcbiAgICAgIDogaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKG9wdGlvbnMpO1xuICB9XG59XG4iXX0=
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 must be in the function's stack.
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.6" };
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 must be in the function's stack.
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
- const result = this.endpoint.webFunction.addToResourcePolicy(new iam.PolicyStatement({
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.6" };
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
  */
@@ -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). A `WebFunction` has
132
- * one, created by its stack on the first statement. An imported function's policy belongs to the stack that created
133
- * it, so the statement isn't added (`statementAdded: false`).
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
- * For a `WebFunction`, a grantee in this account gets an IAM policy statement; another account or an AWS service
153
- * also gets a statement in the function's resource policy. For an imported function, only the grantee's IAM policy
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 (not added for an imported function).
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
- abstract addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult;
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;