import MainThreadRpcDriver from './MainThreadRpcDriver.ts';
import WebWorkerRpcDriver from './WebWorkerRpcDriver.ts';
import type BaseRpcDriver from './BaseRpcDriver.ts';
import type PluginManager from '../PluginManager.ts';
import type { AnyConfigurationModel } from '../configuration/index.ts';
type DriverClass = BaseRpcDriver;
interface BackendConfigurations {
    WebWorkerRpcDriver?: Omit<ConstructorParameters<typeof WebWorkerRpcDriver>[0], 'config'>;
    MainThreadRpcDriver?: Omit<ConstructorParameters<typeof MainThreadRpcDriver>[0], 'config'>;
    [key: string]: unknown;
}
export type RpcDriverFactory = (config: AnyConfigurationModel, backendConfig: unknown, pluginManager: PluginManager) => BaseRpcDriver;
export default class RpcManager {
    pluginManager: PluginManager;
    mainConfiguration: AnyConfigurationModel;
    backendConfigurations: BackendConfigurations;
    static configSchema: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
        defaultDriver: {
            type: string;
            description: string;
            defaultValue: string;
        };
        drivers: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IMapType<import("@jbrowse/mobx-state-tree").ITypeUnion<import("@jbrowse/mobx-state-tree").ModelCreationType<import("@jbrowse/mobx-state-tree/dist/internal").ExtractCFromProps<Record<string, any>>> | undefined, import("@jbrowse/mobx-state-tree").ModelSnapshotType<Record<string, any>>, ({} & Partial<import("@jbrowse/mobx-state-tree/dist/internal").ExtractCFromProps<Record<string, any>>> & import("@jbrowse/mobx-state-tree/dist/internal").NonEmptyObject) | undefined>>, [undefined]>;
    }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
    driverObjects: Map<string, DriverClass>;
    driverFactories: Map<string, RpcDriverFactory>;
    constructor(pluginManager: PluginManager, mainConfiguration: AnyConfigurationModel, backendConfigurations: BackendConfigurations);
    registerDriverFactory(name: string, factory: RpcDriverFactory): void;
    getDriver(backendName: string): BaseRpcDriver;
    getDriverForCall(_sessionId: string, _functionName: string, args: {
        rpcDriverName?: string;
    }): Promise<BaseRpcDriver>;
    call(sessionId: string, functionName: string, args: Record<string, unknown>, opts?: {}): Promise<unknown>;
}
export {};
