import { Ability } from '@casl/ability';
import { Collection, CollectionOptions } from 'mongodb';
import { Job, PipelineOperation } from '../../pipeline.js';
import { APIRequest, APIResponse, Method } from '../../types.js';
import { MongoResource } from '../resource.js';
export interface MongoJob extends Job {
    coll: Collection;
}
export declare abstract class MongoOperation extends PipelineOperation {
    resource: MongoResource;
    constructor(resource: MongoResource, path: string, method: Method, id?: string);
    get collection(): Promise<Collection>;
    get requestSchema(): any;
    get responseSchema(): any;
    protected getCollectionOptions(): CollectionOptions | undefined;
    protected getItemQuery(_id: any): {
        [x: string]: any;
    };
    protected parseFields(fields: string[]): any;
    getAbilityConstraints(ability: Ability): any;
    createJob(req: APIRequest, res: APIResponse): Promise<MongoJob>;
    prepareQuery(job: MongoJob): Promise<MongoJob>;
    redactResult(job: MongoJob): Promise<MongoJob>;
}
