import { Transaction, TransactionSigner } from "algosdk";
import { SignedTxn } from ".";
export interface WalletTransaction {
    txn: string;
    signers?: Array<string>;
    authAddr?: string;
    msig?: {
        version: number;
        treshold: number;
        addrs: Array<string>;
    };
}
export declare enum Wallets {
    PERA = "PERA",
    MYALGO = "MYALGO",
    ALGOSIGNER = "ALGOSIGNER"
}
export declare enum Networks {
    TESTNET = "TestNet",
    MAINNET = "MainNet",
    VIGEE_DEV = "vigee"
}
export declare enum StorageKeys {
    ACCOUNT_LIST = "acct-list",
    ACCOUNT_PREFERENCE = "acct-preference",
    WALLET_PREFERENCE = "wallet-preference",
    NETWORK_PREFERENCE = "network-preference"
}
export declare type WalletConstructor<T extends IWallet> = new (network: Networks, wallet: Wallets, accountIdx?: number, popupPermissionCallback?: PopupPermissionCallback) => T;
export interface IWallet {
    network: Networks;
    walletChoice: Wallets;
    _accounts: string[];
    defaultAccountIndex: number;
    displayName(): string;
    getSelectedAccountAddress(): string;
}
export interface WalletImplementation extends IWallet {
    img(inverted: boolean): string;
    connect(disconnectCallback?: Function): Promise<boolean>;
    disconnect(): void;
    isConnected(): boolean;
    reconnect(): Promise<Array<string>>;
    signTxn(txns: Transaction[]): Promise<SignedTxn[] | Uint8Array[]>;
    signBytes(b: Uint8Array): Promise<Uint8Array>;
    signTeal(teal: Uint8Array): Promise<Uint8Array>;
    getSigner(): TransactionSigner;
    getAccounts(): string[];
}
export interface PermissionResult {
    approved(): Promise<SignedTxn[]>;
    declined(): Promise<SignedTxn[]>;
}
export interface PopupPermissionCallback {
    request(permissionResult: PermissionResult): Promise<SignedTxn[]>;
}
