import type { Endpoint, RequestStatus } from '../../api/types/endpoint.interface';
import type { QueryOptions, QueryResult } from '../../api/types/query.interface';
export interface UseApiMutationResult<TParams, TData> {
    /** Запустить мутацию (ошибки не пробрасываются — смотри `error`/`isError`) */
    mutate: (params: TParams) => void;
    /** Запустить мутацию и дождаться результата (ошибки пробрасываются) */
    mutateAsync: (params: TParams) => Promise<QueryResult<TData, Error>>;
    /** Данные успешного ответа */
    data: TData | undefined;
    /** Ошибка мутации */
    error: Error | undefined;
    /** Текущий статус */
    status: RequestStatus;
    /** Мутация выполняется */
    isLoading: boolean;
    /** Мутация завершилась ошибкой */
    isError: boolean;
    /** Мутация завершилась успехом */
    isSuccess: boolean;
    /** Сбросить состояние к idle */
    reset: () => void;
}
/**
 * Хук для выполнения мутаций (POST/PUT/DELETE/PATCH) через эндпоинт ApiClient.
 *
 * В отличие от {@link useApiQuery}, запрос не стартует автоматически — его
 * запускает `mutate`/`mutateAsync`. Мутации не кэшируются (по REST-методу), а их
 * `invalidatesTags` инвалидируют кэш — активные `useApiQuery` соседних эндпоинтов
 * автоматически перезапросятся через шину инвалидации.
 *
 * @example
 * const { mutate, isLoading } = useApiMutation(endpoints.createUser)
 * mutate({ name: 'Alex' })
 */
export declare function useApiMutation<TParams extends Record<string, any>, TData>(endpoint: Endpoint<TParams, TData>, options?: QueryOptions): UseApiMutationResult<TParams, TData>;
