import type { NonEmptyString } from "../../../common/CustomTypes/NonEmptyString";
import type { Arn } from "../../CustomTypes/Arn";
import type { S3BucketName } from "../../CustomTypes/S3BucketName";
import type { AwsResourceCommon, CloudFormationTags } from "../common";
import type { CloudFormationValue } from "../IntrinsicFunctions";
export declare type BucketType = 'AWS::S3::Bucket';
export interface Bucket extends AwsResourceCommon {
    Type: BucketType;
    Properties?: S3BucketProperties;
}
export interface S3BucketProperties {
    AccelerateConfiguration?: object;
    AccessControl?: BucketAccessControl;
    AnalyticsConfigurations?: object;
    BucketEncryption?: object;
    BucketName?: S3BucketName;
    CorsConfiguration?: object;
    InventoryConfigurations?: object[];
    LifecycleConfiguration?: object;
    LoggingConfiguration?: object;
    MetricsConfigurations?: object[];
    NotificationConfiguration?: NotificationConfiguration;
    ObjectLockConfiguration?: object;
    ObjectLockEnabled?: boolean;
    PublicAccessBlockConfiguration?: PublicAccessBlockConfiguration;
    ReplicationConfiguration?: object;
    Tags?: CloudFormationTags;
    VersioningConfiguration?: object;
    WebsiteConfiguration?: object;
    OwnershipControls?: OwnershipControls;
}
export declare type BucketAccessControl = 'AuthenticatedRead' | 'AwsExecRead' | 'BucketOwnerFullControl' | 'BucketOwnerRead' | 'LogDeliveryWrite' | 'Private' | 'PublicRead' | 'PublicReadWrite';
export interface NotificationConfiguration {
    EventBridgeConfiguration?: EventBridgeConfiguration;
    LambdaConfigurations?: LambdaConfiguration[];
    QueueConfigurations?: QueueConfiguration[];
    TopicConfigurations?: TopicConfiguration[];
}
export interface EventBridgeConfiguration {
    EventBridgeEnabled?: boolean;
}
interface NotificationConfigurationBase {
    Event: NonEmptyString;
    Filter?: NotificationFilter;
}
export interface LambdaConfiguration extends NotificationConfigurationBase {
    Function: CloudFormationValue<Arn>;
}
export interface QueueConfiguration extends NotificationConfigurationBase {
    Queue: CloudFormationValue<Arn>;
}
export interface TopicConfiguration extends NotificationConfigurationBase {
    Topic: CloudFormationValue<Arn>;
}
export interface NotificationFilter {
    S3Key: S3KeyFilter;
}
export interface S3KeyFilter {
    Rules: FilterRule[];
}
export interface FilterRule {
    Name: 'prefix' | 'suffix';
    Value: string;
}
export declare type ObjectOwnership = 'BucketOwnerEnforced' | 'BucketOwnerPreferred' | 'ObjectWriter';
export interface OwnershipControls {
    Rules: {
        ObjectOwnership: ObjectOwnership;
    }[];
}
export interface PublicAccessBlockConfiguration {
    BlockPublicAcls?: boolean;
    BlockPublicPolicy?: boolean;
    IgnorePublicAcls?: boolean;
    RestrictPublicBuckets?: boolean;
}
export {};
