/// <reference types="node" />
import { EventEmitter } from 'events';
import { ethers } from 'ethers';
import { NetworkConfig } from '@soundsright/config';
export declare enum ConnectType {
    MetaMask = "MetaMask",
    WalletConnect = "WalletConnect"
}
export declare type ConnectionState = {
    provider?: ethers.providers.BaseProvider;
    signer?: ethers.Signer;
    account?: string;
    chainId?: number;
    connected?: boolean;
};
export declare abstract class Connection extends EventEmitter {
    readonly state: ConnectionState;
    protected constructor();
    protected emitChange(event: string, error?: Error): void;
    abstract connect(): Promise<any>;
    abstract switchChain(chainId: number): Promise<void>;
    abstract addToken(options: AddTokenOptions): Promise<void>;
    abstract disconnect(): Promise<void>;
}
export declare class NoEthereumProviderError extends Error {
    constructor();
}
export declare class AddressAccessFailedError extends Error {
    constructor();
}
export declare class WalletNotConnectedError extends Error {
    constructor();
}
export declare class WalletNetworkError extends Error {
    network: NetworkConfig;
    constructor(network: NetworkConfig);
}
export declare type UriHandler = (uri: string, disconnect: () => void) => () => void;
export declare type ConnectOptions = {
    uriHandler?: UriHandler;
};
export declare type WalletConfig = {
    name: string;
    shortName: string;
    color: string;
    logo: string;
    universalLink?: string;
    deepLink?: string;
};
export declare type AddTokenOptions = {
    address: string;
    symbol: string;
    decimals: number;
};
