zksync-sso
Version:
ZKsync Smart Sign On SDK
61 lines • 3.02 kB
JavaScript
import { encodeFunctionData } from "viem";
import { waitForTransactionReceipt } from "viem/actions";
import { getGeneralPaymasterInput, sendTransaction } from "viem/zksync";
import { SessionKeyValidatorAbi } from "../../../abi/SessionKeyValidator.js";
import { getTransactionWithPaymasterData } from "../../../paymaster/index.js";
import { noThrow } from "../../../utils/helpers.js";
export const createSession = async (client, args) => {
const callData = encodeFunctionData({
abi: SessionKeyValidatorAbi,
functionName: "createSession",
args: [args.sessionConfig],
});
const sendTransactionArgs = {
account: client.account,
to: args.contracts.session,
paymaster: args.paymaster?.address,
paymasterInput: args.paymaster?.address ? (args.paymaster?.paymasterInput || getGeneralPaymasterInput({ innerInput: "0x" })) : undefined,
data: callData,
gas: 10000000n, // TODO: Remove when gas estimation is fixed
// eslint-disable-next-line @typescript-eslint/no-explicit-any
};
const transactionWithPaymasterData = await getTransactionWithPaymasterData(client.chain.id, client.account.address, sendTransactionArgs, args.paymasterHandler);
const transactionHash = await sendTransaction(client, transactionWithPaymasterData);
if (args.onTransactionSent) {
noThrow(() => args.onTransactionSent?.(transactionHash));
}
const transactionReceipt = await waitForTransactionReceipt(client, { hash: transactionHash });
if (transactionReceipt.status !== "success")
throw new Error("createSession transaction reverted");
return {
transactionReceipt,
};
};
export const revokeSession = async (client, args) => {
const callData = encodeFunctionData({
abi: SessionKeyValidatorAbi,
functionName: "revokeKey",
args: [args.sessionId],
});
const sendTransactionArgs = {
account: client.account,
to: args.contracts.session,
paymaster: args.paymaster?.address,
paymasterInput: args.paymaster?.address ? (args.paymaster?.paymasterInput || getGeneralPaymasterInput({ innerInput: "0x" })) : undefined,
data: callData,
gas: 10000000n, // TODO: Remove when gas estimation is fixed
// eslint-disable-next-line @typescript-eslint/no-explicit-any
};
const transactionWithPaymasterData = await getTransactionWithPaymasterData(client.chain.id, client.account.address, sendTransactionArgs, args.paymasterHandler);
const transactionHash = await sendTransaction(client, transactionWithPaymasterData);
if (args.onTransactionSent) {
noThrow(() => args.onTransactionSent?.(transactionHash));
}
const transactionReceipt = await waitForTransactionReceipt(client, { hash: transactionHash });
if (transactionReceipt.status !== "success")
throw new Error("createSession transaction reverted");
return {
transactionReceipt,
};
};
//# sourceMappingURL=session.js.map