import type { Construct } from 'constructs';
import * as cloudfront from '../../aws-cloudfront';
import { AccessLevel } from '../../aws-cloudfront';
import * as iam from '../../aws-iam';
import type { IBucket } from '../../aws-s3';
import type { IOriginAccessControlRef } from '../../interfaces/generated/aws-cloudfront-interfaces.generated';
/**
 * Properties for configuring a origin using a standard S3 bucket
 */
export interface S3BucketOriginBaseProps extends cloudfront.OriginProps {
}
/**
 * Properties for configuring a S3 origin with OAC
 */
export interface S3BucketOriginWithOACProps extends S3BucketOriginBaseProps {
    /**
     * An optional Origin Access Control
     *
     * @default - an Origin Access Control will be created.
     */
    readonly originAccessControl?: IOriginAccessControlRef;
    /**
     * The level of permissions granted in the bucket policy and key policy (if applicable)
     * to the CloudFront distribution.
     *
     * @default [AccessLevel.READ]
     */
    readonly originAccessLevels?: AccessLevel[];
}
/**
 * Properties for configuring a S3 origin with OAI
 */
export interface S3BucketOriginWithOAIProps extends S3BucketOriginBaseProps {
    /**
     * An optional Origin Access Identity
     *
     * @default - an Origin Access Identity will be created.
     */
    readonly originAccessIdentity?: cloudfront.ICloudFrontOriginAccessIdentityRef & iam.IGrantable;
}
/**
 * A S3 Bucket Origin
 */
export declare abstract class S3BucketOrigin extends cloudfront.OriginBase {
    /**
     * Create a S3 Origin with Origin Access Control (OAC) configured
     */
    static withOriginAccessControl(bucket: IBucket, props?: S3BucketOriginWithOACProps): cloudfront.IOrigin;
    /**
     * Create a S3 Origin with Origin Access Identity (OAI) configured
     * OAI is a legacy feature and we **strongly** recommend you to use OAC via `withOriginAccessControl()`
     * unless it is not supported in your required region (e.g. China regions).
     */
    static withOriginAccessIdentity(bucket: IBucket, props?: S3BucketOriginWithOAIProps): cloudfront.IOrigin;
    /**
     * Create a S3 Origin with default S3 bucket settings (no origin access control)
     */
    static withBucketDefaults(bucket: IBucket, props?: cloudfront.OriginProps): cloudfront.IOrigin;
    constructor(bucket: IBucket, props?: S3BucketOriginBaseProps);
    /** @internal */
    protected _bind(scope: Construct, options: cloudfront.OriginBindOptions): cloudfront.OriginBindConfig;
    protected renderS3OriginConfig(): cloudfront.CfnDistribution.S3OriginConfigProperty | undefined;
}
