import type { EventBroker } from './broker';
import type { BrokerOptions, Channel, ChannelEvents, EventOptions, EventPayload, EventRecord, EventReturn, EventType, Listener, Events } from './common';
export declare class BrokerChannel<TEvents extends EventRecord, TPrefix extends EventType> implements Channel<TEvents> {
    private readonly _broker;
    private readonly _name;
    private readonly _delimiter;
    constructor(_broker: EventBroker<any>, _name: string, _delimiter: BrokerOptions['delimiter']);
    get id(): string;
    get name(): string;
    private _createEventName;
    on<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void>, options?: EventOptions): this;
    on<K extends Events<TEvents>>(event: K, listener: null | Listener<EventPayload<TEvents, K>, void>, options: EventOptions & {
        watch: true;
    }): Promise<EventPayload<TEvents, K>>;
    once<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void>): this;
    once<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void> | null, options: EventOptions & {
        watch: true;
    }): Promise<EventPayload<TEvents, K>>;
    off<K extends Events<TEvents>>(event: K, listener?: Listener<EventPayload<TEvents, K>, void>): this;
    emit<K extends Events<TEvents>>(event: K, payload: EventPayload<TEvents, K>, options?: EventOptions): this;
    call<K extends Events<TEvents>>(event: K, data: EventPayload<TEvents, K>): EventReturn<TEvents, K>;
    call<K extends Events<TEvents>>(event: K, data: EventPayload<TEvents, K>, strategy: 'all'): EventReturn<TEvents, K>[];
    getListener<K extends Events<TEvents>>(event: K): Listener<EventPayload<TEvents, K>, EventReturn<TEvents, K>>[];
    channel<TNestedPrefix extends string, TNestedEvents extends ChannelEvents<TNestedPrefix, TEvents> = ChannelEvents<TNestedPrefix, TEvents>>(name: TNestedPrefix): Channel<TNestedEvents>;
    broadcast<K extends Events<TEvents>>(event: K, payload: EventPayload<TEvents, K>, options?: EventOptions): this;
    watch<K extends Events<TEvents>>(event: K, timeoutMs?: number): Promise<EventPayload<TEvents, K>>;
}
