import { type Forceable, type Silentable, type SmartContractWatchCallback, type Syncable, type Watchable, AbstractStore } from '@broxus/js-core';
import { type Address } from '@ton/ton';
import { type ProviderRpcClient } from 'everscale-inpage-provider';
import { TonTokenWalletUtils } from '../../models/ton-token-wallet/TonTokenWalletUtils';
export interface TonTokenWalletCtorOptions {
    watchDebounceDelay?: number;
}
export type TonTokenWalletCreateConfig = {
    address: Address | string;
} | {
    ownerAddress: Address | string;
    tokenAddress: Address | string;
};
export interface TonTokenWalletCreateOptions extends Syncable, TonTokenWalletCtorOptions, Watchable {
    watchCallback?: VoidFunction;
}
export interface TonTokenWalletData {
    balance?: string | undefined;
    ownerAddress?: Address;
    tokenAddress?: Address;
}
export interface TonTokenWalletState {
    isSyncing?: boolean;
    syncedAt?: number;
}
export declare class TonTokenWallet extends AbstractStore<TonTokenWalletData, TonTokenWalletState> {
    protected readonly _connection: ProviderRpcClient;
    protected readonly options?: Readonly<TonTokenWalletCtorOptions> | undefined;
    static Utils: typeof TonTokenWalletUtils;
    private readonly _address;
    constructor(_connection: ProviderRpcClient, address: Address | string, options?: Readonly<TonTokenWalletCtorOptions> | undefined);
    static create(connection: ProviderRpcClient, config: Readonly<TonTokenWalletCreateConfig>, options?: Readonly<TonTokenWalletCreateOptions>): Promise<TonTokenWallet>;
    get address(): Address;
    sync(options?: Forceable & Silentable): Promise<void>;
    watch(callback?: SmartContractWatchCallback<TonTokenWalletData, TonTokenWalletState>): Promise<void>;
    unwatch(): Promise<void>;
    get balance(): TonTokenWalletData['balance'];
    get ownerAddress(): TonTokenWalletData['ownerAddress'];
    get tokenAddress(): TonTokenWalletData['tokenAddress'];
    get isSyncing(): TonTokenWalletState['isSyncing'];
    get syncedAt(): TonTokenWalletState['syncedAt'];
    protected balanceCheckInterval: ReturnType<typeof setInterval> | undefined;
}
