import type { NaturalNumber, NaturalNumberOrZero } from "../../../common/CustomTypes/Numerics";
import type { Arn } from "../../CustomTypes/Arn";
import type { AwsResourceCommon } from "../common";
import type { CloudFormationValue } from "../IntrinsicFunctions";
export declare type EventSourceMappingType = 'AWS::Lambda::EventSourceMapping';
export interface EventSourceMapping extends AwsResourceCommon {
    Type: EventSourceMappingType;
    Properties: EventSourceMappingProperties;
}
export declare type EventSourceMappingProperties = SQSEventSourceMappingProperties | StreamEventSourceMappingProperties;
export interface EventSourceMappingPropertiesBase {
    BatchSize?: NaturalNumber;
    Enabled?: boolean;
    EventSourceArn: CloudFormationValue<Arn>;
    FunctionName: CloudFormationValue<string>;
    FilterCriteria: FilterCriteria;
}
export interface FilterCriteria {
    Filters: Filter[];
}
export interface Filter {
    Pattern: string;
}
export declare type StartingPosition = 'AT_TIMESTAMP' | 'LATEST' | 'TRIM_HORIZON';
export interface SQSEventSourceMappingProperties extends EventSourceMappingPropertiesBase {
    ReportBatchItemFailures?: ['FunctionResponseTypes'];
    MaximumBatchingWindowInSeconds?: NaturalNumber | 0;
    ScalingConfig?: ScalingConfig;
}
export interface ScalingConfig {
    MaximumConcurrency?: NaturalNumber;
}
export interface StreamEventSourceMappingProperties extends EventSourceMappingPropertiesBase {
    BisectBatchOnFunctionError?: boolean;
    DestinationConfig?: {
        OnFailure: {
            Destination: CloudFormationValue<Arn>;
        };
    };
    MaximumBatchingWindowInSeconds?: NaturalNumberOrZero;
    MaximumRecordAgeInSeconds?: NaturalNumber;
    MaximumRetryAttempts?: NaturalNumber | -1 | 0;
    ParallelizationFactor?: NaturalNumber;
    StartingPosition: StartingPosition;
    StartingPositionTimestamp?: number;
    ReportBatchItemFailures?: ['FunctionResponseTypes'];
    TumblingWindowInSeconds?: NaturalNumberOrZero;
}
