import { Job as BullmqJob, JobsOptions } from 'bullmq';
import type { ApplicationService, LoggerService } from '@adonisjs/core/types';
type JobHandle<T> = T extends (payload: infer P) => any ? (undefined extends P ? any : P) : any;
export declare abstract class Job {
    job: BullmqJob;
    logger: LoggerService;
    payload: JobHandle<this['handle']>;
    static app: ApplicationService;
    static dispatch<T extends Job>(this: new (...args: any[]) => T, payload: JobHandle<T['handle']>, options?: JobsOptions & {
        queueName?: string;
    }): Promise<void>;
    static dispatchSync<T extends Job>(this: new (...args: any[]) => T, payload: JobHandle<T['handle']>): Promise<void>;
    abstract handle(payload: any): Promise<any> | any;
    failed?(error: Error): Promise<void> | void;
    completed?(payload: any, result: any): Promise<void> | void;
}
export {};
