/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/connection" />
import { Document, Types } from 'mongoose';
export declare enum LogType {
    Event = "Event",
    Batch = "Batch",
    Trigger = "Trigger"
}
export interface EventDoc extends Document {
    _id: Types.ObjectId;
    type: LogType.Event;
    parentId: Types.ObjectId;
    durableName?: string;
    clientGroup: string;
    subject: string;
    data: any;
    republish: {
        targetClientGroup: string;
        createdAt: Date;
    }[];
    createdAt: Date;
}
export interface BatchDoc extends Document {
    _id: Types.ObjectId;
    type: LogType.Batch;
    parentEventIds: Types.ObjectId[];
    durableName: string;
    clientGroup: string;
    subject: string;
    processTime?: number;
    createdAt: Date;
}
export interface TriggerDoc extends Document {
    _id: Types.ObjectId;
    type: LogType.Trigger;
    name: string;
    variables?: any;
    query?: string;
    userId?: Types.ObjectId;
    createdAt: Date;
}
export declare const Log: import("mongoose").Model<EventDoc | BatchDoc | TriggerDoc, {}, {}, {}>;
export interface Event<Subjects> {
    subject: Subjects;
    data: any;
}
export declare const createEvent: <T extends Event<string>>(data: {
    parentId: Types.ObjectId;
    durableName?: string | undefined;
    clientGroup: string;
    subject: T["subject"];
    data: T["data"];
}) => EventDoc;
export interface BatchInput {
    parentEventIds: Types.ObjectId[];
    durableName: string;
    clientGroup: string;
    subject: string;
}
export declare const createBatch: (data: BatchInput) => {
    batch: BatchDoc;
    catchError: (error: Error) => void;
};
export interface TriggerInput {
    name: string;
    variables?: any;
    query?: string;
    userId?: Types.ObjectId;
}
export declare const createTrigger: (data: TriggerInput) => {
    trigger: TriggerDoc;
    catchTriggerError: (error: Error) => void;
};
