import { CoreServices } from '../core-services';
/**
 * interface: SQSService
 * - common interface type for `SQS`
 */
export interface SQSService extends CoreServices {
    sendMessage(data: any, attr?: SQSAttribute): Promise<string>;
    receiveMessage(size?: number): Promise<{
        list: SqsMessage[];
    }>;
    deleteMessage(handle: string): Promise<void>;
    statistics(): Promise<SqsStatistics>;
}
export interface SQSAttribute {
    [key: string]: string | number;
}
export interface SqsMessage {
    sent: number;
    attr: SQSAttribute;
    data: any;
    id: string;
    handle: string;
}
export interface SqsStatistics {
    available: number;
    inflight: number;
    delayed: number;
    timeout: number;
}
export interface SqsRecord {
    messageId: string;
    receiptHandle: string;
    body: string;
    attributes: any;
    messageAttributes: any;
    md5OfBody: string;
    md5OfMessageAttributes: string;
    eventSource: 'aws:sqs';
    eventSourceARN: string;
    awsRegion: string;
}
/**
 * class: AWSSQSService
 * - support of AWS `SQS` Service
 */
export declare class AWSSQSService implements SQSService {
    static SQS_REGION: string;
    static SQS_ENDPOINT: string;
    protected _region: string;
    protected _endpoint: string;
    /**
     * default constructor.
     */
    constructor(endpoint?: string, region?: string, profile?: string);
    region(): string;
    endpoint(): string;
    /**
     * hello
     */
    hello: () => string;
    /**
     * send message into SQS.
     *
     * @param data      object data to be json.
     * @param attr      attribute set.
     */
    sendMessage(data: any, attr?: SQSAttribute): Promise<string>;
    /**
     * receive message by size.
     *
     * @param size      (default 1) size of message
     */
    receiveMessage(size?: number): Promise<{
        list: SqsMessage[];
    }>;
    /**
     * delete message by id
     * @param handle        handle-id to delete.
     */
    deleteMessage(handle: string): Promise<void>;
    /**
     * statistics for the given type.
     *
     * @param {*} TYPE
     */
    statistics(): Promise<SqsStatistics>;
}
/**
 * class: `MyDummySQSService`
 * - simulated dummy `SQSService` which is identical to real-service.
 */
export declare class MyDummySQSService implements SQSService {
    private buffer;
    private endpoint;
    private timeout;
    constructor(endpoint: string, timeout?: number);
    hello: () => string;
    sendMessage(data: any, attr?: SQSAttribute): Promise<string>;
    receiveMessage(size?: number): Promise<{
        list: SqsMessage[];
    }>;
    deleteMessage(handle: string): Promise<void>;
    statistics(): Promise<SqsStatistics>;
}
