import { Guid } from '@cashfarm/lang';
import { Identity, IDomainEvent } from '../domain';
import { IESAggregateRoot } from './esAggregateRoot';
export interface IEventEnvelope {
    readonly id: Guid;
    readonly aggregateType: string;
    readonly aggregateId: Identity<any>;
    readonly aggregateVersion: number;
    /**
     * Fully Qualified Event Name
     *
     * format: "[package].[class]"
     *
     * @type {string}
     * @memberof IEventEnvelope
     */
    readonly eventType: string;
    readonly event: Object;
    readonly metadata?: Object;
    readonly createdAt: Date;
}
/**
 * This class wraps an event to allow it to be searchable by the aggregate id, type or event type.
 *
 * This is very useful when the event is stored on a database or event store
 */
export declare class EventEnvelope implements IEventEnvelope {
    readonly id: Guid;
    readonly aggregateType: string;
    readonly aggregateId: Identity<any>;
    readonly aggregateVersion: number;
    readonly eventType: string;
    readonly event: IDomainEvent;
    readonly metadata: Object;
    readonly createdAt: Date;
    constructor(id: Guid, aggregateType: string, aggregateId: Identity<any>, aggregateVersion: number, eventType: string, event: IDomainEvent, metadata?: Object, createdAt?: Date);
    static wrap(aggt: IESAggregateRoot<any>, event: IDomainEvent, metadata?: Object): EventEnvelope;
}
