import { Context, Provider } from 'react';
import type { IAnyModelType } from 'mobx-state-tree/dist/types/complex-types/model';
import type { createUseQueryHook } from 'mst-gql';
import type { QueryLike, UseQueryHookOptions } from 'mst-gql/dist/react';
import type { MSTGQLStore } from 'mst-gql/dist/MSTGQLStore';
export declare type AppStoreConfig = {
    store: IAnyModelType;
    useQuery: ReturnType<typeof createUseQueryHook>;
};
declare const HamsterContext: Context<AppStoreConfig>;
declare const HamsterProvider: Provider<AppStoreConfig>;
declare function useAppStore(): any;
declare function useAppStoreConfig(): AppStoreConfig;
/**
 * Expose the useQuery of AppStoreConfig so that it can be used just like the original one.
 * @param query
 * @param options
 */
declare function useQuery<STORE extends typeof MSTGQLStore.Type, DATA>(query?: QueryLike<STORE, DATA>, options?: UseQueryHookOptions<STORE>): import("mst-gql").UseQueryHookResult<{
    __queryCache: import("mobx-state-tree").IMSTMap<import("mobx-state-tree").IType<any, any, any>> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IMapType<import("mobx-state-tree").IType<any, any, any>>, [undefined]>>;
} & import("mobx-state-tree/dist/types/complex-types/model").NonEmptyObject & {
    ssr: boolean;
    __promises: Map<string, Promise<unknown>>;
    __afterInit: boolean;
    gqlHttpClient: import("mst-gql/dist/MSTGQLStore").RequestHandler<any>;
    gqlWsClient: SubscriptionClient;
} & {
    merge: (data: unknown) => any;
    deflate: (data: unknown) => any;
    mutate: <T>(mutation: string | import("graphql").DocumentNode, variables?: any, optimisticUpdate?: (() => void) | undefined) => import("mst-gql").Query<T>;
    query: <T_1>(query: string | import("graphql").DocumentNode, variables?: any, options?: import("mst-gql").QueryOptions | undefined) => import("mst-gql").Query<T_1>;
    subscribe: <T_2 = any>(query: string | import("graphql").DocumentNode, variables?: any, onData?: ((item: T_2) => void) | undefined, onError?: ((error: Error) => void) | undefined) => () => void;
    rawRequest: (query: string, variables: any) => Promise<any>;
    setHttpClient: (value: import("mst-gql/dist/MSTGQLStore").RequestHandler<any>) => void;
    setWsClient: (value: SubscriptionClient) => void;
    __pushPromise(promise: Promise<{}>, queryKey: string): void;
    __runInStoreContext<T_3>(fn: () => T_3): T_3;
    __cacheResponse(key: string, response: any): void;
    __onAfterInit(): void;
} & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree/dist/types/complex-types/model").IModelType<{
    __queryCache: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IMapType<import("mobx-state-tree").IType<any, any, any>>, [undefined]>;
}, {
    ssr: boolean;
    __promises: Map<string, Promise<unknown>>;
    __afterInit: boolean;
    gqlHttpClient: import("mst-gql/dist/MSTGQLStore").RequestHandler<any>;
    gqlWsClient: SubscriptionClient;
} & {
    merge: (data: unknown) => any;
    deflate: (data: unknown) => any;
    mutate: <T>(mutation: string | import("graphql").DocumentNode, variables?: any, optimisticUpdate?: (() => void) | undefined) => import("mst-gql").Query<T>;
    query: <T_1>(query: string | import("graphql").DocumentNode, variables?: any, options?: import("mst-gql").QueryOptions | undefined) => import("mst-gql").Query<T_1>;
    subscribe: <T_2 = any>(query: string | import("graphql").DocumentNode, variables?: any, onData?: ((item: T_2) => void) | undefined, onError?: ((error: Error) => void) | undefined) => () => void;
    rawRequest: (query: string, variables: any) => Promise<any>;
    setHttpClient: (value: import("mst-gql/dist/MSTGQLStore").RequestHandler<any>) => void;
    setWsClient: (value: SubscriptionClient) => void;
    __pushPromise(promise: Promise<{}>, queryKey: string): void;
    __runInStoreContext<T_3>(fn: () => T_3): T_3;
    __cacheResponse(key: string, response: any): void;
    __onAfterInit(): void;
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>, DATA>;
export { useAppStore, useQuery, useAppStoreConfig, HamsterContext, HamsterProvider };
