UNPKG

@0xfacet/sdk

Version:

A toolkit for Facet blockchain integration.

80 lines (79 loc) 3.12 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useWriteFacetContract = useWriteFacetContract; 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 writeFacetContract_1 = require("../viem/writeFacetContract"); async function writeFacetContract(config, parameters) { const { account, chainId, connector, mineBoost, __mode, ...rest } = parameters; let client; if (typeof account === "object" && account?.type === "local") client = config.getClient({ chainId }); else client = await (0, core_1.getConnectorClient)(config, { account: account ?? undefined, 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"); } let request; if (__mode === "prepared") request = rest; else { const { request: simulateRequest } = await (0, core_1.simulateContract)(config, { ...rest, account, chainId: client.chain.id === chains_1.mainnet.id ? 0xface7 : 0xface7a, }); request = simulateRequest; } const hash = await (0, writeFacetContract_1.writeFacetContract)(client, { ...request, ...(account ? { account } : {}), chain: chainId ? { id: chainId } : null, mineBoost, }); return hash; } function writeFacetContractMutationOptions(config) { return { mutationFn(variables) { return writeFacetContract(config, variables); }, mutationKey: ["writeFacetContract"], }; } /** * React hook that provides functionality to 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 {UseWriteFacetContractParameters<config, context>} parameters - Configuration options * @param {Config | config | undefined} [parameters.config] - Optional wagmi configuration * @param {UseMutationParameters} [parameters.mutation] - Optional react-query mutation parameters * * @returns {UseWriteFacetContractReturnType<config, context>} Object containing: * - writeFacetContract: Function to execute the contract write (non-async) * - writeFacetContractAsync: Function to execute the contract write (async) * - Additional react-query mutation properties (isLoading, isSuccess, etc.) */ function useWriteFacetContract(parameters = {}) { const { mutation } = parameters; const config = (0, wagmi_1.useConfig)(parameters); const mutationOptions = writeFacetContractMutationOptions(config); const { mutate, mutateAsync, ...result } = (0, react_query_1.useMutation)({ ...mutation, ...mutationOptions, }); return { ...result, writeFacetContract: mutate, writeFacetContractAsync: mutateAsync, }; }