@abstract-foundation/agw-client
Version:
Abstract Global Wallet Client SDK
48 lines • 2.19 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSession = createSession;
const viem_1 = require("viem");
const actions_1 = require("viem/actions");
const utils_1 = require("viem/utils");
const AGWAccount_js_1 = require("../abis/AGWAccount.js");
const SessionKeyValidator_js_1 = require("../abis/SessionKeyValidator.js");
const constants_js_1 = require("../constants.js");
const sessions_js_1 = require("../sessions.js");
const utils_js_1 = require("../utils.js");
async function createSession(client, publicClient, args) {
const { session, ...rest } = args;
const isDeployed = await (0, utils_js_1.isSmartAccountDeployed)(publicClient, client.account.address);
const hasModule = isDeployed ? await hasSessionModule(client) : false;
let transactionHash = undefined;
if (!hasModule) {
const encodedSession = (0, sessions_js_1.encodeSession)(session);
transactionHash = await (0, utils_1.getAction)(client, actions_1.writeContract, 'writeContract')({
address: client.account.address,
abi: AGWAccount_js_1.default,
functionName: 'addModule',
args: [(0, viem_1.concatHex)([constants_js_1.SESSION_KEY_VALIDATOR_ADDRESS, encodedSession])],
...rest,
});
}
else {
transactionHash = await (0, utils_1.getAction)(client, actions_1.writeContract, 'writeContract')({
address: constants_js_1.SESSION_KEY_VALIDATOR_ADDRESS,
abi: SessionKeyValidator_js_1.SessionKeyValidatorAbi,
functionName: 'createSession',
args: [session],
...rest,
});
}
return { transactionHash, session };
}
async function hasSessionModule(client) {
const validationHooks = await (0, utils_1.getAction)(client, actions_1.readContract, 'readContract')({
address: client.account.address,
abi: AGWAccount_js_1.default,
functionName: 'listHooks',
args: [true],
});
const hasSessionModule = validationHooks.some((hook) => hook === constants_js_1.SESSION_KEY_VALIDATOR_ADDRESS);
return hasSessionModule;
}
//# sourceMappingURL=createSession.js.map