UNPKG

@0xfacet/sdk

Version:

A toolkit for Facet blockchain integration.

81 lines (80 loc) 3.23 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSendFacetTransaction = useSendFacetTransaction; const react_query_1 = require("@tanstack/react-query"); const core_1 = require("@wagmi/core"); const chains_1 = require("viem/chains"); const wagmi_1 = require("wagmi"); const sendFacetTransaction_1 = require("../viem/sendFacetTransaction"); async function sendTransaction(config, parameters) { const { account, chainId, connector, gas: gas_, mineBoost, ...rest } = parameters; let client; if (typeof account === "object" && account?.type === "local") client = config.getClient({ chainId }); else client = await (0, core_1.getConnectorClient)(config, { account, chainId, connector }); if (client.chain.id !== chains_1.mainnet.id && client.chain.id !== chains_1.sepolia.id) { throw new Error("Connect to mainnet or sepolia"); } const hash = await (0, sendFacetTransaction_1.sendFacetTransaction)(client, { ...rest, ...(account ? { account } : {}), chain: chainId ? { id: chainId } : null, mineBoost, }); return hash; } function sendTransactionMutationOptions(config) { return { mutationFn(variables) { return sendTransaction(config, variables); }, mutationKey: ["sendTransaction"], }; } /** * Hook for sending Facet transactions on Ethereum mainnet or Sepolia testnet. * * This hook provides a convenient way to send transactions through the Facet SDK * using wagmi and viem. It supports both synchronous and asynchronous transaction * submission methods. * * @template config - The wagmi Config type * @template context - The mutation context type * * @param {UseSendFacetTransactionParameters<config, context>} parameters - Configuration options * @param {config} [parameters.config] - The wagmi config to use * @param {UseMutationParameters} [parameters.mutation] - React Query mutation options * * @returns {UseSendFacetTransactionReturnType<config, context>} - Mutation result and transaction methods * @returns {SendTransactionMutate<config, context>} returns.sendFacetTransaction - Function to send a transaction * @returns {SendTransactionMutateAsync<config, context>} returns.sendFacetTransactionAsync - Function to send a transaction that returns a promise * * @throws Will throw an error if connected to a chain other than mainnet or Sepolia * * @example * const { sendFacetTransaction, isLoading, isSuccess, data } = useSendFacetTransaction(); * * // Send a transaction * sendFacetTransaction({ * to: '0x...', * value: parseEther('0.1'), * data: '0x...', * mineBoost: '0x01' // Optional: increase FCT mining amount * }); */ function useSendFacetTransaction(parameters = {}) { const { mutation } = parameters; const config = (0, wagmi_1.useConfig)(parameters); const mutationOptions = sendTransactionMutationOptions(config); const { mutate, mutateAsync, ...result } = (0, react_query_1.useMutation)({ ...mutation, ...mutationOptions, }); return { ...result, sendFacetTransaction: mutate, sendFacetTransactionAsync: mutateAsync, }; }