import { AddQueueModelAttributes, IQueueModel, IQueueModelStatic } from './QueueModel';
import { Sequelize, Model, Dialect } from 'sequelize';
export default class NodemailerSequelizeQueue implements INodemailerSequelizeQueue {
    queueModel: IQueueModelStatic;
    private sequelize;
    private dbInisializated;
    private scheduled;
    private smtpCredentials;
    private options;
    private mailer;
    constructor(dbConfigInstance: DbCongifInstance, smtpCredentials: any, options?: Options);
    private initDatabase;
    initScheduler({ queueLimit }: InitSchedulerProps): Promise<void>;
    initModels(): Promise<void>;
    queueMail(data: AddQueueModelAttributes): Promise<IQueueModel | void>;
}
export interface INodemailerSequelizeQueue {
    queueModel: IQueueModelStatic;
    queueMail(data: AddQueueModelAttributes): Promise<Model<any, any> | void>;
    initScheduler(props?: {
        queueLimit?: number;
    }): Promise<void>;
}
export declare type DbConfig = {
    username: string;
    password: string;
    database: string;
    host: string;
    dialect: Dialect;
    logging?: boolean | ((sql: string, timing?: number) => void);
};
export declare type DbCongifInstance = {
    config?: DbConfig;
    sequelize?: Sequelize;
};
export declare type Options = {
    maxAttempts?: number;
    expression?: string;
    logging?: boolean;
    sendImmidiatly?: boolean;
};
export declare type InitSchedulerProps = {
    queueLimit?: number;
};
