import { type AccountConfig } from '../consts.js';
import { Provider as StarknetProvider } from 'starknet';
import { WALLET_API } from '@starknet-io/types-js';
import { type AccountInterface } from 'starknet';
export declare const WalletWeights: Record<string, number>;
export type AccountProvider = {
    connect(): Promise<any>;
    setupSession(): Promise<StoredSession | void>;
    loadSession(storage: StoredSession): Promise<void>;
    getAccount(): AccountInterface | undefined;
    getWalletAccount(): AccountInterface | undefined;
    supportsSession(): boolean;
    disconnect(): Promise<void>;
};
export type ConnectedEvent = {
    type: 'connected';
    provider: AccountProvider;
};
export type DisconnectedEvent = {
    type: 'disconnected';
};
export type ChainChangedEvent = {
    type: 'chain_change';
    chainId: string;
};
export type Event = ConnectedEvent | DisconnectedEvent | ChainChangedEvent;
export type EventListener = (event: Event) => void;
export declare function Provider(wallet: WALLET_API.StarknetWindowObject): Promise<AccountProvider | null>;
export interface StoredSession {
    address: string;
    privateKey: string;
    expiry: Date;
}
export declare class AccountManager {
    private _provider?;
    private _walletObject?;
    private _setup;
    private _setupPromise;
    private _listeners;
    constructor();
    listen(listener: EventListener): () => void;
    wait(): Promise<AccountManager>;
    private setup;
    getStarknetProvider(): StarknetProvider;
    selectAndLogin(providerId: string): Promise<void>;
    switchChain(chainId: string): Promise<void>;
    getProviderName(): string | undefined;
    getChainId(): Promise<string>;
    disconnect(): void;
    getProvider(): AccountProvider | undefined;
    setupSession(): Promise<void>;
    getAvailableWallets(): WALLET_API.StarknetWindowObject[];
    promptForLogin(): Promise<void>;
    private getSessionFromStorage;
    private onWalletChanged;
    private onNetworkChanged;
}
export declare function setupAccount(config?: Partial<AccountConfig>): Promise<AccountManager>;
export declare function useAccount(): AccountManager | null;
