UNPKG

@bsv/spv-wallet-js-client

Version:

TypeScript library for connecting to a SPV Wallet server

242 lines (241 loc) 10.3 kB
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>>; }