import { Abstraction } from "@webiny/di"; /** Base class for all domain events. */ export declare abstract class DomainEvent { abstract readonly eventType: string; readonly occurredAt: Date; readonly payload: TPayload extends void ? undefined : TPayload; constructor(payload: TPayload); abstract getHandlerAbstraction(): Abstraction>; } export interface IEventHandler = DomainEvent> { handle(event: TEvent): Promise; } export interface IEventPublisher { publish>(event: TEvent): Promise; } /** Publish domain events to registered handlers. */ export declare const EventPublisher: Abstraction; export declare namespace EventPublisher { type Interface = IEventPublisher; }