export type SchemaChild = string | EventProperty | SchemaChild[];
export interface EventProperty {
    propertyName: string;
    propertyType: string;
    encryptedPropertyValue?: string;
    children?: SchemaChild;
    failedEventIds?: string[];
    passedEventIds?: string[];
}
export interface BaseBody {
    appName: string;
    appVersion: string;
    libVersion: string;
    libPlatform: string;
    messageId: string;
    createdAt: string;
    sessionId: string;
    publicEncryptionKey?: string;
}
export interface EventSchemaBody extends BaseBody {
    type: 'event';
    streamId: string;
    eventName: string;
    eventProperties: Array<EventProperty>;
    eventId: string | null;
    eventHash: string | null;
    eventSpecMetadata?: EventSpecMetadata;
}
export interface PropertyConstraintWire {
    t: string | Record<string, PropertyConstraintWire>;
    r: boolean;
    l?: boolean;
    v?: string[] | Record<string, string[]>;
    min?: number;
    max?: number;
}
export interface EventSpecMetadata {
    schemaId: string;
    branchId: string;
    latestActionId: string;
    sourceId?: string;
}
export interface EventSpecResponseWire {
    events: Array<EventSpecWire>;
    metadata: EventSpecMetadata;
}
export interface EventSpecWire {
    b: string;
    id: string;
    vids: string[];
    p: Record<string, PropertyConstraintWire>;
}
export interface EventSpec {
    events: Array<Event>;
    metadata: EventSpecMetadata;
}
export interface Event {
    branchId: string;
    baseEventId: string;
    variantIds: string[];
    props: Record<string, PropertyConstraint>;
}
export interface PropertyConstraint {
    type: string;
    required: boolean;
    isList?: boolean;
    pinnedValues?: Record<string, string[]>;
    allowedValues?: Record<string, string[]>;
    minMaxRanges?: Record<string, string[]>;
    children?: Record<string, PropertyConstraint>;
}
export interface PropertyValidationResult {
    passedEventIds?: string[];
    failedEventIds?: string[];
    children?: Record<string, PropertyValidationResult>;
}
export interface ValidationResult {
    metadata: EventSpecMetadata;
    propertyResults: Record<string, PropertyValidationResult>;
}
export type RuntimePropertyValue = string | number | boolean | null | undefined | object | Array<RuntimePropertyValue>;
export type RuntimeProperties = Record<string, RuntimePropertyValue>;
