import { Connection } from '@solana/web3.js';
import { WalletAdapterNetwork, SignerWalletAdapterProps, WalletAdapterProps } from '@solana/wallet-adapter-base';
import { BaseWalletAdapter, RegisterAccountInputs, Message, WithdrawInputs, SignatureDomain, AddOrderlyKeyInputs, SettleInputs } from '@orderly.network/core';
import { ChainNamespace, API } from '@orderly.network/types';

declare global {
    interface Window {
        __ORDERLY_VERSION__?: {
            [key: string]: string;
        };
    }
}
declare const _default: "2.5.3";

interface SolanaAdapterOption {
    provider: SolanaWalletProvider;
    address: string;
    chain: {
        id: number;
    };
}
interface SolanaWalletProvider {
    connection?: Connection;
    rpcUrl?: string;
    network: WalletAdapterNetwork;
    signMessage: (message: Uint8Array) => Promise<Uint8Array>;
    signTransaction: SignerWalletAdapterProps['signTransaction'];
    sendTransaction: WalletAdapterProps['sendTransaction'];
}

declare class DefaultSolanaWalletAdapter extends BaseWalletAdapter<SolanaAdapterOption> {
    chainNamespace: ChainNamespace;
    private _address;
    private _chainId;
    private _provider;
    private _connection;
    constructor();
    get address(): string;
    get chainId(): number;
    set chainId(chainId: number);
    get connection(): Connection;
    private setConfig;
    private lifecycleName;
    active(config: SolanaAdapterOption): void;
    deactivate(): void;
    update(config: SolanaAdapterOption): void;
    generateSecretKey(): string;
    uint8ArrayToHexString(uint8Array: Uint8Array): string;
    signMessage(message: Uint8Array): Promise<string>;
    generateRegisterAccountMessage(inputs: RegisterAccountInputs): Promise<Message>;
    generateWithdrawMessage(inputs: WithdrawInputs): Promise<Message & {
        domain: SignatureDomain;
    }>;
    generateAddOrderlyKeyMessage(inputs: AddOrderlyKeyInputs): Promise<Message>;
    generateSettleMessage(inputs: SettleInputs): Promise<Message & {
        domain: SignatureDomain;
    }>;
    getBalance(): Promise<bigint>;
    call(address: string, method: string, params: any[], options?: {
        abi: any;
    }): Promise<bigint>;
    sendTransaction(contractAddress: string, method: string, payload: {
        from: string;
        to?: string;
        data: any[];
        value?: bigint;
    }, options: {
        abi: any;
    }): Promise<string | undefined>;
    callOnChain(chain: API.NetworkInfos, address: string, method: string, params: any[], options: {
        abi: any;
    }): Promise<any>;
    pollTransactionReceiptWithBackoff(txHash: string, baseInterval?: number, maxInterval?: number, maxRetries?: number): Promise<any>;
}

export { DefaultSolanaWalletAdapter, type SolanaWalletProvider, _default as version };
