import { SegmentEvent, SegmentEventType } from './event';
import { User } from './user';
export declare type EventStage = 'triggered' | 'enriched' | 'delivered';
declare type PhaseDefinition<T extends EventStage, PhaseProperties extends Record<string, unknown>> = {
    /** An ID that uniquely identifies a trace. Must remain the same through all phases */
    id: string;
    stage: T;
    timestamp: string;
    /** The latest event object as of the current phase */
    event: SegmentEvent;
} & PhaseProperties;
export declare type TriggeredPhase = PhaseDefinition<'triggered', Record<string, unknown>>;
export declare type EnrichedPhase = PhaseDefinition<'enriched', Record<string, unknown>>;
export declare type DeliveredPhase = PhaseDefinition<'delivered', {
    destinations: string[];
}>;
export declare type EventPhase = TriggeredPhase | EnrichedPhase | DeliveredPhase;
export declare type EventPhaseLog = {
    [E in EventPhase as E['stage']]?: E;
};
export declare type EventRecord = {
    id: string;
    event: SegmentEvent;
    phases: EventPhaseLog;
};
export declare type InitConfig = {
    user?: User;
};
export declare type Inspector = {
    start: (config: InitConfig) => void;
    trace: (eventPhase: EventPhase) => void;
};
export declare type EventsFilter = {
    query: string;
    eventTypes: SegmentEventType[];
};
export declare type UIState = {
    eventsFilter: EventsFilter;
    selectedEventRecordId: EventRecord['id'];
};
export {};
