import { Gateway, Network, Wallet } from 'fabric-network';
import { RedisPubSub } from 'graphql-redis-subscriptions';
import type { FTSearchParameters } from 'redis-modules-sdk';
import { Logger } from 'winston';
import type { Reducer, SaveFcn, Commit, FabricResponse, Paginated, RepoFcn, RepoFcn_Id, HandlerResponse } from '../../types';
import type { OutputCommit, QueryDatabase } from '.';
export declare type QueryHandlerOption = {
    connectionProfile: string;
    channelName: string;
    entityNames: string[];
    gateway: Gateway;
    logger?: Logger;
    network: Network;
    pubSub?: RedisPubSub;
    queryDatabase: QueryDatabase;
    reducers: Record<string, Reducer>;
    wallet: Wallet;
};
export declare type QueryHandler = {
    clearNotification: (option: {
        creator: string;
        entityName: string;
        id: string;
        commitId: string;
    }) => Promise<HandlerResponse<string[]>>;
    clearNotifications: (option: {
        creator: string;
        entityName?: string;
        id?: string;
        commitId?: string;
    }) => Promise<HandlerResponse<string[]>>;
    command_deleteByEntityId: (entityName: string) => RepoFcn_Id<FabricResponse>;
    command_getByEntityName: (entityName: string) => RepoFcn<Commit[]>;
    create: <TEvent>(entityName: string) => (option: {
        enrollmentId: string;
        id: string;
    }) => {
        save: SaveFcn<TEvent>;
    };
    disconnect: () => void;
    fullTextSearchCommit: (option: {
        query: string;
        cursor: number;
        pagesize: number;
        param?: FTSearchParameters;
    }) => Promise<HandlerResponse<Paginated<OutputCommit>>>;
    fullTextSearchEntity: <TOutputEntity>(option: {
        entityName: string;
        query: string;
        cursor: number;
        pagesize: number;
        param?: FTSearchParameters;
    }) => Promise<HandlerResponse<Paginated<TOutputEntity>>>;
    getByEntityName: <TEntity = any>(entityName: string) => RepoFcn<TEntity[]>;
    getById: <TEntity, TEvent>(entityName: string) => (option: {
        enrollmentId: string;
        id: string;
    }) => Promise<{
        currentState: TEntity;
        save: SaveFcn<TEvent>;
    }>;
    getCommitById: (entityName: string) => RepoFcn_Id<Commit[]>;
    getNotifications: (payload: {
        creator: string;
        entityName?: string;
        id?: string;
    }) => Promise<HandlerResponse<Record<string, string>>>;
    getNotification: (payload: {
        creator: string;
        entityName: string;
        id: string;
        commitId: string;
    }) => Promise<HandlerResponse<Record<string, string>>>;
    query_deleteCommitByEntityId: (entityName: string) => RepoFcn_Id<number>;
    query_deleteCommitByEntityName: (entityName: string) => RepoFcn<number>;
    query_deleteEntityByEntityName: (entityName: string) => RepoFcn<number>;
    reconcile: (payload: {
        entityName: string;
    }) => Promise<HandlerResponse<{
        key: string;
        status: string;
    }[]>>;
    reconciled: () => void;
    subscribeHub: (entityNames: string[]) => Promise<any>;
    unsubscribeHub: () => void;
};
