import { EventContract, SkillEventContract } from '@sprucelabs/mercury-types';
import { ConnectionOptions, MercuryClient } from '../types/client.types';
import MutableContractClient from './MutableContractClient';
export default class MercuryClientFactory {
    private static isTestMode;
    private static defaultContract;
    private static timeoutMs;
    private static totalClients;
    private static clients;
    static ClientClass: new (...args: any[]) => MutableContractClient<EventContract>;
    static Client<Contract extends SkillEventContract = SkillEventContract>(connectionOptions?: ConnectionOptions): Promise<Client<Contract>>;
    static isInTestMode(): boolean;
    static setIsTestMode(isTestMode: boolean): void;
    static setDefaultContract(contract: EventContract): void;
    static hasDefaultContract(): boolean;
    static clearDefaultContract(): void;
    private static resetTestClient;
    static setDefaultTimeoutMs(ms: number): void;
    static getTotalClients(): number;
    static reset(): void;
    static getClients(): Client<import("@sprucelabs/mercury-types").SpruceSchemas.Mercury.v2020_12_25.EventContract>[];
}
export type Client<Contract extends EventContract> = MercuryClient<Contract> & {
    doesHandleEvent(eventName: string): boolean;
    mixinContract(eventContract: EventContract): void;
};
