import { Signer, ethers } from "ethers";
import { MyWalletApi } from "./MyWalletApi";
import { HttpRpcClient } from "@account-abstraction/sdk/dist/src/HttpRpcClient";
import { Chains } from "./Constants";
import { ClientConfig, ChainConfig, PaymasterOptions } from "./interfaces/Banana.interface";
import { Web3Provider } from "@ethersproject/providers";
import { Wallet } from "./BananaWallet";
import { Banana4337Provider } from "./Banana4337Provider";
export declare class Banana {
    readonly chain: Chains;
    readonly signerOrProvider: Signer | Web3Provider;
    readonly _paymasterOptions?: PaymasterOptions[] | undefined;
    signer: Signer;
    provider: Web3Provider;
    Provider: ClientConfig;
    accountApi: MyWalletApi;
    httpRpcClient: HttpRpcClient;
    jsonRpcProvider: ethers.providers.JsonRpcProvider;
    walletAddress: string;
    bananaProvider: Banana4337Provider;
    jsonRpcProviderUrl: string;
    addresses: ChainConfig;
    network: Chains;
    currentPaymasterOption: PaymasterOptions | undefined;
    constructor(chain: Chains, signerOrProvider: Signer | Web3Provider, _paymasterOptions?: PaymasterOptions[] | undefined);
    /**
     * @method getTouchIdSafeWalletContractProxyFactory
     * @params { Signer | JsonRpcProvider } signerOrProvider
     * @returns { BananaAccountProxyFactory } TouchIdSafeWalletContractProxyFactory
     * create factory contract instance for factory contract factory types.
     */
    private getTouchIdSafeWalletContractProxyFactory;
    /**
     * @method getBananaProvider
     * @params none
     * @returns { ERC4337EthersProvider } bananaProvider
     * create ERC4337Provider instance of user's smart contract wallet. Used as BananaProvider.
     */
    getBananaProvider: () => Promise<Banana4337Provider>;
    /**
     * @method getTouchIdSafeWalletContractInitializer
     * @params none
     * @returns { string } TouchIdSafeWalletContractInitializer
     * create initializer which is callData for setupWithEntrypoint function
     */
    private getTouchIdSafeWalletContractInitializer;
    /**
     * @method connectWallet
     * @param none
     * @returns
     * sucess: returns wallet: BananaWallet
     * error: returns error
     * setup signers and provider along with it create walletmetadata corresponding to the new wallet request.
     */
    connectWallet: () => Promise<Wallet>;
}
