UNPKG

@0xfacet/sdk

Version:

A toolkit for Facet blockchain integration.

65 lines (64 loc) 2.56 kB
"use client"; import { useMutation, } from "@tanstack/react-query"; import { getConnectorClient, } from "@wagmi/core"; import { mainnet, sepolia } from "viem/chains"; import { useConfig } from "wagmi"; import { bridgeAndCall as viemBridgeAndCall } from "../viem/bridgeAndCall"; async function bridgeAndCall(config, parameters) { const { account, chainId, connector, __mode, ethValue, bridgeAndCallConfig, ...rest } = parameters; let client; if (typeof account === "object" && account?.type === "local") client = config.getClient({ chainId }); else client = await getConnectorClient(config, { account: account ?? undefined, chainId, connector, }); if (client.chain.id !== mainnet.id && client.chain.id !== sepolia.id) { throw new Error("Connect to mainnet or sepolia"); } const hash = await viemBridgeAndCall(client, { ...rest, ...(account ? { account } : {}), chain: chainId ? { id: chainId } : null, }, ethValue, bridgeAndCallConfig); return hash; } function bridgeAndCallMutationOptions(config) { return { mutationFn(variables) { return bridgeAndCall(config, variables); }, mutationKey: ["bridgeAndCall"], }; } /** * React hook that provides functionality to bridge and write to a Facet contract. * * @template config - The wagmi Config type, defaults to ResolvedRegister["config"] * @template context - The context type for the mutation, defaults to unknown * * @param {UseBridgeAndCallParameters<config, context>} parameters - Configuration options * @param {Config | config | undefined} [parameters.config] - Optional wagmi configuration * @param {UseMutationParameters} [parameters.mutation] - Optional react-query mutation parameters * * @returns {UseBridgeAndCallReturnType<config, context>} Object containing: * - bridgeAndCall: Function to execute the contract write (non-async) * - bridgeAndCallAsync: Function to execute the contract write (async) * - Additional react-query mutation properties (isLoading, isSuccess, etc.) */ export function useBridgeAndCall(parameters = {}) { const { mutation } = parameters; const config = useConfig(parameters); const mutationOptions = bridgeAndCallMutationOptions(config); const { mutate, mutateAsync, ...result } = useMutation({ ...mutation, ...mutationOptions, }); return { ...result, bridgeAndCall: mutate, bridgeAndCallAsync: mutateAsync, }; }