import { DomainEvent, OutboxEvent } from '../types';
import { OutboxNotifier } from './outbox.notifier';
import { OutboxEventPersistenceClient, OutboxService } from './outbox.service';
export interface PublishDomainEventInput {
    eventName: string;
    sourceModule: string;
    aggregateType: string;
    aggregateId: string;
    payload?: Record<string, any>;
    metadata?: Record<string, any>;
}
export interface PublishDomainEventOptions {
    persistenceClient?: OutboxEventPersistenceClient;
}
export declare class DomainEventPublisher {
    private readonly outboxService;
    private readonly outboxNotifier;
    constructor(outboxService: OutboxService, outboxNotifier: OutboxNotifier);
    /**
     * Publish a domain event
     * Writes to durable outbox and notifies processor for immediate wakeup
     */
    publishEvent(input: PublishDomainEventInput, options?: PublishDomainEventOptions): Promise<OutboxEvent>;
    publishEvent(eventName: string, sourceModule: string, aggregateType: string, aggregateId: string, payload?: Record<string, any>, metadata?: Record<string, any>, options?: PublishDomainEventOptions): Promise<OutboxEvent>;
    /**
     * Publish multiple events in sequence
     */
    publishEvents(events: Array<DomainEvent | PublishDomainEventInput>, options?: PublishDomainEventOptions): Promise<OutboxEvent[]>;
    private enrichPayloadWithMetadata;
}
//# sourceMappingURL=domain-event.publisher.d.ts.map