UNPKG

@coin-voyage/paykit

Version:

Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.

43 lines (42 loc) 1.84 kB
import { getDepositAddress } from "@coin-voyage/shared/payment"; import { useQuery } from "@tanstack/react-query"; import usePayContext from "../components/contexts/pay"; export function useDepositAddressQuery({ enabled }) { const { paymentState } = usePayContext(); const { payOrder, payToAddressCurrency: currency, payToAddress } = paymentState; const orderId = payOrder?.id; const chainId = currency?.chain_id; const tokenAddress = currency?.address; const isEnabled = enabled && Boolean(orderId && chainId && currency); return useQuery({ queryKey: ["paymentDetails", orderId, chainId, tokenAddress], enabled: isEnabled, retry: false, refetchOnWindowFocus: false, queryFn: async () => { if (!orderId || !chainId || !currency) { throw new Error("Missing required deposit parameters"); } const response = await payToAddress({ chain_id: chainId, address: tokenAddress, }); if (!response) throw new Error("no-response"); const depositAddress = getDepositAddress(response.data); if (!depositAddress) throw new Error("Deposit address is unavailable for this pay order"); return { ...currency, address: tokenAddress, depositAddress, amount: response.data.src.total.ui_amount, amount_display: response.data.src.total.ui_amount_display, ticker: response.data.src.ticker, expirationS: Math.floor(new Date(response.data.expires_at).getTime() / 1000), chainId, logoURI: currency.image_uri ?? "", // TODO: add fallback image }; }, }); }