import { IContainer } from '../di/resolvers';
import { LifeTime } from '../di/annotations';
import { Domain } from '../schemas/schema';
import { UserContext } from '../servers/requestContext';
import { HttpResponse } from './response';
export interface ValidationError {
    id?: string;
    field?: string;
    message: string;
}
export interface ErrorResponse {
    message: string;
    errors?: Array<ValidationError>;
}
export interface CommonRequestData {
    correlationId: string;
    action: string;
    domain: string;
    schema: string;
    inputSchema?: string;
    userContext?: UserContext;
    params: any;
}
export interface CommonRequestResponse<T> {
    tenant: string;
    userContext: UserContext;
    domain: string;
    action: string;
    schema: string;
    error?: ErrorResponse;
    value?: T;
    inputSchema?: string;
}
export interface CommonActionMetadata {
    description: string;
    action?: string;
    scope?: string;
    schema?: string | Function;
    inputSchema?: string | Function;
}
export interface CommonMetadata {
    description?: string;
    schema?: string | Function;
}
export interface CommonHandlerMetadata extends CommonMetadata {
    scope: string;
}
export interface ServiceHandlerMetadata extends CommonHandlerMetadata {
    serviceName?: string;
    serviceLifeTime?: LifeTime;
    enableOnTestOnly?: boolean;
}
export interface IManager {
    container: IContainer;
    getInfoHandler<T>(command: CommonRequestData, container?: IContainer): {
        verb: string;
        handler: Function;
        metadata: T;
        method: string;
        kind: "query" | "action" | "event";
    };
    runAsync(command: CommonRequestData, ctx: any): Promise<HttpResponse>;
}
export declare class HandlerFactory {
    static obfuscateSensibleData(domain: Domain, container: IContainer, result: any): any;
}
