import { AbstractStore } from '@broxus/js-core';
import { type AddNetwork, type Address, type AssetType, type Network, type ProviderEvents, type ProviderProperties, type ProviderRpcClient, type Subscription } from 'everscale-inpage-provider';
import { type Account, type ConnectionType, type TvmProviderPlatformLinks } from '../types';
export interface NekotonConnectorCtorParams {
    fallbackProviderFactory?: () => Promise<ProviderRpcClient> | ProviderRpcClient;
    info?: {
        description?: string;
        icon?: string;
        links?: TvmProviderPlatformLinks & {
            homepage?: string;
            universalLink?: string;
        };
        name: string;
    };
    options?: ProviderProperties;
    onDisconnect?: (err: any) => Promise<void> | void;
}
export interface NekotonConnectorData {
    account?: Account;
    chainId?: number;
    version?: string;
}
export interface NekotonConnectorState {
    isConnecting?: boolean;
    isDisconnecting?: boolean;
    isInitialized?: boolean;
    isInitializing?: boolean;
}
export interface ConnectOptions {
    onConnect?: (connector: NekotonConnector) => Promise<void> | void;
}
export interface DisconnectOptions {
    force?: boolean;
    onDisconnect?: (connector: NekotonConnector) => Promise<void> | void;
}
export declare abstract class NekotonConnector extends AbstractStore<NekotonConnectorData, NekotonConnectorState> {
    protected readonly params?: Readonly<NekotonConnectorCtorParams> | undefined;
    abstract readonly type: ConnectionType;
    provider?: ProviderRpcClient;
    protected constructor(params?: Readonly<NekotonConnectorCtorParams> | undefined);
    abstract init(): Promise<ProviderRpcClient | undefined>;
    connect(networkIdOParams?: number | AddNetwork, options?: ConnectOptions): Promise<void>;
    disconnect(options?: DisconnectOptions): Promise<void>;
    addAsset(address: Address | string, type?: AssetType): Promise<boolean>;
    addNetwork(network: AddNetwork, switchNetwork?: boolean): Promise<Network | null>;
    switchNetwork(networkIdOParams: number | AddNetwork): Promise<Network | null>;
    get account(): NekotonConnectorData['account'];
    get chainId(): NekotonConnectorData['chainId'];
    get version(): NekotonConnectorData['version'];
    get isConnecting(): NekotonConnectorState['isConnecting'];
    get isDisconnecting(): NekotonConnectorState['isDisconnecting'];
    get isInitialized(): NekotonConnectorState['isInitialized'];
    get isInitializing(): NekotonConnectorState['isInitializing'];
    protected handlePermissionsChanged(event: ProviderEvents['permissionsChanged']): Promise<void>;
    protected handleNetworkChanged(event: ProviderEvents['networkChanged']): Promise<void>;
    protected handleDisconnected(err: Error): void;
    protected runSubscriptions(): Promise<void>;
    protected stopSubscriptions(): Promise<void>;
    protected networkChangeSubscription: Subscription<'networkChanged'> | undefined;
    protected permissionsSubscription: Subscription<'permissionsChanged'> | undefined;
}
