@bsv/spv-wallet-js-client
Version:
TypeScript library for connecting to a SPV Wallet server
242 lines (241 loc) • 10.3 kB
TypeScript
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>>;
}