import { IBucketNotificationDestination } from '@aws-cdk/aws-s3-notifications';
import cdk = require('@aws-cdk/cdk');
import { Bucket, EventType, NotificationKeyFilter } from '../bucket';
interface NotificationsProps {
    /**
     * The bucket to manage notifications for.
     *
     * This cannot be a `BucketRef` because the bucket maintains the 1:1
     * relationship with this resource.
     */
    bucket: Bucket;
}
/**
 * A custom CloudFormation resource that updates bucket notifications for a
 * bucket. The reason we need it is because the AWS::S3::Bucket notification
 * configuration is defined on the bucket itself, which makes it impossible to
 * provision notifications at the same time as the target (since
 * PutBucketNotifications validates the targets).
 *
 * Since only a single BucketNotifications resource is allowed for each Bucket,
 * this construct is not exported in the public API of this module. Instead, it
 * is created just-in-time by `s3.Bucket.onEvent`, so a 1:1 relationship is
 * ensured.
 *
 * @see
 * https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html
 */
export declare class BucketNotifications extends cdk.Construct {
    private readonly lambdaNotifications;
    private readonly queueNotifications;
    private readonly topicNotifications;
    private customResourceCreated;
    private readonly bucket;
    constructor(parent: cdk.Construct, id: string, props: NotificationsProps);
    /**
     * Adds a notification subscription for this bucket.
     * If this is the first notification, a BucketNotification resource is added to the stack.
     *
     * @param event The type of event
     * @param target The target construct
     * @param filters A set of S3 key filters
     */
    addNotification(event: EventType, target: IBucketNotificationDestination, ...filters: NotificationKeyFilter[]): void;
    private renderNotificationConfiguration;
    /**
     * Defines the bucket notifications resources in the stack only once.
     * This is called lazily as we add notifications, so that if notifications are not added,
     * there is no notifications resource.
     */
    private createResourceOnce;
}
export {};
