import { BigNumber, Contract, ethers, BytesLike, BigNumberish } from "ethers";
import { Transaction, UserOperation } from "@abstraxn/core-types";
import { AbstraxnSmartAccountConfig } from "../utils/Interfaces";
import { AbstraxnTokenPaymasterRequest, BuildUserOpOptions, EstimateUserOpGasParams } from "../utils/Types";
import { ModuleInfo, SendUserOpParams } from "@abstraxn/modules";
import { UserOpResponse } from "@abstraxn/bundler";
import { IPaymaster } from "@abstraxn/paymaster";
type UserOperationKey = keyof UserOperation;
export declare class AbstraxnSmartAccount {
    private bundler?;
    private chainId;
    private provider;
    private activeValidationModule;
    private defaultValidationModule;
    protected signer: ethers.Signer | undefined;
    private entryPointAddress;
    private implementationAddress;
    private smartFactoryAddress;
    private proxyCreationCode;
    private fallbackHandlerAddress;
    paymaster?: IPaymaster;
    private index?;
    constructor(_config: AbstraxnSmartAccountConfig);
    static create(abstraxnSmartAccountConfig: AbstraxnSmartAccountConfig): Promise<AbstraxnSmartAccount>;
    getAccountAddress(): Promise<string>;
    isProviderDefined(): boolean;
    private isContractDeployedCache;
    isAccountDeployed(address: string): Promise<boolean>;
    getInitCode(): Promise<string>;
    getAccountInitCode(): Promise<string>;
    private getCounterFactualAddress;
    _getAccountContract(): Promise<Contract>;
    getNonce(nonceKey?: number): Promise<BigNumber>;
    private getBuildUserOpNonce;
    isActiveValidationModuleDefined(): boolean;
    getDummySignature(params?: ModuleInfo): Promise<string>;
    private getGasFeeValues;
    encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise<string>;
    encodeExecuteBatch(to: Array<string>, value: Array<BigNumberish>, data: Array<BytesLike>): Promise<string>;
    validateUserOp(userOp: Partial<UserOperation>, requiredFields: UserOperationKey[]): boolean;
    getVerificationGasLimit(initCode: BytesLike): Promise<BigNumber>;
    getCallGasLimit(userOp: Partial<UserOperation>): Promise<BigNumber>;
    estimateCreationGas(initCode?: string): Promise<BigNumberish>;
    getPreVerificationGas(userOp: Partial<UserOperation>): Promise<BigNumber>;
    calculateUserOpGasValues(userOp: Partial<UserOperation>): Promise<Partial<UserOperation>>;
    estimateUserOpGas(params: EstimateUserOpGasParams): Promise<Partial<UserOperation>>;
    buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise<Partial<UserOperation>>;
    sendUserOp(userOp: Partial<UserOperation>, params?: SendUserOpParams): Promise<UserOpResponse>;
    signUserOp(userOp: Partial<UserOperation>, params?: SendUserOpParams): Promise<UserOperation>;
    sendSignedUserOp(userOp: UserOperation, params?: SendUserOpParams): Promise<UserOpResponse>;
    getUserOpHash(userOp: Partial<UserOperation>): Promise<string>;
    private validateUserOpAndPaymasterRequest;
    buildTokenPaymasterUserOp(userOp: Partial<UserOperation>, tokenPaymasterRequest: AbstraxnTokenPaymasterRequest): Promise<Partial<UserOperation>>;
    enableModule(moduleAddress: string): Promise<UserOpResponse>;
    getEnableModuleData(moduleAddress: string): Promise<Transaction>;
    getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise<Transaction>;
    disableModule(prevModule: string, moduleAddress: string): Promise<UserOpResponse>;
    getDisableModuleData(prevModule: string, moduleAddress: string): Promise<Transaction>;
    isModuleEnabled(moduleName: string): Promise<boolean>;
    private validThru;
    getSignForMultiSigWallet(signer: ethers.Wallet, userOp: Partial<UserOperation>): Promise<string>;
    buildSignatureBytes(signs: string[]): Promise<string>;
}
export {};
