import type { CoinObject } from "../common.js";
import type { TransactionObjectArgument } from "../../transactions/index.js";
import { Transaction } from "../../transactions/index.js";
import type { ENTRYPOINT } from "../../client/network.js";
import type { CoinBalance, PaginatedCoins, WowTransactionBlockResponse } from "../../client/index.js";
export interface IAccountStorage {
    get(): Promise<string | undefined>;
    put(data: string): Promise<void>;
    clear(): Promise<void>;
}
export declare const DEFAULT_ACCOUNT_NAME = "";
export declare const MAX_MESSENGER_ACCOUNTS = 100;
export type FaucetCoinInfo = {
    amount: number;
    id: string;
    transferTxDigest: string;
};
export interface AccountData {
    name?: string;
    address: string;
    pubkey?: string;
    secret?: string;
    suspended?: boolean;
    createdAt?: number;
    updatedAt?: number;
    m?: string | null;
}
export interface AccountFilter {
    name?: string;
    address?: string;
    suspended?: boolean;
    hasMessenger?: boolean;
    m?: string;
    createdAt?: {
        gte?: number;
        lte?: number;
    };
    updatedAt?: {
        gte?: number;
        lte?: number;
    };
}
export declare class Account {
    static _instance: any;
    static storage: IAccountStorage | undefined;
    setStorage(storage: IAccountStorage): void;
    private getStorage;
    static Instance(): Account;
    private accountData;
    gen(name?: string | null | undefined, replaceExistName?: boolean, m?: string | null | undefined): Promise<AccountData>;
    default(): Promise<AccountData | undefined>;
    get(address_or_name: string | null | undefined, notFoundGenerate?: boolean): Promise<AccountData | undefined>;
    get_address(address_or_name: string | null | undefined): Promise<string | undefined>;
    get_many_address(address_or_names: (string | null | undefined)[]): Promise<(string | undefined)[]>;
    private get_imp;
    private name_resolve;
    private get_many_imp;
    swap_name(name1: string | null | undefined, name2: string | null | undefined): Promise<boolean>;
    rename(name_or_address: string | null | undefined, new_name: string): Promise<boolean>;
    list(filter?: AccountFilter): Promise<AccountData[]>;
    suspend(address_or_name?: string): Promise<boolean>;
    suspend_many(address_or_names: string[]): Promise<{
        success: string[];
        failed: string[];
    }>;
    resume(address: string, name: string | null | undefined): Promise<boolean>;
    faucet(address_or_name: string | null | undefined, network: "testnet" | "devnet" | "localnet"): Promise<FaucetCoinInfo[]>;
    sign_and_commit(tx: Transaction, address_or_name?: string, network?: ENTRYPOINT): Promise<WowTransactionBlockResponse | undefined>;
    balance: (token_type?: string, address_or_name?: string, network?: ENTRYPOINT) => Promise<CoinBalance | undefined>;
    coin: (token_type?: string, cursor?: string | null | undefined, limit?: number | null | undefined, address_or_name?: string, network?: ENTRYPOINT) => Promise<PaginatedCoins | undefined>;
    get_coin_object: (txb: Transaction, balance_required: string | bigint | number, token_type?: string, address_or_name?: string, network?: ENTRYPOINT) => Promise<TransactionObjectArgument | undefined>;
    get_many_coin_object: (txb: Transaction, balance_required: (string | bigint | number)[], token_type?: string, address_or_name?: string, network?: ENTRYPOINT) => Promise<TransactionObjectArgument>;
    refund_coin(txb: Transaction, coin: CoinObject, to_address_or_name?: string): Promise<void>;
    transfer(amount: number | string | bigint, token_type?: string, to_address_or_name?: string, from_address_or_name?: string, network?: ENTRYPOINT): Promise<WowTransactionBlockResponse | undefined>;
    coinObject_with_balance: (balance_required: string | bigint | number, token_type?: string, address_or_name?: string, network?: ENTRYPOINT) => Promise<string | undefined>;
    sign(address_or_name: string | null | undefined, data: string | Uint8Array): Promise<string>;
    signData(address_or_name: string | null | undefined, data: string | Uint8Array): Promise<{
        signature: string;
        publicKey: string;
        address: string;
    }>;
    deriveX25519Identity(address_or_name: string | null | undefined): Promise<{
        x25519KeyPair: {
            publicKey: Uint8Array;
            privateKey: Uint8Array;
        };
        falcon512KeyPair: {
            publicKey: Uint8Array;
            privateKey: Uint8Array;
        };
        registrationId: number;
    }>;
    set_messenger(address_or_name: string | null | undefined, m: string | null): Promise<boolean>;
    list_messenger_accounts(): Promise<AccountData[]>;
    count_messenger_accounts(): Promise<number>;
}
