import { Domain } from './../schemas/schema';
import { IContainer } from './../di/resolvers';
import { ServiceHandlerMetadata, CommonActionMetadata } from './common';
export interface HandlerItem {
    methodName: string;
    handler: any;
    metadata: CommonActionMetadata;
    kind: "action" | "query" | "event";
}
export declare class PropertyDescription {
    name: string;
    required: boolean;
    description: string;
    type: string;
    reference: "no" | "many" | "one";
    metadata: any;
}
export declare class SchemaDescription {
    name: string;
    properties: Array<PropertyDescription>;
    dependencies: Set<string>;
}
export declare class ActionDescription {
    schema: string;
    kind: "action" | "query" | "get";
    description: string;
    action: string;
    scope: string;
    inputSchema: string;
    outputSchema: string;
    outputType?: string;
    verb: string;
    async: boolean;
}
export declare class ServiceDescription {
    domain: string;
    serviceName: string;
    serviceVersion: string;
    alternateAddress: string;
    services: Array<ActionDescription>;
    schemas: Array<SchemaDescription>;
    hasAsyncTasks: boolean;
    scopes: Array<{
        name: string;
        description: string;
    }>;
}
export declare class ServiceDescriptors {
    private container;
    private domain;
    static nativeTypes: string[];
    private descriptions;
    private handlers;
    private routes;
    private monoSchema;
    constructor(container: IContainer, domain: Domain);
    getDescriptions(): ServiceDescription;
    getHandlerInfo<T extends CommonActionMetadata>(container: IContainer, schema: string, action: string, optional?: boolean): {
        handler: any;
        metadata: T;
        method: string;
        verb: string;
        kind: "query" | "action" | "event";
    };
    createHandlersTable(): void;
    private checkScopes(scopes, metadata, verb);
    private getSchemaDescription(schemas, schemaName, defaultValue?);
    private getPropertyType(name);
    private sortSchemasDependencies();
    register(container: IContainer, domain: Domain, target: Function, actions: any, handlerMetadata: ServiceHandlerMetadata, kind: "action" | "query"): void;
}
