// packages/dapp-kit/src/hooks/partner/useApproveToken.ts import type { FeeTokenApproveAction, HubChainKey, TxReturnType } from '@sodax/sdk'; import { useQueryClient } from '@tanstack/react-query'; import { useSodaxContext } from '../shared/useSodaxContext.js'; import type { MutationHookParams } from '../shared/types.js'; import { useSafeMutation, type SafeUseMutationResult } from '../shared/useSafeMutation.js'; import { unwrapResult } from '../shared/unwrapResult.js'; export type UseApproveTokenVars = Omit, 'raw'>; type ApproveTokenData = TxReturnType; /** * React hook to approve a token to the protocol-intents contract on Sonic with max allowance. * * Throws on SDK failure so React Query's native error model engages (`isError`, `error`, * `onError`, `retry`). Returns the unwrapped tx return value on success. */ export function useApproveToken({ mutationOptions, }: MutationHookParams = {}): SafeUseMutationResult< ApproveTokenData, Error, UseApproveTokenVars > { const { sodax } = useSodaxContext(); const queryClient = useQueryClient(); return useSafeMutation({ mutationKey: ['partner', 'approveToken'], ...mutationOptions, mutationFn: async vars => unwrapResult(await sodax.partners.feeClaim.approveToken({ ...vars, raw: false })), onSuccess: async (data, vars, ctx) => { const { params } = vars; queryClient.invalidateQueries({ queryKey: ['partner', 'feeClaim', 'isTokenApproved', params.srcChainKey, params.srcAddress, params.token], }); await mutationOptions?.onSuccess?.(data, vars, ctx); }, }); }