export interface ConnectionConfig {
    host: string;
    port: number;
    username: string;
    password: string;
    vhost?: string;
    reconnectDelay?: number;
    heartbeat?: number;
    ssl?: boolean;
}
export interface RabbitMQConfig {
    connection: ConnectionConfig;
    defaultPrefetchCount?: number;
    gracefulShutdownTimeout?: number;
    highThroughput?: boolean;
    mode?: 'full' | 'publisher-only' | 'consumer-only';
}
export interface RetryOptions {
    maxRetries: number;
    retryDelay: number;
    delayType: 'fixed' | 'exponential';
    delay?: number;
}
export interface PublisherQueueOptions {
    queueName: string;
    durable?: boolean;
    createQueue?: boolean;
    skipQueueAssert?: boolean;
}
export interface QueueOptions extends PublisherQueueOptions {
    processor: (data: any) => Promise<void>;
    errCallback?: (error: Error, data?: any) => Promise<void>;
    prefetchCount?: number;
    retryOptions?: RetryOptions;
    exclusive?: boolean;
    autoDelete?: boolean;
    deadLetterExchange?: string;
    deadLetterRoutingKey?: string;
}
export interface PublishOptions {
    persistent?: boolean;
    messageId?: string;
    timestamp?: number;
    expiration?: string;
    priority?: number;
    batch?: boolean;
    exchange?: string;
    routingKey?: string;
    skipQueueAssert?: boolean;
    createQueue?: boolean;
}
export interface MessageHeaders {
    retryCount?: number;
    originalQueue?: string;
    errorMessage?: string;
    firstFailedAt?: number;
    [key: string]: any;
}
export interface ProcessedMessage {
    id: string;
    content: any;
    headers: MessageHeaders;
    timestamp: number;
    ack: () => Promise<void>;
    nack: (requeue?: boolean) => Promise<void>;
    reject: (requeue?: boolean) => Promise<void>;
}
export interface RabbitMQInstance {
    publish: (queueName: string, data: any, options?: PublishOptions) => Promise<void>;
    publishToExchange: (exchange: string, routingKey: string, data: any, options?: PublishOptions) => Promise<void>;
    registerQueue?: (options: QueueOptions) => Promise<void>;
    assertQueue: (options: PublisherQueueOptions) => Promise<void>;
    checkQueue: (queueName: string) => Promise<{
        messageCount: number;
        consumerCount: number;
    }>;
    close: () => Promise<void>;
    isConnected: () => boolean;
    getConnectionInfo: () => ConnectionConfig | null;
    flush: () => Promise<void>;
}
//# sourceMappingURL=index.d.ts.map