/** @packageDocumentation
 * @module RpcInterface
 */
import { RpcRoutingToken } from "./RpcRoutingToken";
import { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from "../../RpcInterface";
import { RpcInterfaceEndpoints } from "../../RpcManager";
/** @internal */
export declare const REGISTRY: unique symbol;
/** @internal */
export declare const OPERATION: unique symbol;
/** @internal */
export declare const POLICY: unique symbol;
/** @internal */
export declare const INSTANCE: unique symbol;
/** @internal */
export declare const CURRENT_REQUEST: unique symbol;
/** @internal */
export declare const CURRENT_INVOCATION: unique symbol;
/** @internal */
export declare class RpcRegistry {
    private static _instance;
    private constructor();
    static get instance(): RpcRegistry;
    lookupInterfaceDefinition(name: string): RpcInterfaceDefinition;
    describeAvailableEndpoints(): Promise<RpcInterfaceEndpoints[]>;
    getClientForInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing?: RpcRoutingToken): T;
    getImplForInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): T;
    lookupImpl<T extends RpcInterface>(interfaceName: string): T;
    registerImpl<TDefinition extends RpcInterface, TImplementation extends TDefinition>(definition: RpcInterfaceDefinition<TDefinition>, implementation: RpcInterfaceImplementation<TImplementation>): void;
    unregisterImpl<TDefinition extends RpcInterface>(definition: RpcInterfaceDefinition<TDefinition>): void;
    supplyImplInstance<TDefinition extends RpcInterface, TImplementation extends TDefinition>(definition: RpcInterfaceDefinition<TDefinition>, instance: TImplementation): void;
    isRpcInterfaceInitialized<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): boolean;
    initializeRpcInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void;
    terminateRpcInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void;
    definitionClasses: Map<string, RpcInterfaceDefinition>;
    proxies: Map<string, Map<number, RpcInterface>>;
    implementations: Map<string, RpcInterface>;
    suppliedImplementations: Map<string, RpcInterface>;
    implementationClasses: Map<string, RpcInterfaceImplementation>;
    id: () => number;
    private instantiateImpl;
    private instantiateClient;
    private interceptOperation;
    private checkInitialized;
    private configureOperations;
    private purgeClient;
    private notifyInitialize;
}
//# sourceMappingURL=RpcRegistry.d.ts.map