import { type Address, type DelayedMessageExecution, type ProviderRpcClient, type SendInternalParams, type Subscriber } from 'everscale-inpage-provider';
import { SmartContractModel } from '../../core';
import { type TvmTokenWalletBurnAbiParams, type TvmTokenWalletDestroyAbiParams, type TvmTokenWalletTransferAbiParams, type TvmTokenWalletTransferToWalletAbiParams, TvmTokenWalletUtils } from '../../models/tvm-token-wallet/TvmTokenWalletUtils';
import { type Forceable, type Silentable, type Syncable, type Watchable } from '../../types';
export interface TvmTokenWalletCtorOptions {
    watchDebounceDelay?: number;
}
export type TvmTokenWalletCreateConfig = {
    address: Address | string;
} | {
    ownerAddress: Address | string;
    tokenAddress: Address | string;
};
export interface TvmTokenWalletCreateOptions extends TvmTokenWalletCtorOptions, Syncable, Watchable {
    watchCallback?: VoidFunction;
}
export interface TvmTokenWalletData {
    balance?: string | undefined;
    ownerAddress?: Address;
    tokenAddress?: Address;
}
export declare class TvmTokenWallet extends SmartContractModel<TvmTokenWalletData> {
    protected readonly _connection: ProviderRpcClient;
    protected readonly options?: Readonly<TvmTokenWalletCtorOptions> | undefined;
    protected readonly _provider?: ProviderRpcClient | undefined;
    static Utils: typeof TvmTokenWalletUtils;
    /**
     * @param {ProviderRpcClient} _connection Standalone RPC client that doesn't require connection to the TVM wallet provider
     * @param {Address | string} address TvmTokenWallet root address
     * @param {Readonly<TvmTokenWalletCtorOptions>} [options] (optional) TvmTokenWallet Smart Contract Model options
     * @param {ProviderRpcClient} [_provider] (optional) RPC provider that require connection to the TVM wallet
     */
    constructor(_connection: ProviderRpcClient, address: Address | string, options?: Readonly<TvmTokenWalletCtorOptions> | undefined, _provider?: ProviderRpcClient | undefined);
    /**
     * @param {ProviderRpcClient} connection Standalone RPC client that doesn't require connection to the TVM wallet provider
     * @param {Readonly<TvmTokenWalletCreateConfig>} config TvmTokenWallet ctor configuration
     * @param {Readonly<TvmTokenWalletCreateOptions>} [options] (optional) TvmTokenWallet Smart Contract Model options
     * @param {ProviderRpcClient} [provider] (optional) RPC provider that require connection to the TVM wallet
     */
    static create(connection: ProviderRpcClient, config: Readonly<TvmTokenWalletCreateConfig>, options?: Readonly<TvmTokenWalletCreateOptions>, provider?: ProviderRpcClient): Promise<TvmTokenWallet>;
    sync(options?: Forceable & Silentable): Promise<void>;
    watch(callback?: VoidFunction): Promise<Subscriber>;
    unwatch(): Promise<void>;
    /**
     * Transfer - makes the transaction via token wallet contract to send message
     * @param {TvmTokenWalletTransferAbiParams} params
     * @param {Partial<SendInternalParams>} [args]
     */
    transfer(params: TvmTokenWalletTransferAbiParams, args?: Partial<SendInternalParams>): Promise<DelayedMessageExecution>;
    /**
     * Transfer to wallet - makes the transaction via token wallet contract to send message to a
     * token wallet
     * @param {TvmTokenWalletTransferToWalletAbiParams} params
     * @param {Partial<SendInternalParams>} [args]
     */
    transferToWallet(params: TvmTokenWalletTransferToWalletAbiParams, args?: Partial<SendInternalParams>): Promise<DelayedMessageExecution>;
    /**
     * Burns assets in favor of the address specified in callbackTo
     * @param {TvmTokenWalletBurnAbiParams} params
     * @param {Partial<SendInternalParams>} [args]
     */
    burn(params: TvmTokenWalletBurnAbiParams, args?: Partial<SendInternalParams>): Promise<DelayedMessageExecution>;
    /**
     * Burns assets in favor of the address specified in callbackTo
     * @param {TvmTokenWalletDestroyAbiParams} params
     * @param {Partial<SendInternalParams>} [args]
     */
    destroy(params: TvmTokenWalletDestroyAbiParams, args?: Partial<SendInternalParams>): Promise<DelayedMessageExecution>;
    get balance(): TvmTokenWalletData['balance'];
    get ownerAddress(): TvmTokenWalletData['ownerAddress'];
    get tokenAddress(): TvmTokenWalletData['tokenAddress'];
}
