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