import { Chain, Hex } from 'viem'; import { PrivateKeyAccount } from 'viem/accounts'; import { SignAuthorizationReturnType } from 'viem'; import { BundlerManager } from './bundler'; import { KernelAccountInstance, EntryPointVersion, Call } from '../lib/kernel-account'; import { ModuleType, SessionKeyPermission } from '../lib/kernel-modules'; import { SessionKeyInfo, SessionKeyPermissionRule } from '../lib/session-keys'; import { ModularSigner } from '@zerodev/permissions'; import { AA_SupportConfig } from '../lib/type'; export interface AAServiceConfig { bundlerProvider: 'pimlico' | 'etherspot' | 'custom'; apiKey?: string; customBundlerUrl?: string; aaConfig?: AA_SupportConfig; } export interface CreateAccountOptions { chain: Chain; owner: PrivateKeyAccount; entryPointVersion?: EntryPointVersion; aaConfig?: AA_SupportConfig; } export interface SendTransactionOptions { account: KernelAccountInstance; to: Hex; value?: bigint; data?: Hex; authorization?: SignAuthorizationReturnType; } export interface SendBatchTransactionOptions { account: KernelAccountInstance; calls: Call[]; authorization?: SignAuthorizationReturnType; } export interface WaitForReceiptOptions { userOpHash: Hex; chain: Chain; } export declare class AccountAbstractionService { private static instance; private bundlerManager; private aaConfig; private publicClientCache; private constructor(); static getInstance(config?: AAServiceConfig): AccountAbstractionService; static reset(): void; createAccount(options: CreateAccountOptions): Promise; isAccountDelegated(owner: PrivateKeyAccount, chain: Chain): Promise; createAuthorization(options: { owner: PrivateKeyAccount; chain: Chain; }): Promise; prepareCall(options: { to: Hex; value?: bigint; data?: Hex; }): Call; prepareContractCall(options: { to: Hex; data: Hex; value?: bigint; }): Call; sendTransaction(options: SendTransactionOptions): Promise; waitForReceipt(options: WaitForReceiptOptions): Promise; sendTransactionAndWait(options: SendTransactionOptions): Promise<{ userOpHash: Hex; receipt: any; }>; sendBatchTransaction(options: SendBatchTransactionOptions): Promise; sendBatchTransactionAndWait(options: SendBatchTransactionOptions): Promise<{ userOpHash: Hex; receipt: any; }>; getBalance(account: KernelAccountInstance): Promise; private getPublicClient; getBundlerInfo(chain: Chain): { provider: string; url: string; }; getBundlerClient(chain: Chain): any; getBundlerManager(chain: Chain): BundlerManager; prepareInstallModule(options: { account: KernelAccountInstance; moduleType: ModuleType; moduleAddress: Hex; initData?: Hex; }): Call; installModule(options: { account: KernelAccountInstance; moduleType: ModuleType; moduleAddress: Hex; initData?: Hex; }): Promise; prepareUninstallModule(options: { account: KernelAccountInstance; moduleType: ModuleType; moduleAddress: Hex; deInitData?: Hex; }): Call; uninstallModule(options: { account: KernelAccountInstance; moduleType: ModuleType; moduleAddress: Hex; deInitData?: Hex; }): Promise; isModuleInstalled(options: { account: KernelAccountInstance; moduleType: ModuleType; moduleAddress: Hex; }): Promise; prepareInstallSessionKey(options: { account: KernelAccountInstance; sessionKeyAddress: Hex; permissions: SessionKeyPermission[]; }): Call; createSessionKey(options: { account: KernelAccountInstance; sessionKeyAddress: Hex; permissions: SessionKeyPermission[]; }): Promise; prepareRevokeSessionKey(options: { account: KernelAccountInstance; sessionKeyAddress: Hex; }): Call; revokeSessionKey(options: { account: KernelAccountInstance; sessionKeyAddress: Hex; }): Promise; prepareInstallMultiSigValidator(options: { account: KernelAccountInstance; owners: Hex[]; threshold: number; }): Call; installMultiSigValidator(options: { account: KernelAccountInstance; owners: Hex[]; threshold: number; }): Promise; generateSessionKey(): Promise; createSessionKeyApproval(options: { sessionKeyAddress: Hex; sessionKeyPrivateKey: Hex; owner: PrivateKeyAccount; chain: Chain; entryPointVersion?: '0.6' | '0.7'; useSudoPolicy?: boolean; permissions?: SessionKeyPermissionRule[]; }): Promise; deserializeSessionKey(options: { approval: string; sessionKeySigner: ModularSigner; chain: Chain; entryPointVersion?: '0.6' | '0.7'; }): Promise>; createSessionKeyClient(options: { account: any; chain: Chain; bundlerUrl: string; paymasterUrl?: string; }): any; createUSDCTransferPermission(usdcAddress: Hex, maxAmount: string, destinationAddress: Hex): SessionKeyPermissionRule; createETHTransferPermission(maxValue: string): SessionKeyPermissionRule; private getAccountCacheKey; private getAuthorizationCacheKey; } export default AccountAbstractionService; export type { SessionKeyInfo, SessionKeyPermissionRule } from '../lib/session-keys';