import type { Api } from "../../../Api";
import { FetchPromise, type ModuleApi, type ResponseObject } from "../../../modules/ModuleApi";
import { type SWRConfiguration, type Middleware } from "swr";
export declare const useApiQuery: <Data, RefineFn extends (data: ResponseObject<Data>) => unknown = (data: ResponseObject<Data>) => Data>(fn: (api: Api) => FetchPromise<Data>, options?: SWRConfiguration & {
    enabled?: boolean;
    refine?: RefineFn;
}) => {
    promise: FetchPromise<Data>;
    key: string;
    api: Api;
    data: (RefineFn extends (data: ResponseObject<Data>) => infer R ? R : Data) | undefined;
    error: any;
    mutate: import("swr").KeyedMutator<RefineFn extends (data: ResponseObject<Data>) => infer R ? R : Data>;
    isValidating: boolean;
    isLoading: import("swr/_internal").IsLoadingResponse<Data_1, Config>;
};
/** @attention: highly experimental, use with caution! */
export declare const useApiInfiniteQuery: <Data, RefineFn extends (data: ResponseObject<Data>) => unknown = (data: ResponseObject<Data>) => Data>(fn: (api: Api, page: number) => FetchPromise<Data>, options?: SWRConfiguration & {
    refine?: RefineFn;
    pageSize?: number;
}) => {
    _data: (RefineFn extends (data: ResponseObject<Data>) => infer R ? R : Data)[] | undefined;
    data: never[];
    endReached: boolean;
    promise: FetchPromise<Data>;
    key: string;
    api: Api;
    size: number;
    setSize: (size: number | ((_size: number) => number)) => Promise<(RefineFn extends (data: ResponseObject<Data>) => infer R ? R : Data)[] | undefined>;
    mutate: import("swr/infinite").SWRInfiniteKeyedMutator<(RefineFn extends (data: ResponseObject<Data>) => infer R ? R : Data)[]>;
    error: any;
    isValidating: boolean;
    isLoading: import("swr/_internal").IsLoadingResponse<Data_1, Config>;
};
export declare const useInvalidate: (options?: {
    exact?: boolean;
}) => (arg?: string | ((api: Api) => FetchPromise<any> | ModuleApi<any>)) => Promise<any>;
/**
 * Simple middleware to only load on first mount.
 */
export declare const mountOnce: Middleware;
