import { Permission } from '../permission/Permission';
import { Context } from '../context/Context';
import { GraphQLResolveInfo, Source } from 'graphql';
export declare const ACTION_TYPE_MUTATION = "mutation";
export declare const ACTION_TYPE_QUERY = "query";
export declare const actionTypes: string[];
export declare type ActionPreProcessor = (params: {
    action: Action;
    source?: any;
    input?: {
        [key: string]: unknown;
    };
    context?: Context;
    info?: GraphQLResolveInfo;
}) => void | Promise<void>;
export declare type ActionPostProcessor = (params: {
    result?: {
        [key: string]: unknown;
    };
    error?: Error;
    action: Action;
    source?: Source;
    input?: {
        [key: string]: unknown;
    };
    context?: Context;
    info?: GraphQLResolveInfo;
}) => void | Promise<void>;
export declare type ActionResolver = (params: {
    source?: Source;
    input?: {
        [key: string]: unknown;
    };
    context?: Context;
    info?: GraphQLResolveInfo;
}) => unknown | Promise<unknown>;
export declare type ActionSetup = {
    name?: string;
    description?: string;
    input?: any;
    output?: any;
    resolve: ActionResolver;
    type?: string;
    permissions?: ((...args: any[]) => Permission | Permission[]) | Permission | Permission[];
    preProcessor?: ActionPreProcessor;
    postProcessor?: ActionPostProcessor;
};
export declare class Action {
    name: string;
    description: string;
    input: any;
    private _input;
    output: any;
    private _output;
    resolve: ActionResolver;
    type: string;
    permissions: Permission | Permission[];
    private readonly _permissions;
    private _defaultPermissions;
    descriptionPermissions: string | boolean;
    preProcessor?: ActionPreProcessor;
    postProcessor?: ActionPostProcessor;
    constructor(setup?: ActionSetup);
    getInput(): null | any;
    hasInput(): boolean;
    getOutput(): null | any;
    hasOutput(): boolean;
    _processPermissions(): null | Permission | Permission[];
    _generatePermissionDescriptions(): void;
    _injectDefaultPermissionsBySchema(defaultPermissions: any): void;
    getPermissions(): ((...args: any[]) => Permission | Permission[]) | Permission | Permission[];
    toString(): string;
}
export declare const isAction: (obj: unknown) => obj is Action;
