Function to create a session key for the connected Abstract Global Wallet.
createSession
method that can be used to create a session key for the connected Abstract Global Wallet.
// This example demonstrates how to create a session key for NFT minting on a specific contract.
// The session key:
// - Can only call the mint function on the specified NFT contract
// - Has a lifetime gas fee limit of 1 ETH
// - Expires after 24 hours
import { useAbstractClient } from "@abstract-foundation/agw-react";
import { LimitType } from "@abstract-foundation/agw-client/sessions";
import { toFunctionSelector, parseEther } from "viem";
import { privateKeyToAccount, generatePrivateKey } from "viem/accounts";
// Generate a new session key pair
const sessionPrivateKey = generatePrivateKey();
const sessionSigner = privateKeyToAccount(sessionPrivateKey);
export default function CreateSession() {
const { data: agwClient } = useAbstractClient();
async function createSession() {
if (!agwClient) return;
const { session } = await agwClient.createSession({
session: {
signer: sessionSigner.address,
expiresAt: BigInt(Math.floor(Date.now() / 1000) + 60 * 60 * 24),
feeLimit: {
limitType: LimitType.Lifetime,
limit: parseEther("1"),
period: BigInt(0),
},
callPolicies: [
{
target: "0xC4822AbB9F05646A9Ce44EFa6dDcda0Bf45595AA", // NFT contract
selector: toFunctionSelector("mint(address,uint256)"),
valueLimit: {
limitType: LimitType.Unlimited,
limit: BigInt(0),
period: BigInt(0),
},
maxValuePerUse: BigInt(0),
constraints: [],
}
],
transferPolicies: [],
},
});
}
}
Show Session Config Fields
Show Limit Type
LimitType.Unlimited
(0): No limitLimitType.Lifetime
(1): Total limit over the session lifetimeLimitType.Allowance
(2): Limit per time periodShow CallPolicy Type
Show Constraint Type
Unconstrained
(0)Equal
(1)Greater
(2)Less
(3)GreaterEqual
(4)LessEqual
(5)NotEqual
(6)Was this page helpful?