@keypo/typescript-sdk
Version:
A TypeScript SDK for using Keypo
83 lines (82 loc) • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getKernelClient = getKernelClient;
const viem_1 = require("viem");
const ecdsa_validator_1 = require("@zerodev/ecdsa-validator");
const sdk_1 = require("@zerodev/sdk");
const constants_1 = require("@zerodev/sdk/constants");
// Helper to create a kernel client from a userSigner
async function getKernelClient(userSigner, chain, bundlerRpcUrl, authorization, debug) {
if (debug) {
console.log("[DEBUG] getKernelClient called with:", {
userSigner,
chain,
bundlerRpcUrl,
authorization
});
}
try {
const publicClient = (0, viem_1.createPublicClient)({
transport: (0, viem_1.http)(bundlerRpcUrl),
chain,
});
if (debug) {
console.log("[DEBUG] publicClient:", publicClient);
}
const account = await (0, ecdsa_validator_1.create7702KernelAccount)(publicClient, {
signer: userSigner,
entryPoint: (0, constants_1.getEntryPoint)("0.7"),
kernelVersion: constants_1.KERNEL_V3_3,
eip7702Auth: authorization
});
if (debug) {
console.log("[DEBUG] kernelAccount:", account);
}
const paymasterClient = (0, sdk_1.createZeroDevPaymasterClient)({
chain,
transport: (0, viem_1.http)(bundlerRpcUrl),
});
if (debug) {
console.log("[DEBUG] paymasterClient:", paymasterClient);
}
const kernelClient = (0, ecdsa_validator_1.create7702KernelAccountClient)({
account,
chain,
bundlerTransport: (0, viem_1.http)(bundlerRpcUrl),
paymaster: paymasterClient,
client: publicClient,
userOperation: {
estimateFeesPerGas: async ({ bundlerClient }) => {
try {
return await (0, sdk_1.getUserOperationGasPrice)(bundlerClient);
}
catch (error) {
if (debug) {
console.warn("[DEBUG] Gas price estimation failed, using fallback:", error.message);
}
// Fallback gas price estimation
return {
maxFeePerGas: BigInt(2000000000), // 2 gwei
maxPriorityFeePerGas: BigInt(1000000000), // 1 gwei
};
}
}
}
});
if (debug) {
console.log("[DEBUG] kernelClient:", kernelClient);
}
return kernelClient;
}
catch (error) {
console.error("Error creating kernel client:", error);
if (debug) {
console.error("Error details:", {
message: error.message,
cause: error.cause,
stack: error.stack
});
}
throw error;
}
}