import { ContractType, EthereumNetwork } from '../../types/ethereum-network.types';
import { ethers } from 'ethers';
import { Call } from '../../types/eip5792.types';
import { Transaction } from '@solana/web3.js';
export interface ChainEventListener {
    onAccountChanged(): void;
    onChainChanged(chainId?: number): void;
}
export interface IProviderAdapter<ConnectorType = unknown> {
    initConnector(connector: ConnectorType): void;
    initSigner?(signer: ethers.Signer): void;
    init(chainId?: number): Promise<void>;
    initConfig?(config?: any): Promise<void> | void;
    connectToConnector(connector: ConnectorType): Promise<number>;
    disconnectFromConnector(): Promise<void>;
    connectAndPatchProvider(connector: ConnectorType): Promise<number>;
    getChainId(): number | undefined;
    waitForTransaction(chainId: number, transactionHash: string, confirmations: number): Promise<boolean>;
    signMessage(message: string | Uint8Array): Promise<string>;
    getAddress(): Promise<string>;
    setChainEventListener(chainEventListener: ChainEventListener): void;
    release(): void;
    getContract(chainId: number, contractType: ContractType, contractAddress?: string): ethers.Contract;
    getContractWithSigner(chainId: number, contract: ContractType, contractAddress?: string): ethers.Contract;
    getContractWithFetcher(chainId: number, contract: ContractType, contractAddress?: string): ethers.Contract;
    sendTransaction(tx: ethers.TransactionRequest): Promise<ethers.TransactionResponse>;
    switchNetwork(network: EthereumNetwork): Promise<unknown>;
    onAccountChanged(): Promise<unknown>;
    onChainChanged(chainId?: number): Promise<unknown>;
    isPermitterAvailable(): boolean;
    getGasPrice(chainId: number): Promise<bigint>;
    signTypedData(domain: ethers.TypedDataDomain, types: Record<string, ethers.TypedDataField[]>, value: Record<string, unknown>): Promise<string>;
    sendBatchCallsTransaction?(chainId: number, calls: Call[]): Promise<ethers.TransactionResponse>;
    supportsBatchCall?(chainId: number): Promise<boolean>;
    signTransactionWithoutBroadcast?(tx: Transaction): Promise<{
        signature: string;
        transactionMessageB64: string;
    }>;
    isSolanaLedger?(): boolean;
}
