import { AbstractEventEmitter } from '@sprucelabs/mercury-event-emitter';
import { EventContract, EventName, MercuryAggregateResponse, SkillEventContract, SpruceSchemas } from '@sprucelabs/mercury-types';
import { Schema } from '@sprucelabs/schema';
import MutableContractClient from './MutableContractClient';
declare class InternalEmitter<Contract extends EventContract> extends AbstractEventEmitter<Contract> {
    doesHandleEvent(eventName: string): boolean;
    protected validateEmitPayload(schema: Schema | undefined | null, actualPayload: any, eventName: string): void;
    mixinOnlyUniqueSignatures(contract: EventContract): void;
    overrideSignatures(contract: EventContract): void;
    getContract(): SpruceSchemas.Mercury.v2020_12_25.EventContract;
    setContract(contract: Contract): void;
}
export default class MercuryTestClient<
/** @ts-ignore */
Contract extends EventContract = SkillEventContract> extends MutableContractClient<Contract> {
    private static emitter;
    private _isConnected;
    private isConnectedToApi;
    private connectPromise?;
    private static shouldCheckPermissionsOnLocalEvents;
    private shouldHandleAuthenticateLocallyIfListenerSet;
    private static namespacesThatHaveToBeHandledLocally;
    private shouldWaitForDelayedConnectIfAuthing;
    private static shouldRequireLocalListeners;
    protected get eventContract(): Contract;
    protected set eventContract(contract: Contract);
    static setShouldCheckPermissionsOnLocalEvents(should: boolean): void;
    static setNamespacesThatMustBeHandledLocally(namespaces: string[]): void;
    static getNamespacesThatMustBeHandledLocally(): string[];
    constructor(options: Record<string, any> & {
        host: string;
        eventContract?: Contract;
    });
    /** @ts-ignore */
    static getInternalEmitter(contract?: EventContract): InternalEmitter<SkillEventContract>;
    off(eventName: EventName<Contract>, cb?: any): Promise<number>;
    static mixinContract(contract: EventContract): void;
    mixinContract(contract: EventContract): void;
    doesHandleEvent(eventName: string): boolean;
    on(...args: any[]): Promise<void>;
    emit(...args: any[]): Promise<MercuryAggregateResponse<any>>;
    private shouldHandleEventLocally;
    private handleEventLocally;
    private assertValidEventSignature;
    private optionallyCheckPermissions;
    private buildSource;
    private connectIfNotConnected;
    private delayedConnectAndAuth;
    connect(): Promise<void>;
    isConnected(): boolean;
    disconnect(): Promise<void>;
    static reset(): void;
    getIsTestClient(): boolean;
    static setShouldRequireLocalListeners(shouldRequire: boolean): void;
    static getShouldRequireLocalListeners(): boolean;
}
export {};
