@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
JavaScript
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
};
},
});
}