/// <reference types="node" />
import { EventEmitter } from 'events';
import { AnyError, Collection, MongoClient, MongoClientOptions, Db as MongoDb } from 'mongodb';
import { Job } from '../job';
import { CancelMethod } from './cancel';
import { CloseMethod } from './close';
import { CountJobsMethod } from './count-jobs';
import { CreateMethod } from './create';
import { DatabaseMethod } from './database';
import { DbInitMethod } from './db-init';
import { DefaultConcurrencyMethod } from './default-concurrency';
import { DefaultLockLifetimeMethod } from './default-lock-lifetime';
import { DefaultLockLimitMethod } from './default-lock-limit';
import { DefineMethod } from './define';
import { DisableMethod } from './disable';
import { DrainMethod } from './drain';
import { EnableMethod } from './enable';
import { EveryMethod } from './every';
import { JobProcessingQueue } from './job-processing-queue';
import { JobsMethod } from './jobs';
import { LockLimitMethod } from './lock-limit';
import { MaxConcurrencyMethod } from './max-concurrency';
import { MongoMethod } from './mongo';
import { NameMethod } from './name';
import { NowMethod } from './now';
import { ProcessEveryMethod } from './process-every';
import { PurgeMethod } from './purge';
import { ResumeOnRestartMethod } from './resume-on-restart';
import { SaveJobMethod } from './save-job';
import { ScheduleMethod } from './schedule';
import { SortMethod } from './sort';
import { StartMethod } from './start';
import { StopMethod } from './stop';
export type PulseOnEventType = 'ready' | 'start' | 'success' | 'fail' | 'complete' | 'cancel' | 'error';
export interface PulseConfig {
    name?: string;
    processEvery?: string;
    maxConcurrency?: number;
    defaultConcurrency?: number;
    lockLimit?: number;
    defaultLockLimit?: number;
    defaultLockLifetime?: number;
    sort?: any;
    mongo?: MongoDb;
    db?: {
        address: string;
        collection?: string;
        options?: MongoClientOptions;
    };
    disableAutoIndex?: boolean;
    resumeOnRestart?: boolean;
}
declare class Pulse extends EventEmitter {
    private _lazyBindings;
    _defaultConcurrency: any;
    _defaultLockLifetime: any;
    _defaultLockLimit: any;
    _definitions: any;
    _findAndLockNextJob: (this: Pulse, jobName: string, definition: any) => Promise<Job<import("../job").JobAttributesData> | undefined>;
    _indices: any;
    _disableAutoIndex: boolean;
    _resumeOnRestart: boolean;
    _isLockingOnTheFly: boolean;
    _isJobQueueFilling: Map<string, boolean>;
    _jobQueue: JobProcessingQueue;
    _jobsToLock: Job[];
    _lockedJobs: Job[];
    _runningJobs: Job[];
    _lockLimit: any;
    _maxConcurrency: any;
    _mongoUseUnifiedTopology?: boolean;
    _name: any;
    _processEvery: number;
    _ready: Promise<unknown>;
    _sort: any;
    _db: MongoClient;
    _mdb: MongoDb;
    _collection: Collection;
    _nextScanAt: any;
    _processInterval: any;
    _readyAt: Date;
    constructor(config?: PulseConfig, cb?: (error: AnyError | undefined, collection: Collection<any> | null) => void);
    get define(): DefineMethod;
    get every(): EveryMethod;
    get processEvery(): ProcessEveryMethod;
    get cancel(): CancelMethod;
    get close(): CloseMethod;
    get create(): CreateMethod;
    get dbInit(): DbInitMethod;
    get defaultConcurrency(): DefaultConcurrencyMethod;
    get defaultLockLifetime(): DefaultLockLifetimeMethod;
    get defaultLockLimit(): DefaultLockLimitMethod;
    get disable(): DisableMethod;
    get enable(): EnableMethod;
    get jobs(): JobsMethod;
    get countJobs(): CountJobsMethod;
    get lockLimit(): LockLimitMethod;
    get maxConcurrency(): MaxConcurrencyMethod;
    get name(): NameMethod;
    get now(): NowMethod;
    get purge(): PurgeMethod;
    get saveJob(): SaveJobMethod;
    get schedule(): ScheduleMethod;
    get sort(): SortMethod;
    get start(): StartMethod;
    get stop(): StopMethod;
    get drain(): DrainMethod;
    get mongo(): MongoMethod;
    get database(): DatabaseMethod;
    get resumeOnRestart(): ResumeOnRestartMethod;
    get getJobsRepo(): (this: Pulse, query?: {}, sort?: {}, limit?: number, skip?: number) => Promise<import("mongodb").WithId<import("bson").Document>[]>;
    on(event: PulseOnEventType, listener: (...arg: any[]) => void): this;
    private init;
    private bindMethod;
}
export { Pulse };
