import { Construct } from "constructs";
import * as s3 from "aws-cdk-lib/aws-s3";
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
import * as logs from "aws-cdk-lib/aws-logs";
import * as s3_assets from "aws-cdk-lib/aws-s3-assets";
export type ManagedObjectsBucketProps = Partial<Omit<Omit<s3.BucketProps, "removalPolicy">, "autoDeleteObjects">> & {
    /** CloudWatch Log Group for the bucket object manager to send its logs to. */
    objectManagerLogGroup?: logs.ILogGroup;
};
type CloudFrontInvalidationObjectChangeActionProps = {
    /** CloudFront Distribution to create an invalidation for. */
    distribution: cloudfront.Distribution;
    /**
     * Whether to wait for the invalidation to be completed before allowing the CloudFormation
     * update to continue.
     * @default false
     */
    waitForCompletion?: boolean;
};
/**
 * An action to be performed when changes are made to the objects in the bucket.
 */
export declare abstract class ObjectChangeAction {
    #private;
    /** ObjectChangeAction for performing a CloudFront invalidation after objects
     * in the bucket have changed. */
    static cloudFrontInvalidation(props: CloudFrontInvalidationObjectChangeActionProps): CloudFrontInvalidationObjectChangeAction;
}
/** ObjectChangeAction for performing an invalidation on a CloudFront distribution after objects
 * in the bucket have changed. */
declare class CloudFrontInvalidationObjectChangeAction extends ObjectChangeAction {
    distribution: cloudfront.Distribution;
    waitForCompletion?: boolean;
    constructor(props: CloudFrontInvalidationObjectChangeActionProps);
}
/**
 * An S3 Bucket where the objects in the bucket are completely managed by CDK. A
 * `Custom::ManagedBucketObjects` CFN resource internal to the ManagedObjectsBucket construct
 * mutates objects in the bucket to align the bucket with the objects defined in the CDK
 * definition. The objects in the bucket are otherwise read-only. Objects are added by calling
 * the `addObject` and `addObjectsFromAsset` methods.
 *
 * ManagedObjectsBucket extends [Bucket](
 * https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3.Bucket.html). All props from
 * Bucket are allowed except:
 *
 * 1. `removalPolicy` and `autoDeleteObjects` are not configurable. ManagedObjectsBuckets are
 * always emptied and destroyed on removal.
 *
 * In the event of ManagedObjectsBucket's `Custom::ManagedBucketObjects` custom resource having
 * a persistent problem, you can unblock your stack by adding the following environment variable
 * to the ObjectManagerFunction lambda function also inside the stack:
 *
 * Key: `SKIP`, Value: `true`
 */
export declare class ManagedObjectsBucket extends s3.Bucket {
    #private;
    constructor(scope: Construct, id: string, props: ManagedObjectsBucketProps);
    /**
     * Add an object to the bucket based on a given key and body. Deploy-time values from the CDK
     * like resource ARNs can be used here.
     */
    addObject(props: {
        /** S3 object key for the object. */
        key: string;
        /** Content to be stored within the S3 object. */
        body: string;
    }): void;
    /** Add objects to the bucket based on an [Asset](
     * https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3_assets-readme.html).
     * For example:
     *
     * `bucket.addObjectsFromAsset({ asset: new Asset(this, "MyAsset", { path: "./my-local-files" }) })`
     */
    addObjectsFromAsset(props: {
        /** The [Asset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3_assets-readme.html
         * ) to be added to the bucket. */
        asset: s3_assets.Asset;
    }): void;
    /** Add an action to be performed when objects in the bucket are changed. */
    addObjectChangeAction(action: ObjectChangeAction): void;
}
export {};
