import { CancelOptions, InfiniteData, InvalidateOptions, InvalidateQueryFilters, RefetchOptions, RefetchQueryFilters, ResetOptions, SetDataOptions, Updater } from '@tanstack/react-query';
import { TRPCClientError } from '@trpc/client';
import { AnyQueryProcedure, AnyRouter, DeepPartial, Filter, ProcedureOptions, ProtectedIntersection, inferProcedureInput } from '@trpc/server';
import { inferTransformedProcedureOutput } from '@trpc/server/shared';
import { DecoratedProxyTRPCContextProps, TRPCFetchInfiniteQueryOptions, TRPCFetchQueryOptions } from '../../internals/context';
import { TRPCContextState } from '../../internals/context';
declare type DecorateProcedure<TRouter extends AnyRouter, TProcedure extends AnyQueryProcedure> = {
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientfetchquery
     */
    fetch(input: inferProcedureInput<TProcedure>, opts?: TRPCFetchQueryOptions<inferProcedureInput<TProcedure>, TRPCClientError<TRouter>, inferTransformedProcedureOutput<TProcedure>>): Promise<inferTransformedProcedureOutput<TProcedure>>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientfetchinfinitequery
     */
    fetchInfinite(input: inferProcedureInput<TProcedure>, opts?: TRPCFetchInfiniteQueryOptions<inferProcedureInput<TProcedure>, TRPCClientError<TRouter>, inferTransformedProcedureOutput<TProcedure>>): Promise<InfiniteData<inferTransformedProcedureOutput<TProcedure>>>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientprefetchquery
     */
    prefetch(input: inferProcedureInput<TProcedure>, opts?: TRPCFetchQueryOptions<inferProcedureInput<TProcedure>, TRPCClientError<TRouter>, inferTransformedProcedureOutput<TProcedure>>): Promise<void>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientprefetchinfinitequery
     */
    prefetchInfinite(input: inferProcedureInput<TProcedure>, procedureOpts?: ProcedureOptions, opts?: TRPCFetchInfiniteQueryOptions<inferProcedureInput<TProcedure>, TRPCClientError<TRouter>, inferTransformedProcedureOutput<TProcedure>>): Promise<void>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientinvalidatequeries
     */
    invalidate(input?: DeepPartial<inferProcedureInput<TProcedure>>, filters?: InvalidateQueryFilters, options?: InvalidateOptions): Promise<void>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientrefetchqueries
     */
    refetch(input?: inferProcedureInput<TProcedure>, filters?: RefetchQueryFilters, options?: RefetchOptions): Promise<void>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientcancelqueries
     */
    cancel(input?: inferProcedureInput<TProcedure>, options?: CancelOptions): Promise<void>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientresetqueries
     */
    reset(input?: inferProcedureInput<TProcedure>, options?: ResetOptions): Promise<void>;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientsetquerydata
     */
    setData(
    /**
     * The input of the procedure
     */
    input: inferProcedureInput<TProcedure>, updater: Updater<inferTransformedProcedureOutput<TProcedure> | undefined, inferTransformedProcedureOutput<TProcedure> | undefined>, options?: SetDataOptions): void;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientsetquerydata
     */
    setInfiniteData(input: inferProcedureInput<TProcedure>, updater: Updater<InfiniteData<inferTransformedProcedureOutput<TProcedure>> | undefined, InfiniteData<inferTransformedProcedureOutput<TProcedure>> | undefined>, options?: SetDataOptions): void;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientgetquerydata
     */
    getData(input?: inferProcedureInput<TProcedure>): inferTransformedProcedureOutput<TProcedure> | undefined;
    /**
     * @link https://tanstack.com/query/v4/docs/reference/QueryClient#queryclientgetquerydata
     */
    getInfiniteData(input?: inferProcedureInput<TProcedure>): InfiniteData<inferTransformedProcedureOutput<TProcedure>> | undefined;
};
/**
 * this is the type that is used to add in procedures that can be used on
 * an entire router
 */
declare type DecorateRouter = {
    /**
     * Invalidate the full router
     * @link https://trpc.io/docs/v10/useContext#query-invalidation
     * @link https://react-query.tanstack.com/guides/query-invalidation
     */
    invalidate(input?: undefined, filters?: InvalidateQueryFilters, options?: InvalidateOptions): Promise<void>;
};
/**
 * @internal
 */
export declare type DecoratedProcedureUtilsRecord<TRouter extends AnyRouter> = {
    [TKey in keyof Filter<TRouter['_def']['record'], AnyRouter | AnyQueryProcedure>]: TRouter['_def']['record'][TKey] extends AnyRouter ? DecoratedProcedureUtilsRecord<TRouter['_def']['record'][TKey]> & DecorateRouter : DecorateProcedure<TRouter, TRouter['_def']['record'][TKey]>;
} & DecorateRouter;
export declare type CreateReactUtilsProxy<TRouter extends AnyRouter, TSSRContext> = ProtectedIntersection<DecoratedProxyTRPCContextProps<TRouter, TSSRContext>, DecoratedProcedureUtilsRecord<TRouter>>;
/**
 * @internal
 */
export declare function createReactQueryUtilsProxy<TRouter extends AnyRouter, TSSRContext>(context: TRPCContextState<AnyRouter, unknown>): ProtectedIntersection<DecoratedProxyTRPCContextProps<TRouter, TSSRContext>, DecoratedProcedureUtilsRecord<TRouter>>;
export {};
//# sourceMappingURL=utilsProxy.d.ts.map