UNPKG

@abstract-foundation/agw-react

Version:
63 lines 2.64 kB
import { AGWAccountAbi, sessionKeyValidatorAddress, } from '@abstract-foundation/agw-client/constants'; import { encodeSession, SessionKeyValidatorAbi, } from '@abstract-foundation/agw-client/sessions'; import { getConnectorClient, readContract, writeContract } from '@wagmi/core'; import { BaseError, concatHex, } from 'viem'; import {} from 'wagmi'; export function createSessionMutationOptions(config) { return { mutationFn: async (variables) => { const { session, account: account_, chainId, connector, ...rest } = variables; let client; if (account_ && typeof account_ === 'object' && account_.type === 'local') client = config.getClient({ chainId }); else client = await getConnectorClient(config, { account: account_ ?? undefined, chainId, connector, }); const account = client.account; if (typeof account === 'undefined') throw new BaseError('Account not found'); const validationHooks = await readContract(config, { address: account.address, abi: AGWAccountAbi, functionName: 'listHooks', args: [true], }); const hasSessionModule = validationHooks.some((hook) => hook === sessionKeyValidatorAddress); let transactionHash = undefined; if (!hasSessionModule) { const encodedSession = encodeSession(session); transactionHash = await writeContract(config, { address: account.address, abi: AGWAccountAbi, functionName: 'addModule', args: [concatHex([sessionKeyValidatorAddress, encodedSession])], account: account_, chainId, connector, ...rest, }); } else { transactionHash = await writeContract(config, { address: sessionKeyValidatorAddress, abi: SessionKeyValidatorAbi, functionName: 'createSession', args: [session], account: account_, chainId, connector, ...rest, }); } return { transactionHash, session, }; }, mutationKey: ['createSession'], }; } //# sourceMappingURL=createSession.js.map