import type { Integer } from "../../../common/CustomTypes/Integer";
import type { AwsResourceCommon, CloudFormationTags } from "../common";
import type { Ref } from "../IntrinsicFunctions";
import type { IamPolicyDocument } from "../PolicyDocument";
export declare type TableType = 'AWS::DynamoDB::Table';
export interface Table extends AwsResourceCommon {
    Type: TableType;
    DeletionPolicy?: 'Delete' | 'Retain';
    Properties: {
        AttributeDefinitions?: AttributeDefinition[];
        BillingMode?: BillingMode;
        GlobalSecondaryIndexes?: GlobalSecondaryIndex[];
        KeySchema: KeySchema[];
        LocalSecondaryIndexes?: LocalSecondaryIndex[];
        PointInTimeRecoverySpecification?: PointInTimeRecoverySpecification;
        ProvisionedThroughput?: ProvisionedThroughput;
        SSESpecification?: SSESpecification;
        StreamSpecification?: StreamSpecification;
        TableName?: string;
        Tags?: CloudFormationTags;
        TimeToLiveSpecification?: TimeToLiveSpecification;
    };
}
export interface TimeToLiveSpecification {
    AttributeName: string;
    Enabled: boolean;
}
export interface StreamSpecification {
    StreamViewType: StreamViewType;
}
export declare type StreamViewType = 'KEYS_ONLY' | 'NEW_AND_OLD_IMAGES' | 'NEW_IMAGE' | 'OLD_IMAGE';
export interface SSESpecification {
    SSEEnabled: boolean;
}
export declare type AttributeType = 'B' | 'N' | 'S';
export declare type BillingMode = 'PAY_PER_REQUEST' | 'PROVISIONED';
export interface AttributeDefinition {
    AttributeName: string;
    AttributeType: AttributeType;
}
export interface GlobalSecondaryIndex {
    IndexName: string;
    KeySchema: KeySchema[];
    Projection: Projection;
    ProvisionedThroughput?: ProvisionedThroughput;
}
export interface LocalSecondaryIndex {
    IndexName: string;
    KeySchema: KeySchema[];
    Projection: Projection;
}
export interface ProvisionedThroughput {
    ReadCapacityUnits: Integer;
    WriteCapacityUnits: Integer;
}
export interface Projection {
    NonKeyAttributes?: string[];
    ProjectionType?: ProjectionType;
}
export declare type ProjectionType = 'ALL' | 'INCLUDE' | 'KEYS_ONLY';
export interface KeySchema {
    AttributeName: string;
    KeyType: KeyType;
}
export declare type KeyType = 'HASH' | 'RANGE';
export interface PointInTimeRecoverySpecification {
    PointInTimeRecoveryEnabled?: boolean;
}
export declare function mkDynamoDbTablePolicy(tableNameRef: Ref, permissions: string[], effect?: 'Allow' | 'Deny'): IamPolicyDocument;
