/// <reference types="node" />
import { ULTIPA } from '.';
/**
 * 请求参数类型指定
 */
export declare namespace RequestParamType {
    /** 选择 */
    type SELECT_TYPE = string[] | string;
    /** 返回 */
    type RETURN_TYPE = string[] | string | string[][];
    /** 深度 */
    type DEPTH_TYPE = number | (number | string)[];
    /** 过滤 */
    type FILTER_TYPE = string;
    /** 方向 */
    type DIRECTION_TYPE = "left" | "right";
    /** 任务 */
    type TASK_STATUS = "*" | "pending" | "computing" | "writing" | "failed" | "done" | "stopped";
}
/**
 * 请求参数命名空间
 */
export declare namespace RequestType {
    enum TASK_STATUS {
        TASK_ALL = "*",
        TASK_PENDING = "pending",
        TASK_COMPUTING = "computing",
        TASK_WRITING = "writing",
        TASK_FAILED = "failed",
        TASK_DONE = "done",
        TASK_STOPPED = "stopped"
    }
    interface Graph {
        /** 图集名称 */
        name: string;
    }
    interface GraphSet {
        clusterId?: string;
        id?: string;
        name: string;
        totalNodes?: string;
        totalEdges?: string;
        description?: string;
        status?: string;
    }
    interface GetSchema {
        /** schema名称 */
        name: string;
    }
    interface DeleteSchema {
        /** schema名称 */
        name: string;
    }
    interface CreateSchemaBase {
        /** schema名称 */
        name: string;
        /** schema介绍 */
        desc?: string;
    }
    interface CreateSchema extends CreateSchemaBase {
        /** 点或者边 */
        dbType: ULTIPA.DBType;
    }
    interface Schema {
        /** schema名称 */
        name: string;
        /** schema介绍 */
        desc?: string;
        /** 点或者边 */
        dbType: ULTIPA.DBType;
    }
    interface UpdateSchema {
        /** schema原名称 */
        name: string;
        /** 点或边 */
        dbType: ULTIPA.DBType;
        /** schema新名称 */
        newName?: string;
        /** schema新介绍 */
        newDesc?: string;
    }
    interface Node {
        [key: string]: any;
    }
    interface Edge {
        [key: string]: any;
    }
    interface Truncate {
        /** 图集名 */
        graphName: string;
        /** schema名 */
        schema?: string;
        /** 点或边 */
        dbType?: ULTIPA.DBType;
    }
    interface CopyGraph {
        /** 图集来源 */
        fromGraphSetName: string;
        /** 新图集名称 */
        newGraphSetName: string;
    }
    interface UpdateGraph {
        /** 原图集 */
        oldGraphSetName: string;
        /** 新图集名 */
        newGraphSetName?: string;
        /** 新图集介绍 */
        newDesc?: string;
    }
    interface Auth {
        authType: ULTIPA.AuthenticateType;
        uql?: string;
    }
    /**
     * 通用请求参数
     */
    interface RequestConfig {
        /** 指定图集名称，创建connection pool一开始指定的图集，如果都没有，那么默认是 default图集 */
        graphSetName?: string;
        /** 指定集群ID */
        clusterId?: string;
        /** 时区 */
        timeZone?: string;
        /** utc offset */
        timeZoneOffset?: number;
        timestampToString?: boolean;
        /** 超时设置 */
        timeout?: number;
        threadNum?: number;
        /** stream方式处理结果 */
        stream?: Stream;
        /** 指定重试方式 */
        retry?: {
            /** 当前次数 */
            current?: number;
            /** 最大次数 */
            max?: number;
        };
        /** 使用指定host */
        useHost?: string;
        /** 使用master节点请求 */
        useMaster?: boolean;
        /** 每次返回包条目限制 */
        package_limit?: number;
        /** 是不是要刷新集群信息 */
        forceRefresh?: boolean;
        logUql?: boolean;
    }
    interface CommonStreamRequire extends RequestConfig {
        /** stream方式处理结果 */
        stream: Stream;
    }
    interface GraphPrivilege {
        [x: string]: string[];
    }
    interface PropertyPrivilege {
        node?: {
            read?: string[][];
            write?: string[][];
            deny?: string[][];
        };
        edge?: {
            read?: string[][];
            write?: string[][];
            deny?: string[][];
        };
    }
    interface CreateUser {
        /** 用户名 */
        username: string;
        /** 密码 */
        password: string;
        /** 图集权限 */
        graph_privileges?: GraphPrivilege;
        /** 系统权限 */
        system_privileges?: string[];
        /** 策略 */
        policies?: string[];
        /**属性权限 */
        property_privileges?: PropertyPrivilege;
    }
    interface GetUser {
        /** 用户名 */
        username: string;
    }
    interface AlterUser {
        /** 用户名 */
        username: string;
        /** 密码 */
        password?: string;
        /** 图集权限 */
        graph_privileges?: GraphPrivilege;
        /** 系统权限 */
        system_privileges?: string[];
        /** 策略 */
        policies?: string[];
        /**属性权限 */
        property_privileges?: PropertyPrivilege;
    }
    interface DeleteUser {
        /** 用户名 */
        username: string;
    }
    interface Policy {
        /** 策略名 */
        name: string;
        /** 图集权限 */
        graph_privileges?: GraphPrivilege;
        /** 系统权限 */
        system_privileges?: string[];
        /** 策略 */
        policies?: string[];
        /**属性权限 */
        property_privileges?: PropertyPrivilege;
    }
    interface CreatePolicy extends Policy {
    }
    interface GetPolicy {
        /** 策略名 */
        name: string;
    }
    interface Kill {
        /** 进程ID */
        id?: string;
        /** 所有进程 */
        all?: boolean;
    }
    interface UpdatePolicy {
        /** 策略名 */
        name: string;
        /** 图集权限 */
        graph_privileges?: GraphPrivilege;
        /** 系统权限 */
        system_privileges?: string[];
        /** 策略 */
        policies?: string[];
    }
    interface DeletePolicy {
        /** 策略名 */
        name: string;
    }
    interface GrantPolicy {
        /** 用户名 */
        username: string;
        /** 图集权限 */
        graph_privileges?: GraphPrivilege;
        /** 系统权限 */
        system_privileges?: string[];
        property_privileges?: PropertyPrivilege;
        /** 策略 */
        policies?: string[];
    }
    interface RevokePolicy {
        /** 用户名 */
        username: string;
        /** 图集权限 */
        graph_privileges?: GraphPrivilege;
        /** 系统权限 */
        system_privileges?: string[];
        property_privileges?: PropertyPrivilege;
        /** 策略 */
        policies?: string[];
    }
    interface ListAllProperty {
    }
    interface PropertyBase {
        /** schema名 */
        schema?: string;
    }
    interface ListProperty extends PropertyBase {
        /** 属性类型 */
        dbType: ULTIPA.DBType;
    }
    interface GetProperty extends ListProperty {
        /** 属性名 */
        name: string;
    }
    interface GetNodeEdgeProperty extends PropertyBase {
        /** 属性名 */
        name: string;
    }
    interface CreatePropertyBase {
        /** 属性名 */
        name: string;
        /** schema名 */
        schema: string;
        /** 类型 */
        type?: ULTIPA.PropertyType;
        subTypes?: ULTIPA.PropertyType[];
        /** 介绍 */
        description?: string;
        extra?: PropertyExtraInfo;
    }
    interface Property extends CreatePropertyBase {
    }
    interface CreateProperty extends CreatePropertyBase {
        /** 点边类型 */
        dbType: ULTIPA.DBType;
    }
    interface PropertyExtraInfo {
        precision?: number;
        scale?: number;
    }
    interface DeletePropertyBase {
        /** schema名称 */
        schema?: string;
        /** 属性名 */
        name: string;
    }
    interface DeleteProperty extends DeletePropertyBase {
        /** 数据库类型 */
        dbType: ULTIPA.DBType;
    }
    interface UpdatePropertyBase {
        /** schema名 */
        schema?: string;
        /** 属性名 */
        name: string;
        /** 新属性名 */
        newName?: string;
        /** 新属性介绍 */
        newDesc?: string;
    }
    interface UpdateProperty extends UpdatePropertyBase {
        /** 数据库点、边类型 */
        dbType: ULTIPA.DBType;
    }
    interface GetUserSetting {
        /** 用户名 */
        username: string;
        /** 指定类型 */
        type?: string;
    }
    interface SetUserSetting extends GetUserSetting {
        /** 数据 */
        data?: string;
    }
    interface Backup {
        backupPath: string;
    }
    /**
     * 用户uql返回的数据流方式
     */
    interface Stream {
        /** 开始回调 */
        onStart?: () => void;
        /** 关闭回调 */
        onClose?: () => void;
        /** 获取数据 */
        onData: (data: any) => void | Promise<any>;
        /** 结束回调 */
        onEnd: () => void;
        /** 错误回调 */
        onError?: (err: Error) => void;
        /** 暂停回调 */
        onPause?: () => void;
        /** Readable回调 */
        onReadable?: () => void;
        /** 恢复回调 */
        onResume?: () => void;
        /** 包大小限制 */
        package_limit?: number;
    }
    /**
     * 用户uql返回的数据流方式
     */
    interface UqlResponseStream {
        /** 开始回调 */
        onStart?: () => void;
        /** 关闭回调 */
        onClose?: () => void;
        /** 获取数据 */
        onData: (data: ULTIPA.UQLResponse) => Promise<void>;
        /** 结束回调 */
        onEnd: () => void;
        /** 错误回调 */
        onError?: (err: Error) => void;
        /** 暂停回调 */
        onPause?: () => void;
        /** Readable回调 */
        onReadable?: () => void;
        /** 恢复回调 */
        onResume?: () => void;
        /** 包大小限制 */
        package_limit?: number;
    }
    /** 导出 */
    interface ExportRequest {
        /** 导出类型 */
        dbType: ULTIPA.DBType;
        /** schema名 */
        schemaName: string;
        /** 条目限制 */
        limit: number;
        /** 属性列表 */
        selectPropertiesName: string[];
    }
    /** 下载 */
    interface DownloadBase {
        /** 任务ID */
        taskId: string;
    }
    interface Download extends DownloadBase {
        /** 下载文件名 */
        fileName: string;
    }
    /** 下载 */
    interface DownloadAll extends DownloadBase {
        /** 下载文件名 */
        fileName?: string;
    }
    /** 插入点 */
    interface InsertNodes {
        /** schema名 */
        schema: string;
        /** 数据 */
        rows: Node[];
        /** 覆盖插入 */
        overwrite?: boolean;
        /** 更新插入 */
        upsert?: boolean;
        /** 是否返回ID */
        silent?: boolean;
    }
    /** 插入边 */
    interface InsertEdges {
        /** schema名 */
        schema: string;
        /** 数据 */
        rows: Edge[];
        /** 覆盖插入 */
        overwrite?: boolean;
        /** 更新插入 */
        upsert?: boolean;
        /** 是否返回ID */
        silent?: boolean;
    }
    /** 安装算法 */
    interface _InstallAlgo {
        datas: {
            /** 文件字节 */
            chunk: Buffer;
            /** 文件名 */
            fileName: string;
            /** 文件md5值 */
            md5: string;
        }[];
        isExta?: boolean;
    }
    interface InstallAlgo {
        /** 按文件路径 */
        paths?: {
            /** 算法.so文件的目录 */
            algoFilePath: string;
            /** 算法.yml描述文件的目录 */
            infoFilePath: string;
        };
        /** 按详细数据 */
        datas?: _InstallAlgo;
    }
    interface InsertExta extends InstallAlgo {
    }
    /** 安装算法 */
    interface InstallAlgoAio extends InstallAlgo {
        isExta?: boolean;
    }
    /** 卸载算法 */
    interface UninstallAlgo {
        algoName: string;
    }
    /** 批量插入点 */
    interface InsertHugeNodes {
        /** schema名 */
        schemaName: string;
        /** 表头 */
        headers: string[];
        /** 数据 */
        rows: any[][];
    }
    interface InsertRequestConfig extends RequestConfig {
        insertType: ULTIPA.InsertType;
        createNodeIfNotExist?: boolean;
        silent: boolean;
    }
    /**
     * 获取插入类型
     */
    function GetInsertType(insertTypeNormal?: boolean, insertTypeOverwrite?: boolean, insertTypeUpsert?: boolean): 0 | 2 | 1;
    /** 批量插入边 */
    interface InsertHugeEdges extends InsertHugeNodes {
    }
    /** 查找点 */
    interface SearchNodes extends SearchBase {
        /** 过滤 */
        filter?: string;
    }
    /** 查找边 */
    interface SearchEdges extends SearchNodes {
    }
    /** 删除边 */
    interface DeleteEdges {
        /** 过滤 */
        filter?: string;
        /** 是否返回ID */
        silent?: boolean;
    }
    /** 删除点 */
    interface DeleteNodes extends DeleteEdges {
    }
    /** 更新点 */
    interface UpdateNodes {
        /** 过滤 */
        filter: string;
        /** 数据值 */
        values: object;
    }
    /** 更新边 */
    interface UpdateEdges extends UpdateNodes {
    }
    /** 清除任务 */
    interface ClearTask {
        /** 所有任务 */
        all?: boolean;
        /** 指定ID */
        id?: string;
        /** 指定名称 */
        name?: string;
        /** 任务状态 */
        status?: RequestParamType.TASK_STATUS;
    }
    /** 显示任务 */
    interface ShowTask extends ClearTask {
        /** 条目限制 */
        limit?: number;
    }
    /** 暂停任务 */
    interface PauseTask {
        /** 所有任务 */
        all: boolean;
        /** 指定ID */
        id: number;
    }
    /** 恢复任务 */
    interface ResumeTask extends PauseTask {
    }
    /** 暂停任务 */
    interface StopTask extends PauseTask {
    }
    /** 创建索引 */
    interface CreateIndexBase {
        /** schema名称 */
        schema?: string;
        /** 属性名 */
        propertyName: string;
    }
    interface CreateIndex extends CreateIndexBase {
        /** 数据库类型 */
        dbType: ULTIPA.DBType;
    }
    interface DropIndexBase extends CreateIndex {
    }
    interface DropIndex extends DropIndexBase {
        /** 数据库类型 */
        dbType: ULTIPA.DBType;
    }
    /** 创建全文索引 */
    interface CreateFullTextBase {
        /** schema名称 */
        schema?: string;
        /** 属性名 */
        propertyName: string;
        /** 全文名称 */
        name: string;
    }
    interface CreateFullText extends CreateFullTextBase {
        /** 数据库类型 */
        dbType: ULTIPA.DBType;
    }
    /** 删除全文索引 */
    interface DropFullText {
        /** 全文名称 */
        name: string;
        /** 数据库类型 */
        dbType: ULTIPA.DBType;
    }
    /** 属性加载到引擎 */
    interface LoadToEnginBase {
        /** schema名称 */
        schema?: string;
        /** 属性名 */
        name: string;
    }
    interface LoadToEngin extends LoadToEnginBase {
        /** 数据库类型 */
        dbType: ULTIPA.DBType;
    }
    /** 属性从引擎卸载 */
    interface UnloadFromEngin extends LoadToEngin {
    }
    /** 查找基类 */
    interface SearchBase {
        /** 别名 */
        as?: string;
        /** 返回 */
        return?: RequestParamType.RETURN_TYPE;
        /** 条目限制 */
        limit?: number;
    }
    /** AB查找 */
    interface SearchAb extends SearchBase {
        /** 路径起点的过滤条件 */
        src: RequestParamType.FILTER_TYPE;
        /** 路径终点的过滤条件 */
        dest: RequestParamType.FILTER_TYPE;
        /** 设置路径的深度  */
        depth: RequestParamType.DEPTH_TYPE;
        /**
         * 不指定边属性时，查询最短路径；
         * 指定边属性时，查询以该属性为权值的最小权重和路径（无该属性的边不构成路径）
         */
        shortest?: string;
        /** 中介点的过滤条件 */
        nodeFilter?: RequestParamType.FILTER_TYPE;
        /** 所有边的过滤条件 */
        edgeFilter?: RequestParamType.FILTER_TYPE;
        /** 升序 */
        pathAsc?: string;
        /** 降序 */
        pathDesc?: string;
        /** 边方向 */
        direction?: RequestParamType.DIRECTION_TYPE;
        /** 无环设置 */
        noCircle?: boolean;
    }
    /** 自动组网 */
    interface SearchAutoNet extends SearchBase {
        /** 起点 */
        src: RequestParamType.FILTER_TYPE;
        /** 终点 */
        dest?: RequestParamType.FILTER_TYPE;
        /** 深度 */
        depth: RequestParamType.DEPTH_TYPE;
        /** 最短路径查询 */
        shortest?: string;
        /** 中介点的过滤条件 */
        nodeFilter?: RequestParamType.FILTER_TYPE;
        /** 所有边的过滤条件 */
        edgeFilter?: RequestParamType.FILTER_TYPE;
        /** 无环设置 */
        noCircle?: boolean;
    }
    /** khop查找 */
    interface SearchKhop extends SearchBase {
        /** 起点 */
        src: RequestParamType.FILTER_TYPE;
        /** 终点 */
        depth: RequestParamType.DEPTH_TYPE;
        /** 中介点的过滤条件 */
        nodeFilter?: RequestParamType.FILTER_TYPE;
        /** 所有边的过滤条件 */
        edgeFilter?: RequestParamType.FILTER_TYPE;
        /** 边方向 */
        direction?: RequestParamType.DIRECTION_TYPE;
    }
    /**
     * 自动展开
     */
    interface Spread extends SearchBase {
        /** 起点 */
        src: RequestParamType.FILTER_TYPE;
        /** 深度 */
        depth: number;
        /** 中介点的过滤条件 */
        nodeFilter?: RequestParamType.FILTER_TYPE;
        /** 所有边的过滤条件 */
        edgeFilter?: RequestParamType.FILTER_TYPE;
        /** 边方向 */
        direction?: RequestParamType.DIRECTION_TYPE;
    }
}
export declare namespace ResponseType {
    interface GraphPrivilege {
        [name: string]: string[];
    }
    interface PropertyPrivilege {
        node?: {
            read?: string[][];
            write?: string[][];
            deny?: string[][];
        };
        edge?: {
            read?: string[][];
            write?: string[][];
            deny?: string[][];
        };
    }
    interface Algo {
        clusterId: string;
        name: string;
        param: {
            name: string;
            description: string;
            parameters: object;
            result_opt: string;
            version: string;
        };
        detail: string;
        result_opt: {
            can_realtime: boolean;
            can_write_back: boolean;
            can_visualization: boolean;
        };
    }
    interface Exta {
        author: string;
        detail: string;
        name: string;
        version: string;
    }
    interface User {
        username: string;
        create: string;
        lastLogin: string;
        graph_privileges: GraphPrivilege;
        system_privileges: string[];
        policies: string[];
        property_privileges: PropertyPrivilege;
    }
    interface Index {
        name: string;
        properties: string;
        status: string;
    }
    interface IndexMap {
        nodeIndex: Index[];
        edgeIndex: Index[];
    }
    interface Stat {
        cpuUsage: string;
        memUsage: string;
        expiredDate: string;
    }
    interface ClusterInfo extends ULTIPA.RaftPeerInfo {
        cpuUsage?: string;
        memUsage?: string;
        expiredDate?: string;
    }
    interface Property {
        schema: string;
        name: string;
        type: string;
        description?: string;
        lte?: "false" | "creating" | "true";
        extra?: RequestType.PropertyExtraInfo;
    }
    interface AllProperty {
        node: Property[];
        edge: Property[];
    }
    interface GraphSet {
        clusterId?: string;
        id: string;
        name: string;
        totalNodes: string;
        totalEdges: string;
        description: string;
        status: string;
    }
    interface Schema {
        name: string;
        description: string;
        properties: Property[];
        totalNodes: string;
        totalEdges: string;
    }
    interface AllSchema {
        nodeSchema: Schema[];
        edgeSchema: Schema[];
    }
    interface Privilege {
        graph_privileges: string[];
        system_privileges: string[];
    }
    interface Policy {
        name: string;
        policies: string[];
        graph_privileges: GraphPrivilege;
        system_privileges: string[];
        property_privileges: PropertyPrivilege;
    }
    interface Top {
        process_id: string;
        process_uql: string;
        duration: string;
    }
    interface InsertEdges {
        uuids: string[];
        ignore_indexes: number[];
        ignore_error_codes: number[];
    }
    interface InsertNodes extends InsertEdges {
        ids: string[];
    }
    interface Task {
        param: object;
        task_info: {
            task_id: string;
            algo_name: string;
            start_time: number;
            writing_start_time: number;
            end_time: number;
            time_cost: number;
            TASK_STATUS: number;
            status_code: string;
            engine_cost: number;
        };
        error_msg: string;
        result: any;
        return_type: {
            is_realtime: boolean;
            is_visualization: boolean;
            is_write_back: boolean;
        };
    }
}
