import { ICommonObject, IFileUpload, INode, INodeData as INodeDataFromComponent, INodeParams } from 'flowise-components';
export type MessageType = 'apiMessage' | 'userMessage';
export declare enum chatType {
    INTERNAL = "INTERNAL",
    EXTERNAL = "EXTERNAL"
}
/**
 * Databases
 */
export interface IChatFlow {
    id: string;
    name: string;
    flowData: string;
    updatedDate: Date;
    createdDate: Date;
    deployed?: boolean;
    isPublic?: boolean;
    apikeyid?: string;
    analytic?: string;
    chatbotConfig?: string;
    apiConfig?: any;
}
export interface IChatMessage {
    id: string;
    role: MessageType;
    content: string;
    chatflowid: string;
    sourceDocuments?: string;
    usedTools?: string;
    fileAnnotations?: string;
    fileUploads?: string;
    chatType: string;
    chatId: string;
    memoryType?: string;
    sessionId?: string;
    createdDate: Date;
}
export interface ITool {
    id: string;
    name: string;
    description: string;
    color: string;
    iconSrc?: string;
    schema?: string;
    func?: string;
    updatedDate: Date;
    createdDate: Date;
}
export interface IAssistant {
    id: string;
    details: string;
    credential: string;
    iconSrc?: string;
    updatedDate: Date;
    createdDate: Date;
}
export interface ICredential {
    id: string;
    name: string;
    credentialName: string;
    encryptedData: string;
    updatedDate: Date;
    createdDate: Date;
}
export interface IVariable {
    id: string;
    name: string;
    value: string;
    type: string;
    updatedDate: Date;
    createdDate: Date;
}
export interface IComponentNodes {
    [key: string]: INode;
}
export interface IComponentCredentials {
    [key: string]: INode;
}
export interface IVariableDict {
    [key: string]: string;
}
export interface INodeDependencies {
    [key: string]: number;
}
export interface INodeDirectedGraph {
    [key: string]: string[];
}
export interface INodeData extends INodeDataFromComponent {
    inputAnchors: INodeParams[];
    inputParams: INodeParams[];
    outputAnchors: INodeParams[];
}
export interface IReactFlowNode {
    id: string;
    position: {
        x: number;
        y: number;
    };
    type: string;
    data: INodeData;
    positionAbsolute: {
        x: number;
        y: number;
    };
    z: number;
    handleBounds: {
        source: any;
        target: any;
    };
    width: number;
    height: number;
    selected: boolean;
    dragging: boolean;
}
export interface IReactFlowEdge {
    source: string;
    sourceHandle: string;
    target: string;
    targetHandle: string;
    type: string;
    id: string;
    data: {
        label: string;
    };
}
export interface IReactFlowObject {
    nodes: IReactFlowNode[];
    edges: IReactFlowEdge[];
    viewport: {
        x: number;
        y: number;
        zoom: number;
    };
}
export interface IExploredNode {
    [key: string]: {
        remainingLoop: number;
        lastSeenDepth: number;
    };
}
export interface INodeQueue {
    nodeId: string;
    depth: number;
}
export interface IDepthQueue {
    [key: string]: number;
}
export interface IMessage {
    message: string;
    type: MessageType;
}
export interface IncomingInput {
    question: string;
    history: IMessage[];
    overrideConfig?: ICommonObject;
    socketIOClientId?: string;
    chatId?: string;
    stopNodeId?: string;
    uploads?: IFileUpload[];
}
export interface IActiveChatflows {
    [key: string]: {
        startingNodes: IReactFlowNode[];
        endingNodeData?: INodeData;
        inSync: boolean;
        overrideConfig?: ICommonObject;
    };
}
export interface IActiveCache {
    [key: string]: Map<any, any>;
}
export interface IOverrideConfig {
    node: string;
    nodeId: string;
    label: string;
    name: string;
    type: string;
}
export type ICredentialDataDecrypted = ICommonObject;
export interface ICredentialReqBody {
    name: string;
    credentialName: string;
    plainDataObj: ICredentialDataDecrypted;
}
export interface ICredentialReturnResponse extends ICredential {
    plainDataObj: ICredentialDataDecrypted;
}
export interface IUploadFileSizeAndTypes {
    fileTypes: string[];
    maxUploadSize: number;
}
