import { EventCallback } from '../event';
import { EndpointHandlers } from '../../types';
import { Logger } from '../../logger';
export interface InvokeRequest {
    methodName: string;
    context: {
        header?: {
            height: number;
            timestamp: number;
            aggregateCommit: {
                height: number;
            };
        };
    };
    params?: Record<string, unknown>;
}
export declare abstract class BaseChannel {
    readonly eventsList: ReadonlyArray<string>;
    readonly endpointsList: ReadonlyArray<string>;
    readonly namespace: string;
    protected readonly endpointHandlers: EndpointHandlers;
    protected readonly _logger: Logger;
    private _requestId;
    constructor(logger: Logger, namespace: string, events: ReadonlyArray<string>, endpoints: EndpointHandlers);
    isValidEventName(name: string, throwError?: boolean): boolean | never;
    isValidActionName(name: string, throwError?: boolean): boolean | never;
    protected _getNextRequestId(): string;
    abstract subscribe(eventName: string, cb: EventCallback): void;
    abstract unsubscribe(eventName: string, cb: EventCallback): void;
    abstract publish(eventName: string, data?: Record<string, unknown>): void;
    abstract invoke<T>(req: InvokeRequest): Promise<T>;
    abstract registerToBus(arg: unknown): Promise<void>;
    abstract once(eventName: string, cb: EventCallback): void;
}
