@abstract-foundation/agw-react
Version:
Abstract Global Wallet React Components
63 lines • 2.64 kB
JavaScript
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