import { Message, Response } from "@truffle/dashboard-message-bus-common";
import { DashboardMessageBusConnection } from "lib/connection";
import { TypedEmitter } from "tiny-typed-emitter";
import { SubscriptionOptions } from "../";
interface ReceivedMessageLifecycleOptions<MessageType extends Message> {
    message: MessageType;
    connection: DashboardMessageBusConnection;
}
interface DashboardMessageBusSubscriptionEvents<MessageType extends Message> {
    message: (messageLifecycle: ReceivedMessageLifecycle<MessageType>) => void;
    end: () => void;
}
export type EvaluateMessageOptions<MessageType extends Message> = ReceivedMessageLifecycleOptions<MessageType>;
export declare class DashboardMessageBusSubscription<MessageType extends Message = Message> extends TypedEmitter<DashboardMessageBusSubscriptionEvents<MessageType>> {
    private _predicate;
    private _ended;
    constructor({ id, type }: SubscriptionOptions);
    _evaluateMessage({ message, connection }: EvaluateMessageOptions<MessageType>): void;
    _end(): void;
}
export declare class ReceivedMessageLifecycle<MessageType extends Message> {
    readonly message: MessageType;
    private _connection;
    private _responded;
    constructor({ message, connection }: ReceivedMessageLifecycleOptions<MessageType>);
    respond<ResponseType extends Response>({ payload }: {
        payload: ResponseType["payload"];
    }): Promise<void>;
}
export {};
