import { AccessKey, Contact, DraftTransactionConfig, DraftTx, ExclusiveStartKeyPage, MerkleRoot, Metadata, SharedConfig, Tx, User, PaymailAddress, PageModel, Utxo, MerkleRootsRepository, QueryPageParams, ClientOptions } from './types';
import { AccessKeyFilter, ContactFilter, PaymailFilter, TransactionFilter, UtxoFilter } from './filters';
import { LoggerConfig } from './logger';
/**
 * SPVWalletUserAPI class for handling user-specific operations
 *
 * @class SPVWalletUserAPI
 */
export declare class SPVWalletUserAPI {
    private logger;
    private http;
    private xPriv?;
    /**
     * Creates a new instance of SPVWalletUserAPI
     *
     * @param {string} serverUrl - The base URL of the SPV Wallet server
     * @param {ClientOptions} options - Configuration options including xPub, xPriv, or accessKey
     * @param {LoggerConfig} loggerConfig - Logger configuration (optional)
     */
    constructor(serverUrl: string, options: ClientOptions, loggerConfig?: LoggerConfig);
    private ensureSuffix;
    private makeRequester;
    /**
     * Get a list of all contacts for the current user
     *
     * @param {ContactFilter} conditions - Key value object to use to filter the documents
     * @param {Metadata} metadata - Key value object to use to filter the documents by the metadata
     * @param {QueryPageParams} queryParams - Database query parameters for page, page size and sorting
     * @returns {Promise<PageModel<Contact>>} List of contacts matching the criteria
     */
    contacts(conditions: ContactFilter, metadata: Metadata, queryParams: QueryPageParams): Promise<PageModel<Contact>>;
    /**
     * Get a single contact by paymail address
     *
     * @param {string} paymail - Paymail address of the contact
     * @returns {Promise<Contact>} Contact information
     */
    contactWithPaymail(paymail: string): Promise<Contact>;
    /**
     * Update or insert a contact
     *
     * @param {string} paymail - Contact's paymail address
     * @param {string} fullName - Full name of the contact
     * @param {string} requesterPaymail - Paymail of the requester
     * @param {Metadata} metadata - Additional metadata for the contact
     * @returns {Promise<Contact>} Updated or created contact
     */
    upsertContact(paymail: string, fullName: string, requesterPaymail: string, metadata: Metadata): Promise<Contact>;
    /**
     * Remove a contact by paymail address
     *
     * @param {string} paymail - Paymail address of the contact to remove
     * @returns {Promise<void>}
     */
    removeContact(paymail: string): Promise<void>;
    /**
     * Confirm a contact by validating their TOTP passcode
     *
     * @param {Contact} contact - Contact to confirm
     * @param {string} passcode - TOTP passcode to validate
     * @param {string} requesterPaymail - Paymail of the person requesting confirmation
     * @param {number} [period=DEFAULT_TOTP_PERIOD] - TOTP period in seconds
     * @param {number} [digits=DEFAULT_TOTP_DIGITS] - Number of digits in TOTP
     * @returns {Promise<boolean>} True if confirmation successful
     * @throws {ErrorWrongTOTP} If TOTP validation fails
     */
    confirmContact(contact: Contact, passcode: string, requesterPaymail: string, period?: number, digits?: number): Promise<boolean>;
    /**
     * Remove confirmation status from a contact
     *
     * @param {string} paymail - Paymail address of the contact to unconfirm
     * @returns {Promise<void>}
     */
    unconfirmContact(paymail: string): Promise<void>;
    /**
     * Accept a contact invitation
     *
     * @param {string} paymail - Paymail address of the contact who sent the invitation
     * @returns {Promise<void>}
     */
    acceptInvitation(paymail: string): Promise<void>;
    /**
     * Reject a contact invitation
     *
     * @param {string} paymail - Paymail address of the contact whose invitation to reject
     * @returns {Promise<void>}
     */
    rejectInvitation(paymail: string): Promise<void>;
    /**
     * Get shared configuration settings
     *
     * @returns {Promise<SharedConfig>} Shared configuration object
     */
    sharedConfig(): Promise<SharedConfig>;
    /**
     * Draft a new transaction
     *
     * @param {DraftTransactionConfig} config - Configuration for the draft transaction
     * @param {Metadata} metadata - Additional metadata for the transaction
     * @returns {Promise<DraftTx>} The draft transaction
     */
    draftTransaction(config: DraftTransactionConfig, metadata: Metadata): Promise<DraftTx>;
    /**
     * Record a transaction in the system
     *
     * @param {string} hex - Transaction hex
     * @param {string} referenceId - Reference ID (usually draft transaction ID)
     * @param {Metadata} metadata - Additional metadata for the transaction
     * @returns {Promise<Tx>} The recorded transaction
     */
    recordTransaction(hex: string, referenceId: string, metadata: Metadata): Promise<Tx>;
    /**
     * Update transaction metadata
     *
     * @param {string} txId - Transaction ID
     * @param {Metadata} metadata - New metadata to update
     * @returns {Promise<Tx>} Updated transaction
     */
    updateTransactionMetadata(txId: string, metadata: Metadata): Promise<Tx>;
    /**
     * Get a list of transactions
     *
     * @param {TransactionFilter} conditions - Filter conditions
     * @param {Metadata} metadata - Metadata filter
     * @param {QueryPageParams} queryParams - Pagination parameters
     * @returns {Promise<PageModel<Tx>>} List of transactions
     */
    transactions(conditions: TransactionFilter, metadata: Metadata, queryParams: QueryPageParams): Promise<PageModel<Tx>>;
    /**
     * Get transaction by ID
     *
     * @param {string} id - Transaction ID
     * @returns {Promise<Tx>} Transaction details
     */
    transaction(id: string): Promise<Tx>;
    /**
     * Finalize a draft transaction by signing it
     *
     * @param {DraftTx} draft - Draft transaction to finalize
     * @returns {Promise<string>} Signed transaction hex
     * @throws {ErrorNoXPrivToSignTransaction} If xPriv is not available
     * @throws {ErrorTxIdsDontMatchToDraft} If transaction IDs don't match
     */
    finalizeTransaction(draft: DraftTx): Promise<string>;
    /**
     * Send to recipients (combines draft, sign, and record)
     *
     * @param {DraftTransactionConfig} config - Transaction configuration
     * @param {Metadata} metadata - Transaction metadata
     * @returns {Promise<Tx>} The final transaction
     */
    sendToRecipients(config: DraftTransactionConfig, metadata: Metadata): Promise<Tx>;
    /**
     * Get current user's xPub information
     *
     * @returns {Promise<User>} User information
     */
    xPub(): Promise<User>;
    /**
     * Update xPub metadata
     *
     * @param {Metadata} metadata - New metadata to update
     * @returns {Promise<User>} Updated user information
     */
    updateXPubMetadata(metadata: Metadata): Promise<User>;
    /**
     * Generate a new access key
     *
     * @param {Metadata} metadata - Metadata for the new access key
     * @returns {Promise<AccessKey>} Generated access key
     */
    generateAccessKey(metadata: Metadata): Promise<AccessKey>;
    /**
     * Get a list of access keys
     *
     * @param {AccessKeyFilter} conditions - Filter conditions for access keys
     * @param {QueryPageParams} queryParams - Pagination parameters
     * @returns {Promise<PageModel<AccessKey>>} List of access keys
     */
    accessKeys(conditions: AccessKeyFilter, queryParams: QueryPageParams): Promise<PageModel<AccessKey>>;
    /**
     * Get a specific access key by ID
     *
     * @param {string} id - Access key ID
     * @returns {Promise<AccessKey>} Access key details
     */
    accessKey(id: string): Promise<AccessKey>;
    /**
     * Revoke an access key
     *
     * @param {string} id - ID of the access key to revoke
     * @returns {Promise<void>}
     */
    revokeAccessKey(id: string): Promise<void>;
    /**
     * Get a list of UTXOs
     *
     * @param {UtxoFilter} conditions - Filter conditions for UTXOs
     * @param {Metadata} metadata - Metadata filter
     * @param {QueryPageParams} queryParams - Pagination parameters
     * @returns {Promise<PageModel<Utxo>>} List of UTXOs
     */
    utxos(conditions: UtxoFilter, metadata: Metadata, queryParams: QueryPageParams): Promise<PageModel<Utxo>>;
    /**
     * Get merkle roots
     *
     * @param {string} [lastEvaluatedKey] - Last evaluated key for pagination
     * @returns {Promise<ExclusiveStartKeyPage<MerkleRoot[]>>} Page of merkle roots
     */
    merkleRoots(lastEvaluatedKey?: string): Promise<ExclusiveStartKeyPage<MerkleRoot[]>>;
    /**
     * Sync merkle roots from the client db to the last known block
     *
     * @param {MerkleRootsRepository} repo - Repository interface for merkle root operations
     * @param {number} [timeoutMs] - Optional timeout in milliseconds
     * @throws {ErrorSyncMerkleRootsTimeout} When the sync operation times out
     * @throws {ErrorStaleLastEvaluatedKey} When the last evaluated key becomes stale
     * @returns {Promise<void>}
     */
    syncMerkleRoots(repo: MerkleRootsRepository, timeoutMs?: number): Promise<void>;
    /**
     * Generate TOTP for a contact
     *
     * @param {Contact} contact - Contact to generate TOTP for
     * @param {number} [period=DEFAULT_TOTP_PERIOD] - TOTP period
     * @param {number} [digits=DEFAULT_TOTP_DIGITS] - Number of TOTP digits
     * @returns {string} Generated TOTP
     * @throws {ErrorNoXPrivToGenerateTOTP} If xPriv is not available
     */
    generateTotpForContact(contact: Contact, period?: number, digits?: number): string;
    validateTotpForContact(contact: Contact, passcode: string, requesterPaymail: string, period?: number, digits?: number): boolean;
    /**
     * Get a list of paymail addresses
     *
     * @param {PaymailFilter} conditions - Filter conditions for paymail addresses
     * @param {Metadata} metadata - Metadata filter
     * @param {QueryPageParams} queryParams - Pagination parameters
     * @returns {Promise<PageModel<PaymailAddress>>} List of paymail addresses
     */
    paymails(conditions: PaymailFilter, metadata: Metadata, queryParams: QueryPageParams): Promise<PageModel<PaymailAddress>>;
}
