@abstract-foundation/agw-react
Version:
Abstract Global Wallet React Components
65 lines • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSessionMutationOptions = createSessionMutationOptions;
const constants_1 = require("@abstract-foundation/agw-client/constants");
const sessions_1 = require("@abstract-foundation/agw-client/sessions");
const core_1 = require("@wagmi/core");
const viem_1 = require("viem");
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 (0, core_1.getConnectorClient)(config, {
account: account_ ?? undefined,
chainId,
connector,
});
const account = client.account;
if (typeof account === 'undefined')
throw new viem_1.BaseError('Account not found');
const validationHooks = await (0, core_1.readContract)(config, {
address: account.address,
abi: constants_1.AGWAccountAbi,
functionName: 'listHooks',
args: [true],
});
const hasSessionModule = validationHooks.some((hook) => hook === constants_1.sessionKeyValidatorAddress);
let transactionHash = undefined;
if (!hasSessionModule) {
const encodedSession = (0, sessions_1.encodeSession)(session);
transactionHash = await (0, core_1.writeContract)(config, {
address: account.address,
abi: constants_1.AGWAccountAbi,
functionName: 'addModule',
args: [(0, viem_1.concatHex)([constants_1.sessionKeyValidatorAddress, encodedSession])],
account: account_,
chainId,
connector,
...rest,
});
}
else {
transactionHash = await (0, core_1.writeContract)(config, {
address: constants_1.sessionKeyValidatorAddress,
abi: sessions_1.SessionKeyValidatorAbi,
functionName: 'createSession',
args: [session],
account: account_,
chainId,
connector,
...rest,
});
}
return {
transactionHash,
session,
};
},
mutationKey: ['createSession'],
};
}
//# sourceMappingURL=createSession.js.map