@0xfacet/sdk
Version:
A toolkit for Facet blockchain integration.
81 lines (80 loc) • 3.23 kB
JavaScript
;
"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,
};
}