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, CommitRequest, ContractData, DepositAccount, DepositDataResponse, FundingDataResponse, OracleSpendData, RegisterRequest, TxOutput } from '../../types/index.js';
interface EscrowAccountConfig {
    refresh_ival: number;
    verbose: boolean;
}
export declare class EscrowAccount extends EventEmitter<{
    'commit': FundingDataResponse;
    'error': unknown;
    'fetch': EscrowAccount;
    'payment': EscrowAccount;
    'ready': EscrowAccount;
    'register': DepositDataResponse;
    'reserved': EscrowAccount;
    'update': EscrowAccount;
}> {
    readonly _client: EscrowClient;
    readonly _opt: EscrowAccountConfig;
    _data: DepositAccount | null;
    _init: boolean;
    _payments: OracleSpendData[];
    _updated: number | null;
    constructor(client: EscrowClient, config?: Partial<EscrowAccountConfig>);
    get id(): string;
    get client(): EscrowClient;
    get data(): DepositAccount;
    get is_funded(): boolean;
    get is_ready(): boolean;
    get is_reserved(): boolean;
    get opt(): EscrowAccountConfig;
    get payments(): OracleSpendData[];
    get req(): {
        deposit_pk: string;
        sequence: number;
        spend_xpub: string;
    };
    get updated_at(): number;
    get utxo(): TxOutput;
    _request(req: AccountRequest): Promise<DepositAccount>;
    _commit(req: CommitRequest): Promise<FundingDataResponse>;
    _fetch(): Promise<this>;
    _register(req: RegisterRequest): Promise<DepositDataResponse>;
    _update(utxos: OracleSpendData[]): void;
    commit(contract: ContractData, signer: EscrowSigner, utxo?: TxOutput): Promise<{
        contract: EscrowContract;
        deposit: EscrowDeposit;
    }>;
    fetch(): Promise<this>;
    register(utxo?: TxOutput): Promise<EscrowDeposit>;
    request(signer: EscrowSigner, locktime: number, index?: number): Promise<DepositAccount>;
    poll(interval: number, retries: number): Promise<TxOutput>;
    verify(signer: EscrowSigner): boolean;
    toJSON(): DepositAccount;
    toString(): string;
}
export {};
