import { AppJobScheduler, BullBoardRequest, FormatterField, JobCleanStatus, JobCounts, JobSchedulerRepeatOptions, JobSchedulerUpdateResult, JobStatus, MetricsType, QueueAdapterOptions, QueueDefaultJobOptions, QueueJob, QueueJobOptions, QueueMetrics, QueueType, QueueWorker, RedisStats, Status } from '../../typings/app';
type RawClient = Record<string, string>;
export declare abstract class BaseAdapter {
    readonly readOnlyMode: boolean;
    readonly allowRetries: boolean;
    readonly allowCompletedRetries: boolean;
    readonly prefix: string;
    readonly delimiter: string;
    readonly description: string;
    readonly displayName: string;
    readonly jobDataSchema: QueueAdapterOptions['jobDataSchema'] | undefined;
    readonly type: QueueType;
    readonly externalJobUrl: QueueAdapterOptions['externalJobUrl'];
    private formatters;
    private _visibilityGuard;
    protected constructor(type: QueueType, options?: Partial<QueueAdapterOptions & {
        allowCompletedRetries: boolean;
    }>);
    getDescription(): string;
    getDisplayName(): string;
    getJobDataSchema(): Record<string, any> | undefined;
    setFormatter<T extends FormatterField>(field: T, formatter: (data: any) => T extends 'name' ? string : any): void;
    format(field: FormatterField, data: any, defaultValue?: any): any;
    setVisibilityGuard(guard: (request: BullBoardRequest) => Promise<boolean> | boolean): void;
    isVisible(request: BullBoardRequest): boolean | Promise<boolean>;
    abstract clean(queueStatus: JobCleanStatus, graceTimeMs: number): Promise<void>;
    abstract addJob(name: string, data: any, options: QueueJobOptions): Promise<QueueJob>;
    abstract getJob(id: string): Promise<QueueJob | undefined | null>;
    abstract getJobCounts(): Promise<JobCounts>;
    /** A status set can outlive the jobs it points at, so implementations drop ids that no longer resolve. */
    abstract getJobs(jobStatuses: JobStatus[], start?: number, end?: number): Promise<QueueJob[]>;
    abstract getJobLogs(id: string): Promise<string[]>;
    abstract getMetrics(type: MetricsType, start?: number, end?: number): Promise<QueueMetrics>;
    abstract getName(): string;
    /** Raw `INFO` output, or null when the queue is not backed by Redis at all. */
    abstract getRedisInfo(): Promise<string | null>;
    /**
     * Stats for a queue whose datastore is not Redis, so has no `INFO` to parse. Only BullMQ v6
     * can be in that position, and only when it is running on PostgreSQL.
     */
    getDatastoreStats(): Promise<RedisStats | null>;
    abstract isPaused(): Promise<boolean>;
    abstract pause(): Promise<void>;
    abstract resume(): Promise<void>;
    abstract empty(): Promise<void>;
    abstract obliterate(): Promise<void>;
    abstract promoteAll(): Promise<void>;
    abstract removeJobScheduler(id: string): Promise<boolean>;
    /**
     * Schedulers of this queue, without their runs. Returned as a plain list because there are
     * rarely enough of them to page through.
     */
    abstract getJobSchedulers(): Promise<Omit<AppJobScheduler, 'queueName'>[]>;
    abstract getJobSchedulersCount(): Promise<number>;
    /**
     * Rewrites the schedule of an existing scheduler, leaving the job it produces untouched.
     * Adapters that cannot do this leave {@link supportsJobSchedulerUpdate} false and are never
     * asked.
     */
    abstract updateJobScheduler(id: string, repeat: JobSchedulerRepeatOptions): Promise<JobSchedulerUpdateResult>;
    /** Whether {@link updateJobScheduler} does anything. False for Bull, which has no upsert. */
    get supportsJobSchedulerUpdate(): boolean;
    abstract getStatuses(): Status[];
    abstract getJobStatuses(): JobStatus[];
    abstract getGlobalConcurrency(): Promise<number | null>;
    abstract setGlobalConcurrency(concurrency: number): Promise<void>;
    getQueueDefaultJobOptions(): QueueDefaultJobOptions;
    /**
     * Connected workers for this queue, or `null` when the queue cannot answer.
     * Adapters that have no notion of workers keep the default so the UI can tell
     * "unknown" apart from "nobody is consuming this queue".
     */
    getWorkers(): Promise<QueueWorker[] | null>;
    /**
     * Turns raw `CLIENT LIST` entries into the shape the board renders.
     *
     * Redis providers that block `CLIENT LIST` make Bull resolve to `undefined` and
     * BullMQ to a single placeholder entry with nothing but a message in `name`.
     * Both are reported as `null` rather than as an empty worker list.
     *
     * `nameSeparator` is what the library puts between the queue part of a connection name
     * and the name the worker was created with. Only libraries that support naming a worker
     * pass one; without it every worker is reported as unnamed.
     */
    protected normalizeWorkers(clients: RawClient[] | undefined | null, nameSeparator?: string): QueueWorker[] | null;
}
export {};
