import { EventEmitter } from './emitter.js';
import { EscrowClient } from './client.js';
import { EscrowContract } from './contract.js';
import { EscrowDeposit } from './deposit.js';
import { EscrowSigner } from './signer.js';
import { AccountRequest, AccountStatus, CommitRequest, ContractData, DepositAccount, DepositData, FundingDataResponse, OracleSpendData, RegisterRequest, TxOutput } from '../../types/index.js';
interface EscrowAccountConfig {
    refresh_ival: number;
    verbose: boolean;
}
export declare class EscrowAccount extends EventEmitter<{
    'commit': FundingDataResponse;
    'fetch': EscrowAccount;
    'payment': TxOutput;
    'register': DepositData;
    'reserved': DepositAccount;
}> {
    readonly _client: EscrowClient;
    readonly _signer: EscrowSigner;
    readonly _opt: EscrowAccountConfig;
    _data: DepositAccount | null;
    _deposit: DepositData | null;
    _payments: OracleSpendData[];
    _status: AccountStatus;
    _updated: number | null;
    constructor(client: EscrowClient, signer: EscrowSigner, config?: Partial<EscrowAccountConfig>);
    get address(): string;
    get id(): string;
    get client(): EscrowClient;
    get data(): DepositAccount;
    get deposit(): DepositData;
    get is_funded(): boolean;
    get is_registered(): boolean;
    get is_ready(): boolean;
    get is_reserved(): boolean;
    get opt(): EscrowAccountConfig;
    get payments(): OracleSpendData[];
    get request(): {
        deposit_pk: string;
        sequence: number;
        spend_xpub: string;
    };
    get signer(): EscrowSigner;
    get status(): AccountStatus;
    get updated_at(): number;
    get utxo(): TxOutput;
    _reserve(req: AccountRequest): Promise<DepositAccount>;
    _commit(req: CommitRequest): Promise<FundingDataResponse>;
    _fetch(): Promise<this>;
    _register(req: RegisterRequest): Promise<DepositData>;
    commit(contract: ContractData, utxo?: TxOutput): Promise<{
        contract: EscrowContract;
        deposit: EscrowDeposit;
    }>;
    fetch(): Promise<this>;
    register(utxo?: TxOutput): Promise<EscrowDeposit>;
    reserve(locktime: number, index?: number): Promise<DepositAccount>;
    poll(interval: number, retries: number): Promise<this>;
    verify(): boolean;
    toJSON(): DepositAccount;
    toString(): string;
}
export {};
