@ashishpandeyone/cdk-lambda-web-function 0.1.3 → 0.1.5

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.3" };
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.5" };
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);
@@ -7,5 +7,8 @@ import type { Construct } from 'constructs';
7
7
  * reject unversioned buckets; the CDK bootstrap bucket allows neither, so code is copied here.
8
8
  * Revisions capture their code when they're created, so superseded versions can expire, but
9
9
  * current objects must stay: a later revision may be created from the same object.
10
+ *
11
+ * The shared provider empties it when it's deleted (instead of `autoDeleteObjects`, which adds another
12
+ * Lambda function whose log group outlives the stack).
10
13
  */
11
14
  export declare function codeBucket(scope: Construct): s3.Bucket;
@@ -37,6 +37,8 @@ exports.codeBucket = codeBucket;
37
37
  const aws_cdk_lib_1 = require("aws-cdk-lib");
38
38
  const iam = __importStar(require("aws-cdk-lib/aws-iam"));
39
39
  const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
40
+ const provider_1 = require("./provider");
41
+ const provider_protocol_1 = require("./provider-protocol");
40
42
  const ID = 'LambdaWebFunctionCodeBucket';
41
43
  /**
42
44
  * The stack's code bucket (one per stack).
@@ -45,6 +47,9 @@ const ID = 'LambdaWebFunctionCodeBucket';
45
47
  * reject unversioned buckets; the CDK bootstrap bucket allows neither, so code is copied here.
46
48
  * Revisions capture their code when they're created, so superseded versions can expire, but
47
49
  * current objects must stay: a later revision may be created from the same object.
50
+ *
51
+ * The shared provider empties it when it's deleted (instead of `autoDeleteObjects`, which adds another
52
+ * Lambda function whose log group outlives the stack).
48
53
  */
49
54
  function codeBucket(scope) {
50
55
  const stack = aws_cdk_lib_1.Stack.of(scope);
@@ -57,7 +62,6 @@ function codeBucket(scope) {
57
62
  blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
58
63
  encryption: s3.BucketEncryption.S3_MANAGED,
59
64
  removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
60
- autoDeleteObjects: true,
61
65
  lifecycleRules: [{
62
66
  id: 'ExpireSupersededCode',
63
67
  noncurrentVersionExpiration: aws_cdk_lib_1.Duration.days(30),
@@ -71,6 +75,18 @@ function codeBucket(scope) {
71
75
  resources: [bucket.arnForObjects('*')],
72
76
  conditions: { StringEquals: { 'aws:SourceAccount': stack.account } },
73
77
  }));
78
+ // Only a tagged bucket is emptied (see EMPTY_ON_DELETE_TAG).
79
+ aws_cdk_lib_1.Tags.of(bucket).add(provider_protocol_1.EMPTY_ON_DELETE_TAG.key, provider_protocol_1.EMPTY_ON_DELETE_TAG.value);
80
+ const provider = (0, provider_1.webFunctionProvider)(stack);
81
+ (0, provider_1.grantToProvider)(provider, { Action: ['s3:ListBucketVersions', 's3:GetBucketTagging'], Resource: bucket.bucketArn });
82
+ (0, provider_1.grantToProvider)(provider, { Action: ['s3:DeleteObject', 's3:DeleteObjectVersion'], Resource: bucket.arnForObjects('*') });
83
+ const properties = { BucketName: bucket.bucketName };
84
+ // Depends on the bucket (through its name), so it's deleted, and empties it, just before the bucket.
85
+ new aws_cdk_lib_1.CustomResource(stack, `${ID}Cleanup`, {
86
+ serviceToken: provider.serviceToken,
87
+ resourceType: provider_protocol_1.CODE_BUCKET_CLEANUP_RESOURCE_TYPE,
88
+ properties: { ...properties },
89
+ });
74
90
  return bucket;
75
91
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1idWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9jb2RlLWJ1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWVBLGdDQTBCQztBQXpDRCw2Q0FBNkQ7QUFDN0QseURBQTJDO0FBQzNDLHVEQUF5QztBQUd6QyxNQUFNLEVBQUUsR0FBRyw2QkFBNkIsQ0FBQztBQUV6Qzs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEtBQWdCO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBMEIsQ0FBQztJQUN0RSxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUU5QixNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUN0QyxTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1FBQ2pELFVBQVUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtRQUMxQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsY0FBYyxFQUFFLENBQUM7Z0JBQ2YsRUFBRSxFQUFFLHNCQUFzQjtnQkFDMUIsMkJBQTJCLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxtQ0FBbUMsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDdEQsQ0FBQztLQUNILENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDakQsR0FBRyxFQUFFLDRCQUE0QjtRQUNqQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlELE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQztRQUNoRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtLQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuY29uc3QgSUQgPSAnTGFtYmRhV2ViRnVuY3Rpb25Db2RlQnVja2V0JztcblxuLyoqXG4gKiBUaGUgc3RhY2sncyBjb2RlIGJ1Y2tldCAob25lIHBlciBzdGFjaykuXG4gKlxuICogTGFtYmRhIFdlYiBGdW5jdGlvbnMgZG93bmxvYWQgY29kZSBhcyB0aGUgYGxhbWJkYS5hbWF6b25hd3MuY29tYCBzZXJ2aWNlIHByaW5jaXBhbCBhbmRcbiAqIHJlamVjdCB1bnZlcnNpb25lZCBidWNrZXRzOyB0aGUgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWxsb3dzIG5laXRoZXIsIHNvIGNvZGUgaXMgY29waWVkIGhlcmUuXG4gKiBSZXZpc2lvbnMgY2FwdHVyZSB0aGVpciBjb2RlIHdoZW4gdGhleSdyZSBjcmVhdGVkLCBzbyBzdXBlcnNlZGVkIHZlcnNpb25zIGNhbiBleHBpcmUsIGJ1dFxuICogY3VycmVudCBvYmplY3RzIG11c3Qgc3RheTogYSBsYXRlciByZXZpc2lvbiBtYXkgYmUgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGVCdWNrZXQoc2NvcGU6IENvbnN0cnVjdCk6IHMzLkJ1Y2tldCB7XG4gIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICBjb25zdCBleGlzdGluZyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKElEKSBhcyBzMy5CdWNrZXQgfCB1bmRlZmluZWQ7XG4gIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXG4gIGNvbnN0IGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoc3RhY2ssIElELCB7XG4gICAgdmVyc2lvbmVkOiB0cnVlLFxuICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgIGxpZmVjeWNsZVJ1bGVzOiBbe1xuICAgICAgaWQ6ICdFeHBpcmVTdXBlcnNlZGVkQ29kZScsXG4gICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQWZ0ZXI6IER1cmF0aW9uLmRheXMoMSksXG4gICAgfV0sXG4gIH0pO1xuICBidWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgc2lkOiAnTGFtYmRhV2ViRnVuY3Rpb25zUmVhZENvZGUnLFxuICAgIHByaW5jaXBhbHM6IFtuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyldLFxuICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkdldE9iamVjdFZlcnNpb24nXSxcbiAgICByZXNvdXJjZXM6IFtidWNrZXQuYXJuRm9yT2JqZWN0cygnKicpXSxcbiAgICBjb25kaXRpb25zOiB7IFN0cmluZ0VxdWFsczogeyAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50IH0gfSxcbiAgfSkpO1xuICByZXR1cm4gYnVja2V0O1xufVxuIl19
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1idWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9jb2RlLWJ1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxnQ0FzQ0M7QUExREQsNkNBQW1GO0FBQ25GLHlEQUEyQztBQUMzQyx1REFBeUM7QUFFekMseUNBQWtFO0FBQ2xFLDJEQUErSDtBQUUvSCxNQUFNLEVBQUUsR0FBRyw2QkFBNkIsQ0FBQztBQUV6Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEtBQWdCO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBMEIsQ0FBQztJQUN0RSxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUU5QixNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUN0QyxTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1FBQ2pELFVBQVUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtRQUMxQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGNBQWMsRUFBRSxDQUFDO2dCQUNmLEVBQUUsRUFBRSxzQkFBc0I7Z0JBQzFCLDJCQUEyQixFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsbUNBQW1DLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3RELENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ2pELEdBQUcsRUFBRSw0QkFBNEI7UUFDakMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RCxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUM7UUFDaEQsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7S0FDckUsQ0FBQyxDQUFDLENBQUM7SUFFSiw2REFBNkQ7SUFDN0Qsa0JBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLHVDQUFtQixDQUFDLEdBQUcsRUFBRSx1Q0FBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxJQUFBLDhCQUFtQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLElBQUEsMEJBQWUsRUFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNwSCxJQUFBLDBCQUFlLEVBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUgsTUFBTSxVQUFVLEdBQWdDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNsRixxR0FBcUc7SUFDckcsSUFBSSw0QkFBYyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3hDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtRQUNuQyxZQUFZLEVBQUUscURBQWlDO1FBQy9DLFVBQVUsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFO0tBQzlCLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBncmFudFRvUHJvdmlkZXIsIHdlYkZ1bmN0aW9uUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyJztcbmltcG9ydCB7IENPREVfQlVDS0VUX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSwgRU1QVFlfT05fREVMRVRFX1RBRywgdHlwZSBDb2RlQnVja2V0Q2xlYW51cFByb3BlcnRpZXMgfSBmcm9tICcuL3Byb3ZpZGVyLXByb3RvY29sJztcblxuY29uc3QgSUQgPSAnTGFtYmRhV2ViRnVuY3Rpb25Db2RlQnVja2V0JztcblxuLyoqXG4gKiBUaGUgc3RhY2sncyBjb2RlIGJ1Y2tldCAob25lIHBlciBzdGFjaykuXG4gKlxuICogTGFtYmRhIFdlYiBGdW5jdGlvbnMgZG93bmxvYWQgY29kZSBhcyB0aGUgYGxhbWJkYS5hbWF6b25hd3MuY29tYCBzZXJ2aWNlIHByaW5jaXBhbCBhbmRcbiAqIHJlamVjdCB1bnZlcnNpb25lZCBidWNrZXRzOyB0aGUgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWxsb3dzIG5laXRoZXIsIHNvIGNvZGUgaXMgY29waWVkIGhlcmUuXG4gKiBSZXZpc2lvbnMgY2FwdHVyZSB0aGVpciBjb2RlIHdoZW4gdGhleSdyZSBjcmVhdGVkLCBzbyBzdXBlcnNlZGVkIHZlcnNpb25zIGNhbiBleHBpcmUsIGJ1dFxuICogY3VycmVudCBvYmplY3RzIG11c3Qgc3RheTogYSBsYXRlciByZXZpc2lvbiBtYXkgYmUgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIG9iamVjdC5cbiAqXG4gKiBUaGUgc2hhcmVkIHByb3ZpZGVyIGVtcHRpZXMgaXQgd2hlbiBpdCdzIGRlbGV0ZWQgKGluc3RlYWQgb2YgYGF1dG9EZWxldGVPYmplY3RzYCwgd2hpY2ggYWRkcyBhbm90aGVyXG4gKiBMYW1iZGEgZnVuY3Rpb24gd2hvc2UgbG9nIGdyb3VwIG91dGxpdmVzIHRoZSBzdGFjaykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2RlQnVja2V0KHNjb3BlOiBDb25zdHJ1Y3QpOiBzMy5CdWNrZXQge1xuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChJRCkgYXMgczMuQnVja2V0IHwgdW5kZWZpbmVkO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHN0YWNrLCBJRCwge1xuICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBsaWZlY3ljbGVSdWxlczogW3tcbiAgICAgIGlkOiAnRXhwaXJlU3VwZXJzZWRlZENvZGUnLFxuICAgICAgbm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uOiBEdXJhdGlvbi5kYXlzKDMwKSxcbiAgICAgIGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZEFmdGVyOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgIH1dLFxuICB9KTtcbiAgYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgIHNpZDogJ0xhbWJkYVdlYkZ1bmN0aW9uc1JlYWRDb2RlJyxcbiAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpXSxcbiAgICBhY3Rpb25zOiBbJ3MzOkdldE9iamVjdCcsICdzMzpHZXRPYmplY3RWZXJzaW9uJ10sXG4gICAgcmVzb3VyY2VzOiBbYnVja2V0LmFybkZvck9iamVjdHMoJyonKV0sXG4gICAgY29uZGl0aW9uczogeyBTdHJpbmdFcXVhbHM6IHsgJ2F3czpTb3VyY2VBY2NvdW50Jzogc3RhY2suYWNjb3VudCB9IH0sXG4gIH0pKTtcblxuICAvLyBPbmx5IGEgdGFnZ2VkIGJ1Y2tldCBpcyBlbXB0aWVkIChzZWUgRU1QVFlfT05fREVMRVRFX1RBRykuXG4gIFRhZ3Mub2YoYnVja2V0KS5hZGQoRU1QVFlfT05fREVMRVRFX1RBRy5rZXksIEVNUFRZX09OX0RFTEVURV9UQUcudmFsdWUpO1xuICBjb25zdCBwcm92aWRlciA9IHdlYkZ1bmN0aW9uUHJvdmlkZXIoc3RhY2spO1xuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHsgQWN0aW9uOiBbJ3MzOkxpc3RCdWNrZXRWZXJzaW9ucycsICdzMzpHZXRCdWNrZXRUYWdnaW5nJ10sIFJlc291cmNlOiBidWNrZXQuYnVja2V0QXJuIH0pO1xuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHsgQWN0aW9uOiBbJ3MzOkRlbGV0ZU9iamVjdCcsICdzMzpEZWxldGVPYmplY3RWZXJzaW9uJ10sIFJlc291cmNlOiBidWNrZXQuYXJuRm9yT2JqZWN0cygnKicpIH0pO1xuICBjb25zdCBwcm9wZXJ0aWVzOiBDb2RlQnVja2V0Q2xlYW51cFByb3BlcnRpZXMgPSB7IEJ1Y2tldE5hbWU6IGJ1Y2tldC5idWNrZXROYW1lIH07XG4gIC8vIERlcGVuZHMgb24gdGhlIGJ1Y2tldCAodGhyb3VnaCBpdHMgbmFtZSksIHNvIGl0J3MgZGVsZXRlZCwgYW5kIGVtcHRpZXMgaXQsIGp1c3QgYmVmb3JlIHRoZSBidWNrZXQuXG4gIG5ldyBDdXN0b21SZXNvdXJjZShzdGFjaywgYCR7SUR9Q2xlYW51cGAsIHtcbiAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICByZXNvdXJjZVR5cGU6IENPREVfQlVDS0VUX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSxcbiAgICBwcm9wZXJ0aWVzOiB7IC4uLnByb3BlcnRpZXMgfSxcbiAgfSk7XG4gIHJldHVybiBidWNrZXQ7XG59XG4iXX0=
@@ -97,3 +97,16 @@ export interface RegionalAlarmProperties {
97
97
  /** PutMetricAlarm's `TreatMissingData`. */
98
98
  readonly TreatMissingData: string;
99
99
  }
100
+ /** Empties the stack's code bucket (every object version and delete marker) when the stack deletes it. */
101
+ export declare const CODE_BUCKET_CLEANUP_RESOURCE_TYPE = "Custom::LambdaWebCodeBucketCleanup";
102
+ /**
103
+ * Tag on the code bucket that lets the cleanup empty it. A rollback reverts the bucket's tags before it deletes
104
+ * resources the failed update created, so a cleanup resource added to an existing bucket never empties it on rollback.
105
+ */
106
+ export declare const EMPTY_ON_DELETE_TAG: {
107
+ key: string;
108
+ value: string;
109
+ };
110
+ export interface CodeBucketCleanupProperties {
111
+ readonly BucketName: string;
112
+ }
@@ -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.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.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';
@@ -30,4 +30,11 @@ exports.TRAFFIC_SHIFT_RESOURCE_TYPE = 'Custom::LambdaWebTrafficShift';
30
30
  /** Prefix of every alarm this library creates outside the stack's region; the provider's IAM is scoped to it. */
31
31
  exports.ALARM_NAME_PREFIX = 'LambdaWeb-';
32
32
  exports.REGIONAL_ALARM_RESOURCE_TYPE = 'Custom::LambdaWebAlarm';
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUEyQ0gsMERBRUM7QUEzQ0QsdUZBQXVGO0FBQzFFLFFBQUEsa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFjMUQsdUdBQXVHO0FBQzFGLFFBQUEsdUJBQXVCLEdBQUcsMkJBQTJCLENBQUM7QUFjbkUsZ0hBQWdIO0FBQ25HLFFBQUEsNkJBQTZCLEdBQUcsaUNBQWlDLENBQUM7QUFTL0UsZ0ZBQWdGO0FBQ2hGLFNBQWdCLHVCQUF1QixDQUFDLE1BQWM7SUFDcEQsT0FBTyxVQUFVLE1BQU0sRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtSEFBbUg7QUFDdEcsUUFBQSw4QkFBOEIsR0FBRyxrQ0FBa0MsQ0FBQztBQWFqRjs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBMkIzRSxrSEFBa0g7QUFDbEgsaUhBQWlIO0FBQ3BHLFFBQUEsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLFFBQUEsNEJBQTRCLEdBQUcsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyYWN0IGJldHdlZW4gdGhlIGNvbnN0cnVjdHMgYW5kIHRoZSBjdXN0b20gcmVzb3VyY2UgaGFuZGxlciBpblxuICogYGhhbmRsZXJzL3dlYi1mdW5jdGlvbi1wcm92aWRlcmAuIEJvdGggc2lkZXMgaW1wb3J0IHRoaXMgZmlsZSwgc28gcmVzb3VyY2VcbiAqIHR5cGVzIGFuZCBwcm9wZXJ0eSBuYW1lcyBjYW4ndCBkcmlmdCBhcGFydC5cbiAqXG4gKiBDbG91ZEZvcm1hdGlvbiBwYXNzZXMgZXZlcnkgc2NhbGFyIHByb3BlcnR5IHRvIHRoZSBoYW5kbGVyIGFzIGEgc3RyaW5nLlxuICovXG5cbi8qKiBDb3BpZXMgYSBjb2RlIHppcCBpbnRvIHRoZSBzdGFjaydzIGNvZGUgYnVja2V0IGFuZCByZXR1cm5zIHRoZSBvYmplY3QncyB2ZXJzaW9uLiAqL1xuZXhwb3J0IGNvbnN0IENPREVfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkNvZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgU291cmNlQnVja2V0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IFNvdXJjZUtleTogc3RyaW5nO1xuICByZWFkb25seSBTb3VyY2VWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBEZXN0aW5hdGlvbkJ1Y2tldDogc3RyaW5nO1xuICByZWFkb25seSBEZXN0aW5hdGlvbktleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVBdHRyaWJ1dGVzIHtcbiAgcmVhZG9ubHkgVmVyc2lvbklkOiBzdHJpbmc7XG59XG5cbi8qKiBFbnN1cmVzIG9uZSBsb2cgZ3JvdXAgKGluIGFueSByZWdpb24pIGV4aXN0cyB3aXRoIHRoZSBnaXZlbiByZXRlbnRpb24sIGFuZCByZW1vdmVzIGl0IG9uIGRlbGV0ZS4gKi9cbmV4cG9ydCBjb25zdCBMT0dfR1JPVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkxvZ0dyb3VwJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dHcm91cFByb3BlcnRpZXMge1xuICByZWFkb25seSBSZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgTG9nR3JvdXBOYW1lOiBzdHJpbmc7XG4gIC8qKiBEYXlzLCBvciAnSW5maW5pdGUnIGZvciBubyByZXRlbnRpb24uICovXG4gIHJlYWRvbmx5IFJldGVudGlvbkluRGF5czogc3RyaW5nO1xuICByZWFkb25seSBSZW1vdmFsUG9saWN5OiAncmV0YWluJyB8ICdkZXN0cm95JztcbiAgLyoqIFNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcsIHNvIGVudmlyb25tZW50cyBzdGlsbCBzaHV0dGluZyBkb3duIGNhbiBmbHVzaCB0aGVpciBsYXN0IGxpbmVzLiAqL1xuICByZWFkb25seSBGbHVzaFdhaXRTZWNvbmRzOiBzdHJpbmc7XG4gIC8qKiBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGNoZWNraW5nIG9uY2UgbW9yZSB0aGF0IHRoZSBzZXJ2aWNlIGhhc24ndCByZS1jcmVhdGVkIHRoZSBncm91cC4gKi9cbiAgcmVhZG9ubHkgUmVjaGVja1dhaXRTZWNvbmRzOiBzdHJpbmc7XG59XG5cbi8qKiBSZWFkcyBhbiBlbmRwb2ludCdzIHBlci1yZWdpb24gZG9tYWluIG5hbWVzLCB3aGljaCBDbG91ZEZvcm1hdGlvbiBjYW4ndCBpbmRleCBvdXQgb2YgYFJlZ2lvbmFsRW5kcG9pbnRzYC4gKi9cbmV4cG9ydCBjb25zdCBFTkRQT0lOVF9MT09LVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkVuZHBvaW50TG9va3VwJztcblxuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludExvb2t1cFByb3BlcnRpZXMge1xuICByZWFkb25seSBGdW5jdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSBFbmRwb2ludE5hbWU6IHN0cmluZztcbiAgLyoqIENoYW5nZXMgd2hlbmV2ZXIgdGhlIGVuZHBvaW50IGlzIHJlcGxhY2VkLCBzbyB0aGUgbG9va3VwIHJ1bnMgYWdhaW4uICovXG4gIHJlYWRvbmx5IEVuZHBvaW50QXJuOiBzdHJpbmc7XG59XG5cbi8qKiBBdHRyaWJ1dGUgbmFtZSBob2xkaW5nIHRoZSBkb21haW4gb2Ygb25lIHJlZ2lvbiwgZS5nLiBgRG9tYWluLnVzLWVhc3QtMWAuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uYWxEb21haW5BdHRyaWJ1dGUocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERvbWFpbi4ke3JlZ2lvbn1gO1xufVxuXG4vKiogRGVsZXRlcyBhIGZ1bmN0aW9uJ3Mgb2xkZXN0IHJldmlzaW9ucyBiZXlvbmQgYSBjb3VudCwgZXhjZXB0IHRob3NlIHRoYXQgYXJlIGluIHVzZSBvciBtYXkgYmUgcm9sbGVkIGJhY2sgdG8uICovXG5leHBvcnQgY29uc3QgUkVWSVNJT05fQ0xFQU5VUF9SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6TGFtYmRhV2ViUmV2aXNpb25DbGVhbnVwJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXZpc2lvbkNsZWFudXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgRnVuY3Rpb25Bcm46IHN0cmluZztcbiAgLyoqIEhvdyBtYW55IG9mIHRoZSBuZXdlc3QgcmV2aXNpb25zIHRvIGtlZXAuICovXG4gIHJlYWRvbmx5IEtlZXA6IHN0cmluZztcbiAgLyoqXG4gICAqIFJldmlzaW9ucyB0aGUgdGVtcGxhdGUgdXNlcyAodGhlIGN1cnJlbnQgb25lIGFuZCBhbnkgYW4gZW5kcG9pbnQgcm91dGVzIHRvKS4gQWx3YXlzIGtlcHQsIGFuZCBvbiBhbiB1cGRhdGVcbiAgICogdGhlIHByZXZpb3VzIHRlbXBsYXRlJ3MgYXJlIGtlcHQgdG9vOiB0aGV5J3JlIHdoYXQgYSByb2xsYmFjayByb3V0ZXMgYmFjayB0by5cbiAgICovXG4gIHJlYWRvbmx5IFJldmlzaW9uSWRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNb3ZlcyBhbiBlbmRwb2ludCdzIHRyYWZmaWMgdG8gYSByZXZpc2lvbiBpbiBzdGVwcywgd2F0Y2hpbmcgYWxhcm1zIChjYW5hcnkgYW5kIGxpbmVhciBkZXBsb3ltZW50cykuXG4gKiBTZXJ2ZWQgYnkgdGhlIGRlcGxveW1lbnQgcHJvdmlkZXIgKGBoYW5kbGVycy93ZWItZnVuY3Rpb24tZGVwbG95bWVudGApLCBub3QgdGhlIHNoYXJlZCBwcm92aWRlcjogaXQgY2FuIHJ1biBmb3IgdXAgdG8gYW4gaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUZGSUNfU0hJRlRfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYlRyYWZmaWNTaGlmdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhZmZpY1NoaWZ0UHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IEZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEVuZHBvaW50TmFtZTogc3RyaW5nO1xuICAvKiogVGhlIHJldmlzaW9uIHRoYXQgZW5kcyB1cCB3aXRoIGFsbCBvZiB0aGUgZW5kcG9pbnQncyB0cmFmZmljLiAqL1xuICByZWFkb25seSBSZXZpc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcmV2aXNpb24ncyBzaGFyZSBvZiB0cmFmZmljIGF0IGVhY2ggc3RlcCwgaW4gcGVyY2VudCwgY29tbWEtc2VwYXJhdGVkOyB0aGUgbGFzdCBpcyAxMDAuICovXG4gIHJlYWRvbmx5IFN0ZXBzOiBzdHJpbmc7XG4gIC8qKiBTZWNvbmRzIGVhY2ggc3RlcCBzZXJ2ZXMgKGNvdW50ZWQgZnJvbSB3aGVuIGl0cyB1cGRhdGUgc3RhcnRlZCkgYmVmb3JlIHRoZSBuZXh0LiAqL1xuICByZWFkb25seSBXYWl0U2Vjb25kczogc3RyaW5nO1xuICAvKiogQWxhcm1zIChpbiBhbnkgcmVnaW9uKSB0aGF0IHN0b3AgdGhlIGRlcGxveW1lbnQgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIHdlaWdodHMuICovXG4gIHJlYWRvbmx5IEFsYXJtQXJucz86IHN0cmluZ1tdO1xuICAvKiogSGFzaCBvZiB0aGUgZW5kcG9pbnQncyBvdGhlciBzZXR0aW5nczogYW55IGVuZHBvaW50IGNoYW5nZSByZS1jaGVja3MgaXRzIHRyYWZmaWMgYmVmb3JlIENsb3VkRm9ybWF0aW9uIHdyaXRlcyBpdC4gKi9cbiAgcmVhZG9ubHkgRW5kcG9pbnRDb25maWc6IHN0cmluZztcbn1cblxuLyoqIFdoYXQgYG9uRXZlbnRgIGhhbmRzIHRvIGBpc0NvbXBsZXRlYCAodGhlIFByb3ZpZGVyIGZyYW1ld29yayBwYXNzZXMgaXQgYXMgYERhdGFgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhZmZpY1NoaWZ0U3RhdGUge1xuICAvKiogYG5vbmVgOiBub3RoaW5nIHRvIGRvOyBgc2hpZnRgOiBtb3ZpbmcgaW4gc3RlcHM7IGBzd2l0Y2hgOiBhbGwgYXQgb25jZSwgd2l0aG91dCBhbGFybXMgKHN0YWNrIHJvbGxiYWNrKS4gKi9cbiAgcmVhZG9ubHkgQWN0aW9uOiAnbm9uZScgfCAnc2hpZnQnIHwgJ3N3aXRjaCc7XG4gIC8qKiBgc2hpZnRgOiB0aGUgZW5kcG9pbnQncyB3ZWlnaHRzIGJlZm9yZSB0aGUgZGVwbG95bWVudCAoSlNPTiBgW3tyZXZpc2lvbklkLCB3ZWlnaHR9XWApLCByZXN0b3JlZCB3aGVuIGFuIGFsYXJtIGZpcmVzLiAqL1xuICByZWFkb25seSBQcmV2aW91c1dlaWdodHM/OiBzdHJpbmc7XG4gIC8qKiBgc3dpdGNoYDogdGhlIHdlaWdodHMgYmVpbmcgd3JpdHRlbiAoSlNPTiBgW3tyZXZpc2lvbklkLCB3ZWlnaHR9XWApLiAqL1xuICByZWFkb25seSBUYXJnZXRXZWlnaHRzPzogc3RyaW5nO1xufVxuXG4vKiogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGFsYXJtIGluIGFueSByZWdpb24gKENsb3VkRm9ybWF0aW9uIG9ubHkgY3JlYXRlcyBhbGFybXMgaW4gdGhlIHN0YWNrJ3MgcmVnaW9uKS4gKi9cbi8qKiBQcmVmaXggb2YgZXZlcnkgYWxhcm0gdGhpcyBsaWJyYXJ5IGNyZWF0ZXMgb3V0c2lkZSB0aGUgc3RhY2sncyByZWdpb247IHRoZSBwcm92aWRlcidzIElBTSBpcyBzY29wZWQgdG8gaXQuICovXG5leHBvcnQgY29uc3QgQUxBUk1fTkFNRV9QUkVGSVggPSAnTGFtYmRhV2ViLSc7XG5leHBvcnQgY29uc3QgUkVHSU9OQUxfQUxBUk1fUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYkFsYXJtJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25hbEFsYXJtUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IFJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBBbGFybU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgQWxhcm1EZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogUHV0TWV0cmljQWxhcm0ncyBgTWV0cmljc2AsIGFzIEpTT04uICovXG4gIHJlYWRvbmx5IE1ldHJpY3M6IHN0cmluZztcbiAgcmVhZG9ubHkgVGhyZXNob2xkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEV2YWx1YXRpb25QZXJpb2RzOiBzdHJpbmc7XG4gIC8qKiBQdXRNZXRyaWNBbGFybSdzIGBDb21wYXJpc29uT3BlcmF0b3JgLiAqL1xuICByZWFkb25seSBDb21wYXJpc29uT3BlcmF0b3I6IHN0cmluZztcbiAgLyoqIFB1dE1ldHJpY0FsYXJtJ3MgYFRyZWF0TWlzc2luZ0RhdGFgLiAqL1xuICByZWFkb25seSBUcmVhdE1pc3NpbmdEYXRhOiBzdHJpbmc7XG59XG4iXX0=
33
+ /** Empties the stack's code bucket (every object version and delete marker) when the stack deletes it. */
34
+ exports.CODE_BUCKET_CLEANUP_RESOURCE_TYPE = 'Custom::LambdaWebCodeBucketCleanup';
35
+ /**
36
+ * Tag on the code bucket that lets the cleanup empty it. A rollback reverts the bucket's tags before it deletes
37
+ * resources the failed update created, so a cleanup resource added to an existing bucket never empties it on rollback.
38
+ */
39
+ exports.EMPTY_ON_DELETE_TAG = { key: 'cdk-lambda-web:empty-on-delete', value: 'true' };
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUEyQ0gsMERBRUM7QUEzQ0QsdUZBQXVGO0FBQzFFLFFBQUEsa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFjMUQsdUdBQXVHO0FBQzFGLFFBQUEsdUJBQXVCLEdBQUcsMkJBQTJCLENBQUM7QUFjbkUsZ0hBQWdIO0FBQ25HLFFBQUEsNkJBQTZCLEdBQUcsaUNBQWlDLENBQUM7QUFTL0UsZ0ZBQWdGO0FBQ2hGLFNBQWdCLHVCQUF1QixDQUFDLE1BQWM7SUFDcEQsT0FBTyxVQUFVLE1BQU0sRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtSEFBbUg7QUFDdEcsUUFBQSw4QkFBOEIsR0FBRyxrQ0FBa0MsQ0FBQztBQWFqRjs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBMkIzRSxrSEFBa0g7QUFDbEgsaUhBQWlIO0FBQ3BHLFFBQUEsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLFFBQUEsNEJBQTRCLEdBQUcsd0JBQXdCLENBQUM7QUFnQnJFLDBHQUEwRztBQUM3RixRQUFBLGlDQUFpQyxHQUFHLG9DQUFvQyxDQUFDO0FBRXRGOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cmFjdCBiZXR3ZWVuIHRoZSBjb25zdHJ1Y3RzIGFuZCB0aGUgY3VzdG9tIHJlc291cmNlIGhhbmRsZXIgaW5cbiAqIGBoYW5kbGVycy93ZWItZnVuY3Rpb24tcHJvdmlkZXJgLiBCb3RoIHNpZGVzIGltcG9ydCB0aGlzIGZpbGUsIHNvIHJlc291cmNlXG4gKiB0eXBlcyBhbmQgcHJvcGVydHkgbmFtZXMgY2FuJ3QgZHJpZnQgYXBhcnQuXG4gKlxuICogQ2xvdWRGb3JtYXRpb24gcGFzc2VzIGV2ZXJ5IHNjYWxhciBwcm9wZXJ0eSB0byB0aGUgaGFuZGxlciBhcyBhIHN0cmluZy5cbiAqL1xuXG4vKiogQ29waWVzIGEgY29kZSB6aXAgaW50byB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCBhbmQgcmV0dXJucyB0aGUgb2JqZWN0J3MgdmVyc2lvbi4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJDb2RlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IFNvdXJjZUJ1Y2tldDogc3RyaW5nO1xuICByZWFkb25seSBTb3VyY2VLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgU291cmNlVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgRGVzdGluYXRpb25CdWNrZXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgRGVzdGluYXRpb25LZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IFZlcnNpb25JZDogc3RyaW5nO1xufVxuXG4vKiogRW5zdXJlcyBvbmUgbG9nIGdyb3VwIChpbiBhbnkgcmVnaW9uKSBleGlzdHMgd2l0aCB0aGUgZ2l2ZW4gcmV0ZW50aW9uLCBhbmQgcmVtb3ZlcyBpdCBvbiBkZWxldGUuICovXG5leHBvcnQgY29uc3QgTE9HX0dST1VQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJMb2dHcm91cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nR3JvdXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IExvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICAvKiogRGF5cywgb3IgJ0luZmluaXRlJyBmb3Igbm8gcmV0ZW50aW9uLiAqL1xuICByZWFkb25seSBSZXRlbnRpb25JbkRheXM6IHN0cmluZztcbiAgcmVhZG9ubHkgUmVtb3ZhbFBvbGljeTogJ3JldGFpbicgfCAnZGVzdHJveSc7XG4gIC8qKiBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nLCBzbyBlbnZpcm9ubWVudHMgc3RpbGwgc2h1dHRpbmcgZG93biBjYW4gZmx1c2ggdGhlaXIgbGFzdCBsaW5lcy4gKi9cbiAgcmVhZG9ubHkgRmx1c2hXYWl0U2Vjb25kczogc3RyaW5nO1xuICAvKiogU2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjaGVja2luZyBvbmNlIG1vcmUgdGhhdCB0aGUgc2VydmljZSBoYXNuJ3QgcmUtY3JlYXRlZCB0aGUgZ3JvdXAuICovXG4gIHJlYWRvbmx5IFJlY2hlY2tXYWl0U2Vjb25kczogc3RyaW5nO1xufVxuXG4vKiogUmVhZHMgYW4gZW5kcG9pbnQncyBwZXItcmVnaW9uIGRvbWFpbiBuYW1lcywgd2hpY2ggQ2xvdWRGb3JtYXRpb24gY2FuJ3QgaW5kZXggb3V0IG9mIGBSZWdpb25hbEVuZHBvaW50c2AuICovXG5leHBvcnQgY29uc3QgRU5EUE9JTlRfTE9PS1VQX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJFbmRwb2ludExvb2t1cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5kcG9pbnRMb29rdXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgRnVuY3Rpb25Bcm46IHN0cmluZztcbiAgcmVhZG9ubHkgRW5kcG9pbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBDaGFuZ2VzIHdoZW5ldmVyIHRoZSBlbmRwb2ludCBpcyByZXBsYWNlZCwgc28gdGhlIGxvb2t1cCBydW5zIGFnYWluLiAqL1xuICByZWFkb25seSBFbmRwb2ludEFybjogc3RyaW5nO1xufVxuXG4vKiogQXR0cmlidXRlIG5hbWUgaG9sZGluZyB0aGUgZG9tYWluIG9mIG9uZSByZWdpb24sIGUuZy4gYERvbWFpbi51cy1lYXN0LTFgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvbmFsRG9tYWluQXR0cmlidXRlKHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBEb21haW4uJHtyZWdpb259YDtcbn1cblxuLyoqIERlbGV0ZXMgYSBmdW5jdGlvbidzIG9sZGVzdCByZXZpc2lvbnMgYmV5b25kIGEgY291bnQsIGV4Y2VwdCB0aG9zZSB0aGF0IGFyZSBpbiB1c2Ugb3IgbWF5IGJlIHJvbGxlZCBiYWNrIHRvLiAqL1xuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NMRUFOVVBfUkVTT1VSQ0VfVFlQRSA9ICdDdXN0b206OkxhbWJkYVdlYlJldmlzaW9uQ2xlYW51cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aXNpb25DbGVhbnVwUHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IEZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSBvZiB0aGUgbmV3ZXN0IHJldmlzaW9ucyB0byBrZWVwLiAqL1xuICByZWFkb25seSBLZWVwOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXZpc2lvbnMgdGhlIHRlbXBsYXRlIHVzZXMgKHRoZSBjdXJyZW50IG9uZSBhbmQgYW55IGFuIGVuZHBvaW50IHJvdXRlcyB0bykuIEFsd2F5cyBrZXB0LCBhbmQgb24gYW4gdXBkYXRlXG4gICAqIHRoZSBwcmV2aW91cyB0ZW1wbGF0ZSdzIGFyZSBrZXB0IHRvbzogdGhleSdyZSB3aGF0IGEgcm9sbGJhY2sgcm91dGVzIGJhY2sgdG8uXG4gICAqL1xuICByZWFkb25seSBSZXZpc2lvbklkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTW92ZXMgYW4gZW5kcG9pbnQncyB0cmFmZmljIHRvIGEgcmV2aXNpb24gaW4gc3RlcHMsIHdhdGNoaW5nIGFsYXJtcyAoY2FuYXJ5IGFuZCBsaW5lYXIgZGVwbG95bWVudHMpLlxuICogU2VydmVkIGJ5IHRoZSBkZXBsb3ltZW50IHByb3ZpZGVyIChgaGFuZGxlcnMvd2ViLWZ1bmN0aW9uLWRlcGxveW1lbnRgKSwgbm90IHRoZSBzaGFyZWQgcHJvdmlkZXI6IGl0IGNhbiBydW4gZm9yIHVwIHRvIGFuIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFGRklDX1NISUZUX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJUcmFmZmljU2hpZnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTaGlmdFByb3BlcnRpZXMge1xuICByZWFkb25seSBGdW5jdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSBFbmRwb2ludE5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSByZXZpc2lvbiB0aGF0IGVuZHMgdXAgd2l0aCBhbGwgb2YgdGhlIGVuZHBvaW50J3MgdHJhZmZpYy4gKi9cbiAgcmVhZG9ubHkgUmV2aXNpb25JZDogc3RyaW5nO1xuICAvKiogVGhlIHJldmlzaW9uJ3Mgc2hhcmUgb2YgdHJhZmZpYyBhdCBlYWNoIHN0ZXAsIGluIHBlcmNlbnQsIGNvbW1hLXNlcGFyYXRlZDsgdGhlIGxhc3QgaXMgMTAwLiAqL1xuICByZWFkb25seSBTdGVwczogc3RyaW5nO1xuICAvKiogU2Vjb25kcyBlYWNoIHN0ZXAgc2VydmVzIChjb3VudGVkIGZyb20gd2hlbiBpdHMgdXBkYXRlIHN0YXJ0ZWQpIGJlZm9yZSB0aGUgbmV4dC4gKi9cbiAgcmVhZG9ubHkgV2FpdFNlY29uZHM6IHN0cmluZztcbiAgLyoqIEFsYXJtcyAoaW4gYW55IHJlZ2lvbikgdGhhdCBzdG9wIHRoZSBkZXBsb3ltZW50IGFuZCByZXN0b3JlIHRoZSBwcmV2aW91cyB3ZWlnaHRzLiAqL1xuICByZWFkb25seSBBbGFybUFybnM/OiBzdHJpbmdbXTtcbiAgLyoqIEhhc2ggb2YgdGhlIGVuZHBvaW50J3Mgb3RoZXIgc2V0dGluZ3M6IGFueSBlbmRwb2ludCBjaGFuZ2UgcmUtY2hlY2tzIGl0cyB0cmFmZmljIGJlZm9yZSBDbG91ZEZvcm1hdGlvbiB3cml0ZXMgaXQuICovXG4gIHJlYWRvbmx5IEVuZHBvaW50Q29uZmlnOiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IGBvbkV2ZW50YCBoYW5kcyB0byBgaXNDb21wbGV0ZWAgKHRoZSBQcm92aWRlciBmcmFtZXdvcmsgcGFzc2VzIGl0IGFzIGBEYXRhYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTaGlmdFN0YXRlIHtcbiAgLyoqIGBub25lYDogbm90aGluZyB0byBkbzsgYHNoaWZ0YDogbW92aW5nIGluIHN0ZXBzOyBgc3dpdGNoYDogYWxsIGF0IG9uY2UsIHdpdGhvdXQgYWxhcm1zIChzdGFjayByb2xsYmFjaykuICovXG4gIHJlYWRvbmx5IEFjdGlvbjogJ25vbmUnIHwgJ3NoaWZ0JyB8ICdzd2l0Y2gnO1xuICAvKiogYHNoaWZ0YDogdGhlIGVuZHBvaW50J3Mgd2VpZ2h0cyBiZWZvcmUgdGhlIGRlcGxveW1lbnQgKEpTT04gYFt7cmV2aXNpb25JZCwgd2VpZ2h0fV1gKSwgcmVzdG9yZWQgd2hlbiBhbiBhbGFybSBmaXJlcy4gKi9cbiAgcmVhZG9ubHkgUHJldmlvdXNXZWlnaHRzPzogc3RyaW5nO1xuICAvKiogYHN3aXRjaGA6IHRoZSB3ZWlnaHRzIGJlaW5nIHdyaXR0ZW4gKEpTT04gYFt7cmV2aXNpb25JZCwgd2VpZ2h0fV1gKS4gKi9cbiAgcmVhZG9ubHkgVGFyZ2V0V2VpZ2h0cz86IHN0cmluZztcbn1cblxuLyoqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBhbGFybSBpbiBhbnkgcmVnaW9uIChDbG91ZEZvcm1hdGlvbiBvbmx5IGNyZWF0ZXMgYWxhcm1zIGluIHRoZSBzdGFjaydzIHJlZ2lvbikuICovXG4vKiogUHJlZml4IG9mIGV2ZXJ5IGFsYXJtIHRoaXMgbGlicmFyeSBjcmVhdGVzIG91dHNpZGUgdGhlIHN0YWNrJ3MgcmVnaW9uOyB0aGUgcHJvdmlkZXIncyBJQU0gaXMgc2NvcGVkIHRvIGl0LiAqL1xuZXhwb3J0IGNvbnN0IEFMQVJNX05BTUVfUFJFRklYID0gJ0xhbWJkYVdlYi0nO1xuZXhwb3J0IGNvbnN0IFJFR0lPTkFMX0FMQVJNX1JFU09VUkNFX1RZUEUgPSAnQ3VzdG9tOjpMYW1iZGFXZWJBbGFybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uYWxBbGFybVByb3BlcnRpZXMge1xuICByZWFkb25seSBSZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgQWxhcm1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IEFsYXJtRGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFB1dE1ldHJpY0FsYXJtJ3MgYE1ldHJpY3NgLCBhcyBKU09OLiAqL1xuICByZWFkb25seSBNZXRyaWNzOiBzdHJpbmc7XG4gIHJlYWRvbmx5IFRocmVzaG9sZDogc3RyaW5nO1xuICByZWFkb25seSBFdmFsdWF0aW9uUGVyaW9kczogc3RyaW5nO1xuICAvKiogUHV0TWV0cmljQWxhcm0ncyBgQ29tcGFyaXNvbk9wZXJhdG9yYC4gKi9cbiAgcmVhZG9ubHkgQ29tcGFyaXNvbk9wZXJhdG9yOiBzdHJpbmc7XG4gIC8qKiBQdXRNZXRyaWNBbGFybSdzIGBUcmVhdE1pc3NpbmdEYXRhYC4gKi9cbiAgcmVhZG9ubHkgVHJlYXRNaXNzaW5nRGF0YTogc3RyaW5nO1xufVxuXG4vKiogRW1wdGllcyB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCAoZXZlcnkgb2JqZWN0IHZlcnNpb24gYW5kIGRlbGV0ZSBtYXJrZXIpIHdoZW4gdGhlIHN0YWNrIGRlbGV0ZXMgaXQuICovXG5leHBvcnQgY29uc3QgQ09ERV9CVUNLRVRfQ0xFQU5VUF9SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6TGFtYmRhV2ViQ29kZUJ1Y2tldENsZWFudXAnO1xuXG4vKipcbiAqIFRhZyBvbiB0aGUgY29kZSBidWNrZXQgdGhhdCBsZXRzIHRoZSBjbGVhbnVwIGVtcHR5IGl0LiBBIHJvbGxiYWNrIHJldmVydHMgdGhlIGJ1Y2tldCdzIHRhZ3MgYmVmb3JlIGl0IGRlbGV0ZXNcbiAqIHJlc291cmNlcyB0aGUgZmFpbGVkIHVwZGF0ZSBjcmVhdGVkLCBzbyBhIGNsZWFudXAgcmVzb3VyY2UgYWRkZWQgdG8gYW4gZXhpc3RpbmcgYnVja2V0IG5ldmVyIGVtcHRpZXMgaXQgb24gcm9sbGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PTl9ERUxFVEVfVEFHID0geyBrZXk6ICdjZGstbGFtYmRhLXdlYjplbXB0eS1vbi1kZWxldGUnLCB2YWx1ZTogJ3RydWUnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1Y2tldENsZWFudXBQcm9wZXJ0aWVzIHtcbiAgcmVhZG9ubHkgQnVja2V0TmFtZTogc3RyaW5nO1xufVxuIl19
@@ -2,8 +2,9 @@ import { CustomResourceProvider } from 'aws-cdk-lib';
2
2
  import type { Construct } from 'constructs';
3
3
  /**
4
4
  * The single custom resource provider (one Lambda per stack) behind code copies, log groups,
5
- * endpoint lookups, revision cleanup and alarms in other regions. It's a core `CustomResourceProvider`,
6
- * not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful) don't pick it up.
5
+ * endpoint lookups, revision cleanup, alarms in other regions and emptying the code bucket. It's a core
6
+ * `CustomResourceProvider`, not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful)
7
+ * don't pick it up.
7
8
  */
8
9
  export declare function webFunctionProvider(scope: Construct): CustomResourceProvider;
9
10
  /**
@@ -37,14 +37,17 @@ exports.webFunctionProvider = webFunctionProvider;
37
37
  exports.grantToProvider = grantToProvider;
38
38
  const path = __importStar(require("node:path"));
39
39
  const aws_cdk_lib_1 = require("aws-cdk-lib");
40
+ const logs = __importStar(require("aws-cdk-lib/aws-logs"));
40
41
  const provider_protocol_1 = require("./provider-protocol");
41
42
  /**
42
43
  * The single custom resource provider (one Lambda per stack) behind code copies, log groups,
43
- * endpoint lookups, revision cleanup and alarms in other regions. It's a core `CustomResourceProvider`,
44
- * not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful) don't pick it up.
44
+ * endpoint lookups, revision cleanup, alarms in other regions and emptying the code bucket. It's a core
45
+ * `CustomResourceProvider`, not a `lambda.Function`, so tools that discover functions by class (e.g. cdk-watchful)
46
+ * don't pick it up.
45
47
  */
46
48
  function webFunctionProvider(scope) {
47
- const provider = aws_cdk_lib_1.CustomResourceProvider.getOrCreateProvider(scope, 'Custom::LambdaWebFunctionProvider', {
49
+ const stack = aws_cdk_lib_1.Stack.of(scope);
50
+ const provider = aws_cdk_lib_1.CustomResourceProvider.getOrCreateProvider(scope, PROVIDER_ID, {
48
51
  codeDirectory: path.join(__dirname, '..', '..', 'assets', 'web-function-provider'),
49
52
  runtime: aws_cdk_lib_1.CustomResourceProviderRuntime.NODEJS_24_X,
50
53
  // Log group deletion waits for late flushes (75s + a re-check) on top of the API calls.
@@ -60,8 +63,26 @@ function webFunctionProvider(scope) {
60
63
  service: 'cloudwatch', region: '*', resource: 'alarm', resourceName: `${provider_protocol_1.ALARM_NAME_PREFIX}*`, arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
61
64
  }),
62
65
  });
66
+ if (stack.node.tryFindChild(LOG_GROUP_ID))
67
+ return provider;
68
+ // Logs go to a group the stack owns, with retention, deleted with the stack: the provider's default group
69
+ // (/aws/lambda/<function>) would be created by Lambda without retention and outlive the stack.
70
+ const logGroup = new logs.LogGroup(stack, LOG_GROUP_ID, {
71
+ retention: logs.RetentionDays.ONE_MONTH,
72
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
73
+ });
74
+ const handler = provider.node.findChild('Handler');
75
+ handler.addPropertyOverride('LoggingConfig', { LogGroup: logGroup.logGroupName, LogFormat: 'Text' });
76
+ handler.addDependency(logGroup.node.defaultChild);
77
+ // Only write to that group. The default AWSLambdaBasicExecutionRole allows logs:CreateLogGroup, so log lines
78
+ // Lambda delivers late, after CloudFormation deleted the group with the stack, would re-create it without retention.
79
+ // No Role child when the app uses pre-created roles (iam.Role.customizeRoles): that role is managed outside CDK.
80
+ provider.node.tryFindChild('Role')?.addPropertyDeletionOverride('ManagedPolicyArns');
81
+ grantToProvider(provider, { Action: ['logs:CreateLogStream', 'logs:PutLogEvents'], Resource: logGroup.logGroupArn });
63
82
  return provider;
64
83
  }
84
+ const PROVIDER_ID = 'Custom::LambdaWebFunctionProvider';
85
+ const LOG_GROUP_ID = 'LambdaWebFunctionProviderLogs';
65
86
  const granted = new WeakMap();
66
87
  /**
67
88
  * Adds a statement to the shared provider's role, once.
@@ -84,4 +105,4 @@ function grantToProvider(provider, statement) {
84
105
  seen.add(key);
85
106
  provider.addToRolePolicy({ Effect: 'Allow', ...statement });
86
107
  }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLGtEQWtCQztBQWFELDBDQVVDO0FBbkRELGdEQUFrQztBQUNsQyw2Q0FBc0g7QUFFdEgsMkRBQXdEO0FBRXhEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQjtJQUNsRCxNQUFNLFFBQVEsR0FBRyxvQ0FBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsbUNBQW1DLEVBQUU7UUFDdEcsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixDQUFDO1FBQ2xGLE9BQU8sRUFBRSwyQ0FBNkIsQ0FBQyxXQUFXO1FBQ2xELHdGQUF3RjtRQUN4RixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVCLFVBQVUsRUFBRSxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDL0IsV0FBVyxFQUFFLHNHQUFzRztLQUNwSCxDQUFDLENBQUM7SUFDSCw2R0FBNkc7SUFDN0csc0dBQXNHO0lBQ3RHLGVBQWUsQ0FBQyxRQUFRLEVBQUU7UUFDeEIsTUFBTSxFQUFFLENBQUMsMkJBQTJCLEVBQUUseUJBQXlCLENBQUM7UUFDaEUsUUFBUSxFQUFFLG1CQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxxQ0FBaUIsR0FBRyxFQUFFLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtTQUN2SSxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUF1QyxDQUFDO0FBRW5FOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFFBQWdDLEVBQUUsU0FBcUU7SUFDckksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTztJQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIEN1c3RvbVJlc291cmNlUHJvdmlkZXIsIEN1c3RvbVJlc291cmNlUHJvdmlkZXJSdW50aW1lLCBEdXJhdGlvbiwgU2l6ZSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQUxBUk1fTkFNRV9QUkVGSVggfSBmcm9tICcuL3Byb3ZpZGVyLXByb3RvY29sJztcblxuLyoqXG4gKiBUaGUgc2luZ2xlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlciAob25lIExhbWJkYSBwZXIgc3RhY2spIGJlaGluZCBjb2RlIGNvcGllcywgbG9nIGdyb3VwcyxcbiAqIGVuZHBvaW50IGxvb2t1cHMsIHJldmlzaW9uIGNsZWFudXAgYW5kIGFsYXJtcyBpbiBvdGhlciByZWdpb25zLiBJdCdzIGEgY29yZSBgQ3VzdG9tUmVzb3VyY2VQcm92aWRlcmAsXG4gKiBub3QgYSBgbGFtYmRhLkZ1bmN0aW9uYCwgc28gdG9vbHMgdGhhdCBkaXNjb3ZlciBmdW5jdGlvbnMgYnkgY2xhc3MgKGUuZy4gY2RrLXdhdGNoZnVsKSBkb24ndCBwaWNrIGl0IHVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViRnVuY3Rpb25Qcm92aWRlcihzY29wZTogQ29uc3RydWN0KTogQ3VzdG9tUmVzb3VyY2VQcm92aWRlciB7XG4gIGNvbnN0IHByb3ZpZGVyID0gQ3VzdG9tUmVzb3VyY2VQcm92aWRlci5nZXRPckNyZWF0ZVByb3ZpZGVyKHNjb3BlLCAnQ3VzdG9tOjpMYW1iZGFXZWJGdW5jdGlvblByb3ZpZGVyJywge1xuICAgIGNvZGVEaXJlY3Rvcnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdhc3NldHMnLCAnd2ViLWZ1bmN0aW9uLXByb3ZpZGVyJyksXG4gICAgcnVudGltZTogQ3VzdG9tUmVzb3VyY2VQcm92aWRlclJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gICAgLy8gTG9nIGdyb3VwIGRlbGV0aW9uIHdhaXRzIGZvciBsYXRlIGZsdXNoZXMgKDc1cyArIGEgcmUtY2hlY2spIG9uIHRvcCBvZiB0aGUgQVBJIGNhbGxzLlxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgbWVtb3J5U2l6ZTogU2l6ZS5tZWJpYnl0ZXMoMjU2KSxcbiAgICBkZXNjcmlwdGlvbjogJ0NvcGllcyBjb2RlLCBtYW5hZ2VzIGxvZyBncm91cHMsIGxvb2tzIHVwIGVuZHBvaW50cyBhbmQgY2xlYW5zIHVwIHJldmlzaW9ucyBmb3IgTGFtYmRhIFdlYiBGdW5jdGlvbnMnLFxuICB9KTtcbiAgLy8gR3JhbnRlZCB3aGV0aGVyIG9yIG5vdCBhIHN0YWNrIGhhcyBhbGFybXMgaW4gb3RoZXIgcmVnaW9ucyB5ZXQ6IGEgZ3JhbnQgYWRkZWQgb3IgcmVtb3ZlZCB0b2dldGhlciB3aXRoIHRoZVxuICAvLyBhbGFybSBmYWlscyBvbiBJQU0gcHJvcGFnYXRpb24sIG9yIGxlYXZlcyB0aGUgYWxhcm0gYmVoaW5kIHdoZW4gaXQncyByZW1vdmVkIChzZWUgZ3JhbnRUb1Byb3ZpZGVyKS5cbiAgZ3JhbnRUb1Byb3ZpZGVyKHByb3ZpZGVyLCB7XG4gICAgQWN0aW9uOiBbJ2Nsb3Vkd2F0Y2g6UHV0TWV0cmljQWxhcm0nLCAnY2xvdWR3YXRjaDpEZWxldGVBbGFybXMnXSxcbiAgICBSZXNvdXJjZTogU3RhY2sub2YocHJvdmlkZXIpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnY2xvdWR3YXRjaCcsIHJlZ2lvbjogJyonLCByZXNvdXJjZTogJ2FsYXJtJywgcmVzb3VyY2VOYW1lOiBgJHtBTEFSTV9OQU1FX1BSRUZJWH0qYCwgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICB9KSxcbiAgfSk7XG4gIHJldHVybiBwcm92aWRlcjtcbn1cblxuY29uc3QgZ3JhbnRlZCA9IG5ldyBXZWFrTWFwPEN1c3RvbVJlc291cmNlUHJvdmlkZXIsIFNldDxzdHJpbmc+PigpO1xuXG4vKipcbiAqIEFkZHMgYSBzdGF0ZW1lbnQgdG8gdGhlIHNoYXJlZCBwcm92aWRlcidzIHJvbGUsIG9uY2UuXG4gKlxuICogR3JhbnRzIG11c3QgYmUgKipzdGFibGUgYWNyb3NzIHVwZGF0ZXMqKjogc2NvcGVkIGJ5IHByZWZpeGVzIHRoYXQgZG9uJ3QgY2hhbmdlIHdoZW4gYVxuICogcmVzb3VyY2UgaXMgcmVuYW1lZCBvciByZXBsYWNlZC4gQ2xvdWRGb3JtYXRpb24gdXBkYXRlcyB0aGUgcm9sZSBqdXN0IGJlZm9yZSAoYW5kIG9uIHJvbGxiYWNrLFxuICogcmV2ZXJ0cyBpdCBqdXN0IGJlZm9yZSkgdGhlIGN1c3RvbSByZXNvdXJjZXMgcnVuLCBhbmQgSUFNIHRha2VzIHNlY29uZHMgdG8gbWludXRlcyB0b1xuICogcHJvcGFnYXRlLCBzbyBwZXItbmFtZSBncmFudHMgZmFpbCB3aXRoIEFjY2Vzc0RlbmllZCBvbiByZW5hbWVzIGFuZCBvbiByb2xsYmFjayBjbGVhbnVwLlxuICogVGhleSBtdXN0IGFsc28gbmV2ZXIgcmVmZXJlbmNlIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2VzIHRoYXQgdXNlIHRoZSBwcm92aWRlciAoY3ljbGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhbnRUb1Byb3ZpZGVyKHByb3ZpZGVyOiBDdXN0b21SZXNvdXJjZVByb3ZpZGVyLCBzdGF0ZW1lbnQ6IHsgQWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXTsgUmVzb3VyY2U6IHN0cmluZyB8IHN0cmluZ1tdIH0pOiB2b2lkIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoU3RhY2sub2YocHJvdmlkZXIpLnJlc29sdmUoc3RhdGVtZW50KSk7XG4gIGxldCBzZWVuID0gZ3JhbnRlZC5nZXQocHJvdmlkZXIpO1xuICBpZiAoIXNlZW4pIHtcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIGdyYW50ZWQuc2V0KHByb3ZpZGVyLCBzZWVuKTtcbiAgfVxuICBpZiAoc2Vlbi5oYXMoa2V5KSkgcmV0dXJuO1xuICBzZWVuLmFkZChrZXkpO1xuICBwcm92aWRlci5hZGRUb1JvbGVQb2xpY3koeyBFZmZlY3Q6ICdBbGxvdycsIC4uLnN0YXRlbWVudCB9KTtcbn1cbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLGtEQWtDQztBQWdCRCwwQ0FVQztBQXhFRCxnREFBa0M7QUFDbEMsNkNBQXVKO0FBQ3ZKLDJEQUE2QztBQUU3QywyREFBd0Q7QUFFeEQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQjtJQUNsRCxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixNQUFNLFFBQVEsR0FBRyxvQ0FBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO1FBQzlFLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQztRQUNsRixPQUFPLEVBQUUsMkNBQTZCLENBQUMsV0FBVztRQUNsRCx3RkFBd0Y7UUFDeEYsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1QixVQUFVLEVBQUUsa0JBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQy9CLFdBQVcsRUFBRSxzR0FBc0c7S0FDcEgsQ0FBQyxDQUFDO0lBQ0gsNkdBQTZHO0lBQzdHLHNHQUFzRztJQUN0RyxlQUFlLENBQUMsUUFBUSxFQUFFO1FBQ3hCLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixFQUFFLHlCQUF5QixDQUFDO1FBQ2hFLFFBQVEsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcscUNBQWlCLEdBQUcsRUFBRSxTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7U0FDdkksQ0FBQztLQUNILENBQUMsQ0FBQztJQUNILElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDM0QsMEdBQTBHO0lBQzFHLCtGQUErRjtJQUMvRixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtRQUN0RCxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTO1FBQ3ZDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFnQixDQUFDO0lBQ2xFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBMkIsQ0FBQyxDQUFDO0lBQ2pFLDZHQUE2RztJQUM3RyxxSEFBcUg7SUFDckgsaUhBQWlIO0lBQ2hILFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBNkIsRUFBRSwyQkFBMkIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xILGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNySCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxXQUFXLEdBQUcsbUNBQW1DLENBQUM7QUFDeEQsTUFBTSxZQUFZLEdBQUcsK0JBQStCLENBQUM7QUFFckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXVDLENBQUM7QUFFbkU7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixlQUFlLENBQUMsUUFBZ0MsRUFBRSxTQUFxRTtJQUNySSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPO0lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEFybkZvcm1hdCwgdHlwZSBDZm5SZXNvdXJjZSwgQ3VzdG9tUmVzb3VyY2VQcm92aWRlciwgQ3VzdG9tUmVzb3VyY2VQcm92aWRlclJ1bnRpbWUsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBTaXplLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEFMQVJNX05BTUVfUFJFRklYIH0gZnJvbSAnLi9wcm92aWRlci1wcm90b2NvbCc7XG5cbi8qKlxuICogVGhlIHNpbmdsZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgKG9uZSBMYW1iZGEgcGVyIHN0YWNrKSBiZWhpbmQgY29kZSBjb3BpZXMsIGxvZyBncm91cHMsXG4gKiBlbmRwb2ludCBsb29rdXBzLCByZXZpc2lvbiBjbGVhbnVwLCBhbGFybXMgaW4gb3RoZXIgcmVnaW9ucyBhbmQgZW1wdHlpbmcgdGhlIGNvZGUgYnVja2V0LiBJdCdzIGEgY29yZVxuICogYEN1c3RvbVJlc291cmNlUHJvdmlkZXJgLCBub3QgYSBgbGFtYmRhLkZ1bmN0aW9uYCwgc28gdG9vbHMgdGhhdCBkaXNjb3ZlciBmdW5jdGlvbnMgYnkgY2xhc3MgKGUuZy4gY2RrLXdhdGNoZnVsKVxuICogZG9uJ3QgcGljayBpdCB1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYkZ1bmN0aW9uUHJvdmlkZXIoc2NvcGU6IENvbnN0cnVjdCk6IEN1c3RvbVJlc291cmNlUHJvdmlkZXIge1xuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3QgcHJvdmlkZXIgPSBDdXN0b21SZXNvdXJjZVByb3ZpZGVyLmdldE9yQ3JlYXRlUHJvdmlkZXIoc2NvcGUsIFBST1ZJREVSX0lELCB7XG4gICAgY29kZURpcmVjdG9yeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2Fzc2V0cycsICd3ZWItZnVuY3Rpb24tcHJvdmlkZXInKSxcbiAgICBydW50aW1lOiBDdXN0b21SZXNvdXJjZVByb3ZpZGVyUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAvLyBMb2cgZ3JvdXAgZGVsZXRpb24gd2FpdHMgZm9yIGxhdGUgZmx1c2hlcyAoNzVzICsgYSByZS1jaGVjaykgb24gdG9wIG9mIHRoZSBBUEkgY2FsbHMuXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICBtZW1vcnlTaXplOiBTaXplLm1lYmlieXRlcygyNTYpLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29waWVzIGNvZGUsIG1hbmFnZXMgbG9nIGdyb3VwcywgbG9va3MgdXAgZW5kcG9pbnRzIGFuZCBjbGVhbnMgdXAgcmV2aXNpb25zIGZvciBMYW1iZGEgV2ViIEZ1bmN0aW9ucycsXG4gIH0pO1xuICAvLyBHcmFudGVkIHdoZXRoZXIgb3Igbm90IGEgc3RhY2sgaGFzIGFsYXJtcyBpbiBvdGhlciByZWdpb25zIHlldDogYSBncmFudCBhZGRlZCBvciByZW1vdmVkIHRvZ2V0aGVyIHdpdGggdGhlXG4gIC8vIGFsYXJtIGZhaWxzIG9uIElBTSBwcm9wYWdhdGlvbiwgb3IgbGVhdmVzIHRoZSBhbGFybSBiZWhpbmQgd2hlbiBpdCdzIHJlbW92ZWQgKHNlZSBncmFudFRvUHJvdmlkZXIpLlxuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHtcbiAgICBBY3Rpb246IFsnY2xvdWR3YXRjaDpQdXRNZXRyaWNBbGFybScsICdjbG91ZHdhdGNoOkRlbGV0ZUFsYXJtcyddLFxuICAgIFJlc291cmNlOiBTdGFjay5vZihwcm92aWRlcikuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdjbG91ZHdhdGNoJywgcmVnaW9uOiAnKicsIHJlc291cmNlOiAnYWxhcm0nLCByZXNvdXJjZU5hbWU6IGAke0FMQVJNX05BTUVfUFJFRklYfSpgLCBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgIH0pLFxuICB9KTtcbiAgaWYgKHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKExPR19HUk9VUF9JRCkpIHJldHVybiBwcm92aWRlcjtcbiAgLy8gTG9ncyBnbyB0byBhIGdyb3VwIHRoZSBzdGFjayBvd25zLCB3aXRoIHJldGVudGlvbiwgZGVsZXRlZCB3aXRoIHRoZSBzdGFjazogdGhlIHByb3ZpZGVyJ3MgZGVmYXVsdCBncm91cFxuICAvLyAoL2F3cy9sYW1iZGEvPGZ1bmN0aW9uPikgd291bGQgYmUgY3JlYXRlZCBieSBMYW1iZGEgd2l0aG91dCByZXRlbnRpb24gYW5kIG91dGxpdmUgdGhlIHN0YWNrLlxuICBjb25zdCBsb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHN0YWNrLCBMT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICB9KTtcbiAgY29uc3QgaGFuZGxlciA9IHByb3ZpZGVyLm5vZGUuZmluZENoaWxkKCdIYW5kbGVyJykgYXMgQ2ZuUmVzb3VyY2U7XG4gIGhhbmRsZXIuYWRkUHJvcGVydHlPdmVycmlkZSgnTG9nZ2luZ0NvbmZpZycsIHsgTG9nR3JvdXA6IGxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSwgTG9nRm9ybWF0OiAnVGV4dCcgfSk7XG4gIGhhbmRsZXIuYWRkRGVwZW5kZW5jeShsb2dHcm91cC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5SZXNvdXJjZSk7XG4gIC8vIE9ubHkgd3JpdGUgdG8gdGhhdCBncm91cC4gVGhlIGRlZmF1bHQgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIGFsbG93cyBsb2dzOkNyZWF0ZUxvZ0dyb3VwLCBzbyBsb2cgbGluZXNcbiAgLy8gTGFtYmRhIGRlbGl2ZXJzIGxhdGUsIGFmdGVyIENsb3VkRm9ybWF0aW9uIGRlbGV0ZWQgdGhlIGdyb3VwIHdpdGggdGhlIHN0YWNrLCB3b3VsZCByZS1jcmVhdGUgaXQgd2l0aG91dCByZXRlbnRpb24uXG4gIC8vIE5vIFJvbGUgY2hpbGQgd2hlbiB0aGUgYXBwIHVzZXMgcHJlLWNyZWF0ZWQgcm9sZXMgKGlhbS5Sb2xlLmN1c3RvbWl6ZVJvbGVzKTogdGhhdCByb2xlIGlzIG1hbmFnZWQgb3V0c2lkZSBDREsuXG4gIChwcm92aWRlci5ub2RlLnRyeUZpbmRDaGlsZCgnUm9sZScpIGFzIENmblJlc291cmNlIHwgdW5kZWZpbmVkKT8uYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKCdNYW5hZ2VkUG9saWN5QXJucycpO1xuICBncmFudFRvUHJvdmlkZXIocHJvdmlkZXIsIHsgQWN0aW9uOiBbJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJywgJ2xvZ3M6UHV0TG9nRXZlbnRzJ10sIFJlc291cmNlOiBsb2dHcm91cC5sb2dHcm91cEFybiB9KTtcbiAgcmV0dXJuIHByb3ZpZGVyO1xufVxuXG5jb25zdCBQUk9WSURFUl9JRCA9ICdDdXN0b206OkxhbWJkYVdlYkZ1bmN0aW9uUHJvdmlkZXInO1xuY29uc3QgTE9HX0dST1VQX0lEID0gJ0xhbWJkYVdlYkZ1bmN0aW9uUHJvdmlkZXJMb2dzJztcblxuY29uc3QgZ3JhbnRlZCA9IG5ldyBXZWFrTWFwPEN1c3RvbVJlc291cmNlUHJvdmlkZXIsIFNldDxzdHJpbmc+PigpO1xuXG4vKipcbiAqIEFkZHMgYSBzdGF0ZW1lbnQgdG8gdGhlIHNoYXJlZCBwcm92aWRlcidzIHJvbGUsIG9uY2UuXG4gKlxuICogR3JhbnRzIG11c3QgYmUgKipzdGFibGUgYWNyb3NzIHVwZGF0ZXMqKjogc2NvcGVkIGJ5IHByZWZpeGVzIHRoYXQgZG9uJ3QgY2hhbmdlIHdoZW4gYVxuICogcmVzb3VyY2UgaXMgcmVuYW1lZCBvciByZXBsYWNlZC4gQ2xvdWRGb3JtYXRpb24gdXBkYXRlcyB0aGUgcm9sZSBqdXN0IGJlZm9yZSAoYW5kIG9uIHJvbGxiYWNrLFxuICogcmV2ZXJ0cyBpdCBqdXN0IGJlZm9yZSkgdGhlIGN1c3RvbSByZXNvdXJjZXMgcnVuLCBhbmQgSUFNIHRha2VzIHNlY29uZHMgdG8gbWludXRlcyB0b1xuICogcHJvcGFnYXRlLCBzbyBwZXItbmFtZSBncmFudHMgZmFpbCB3aXRoIEFjY2Vzc0RlbmllZCBvbiByZW5hbWVzIGFuZCBvbiByb2xsYmFjayBjbGVhbnVwLlxuICogVGhleSBtdXN0IGFsc28gbmV2ZXIgcmVmZXJlbmNlIGF0dHJpYnV0ZXMgb2YgcmVzb3VyY2VzIHRoYXQgdXNlIHRoZSBwcm92aWRlciAoY3ljbGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhbnRUb1Byb3ZpZGVyKHByb3ZpZGVyOiBDdXN0b21SZXNvdXJjZVByb3ZpZGVyLCBzdGF0ZW1lbnQ6IHsgQWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXTsgUmVzb3VyY2U6IHN0cmluZyB8IHN0cmluZ1tdIH0pOiB2b2lkIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoU3RhY2sub2YocHJvdmlkZXIpLnJlc29sdmUoc3RhdGVtZW50KSk7XG4gIGxldCBzZWVuID0gZ3JhbnRlZC5nZXQocHJvdmlkZXIpO1xuICBpZiAoIXNlZW4pIHtcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIGdyYW50ZWQuc2V0KHByb3ZpZGVyLCBzZWVuKTtcbiAgfVxuICBpZiAoc2Vlbi5oYXMoa2V5KSkgcmV0dXJuO1xuICBzZWVuLmFkZChrZXkpO1xuICBwcm92aWRlci5hZGRUb1JvbGVQb2xpY3koeyBFZmZlY3Q6ICdBbGxvdycsIC4uLnN0YXRlbWVudCB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Checks on a Web Function's resource policy, run at synthesis on the resolved document.
3
+ *
4
+ * Lambda rejects a public policy at deploy time ("Lambda blocked the creation of this policy because it would grant
5
+ * public access"): a `*` principal is only accepted when a trusted condition key pins the caller. A service principal
6
+ * without a source condition is accepted, but lets any account's use of that service call the endpoint.
7
+ */
8
+ export interface ResourcePolicyFindings {
9
+ /** Statements Lambda would reject as public. */
10
+ readonly errors: string[];
11
+ /** Service principals allowed without a source condition. */
12
+ readonly unscopedServices: string[];
13
+ }
14
+ /** Inspects a resolved policy document (`{ Statement: [...] }`). */
15
+ export declare function inspectResourcePolicy(document: any): ResourcePolicyFindings;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Checks on a Web Function's resource policy, run at synthesis on the resolved document.
4
+ *
5
+ * Lambda rejects a public policy at deploy time ("Lambda blocked the creation of this policy because it would grant
6
+ * public access"): a `*` principal is only accepted when a trusted condition key pins the caller. A service principal
7
+ * without a source condition is accepted, but lets any account's use of that service call the endpoint.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.inspectResourcePolicy = inspectResourcePolicy;
11
+ /** Condition keys Lambda accepts to make a `*` principal non-public (Lambda Web Function permissions docs, 2026-10). */
12
+ const TRUSTED_KEYS = [
13
+ 'aws:PrincipalAccount', 'aws:PrincipalArn', 'aws:PrincipalOrgID', 'aws:PrincipalOrgPaths', 'aws:SourceAccount', 'aws:SourceArn',
14
+ 'aws:SourceOrgID', 'aws:SourceOrgPaths', 'aws:SourceVpc', 'aws:SourceVpcArn', 'aws:SourceVpce', 'aws:VpceAccount', 'aws:VpceOrgID',
15
+ 'aws:VpceOrgPaths', 'aws:Ec2InstanceSourceVpc', 'aws:UserId', 'aws:PrincipalServiceName', 'aws:PrincipalServiceNamesList',
16
+ 'aws:PrincipalIsAWSService', 'lambda:SourceFunctionArn',
17
+ ].map((k) => k.toLowerCase());
18
+ /** Condition keys that tie a service principal to the resource or account calling on its behalf. */
19
+ const SOURCE_KEYS = ['aws:SourceArn', 'aws:SourceAccount', 'aws:SourceOrgID', 'aws:SourceOrgPaths'].map((k) => k.toLowerCase());
20
+ /** Inspects a resolved policy document (`{ Statement: [...] }`). */
21
+ function inspectResourcePolicy(document) {
22
+ const errors = [];
23
+ const unscopedServices = [];
24
+ for (const [i, s] of (document?.Statement ?? []).entries()) {
25
+ if (s.Effect !== 'Allow')
26
+ continue;
27
+ const keys = conditionKeys(s.Condition);
28
+ const name = s.Sid ? `statement '${s.Sid}'` : `statement ${i + 1}`;
29
+ if (isWildcard(s.Principal) && !keys.some((k) => TRUSTED_KEYS.includes(k))) {
30
+ errors.push(`${name} allows principal '*': Lambda rejects public resource policies. Pin the caller with a condition such as aws:PrincipalOrgID or aws:SourceAccount (e.g. iam.OrganizationPrincipal), or name the accounts`);
31
+ }
32
+ const services = list(s.Principal?.Service).map(String);
33
+ if (services.length > 0 && !keys.some((k) => SOURCE_KEYS.includes(k))) {
34
+ unscopedServices.push(...services);
35
+ }
36
+ }
37
+ return { errors, unscopedServices };
38
+ }
39
+ function isWildcard(principal) {
40
+ return principal === '*' || list(principal?.AWS).includes('*');
41
+ }
42
+ function conditionKeys(condition) {
43
+ return Object.values(condition ?? {}).flatMap((byKey) => Object.keys(byKey ?? {})).map((k) => k.toLowerCase());
44
+ }
45
+ function list(value) {
46
+ return value === undefined ? [] : Array.isArray(value) ? value : [value];
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvcmVzb3VyY2UtcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7O0FBcUJILHNEQWdCQztBQW5DRCx3SEFBd0g7QUFDeEgsTUFBTSxZQUFZLEdBQUc7SUFDbkIsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZTtJQUMvSCxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZTtJQUNsSSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsK0JBQStCO0lBQ3pILDJCQUEyQixFQUFFLDBCQUEwQjtDQUN4RCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFFOUIsb0dBQW9HO0FBQ3BHLE1BQU0sV0FBVyxHQUFHLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQVNoSSxvRUFBb0U7QUFDcEUsU0FBZ0IscUJBQXFCLENBQUMsUUFBYTtJQUNqRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsTUFBTSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFDdEMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPO1lBQUUsU0FBUztRQUNuQyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSx3TUFBd00sQ0FBQyxDQUFDO1FBQy9OLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxTQUFjO0lBQ2hDLE9BQU8sU0FBUyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsU0FBYztJQUNuQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3RILENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUFjO0lBQzFCLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIG9uIGEgV2ViIEZ1bmN0aW9uJ3MgcmVzb3VyY2UgcG9saWN5LCBydW4gYXQgc3ludGhlc2lzIG9uIHRoZSByZXNvbHZlZCBkb2N1bWVudC5cbiAqXG4gKiBMYW1iZGEgcmVqZWN0cyBhIHB1YmxpYyBwb2xpY3kgYXQgZGVwbG95IHRpbWUgKFwiTGFtYmRhIGJsb2NrZWQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgcG9saWN5IGJlY2F1c2UgaXQgd291bGQgZ3JhbnRcbiAqIHB1YmxpYyBhY2Nlc3NcIik6IGEgYCpgIHByaW5jaXBhbCBpcyBvbmx5IGFjY2VwdGVkIHdoZW4gYSB0cnVzdGVkIGNvbmRpdGlvbiBrZXkgcGlucyB0aGUgY2FsbGVyLiBBIHNlcnZpY2UgcHJpbmNpcGFsXG4gKiB3aXRob3V0IGEgc291cmNlIGNvbmRpdGlvbiBpcyBhY2NlcHRlZCwgYnV0IGxldHMgYW55IGFjY291bnQncyB1c2Ugb2YgdGhhdCBzZXJ2aWNlIGNhbGwgdGhlIGVuZHBvaW50LlxuICovXG5cbi8qKiBDb25kaXRpb24ga2V5cyBMYW1iZGEgYWNjZXB0cyB0byBtYWtlIGEgYCpgIHByaW5jaXBhbCBub24tcHVibGljIChMYW1iZGEgV2ViIEZ1bmN0aW9uIHBlcm1pc3Npb25zIGRvY3MsIDIwMjYtMTApLiAqL1xuY29uc3QgVFJVU1RFRF9LRVlTID0gW1xuICAnYXdzOlByaW5jaXBhbEFjY291bnQnLCAnYXdzOlByaW5jaXBhbEFybicsICdhd3M6UHJpbmNpcGFsT3JnSUQnLCAnYXdzOlByaW5jaXBhbE9yZ1BhdGhzJywgJ2F3czpTb3VyY2VBY2NvdW50JywgJ2F3czpTb3VyY2VBcm4nLFxuICAnYXdzOlNvdXJjZU9yZ0lEJywgJ2F3czpTb3VyY2VPcmdQYXRocycsICdhd3M6U291cmNlVnBjJywgJ2F3czpTb3VyY2VWcGNBcm4nLCAnYXdzOlNvdXJjZVZwY2UnLCAnYXdzOlZwY2VBY2NvdW50JywgJ2F3czpWcGNlT3JnSUQnLFxuICAnYXdzOlZwY2VPcmdQYXRocycsICdhd3M6RWMySW5zdGFuY2VTb3VyY2VWcGMnLCAnYXdzOlVzZXJJZCcsICdhd3M6UHJpbmNpcGFsU2VydmljZU5hbWUnLCAnYXdzOlByaW5jaXBhbFNlcnZpY2VOYW1lc0xpc3QnLFxuICAnYXdzOlByaW5jaXBhbElzQVdTU2VydmljZScsICdsYW1iZGE6U291cmNlRnVuY3Rpb25Bcm4nLFxuXS5tYXAoKGspID0+IGsudG9Mb3dlckNhc2UoKSk7XG5cbi8qKiBDb25kaXRpb24ga2V5cyB0aGF0IHRpZSBhIHNlcnZpY2UgcHJpbmNpcGFsIHRvIHRoZSByZXNvdXJjZSBvciBhY2NvdW50IGNhbGxpbmcgb24gaXRzIGJlaGFsZi4gKi9cbmNvbnN0IFNPVVJDRV9LRVlTID0gWydhd3M6U291cmNlQXJuJywgJ2F3czpTb3VyY2VBY2NvdW50JywgJ2F3czpTb3VyY2VPcmdJRCcsICdhd3M6U291cmNlT3JnUGF0aHMnXS5tYXAoKGspID0+IGsudG9Mb3dlckNhc2UoKSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQb2xpY3lGaW5kaW5ncyB7XG4gIC8qKiBTdGF0ZW1lbnRzIExhbWJkYSB3b3VsZCByZWplY3QgYXMgcHVibGljLiAqL1xuICByZWFkb25seSBlcnJvcnM6IHN0cmluZ1tdO1xuICAvKiogU2VydmljZSBwcmluY2lwYWxzIGFsbG93ZWQgd2l0aG91dCBhIHNvdXJjZSBjb25kaXRpb24uICovXG4gIHJlYWRvbmx5IHVuc2NvcGVkU2VydmljZXM6IHN0cmluZ1tdO1xufVxuXG4vKiogSW5zcGVjdHMgYSByZXNvbHZlZCBwb2xpY3kgZG9jdW1lbnQgKGB7IFN0YXRlbWVudDogWy4uLl0gfWApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RSZXNvdXJjZVBvbGljeShkb2N1bWVudDogYW55KTogUmVzb3VyY2VQb2xpY3lGaW5kaW5ncyB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgdW5zY29wZWRTZXJ2aWNlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBbaSwgc10gb2YgKGRvY3VtZW50Py5TdGF0ZW1lbnQgPz8gW10pLmVudHJpZXMoKSkge1xuICAgIGlmIChzLkVmZmVjdCAhPT0gJ0FsbG93JykgY29udGludWU7XG4gICAgY29uc3Qga2V5cyA9IGNvbmRpdGlvbktleXMocy5Db25kaXRpb24pO1xuICAgIGNvbnN0IG5hbWUgPSBzLlNpZCA/IGBzdGF0ZW1lbnQgJyR7cy5TaWR9J2AgOiBgc3RhdGVtZW50ICR7aSArIDF9YDtcbiAgICBpZiAoaXNXaWxkY2FyZChzLlByaW5jaXBhbCkgJiYgIWtleXMuc29tZSgoaykgPT4gVFJVU1RFRF9LRVlTLmluY2x1ZGVzKGspKSkge1xuICAgICAgZXJyb3JzLnB1c2goYCR7bmFtZX0gYWxsb3dzIHByaW5jaXBhbCAnKic6IExhbWJkYSByZWplY3RzIHB1YmxpYyByZXNvdXJjZSBwb2xpY2llcy4gUGluIHRoZSBjYWxsZXIgd2l0aCBhIGNvbmRpdGlvbiBzdWNoIGFzIGF3czpQcmluY2lwYWxPcmdJRCBvciBhd3M6U291cmNlQWNjb3VudCAoZS5nLiBpYW0uT3JnYW5pemF0aW9uUHJpbmNpcGFsKSwgb3IgbmFtZSB0aGUgYWNjb3VudHNgKTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZXMgPSBsaXN0KHMuUHJpbmNpcGFsPy5TZXJ2aWNlKS5tYXAoU3RyaW5nKTtcbiAgICBpZiAoc2VydmljZXMubGVuZ3RoID4gMCAmJiAha2V5cy5zb21lKChrKSA9PiBTT1VSQ0VfS0VZUy5pbmNsdWRlcyhrKSkpIHtcbiAgICAgIHVuc2NvcGVkU2VydmljZXMucHVzaCguLi5zZXJ2aWNlcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGVycm9ycywgdW5zY29wZWRTZXJ2aWNlcyB9O1xufVxuXG5mdW5jdGlvbiBpc1dpbGRjYXJkKHByaW5jaXBhbDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBwcmluY2lwYWwgPT09ICcqJyB8fCBsaXN0KHByaW5jaXBhbD8uQVdTKS5pbmNsdWRlcygnKicpO1xufVxuXG5mdW5jdGlvbiBjb25kaXRpb25LZXlzKGNvbmRpdGlvbjogYW55KTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb25kaXRpb24gPz8ge30pLmZsYXRNYXAoKGJ5S2V5OiBhbnkpID0+IE9iamVjdC5rZXlzKGJ5S2V5ID8/IHt9KSkubWFwKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBsaXN0KHZhbHVlOiB1bmtub3duKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBbXSA6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuIl19
@@ -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.3" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.5" };
15
15
  /**
16
16
  * All traffic moves to the new revision at once, as soon as it's ready (the default).
17
17
  */