import { Result } from "../common/result"; export interface Query { readonly queryId?: string; readonly timestamp?: Date; readonly initiatedBy?: string; readonly correlationId?: string; } export declare abstract class BaseQuery implements Query { readonly queryId: string; readonly timestamp: Date; readonly initiatedBy?: string; readonly correlationId?: string; constructor(initiatedBy?: string, correlationId?: string); private generateQueryId; } export interface QueryHandler, TResult = unknown> { handle(query: TQuery): Promise>; } export interface QueryBus { dispatch(query: Query): Promise>; register, TResult>(queryType: new (...args: any[]) => TQuery, handler: QueryHandler): void; }