import { Construct } from "constructs";
import { Duration, RemovalPolicy, ResourceEnvironment, Stack } from "aws-cdk-lib";
import { IQueue } from "aws-cdk-lib/aws-sqs";
import * as kms from 'aws-cdk-lib/aws-kms';
import { QueueAlarmsOptions } from "./queue-alarms";
import { ObservedQueue } from "./observed-queue";
import { MetricOptions, Metric } from "aws-cdk-lib/aws-cloudwatch";
import { PolicyStatement, AddToResourcePolicyResult, IGrantable, Grant } from "aws-cdk-lib/aws-iam";
/**
 * Properties for a StandardQueue
 */
export interface StandardQueueProps extends QueueAlarmsOptions {
    /**
     * The number of seconds Amazon SQS retains a message. Value must be between
     * 60 and 1209600 seconds (14 days).
     *
     * @default Duration.seconds(1209600)
     *
     */
    readonly retentionPeriod?: Duration;
    /**
     * The number of seconds a consumer has to handle the message and delete it
     * from the queue before it becomes visible again for another consumer. Value
     * must be between 0 and 43200 seconds (12 hours).
     *
     * @default Duration.seconds(30)
     */
    readonly visibilityTimeout?: Duration;
    /**
     * The KMS key to use for encryption. If not set, the AWS master key for SQS
     * will be used.
     */
    readonly encryptionMasterKey?: kms.IKey;
    /**
     * The length of time that Amazon SQS reuses a data key before calling KMS again.
     * This value affects pricing as you are charged for KMS usage. Value must be
     * between 60 and 86,400 seconds (24 hours).
     *
     * @default Duration.minutes(15)
     */
    readonly dataKeyReuse?: Duration;
    /**
     * The maximum number of times a message can be unsuccessful before being moved
     * to the dead-letter queue. Set this value to -1 to disable the dead-letter queue.
     *
     * @default 3
     */
    readonly maxReceiveCount?: number;
}
export declare class StandardQueue extends Construct implements IQueue {
    static readonly DEFAULT_MAX_RECEIVE_COUNT = 3;
    static readonly DEFAULT_RETENTION_PERIOD: Duration;
    readonly queue: ObservedQueue;
    readonly queueArn: string;
    readonly queueUrl: string;
    readonly queueName: string;
    readonly encryptionMasterKey?: kms.IKey | undefined;
    readonly fifo: boolean;
    readonly stack: Stack;
    readonly env: ResourceEnvironment;
    constructor(scope: Construct, id: string, props: StandardQueueProps);
    addToResourcePolicy(statement: PolicyStatement): AddToResourcePolicyResult;
    grantConsumeMessages(grantee: IGrantable): Grant;
    grantSendMessages(grantee: IGrantable): Grant;
    grantPurge(grantee: IGrantable): Grant;
    grant(grantee: IGrantable, ...queueActions: string[]): Grant;
    metric(metricName: string, props?: MetricOptions): Metric;
    metricApproximateAgeOfOldestMessage(props?: MetricOptions): Metric;
    metricApproximateNumberOfMessagesDelayed(props?: MetricOptions): Metric;
    metricApproximateNumberOfMessagesNotVisible(props?: MetricOptions): Metric;
    metricApproximateNumberOfMessagesVisible(props?: MetricOptions): Metric;
    metricNumberOfEmptyReceives(props?: MetricOptions): Metric;
    metricNumberOfMessagesDeleted(props?: MetricOptions): Metric;
    metricNumberOfMessagesReceived(props?: MetricOptions): Metric;
    metricNumberOfMessagesSent(props?: MetricOptions): Metric;
    metricSentMessageSize(props?: MetricOptions): Metric;
    applyRemovalPolicy(policy: RemovalPolicy): void;
}
