import { Operation } from './operation.js';
import { Resource } from './resource.js';
import { APIRequest, APIResponse, Method } from './types.js';
import { CSVOptions } from './util.js';
export interface Job {
    req: APIRequest;
    res: APIResponse;
    query?: any;
    doc?: any;
    opts?: any;
    data?: any;
    feat?: {
        filter?: {
            fields: boolean;
            data: boolean;
        };
        format?: {
            type: 'json';
        } | ({
            type: 'csv';
            filename?: string;
        } & CSVOptions);
    };
}
export declare abstract class PipelineOperation extends Operation {
    createJob(req: APIRequest, res: APIResponse): Promise<Job>;
    prepareQuery(job: Job): Promise<Job>;
    prepareDoc(job: Job): Promise<Job>;
    prepareOpts(job: Job): Promise<Job>;
    abstract runOperation(job: Job): Promise<Job>;
    redactResult(job: Job): Promise<Job>;
    processResult(job: Job): Promise<Job>;
    handler(req: APIRequest, res: APIResponse): Promise<void>;
}
export interface PipelineOperationRunner {
    (job: Job): Promise<Job>;
}
export declare class SimplePipelineOperation extends PipelineOperation {
    protected customRunner: PipelineOperationRunner;
    constructor(customRunner: PipelineOperationRunner, resource: Resource, path: string, method: Method, id?: string);
    runOperation(job: Job): Promise<Job>;
}
