import EventEmitter3 from 'eventemitter3';
import { StreamrClientEvents } from 'streamr-client';
import { LogStoreAssignmentEvent } from './registry/LogStoreRegistry';
type Events<T> = {
    [K in keyof T]: (payload: any) => void;
};
export interface LogStoreClientEvents extends StreamrClientEvents {
    addToLogStore: (payload: LogStoreAssignmentEvent) => void;
    removeFromLogStore: (payload: LogStoreAssignmentEvent) => void;
}
export interface InternalEvents {
    publish: () => void;
    subscribe: () => void;
}
interface ObserverEvents<E extends Events<E>> {
    addEventListener: (eventName: keyof E) => void;
    removeEventListener: (eventName: keyof E) => void;
}
export declare class ObservableEventEmitter<E extends Events<E>> {
    private delegate;
    private observer;
    on<T extends keyof E>(eventName: T, listener: E[T]): void;
    once<T extends keyof E>(eventName: T, listener: E[T]): void;
    off<T extends keyof E>(eventName: T, listener: E[T]): void;
    removeAllListeners(): void;
    emit<T extends keyof E>(eventName: T, payload: Parameters<E[T]>[0]): void;
    getListenerCount<T extends keyof E>(eventName: T): number;
    getObserver(): EventEmitter3<ObserverEvents<E>, any>;
}
export declare const initEventGateway: <E extends Events<E>, T extends keyof E, P>(eventName: T, start: (emit: (payload: Parameters<E[T]>[0]) => void) => P, stop: (listener: P) => void, emitter: ObservableEventEmitter<E>) => void;
export declare class LogStoreClientEventEmitter extends ObservableEventEmitter<LogStoreClientEvents & InternalEvents> {
}
export {};
