import { AddressTxsUtxo, Psbt, Network } from '@saturnbtcio/psbt'; import { Pubkey, UtxoMetaData, Message, SanitizedMessage } from '@saturnbtcio/arch-sdk'; interface IArchProvider { getAccountAddress(pubkey: Pubkey): Promise; } type CollectionType = 'rune' | 'btc'; interface Wallet { address: string; balance: bigint; utxos: Array; } interface CollectionUtxo extends AddressTxsUtxo { collectionStatuses: Array; hasInscription: boolean; } interface Collection { id: string; type: CollectionType; } interface CollectionAmount extends Collection { amount: bigint; } type TxId = string; interface MempoolFee { ancestor: number; base: number; modified: number; } interface MempoolEntry { fees: MempoolFee; ancestorsCount: number; descendantsCount: number; ancestorsSize: number; descendantsSize: number; depends: string[]; spentby: string[]; } type MempoolInfoMap = Map; interface IBitcoinProvider { getMempoolInfo(txIds: Array): Promise; getWallet(address: string): Promise; } interface PoolSdkRequestWithRuneWallet { runeAddress: string; runePublicKey: string; } interface MessageRequest extends PoolSdkRequestWithRuneWallet { feePayerPubkey: string; recentBlockhash: string; } interface DepositBitcoinToArchControlledAddressPsbtRequest extends PoolSdkRequestWithRuneWallet { paymentAddress: string | null; paymentPublicKey: string | null; amount: bigint; feeRate: bigint; } type DepositBitcoinToArchControlledAddressPsbtResponse = Psbt; interface DepositRunesToArchControlledAddressPsbtRequest extends PoolSdkRequestWithRuneWallet { paymentAddress: string | null; paymentPublicKey: string | null; runeId: string; amount: bigint; feeRate: bigint; } type WithdrawFundsMessageRequest = (MessageRequest & { type: 'selected-utxos'; paymentAddress: string | null; utxos: Array; feeRate: bigint; }) | (MessageRequest & { type: 'all-utxos'; paymentAddress: null; feeRate: bigint; }); type WithdrawFundsMessageResponse = Message; declare class ArchWalletManager { private readonly config; constructor(config: ArchWalletSdkConfig); depositBtcFundsToArchControlledAddress(request: DepositBitcoinToArchControlledAddressPsbtRequest): Promise>; depositRunesToArchControlledAddress(request: DepositRunesToArchControlledAddressPsbtRequest): Promise>; withdrawFundsMessage(request: WithdrawFundsMessageRequest): Promise; private validateEnoughFunds; private estimateRecoverFundsTxSize; private getUtxosFromArchWallet; private getSelectedUtxosFromArchWallet; private getArchWallet; } interface ArchWalletSdkConfig { programAddress: string; network: Network; programAccount: string; mempoolInfoOracleAccount: string; feeRateOracleAccount: string; bitcoinProvider: IBitcoinProvider; archProvider: IArchProvider; } declare class ArchWalletSdk { readonly archWalletManager: ArchWalletManager; constructor(config: ArchWalletSdkConfig); } declare enum ArchWalletErrorType { InvalidFeeRate = "InvalidFeeRate", InvalidUtxo = "InvalidUtxo", InvalidPubkey = "InvalidPubkey", InvalidAddress = "InvalidAddress", NotEnoughFunds = "NotEnoughFunds" } interface CommonArchWalletError { type: ArchWalletErrorType; message: string; } interface InvalidFeeRateError extends CommonArchWalletError { type: ArchWalletErrorType.InvalidFeeRate; minFeeRate: number; } interface InvalidUtxoError extends CommonArchWalletError { type: ArchWalletErrorType.InvalidUtxo; utxos: string[]; } interface InvalidPubkeyError extends CommonArchWalletError { type: ArchWalletErrorType.InvalidPubkey; pubkey: string; } interface InvalidAddressError extends CommonArchWalletError { type: ArchWalletErrorType.InvalidAddress; } interface NotEnoughFundsError extends CommonArchWalletError { type: ArchWalletErrorType.NotEnoughFunds; maxAmount: string; minAmount: string; token: string; } type ArchWalletError = InvalidFeeRateError | InvalidUtxoError | InvalidPubkeyError | InvalidAddressError | NotEnoughFundsError; declare class ArchWalletErrorException extends Error { error: ArchWalletError; constructor(error: ArchWalletError); getError(): ArchWalletError; } export { type ArchWalletError, ArchWalletErrorException, ArchWalletManager, ArchWalletSdk, type ArchWalletSdkConfig, type CollectionAmount, type CollectionUtxo, type DepositBitcoinToArchControlledAddressPsbtRequest, type DepositBitcoinToArchControlledAddressPsbtResponse, type IArchProvider, type IBitcoinProvider, type MempoolEntry, type MempoolFee, type MempoolInfoMap, type Wallet, type WithdrawFundsMessageRequest, type WithdrawFundsMessageResponse };