import { AnyFunction } from '../utils';
import { EventEmitter2 } from 'eventemitter2';
import { Client } from './client';
export declare class ClientChannel extends EventEmitter2 {
    client: Client;
    name: string;
    events: Set<string>;
    _events?: Record<string, AnyFunction[]>;
    constructor(name: string);
    setClient(client: Client): void;
    private pendingSubscriptions;
    private subscribeDebounceTimeout?;
    commitPendingSubscriptions(): Promise<void>;
    subscribe(event: string | string[]): Promise<any>;
    private pendingUnsubscriptions;
    private unsubscribeDebounceTimeout?;
    commitPendingUnsubscriptions(): Promise<void>;
    unsubscribe(event: string | string[]): Promise<any>;
    resubscribe(): Promise<any>;
    /**
     * Wait for an event to fire asynchronously.
     *
     * Returns true if no params are sent.
     */
    wait(event: string, callback?: (...data: any) => any): Promise<any | any[]>;
    /**
     * Returns true if the event was not fired within a given timeout.
     */
    timeout(event: string, timeoutMs?: number): Promise<unknown>;
    iterator(event: string): {
        [Symbol.asyncIterator](): any;
        next(): Promise<unknown>;
        return(): {
            done: boolean;
        };
        throw(error: unknown): Promise<never>;
    };
}
