Skip to main content
Version: SDK V4 (latest)

useSession

@biconomy/use-aaHook


@biconomy/use-aa / useSession

Description

Uses a previously created session (see here) which sends transactions in the context of a users smart account.

Parameters

type Transaction = {
to: string;
value: BigNumberish | string;
data: string;
};
type UseSessionProps = {
/** The BuildUserOpOptions options. See https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html for further detail */
options?: BuildUserOpOptions;
/** The whitelisted transaction */
transactions: Transaction | Transaction[];
/** The index of the relevant session leaf. Defaults to zero */
correspondingIndex?: number;
};

Returns

userOpReceipt

type UserOpResponse = {
userOpHash: string;
wait(_confirmations?: number): Promise<UserOpReceipt>;
waitForTxHash(): Promise<UserOpStatus>;
};

Example

import { useSession, useUserOpWait, Options } from "@biconomy/useAA";
import { polygonAmoy } from "viem/chains";
import { encodeFunctionData, parseAbi } from "wagmi";

export const UseSession = ({ smartAccountAddress }) => {
const { mutate, data: userOpResponse, error, isPending } = useSession();

const {
isLoading: waitIsLoading,
isSuccess: waitIsSuccess,
error: waitError,
data: waitData,
} = useUserOpWait(userOpResponse);

const mintTx = () =>
mutate({
transactions: {
to: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e",
data: encodeFunctionData({
abi: parseAbi(["function safeMint(address _to)"]),
functionName: "safeMint",
args: [smartAccountAddress],
}),
},
options: Options.Sponsored,
});

useEffect(() => {
if (waitData?.success === "true") {
console.log(waitData?.receipt?.transactionHash);
}
}, [waitData]);

return (
<ErrorGuard errors={[error, waitError]}>
<Button
title="Use Session to Mint"
onClickFunc={mintTx}
isLoading={isPending || waitIsLoading}
/>
</ErrorGuard>
);
};

Source

hooks/useSession.ts:87