@utexo/rgb-sdk 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/README.md +1 -1
- package/cli/run.mjs +19 -2
- package/dist/index.cjs +591 -201
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +33 -31
- package/dist/index.d.ts +33 -31
- package/dist/index.mjs +591 -201
- package/dist/index.mjs.map +1 -1
- package/package.json +22 -6
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/network-config.ts","../src/errors/index.ts","../src/constants/derivation.ts","../src/utexo/config/utexo-presets.ts","../src/utexo/utils/network.ts","../src/constants/network.ts","../src/constants/defaults.ts","../src/utils/validation.ts","../src/client/rgb-lib-client.ts","../src/utils/environment.ts","../src/utils/crypto-helpers.ts","../src/utils/crypto-browser.ts","../src/utils/fingerprint.ts","../src/utils/bip32-helpers.ts","../src/crypto/dependencies.ts","../src/crypto/keys.ts","../src/crypto/signer.ts","../src/crypto/vss-keys.ts","../src/wallet/wallet-manager.ts","../src/utexo/utexo-protocol.ts","../src/utexo/config/gateway.ts","../src/utexo/bridge/types.ts","../src/utexo/bridge/api.ts","../src/utexo/utils/helpers.ts","../src/utexo/config/vss.ts","../src/utexo/restore.ts","../src/utexo/utexo-wallet.ts","../src/utils/logger.ts"],"names":["fs","path","nodeCrypto","ripemd160","crypto","bip39","eccModule","ecc","bip32","init","bdk","Psbt","payments","networks","bip341","toXOnly","generateKeys","getNetworkVersions","wallet","sha256","TransferStatuses","transfer","LogLevel"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Network } from '../crypto/types';\n\nexport const DEFAULT_TRANSPORT_ENDPOINTS: Record<Network, string> = {\n mainnet: 'rpcs://rgb-proxy-mainnet.utexo.com/json-rpc',\n testnet: 'rpcs://rgb-proxy-testnet3.utexo.com/json-rpc',\n testnet4: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n signet: 'rpcs://rgb-proxy-utexo.utexo.com/json-rpc',\n regtest: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n};\n\nexport const DEFAULT_INDEXER_URLS: Record<Network, string> = {\n mainnet: 'ssl://electrum.iriswallet.com:50003',\n testnet: 'ssl://electrum.iriswallet.com:50013',\n testnet4: 'ssl://electrum.iriswallet.com:50053',\n signet: 'https://esplora-api.utexo.com',\n regtest: 'tcp://regtest.thunderstack.org:50001',\n};\n\n","/**\n * Custom error classes for the RGB SDK\n */\n\n/**\n * Base SDK error class with error codes and context\n */\nexport class SDKError extends Error {\n public readonly code: string;\n public readonly statusCode?: number;\n public readonly cause?: Error;\n\n constructor(\n message: string,\n code: string,\n statusCode?: number,\n cause?: Error\n ) {\n super(message);\n this.name = 'SDKError';\n this.code = code;\n this.statusCode = statusCode;\n this.cause = cause;\n Object.setPrototypeOf(this, SDKError.prototype);\n \n // Maintains proper stack trace for where error was thrown (V8 only)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError);\n }\n }\n\n /**\n * Convert error to JSON for logging\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n statusCode: this.statusCode,\n cause: this.cause?.message,\n stack: this.stack,\n };\n }\n}\n\n/**\n * Network-related errors (API calls, connectivity)\n */\nexport class NetworkError extends SDKError {\n constructor(message: string, statusCode?: number, cause?: Error) {\n super(message, 'NETWORK_ERROR', statusCode, cause);\n this.name = 'NetworkError';\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n}\n\n/**\n * Validation errors (invalid input parameters)\n */\nexport class ValidationError extends SDKError {\n public readonly field?: string;\n\n constructor(message: string, field?: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/**\n * Wallet-related errors (initialization, operations)\n */\nexport class WalletError extends SDKError {\n constructor(message: string, code?: string, cause?: Error) {\n super(message, code || 'WALLET_ERROR', undefined, cause);\n this.name = 'WalletError';\n Object.setPrototypeOf(this, WalletError.prototype);\n }\n}\n\n/**\n * Cryptographic errors (signing, key derivation)\n */\nexport class CryptoError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'CRYPTO_ERROR', undefined, cause);\n this.name = 'CryptoError';\n Object.setPrototypeOf(this, CryptoError.prototype);\n }\n}\n\n/**\n * Configuration errors (missing or invalid configuration)\n */\nexport class ConfigurationError extends SDKError {\n constructor(message: string, field?: string) {\n super(message, 'CONFIGURATION_ERROR');\n this.name = 'ConfigurationError';\n Object.setPrototypeOf(this, ConfigurationError.prototype);\n }\n}\n\n/**\n * Bad request errors (400) - Invalid request parameters or data\n */\nexport class BadRequestError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'BAD_REQUEST', 400, cause);\n this.name = 'BadRequestError';\n Object.setPrototypeOf(this, BadRequestError.prototype);\n }\n}\n\n/**\n * Not found errors (404) - Resource not found\n */\nexport class NotFoundError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'NOT_FOUND', 404, cause);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n\n/**\n * Conflict errors (409) - Resource conflict (e.g., wallet state already exists)\n */\nexport class ConflictError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'CONFLICT', 409, cause);\n this.name = 'ConflictError';\n Object.setPrototypeOf(this, ConflictError.prototype);\n }\n}\n\n/**\n * RGB Node errors (500, 502, 503, 504) - RGB Node server errors\n */\nexport class RgbNodeError extends SDKError {\n constructor(message: string, statusCode: number, cause?: Error) {\n super(message, 'RGB_NODE_ERROR', statusCode, cause);\n this.name = 'RgbNodeError';\n Object.setPrototypeOf(this, RgbNodeError.prototype);\n }\n}\n\n","/**\n * BIP32 derivation path constants\n */\n\n/**\n * BIP86 (Taproot) purpose value\n */\nexport const DERIVATION_PURPOSE = 86;\n\n/**\n * Account index (account 0')\n */\nexport const DERIVATION_ACCOUNT = 0;\n\n/**\n * RGB keychain index\n */\nexport const KEYCHAIN_RGB = 0;\n\n/**\n * Bitcoin keychain index\n */\nexport const KEYCHAIN_BTC = 0;\n\n","/**\n * UTEXO Network Preset Configurations\n *\n * This file contains the network preset configurations for different environments.\n * Each preset defines the Bitcoin network types and RGB/UTEXO network IDs and assets.\n */\n\nimport type { UtxoNetworkPresetConfig } from '../utils/network';\n\n/**\n * Network configuration for a single network (RGB, RGB Lightning, or UTEXO)\n */\ntype NetworkConfig = {\n networkName: string;\n networkId: number;\n assets: { assetId: string; tokenName: string; longName: string; precision: number; tokenId: number }[];\n};\n\n/**\n * Helper function to add getAssetById method to network config\n */\nfunction withGetAssetById<T extends NetworkConfig>(\n config: T\n): T & { getAssetById(tokenId: number): T['assets'][number] | undefined } {\n return {\n ...config,\n getAssetById(tokenId: number) {\n return config.assets.find((a) => a.tokenId === tokenId);\n },\n };\n}\n\n/**\n * Testnet preset configuration (development)\n * Uses testnet/signet for Bitcoin networks\n */\nexport const testnetPreset: UtxoNetworkPresetConfig = {\n networkMap: {\n mainnet: 'testnet',\n utexo: 'signet',\n },\n networkIdMap: {\n mainnet: withGetAssetById({\n networkName: 'RGB',\n networkId: 36,\n assets: [\n {\n assetId: 'rgb:WPRv95Nj-icdrgPp-zpQhIp_-2TyJ~Ge-k~FvuMZ-~vVnkA0',\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n mainnetLightning: withGetAssetById({\n networkName: 'RGB Lightning',\n networkId: 94,\n assets: [\n {\n assetId: 'rgb:WPRv95Nj-icdrgPp-zpQhIp_-2TyJ~Ge-k~FvuMZ-~vVnkA0',\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n utexo: withGetAssetById({\n networkName: 'UTEXO',\n networkId: 96,\n assets: [\n {\n assetId: 'rgb:yJW4k8si-~8JdNfl-nM91qFu-r5rH_HS-1hM7jpi-L~lBf90',\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n },\n};\n\n/**\n * Mainnet preset configuration (production)\n * Uses mainnet for Bitcoin networks\n * TODO: Update asset IDs and network IDs for production when available\n */\nexport const mainnetPreset: UtxoNetworkPresetConfig = {\n networkMap: {\n mainnet: 'mainnet',\n utexo: 'signet',\n },\n networkIdMap: {\n mainnet: withGetAssetById({\n networkName: 'RGB',\n networkId: 36, // TODO: Update to production network ID\n assets: [\n {\n assetId: 'rgb:WPRv95Nj-icdrgPp-zpQhIp_-2TyJ~Ge-k~FvuMZ-~vVnkA0', // TODO: Update to production asset ID\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n mainnetLightning: withGetAssetById({\n networkName: 'RGB Lightning',\n networkId: 94, // TODO: Update to production network ID\n assets: [\n {\n assetId: 'rgb:WPRv95Nj-icdrgPp-zpQhIp_-2TyJ~Ge-k~FvuMZ-~vVnkA0', // TODO: Update to production asset ID\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n utexo: withGetAssetById({\n networkName: 'UTEXO',\n networkId: 96, // TODO: Update to production network ID\n assets: [\n {\n assetId: 'rgb:yJW4k8si-~8JdNfl-nM91qFu-r5rH_HS-1hM7jpi-L~lBf90', // TODO: Update to production asset ID\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n },\n};\n","/**\n * UTEXO network and asset mapping\n */\n\nimport type { Network } from '../../crypto/types';\n// Import preset configurations from config file\nimport { testnetPreset, mainnetPreset } from '../config/utexo-presets';\n\n/**\n * Network preset type - determines which configuration bundle to use\n */\nexport type UtxoNetworkPreset = 'mainnet' | 'testnet';\n\n/**\n * Network map configuration - maps logical network names to Bitcoin network types\n */\nexport type UtxoNetworkMap = {\n mainnet: Network;\n utexo: Network;\n};\n\n/**\n * Network configuration for a single network (RGB, RGB Lightning, or UTEXO)\n */\ntype NetworkConfig = {\n networkName: string;\n networkId: number;\n assets: { assetId: string; tokenName: string; longName: string; precision: number; tokenId: number }[];\n};\n\n/**\n * Network ID map configuration - contains all network configs with asset lookup\n */\nexport type UtxoNetworkIdMap = {\n mainnet: NetworkConfig & { getAssetById(tokenId: number): NetworkConfig['assets'][number] | undefined };\n mainnetLightning: NetworkConfig & { getAssetById(tokenId: number): NetworkConfig['assets'][number] | undefined };\n utexo: NetworkConfig & { getAssetById(tokenId: number): NetworkConfig['assets'][number] | undefined };\n};\n\n/**\n * Complete network preset configuration bundle\n */\nexport type UtxoNetworkPresetConfig = {\n networkMap: UtxoNetworkMap;\n networkIdMap: UtxoNetworkIdMap;\n};\n\n/**\n * Network preset configurations map\n */\nconst NETWORK_PRESETS: Record<UtxoNetworkPreset, UtxoNetworkPresetConfig> = {\n mainnet: mainnetPreset,\n testnet: testnetPreset,\n};\n\n/**\n * Gets the network configuration for a given preset\n * @param preset - Network preset ('mainnet' or 'testnet')\n * @returns Network preset configuration bundle\n */\nexport function getUtxoNetworkConfig(preset: UtxoNetworkPreset): UtxoNetworkPresetConfig {\n return NETWORK_PRESETS[preset];\n}\n\n/**\n * Backward compatibility: Export testnet preset as default (current behavior)\n * @deprecated Use getUtxoNetworkConfig('testnet') or getUtxoNetworkConfig('mainnet') instead\n */\nexport const utexoNetworkMap: UtxoNetworkMap = testnetPreset.networkMap;\n\n/**\n * Backward compatibility: Export testnet preset as default (current behavior)\n * @deprecated Use getUtxoNetworkConfig('testnet') or getUtxoNetworkConfig('mainnet') instead\n */\nexport const utexoNetworkIdMap: UtxoNetworkIdMap = testnetPreset.networkIdMap;\n\nconst networkConfigs = utexoNetworkIdMap;\n\nexport type NetworkAsset = (typeof networkConfigs)[keyof typeof networkConfigs]['assets'][number];\n\nexport type UtxoNetworkId = keyof typeof networkConfigs;\n\n/**\n * Resolves the destination network's asset object from sender network, destination network, and sender asset ID.\n * Uses tokenId as the cross-network identifier (same tokenId = same logical asset).\n */\nexport function getDestinationAsset(\n senderNetwork: UtxoNetworkId,\n destinationNetwork: UtxoNetworkId,\n assetIdSender: string | null\n): NetworkAsset | undefined {\n const destinationConfig = utexoNetworkIdMap[destinationNetwork];\n if (assetIdSender == null) return destinationConfig.assets[0];\n const senderConfig = utexoNetworkIdMap[senderNetwork];\n const senderAsset = senderConfig.assets.find((a) => a.assetId === assetIdSender);\n if (!senderAsset) return undefined;\n return destinationConfig.assets.find((a) => a.tokenId === senderAsset.tokenId);\n}\n","/**\n * Network-related constants\n */\n\nimport type { Network } from '../crypto/types';\n\n// Re-export UTEXO network mapping from utexo/utils (canonical location)\nexport {\n utexoNetworkMap,\n utexoNetworkIdMap,\n getDestinationAsset,\n getUtxoNetworkConfig,\n type NetworkAsset,\n type UtxoNetworkId,\n type UtxoNetworkPreset,\n type UtxoNetworkMap,\n type UtxoNetworkIdMap,\n type UtxoNetworkPresetConfig,\n} from '../utexo/utils/network';\n\n/**\n * Coin type constants\n */\nexport const COIN_RGB_MAINNET = 827166;\nexport const COIN_RGB_TESTNET = 827167;\nexport const COIN_BITCOIN_MAINNET = 0;\nexport const COIN_BITCOIN_TESTNET = 1;\n\n/**\n * Network string/number to Network type mapping\n */\nexport const NETWORK_MAP = {\n '0': 'mainnet' as const,\n '1': 'testnet' as const,\n '2': 'testnet' as const, // Alternative testnet number (also maps to testnet)\n '3': 'regtest' as const,\n 'signet': 'signet' as const,\n 'mainnet': 'mainnet' as const,\n 'testnet': 'testnet' as const,\n 'testnet4': 'testnet4' as const,\n 'regtest': 'regtest' as const,\n} as const;\n\n/**\n * BIP32 network version constants\n * Note: testnet4 uses the same versions as testnet\n */\nexport const BIP32_VERSIONS = {\n mainnet: {\n public: 0x0488b21e,\n private: 0x0488ade4,\n },\n testnet: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n testnet4: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n signet: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n regtest: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n} as const satisfies Record<Network, { public: number; private: number }>;\n\n","/**\n * Default configuration values\n */\n\n/**\n * Default network to use\n */\nexport const DEFAULT_NETWORK = 'regtest' as const;\n\n/**\n * Default API request timeout in milliseconds\n */\nexport const DEFAULT_API_TIMEOUT = 120000; // 30 seconds\n\n/**\n * Default maximum number of retries for failed requests\n */\nexport const DEFAULT_MAX_RETRIES = 3;\n\n/**\n * Default log level\n */\nexport const DEFAULT_LOG_LEVEL = 3; // ERROR level\n\n","import { ValidationError } from '../errors';\nimport type { Network } from '../crypto/types';\nimport { NETWORK_MAP } from '../constants';\n\nconst VALID_NETWORKS: Network[] = ['mainnet', 'testnet','testnet4', 'signet', 'regtest'];\n\nexport function validateNetwork(network: string | number): asserts network is Network {\n const key = String(network);\n const normalized = NETWORK_MAP[key as keyof typeof NETWORK_MAP];\n \n if (!normalized || !VALID_NETWORKS.includes(normalized)) {\n throw new ValidationError(\n `Invalid network: ${network}. Must be one of: ${VALID_NETWORKS.join(', ')}`,\n 'network'\n );\n }\n}\n\nexport function normalizeNetwork(network: string | number): Network {\n validateNetwork(network);\n const key = String(network);\n return NETWORK_MAP[key as keyof typeof NETWORK_MAP] as Network;\n}\n\nexport function validateMnemonic(mnemonic: unknown, field: string = 'mnemonic'): asserts mnemonic is string {\n if (!mnemonic || typeof mnemonic !== 'string' || mnemonic.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n \n const words = mnemonic.trim().split(/\\s+/);\n if (words.length !== 12 && words.length !== 24) {\n throw new ValidationError(\n `${field} must be 12 or 24 words, got ${words.length} words`,\n field\n );\n }\n}\n\nexport function validateBase64(base64: unknown, field: string = 'data'): asserts base64 is string {\n if (!base64 || typeof base64 !== 'string' || base64.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n \n const base64Regex = /^[A-Za-z0-9+/=]+$/;\n if (!base64Regex.test(base64.trim())) {\n throw new ValidationError(`Invalid base64 format for ${field}`, field);\n }\n \n try {\n Buffer.from(base64.trim(), 'base64');\n } catch (error) {\n throw new ValidationError(`Invalid base64 encoding for ${field}`, field);\n }\n}\n\nexport function validatePsbt(psbt: unknown, field: string = 'psbt'): asserts psbt is string {\n validateBase64(psbt, field);\n \n const psbtString = String(psbt).trim();\n if (psbtString.length < 50) {\n throw new ValidationError(`${field} appears to be too short to be a valid PSBT`, field);\n }\n}\n\nexport function validateHex(hex: unknown, field: string = 'data'): asserts hex is string {\n if (!hex || typeof hex !== 'string' || hex.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n \n const hexRegex = /^[0-9a-fA-F]+$/;\n if (!hexRegex.test(hex.trim())) {\n throw new ValidationError(`Invalid hex format for ${field}`, field);\n }\n}\n\nexport function validateRequired<T>(\n value: T | null | undefined,\n field: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new ValidationError(`${field} is required`, field);\n }\n}\n\nexport function validateString(value: unknown, field: string): asserts value is string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n}\n\n","/**\n * RGB Lib Client - Local client using rgb-lib directly instead of HTTP server\n * \n * This client provides the same interface as RGBClient but uses rgb-lib locally\n * without requiring an RGB Node server.\n */\nimport * as path from 'path';\n\nimport * as fs from 'fs';\nimport { DEFAULT_TRANSPORT_ENDPOINTS, DEFAULT_INDEXER_URLS } from './network-config';\nimport {\n Unspent,\n DecodeRgbInvoiceResponse,\n} from '../types/rgb-model';\nimport { ValidationError, WalletError, CryptoError } from '../errors';\nimport { normalizeNetwork } from '../utils/validation';\nimport type { Network } from '../crypto/types';\n// Use default import for CommonJS compatibility in ESM\nimport rgblib from '@utexo/rgb-lib';\nimport { Transfer, Transaction, ListAssets, AssetBalance, AssetIfa, AssetNIA, BtcBalance, CreateUtxosEndRequestModel, SendAssetBeginRequestModel, CreateUtxosBeginRequestModel, SendAssetEndRequestModel, SendResult, SendBtcBeginRequestModel, SendBtcEndRequestModel, GetFeeEstimationRequestModel, GetFeeEstimationResponse, InvoiceRequest, InvoiceReceiveData, IssueAssetIfaRequestModel, InflateAssetIfaRequestModel, InflateEndRequestModel, OperationResult, FailTransfersRequest, WalletBackupResponse, WalletRestoreResponse, RecipientMap, VssBackupConfig, VssBackupInfo } from '../types/wallet-model';\n/**\n * Map network from client format to rgb-lib format\n */\nfunction mapNetworkToRgbLib(network: string): string {\n const networkMap: Record<string, string> = {\n 'mainnet': 'Mainnet',\n 'testnet': 'Testnet',\n 'testnet4': 'Testnet4',\n 'signet': 'Signet',\n 'regtest': 'Regtest',\n };\n const networkStr = String(network).toLowerCase();\n return networkMap[networkStr] || 'Regtest';\n}\n\nexport interface RgbLibGeneratedKeys {\n mnemonic: string;\n xpub: string;\n accountXpubVanilla: string;\n accountXpubColored: string;\n masterFingerprint: string;\n}\n\nexport const generateKeys = (network: string = 'regtest'): RgbLibGeneratedKeys => {\n return rgblib.generateKeys(mapNetworkToRgbLib(network));\n}\n\nexport const restoreWallet = (params: { backupFilePath: string; password: string; dataDir: string }): WalletRestoreResponse => {\n const { backupFilePath, password, dataDir } = params;\n \n if (!fs.existsSync(backupFilePath)) {\n throw new ValidationError('Backup file not found', 'backup');\n }\n \n if (!fs.existsSync(dataDir)) {\n throw new ValidationError(`Restore directory does not exist: ${dataDir}`, 'restoreDir');\n }\n \n rgblib.restoreBackup(backupFilePath, password, dataDir);\n \n return {\n message: 'Wallet restored successfully',\n };\n}\n\n/**\n * Restore a wallet from a VSS backup into a target directory.\n * Returns a message indicating the restored wallet path.\n */\nexport const restoreFromVss = (params: {\n config: VssBackupConfig;\n targetDir: string;\n}): WalletRestoreResponse & { walletPath: string } => {\n const anyLib: any = rgblib as any;\n if (typeof anyLib.restoreFromVss !== 'function') {\n throw new WalletError('VSS restore is not available in the current rgb-lib build.');\n }\n\n if (!params.targetDir) {\n throw new ValidationError('targetDir is required', 'targetDir');\n }\n\n const { config, targetDir } = params;\n // Native binding expects snake_case: server_url, store_id, signing_key\n const mappedConfig: any = {\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n };\n\n const walletPath: string = anyLib.restoreFromVss(mappedConfig, targetDir);\n return {\n message: 'Wallet restored from VSS successfully',\n walletPath,\n };\n};\n\n/**\n * RGB Lib Client class - Local implementation using rgb-lib\n */\nexport class RGBLibClient {\n private wallet: any;\n private online: any | null = null;\n private readonly xpubVan: string;\n private readonly xpubCol: string;\n private readonly masterFingerprint: string;\n private readonly network: Network;\n private readonly originalNetwork: string; // Preserve original input for rgb-lib mapping\n private readonly dataDir: string;\n private readonly transportEndpoint: string;\n private readonly indexerUrl: string;\n\n constructor(params: {\n xpubVan: string;\n xpubCol: string;\n masterFingerprint: string;\n dataDir: string;\n network: string;\n transportEndpoint?: string;\n indexerUrl?: string;\n }) {\n this.xpubVan = params.xpubVan;\n this.xpubCol = params.xpubCol;\n this.masterFingerprint = params.masterFingerprint;\n this.originalNetwork = params.network;\n this.network = normalizeNetwork(this.originalNetwork);\n \n this.dataDir = params.dataDir;\n this.transportEndpoint =\n params.transportEndpoint ||\n DEFAULT_TRANSPORT_ENDPOINTS[this.network] ||\n DEFAULT_TRANSPORT_ENDPOINTS.signet;\n\n if (params.indexerUrl) {\n this.indexerUrl = params.indexerUrl;\n } else {\n this.indexerUrl = DEFAULT_INDEXER_URLS[this.network] || DEFAULT_INDEXER_URLS.signet;\n }\n\n if (!fs.existsSync(this.dataDir)) {\n fs.mkdirSync(this.dataDir, { recursive: true });\n }\n\n const walletData = {\n dataDir: this.dataDir,\n bitcoinNetwork: mapNetworkToRgbLib(this.originalNetwork),\n databaseType: rgblib.DatabaseType.Sqlite,\n accountXpubVanilla: this.xpubVan,\n accountXpubColored: this.xpubCol,\n masterFingerprint: this.masterFingerprint,\n maxAllocationsPerUtxo: '1',\n vanillaKeychain: \"1\",\n supportedSchemas: [\n rgblib.AssetSchema.Cfa,\n rgblib.AssetSchema.Nia,\n rgblib.AssetSchema.Uda,\n ],\n };\n\n try {\n this.wallet = new rgblib.Wallet(new rgblib.WalletData(walletData));\n } catch (error) {\n console.log('error', error);\n throw new WalletError('Failed to initialize rgb-lib wallet', undefined, error as Error);\n }\n }\n\n /**\n * Ensure online connection is established\n */\n private ensureOnline(): void {\n if (this.online) {\n return;\n }\n\n try {\n this.online = this.wallet.goOnline(false, this.indexerUrl);\n } catch (error) {\n throw new WalletError('Failed to establish online connection', undefined, error as Error);\n }\n }\n\n /**\n * Get online object, creating it if needed\n */\n getOnline(): any {\n this.ensureOnline();\n return this.online;\n }\n\n registerWallet(): { address: string; btcBalance: BtcBalance } {\n const online = this.getOnline();\n const address = this.wallet.getAddress();\n const btcBalance = this.wallet.getBtcBalance(online, false);\n return {\n address,\n btcBalance,\n };\n }\n\n getBtcBalance(): BtcBalance {\n const online = this.getOnline();\n return this.wallet.getBtcBalance(online, false);\n }\n\n getAddress(): string {\n return this.wallet.getAddress();\n }\n\n listUnspents(): Unspent[] {\n const online = this.getOnline();\n return this.wallet.listUnspents(online, false, false);\n }\n\n createUtxosBegin(params: CreateUtxosBeginRequestModel): string {\n const online = this.getOnline();\n const upTo = params.upTo ?? false;\n const num = params.num !== undefined ? String(params.num) : null;\n const size = params.size !== undefined ? String(params.size) : null;\n const feeRate = params.feeRate ? String(params.feeRate) : '1';\n const skipSync = false;\n\n return this.wallet.createUtxosBegin(online, upTo, num, size, feeRate, skipSync);\n }\n\n createUtxosEnd(params: CreateUtxosEndRequestModel): number {\n const online = this.getOnline();\n const signedPsbt = params.signedPsbt;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.createUtxosEnd(online, signedPsbt, skipSync);\n }\n\n sendBegin(params: SendAssetBeginRequestModel): string {\n const online = this.getOnline(); \n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const donation = params.donation ?? false;\n\n let assetId: string | undefined = params.assetId;\n let amount: number | undefined = params.amount;\n let recipientId: string | undefined;\n let transportEndpoints: string[] = [];\n let witnessData: { amountSat: string, blinding?: number | null } | null = null;\n if (params.witnessData && params.witnessData.amountSat) {\n witnessData = {\n amountSat: String(params.witnessData.amountSat),\n blinding: params.witnessData.blinding ? Number(params.witnessData.blinding) : null,\n };\n }\n if (params.invoice) {\n const invoiceStr = params.invoice;\n const invoiceData = this.decodeRGBInvoice({ invoice: invoiceStr });\n recipientId = invoiceData.recipientId;\n transportEndpoints = invoiceData.transportEndpoints;\n }\n\n if (transportEndpoints.length === 0) {\n transportEndpoints = [this.transportEndpoint];\n }\n\n if (!assetId) {\n throw new ValidationError('asset_id is required for send operation', 'asset_id');\n }\n\n if (!recipientId) {\n throw new ValidationError('Could not extract recipient_id from invoice', 'invoice');\n }\n\n if (!amount) {\n throw new ValidationError('amount is required for send operation', 'amount');\n }\n\n const assignment = { Fungible: amount };\n const recipientMap: Record<string, any[]> = {\n [assetId]: [{\n recipientId: recipientId,\n witnessData: witnessData,\n assignment: assignment,\n transportEndpoints: transportEndpoints,\n }],\n };\n const psbt = this.wallet.sendBegin(\n online,\n recipientMap,\n donation,\n feeRate,\n minConfirmations\n );\n\n return psbt;\n }\n\n /**\n * Batch send: accepts an already-built recipientMap and calls sendBegin.\n */\n sendBeginBatch(params: {\n recipientMap: RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n }): string {\n const online = this.getOnline();\n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const donation = params.donation ?? true;\n const { recipientMap } = params;\n\n if (!recipientMap || typeof recipientMap !== 'object') {\n throw new ValidationError('recipientMap is required and must be a non-empty object', 'recipientMap');\n }\n const assetIds = Object.keys(recipientMap);\n if (assetIds.length === 0) {\n throw new ValidationError('recipientMap must contain at least one asset id', 'recipientMap');\n }\n for (const assetId of assetIds) {\n const recipients = recipientMap[assetId];\n if (!Array.isArray(recipients) || recipients.length === 0) {\n throw new ValidationError(`recipientMap[\"${assetId}\"] must be a non-empty array of recipients`, 'recipientMap');\n }\n }\n\n const psbt = this.wallet.sendBegin(\n online,\n recipientMap,\n donation,\n feeRate,\n minConfirmations\n );\n\n return psbt;\n }\n\n sendEnd(params: SendAssetEndRequestModel): SendResult {\n const online = this.getOnline();\n const signedPsbt = params.signedPsbt;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.sendEnd(online, signedPsbt, skipSync);\n }\n\n sendBtcBegin(params: SendBtcBeginRequestModel): string {\n const online = this.getOnline();\n const address = params.address;\n const amount = String(params.amount);\n const feeRate = String(params.feeRate);\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.sendBtcBegin(online, address, amount, feeRate, skipSync);\n }\n\n sendBtcEnd(params: SendBtcEndRequestModel): string {\n const online = this.getOnline();\n const signedPsbt = params.signedPsbt;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.sendBtcEnd(online, signedPsbt, skipSync);\n }\n\n getFeeEstimation(params: GetFeeEstimationRequestModel): GetFeeEstimationResponse {\n const online = this.getOnline();\n const blocks = String(params.blocks);\n try {\n const result = this.wallet.getFeeEstimation(online, blocks);\n if (typeof result === 'string') {\n try {\n return JSON.parse(result);\n } catch {\n return result as unknown as GetFeeEstimationResponse;\n }\n }\n return result;\n }catch(error) {\n console.warn('rgb-lib estimation fee are not available, using default fee rate 2');\n return 2 as GetFeeEstimationResponse; // return default fee rate 4 when lib estimation fee error\n }\n \n \n }\n\n blindReceive(params: InvoiceRequest): InvoiceReceiveData {\n const assetId = params.assetId || null;\n const assignment = `{\"Fungible\":${params.amount}}`;\n const durationSeconds = String(params.durationSeconds ?? 2000);\n const transportEndpoints: string[] = [this.transportEndpoint];\n const minConfirmations = String(params.minConfirmations ?? 3);\n\n return this.wallet.blindReceive(\n assetId,\n assignment,\n durationSeconds,\n transportEndpoints,\n minConfirmations\n );\n }\n\n witnessReceive(params: InvoiceRequest): InvoiceReceiveData {\n const assetId = params.assetId || null;\n const assignment = `{\"Fungible\":${params.amount}}`;\n const durationSeconds = String(params.durationSeconds ?? 2000);\n const transportEndpoints: string[] = [this.transportEndpoint];\n const minConfirmations = String(params.minConfirmations ?? 3);\n\n return this.wallet.witnessReceive(\n assetId,\n assignment,\n durationSeconds,\n transportEndpoints,\n minConfirmations\n );\n }\n\n getAssetBalance(asset_id: string): AssetBalance {\n return this.wallet.getAssetBalance(asset_id);\n }\n\n issueAssetNia(params: { ticker: string; name: string; amounts: number[]; precision: number }): AssetNIA {\n const ticker = params.ticker;\n const name = params.name;\n const precision = String(params.precision);\n const amounts = params.amounts.map(a => String(a));\n\n return this.wallet.issueAssetNIA(ticker, name, precision, amounts);\n }\n\n issueAssetIfa(params: IssueAssetIfaRequestModel): AssetIfa {\n throw new ValidationError('issueAssetIfa is not fully supported in rgb-lib. Use RGB Node server for IFA assets.', 'asset');\n }\n\n inflateBegin(params: InflateAssetIfaRequestModel): string {\n throw new ValidationError('inflateBegin is not fully supported in rgb-lib. Use RGB Node server for inflation operations.', 'asset');\n }\n\n inflateEnd(params: InflateEndRequestModel): OperationResult {\n throw new ValidationError('inflateEnd is not fully supported in rgb-lib. Use RGB Node server for inflation operations.', 'asset');\n }\n\n listAssets(): ListAssets {\n const filterAssetSchemas: string[] = [];\n return this.wallet.listAssets(filterAssetSchemas);\n }\n\n decodeRGBInvoice(params: { invoice: string }): DecodeRgbInvoiceResponse{\n const invoiceString = params.invoice;\n \n const invoice = new rgblib.Invoice(invoiceString);\n \n try {\n return invoice.invoiceData();\n } finally {\n invoice.drop();\n }\n }\n\n refreshWallet(): void {\n const online = this.getOnline();\n const assetId = null;\n const filter: string[] = [];\n const skipSync = false;\n\n const result = this.wallet.refresh(online, assetId, filter, skipSync);\n console.log('refresh state:', JSON.stringify(result, null, 2));\n }\n\n dropWallet(): void {\n if (this.online) {\n rgblib.dropOnline(this.online);\n this.online = null;\n }\n if (this.wallet) {\n this.wallet.drop();\n this.wallet = null;\n }\n }\n\n listTransactions(): Transaction[] {\n const online = this.getOnline();\n const skipSync = false;\n return this.wallet.listTransactions(online, skipSync);\n }\n\n listTransfers(asset_id?: string): Transfer[] {\n return this.wallet.listTransfers(asset_id?asset_id:null);\n }\n\n failTransfers(params: FailTransfersRequest): boolean {\n const online = this.getOnline();\n const batchTransferIdx = params.batchTransferIdx !== undefined ? params.batchTransferIdx : null;\n const noAssetOnly = params.noAssetOnly ?? false;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.failTransfers(online, batchTransferIdx, noAssetOnly, skipSync);\n }\n\n deleteTransfers(params: { batchTransferIdx?: number; noAssetOnly?: boolean }): boolean {\n const batchTransferIdx = params.batchTransferIdx !== undefined ? params.batchTransferIdx : null;\n const noAssetOnly = params.noAssetOnly ?? false;\n\n return this.wallet.deleteTransfers(batchTransferIdx, noAssetOnly);\n }\n\n syncWallet(): void {\n const online = this.getOnline();\n this.wallet.sync(online);\n }\n\n createBackup(params: {backupPath:string, password: string }): WalletBackupResponse {\n \n if(!params.backupPath) {\n throw new ValidationError('backupPath is required', 'backupPath');\n }\n if(!params.password) {\n throw new ValidationError('password is required', 'password');\n }\n \n if (!fs.existsSync(params.backupPath)) {\n throw new ValidationError(`Backup directory does not exist: ${params.backupPath}`, 'backupPath');\n }\n \n const fullBackupPath = path.join(params.backupPath, `${this.masterFingerprint}.backup`);\n this.wallet.backup(fullBackupPath, params.password);\n \n return {\n message: 'Backup created successfully',\n backupPath: fullBackupPath,\n };\n }\n\n /**\n * Ensure VSS backup support is available in the underlying rgb-lib bindings.\n * Returns the wallet instance and rgb-lib namespace as `any` for internal use.\n */\n private getVssBindingsOrThrow(methodName: 'vssBackup' | 'vssBackupInfo') {\n const walletAny: any = this.wallet;\n const anyLib: any = rgblib as any;\n if (!walletAny || typeof anyLib.VssBackupClient !== 'function' || typeof walletAny[methodName] !== 'function') {\n throw new WalletError('VSS backup is not available in the current rgb-lib build.');\n }\n return { walletAny, anyLib };\n }\n\n /**\n * Configure VSS cloud backup for this wallet.\n */\n configureVssBackup(config: VssBackupConfig): void {\n const walletAny: any = this.wallet;\n if (!walletAny || typeof walletAny.configureVssBackup !== 'function') {\n throw new WalletError('VSS backup is not available in the current rgb-lib build.');\n }\n\n // Native binding expects snake_case: server_url, store_id, signing_key\n const mappedConfig: any = {\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n };\n if (config.encryptionEnabled !== undefined) {\n mappedConfig.encryptionEnabled = config.encryptionEnabled;\n }\n if (config.autoBackup !== undefined) {\n mappedConfig.autoBackup = config.autoBackup;\n }\n if (config.backupMode !== undefined) {\n mappedConfig.backupMode = config.backupMode;\n }\n\n walletAny.configureVssBackup(mappedConfig);\n }\n\n /**\n * Disable automatic VSS backup for this wallet.\n */\n disableVssAutoBackup(): void {\n const walletAny: any = this.wallet;\n if (!walletAny || typeof walletAny.disableVssAutoBackup !== 'function') {\n throw new WalletError('VSS backup is not available in the current rgb-lib build.');\n }\n walletAny.disableVssAutoBackup();\n }\n\n /**\n * Trigger a VSS backup immediately using a one-off client created from config.\n * Returns the server version of the stored backup.\n */\n vssBackup(config: VssBackupConfig): number {\n const { walletAny, anyLib } = this.getVssBindingsOrThrow('vssBackup');\n\n const client = new anyLib.VssBackupClient({\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n });\n\n try {\n const version: number = walletAny.vssBackup(client);\n return version;\n } finally {\n if (typeof (client as any).drop === 'function') {\n (client as any).drop();\n }\n }\n }\n\n /**\n * Get VSS backup status information for this wallet using a one-off client.\n */\n vssBackupInfo(config: VssBackupConfig): VssBackupInfo {\n const { walletAny, anyLib } = this.getVssBindingsOrThrow('vssBackupInfo');\n\n const client = new anyLib.VssBackupClient({\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n });\n\n try {\n const info: any = walletAny.vssBackupInfo(client);\n return {\n backupExists: Boolean(info.backupExists ?? info.backup_exists),\n serverVersion: info.serverVersion ?? info.server_version ?? null,\n backupRequired: Boolean(info.backupRequired ?? info.backup_required),\n };\n } finally {\n if (typeof (client as any).drop === 'function') {\n (client as any).drop();\n }\n }\n }\n /**\n * Cleanup resources\n */\n dispose(): void {\n this.dropWallet();\n }\n}\n\n","export function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\nexport function isBare(): boolean {\n return (\n typeof globalThis !== 'undefined' &&\n (globalThis as any).Bare\n );\n}\n\nexport function isBrowser(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined'\n );\n}\n\nexport type Environment = 'node' | 'browser' | 'unknown';\n\nexport function getEnvironment(): Environment {\n if (isNode()) return 'node';\n if (isBrowser()) return 'browser';\n return 'unknown';\n}\n\n","/**\n * Convert various data formats to ArrayBuffer for Web Crypto API\n */\nexport function convertToArrayBuffer(data: any): ArrayBuffer {\n if (!data) {\n throw new Error('convertToArrayBuffer: data is undefined or null');\n }\n \n if (data instanceof Uint8Array) {\n return data.buffer as ArrayBuffer;\n }\n \n if (data && typeof data === 'object' && 'byteLength' in data && Object.prototype.toString.call(data) === '[object ArrayBuffer]') {\n return data as ArrayBuffer;\n }\n \n if (data && typeof data === 'object') {\n if ('buffer' in data && (data as any).buffer) {\n const buffer = (data as any).buffer;\n if (buffer instanceof ArrayBuffer) {\n return buffer;\n }\n const uint8 = new Uint8Array(data as any);\n return uint8.buffer;\n }\n \n try {\n const uint8 = new Uint8Array(data as any);\n return uint8.buffer;\n } catch (error) {\n throw new Error(`convertToArrayBuffer: Failed to convert data to ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n \n try {\n const uint8 = new Uint8Array(data as any);\n return uint8.buffer;\n } catch (error) {\n throw new Error(`convertToArrayBuffer: Failed to convert data to ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n","import { isBare, isNode } from './environment';\nimport { convertToArrayBuffer } from './crypto-helpers';\nimport * as noble from \"@noble/hashes/legacy.js\";\n\nexport async function sha256(data: Uint8Array | Buffer): Promise<Uint8Array> {\n if (isNode() || isBare()) {\n // String concatenation prevents bundlers from analyzing the import\n const nodeCrypto = 'node:' + 'crypto';\n const { createHash } = await import(nodeCrypto);\n return createHash('sha256').update(data as any).digest();\n }\n else {\n if (!data) {\n throw new Error('sha256: data is undefined or null');\n }\n const arrayBuffer = convertToArrayBuffer(data);\n return new Uint8Array(await crypto.subtle.digest('SHA-256', arrayBuffer));\n }\n}\n\n/**\n * RIPEMD160 hash - uses polyfill in browser (Web Crypto API doesn't support it)\n */\nexport async function ripemd160(data: Uint8Array): Promise<Uint8Array> {\n if (isNode()) {\n const nodeCrypto = 'node:' + 'crypto';\n const { createHash } = await import(nodeCrypto);\n return createHash('ripemd160').update(data).digest();\n } else if (isBare()) {\n return new Uint8Array(await noble.ripemd160(data));\n } else {\n // @ts-ignore - ripemd160 doesn't have type definitions\n const ripemd160Module = await import('ripemd160');\n const RIPEMD160 = ripemd160Module.default || ripemd160Module;\n const BufferPolyfill = (globalThis as any).Buffer || (await import('buffer')).Buffer;\n const hasher = new (RIPEMD160 as any)();\n hasher.update(BufferPolyfill.from(data));\n return new Uint8Array(hasher.digest());\n }\n}\n\nlet nodeCrypto: typeof import('node:crypto') | null = null;\n\nasync function getNodeCrypto() {\n if (!isNode()) {\n throw new Error('Node.js crypto is only available in Node.js environment');\n }\n if (!nodeCrypto) {\n const nodeCryptoPath = 'node:' + 'crypto';\n nodeCrypto = await import(nodeCryptoPath);\n }\n return nodeCrypto;\n}\n\nexport async function sha256Sync(data: Uint8Array | Buffer): Promise<Uint8Array> {\n if (!isNode()) {\n return sha256(data);\n }\n if (!data) {\n throw new Error('sha256Sync: data is undefined');\n }\n const crypto = await getNodeCrypto();\n if (!crypto) {\n throw new Error('Node.js crypto is not available');\n }\n return crypto.createHash('sha256').update(data as any).digest();\n}\n\nexport const ripemd160Sync: (data: Uint8Array | Buffer) => Promise<Uint8Array> = async (data: Uint8Array | Buffer): Promise<Uint8Array> => {\n if (!isNode()) {\n return ripemd160(data);\n }\n if (!data) {\n throw new Error('ripemd160Sync: data is undefined');\n }\n const crypto = await getNodeCrypto();\n if (!crypto) {\n throw new Error('Node.js crypto is not available');\n }\n return crypto.createHash('ripemd160').update(data as any).digest();\n};\n\n","import { ripemd160Sync, sha256Sync } from './crypto-browser';\nimport type { BIP32Interface } from 'bip32';\nimport { CryptoError } from '../errors';\n\n/**\n * Calculate master fingerprint from BIP32 node\n * fingerprint = first 4 bytes of HASH160(pubkey)\n */\nexport async function calculateMasterFingerprint(node: BIP32Interface): Promise<string> {\n const pubkey = node.publicKey;\n if (!pubkey) {\n throw new CryptoError('Public key is undefined');\n }\n \n const pubkeyData = pubkey instanceof Uint8Array ? pubkey : new Uint8Array(pubkey);\n const sha = await sha256Sync(pubkeyData);\n const ripemd160Fn = ripemd160Sync as (data: Uint8Array | Buffer) => Promise<Uint8Array>;\n const ripe = await ripemd160Fn(sha as Uint8Array);\n \n // Convert to Array first to avoid Buffer/Uint8Array serialization differences between Node.js and browser\n const fingerprintBytes = Array.from(ripe.subarray(0, 4));\n \n return fingerprintBytes\n .map(b => {\n const hex = b.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n })\n .join('');\n}\n\n","import { isNode } from './environment';\nimport { CryptoError } from '../errors';\nimport type { Network, NetworkVersions, BufferLike } from '../crypto/types';\nimport { BIP32_VERSIONS } from '../constants/network';\n\nfunction getWifVersion(network: Network): number {\n return network === 'mainnet' ? 0x80 : 0xef; // testnet, testnet4, signet, and regtest all use 0xef\n}\n\nfunction getNetworkVersionsFromConstants(network: Network): NetworkVersions {\n const bip32Versions = BIP32_VERSIONS[network];\n return {\n bip32: bip32Versions,\n wif: getWifVersion(network),\n };\n}\n\n/**\n * Normalize seed to Buffer/Uint8Array for BIP32 operations\n * Handles Buffer, Uint8Array, ArrayBuffer, and buffer-like objects\n */\nexport function normalizeSeedBuffer(seed: BufferLike): Buffer | Uint8Array {\n if (!seed) {\n throw new CryptoError('Failed to generate seed - seed is undefined');\n }\n \n let seedBuffer: Buffer | Uint8Array;\n \n if (seed instanceof Uint8Array) {\n seedBuffer = seed;\n } else if (seed instanceof ArrayBuffer) {\n seedBuffer = new Uint8Array(seed);\n } else if (seed && typeof seed === 'object') {\n if ('buffer' in seed && seed.buffer) {\n const bufferValue = seed.buffer;\n \n if (bufferValue instanceof ArrayBuffer) {\n if (isNode() && seed instanceof Buffer) {\n seedBuffer = seed as Buffer;\n } else {\n const byteOffset = seed.byteOffset || 0;\n const byteLength = seed.byteLength || (seed as { length?: number }).length || bufferValue.byteLength;\n seedBuffer = new Uint8Array(bufferValue, byteOffset, byteLength);\n }\n } else {\n try {\n seedBuffer = new Uint8Array(seed as ArrayLike<number>);\n } catch (error) {\n throw new CryptoError(`Failed to convert seed to Uint8Array (buffer property invalid): ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n } else {\n try {\n seedBuffer = new Uint8Array(seed as ArrayLike<number>);\n } catch (error) {\n throw new CryptoError(`Failed to convert seed to Uint8Array: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n } else {\n throw new CryptoError(`Invalid seed type: ${typeof seed}`);\n }\n \n return seedBuffer;\n}\n\nexport function toNetworkName(bitcoinNetwork: string | number): Network {\n const n = String(bitcoinNetwork).toLowerCase();\n if (n.includes('main')) return 'mainnet';\n if (n.includes('reg')) return 'regtest';\n if (n.includes('sig')) return 'signet';\n if (n.includes('testnet4')) return 'testnet4';\n return 'testnet';\n}\n\nexport function getNetworkVersions(bitcoinNetwork: string | number): NetworkVersions {\n const net = toNetworkName(bitcoinNetwork);\n return getNetworkVersionsFromConstants(net);\n}\n\n","import { isNode } from '../utils/environment';\nimport type {\n BIP39Module,\n ECCModule,\n BIP32Factory,\n BitcoinJsPayments,\n BitcoinJsNetworks,\n BIP341Module,\n BDKModule,\n BDKInit,\n} from './types';\n\ntype BaseDependencies = {\n bip39: BIP39Module;\n ecc: ECCModule;\n factory: BIP32Factory;\n};\n\nexport type SignerDependencies = BaseDependencies & {\n Psbt: typeof import('bitcoinjs-lib').Psbt;\n payments: BitcoinJsPayments;\n networks: BitcoinJsNetworks;\n toXOnly: (pubkey: Buffer) => Buffer;\n bdk: BDKModule;\n init: BDKInit;\n};\n\nlet baseDeps: BaseDependencies | null = null;\nlet basePromise: Promise<BaseDependencies> | null = null;\n\nasync function loadBaseDependencies(): Promise<BaseDependencies> {\n if (isNode()) {\n const nodeModule = 'node:' + 'module';\n const { createRequire } = await import(nodeModule);\n // @ts-ignore - import.meta.url not available in CJS build context\n const requireFromModule = createRequire(import.meta.url);\n\n const bip39 = requireFromModule('bip39') as unknown as BIP39Module;\n const eccModule = requireFromModule('@bitcoinerlab/secp256k1') as unknown as { default?: unknown };\n const ecc =\n (eccModule && typeof eccModule === 'object' && 'default' in eccModule\n ? (eccModule.default as ECCModule)\n : (eccModule as unknown as ECCModule));\n const bip32 = requireFromModule('bip32') as unknown as { BIP32Factory: BIP32Factory };\n\n return {\n bip39,\n ecc,\n factory: bip32.BIP32Factory,\n };\n }\n\n const bip39Module = await import('bip39');\n const bip39 = (bip39Module.default as BIP39Module) || (bip39Module as unknown as BIP39Module);\n\n const eccModule = await import('@bitcoinerlab/secp256k1');\n const ecc =\n (eccModule.default as ECCModule) ||\n (eccModule as unknown as ECCModule);\n\n const bip32 = (await import('bip32')) as unknown as { BIP32Factory: BIP32Factory };\n\n return {\n bip39,\n ecc,\n factory: bip32.BIP32Factory,\n };\n}\n\nexport async function ensureBaseDependencies(): Promise<BaseDependencies> {\n if (baseDeps) {\n return baseDeps;\n }\n if (!basePromise) {\n basePromise = loadBaseDependencies().then((deps) => {\n baseDeps = deps;\n basePromise = null;\n return deps;\n }).catch((error) => {\n basePromise = null;\n throw error;\n });\n }\n return basePromise;\n}\n\nlet signerDeps: SignerDependencies | null = null;\nlet signerPromise: Promise<SignerDependencies> | null = null;\n\nasync function loadSignerDependencies(): Promise<SignerDependencies> {\n const base = await ensureBaseDependencies();\n\n if (isNode()) {\n const bdkNode = await import('@bitcoindevkit/bdk-wallet-node');\n const init =\n ((bdkNode as { default?: unknown }).default as BDKInit) ||\n ((bdkNode as { init?: unknown }).init as BDKInit) ||\n (bdkNode as unknown as BDKInit);\n const bdk = bdkNode as unknown as BDKModule;\n\n const nodeModule = 'node:' + 'module';\n const { createRequire } = await import(nodeModule);\n // @ts-ignore - import.meta.url not available in CJS build context\n const requireFromModule = createRequire(import.meta.url);\n\n const bitcoinjs = requireFromModule('bitcoinjs-lib') as unknown as {\n Psbt: typeof import('bitcoinjs-lib').Psbt;\n payments: BitcoinJsPayments;\n networks: BitcoinJsNetworks;\n };\n const Psbt = bitcoinjs.Psbt;\n const payments = bitcoinjs.payments;\n const networks = bitcoinjs.networks;\n\n const bip341 = requireFromModule('bitcoinjs-lib/src/payments/bip341.js') as unknown as BIP341Module;\n const toXOnly =\n bip341.toXOnly || ((pubkey: Buffer) => Buffer.from(pubkey.slice(1)));\n\n return {\n ...base,\n Psbt,\n payments,\n networks,\n toXOnly,\n bdk,\n init,\n };\n }\n\n const bdkWeb = await import('@bitcoindevkit/bdk-wallet-web');\n const init =\n ((bdkWeb as { default?: unknown }).default as BDKInit) ||\n ((bdkWeb as { init?: unknown }).init as BDKInit) ||\n (bdkWeb as unknown as BDKInit);\n const bdk = bdkWeb as unknown as BDKModule;\n\n const bitcoinModule = (await import('bitcoinjs-lib')) as unknown as {\n Psbt: typeof import('bitcoinjs-lib').Psbt;\n payments: BitcoinJsPayments;\n networks: BitcoinJsNetworks;\n };\n const Psbt = bitcoinModule.Psbt;\n const payments = bitcoinModule.payments;\n const networks = bitcoinModule.networks;\n\n const bip341 = (await import('bitcoinjs-lib/src/payments/bip341.js')) as unknown as BIP341Module;\n const toXOnly =\n bip341.toXOnly || ((pubkey: Buffer) => Buffer.from(pubkey.slice(1)));\n\n return {\n ...base,\n Psbt,\n payments,\n networks,\n toXOnly,\n bdk,\n init,\n };\n}\n\nexport async function ensureSignerDependencies(): Promise<SignerDependencies> {\n if (signerDeps) {\n return signerDeps;\n }\n if (!signerPromise) {\n signerPromise = loadSignerDependencies().then((deps) => {\n signerDeps = deps;\n signerPromise = null;\n return deps;\n }).catch((error) => {\n signerPromise = null;\n throw error;\n });\n }\n return signerPromise;\n}\n\n","// Copyright 2024 Tether Operations Limited\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/**\n * RGB Key Generation and Derivation\n * \n * This module provides RGB-specific cryptographic key operations including:\n * - RGB wallet key generation (vanilla and colored keychains)\n * - BIP86 Taproot key derivation for RGB protocol\n * - Account-level key derivation with RGB coin types\n * - Master fingerprint calculation for RGB wallets\n */\n\nimport type { BIP32Interface } from 'bip32';\nimport type { Network } from './types';\nimport { ValidationError, CryptoError } from '../errors';\nimport { validateMnemonic, normalizeNetwork } from '../utils/validation';\nimport {\n DERIVATION_PURPOSE,\n DERIVATION_ACCOUNT,\n COIN_RGB_MAINNET,\n COIN_RGB_TESTNET,\n} from '../constants';\nimport { calculateMasterFingerprint } from '../utils/fingerprint';\nimport { normalizeSeedBuffer, toNetworkName, getNetworkVersions } from '../utils/bip32-helpers';\nimport type { BIP39Module, ECCModule, BIP32Factory } from './types';\nimport { ensureBaseDependencies } from './dependencies';\n\nexport type SeedInput = string | Uint8Array;\n\nexport function normalizeSeedInput(seed: SeedInput, field: string = 'seed'): Uint8Array {\n if (typeof seed === 'string') {\n const trimmed = seed.trim();\n if (!trimmed) {\n throw new ValidationError(`${field} must be a non-empty hex string`, field);\n }\n const hex = trimmed.startsWith('0x') ? trimmed.slice(2) : trimmed;\n if (hex.length % 2 !== 0) {\n throw new ValidationError(`${field} hex string must have even length`, field);\n }\n if (hex.length !== 128) {\n throw new ValidationError(`${field} must be 64 bytes (128 hex characters)`, field);\n }\n if (!/^[0-9a-fA-F]+$/.test(hex)) {\n throw new ValidationError(`${field} must be a valid hex string`, field);\n }\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n const byte = hex.slice(i * 2, i * 2 + 2);\n bytes[i] = parseInt(byte, 16);\n }\n return bytes;\n }\n\n if (seed instanceof Uint8Array) {\n if (seed.length === 0) {\n throw new ValidationError(`${field} must not be empty`, field);\n }\n return new Uint8Array(seed);\n }\n\n throw new ValidationError(`${field} must be a 64-byte hex string or Uint8Array`, field);\n}\n\nexport interface GeneratedKeys {\n mnemonic: string;\n xpub: string;\n accountXpubVanilla: string;\n accountXpubColored: string;\n masterFingerprint: string;\n xpriv: string;\n}\n\nexport interface AccountXpubs {\n account_xpub_vanilla: string;\n account_xpub_colored: string;\n}\n\n/**\n * Get coin type for derivation path\n */\nfunction getCoinType(bitcoinNetwork: string | number, rgb: boolean): number {\n const net = toNetworkName(bitcoinNetwork);\n if (rgb) return net === 'mainnet' ? COIN_RGB_MAINNET : COIN_RGB_TESTNET;\n return net === 'mainnet' ? 0 : 1;\n}\n\n\n/**\n * Generate account derivation path: m / 86' / coinType' / 0'\n */\nexport function accountDerivationPath(bitcoinNetwork: string | number, rgb: boolean): string {\n const coinType = getCoinType(bitcoinNetwork, rgb);\n return `m/${DERIVATION_PURPOSE}'/${coinType}'/${DERIVATION_ACCOUNT}'`;\n}\n\n/**\n * Calculate master fingerprint from BIP32 node\n * Alias for shared fingerprint calculation utility\n */\nasync function masterFingerprintFromNode(node: BIP32Interface): Promise<string> {\n return calculateMasterFingerprint(node);\n}\n\n/**\n * Convert mnemonic to root BIP32 node\n */\nasync function mnemonicToRoot(mnemonic: string, bitcoinNetwork: string | number): Promise<BIP32Interface> {\n const { bip39, ecc, factory } = await ensureBaseDependencies();\n\n if (!bip39 || typeof bip39.mnemonicToSeedSync !== 'function') {\n throw new CryptoError('bip39 module not loaded correctly');\n }\n\n const seedBuffer = normalizeSeedBuffer(bip39.mnemonicToSeedSync(mnemonic));\n const versions = getNetworkVersions(bitcoinNetwork);\n const bip32 = factory(ecc);\n\n try {\n return bip32.fromSeed(seedBuffer, versions);\n } catch (error) {\n throw new CryptoError(\n `Failed to create BIP32 root node from seed: ${error instanceof Error ? error.message : String(error)}`,\n error as Error\n );\n }\n}\n\n/**\n * Get account extended public key from mnemonic\n */\nasync function getAccountXpub(mnemonic: string, bitcoinNetwork: string | number, rgb: boolean): Promise<string> {\n const root = await mnemonicToRoot(mnemonic, bitcoinNetwork);\n const path = accountDerivationPath(bitcoinNetwork, rgb);\n const acct = root.derivePath(path);\n return acct.neutered().toBase58();\n}\n\n/**\n * Get master extended public key from mnemonic\n */\nasync function getMasterXpub(mnemonic: string, bitcoinNetwork: string | number): Promise<string> {\n const root = await mnemonicToRoot(mnemonic, bitcoinNetwork);\n return root.neutered().toBase58();\n}\n\n/**\n * Get master extended private key (xpriv) from mnemonic\n */\nasync function getMasterXpriv(mnemonic: string, bitcoinNetwork: string | number): Promise<string> {\n const root = await mnemonicToRoot(mnemonic, bitcoinNetwork);\n return root.toBase58();\n}\n\nfunction deriveAccountXpubsFromRoot(root: BIP32Interface, network: Network) {\n const vanillaPath = accountDerivationPath(network, false);\n const coloredPath = accountDerivationPath(network, true);\n\n return {\n account_xpub_vanilla: root.derivePath(vanillaPath).neutered().toBase58(),\n account_xpub_colored: root.derivePath(coloredPath).neutered().toBase58(),\n };\n}\n\nasync function buildGeneratedKeysFromRoot(\n root: BIP32Interface,\n network: Network,\n mnemonic: string\n): Promise<GeneratedKeys> {\n const xpub = root.neutered().toBase58();\n const xpriv = root.toBase58();\n const master_fingerprint = await masterFingerprintFromNode(root);\n const { account_xpub_vanilla, account_xpub_colored } = deriveAccountXpubsFromRoot(root, network);\n\n return {\n mnemonic,\n xpub,\n accountXpubVanilla: account_xpub_vanilla,\n accountXpubColored: account_xpub_colored,\n masterFingerprint: master_fingerprint,\n xpriv,\n };\n}\n\n/**\n * Get extended public key (xpub) from extended private key (xpriv)\n * Internal helper function\n */\nasync function getXpubFromXprivInternal(xpriv: string, bitcoinNetwork?: string | number): Promise<string> {\n const { ecc, factory } = await ensureBaseDependencies();\n\n try {\n // BIP32Factory is a factory function that returns BIP32 interface\n // Use it to create a BIP32 instance from the xpriv\n const bip32 = factory(ecc);\n\n // fromBase58 requires network versions for validation\n // If network is not provided, try to infer from xpriv prefix (xprv/tprv for mainnet/testnet)\n let node;\n if (bitcoinNetwork) {\n const versions = getNetworkVersions(bitcoinNetwork);\n node = bip32.fromBase58(xpriv, versions);\n } else {\n // Try to infer network from xpriv prefix\n // xprv = mainnet, tprv = testnet/regtest\n const inferredNetwork = xpriv.startsWith('xprv') ? 'mainnet' : 'testnet';\n const versions = getNetworkVersions(inferredNetwork);\n node = bip32.fromBase58(xpriv, versions);\n }\n\n return node.neutered().toBase58();\n } catch (error) {\n throw new CryptoError('Failed to derive xpub from xpriv', error as Error);\n }\n}\n\n/**\n * Build complete keys output object from mnemonic\n */\nasync function buildKeysOutput(mnemonic: string, bitcoinNetwork: string | number): Promise<GeneratedKeys> {\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n const root = await mnemonicToRoot(mnemonic, normalizedNetwork);\n return buildGeneratedKeysFromRoot(root, normalizedNetwork, mnemonic);\n}\n\nasync function buildKeysOutputFromSeed(seed: Uint8Array | Buffer, bitcoinNetwork: string | number): Promise<GeneratedKeys> {\n const { ecc, factory } = await ensureBaseDependencies();\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n const seedBuffer = normalizeSeedBuffer(seed);\n const versions = getNetworkVersions(bitcoinNetwork);\n const bip32 = factory(ecc);\n\n let root: BIP32Interface;\n try {\n root = bip32.fromSeed(seedBuffer, versions);\n } catch (error) {\n throw new CryptoError('Failed to create BIP32 root node from seed', error as Error);\n }\n\n return buildGeneratedKeysFromRoot(root, normalizedNetwork, '');\n}\n\n/**\n * Build complete keys output object from xpriv\n */\nasync function buildKeysOutputFromXpriv(xpriv: string, bitcoinNetwork: string | number): Promise<GeneratedKeys> {\n const { ecc, factory } = await ensureBaseDependencies();\n try {\n // BIP32Factory is a factory function that returns BIP32 interface\n const bip32 = factory(ecc);\n\n // Get network versions for validation\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n const versions = getNetworkVersions(bitcoinNetwork);\n const root = bip32.fromBase58(xpriv, versions);\n\n return buildGeneratedKeysFromRoot(root, normalizedNetwork, '');\n } catch (error) {\n throw new CryptoError('Failed to derive keys from xpriv', error as Error);\n }\n}\n\n/**\n * Generate new wallet keys with a random mnemonic\n * Mirrors rgb_lib::generate_keys (creates new 12-word mnemonic)\n * \n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @returns Promise resolving to generated keys including mnemonic, xpubs, and master fingerprint\n * @throws {CryptoError} If key generation fails\n * \n * @example\n * ```typescript\n * const keys = await generateKeys('testnet');\n * console.log('Mnemonic:', keys.mnemonic);\n * console.log('Master Fingerprint:', keys.master_fingerprint);\n * ```\n */\nexport async function generateKeys(bitcoinNetwork: string | number = 'regtest'): Promise<GeneratedKeys> {\n try {\n const { bip39 } = await ensureBaseDependencies();\n if (!bip39 || typeof (bip39 as any).generateMnemonic !== 'function') {\n throw new Error('bip39 not loaded. Dependencies may not have initialized correctly.');\n }\n const mnemonic = (bip39 as any).generateMnemonic(128);\n return await buildKeysOutput(mnemonic, bitcoinNetwork);\n } catch (error) {\n if (error instanceof Error && error.message.includes('bip39 not loaded')) {\n throw new CryptoError('Failed to load dependencies', error);\n }\n // Log the actual error for debugging\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorStack = error instanceof Error ? error.stack : undefined;\n throw new CryptoError(`Failed to generate mnemonic: ${errorMessage}`, error as Error);\n }\n}\n\n/**\n * Derive wallet keys from existing mnemonic\n * Takes a mnemonic phrase and derives all keys (xpubs, master fingerprint)\n * \n * This function is the counterpart to `generateKeys()` - instead of generating\n * a new mnemonic, it derives keys from an existing one.\n * \n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonic - BIP39 mnemonic phrase\n * @returns Promise resolving to derived keys including mnemonic, xpubs, and master fingerprint\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n * \n * @example\n * ```typescript\n * const keys = await deriveKeysFromMnemonic('testnet', 'abandon abandon abandon...');\n * console.log('Account XPub:', keys.account_xpub_vanilla);\n * ```\n */\nexport async function deriveKeysFromMnemonic(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<GeneratedKeys> {\n validateMnemonic(mnemonic, 'mnemonic');\n\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n const { bip39 } = await ensureBaseDependencies();\n const trimmedMnemonic = mnemonic.trim();\n if (!bip39 || !bip39.validateMnemonic(trimmedMnemonic)) {\n throw new ValidationError('Invalid mnemonic format - failed BIP39 validation', 'mnemonic');\n }\n\n return await buildKeysOutput(trimmedMnemonic, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive keys from mnemonic', error as Error);\n }\n}\n\n/**\n * Derive wallet keys directly from a BIP39 seed (hex string or Uint8Array)\n */\nexport async function deriveKeysFromSeed(\n bitcoinNetwork: string | number = 'regtest',\n seed: string | Uint8Array\n): Promise<GeneratedKeys> {\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n const normalizedSeed = normalizeSeedInput(seed, 'seed');\n return await buildKeysOutputFromSeed(normalizedSeed, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive keys from seed', error as Error);\n }\n}\n\n/**\n * Derive wallet keys from either a mnemonic phrase or seed\n * Automatically detects the input type and uses the appropriate derivation method\n * \n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonicOrSeed - Either a BIP39 mnemonic phrase (string) or seed (Uint8Array | string)\n * @returns Promise resolving to derived keys including mnemonic, xpubs, and master fingerprint\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n * \n * @example\n * ```typescript\n * // With mnemonic\n * const keys1 = await deriveKeysFromMnemonicOrSeed('testnet', 'abandon abandon abandon...');\n * \n * // With seed (Uint8Array)\n * const seed = new Uint8Array([...]);\n * const keys2 = await deriveKeysFromMnemonicOrSeed('testnet', seed);\n * ```\n */\nexport async function deriveKeysFromMnemonicOrSeed(\n bitcoinNetwork: string | number = 'regtest',\n mnemonicOrSeed: string | Uint8Array\n): Promise<GeneratedKeys> {\n if (typeof mnemonicOrSeed === 'string') {\n const trimmed = mnemonicOrSeed.trim();\n const words = trimmed.split(/\\s+/);\n const isLikelyMnemonic = trimmed.includes(' ') && words.length >= 12 && words.length <= 24;\n \n if (isLikelyMnemonic) {\n try {\n return await deriveKeysFromMnemonic(bitcoinNetwork, trimmed);\n } catch (error) {\n if (error instanceof ValidationError) {\n return await deriveKeysFromSeed(bitcoinNetwork, trimmed);\n }\n throw error;\n }\n } else {\n return await deriveKeysFromSeed(bitcoinNetwork, trimmed);\n }\n } else {\n return await deriveKeysFromSeed(bitcoinNetwork, mnemonicOrSeed);\n }\n}\n\n/**\n * Restore wallet keys from existing mnemonic (backward compatibility alias)\n * @deprecated Use `deriveKeysFromMnemonic()` instead. This alias will be removed in a future version.\n * @see deriveKeysFromMnemonic\n */\nexport async function restoreKeys(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<GeneratedKeys> {\n return deriveKeysFromMnemonic(bitcoinNetwork, mnemonic);\n}\n\n/**\n * Get account xpubs from mnemonic (convenience function)\n * \n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonic - BIP39 mnemonic phrase\n * @returns Promise resolving to account xpubs for vanilla and colored keychains\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n * \n * @example\n * ```typescript\n * const xpubs = await accountXpubsFromMnemonic('testnet', 'abandon abandon abandon...');\n * console.log('Vanilla XPub:', xpubs.account_xpub_vanilla);\n * console.log('Colored XPub:', xpubs.account_xpub_colored);\n * ```\n */\n/**\n * Get master extended private key (xpriv) from mnemonic\n * \n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)\n * @returns Promise resolving to master xpriv (extended private key)\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n * \n * @example\n * ```typescript\n * const xpriv = await getXprivFromMnemonic('testnet', 'your mnemonic phrase here');\n * console.log('Master xpriv:', xpriv);\n * ```\n */\nexport async function getXprivFromMnemonic(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<string> {\n validateMnemonic(mnemonic, 'mnemonic');\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n return await getMasterXpriv(mnemonic, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive xpriv from mnemonic', error as Error);\n }\n}\n\n/**\n * Get extended public key (xpub) from extended private key (xpriv)\n * \n * @param xpriv - Extended private key (base58 encoded)\n * @returns Promise resolving to xpub (extended public key)\n * @throws {CryptoError} If xpriv is invalid or derivation fails\n * \n * @example\n * ```typescript\n * const xpub = await getXpubFromXpriv('xprv...');\n * console.log('xpub:', xpub);\n * ```\n */\nexport async function getXpubFromXpriv(xpriv: string, bitcoinNetwork?: string | number): Promise<string> {\n if (!xpriv || typeof xpriv !== 'string') {\n throw new ValidationError('xpriv must be a non-empty string', 'xpriv');\n }\n\n try {\n return await getXpubFromXprivInternal(xpriv, bitcoinNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive xpub from xpriv', error as Error);\n }\n}\n\n/**\n * Derive wallet keys from extended private key (xpriv)\n * Similar to deriveKeysFromMnemonic but starts from xpriv instead of mnemonic\n * \n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param xpriv - Extended private key (base58 encoded)\n * @returns Promise resolving to generated keys (without mnemonic)\n * @throws {ValidationError} If xpriv is invalid\n * @throws {CryptoError} If key derivation fails\n * \n * @example\n * ```typescript\n * const keys = await deriveKeysFromXpriv('testnet', 'xprv...');\n * console.log('Master Fingerprint:', keys.master_fingerprint);\n * console.log('Account xpub vanilla:', keys.account_xpub_vanilla);\n * ```\n */\nexport async function deriveKeysFromXpriv(\n bitcoinNetwork: string | number = 'regtest',\n xpriv: string\n): Promise<GeneratedKeys> {\n if (!xpriv || typeof xpriv !== 'string') {\n throw new ValidationError('xpriv must be a non-empty string', 'xpriv');\n }\n\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n return await buildKeysOutputFromXpriv(xpriv, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive keys from xpriv', error as Error);\n }\n}\n\nexport async function accountXpubsFromMnemonic(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<AccountXpubs> {\n validateMnemonic(mnemonic, 'mnemonic');\n\n try {\n const { bip39 } = await ensureBaseDependencies();\n if (!bip39 || !bip39.validateMnemonic(mnemonic)) {\n throw new ValidationError('Invalid mnemonic format - failed BIP39 validation', 'mnemonic');\n }\n return {\n account_xpub_vanilla: await getAccountXpub(mnemonic, bitcoinNetwork, false),\n account_xpub_colored: await getAccountXpub(mnemonic, bitcoinNetwork, true)\n };\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive account xpubs from mnemonic', error as Error);\n }\n}\n","// RGB PSBT Signer Library using bdk-wasm\n// Signs both create_utxo_begin and send_begin PSBTs from rgb-lib\n// \n// This module provides RGB-specific PSBT signing functionality for:\n// - create_utxo_begin PSBTs: Creating UTXOs for RGB wallet operations\n// - send_begin PSBTs: Signing RGB asset transfer transactions\n//\n// Usage:\n// import { signPsbt, signPsbtSync } from './signer';\n// const signedPsbt = signPsbt(mnemonic, psbtBase64, 'testnet');\n\nimport type { BIP32Interface } from 'bip32';\nimport type { Psbt as BitcoinJsPsbt, Network as BitcoinJsNetwork } from 'bitcoinjs-lib';\nimport { ValidationError, CryptoError } from '../errors';\nimport { validateMnemonic, validatePsbt, normalizeNetwork } from '../utils/validation';\nimport {\n DERIVATION_PURPOSE,\n DERIVATION_ACCOUNT,\n KEYCHAIN_RGB,\n KEYCHAIN_BTC,\n COIN_RGB_TESTNET,\n COIN_RGB_MAINNET,\n COIN_BITCOIN_MAINNET,\n COIN_BITCOIN_TESTNET,\n} from '../constants';\nimport type { \n Network, \n PsbtType, \n NetworkVersions, \n Descriptors,\n BDKWallet,\n BDKPsbt,\n BDKNetwork,\n BDKSignOptions\n} from './types';\nimport { calculateMasterFingerprint } from '../utils/fingerprint';\nimport { getNetworkVersions as getBIP32NetworkVersions, normalizeSeedBuffer } from '../utils/bip32-helpers';\nimport { accountDerivationPath, normalizeSeedInput } from './keys';\nimport { sha256 } from '../utils/crypto-browser';\nimport { ensureBaseDependencies, ensureSignerDependencies, type SignerDependencies } from './dependencies';\n\n// Re-export types from types module\nexport type { Network, PsbtType, NetworkVersions, Descriptors } from './types';\n\nexport interface SignPsbtOptions {\n signOptions?: BDKSignOptions;\n preprocess?: boolean;\n}\n\ntype DerivationPath = string | number[];\n\n/**\n * Normalize derivation path string\n */\nfunction normalizePath(path: DerivationPath): DerivationPath {\n if (typeof path === 'string') {\n // Remove duplicate m/ prefixes\n if (path.startsWith('m/m/')) {\n return path.replace(/^m\\/m\\//, 'm/');\n }\n return path;\n } else if (Array.isArray(path)) {\n // Remove leading 0 if it represents duplicate m/ prefix\n if (path.length > 0 && path[0] === 0 && path.length > 1) {\n const second = path[1];\n if (typeof second === 'number' && second >= 0x80000000) {\n return path.slice(1);\n }\n }\n return path;\n }\n return path;\n}\n\n/**\n * Convert derivation path to string format\n */\nfunction pathToString(path: DerivationPath): string {\n if (typeof path === 'string') {\n return path;\n } else if (Array.isArray(path)) {\n return path.map(p => {\n if (typeof p === 'number') {\n return p >= 0x80000000 ? `${(p & 0x7fffffff)}'` : `${p}`;\n }\n return String(p);\n }).join('/');\n }\n return '';\n}\n\n/**\n * Preprocessing for send_begin PSBTs: Update RGB PSBT metadata to BDK can match inputs.\n */\nfunction preprocessPsbtForBDK(\n psbtBase64: string,\n rootNode: BIP32Interface,\n fp: string,\n network: Network,\n deps: SignerDependencies\n): string {\n const { Psbt, networks, payments, toXOnly } = deps;\n if (!Psbt || !networks || !payments || !toXOnly) {\n throw new CryptoError('BitcoinJS modules not loaded');\n }\n const psbt = Psbt.fromBase64(psbtBase64.trim()) as BitcoinJsPsbt;\n const bjsNet: BitcoinJsNetwork = network === 'mainnet' ? networks.bitcoin : networks.testnet;\n \n for (let i = 0; i < psbt.inputCount; i++) {\n const input = psbt.data.inputs[i];\n \n if (input.tapBip32Derivation && input.tapBip32Derivation.length > 0) {\n input.tapBip32Derivation.forEach((deriv) => {\n const normalizedPath = normalizePath(deriv.path as DerivationPath);\n deriv.path = pathToString(normalizedPath);\n let pathStr = pathToString(normalizedPath);\n \n if (!pathStr.startsWith('m/')) {\n pathStr = 'm/' + pathStr;\n }\n \n try {\n const derivedNode = rootNode.derivePath(pathStr);\n const pubkey = derivedNode.publicKey;\n if (!pubkey) {\n return;\n }\n const pubkeyBuffer = pubkey instanceof Buffer ? pubkey : Buffer.from(pubkey);\n const xOnly = toXOnly(pubkeyBuffer);\n const p2tr = payments.p2tr({ internalPubkey: xOnly, network: bjsNet });\n const expectedScript = p2tr.output;\n \n if (!expectedScript) {\n return;\n }\n \n // Update witness_utxo.script if it doesn't match\n if (input.witnessUtxo && expectedScript) {\n const currentScript = input.witnessUtxo.script;\n if (!currentScript.equals(expectedScript)) {\n input.witnessUtxo.script = expectedScript;\n }\n }\n \n // Update tapInternalKey to match derivation\n if (xOnly) {\n if (!input.tapInternalKey || !input.tapInternalKey.equals(xOnly)) {\n input.tapInternalKey = xOnly;\n }\n }\n \n // Update master fingerprint\n const fingerprintBuf = Buffer.from(fp, 'hex');\n if (!deriv.masterFingerprint) {\n deriv.masterFingerprint = fingerprintBuf;\n } else {\n const currentFp = Buffer.from(deriv.masterFingerprint);\n if (!currentFp.equals(fingerprintBuf)) {\n deriv.masterFingerprint = fingerprintBuf;\n }\n }\n \n // Update pubkey in derivation\n if (!deriv.pubkey || !deriv.pubkey.equals(xOnly)) {\n deriv.pubkey = xOnly;\n }\n } catch (e) {\n // Skip this derivation if it can't be derived from path\n }\n });\n } \n \n // Update legacy bip32Derivation if needed\n if (input.bip32Derivation && input.bip32Derivation.length > 0) {\n input.bip32Derivation.forEach((deriv) => {\n const normalizedPath = normalizePath(deriv.path as DerivationPath);\n deriv.path = pathToString(normalizedPath);\n });\n }\n }\n \n return psbt.toBase64();\n}\n\n/**\n * Detect PSBT type by examining derivation paths\n * @returns {'create_utxo'|'send'} PSBT type\n */\nfunction detectPsbtType(psbtBase64: string, deps: SignerDependencies): PsbtType {\n const { Psbt } = deps;\n if (!Psbt) {\n throw new CryptoError('BitcoinJS Psbt module not loaded');\n }\n try {\n const psbt = Psbt.fromBase64(psbtBase64.trim()) as BitcoinJsPsbt;\n for (let i = 0; i < psbt.inputCount; i++) {\n const input = psbt.data.inputs[i];\n if (input.tapBip32Derivation && input.tapBip32Derivation.length > 0) {\n for (const deriv of input.tapBip32Derivation) {\n const pathStr = pathToString(deriv.path as DerivationPath);\n // Check if path contains RGB coin type - indicates send_begin PSBT\n if (pathStr.includes(\"827167'\") || pathStr.includes(\"827166'\")) {\n return 'send';\n }\n }\n }\n }\n return 'create_utxo';\n } catch (e) {\n return 'create_utxo'; // Default to simpler structure\n }\n}\n\n/**\n * Derive descriptors based on PSBT type\n */\nfunction deriveDescriptors(\n rootNode: BIP32Interface,\n fp: string,\n network: Network,\n psbtType: PsbtType\n): Descriptors {\n const isMainnet = network === 'mainnet';\n const coinTypeBtc = isMainnet ? COIN_BITCOIN_MAINNET : COIN_BITCOIN_TESTNET;\n const coinTypeRgb = isMainnet ? COIN_RGB_MAINNET : COIN_RGB_TESTNET;\n \n if (psbtType === 'create_utxo') {\n // For create_utxo_begin: Use account-level xprv structure\n const accountPath = `m/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}'`;\n const accountNode = rootNode.derivePath(accountPath);\n const accountXprv = accountNode.toBase58();\n const origin = `[${fp}/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}']`;\n return {\n external: `tr(${origin}${accountXprv}/0/*)`,\n internal: `tr(${origin}${accountXprv}/1/*)`\n };\n } else {\n // For send_begin: Use RGB descriptor structure\n const rgbAccountPath = `m/${DERIVATION_PURPOSE}'/${coinTypeRgb}'/${DERIVATION_ACCOUNT}'`;\n const rgbAccountNode = rootNode.derivePath(rgbAccountPath);\n const rgbKeychainNode = rgbAccountNode.derive(KEYCHAIN_RGB);\n const rgbKeychainXprv = rgbKeychainNode.toBase58();\n const rgbOrigin = `[${fp}/${DERIVATION_PURPOSE}'/${coinTypeRgb}'/${DERIVATION_ACCOUNT}'/${KEYCHAIN_RGB}]`;\n \n const btcAccountPath = `m/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}'`;\n const btcAccountNode = rootNode.derivePath(btcAccountPath);\n const btcKeychainNode = btcAccountNode.derive(KEYCHAIN_BTC);\n const btcKeychainXprv = btcKeychainNode.toBase58();\n const btcOrigin = `[${fp}/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}'/${KEYCHAIN_BTC}]`;\n \n return {\n external: `tr(${rgbOrigin}${rgbKeychainXprv}/*)`,\n internal: `tr(${btcOrigin}${btcKeychainXprv}/*)`\n };\n }\n}\n\n/**\n * Get network versions for BIP32\n * Alias for shared network versions utility\n */\nfunction getNetworkVersions(network: Network): NetworkVersions {\n return getBIP32NetworkVersions(network);\n}\n\n/**\n * Calculate master fingerprint from root node\n * Alias for shared fingerprint calculation utility\n */\nasync function getMasterFingerprint(rootNode: BIP32Interface): Promise<string> {\n return calculateMasterFingerprint(rootNode);\n}\n\nasync function signPsbtFromSeedInternal(\n seed: Buffer | Uint8Array,\n psbtBase64: string,\n network: Network,\n options: SignPsbtOptions = {},\n deps: SignerDependencies\n): Promise<string> {\n validatePsbt(psbtBase64, 'psbtBase64');\n const { ecc, factory, bdk } = deps;\n const bip32 = factory(ecc);\n const seedBuffer = normalizeSeedBuffer(seed);\n const versions = getNetworkVersions(network);\n\n let rootNode: BIP32Interface;\n try {\n rootNode = bip32.fromSeed(seedBuffer, versions);\n } catch (error) {\n throw new CryptoError('Failed to derive root node from seed', error as Error);\n }\n\n const fp = await getMasterFingerprint(rootNode);\n const psbtType = detectPsbtType(psbtBase64, deps);\n const needsPreprocessing = psbtType === 'send';\n const { external, internal } = deriveDescriptors(rootNode, fp, network, psbtType);\n\n let wallet: BDKWallet;\n try {\n wallet = bdk.Wallet.create(network as BDKNetwork, external, internal);\n } catch (error) {\n throw new CryptoError('Failed to create BDK wallet', error as Error);\n }\n\n let processedPsbt = psbtBase64.trim();\n if (needsPreprocessing || options.preprocess) {\n try {\n processedPsbt = preprocessPsbtForBDK(psbtBase64, rootNode, fp, network, deps);\n } catch (error) {\n throw new CryptoError('Failed to preprocess PSBT', error as Error);\n }\n }\n\n let pstb: BDKPsbt;\n try {\n pstb = bdk.Psbt.from_string(processedPsbt);\n } catch (error) {\n throw new CryptoError('Failed to parse PSBT', error as Error);\n }\n\n const signOptions = options.signOptions || new bdk.SignOptions();\n try {\n wallet.sign(pstb, signOptions);\n } catch (error) {\n throw new CryptoError('Failed to sign PSBT', error as Error);\n }\n\n return pstb.toString().trim();\n}\n\n/**\n * Sign a PSBT using BDK\n * \n * Note: This function is async due to dependency loading and crypto operations.\n * \n * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)\n * @param psbtBase64 - Base64 encoded PSBT string\n * @param network - Bitcoin network ('mainnet' | 'testnet' | 'signet' | 'regtest')\n * @param options - Optional signing options\n * @param options.signOptions - BDK sign options (defaults used if not provided)\n * @param options.preprocess - Force preprocessing (auto-detected by default)\n * @returns Base64 encoded signed PSBT\n * @throws {ValidationError} If mnemonic or PSBT format is invalid\n * @throws {CryptoError} If signing fails\n * \n * @example\n * ```typescript\n * const signedPsbt = signPsbt(\n * 'abandon abandon abandon...',\n * 'cHNidP8BAIkBAAAAA...',\n * 'testnet'\n * );\n * ```\n */\nexport async function signPsbt(\n mnemonic: string,\n psbtBase64: string,\n network: Network = 'testnet',\n options: SignPsbtOptions = {}\n): Promise<string> {\n try {\n // Validate inputs\n validateMnemonic(mnemonic, 'mnemonic');\n const { bip39 } = await ensureBaseDependencies();\n if (!bip39 || typeof bip39.mnemonicToSeedSync !== 'function') {\n throw new CryptoError('bip39 module not loaded correctly');\n }\n\n let seed: Buffer;\n try {\n seed = bip39.mnemonicToSeedSync(mnemonic);\n } catch (error) {\n throw new ValidationError('Invalid mnemonic format', 'mnemonic');\n }\n\n const normalizedNetwork = normalizeNetwork(network);\n const deps = await ensureSignerDependencies();\n return await signPsbtFromSeedInternal(seed, psbtBase64, normalizedNetwork, options, deps);\n } catch (error) {\n if (error instanceof ValidationError || error instanceof CryptoError) {\n throw error;\n }\n throw new CryptoError('Unexpected error during PSBT signing', error as Error);\n }\n}\n\n/**\n * Legacy sync-named wrapper (still async under the hood).\n */\nexport async function signPsbtSync(\n mnemonic: string,\n psbtBase64: string,\n network: Network = 'testnet',\n options: SignPsbtOptions = {}\n): Promise<string> {\n return signPsbt(mnemonic, psbtBase64, network, options);\n}\n\n/**\n * Sign a PSBT using a raw BIP39 seed (hex string or Uint8Array)\n */\nexport async function signPsbtFromSeed(\n seed: string | Uint8Array,\n psbtBase64: string,\n network: Network = 'testnet',\n options: SignPsbtOptions = {}\n): Promise<string> {\n const normalizedSeed = normalizeSeedInput(seed);\n const normalizedNetwork = normalizeNetwork(network);\n const deps = await ensureSignerDependencies();\n return signPsbtFromSeedInternal(normalizedSeed, psbtBase64, normalizedNetwork, options, deps);\n}\n\nfunction ensureDerivationPath(path: string): string {\n if (!path || typeof path !== 'string') {\n throw new ValidationError('derivationPath must be a non-empty string', 'derivationPath');\n }\n if (!path.startsWith('m/')) {\n throw new ValidationError('derivationPath must start with \"m/\"', 'derivationPath');\n }\n return path;\n}\n\nfunction ensureMessageInput(message: string | Uint8Array): Uint8Array {\n if (typeof message === 'string') {\n if (!message.length) {\n throw new ValidationError('message must not be empty', 'message');\n }\n return Buffer.from(message, 'utf8');\n }\n if (message instanceof Uint8Array) {\n if (!message.length) {\n throw new ValidationError('message must not be empty', 'message');\n }\n return Buffer.from(message);\n }\n throw new ValidationError('message must be a string or Uint8Array', 'message');\n}\n\nasync function deriveRootFromSeedInput(\n seed: string | Uint8Array,\n network: Network\n): Promise<BIP32Interface> {\n const { ecc, factory } = await ensureBaseDependencies();\n const normalizedSeed = normalizeSeedInput(seed, 'seed');\n const versions = getNetworkVersions(network);\n const bip32 = factory(ecc);\n try {\n return bip32.fromSeed(normalizedSeed, versions);\n } catch (error) {\n throw new CryptoError('Failed to create BIP32 root node from seed', error as Error);\n }\n}\n\n\n\nconst DEFAULT_RELATIVE_PATH = '0/0';\n\nexport interface SignMessageParams {\n message: string | Uint8Array;\n seed: string | Uint8Array;\n network?: Network;\n}\n\nexport interface SignMessageResult {\n signature: string;\n accountXpub: string;\n}\n\nexport interface VerifyMessageParams {\n message: string | Uint8Array;\n signature: string;\n accountXpub: string;\n network?: Network;\n}\n\nexport interface EstimateFeeResult {\n fee: number;\n vbytes: number;\n feeRate: number;\n}\nexport async function signMessage(params: SignMessageParams): Promise<string> {\n const { message, seed } = params;\n if (!seed) {\n throw new ValidationError('seed is required', 'seed');\n }\n const normalizedNetwork = normalizeNetwork(params.network ?? 'regtest');\n const relativePath = DEFAULT_RELATIVE_PATH;\n const accountPath = accountDerivationPath(normalizedNetwork, false);\n\n const messageBytes = ensureMessageInput(message);\n const { ecc } = await ensureBaseDependencies();\n const root = await deriveRootFromSeedInput(seed, normalizedNetwork);\n const accountNode = root.derivePath(accountPath);\n const child = accountNode.derivePath(relativePath);\n const privateKey = child.privateKey;\n\n if (!privateKey) {\n throw new CryptoError('Derived node does not contain a private key');\n }\n if (!ecc || typeof ecc.signSchnorr !== 'function') {\n throw new CryptoError('Schnorr signing not supported by ECC module');\n }\n\n const messageHash = await sha256(messageBytes);\n const signature = Buffer.from(ecc.signSchnorr(messageHash, privateKey)).toString('base64');\n // const accountXpub = accountNode.neutered().toBase58();\n return signature;\n}\n\nexport async function verifyMessage(params: VerifyMessageParams): Promise<boolean> {\n const { message, signature, accountXpub } = params;\n const messageBytes = ensureMessageInput(message);\n const relativePath = DEFAULT_RELATIVE_PATH;\n // const signatureBytes = decodeSignatureBase64(signature);\n const signatureBytes = Buffer.from(signature, 'base64');\n\n const normalizedNetwork = normalizeNetwork(params.network ?? 'regtest');\n const versions = getNetworkVersions(normalizedNetwork);\n const { ecc, factory } = await ensureBaseDependencies();\n\n if (!ecc || typeof ecc.verifySchnorr !== 'function' || typeof ecc.xOnlyPointFromPoint !== 'function') {\n throw new CryptoError('Schnorr verification not supported by ECC module');\n }\n\n let accountNode: BIP32Interface;\n try {\n accountNode = factory(ecc).fromBase58(accountXpub, versions);\n } catch (error) {\n throw new ValidationError('Invalid account xpub provided', 'accountXpub');\n }\n\n const child = accountNode.derivePath(relativePath);\n const pubkeyBuffer = child.publicKey instanceof Buffer ? child.publicKey : Buffer.from(child.publicKey);\n const xOnlyPubkey = ecc.xOnlyPointFromPoint(pubkeyBuffer);\n\n const messageHash = await sha256(messageBytes);\n\n try {\n return ecc.verifySchnorr(messageHash, xOnlyPubkey, signatureBytes);\n } catch {\n return false;\n }\n}\n\nexport async function estimatePsbt(psbtBase64: string): Promise<EstimateFeeResult> {\n if (!psbtBase64) {\n throw new ValidationError('psbt is required', 'psbt');\n }\n\n const { Psbt } = await ensureSignerDependencies();\n if (!Psbt) {\n throw new CryptoError('BitcoinJS Psbt module not loaded');\n }\n\n let psbt: BitcoinJsPsbt;\n try {\n psbt = Psbt.fromBase64(psbtBase64.trim()) as BitcoinJsPsbt;\n return {\n fee: psbt.getFee(),\n feeRate: psbt.getFeeRate(),\n vbytes: psbt.extractTransaction().virtualSize(),\n }; \n } catch (error) {\n console.log('error', error);\n throw new ValidationError('Invalid PSBT provided', 'psbt');\n }\n}\n\n\n\n\n\n\n\n","/**\n * VSS (Versioned Storage Service) backup key derivation.\n *\n * Derives a 32-byte signing key from a BIP39 mnemonic for use with rgb-lib's\n * VssBackupClient (server_url, store_id, signing_key). rgb-lib does not define\n * mnemonic → signing_key; this SDK uses HMAC-SHA256 with the same domain string\n * as rgb-lib's HKDF so backup/restore stay deterministic per wallet.\n *\n * Derivation: HMAC-SHA256(key = \"rgb-lib-vss-backup-encryption-v1\", message = mnemonic),\n * output as 64-char hex (32 bytes).\n */\n\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { validateMnemonic } from '../utils/validation';\n\nconst VSS_SIGNING_KEY_DOMAIN = 'rgb-lib-vss-backup-encryption-v1';\n\n/**\n * Derive the VSS backup signing key from a BIP39 mnemonic.\n * The result is a 64-character hex string (32 bytes) suitable for\n * VssBackupConfig.signingKey. Must match rgb-lib's Rust derivation.\n *\n * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)\n * @returns 32-byte signing key as hex string (same mnemonic always yields same key for backup/restore)\n */\nexport function deriveVssSigningKeyFromMnemonic(mnemonic: string): string {\n validateMnemonic(mnemonic, 'mnemonic');\n const keyBytes = new TextEncoder().encode(VSS_SIGNING_KEY_DOMAIN);\n const messageBytes = new TextEncoder().encode(mnemonic.trim());\n const digest = hmac(sha256, keyBytes, messageBytes);\n return Array.from(digest)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","import { RGBLibClient, restoreWallet } from '../client/index';\nimport * as IWalletModel from '../types/wallet-model';\nimport { signPsbt, signPsbtFromSeed, signMessage as signSchnorrMessage, verifyMessage as verifySchnorrMessage, estimatePsbt } from '../crypto';\nimport type { EstimateFeeResult, Network } from '../crypto';\nimport { generateKeys } from '../crypto';\nimport { normalizeNetwork } from '../utils/validation';\nimport { ValidationError, WalletError, CryptoError } from '../errors';\nimport type { Readable } from 'stream';\nimport path from 'path';\nimport type { IWalletManager } from './IWalletManager';\n/**\n * Restore wallet from backup\n * This should be called before creating a WalletManager instance\n * @param params - Restore parameters including backup file path, password, and restore directory\n * @returns Wallet restore response\n */\nexport const restoreFromBackup = (params: IWalletModel.RestoreWalletRequestModel): IWalletModel.WalletRestoreResponse => {\n const {\n backupFilePath,\n password,\n dataDir,\n } = params;\n\n if (!backupFilePath) {\n throw new ValidationError('backup file is required', 'backup');\n }\n if (!password) {\n throw new ValidationError('password is required', 'password');\n }\n if (!dataDir) {\n throw new ValidationError('restore directory is required', 'restoreDir');\n }\n\n return restoreWallet({\n backupFilePath,\n password,\n dataDir,\n });\n};\n\n/**\n * Generate a new wallet with keys\n * @param network - Network string (default: 'regtest')\n * @returns Generated keys including mnemonic, xpubs, and master fingerprint\n */\nexport const createWallet = async (network: string = 'regtest') => {\n // return await generateKeys(network);\n return await generateKeys(network);\n}\n\nexport type WalletInitParams = {\n\n xpubVan: string;\n xpubCol: string;\n mnemonic?: string;\n seed?: Uint8Array;\n network?: string | number;\n xpub?: string;\n masterFingerprint: string;\n transportEndpoint?: string;\n indexerUrl?: string;\n dataDir?: string;\n}\n\n/**\n * Wallet Manager - High-level wallet interface combining RGB API client and cryptographic operations\n * \n * This class provides a unified interface for:\n * - RGB operations (via RGBLibClient - local rgb-lib)\n * - PSBT signing operations\n * - Wallet state management\n * \n * @example\n * ```typescript\n * const keys = generateKeys('testnet');\n * const wallet = new WalletManager({\n * xpubVan: keys.accountXpubVanilla,\n * xpubCol: keys.accountXpubColored,\n * masterFingerprint: keys.masterFingerprint,\n * mnemonic: keys.mnemonic,\n * network: 'testnet',\n * transportEndpoint: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n * indexerUrl: 'ssl://electrum.iriswallet.com:50013'\n * });\n * \n * const balance = await wallet.getBtcBalance();\n * ```\n */\nexport class WalletManager implements IWalletManager {\n private readonly client: RGBLibClient;\n private readonly xpub: string | null;\n private readonly xpubVan: string;\n private readonly xpubCol: string;\n private mnemonic: string | null;\n private seed: Uint8Array | null;\n private readonly network: Network;\n private readonly masterFingerprint: string;\n private disposed: boolean = false;\n private readonly dataDir: string;\n constructor(params: WalletInitParams) {\n if (!params.xpubVan) {\n throw new ValidationError('xpubVan is required', 'xpubVan');\n }\n if (!params.xpubCol) {\n throw new ValidationError('xpubCol is required', 'xpubCol');\n }\n if (!params.masterFingerprint) {\n throw new ValidationError('masterFingerprint is required', 'masterFingerprint');\n }\n\n this.network = normalizeNetwork(params.network ?? 'regtest');\n\n\n this.xpubVan = params.xpubVan;\n this.xpubCol = params.xpubCol;\n this.seed = params.seed ?? null;\n this.mnemonic = params.mnemonic ?? null;\n this.xpub = params.xpub ?? null;\n this.masterFingerprint = params.masterFingerprint;\n this.dataDir = params.dataDir ?? path.join(process.cwd(), '.rgb-wallet', this.network, this.masterFingerprint);\n\n this.client = new RGBLibClient({\n xpubVan: params.xpubVan,\n xpubCol: params.xpubCol,\n masterFingerprint: params.masterFingerprint,\n network: this.network,\n transportEndpoint: params.transportEndpoint,\n indexerUrl: params.indexerUrl,\n dataDir: params.dataDir ?? this.dataDir,\n });\n }\n\n public async initialize(): Promise<void> {\n console.log('initializing is not reqire');\n }\n\n public async goOnline(indexerUrl: string, skipConsistencyCheck?: boolean): Promise<void> {\n this.client.getOnline();\n }\n\n /**\n * Get wallet's extended public keys\n */\n public getXpub(): { xpubVan: string; xpubCol: string } {\n return {\n xpubVan: this.xpubVan,\n xpubCol: this.xpubCol\n };\n }\n\n /**\n * Get wallet's network\n */\n public getNetwork(): Network {\n return this.network;\n }\n\n /**\n * Dispose of sensitive wallet data\n * Clears mnemonic and seed from memory\n * Idempotent - safe to call multiple times\n */\n public async dispose(): Promise<void> {\n if (this.disposed) {\n return;\n }\n \n if (this.mnemonic !== null) {\n this.mnemonic = null;\n }\n\n if (this.seed !== null && this.seed.length > 0) {\n this.seed.fill(0);\n this.seed = null;\n }\n this.client.dropWallet();\n\n this.disposed = true;\n }\n\n /**\n * Check if wallet has been disposed\n */\n public isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Guard method to ensure wallet has not been disposed\n * @throws {WalletError} if wallet has been disposed\n */\n private ensureNotDisposed(): void {\n if (this.disposed) {\n throw new WalletError('Wallet has been disposed');\n }\n }\n\n public registerWallet(): { address: string; btcBalance: IWalletModel.BtcBalance } {\n return this.client.registerWallet();\n }\n\n public async getBtcBalance(): Promise<IWalletModel.BtcBalance> {\n return this.client.getBtcBalance();\n }\n\n public async getAddress(): Promise<string> {\n return this.client.getAddress();\n }\n\n public async listUnspents(): Promise<IWalletModel.Unspent[]> {\n const unspents = this.client.listUnspents();\n return unspents.map(unspent => ({\n utxo: {\n ...unspent.utxo,\n exists: (unspent.utxo as any).exists ?? true,\n },\n rgbAllocations: unspent.rgbAllocations.map(allocation => {\n const assignmentKeys = Object.keys(allocation.assignment);\n const assignmentType = assignmentKeys[0] as IWalletModel.AssignmentType | undefined;\n const assignment: IWalletModel.Assignment = {\n type: assignmentType ?? 'Any',\n amount: assignmentType && allocation.assignment[assignmentType] ? Number(allocation.assignment[assignmentType]) : undefined,\n };\n return {\n assetId: allocation.assetId,\n assignment,\n settled: allocation.settled,\n };\n }),\n pendingBlinded: (unspent as any).pendingBlinded ?? 0,\n }));\n }\n\n public async listAssets():Promise<IWalletModel.ListAssets>{\n const assets = this.client.listAssets();\n return assets;\n }\n\n public async getAssetBalance(asset_id: string): Promise<IWalletModel.AssetBalance> {\n const balance = this.client.getAssetBalance(asset_id);\n return {\n settled: balance.settled ?? 0,\n future: balance.future ?? 0,\n spendable: balance.spendable ?? 0,\n offchainOutbound: balance.offchainOutbound ?? 0,\n offchainInbound: balance.offchainInbound ?? 0,\n };\n }\n\n public async createUtxosBegin(params: IWalletModel.CreateUtxosBeginRequestModel): Promise<string> {\n return this.client.createUtxosBegin(params);\n }\n\n public async createUtxosEnd(params: IWalletModel.CreateUtxosEndRequestModel): Promise<number> {\n return this.client.createUtxosEnd(params);\n }\n\n public async sendBegin(params: IWalletModel.SendAssetBeginRequestModel): Promise<string> {\n return this.client.sendBegin(params);\n }\n\n /**\n * Batch send begin: accepts already-built recipientMap.\n * Returns unsigned PSBT (use signPsbt then sendEnd to complete).\n */\n public async sendBeginBatch(params: {\n recipientMap: IWalletModel.RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n }): Promise<string> {\n return this.client.sendBeginBatch(params);\n }\n\n /**\n * Complete batch send: sendBeginBatch → sign PSBT → sendEnd.\n */\n public async sendBatch(\n params: {\n recipientMap: IWalletModel.RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n },\n mnemonic?: string\n ): Promise<IWalletModel.SendResult> {\n this.ensureNotDisposed();\n const psbt = await this.sendBeginBatch(params);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n return await this.sendEnd({ signedPsbt });\n }\n\n public async sendEnd(params: IWalletModel.SendAssetEndRequestModel): Promise<IWalletModel.SendResult> {\n return this.client.sendEnd(params);\n } \n\n public async sendBtcBegin(params: IWalletModel.SendBtcBeginRequestModel): Promise<string> {\n return this.client.sendBtcBegin(params);\n }\n\n public async sendBtcEnd(params: IWalletModel.SendBtcEndRequestModel): Promise<string> {\n return this.client.sendBtcEnd(params);\n }\n\n public async estimateFeeRate(blocks: number): Promise<IWalletModel.GetFeeEstimationResponse> {\n if (!Number.isFinite(blocks)) {\n throw new ValidationError('blocks must be a finite number', 'blocks');\n }\n if (!Number.isInteger(blocks) || blocks <= 0) {\n throw new ValidationError('blocks must be a positive integer', 'blocks');\n }\n\n const feeEstimation = await this.client.getFeeEstimation({ blocks });\n return feeEstimation as unknown as IWalletModel.GetFeeEstimationResponse;\n }\n\n public async estimateFee(psbtBase64: string): Promise<EstimateFeeResult> {\n return await estimatePsbt(psbtBase64);\n }\n\n public async sendBtc(params: IWalletModel.SendBtcBeginRequestModel): Promise<string> {\n this.ensureNotDisposed();\n const psbt = await this.sendBtcBegin(params);\n const signed = await this.signPsbt(psbt);\n return await this.sendBtcEnd({ signedPsbt: signed });\n }\n\n public async blindReceive(params: IWalletModel.InvoiceRequest): Promise<IWalletModel.InvoiceReceiveData> {\n const invoice = await this.client.blindReceive({\n ...params,\n assetId: params.assetId ?? '',\n amount: params.amount ?? 0,\n });\n return {\n invoice: invoice.invoice,\n recipientId: invoice.recipientId,\n expirationTimestamp: invoice.expirationTimestamp ?? null,\n batchTransferIdx: invoice.batchTransferIdx,\n };\n }\n\n public async witnessReceive(params: IWalletModel.InvoiceRequest): Promise<IWalletModel.InvoiceReceiveData> {\n const invoice = await this.client.witnessReceive({\n ...params,\n assetId: params.assetId ?? '',\n amount: params.amount ?? 0,\n });\n return {\n invoice: invoice.invoice,\n recipientId: invoice.recipientId,\n expirationTimestamp: invoice.expirationTimestamp ?? null,\n batchTransferIdx: invoice.batchTransferIdx,\n };\n }\n public async decodeRGBInvoice(params: { invoice: string }): Promise<IWalletModel.InvoiceData> {\n const invoiceData = await this.client.decodeRGBInvoice(params);\n // Transform assignment from { [key: string]: any } to { type: AssignmentType, amount?: number }\n const assignmentKeys = Object.keys(invoiceData.assignment);\n const assignmentType = assignmentKeys[0] as IWalletModel.AssignmentType | undefined;\n const assignment: IWalletModel.Assignment = {\n type: assignmentType ?? 'Any',\n amount: assignmentType && invoiceData.assignment[assignmentType] ? Number(invoiceData.assignment[assignmentType]) : undefined,\n };\n \n return {\n invoice: params.invoice,\n recipientId: invoiceData.recipientId,\n assetSchema: invoiceData.assetSchema as IWalletModel.AssetSchema | undefined,\n assetId: invoiceData.assetId,\n network: invoiceData.network as IWalletModel.BitcoinNetwork,\n assignment,\n assignmentName: invoiceData.assignmentName,\n expirationTimestamp: invoiceData.expirationTimestamp ?? null,\n transportEndpoints: invoiceData.transportEndpoints,\n };\n }\n public async issueAssetNia(params: IWalletModel.IssueAssetNiaRequestModel): Promise<IWalletModel.AssetNIA> {\n const asset = await this.client.issueAssetNia(params);\n return asset;\n }\n\n public async issueAssetIfa(params: IWalletModel.IssueAssetIfaRequestModel): Promise<IWalletModel.AssetIfa> {\n const asset = await this.client.issueAssetIfa(params);\n return asset\n }\n public async inflateBegin(params: IWalletModel.InflateAssetIfaRequestModel): Promise<string> {\n return this.client.inflateBegin(params);\n }\n public async inflateEnd(params: IWalletModel.InflateEndRequestModel): Promise<IWalletModel.OperationResult> {\n return this.client.inflateEnd(params);\n }\n /**\n * Complete inflate operation: begin → sign → end\n * @param params - Inflate parameters\n * @param mnemonic - Optional mnemonic for signing\n */\n public async inflate(params: IWalletModel.InflateAssetIfaRequestModel, mnemonic?: string): Promise<IWalletModel.OperationResult> {\n this.ensureNotDisposed();\n const psbt = await this.inflateBegin(params);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n return await this.inflateEnd({\n signedPsbt\n });\n }\n\n public async refreshWallet(): Promise<void> {\n this.client.refreshWallet();\n }\n\n public async listTransactions(): Promise<IWalletModel.Transaction[]> {\n const transactions = this.client.listTransactions();\n\n return transactions;\n }\n\n public async listTransfers(asset_id?: string): Promise<IWalletModel.Transfer[]> {\n const transfers = this.client.listTransfers(asset_id);\n return transfers;\n }\n\n public async failTransfers(params: IWalletModel.FailTransfersRequest): Promise<boolean> {\n return this.client.failTransfers(params);\n }\n\n\n public async createBackup(params: { backupPath: string, password: string }): Promise<IWalletModel.WalletBackupResponse> {\n return this.client.createBackup(params);\n }\n\n /**\n * Configure VSS cloud backup for this wallet.\n */\n public async configureVssBackup(config: IWalletModel.VssBackupConfig): Promise<void> {\n this.ensureNotDisposed();\n this.client.configureVssBackup(config);\n }\n\n /**\n * Disable automatic VSS backup.\n */\n public async disableVssAutoBackup(): Promise<void> {\n this.ensureNotDisposed();\n this.client.disableVssAutoBackup();\n }\n\n /**\n * Trigger a VSS backup immediately and return the server version.\n */\n public async vssBackup(config: IWalletModel.VssBackupConfig): Promise<number> {\n this.ensureNotDisposed();\n return this.client.vssBackup(config);\n }\n\n /**\n * Get VSS backup info for this wallet.\n */\n public async vssBackupInfo(config: IWalletModel.VssBackupConfig): Promise<IWalletModel.VssBackupInfo> {\n this.ensureNotDisposed();\n return this.client.vssBackupInfo(config);\n }\n\n /**\n * Sign a PSBT using the wallet's mnemonic or a provided mnemonic\n * @param psbt - Base64 encoded PSBT\n * @param mnemonic - Optional mnemonic (uses wallet's mnemonic if not provided)\n */\n public async signPsbt(psbt: string, mnemonic?: string): Promise<string> {\n this.ensureNotDisposed();\n const mnemonicToUse = mnemonic ?? this.mnemonic;\n\n if (mnemonicToUse) {\n return await signPsbt(mnemonicToUse, psbt, this.network);\n }\n if (this.seed) {\n return await signPsbtFromSeed(this.seed, psbt, this.network);\n }\n\n throw new WalletError('mnemonic is required. Provide it as parameter or initialize wallet with mnemonic.');\n }\n\n /**\n * Complete send operation: begin → sign → end\n * @param invoiceTransfer - Transfer invoice parameters\n * @param mnemonic - Optional mnemonic for signing\n */\n public async send(invoiceTransfer: IWalletModel.SendAssetBeginRequestModel, mnemonic?: string): Promise<IWalletModel.SendResult> {\n this.ensureNotDisposed();\n const psbt = await this.sendBegin(invoiceTransfer);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n return await this.sendEnd({ signedPsbt });\n }\n\n public async createUtxos({ upTo, num, size, feeRate }: { upTo?: boolean, num?: number, size?: number, feeRate?: number }): Promise<number> {\n this.ensureNotDisposed(); \n const psbt = await this.createUtxosBegin({ upTo, num, size, feeRate });\n const signedPsbt = await this.signPsbt(psbt);\n return this.createUtxosEnd({ signedPsbt });\n }\n\n public async syncWallet(): Promise<void> {\n this.client.syncWallet();\n }\n\n public async signMessage(message: string): Promise<string> {\n this.ensureNotDisposed();\n if (!message) {\n throw new ValidationError('message is required', 'message');\n }\n\n if (!this.seed) {\n throw new WalletError('Wallet seed is required for message signing. Initialize the wallet with a seed.');\n }\n\n return signSchnorrMessage({\n message,\n seed: this.seed,\n network: this.network,\n });\n }\n\n public async verifyMessage(message: string, signature: string, accountXpub?: string): Promise<boolean> {\n if (!message) {\n throw new ValidationError('message is required', 'message');\n }\n if (!signature) {\n throw new ValidationError('signature is required', 'signature');\n }\n\n return verifySchnorrMessage({\n message,\n signature,\n accountXpub: this.xpubVan,\n network: this.network,\n });\n }\n\n}\n\n/**\n * Factory function to create a WalletManager instance\n * Provides a cleaner API than direct constructor\n *\n * @example\n * ```typescript\n * const keys = generateKeys('testnet');\n * const wallet = createWalletManager({\n * xpubVan: keys.accountXpubVanilla,\n * xpubCol: keys.accountXpubColored,\n * masterFingerprint: keys.masterFingerprint,\n * mnemonic: keys.mnemonic,\n * network: 'testnet',\n * transportEndpoint: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n * indexerUrl: 'ssl://electrum.iriswallet.com:50013'\n * });\n * ```\n */\nexport function createWalletManager(params: WalletInitParams): WalletManager {\n return new WalletManager(params);\n}\n\n// Legacy singleton instance for backward compatibility\n// @deprecated Use `new WalletManager(params)` or `createWalletManager(params)` instead\n// This singleton will throw an error when accessed, requiring proper initialization\nlet _wallet: WalletManager | null = null;\n\nexport const wallet = new Proxy({} as WalletManager, {\n get(target, prop) {\n if (!_wallet) {\n throw new WalletError(\n 'The legacy singleton wallet instance is deprecated. ' +\n 'Please use `new WalletManager(params)` or `createWalletManager(params)` instead. ' +\n 'Example: const wallet = new WalletManager({ xpubVan, xpubCol, masterFingerprint, network, transportEndpoint, indexerUrl })'\n );\n }\n const value = (_wallet as any)[prop];\n return typeof value === 'function' ? value.bind(_wallet) : value;\n },\n});\n","/**\n * UTEXO Protocol Base Implementations\n * \n * These classes provide empty implementations for UTEXO-specific operations.\n * They should be extended or used as mixins for concrete implementations.\n */\n\nimport type { ILightningProtocol, IOnchainProtocol, IUTEXOProtocol } from './IUTEXOProtocol';\nimport type {\n CreateLightningInvoiceRequestModel,\n LightningReceiveRequest,\n LightningSendRequest,\n GetLightningSendFeeEstimateRequestModel,\n PayLightningInvoiceRequestModel,\n OnchainSendRequestModel,\n OnchainSendResponse,\n GetOnchainSendResponse,\n ListLightningPaymentsResponse,\n OnchainReceiveRequestModel,\n OnchainReceiveResponse,\n} from '../types/utexo';\nimport type { SendAssetEndRequestModel, Transfer, TransferStatus, OnchainSendStatus } from '../types/wallet-model';\n\n/**\n * Lightning Protocol Base Class\n * \n * Provides empty implementations for all Lightning protocol methods.\n * Concrete implementations should override these methods.\n */\nexport class LightningProtocol implements ILightningProtocol {\n async createLightningInvoice(params: CreateLightningInvoiceRequestModel): Promise<LightningReceiveRequest> {\n throw new Error('createLightningInvoice not implemented');\n }\n\n async getLightningReceiveRequest(id: string): Promise<TransferStatus | null> {\n throw new Error('getLightningReceiveRequest not implemented');\n }\n\n async getLightningSendRequest(id: string): Promise<TransferStatus|null> {\n throw new Error('getLightningSendRequest not implemented');\n }\n\n async getLightningSendFeeEstimate(params: GetLightningSendFeeEstimateRequestModel): Promise<number> {\n throw new Error('getLightningSendFeeEstimate not implemented');\n }\n\n async payLightningInvoiceBegin(params: PayLightningInvoiceRequestModel): Promise<string> {\n throw new Error('payLightningInvoiceBegin not implemented');\n }\n\n async payLightningInvoiceEnd(params: SendAssetEndRequestModel): Promise<LightningSendRequest> {\n throw new Error('payLightningInvoiceEnd not implemented');\n }\n\n async payLightningInvoice(params: PayLightningInvoiceRequestModel, mnemonic?: string): Promise<LightningSendRequest> {\n throw new Error('payLightningInvoice not implemented');\n }\n\n async listLightningPayments(): Promise<ListLightningPaymentsResponse> {\n throw new Error('listLightningPayments not implemented');\n }\n}\n\n/**\n * Onchain Protocol Base Class\n * \n * Provides empty implementations for all onchain protocol methods.\n * Concrete implementations should override these methods.\n */\nexport class OnchainProtocol implements IOnchainProtocol {\n async onchainReceive(params: OnchainReceiveRequestModel): Promise<OnchainReceiveResponse> {\n throw new Error('onchainReceive not implemented');\n }\n async onchainSendBegin(params: OnchainSendRequestModel): Promise<string> {\n throw new Error('onchainSendBegin not implemented');\n }\n\n async onchainSendEnd(params: SendAssetEndRequestModel): Promise<OnchainSendResponse> {\n throw new Error('onchainSendEnd not implemented');\n }\n\n async onchainSend(params: OnchainSendRequestModel, mnemonic?: string): Promise<OnchainSendResponse> {\n throw new Error('onchainSend not implemented');\n }\n\n async getOnchainSendStatus(send_id: string): Promise<OnchainSendStatus | null> {\n throw new Error('getOnchainSendStatus not implemented');\n }\n\n async listOnchainTransfers(asset_id?: string): Promise<Transfer[]> {\n throw new Error('listOnchainTransfers not implemented');\n }\n}\n\n/**\n * UTEXO Protocol Base Class\n * \n * Combines Lightning and Onchain protocol implementations.\n * Provides empty implementations for all UTEXO protocol methods.\n * Concrete implementations should override these methods.\n */\nexport class UTEXOProtocol extends LightningProtocol implements IUTEXOProtocol {\n private onchainProtocol = new OnchainProtocol();\n\n async onchainReceive(params: OnchainReceiveRequestModel): Promise<OnchainReceiveResponse> {\n return this.onchainProtocol.onchainReceive(params);\n }\n async onchainSendBegin(params: OnchainSendRequestModel): Promise<string> {\n return this.onchainProtocol.onchainSendBegin(params);\n }\n\n async onchainSendEnd(params: SendAssetEndRequestModel): Promise<OnchainSendResponse> {\n return this.onchainProtocol.onchainSendEnd(params);\n }\n\n async onchainSend(params: OnchainSendRequestModel, mnemonic?: string): Promise<OnchainSendResponse> {\n return this.onchainProtocol.onchainSend(params, mnemonic);\n }\n\n async getOnchainSendStatus(send_id: string): Promise<OnchainSendStatus | null> {\n return this.onchainProtocol.getOnchainSendStatus(send_id);\n }\n\n async listOnchainTransfers(asset_id?: string): Promise<Transfer[]> {\n return this.onchainProtocol.listOnchainTransfers(asset_id);\n }\n}\n","/**\n * UTEXO Bridge gateway configuration by network.\n */\n\nimport type { UtxoNetworkPreset } from '../utils/network';\n\nexport const DEFAULT_GATEWAY_BASE_URLS: Record<UtxoNetworkPreset, string> = {\n mainnet: 'https://gateway.utexo.tricorn.network/',\n testnet: 'https://dev.gateway.utexo.tricorn.network/',\n};\n","\n/**\n * Network address representation\n */\nexport type NetworkAddress = {\n /** Address string */\n address: string;\n /** Network name (optional) */\n networkName?: string;\n /** Network ID */\n networkId: number;\n};\n\n/**\n * Types of transfers\n */\nexport type TransferType = 'LP' | 'WU' | 'CCTP' | 'NTV' | 'MLT';\n\n/**\n * Estimation data for transfer calculations\n */\nexport type Estimation = {\n /** Expected converted gas fee for this transfer in transferring token */\n fee?: string;\n /** Stable fee percent */\n feePercentage?: string;\n /** Estimated confirmation time */\n estimatedConfirmationTime: string;\n /** Stable fee in transferring token */\n stableFee?: string;\n /** Result amount */\n resultAmount: string;\n /** Expected converted gas fee for this transfer in sender native token (for multitoken transfers) */\n nativeFee?: string;\n /** Expected converted stable fee for this transfer in sender native token (for multitoken transfers) */\n nativeStableFee?: string;\n /** Sum of NativeFee and NativeStableFee if present */\n totalNativeCommission?: string;\n /** Native token symbol if present (for multi-token transfer estimation) */\n nativeTokenSymbol?: string;\n /** Amount in the smallest token units in recipient tokens, which user will receive */\n swapResultAmount?: string;\n};\n\n/**\n * Request to get bridge-in signature\n */\nexport type BridgeInSignatureRequest = {\n /** Sender network address */\n sender: NetworkAddress;\n /** Token ID */\n tokenId: number;\n /** Amount to transfer (as string) */\n amount: string;\n /** Destination network address */\n destination: NetworkAddress;\n /** Additional addresses (optional) */\n additionalAddresses?: string[];\n};\n\n/**\n * Response containing bridge-in signature data\n */\nexport type BridgeInSignatureResponse = {\n /** Token address */\n token: string;\n /** Amount to transfer */\n amount: string;\n /** Gas commission */\n gasCommission: string;\n /** Destination network address */\n destination: NetworkAddress;\n /** Transaction deadline */\n deadline: string;\n /** Nonce value */\n nonce: number;\n /** Transfer ID */\n transferId: number;\n /** Signature for the transaction */\n signature: string;\n /** Transfer type */\n transferType: TransferType;\n /** Estimation data */\n estimation: Estimation;\n /** Total commission */\n totalCommission: string;\n};\n\n/**\n * Request to submit a transaction\n */\nexport type SubmitTransactionRequest = {\n /** Transfer ID */\n transferId: number;\n /** Network ID */\n networkId: number;\n /** Transaction data (base64 encoded for Bitcoin/Concordium, hex for others) */\n txData: string;\n /** Public key */\n publicKey: string;\n /** Authentication signature (hex encoded) */\n authenticationSignature: string;\n};\n\n/**\n * Response from submit transaction\n */\nexport type SubmitTransactionResponse = {\n /** Transaction hash */\n txHash: string;\n};\n\n/**\n * Request to verify bridge-in transaction\n */\nexport type VerifyBridgeInRequest = {\n /** Transfer ID */\n transferId: number;\n /** Network ID */\n networkId: number;\n /** Transaction hash */\n txHash: string;\n /** Public key */\n publicKey: string;\n /** Authentication signature (hex encoded) */\n authenticationSignature: string;\n};\n\n/**\n * Response from receiver invoice endpoint\n */\nexport type ReceiverInvoiceResponse = {\n /** Invoice string */\n invoice: string;\n};\n\n/**\n * Token information\n */\nexport type TokenInfo = {\n /** Token ID */\n id: number;\n /** Short name of the token */\n shortName: string;\n /** Long name of the token */\n longName: string;\n /** Icon link for the token */\n iconLink: string;\n};\n\n/**\n * Transaction hash information\n */\nexport type TransactionHash = {\n /** Network name */\n networkName: string;\n /** Transaction hash */\n hash: string;\n};\n\n/**\n * Response from transfer-by-mainnet-invoice endpoint\n */\nexport type TransferByMainnetInvoiceResponse = {\n /** Transfer ID */\n id: number;\n /** Sender amount */\n senderAmount: string;\n /** Recipient amount */\n recipientAmount: string;\n /** Commission amount */\n commission: string;\n /** Sender token information */\n senderToken: TokenInfo;\n /** Recipient token information */\n recipientToken: TokenInfo;\n /** Sender network address */\n sender: NetworkAddress;\n /** Recipient network address */\n recipient: NetworkAddress;\n /** Transfer status */\n status: string;\n /** Triggering transaction */\n triggeringTx: TransactionHash;\n /** Outbound transaction */\n outboundTx: TransactionHash;\n /** Creation timestamp */\n createdAt: string;\n};\n\n/**\n * API Error response\n */\nexport type ApiError = {\n error: string;\n code?: number;\n};\nexport enum TransferStatuses {\n 'Unspecified',\n 'Confirming',\n 'Canceled',\n 'Finished',\n 'Waiting',\n 'Cancelling',\n 'Failed',\n 'Fetching',\n}\n","import axios, { AxiosError, AxiosInstance } from 'axios';\nimport type { UtxoNetworkPreset } from '../utils/network';\nimport { DEFAULT_GATEWAY_BASE_URLS } from '../config/gateway';\nimport { BridgeInSignatureRequest, BridgeInSignatureResponse, ReceiverInvoiceResponse, SubmitTransactionRequest, SubmitTransactionResponse, TransferByMainnetInvoiceResponse, TransferStatuses, VerifyBridgeInRequest } from './types';\n\nexport const encodeTransferStatus = (transferStatus: string): number => {\n const textEncoder = new TextEncoder();\n\n return textEncoder.encode(transferStatus.toString())[0];\n};\n/**\n * Utexo Bridge API Client\n * \n * Client for interacting with the utexo bridge API endpoints.\n * All endpoints are prefixed with `/v1/utexo/bridge`.\n */\nclass UtexoBridgeApiClient {\n private axios: AxiosInstance;\n private basePath: string;\n\n /**\n * Creates a new UtexoBridgeApiClient instance\n * \n * @param axiosInstance - Axios instance to use for HTTP requests (required)\n * @param basePath - Base path for API endpoints (defaults to '/v1/utexo/bridge')\n * \n * @example\n * ```typescript\n * import axios from 'axios';\n * import { UtexoBridgeApiClient } from './utexoBridge';\n * \n * const axiosInstance = axios.create({\n * baseURL: 'https://api.example.com'\n * });\n * \n * const client = new UtexoBridgeApiClient(axiosInstance);\n * ```\n */\n constructor(axiosInstance: AxiosInstance, basePath: string = '/v1/utexo/bridge') {\n this.axios = axiosInstance;\n this.basePath = basePath;\n }\n\n /**\n * Gets bridge-in signature for a transfer\n * \n * @param request - Bridge-in signature request data\n * @returns Promise resolving to bridge-in signature response\n * @throws {ApiError} If the request fails\n */\n async getBridgeInSignature(\n request: BridgeInSignatureRequest,\n ): Promise<BridgeInSignatureResponse> {\n try {\n const { data } = await this.axios.post<BridgeInSignatureResponse>(\n `${this.basePath}/bridge-in-signature`,\n request,\n );\n return data;\n } catch (error) {\n const responseData = (error as AxiosError).response?.data;\n if (responseData !== undefined) {\n const message = typeof responseData === 'string' ? responseData : JSON.stringify(responseData);\n throw new Error(message);\n }\n throw error;\n }\n }\n\n /**\n * Submits a signed transaction to the blockchain\n * \n * @param request - Submit transaction request data\n * @returns Promise resolving to transaction hash\n * @throws {ApiError} If the request fails\n */\n async submitTransaction(request: SubmitTransactionRequest): Promise<string> {\n const { data } = await this.axios.post<SubmitTransactionResponse>(\n `${this.basePath}/submit-transaction`,\n request,\n );\n return data.txHash;\n }\n\n /**\n * Verifies a bridge-in transaction after it has been sent\n * \n * @param request - Verify bridge-in request data\n * @returns Promise that resolves when verification is complete\n * @throws {ApiError} If the request fails\n */\n async verifyBridgeIn(request: VerifyBridgeInRequest): Promise<void> {\n await this.axios.post(`${this.basePath}/verify-bridge-in`, request);\n }\n\n /**\n * Gets receiver invoice by transfer ID and network ID\n * \n * @param transferId - Transfer ID\n * @param networkId - Network ID\n * @returns Promise resolving to invoice string\n * @throws {ApiError} If the request fails\n */\n async getReceiverInvoice(transferId: number, networkId: number): Promise<string> {\n const { data } = await this.axios.get<ReceiverInvoiceResponse>(\n `${this.basePath}/receiver-invoice/${transferId}/${networkId}`,\n );\n return data.invoice;\n }\n\n\n async getWithdrawTransfer(invoice: string, networkId: number): Promise<TransferByMainnetInvoiceResponse | null> {\n const { data } = await this.axios.get<{ transfers: TransferByMainnetInvoiceResponse[] }>(\n `${this.basePath}/transfers/history`,\n {\n params: {\n 'network_id': String(networkId),\n 'offset': String(0),\n 'limit': String(10),\n 'address': 'rgb-address',\n },\n },\n );\n\n if (data.transfers.length === 0) {\n return null;\n }\n\n const withdrawTransfer = data.transfers.map(transfer => ({ ...transfer, status: TransferStatuses[encodeTransferStatus(transfer.status)] })).find(transfer => transfer.recipient.address === invoice);\n if (!withdrawTransfer) {\n return null;\n }\n\n return withdrawTransfer;\n }\n\n /**\n * Gets transfer information by mainnet invoice\n * \n * @param mainnetInvoice - Mainnet invoice string\n * @param networkId - Network ID\n * @returns Promise resolving to transfer information\n * @throws {ApiError} If the request fails\n */\n async getTransferByMainnetInvoice(mainnetInvoice: string, networkId: number): Promise<TransferByMainnetInvoiceResponse | null> {\n try {\n const { data } = await this.axios.get<TransferByMainnetInvoiceResponse>(\n `${this.basePath}/transfer-by-mainnet-invoice`,\n {\n params: {\n mainnet_invoice: mainnetInvoice,\n network_id: networkId,\n },\n },\n );\n if (data) {\n return { ...data, status: TransferStatuses[encodeTransferStatus(data.status)] }\n }\n return data;\n\n } catch (error) {\n console.log('Mainnet invoice not found');\n return null;\n }\n }\n}\n\n/**\n * Returns a UTEXO Bridge API client for network.\n *\n * @param network - 'mainnet' | 'testnet'\n */\nexport function getBridgeAPI(network: UtxoNetworkPreset = 'mainnet'): UtexoBridgeApiClient {\n const axiosInstance = axios.create({\n baseURL: DEFAULT_GATEWAY_BASE_URLS[network],\n });\n return new UtexoBridgeApiClient(axiosInstance);\n}\n","const UTXO_PATH_INDEX = 2;\n\nexport function toUnitsNumber(value: string, precision: number) {\n const s = String(value).trim();\n const neg = s.startsWith(\"-\");\n const [iRaw, fRaw = \"\"] = (neg ? s.slice(1) : s).split(\".\");\n const frac = (fRaw + \"0\".repeat(precision)).slice(0, precision);\n \n const unitsStr = (iRaw || \"0\") + frac;\n const units = Number(unitsStr);\n \n if (!Number.isSafeInteger(units)) {\n throw new Error(\n `Amount exceeds MAX_SAFE_INTEGER. Use BigInt instead. got=${unitsStr}`\n );\n }\n \n return neg ? -units : units;\n }\n\n export function fromUnitsNumber(units: number, precision: number) {\n const neg = units < 0;\n const base = 10 ** precision;\n \n const value = Math.abs(units) / base;\n return neg ? -value : value;\n }\n\n /**\n * Decodes a hex invoice from bridge transfer signature.\n * Handles hex strings that may start with '0x' prefix.\n * \n * @param hexInvoice - Hex string from bridge transfer signature\n * @returns Decoded UTF-8 string invoice\n */\n export function decodeBridgeInvoice(hexInvoice: string): string {\n const hex = hexInvoice.startsWith('0x')\n ? hexInvoice.slice(UTXO_PATH_INDEX)\n : hexInvoice;\n return Buffer.from(hex, 'hex').toString('utf-8');\n }","/**\n * VSS (Versioned Storage Service) configuration defaults and helpers for UTEXO wallet backup/restore.\n */\n\nimport type { VssBackupConfig } from '../../types/wallet-model';\n\n/** Default VSS server URL used when vssServerUrl is not set in config or restore params. */\nexport const DEFAULT_VSS_SERVER_URL = 'https://vss-server.utexo.com/vss';\n\n/**\n * Split a base VSS config into layer1 and utexo configs (storeId_layer1, storeId_utexo).\n * Same convention used by UTEXOWallet backup and restore.\n */\nexport function getVssConfigs(config: VssBackupConfig): { layer1: VssBackupConfig; utexo: VssBackupConfig } {\n const base = { ...config };\n return {\n layer1: { ...base, storeId: `${config.storeId}_layer1` },\n utexo: { ...base, storeId: `${config.storeId}_utexo` },\n };\n}\n","/**\n * UTEXO wallet restore: VSS and file backup restore helpers.\n */\n\nimport path from 'path';\nimport fs from 'fs';\nimport { deriveKeysFromMnemonic, deriveVssSigningKeyFromMnemonic } from '../crypto';\nimport { getUtxoNetworkConfig, type UtxoNetworkPreset } from './utils/network';\nimport { restoreFromVss, restoreWallet } from '../client/rgb-lib-client';\nimport { ValidationError } from '../errors';\nimport type { VssBackupConfig } from '../types/wallet-model';\nimport { DEFAULT_VSS_SERVER_URL } from './config/vss';\n\n/** Backup file extension; used by createBackup and restore. */\nexport const BACKUP_FILE_SUFFIX = '.backup';\n/** Same naming as VSS: wallet_<fp>_layer1, wallet_<fp>_utexo */\nexport const LAYER1_BACKUP_SUFFIX = '_layer1.backup';\nexport const UTEXO_BACKUP_SUFFIX = '_utexo.backup';\n\nconst UTEXO_BACKUP_TMP_LAYER1 = '.layer1';\nconst UTEXO_BACKUP_TMP_UTEXO = '.utexo';\n\n/** Store id for backup/restore (same convention as VSS: wallet_<masterFingerprint>). */\nexport function getBackupStoreId(masterFingerprint: string): string {\n return `wallet_${masterFingerprint}`;\n}\n\nexport interface PrepareUtxoBackupDirsResult {\n storeId: string;\n layer1TmpDir: string;\n utexoTmpDir: string;\n layer1FinalPath: string;\n utexoFinalPath: string;\n}\n\n/**\n * Prepare backup directory and temp dirs for UTEXO createBackup.\n * Creates backupPath if needed and .layer1/.utexo temp subdirs; returns paths for createBackup and final filenames.\n */\nexport function prepareUtxoBackupDirs(backupPath: string, masterFingerprint: string): PrepareUtxoBackupDirsResult {\n const storeId = getBackupStoreId(masterFingerprint);\n if (!fs.existsSync(backupPath)) {\n fs.mkdirSync(backupPath, { recursive: true });\n }\n const layer1TmpDir = path.join(backupPath, UTEXO_BACKUP_TMP_LAYER1);\n const utexoTmpDir = path.join(backupPath, UTEXO_BACKUP_TMP_UTEXO);\n fs.mkdirSync(layer1TmpDir, { recursive: true });\n fs.mkdirSync(utexoTmpDir, { recursive: true });\n return {\n storeId,\n layer1TmpDir,\n utexoTmpDir,\n layer1FinalPath: path.join(backupPath, `${storeId}_layer1${BACKUP_FILE_SUFFIX}`),\n utexoFinalPath: path.join(backupPath, `${storeId}_utexo${BACKUP_FILE_SUFFIX}`),\n };\n}\n\n/**\n * Move backup files from temp dirs to final paths and remove temp dirs. Call after createBackup into layer1TmpDir/utexoTmpDir.\n */\nexport function finalizeUtxoBackupPaths(params: {\n layer1BackupPath: string;\n utexoBackupPath: string;\n layer1FinalPath: string;\n utexoFinalPath: string;\n layer1TmpDir: string;\n utexoTmpDir: string;\n}): void {\n const { layer1BackupPath, utexoBackupPath, layer1FinalPath, utexoFinalPath, layer1TmpDir, utexoTmpDir } = params;\n fs.renameSync(layer1BackupPath, layer1FinalPath);\n fs.renameSync(utexoBackupPath, utexoFinalPath);\n fs.rmdirSync(layer1TmpDir);\n fs.rmdirSync(utexoTmpDir);\n}\n\n/**\n * Build VSS config from mnemonic (storeId = wallet_<masterFingerprint>, signingKey derived).\n * Used when config is not passed to vssBackup or restoreUtxoWalletFromVss.\n */\nexport async function buildVssConfigFromMnemonic(\n mnemonic: string,\n serverUrl: string,\n networkPreset: UtxoNetworkPreset = 'testnet'\n): Promise<VssBackupConfig> {\n const keys = await deriveKeysFromMnemonic(networkPreset, mnemonic.trim());\n return {\n serverUrl,\n storeId: `wallet_${keys.masterFingerprint}`,\n signingKey: deriveVssSigningKeyFromMnemonic(mnemonic.trim()),\n backupMode: 'Blocking',\n };\n}\n\n/**\n * Restore a UTEXOWallet from VSS by restoring both layer1 and utexo stores.\n * Mnemonic is required; config is optional (built from mnemonic when omitted; vssServerUrl uses DEFAULT_VSS_SERVER_URL if omitted).\n * Uses the same storeId suffix convention as UTEXOWallet VSS backup (storeId_layer1, storeId_utexo).\n * Restored data is written to targetDir/{layer1Network}/{masterFingerprint} and\n * targetDir/{utexoNetwork}/{masterFingerprint} (same layout as when using dataDir on UTEXOWallet).\n */\nexport async function restoreUtxoWalletFromVss(params: {\n mnemonic: string;\n targetDir: string;\n /** Optional; when omitted, config is built from mnemonic (vssServerUrl defaults to DEFAULT_VSS_SERVER_URL). */\n config?: VssBackupConfig;\n /** Preset to derive layer1/utexo network names; defaults to 'testnet'. */\n networkPreset?: UtxoNetworkPreset;\n /** Optional; when omitted and config not passed, DEFAULT_VSS_SERVER_URL is used. */\n vssServerUrl?: string;\n}): Promise<{ layer1Path: string; utexoPath: string; targetDir: string }> {\n const { mnemonic, targetDir, config: providedConfig, networkPreset = 'testnet', vssServerUrl } = params;\n if (!mnemonic || !mnemonic.trim()) {\n throw new ValidationError('mnemonic is required', 'mnemonic');\n }\n if (!targetDir) {\n throw new ValidationError('targetDir is required', 'targetDir');\n }\n const serverUrl = vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const config = providedConfig ?? await buildVssConfigFromMnemonic(mnemonic.trim(), serverUrl, networkPreset);\n const presetConfig = getUtxoNetworkConfig(networkPreset);\n const layer1Network = String(presetConfig.networkMap.mainnet);\n const utexoNetwork = String(presetConfig.networkMap.utexo);\n const masterFingerprint = config.storeId.replace(/^wallet_/, '') || config.storeId;\n const layer1Config: VssBackupConfig = { ...config, storeId: `${config.storeId}_layer1` };\n const utexoConfig: VssBackupConfig = { ...config, storeId: `${config.storeId}_utexo` };\n const { walletPath: layer1Path } = restoreFromVss({\n config: layer1Config,\n targetDir: path.join(targetDir, layer1Network, masterFingerprint),\n });\n const { walletPath: utexoPath } = restoreFromVss({\n config: utexoConfig,\n targetDir: path.join(targetDir, utexoNetwork, masterFingerprint),\n });\n return { layer1Path, utexoPath, targetDir };\n}\n\n/**\n * Restore a UTEXOWallet from a regular (file) backup created by UTEXOWallet.createBackup.\n * Expects one folder with wallet_<masterFingerprint>_layer1.backup and wallet_<masterFingerprint>_utexo.backup\n * (same naming convention as VSS: storeId_layer1, storeId_utexo with storeId = wallet_<fp>).\n * Restores into targetDir (same layout as VSS restore).\n */\nexport function restoreUtxoWalletFromBackup(params: {\n backupPath: string;\n password: string;\n targetDir: string;\n networkPreset?: UtxoNetworkPreset;\n}): { layer1Path: string; utexoPath: string; targetDir: string } {\n const { backupPath, password, targetDir, networkPreset = 'testnet' } = params;\n if (!backupPath || !password || !targetDir) {\n throw new ValidationError('backupPath, password, and targetDir are required', 'restoreUtxoWalletFromBackup');\n }\n if (!fs.existsSync(backupPath) || !fs.statSync(backupPath).isDirectory()) {\n throw new ValidationError('backupPath must be an existing directory', 'backupPath');\n }\n const files = fs.readdirSync(backupPath);\n const layer1File = files.find((f) => f.endsWith(LAYER1_BACKUP_SUFFIX));\n const utexoFile = files.find((f) => f.endsWith(UTEXO_BACKUP_SUFFIX));\n if (!layer1File || !utexoFile) {\n throw new ValidationError(\n `backupPath must contain wallet_<fp>_layer1.backup and wallet_<fp>_utexo.backup (from createBackup)`,\n 'backupPath'\n );\n }\n const masterFingerprint = layer1File.slice(0, -LAYER1_BACKUP_SUFFIX.length).replace(/^wallet_/, '');\n const expectedUtexoFile = `wallet_${masterFingerprint}${UTEXO_BACKUP_SUFFIX}`;\n if (utexoFile !== expectedUtexoFile) {\n throw new ValidationError(\n `Layer1 and utexo backup filenames must share the same wallet id (expected ${expectedUtexoFile})`,\n 'backupPath'\n );\n }\n const layer1BackupFile = path.join(backupPath, layer1File);\n const utexoBackupFile = path.join(backupPath, utexoFile);\n if (!fs.existsSync(layer1BackupFile) || !fs.existsSync(utexoBackupFile)) {\n throw new ValidationError('Backup files not found', 'backupPath');\n }\n const presetConfig = getUtxoNetworkConfig(networkPreset);\n const layer1Network = String(presetConfig.networkMap.mainnet);\n const utexoNetwork = String(presetConfig.networkMap.utexo);\n const layer1DataDir = path.join(targetDir, layer1Network, masterFingerprint);\n const utexoDataDir = path.join(targetDir, utexoNetwork, masterFingerprint);\n for (const dir of [layer1DataDir, utexoDataDir]) {\n if (!fs.existsSync(path.dirname(dir))) {\n fs.mkdirSync(path.dirname(dir), { recursive: true });\n }\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n restoreWallet({ backupFilePath: layer1BackupFile, password, dataDir: layer1DataDir });\n restoreWallet({ backupFilePath: utexoBackupFile, password, dataDir: utexoDataDir });\n return {\n layer1Path: layer1DataDir,\n utexoPath: utexoDataDir,\n targetDir,\n };\n}\n","/**\n * UTEXOWallet - Wallet class for UTEXO operations\n * \n * This class provides a wallet interface that accepts either a mnemonic or seed\n * for initialization. It implements both IWalletManager (standard RGB operations)\n * and IUTEXOProtocol (UTEXO-specific Lightning and on-chain operations).\n */\n\nimport { PublicKeys } from \"../types/utexo\";\nimport { deriveKeysFromMnemonicOrSeed } from '../crypto';\nimport type { Network, EstimateFeeResult } from '../crypto';\nimport { BitcoinNetwork } from \"../types/wallet-model\";\nimport { getDestinationAsset } from \"../constants\";\nimport { WalletManager } from \"../wallet/wallet-manager\";\nimport { ValidationError, WalletError } from \"../errors\";\nimport type { IWalletManager } from \"../wallet/IWalletManager\";\nimport type { IUTEXOProtocol } from \"./IUTEXOProtocol\";\nimport { UTEXOProtocol } from \"./utexo-protocol\";\nimport { getUtxoNetworkConfig, type UtxoNetworkPreset, type UtxoNetworkMap, type UtxoNetworkIdMap } from \"./utils/network\";\nimport path from \"path\";\n\nexport { UTEXOProtocol } from \"./utexo-protocol\";\nexport type { IUTEXOProtocol } from \"./IUTEXOProtocol\";\nimport type {\n CreateLightningInvoiceRequestModel,\n LightningReceiveRequest,\n LightningSendRequest,\n GetLightningSendFeeEstimateRequestModel,\n PayLightningInvoiceRequestModel,\n OnchainSendRequestModel,\n OnchainSendResponse,\n GetOnchainSendResponse,\n ListLightningPaymentsResponse,\n OnchainReceiveRequestModel,\n OnchainReceiveResponse,\n OnchainSendEndRequestModel,\n PayLightningInvoiceEndRequestModel,\n} from '../types/utexo';\nimport type {\n CreateUtxosBeginRequestModel,\n CreateUtxosEndRequestModel,\n FailTransfersRequest,\n InvoiceRequest,\n InvoiceReceiveData,\n IssueAssetNiaRequestModel,\n IssueAssetIfaRequestModel,\n SendAssetBeginRequestModel,\n SendAssetEndRequestModel,\n SendResult,\n BtcBalance,\n Unspent,\n WalletBackupResponse,\n SendBtcBeginRequestModel,\n SendBtcEndRequestModel,\n GetFeeEstimationResponse,\n InflateAssetIfaRequestModel,\n InflateEndRequestModel,\n OperationResult,\n AssetNIA,\n AssetBalance,\n ListAssets,\n Transaction,\n Transfer,\n InvoiceData,\n OnchainSendStatus,\n TransferStatus,\n VssBackupConfig,\n VssBackupInfo,\n} from '../types/wallet-model';\nimport { getBridgeAPI } from \"./bridge\";\nimport { TransferByMainnetInvoiceResponse } from \"./bridge/types\";\nimport { NetworkAsset } from \"./utils/network\";\nimport { decodeBridgeInvoice, fromUnitsNumber, toUnitsNumber } from \"./utils/helpers\";\nimport { DEFAULT_VSS_SERVER_URL, getVssConfigs } from \"./config/vss\";\nimport type { ConfigOptions } from \"./config/options\";\nimport { buildVssConfigFromMnemonic, prepareUtxoBackupDirs, finalizeUtxoBackupPaths } from \"./restore\";\n\n/**\n * UTEXOWallet - Combines standard RGB wallet operations with UTEXO protocol features\n * \n * Architecture:\n * - Implements IWalletManager for standard RGB operations (via WalletManager delegation)\n * - Implements IUTEXOProtocol for UTEXO-specific operations (Lightning, on-chain sends)\n * - Manages two WalletManager instances: layer1 (Bitcoin) and utexo (UTEXO network)\n */\nexport class UTEXOWallet extends UTEXOProtocol implements IWalletManager, IUTEXOProtocol {\n private readonly mnemonicOrSeed: string | Uint8Array;\n private readonly options: ConfigOptions;\n private readonly networkMap: UtxoNetworkMap;\n private readonly networkIdMap: UtxoNetworkIdMap;\n private readonly bridge: ReturnType<typeof getBridgeAPI>;\n private layer1Keys: PublicKeys | null = null;\n private utexoKeys: PublicKeys | null = null;\n private layer1RGBWallet: WalletManager | null = null;\n private utexoRGBWallet: WalletManager | null = null;\n\n /**\n * Creates a new UTEXOWallet instance\n * @param mnemonicOrSeed - Either a mnemonic phrase (string) or seed (Uint8Array)\n * @param options - Optional configuration options (defaults to { network: 'mainnet' })\n */\n constructor(mnemonicOrSeed: string | Uint8Array, options: ConfigOptions = {}) {\n super();\n this.mnemonicOrSeed = mnemonicOrSeed;\n this.options = options;\n\n const preset: UtxoNetworkPreset = options.network ?? 'testnet';\n\n const networkConfig = getUtxoNetworkConfig(preset);\n this.networkMap = networkConfig.networkMap;\n this.networkIdMap = networkConfig.networkIdMap;\n this.bridge = getBridgeAPI(preset);\n }\n\n async initialize(): Promise<void> {\n this.layer1Keys = await this.derivePublicKeys(this.networkMap.mainnet);\n this.utexoKeys = await this.derivePublicKeys(this.networkMap.utexo);\n const fp = this.utexoKeys.masterFingerprint;\n const dataDir = this.options.dataDir;\n this.utexoRGBWallet = new WalletManager({\n xpubVan: this.utexoKeys.accountXpubVanilla,\n xpubCol: this.utexoKeys.accountXpubColored,\n masterFingerprint: this.utexoKeys.masterFingerprint,\n network: this.networkMap.utexo,\n mnemonic: this.mnemonicOrSeed as string,\n dataDir: dataDir ? path.join(dataDir, String(this.networkMap.utexo), fp) : undefined,\n });\n this.layer1RGBWallet = new WalletManager({\n xpubVan: this.layer1Keys.accountXpubVanilla,\n xpubCol: this.layer1Keys.accountXpubVanilla,\n masterFingerprint: this.layer1Keys.masterFingerprint,\n network: this.networkMap.mainnet,\n mnemonic: this.mnemonicOrSeed as string,\n dataDir: dataDir ? path.join(dataDir, String(this.networkMap.mainnet), fp) : undefined,\n });\n }\n\n /**\n * Derive public keys from mnemonic or seed\n * @param network - BitcoinNetwork identifier \n * @returns Promise resolving to PublicKeys containing xpub, accountXpubVanilla, accountXpubColored, and masterFingerprint\n * @throws {ValidationError} If mnemonic is invalid\n */\n async derivePublicKeys(network: BitcoinNetwork): Promise<PublicKeys> {\n const generatedKeys = await deriveKeysFromMnemonicOrSeed(network, this.mnemonicOrSeed);\n const { xpub, accountXpubVanilla, accountXpubColored, masterFingerprint } = generatedKeys;\n return { xpub, accountXpubVanilla, accountXpubColored, masterFingerprint };\n }\n\n async getPubKeys(): Promise<PublicKeys> {\n if (!this.layer1Keys) {\n throw new ValidationError('Public keys are not set', 'publicKeys');\n }\n return this.layer1Keys;\n }\n\n /**\n * Guard method to ensure wallet is initialized\n * @throws {WalletError} if wallet is not initialized\n */\n private ensureInitialized(): void {\n if (!this.utexoRGBWallet) {\n throw new WalletError('Wallet not initialized. Call initialize() first.');\n }\n }\n\n // ==========================================\n // IWalletManager Implementation\n // ==========================================\n\n async goOnline(indexerUrl: string, skipConsistencyCheck?: boolean): Promise<void> {\n this.ensureInitialized();\n // TODO: Implement goOnline for UTEXO wallet\n throw new Error('goOnline not implemented');\n }\n\n getXpub(): { xpubVan: string; xpubCol: string } {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getXpub();\n }\n\n getNetwork(): Network {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getNetwork();\n }\n\n async dispose(): Promise<void> {\n if (this.layer1RGBWallet) {\n await this.layer1RGBWallet.dispose();\n }\n if (this.utexoRGBWallet) {\n await this.utexoRGBWallet.dispose();\n }\n }\n\n isDisposed(): boolean {\n if (!this.utexoRGBWallet) {\n return false;\n }\n return this.utexoRGBWallet.isDisposed();\n }\n\n async getBtcBalance(): Promise<BtcBalance> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getBtcBalance();\n }\n\n async getAddress(): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getAddress();\n }\n\n async listUnspents(): Promise<Unspent[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listUnspents();\n }\n\n async createUtxosBegin(params: CreateUtxosBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.createUtxosBegin(params);\n }\n\n async createUtxosEnd(params: CreateUtxosEndRequestModel): Promise<number> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.createUtxosEnd(params);\n }\n\n async createUtxos(params: { upTo?: boolean; num?: number; size?: number; feeRate?: number }): Promise<number> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.createUtxos(params);\n }\n\n async listAssets(): Promise<ListAssets> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listAssets();\n }\n\n async getAssetBalance(asset_id: string): Promise<AssetBalance> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getAssetBalance(asset_id);\n }\n\n async issueAssetNia(params: IssueAssetNiaRequestModel): Promise<AssetNIA> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.issueAssetNia(params);\n }\n\n async issueAssetIfa(params: IssueAssetIfaRequestModel): Promise<any> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.issueAssetIfa(params);\n }\n\n async inflateBegin(params: InflateAssetIfaRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.inflateBegin(params);\n }\n\n async inflateEnd(params: InflateEndRequestModel): Promise<OperationResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.inflateEnd(params);\n }\n\n async inflate(params: InflateAssetIfaRequestModel, mnemonic?: string): Promise<OperationResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.inflate(params, mnemonic);\n }\n\n async sendBegin(params: SendAssetBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBegin(params);\n }\n\n async sendEnd(params: SendAssetEndRequestModel): Promise<SendResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendEnd(params);\n }\n\n async send(invoiceTransfer: SendAssetBeginRequestModel, mnemonic?: string): Promise<SendResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.send(invoiceTransfer, mnemonic);\n }\n\n async sendBtcBegin(params: SendBtcBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBtcBegin(params);\n }\n\n async sendBtcEnd(params: SendBtcEndRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBtcEnd(params);\n }\n\n async sendBtc(params: SendBtcBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBtc(params);\n }\n\n async blindReceive(params: InvoiceRequest): Promise<InvoiceReceiveData> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.blindReceive(params);\n }\n\n async witnessReceive(params: InvoiceRequest): Promise<InvoiceReceiveData> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.witnessReceive(params);\n }\n\n async decodeRGBInvoice(params: { invoice: string }): Promise<InvoiceData> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.decodeRGBInvoice(params);\n }\n\n async listTransactions(): Promise<Transaction[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listTransactions();\n }\n\n async listTransfers(asset_id?: string): Promise<Transfer[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listTransfers(asset_id);\n }\n\n async failTransfers(params: FailTransfersRequest): Promise<boolean> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.failTransfers(params);\n }\n\n async refreshWallet(): Promise<void> {\n this.ensureInitialized();\n this.utexoRGBWallet!.refreshWallet();\n }\n\n async syncWallet(): Promise<void> {\n this.ensureInitialized();\n this.utexoRGBWallet!.syncWallet();\n }\n\n async estimateFeeRate(blocks: number): Promise<GetFeeEstimationResponse> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.estimateFeeRate(blocks);\n }\n\n async estimateFee(psbtBase64: string): Promise<EstimateFeeResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.estimateFee(psbtBase64);\n }\n\n /**\n * Create backup for both layer1 and utexo stores in one folder.\n * Writes backupPath/wallet_{masterFingerprint}_layer1.backup and backupPath/wallet_{masterFingerprint}_utexo.backup\n * (same naming convention as VSS: storeId_layer1, storeId_utexo with storeId = wallet_<fp>).\n * Use restoreUtxoWalletFromBackup with the same backupPath to restore both.\n */\n async createBackup(params: { backupPath: string; password: string }): Promise<WalletBackupResponse & { layer1BackupPath: string; utexoBackupPath: string }> {\n this.ensureInitialized();\n const { backupPath, password } = params;\n if (!backupPath || !password) {\n throw new ValidationError('backupPath and password are required', 'createBackup');\n }\n const fp = this.utexoKeys!.masterFingerprint;\n const { layer1TmpDir, utexoTmpDir, layer1FinalPath, utexoFinalPath } = prepareUtxoBackupDirs(backupPath, fp);\n const layer1Result = await this.layer1RGBWallet!.createBackup({ backupPath: layer1TmpDir, password });\n const utexoResult = await this.utexoRGBWallet!.createBackup({ backupPath: utexoTmpDir, password });\n finalizeUtxoBackupPaths({\n layer1BackupPath: layer1Result.backupPath,\n utexoBackupPath: utexoResult.backupPath,\n layer1FinalPath,\n utexoFinalPath,\n layer1TmpDir,\n utexoTmpDir,\n });\n return {\n message: 'Backup created successfully (layer1 + utexo)',\n backupPath,\n layer1BackupPath: layer1FinalPath,\n utexoBackupPath: utexoFinalPath,\n };\n }\n\n async configureVssBackup(config: VssBackupConfig): Promise<void> {\n this.ensureInitialized();\n const { layer1, utexo } = getVssConfigs(config);\n await this.layer1RGBWallet!.configureVssBackup(layer1);\n await this.utexoRGBWallet!.configureVssBackup(utexo);\n }\n\n async disableVssAutoBackup(): Promise<void> {\n this.ensureInitialized();\n await this.layer1RGBWallet!.disableVssAutoBackup();\n await this.utexoRGBWallet!.disableVssAutoBackup();\n }\n\n /**\n * Run VSS backup for both layer1 and utexo stores.\n * Config is optional: when omitted, builds config from mnemonic (option param or wallet mnemonic)\n * and options.vssServerUrl (or DEFAULT_VSS_SERVER_URL if not set).\n *\n * @param config - Optional; when omitted, built from mnemonic and vssServerUrl\n * @param mnemonic - Optional; when omitted, uses wallet mnemonic (only if wallet was created with mnemonic string)\n */\n async vssBackup(config?: VssBackupConfig, mnemonic?: string): Promise<number> {\n this.ensureInitialized();\n let vssConfig: VssBackupConfig;\n if (config) {\n vssConfig = config;\n } else {\n const mnemonicToUse =\n mnemonic ?? (typeof this.mnemonicOrSeed === 'string' ? this.mnemonicOrSeed : null);\n if (!mnemonicToUse) {\n throw new ValidationError(\n 'mnemonic is required for VSS backup when config is not passed (wallet was created with seed)',\n 'mnemonic'\n );\n }\n const serverUrl = this.options.vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const preset: UtxoNetworkPreset = this.options.network ?? 'mainnet';\n vssConfig = await buildVssConfigFromMnemonic(mnemonicToUse.trim(), serverUrl, preset);\n }\n const { layer1, utexo } = getVssConfigs(vssConfig);\n await this.layer1RGBWallet!.vssBackup(layer1);\n const version = await this.utexoRGBWallet!.vssBackup(utexo);\n return version;\n }\n\n /**\n * Get VSS backup info. Config is optional; when omitted, built from mnemonic (param or wallet)\n * and options.vssServerUrl (or DEFAULT_VSS_SERVER_URL if not set).\n */\n async vssBackupInfo(config?: VssBackupConfig, mnemonic?: string): Promise<VssBackupInfo> {\n this.ensureInitialized();\n let vssConfig: VssBackupConfig;\n if (config) {\n vssConfig = config;\n } else {\n const mnemonicToUse =\n mnemonic ?? (typeof this.mnemonicOrSeed === 'string' ? this.mnemonicOrSeed : null);\n if (!mnemonicToUse) {\n throw new ValidationError('config or mnemonic required for vssBackupInfo', 'config');\n }\n const serverUrl = this.options.vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const preset: UtxoNetworkPreset = this.options.network ?? 'mainnet';\n vssConfig = await buildVssConfigFromMnemonic(mnemonicToUse.trim(), serverUrl, preset);\n }\n const { utexo } = getVssConfigs(vssConfig);\n return this.utexoRGBWallet!.vssBackupInfo(utexo);\n }\n\n async signPsbt(psbt: string, mnemonic?: string): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.signPsbt(psbt, mnemonic);\n }\n\n async signMessage(message: string): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.signMessage(message);\n }\n\n async verifyMessage(message: string, signature: string, accountXpub?: string): Promise<boolean> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.verifyMessage(message, signature, accountXpub);\n }\n\n /**\n * Validates that the wallet has sufficient spendable balance for the given asset and amount.\n * @param assetId - Asset ID to check balance for\n * @param amount - Required amount (in asset units)\n * @throws {ValidationError} If balance is not found or insufficient\n */\n async validateBalance(assetId: string, amount: number): Promise<void> {\n const assetBalance = await this.getAssetBalance(assetId);\n if (!assetBalance || !assetBalance.spendable) {\n throw new ValidationError('Asset balance is not found', 'assetBalance');\n }\n if (assetBalance.spendable < amount) {\n throw new ValidationError(`Insufficient balance ${assetBalance.spendable} < ${amount}`, 'amount');\n }\n }\n /**\n * Extracts invoice data and destination asset from a bridge transfer.\n * \n * @param bridgeTransfer - Bridge transfer response containing recipient invoice and token info\n * @returns Object containing invoice string, decoded invoice data, and destination asset\n * @throws {ValidationError} If destination asset is not supported\n */\n private async extractInvoiceAndAsset(\n bridgeTransfer: TransferByMainnetInvoiceResponse\n ): Promise<{ utexoInvoice: string; invoiceData: InvoiceData; destinationAsset: NetworkAsset }> {\n const utexoInvoice = bridgeTransfer.recipient.address;\n const invoiceData = await this.decodeRGBInvoice({ invoice: utexoInvoice });\n const destinationAsset = this.networkIdMap.utexo.getAssetById(bridgeTransfer.recipientToken.id);\n\n if (!destinationAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n\n return { utexoInvoice, invoiceData, destinationAsset };\n }\n\n /**\n * IUTEXOProtocol Implementation\n */\n\n\n async onchainReceive(params: OnchainReceiveRequestModel): Promise<OnchainReceiveResponse> {\n this.ensureInitialized();\n\n const destinationAsset = getDestinationAsset('mainnet', 'utexo', params.assetId ?? null);\n if (!destinationAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n\n if (!params.amount) {\n throw new ValidationError('Amount is required', 'amount');\n }\n\n const destinationInvoice = await this.utexoRGBWallet!.witnessReceive({\n assetId: '', //invoice can receive any asset\n amount: params.amount,\n minConfirmations: params.minConfirmations,\n durationSeconds: params.durationSeconds,\n });\n\n const bridgeTransfer = await this.bridge.getBridgeInSignature({\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.mainnet.networkName,\n networkId: this.networkIdMap.mainnet.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: params.amount.toString(),\n destination: {\n address: destinationInvoice.invoice,\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n additionalAddresses: [],\n });\n\n const decodedInvoice = decodeBridgeInvoice(bridgeTransfer.signature);\n\n return {\n invoice: decodedInvoice,\n };\n }\n\n async onchainSendBegin(params: OnchainSendRequestModel): Promise<string> {\n this.ensureInitialized();\n /** Get the bridge RGB utexo invoice by tempRequestId should be by invoice */\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(params.invoice, this.networkIdMap.mainnet.networkId);\n if (!bridgeTransfer) {\n console.log('External invoice UTEXO -> Mainnet initiated');\n return this.UTEXOToMainnetRGB(params);\n }\n const utexoInvoice = bridgeTransfer.recipient.address;\n const invoiceData = await this.decodeRGBInvoice({ invoice: utexoInvoice })\n const bridgeAmount = bridgeTransfer.recipientAmount;\n const destinationAsset = this.networkIdMap.utexo.getAssetById(bridgeTransfer.recipientToken.id);\n if (!destinationAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n // const amount = invoiceData.assignment.amount;\n const amount = toUnitsNumber(bridgeAmount, destinationAsset.precision);\n\n const isWitness = invoiceData.recipientId.includes(\"wvout:\");\n\n await this.validateBalance(destinationAsset.assetId, amount);\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: utexoInvoice,\n amount: amount,\n assetId: destinationAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n }\n }),\n });\n\n return psbt;\n }\n\n async onchainSendEnd(params: OnchainSendEndRequestModel): Promise<OnchainSendResponse> {\n this.ensureInitialized();\n const sendResult = await this.utexoRGBWallet!.sendEnd({ signedPsbt: params.signedPsbt });\n\n // TODO: there should be func that allow to cancel or mark as paid Tricorn Bridge Transfer\n // Best-effort finalize bridge transfer (complete/cancel/status) via BridgeClient (depending on Tricorn semantics)\n\n return sendResult;\n }\n\n async onchainSend(params: OnchainSendRequestModel, mnemonic?: string): Promise<OnchainSendResponse> {\n this.ensureInitialized();\n const psbt = await this.onchainSendBegin(params);\n const signed_psbt = await this.utexoRGBWallet!.signPsbt(psbt, mnemonic);\n return await this.onchainSendEnd({ signedPsbt: signed_psbt, invoice: params.invoice });\n }\n\n async getOnchainSendStatus(invoice: string): Promise<OnchainSendStatus | null> {\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(invoice, this.networkIdMap.mainnet.networkId);\n // console.log('bridgeTransfer', bridgeTransfer);\n if (!bridgeTransfer) {\n const withdrawTransfer = await this.bridge.getWithdrawTransfer(invoice, this.networkIdMap.utexo.networkId);\n if (!withdrawTransfer) {\n return null;\n }\n return withdrawTransfer.status as OnchainSendStatus;\n }\n const { invoiceData, destinationAsset } = await this.extractInvoiceAndAsset(bridgeTransfer);\n const transfers = await this.utexoRGBWallet!.listTransfers(destinationAsset.assetId);\n const transfer = transfers.find(transfer => transfer.recipientId === invoiceData.recipientId);\n if (transfer) {\n return transfer.status;\n }\n if (bridgeTransfer) {\n return bridgeTransfer.status as OnchainSendStatus;\n }\n return null;\n }\n\n async listOnchainTransfers(asset_id?: string): Promise<Transfer[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listTransfers(asset_id);\n }\n\n\n\n async createLightningInvoice(params: CreateLightningInvoiceRequestModel): Promise<LightningReceiveRequest> {\n this.ensureInitialized();\n\n const asset = params.asset;\n if (!asset) {\n throw new ValidationError('Asset is required', 'asset');\n }\n\n if (!asset.assetId) {\n throw new ValidationError('Asset ID is required', 'assetId');\n }\n if (!asset.amount) {\n throw new ValidationError('Amount is required', 'amount');\n }\n\n const destinationAsset = getDestinationAsset('mainnet', 'utexo', asset.assetId);\n if (!destinationAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n\n const destinationInvoice = await this.utexoRGBWallet!.witnessReceive({\n assetId: '', //invoice can receive any asset\n amount: asset.amount,\n });\n\n const bridgeTransfer = await this.bridge.getBridgeInSignature({\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.mainnetLightning.networkName,\n networkId: this.networkIdMap.mainnetLightning.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: asset.amount.toString(),\n destination: {\n address: destinationInvoice.invoice,\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n additionalAddresses: [],\n });\n\n const decodedLnInvoice = decodeBridgeInvoice(bridgeTransfer.signature);\n\n return {\n lnInvoice: decodedLnInvoice,\n };\n }\n\n\n\n async payLightningInvoiceBegin(params: PayLightningInvoiceRequestModel): Promise<string> {\n this.ensureInitialized();\n\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(params.lnInvoice, this.networkIdMap.mainnetLightning.networkId);\n if (!bridgeTransfer) {\n console.log('External invoice UTEXO -> Mainnet Lightning initiated');\n return this.UtexoToMainnetLightning(params);\n }\n\n const bridgeAmount = bridgeTransfer.recipientAmount;\n const { utexoInvoice, invoiceData, destinationAsset } = await this.extractInvoiceAndAsset(bridgeTransfer);\n const amount = toUnitsNumber(bridgeAmount, destinationAsset.precision);\n\n const isWitness = invoiceData.recipientId.includes(\"wvout:\");\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: utexoInvoice,\n amount: amount,\n assetId: destinationAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n }\n }),\n });\n\n return psbt;\n }\n\n async payLightningInvoiceEnd(params: PayLightningInvoiceEndRequestModel): Promise<SendResult> {\n this.ensureInitialized();\n const sendResult = await this.utexoRGBWallet!.sendEnd({ signedPsbt: params.signedPsbt });\n // TODO: there should be func that allow to cancel or mark as paid Tricorn Bridge Transfer\n // Best-effort finalize bridge transfer (complete/cancel/status) via BridgeClient (depending on Tricorn semantics)\n\n return sendResult;\n }\n\n async payLightningInvoice(params: PayLightningInvoiceRequestModel, mnemonic?: string): Promise<LightningSendRequest> {\n this.ensureInitialized();\n const psbt = await this.payLightningInvoiceBegin(params);\n const signed_psbt = await this.utexoRGBWallet!.signPsbt(psbt, mnemonic);\n return await this.payLightningInvoiceEnd({ signedPsbt: signed_psbt, lnInvoice: params.lnInvoice });\n }\n\n async getLightningSendRequest(lnInvoice: string): Promise<TransferStatus | null> {\n this.ensureInitialized();\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(lnInvoice, this.networkIdMap.mainnetLightning.networkId);\n if (!bridgeTransfer) {\n const withdrawTransfer = await this.bridge.getWithdrawTransfer(lnInvoice, this.networkIdMap.utexo.networkId);\n if (!withdrawTransfer) {\n return null;\n }\n return withdrawTransfer.status as TransferStatus;\n }\n const { invoiceData, destinationAsset } = await this.extractInvoiceAndAsset(bridgeTransfer);\n const transfers = await this.utexoRGBWallet!.listTransfers(destinationAsset.assetId);\n return transfers.length > 0 ? transfers.find(transfer => transfer.recipientId === invoiceData.recipientId)?.status ?? null : null;\n }\n async getLightningReceiveRequest(lnInvoice: string): Promise<TransferStatus | null> {\n this.ensureInitialized();\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(lnInvoice, this.networkIdMap.mainnetLightning.networkId);\n if (!bridgeTransfer) {\n const withdrawTransfer = await this.bridge.getWithdrawTransfer(lnInvoice, this.networkIdMap.utexo.networkId);\n if (!withdrawTransfer) {\n return null;\n }\n return withdrawTransfer.status as TransferStatus;\n }\n const { invoiceData, destinationAsset } = await this.extractInvoiceAndAsset(bridgeTransfer);\n const transfers = await this.utexoRGBWallet!.listTransfers(destinationAsset.assetId);\n return transfers.length > 0 ? transfers.find(transfer => transfer.recipientId === invoiceData.recipientId)?.status ?? null : null;\n }\n\n private async UTEXOToMainnetRGB(params: OnchainSendRequestModel): Promise<string> {\n this.ensureInitialized();\n const invoiceData = await this.decodeRGBInvoice({ invoice: params.invoice })\n if (!params.assetId && !invoiceData.assetId) {\n throw new ValidationError('Asset ID is required for external invoice', 'assetId');\n }\n const assetId = params.assetId ?? invoiceData.assetId;\n const utexoAsset = getDestinationAsset('mainnet', 'utexo', assetId ?? null);\n if (!utexoAsset) {\n throw new ValidationError('UTEXO asset is not supported', 'assetId');\n }\n\n const destinationAsset = this.networkIdMap.mainnet.getAssetById(utexoAsset?.tokenId ?? 0);\n // return;\n if (!destinationAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n\n if (!params.amount && !invoiceData.assignment.amount) {\n throw new ValidationError('Amount is required for external invoice', 'amount');\n }\n\n let amount: number;\n if (params.amount) {\n amount = params.amount;\n } else if (invoiceData.assignment.amount) {\n amount = fromUnitsNumber(invoiceData.assignment.amount, destinationAsset.precision);\n } else {\n throw new ValidationError('Amount is required', 'amount');\n }\n\n await this.validateBalance(utexoAsset.assetId, toUnitsNumber(amount.toString(), utexoAsset.precision));\n\n const payload = {\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: amount.toString(),\n destination: {\n address: params.invoice,\n networkName: this.networkIdMap.mainnet.networkName,\n networkId: this.networkIdMap.mainnet.networkId,\n },\n additionalAddresses: [],\n }\n\n console.log('payload', payload);\n\n const bridgeOutTransfer = await this.bridge.getBridgeInSignature(payload);\n const decodedInvoice = decodeBridgeInvoice(bridgeOutTransfer.signature);\n const isWitness = decodedInvoice.includes(\"wvout:\");\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: decodedInvoice,\n amount: Number(bridgeOutTransfer.amount),\n assetId: utexoAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n }\n }),\n });\n\n return psbt;\n }\n\n private async UtexoToMainnetLightning(params: PayLightningInvoiceRequestModel): Promise<string> {\n this.ensureInitialized();\n if (!params.assetId) {\n throw new ValidationError('Asset ID is required for external invoice', 'assetId');\n }\n const assetId = params.assetId;\n const utexoAsset = getDestinationAsset('mainnet', 'utexo', assetId ?? null);\n const destinationAsset = this.networkIdMap.mainnet.getAssetById(utexoAsset?.tokenId ?? 0);\n\n if (!destinationAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n if (!utexoAsset) {\n throw new ValidationError('Destination asset is not supported', 'assetId');\n }\n\n if (!params.amount) {\n throw new ValidationError('Amount is required for external invoice', 'amount');\n }\n\n const amount = params.amount;\n\n\n await this.validateBalance(utexoAsset.assetId, toUnitsNumber(amount.toString(), utexoAsset.precision));\n\n const bridgeOutTransfer = await this.bridge.getBridgeInSignature({\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: amount.toString(),\n destination: {\n address: params.lnInvoice,\n networkName: this.networkIdMap.mainnetLightning.networkName,\n networkId: this.networkIdMap.mainnetLightning.networkId,\n },\n additionalAddresses: [],\n });\n const decodedInvoice = decodeBridgeInvoice(bridgeOutTransfer.signature);\n const isWitness = decodedInvoice.includes(\"wvout:\");\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: decodedInvoice,\n amount: Number(bridgeOutTransfer.amount),\n assetId: utexoAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n }\n }),\n });\n\n return psbt;\n }\n // TODO: Implement remaining methods as needed:\n // - createLightningInvoice() - will use utexoRGBWallet\n // - getLightningReceiveRequest() - will use utexoRGBWallet\n // - getLightningSendRequest() - will use utexoRGBWallet\n // - getLightningSendFeeEstimate() - will use utexoRGBWallet\n // - payLightningInvoiceBegin() - will use utexoRGBWallet\n // - payLightningInvoiceEnd() - will use utexoRGBWallet\n // - onchainSendBegin() - will use layer1RGBWallet or utexoRGBWallet\n // - onchainSendEnd() - will use layer1RGBWallet or utexoRGBWallet\n // - getOnchainSendStatus() - will use layer1RGBWallet or utexoRGBWallet\n // - listOnchainTransfers() - will use layer1RGBWallet or utexoRGBWallet\n // - listLightningPayments() - will use utexoRGBWallet\n}\n","/**\n * Logger utility for the SDK\n * Provides structured logging with configurable log levels\n */\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4,\n}\n\nclass Logger {\n private level: LogLevel = LogLevel.ERROR;\n\n /**\n * Set the log level\n */\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n /**\n * Get the current log level\n */\n getLevel(): LogLevel {\n return this.level;\n }\n\n /**\n * Log debug messages\n */\n debug(...args: unknown[]): void {\n if (this.level <= LogLevel.DEBUG) {\n console.debug('[SDK DEBUG]', ...args);\n }\n }\n\n /**\n * Log info messages\n */\n info(...args: unknown[]): void {\n if (this.level <= LogLevel.INFO) {\n console.info('[SDK INFO]', ...args);\n }\n }\n\n /**\n * Log warning messages\n */\n warn(...args: unknown[]): void {\n if (this.level <= LogLevel.WARN) {\n console.warn('[SDK WARN]', ...args);\n }\n }\n\n /**\n * Log error messages\n */\n error(...args: unknown[]): void {\n if (this.level <= LogLevel.ERROR) {\n console.error('[SDK ERROR]', ...args);\n }\n }\n}\n\nexport const logger = new Logger();\n\n/**\n * Configure SDK logging\n */\nexport function configureLogging(level: LogLevel): void {\n logger.setLevel(level);\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/network-config.ts","../src/errors/index.ts","../src/constants/derivation.ts","../src/utexo/config/utexo-presets.ts","../src/utexo/utils/network.ts","../src/constants/network.ts","../src/constants/defaults.ts","../src/utils/validation.ts","../src/client/rgb-lib-client.ts","../src/utils/environment.ts","../src/utils/crypto-helpers.ts","../src/utils/crypto-browser.ts","../src/utils/fingerprint.ts","../src/utils/bip32-helpers.ts","../src/crypto/dependencies.ts","../src/crypto/keys.ts","../src/crypto/signer.ts","../src/crypto/vss-keys.ts","../src/wallet/wallet-manager.ts","../src/utexo/utexo-protocol.ts","../src/utexo/config/gateway.ts","../src/utexo/bridge/types.ts","../src/utexo/bridge/api.ts","../src/utexo/utils/helpers.ts","../src/utexo/config/vss.ts","../src/utexo/restore.ts","../src/utexo/utexo-wallet.ts","../src/utils/logger.ts"],"names":["fs","path","nodeCrypto","ripemd160","crypto","bip39","eccModule","ecc","bip32","init","bdk","Psbt","payments","networks","bip341","toXOnly","generateKeys","getNetworkVersions","wallet","sha256","TransferStatuses","transfer","LogLevel"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Network } from '../crypto/types';\n\nexport const DEFAULT_TRANSPORT_ENDPOINTS: Record<Network, string> = {\n mainnet: 'rpcs://rgb-proxy-mainnet.utexo.com/json-rpc',\n testnet: 'rpcs://rgb-proxy-testnet3.utexo.com/json-rpc',\n testnet4: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n signet: 'rpcs://rgb-proxy-utexo.utexo.com/json-rpc',\n regtest: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n};\n\nexport const DEFAULT_INDEXER_URLS: Record<Network, string> = {\n mainnet: 'ssl://electrum.iriswallet.com:50003',\n testnet: 'ssl://electrum.iriswallet.com:50013',\n testnet4: 'ssl://electrum.iriswallet.com:50053',\n signet: 'https://esplora-api.utexo.com',\n regtest: 'tcp://regtest.thunderstack.org:50001',\n};\n","/**\n * Custom error classes for the RGB SDK\n */\n\n/**\n * Base SDK error class with error codes and context\n */\nexport class SDKError extends Error {\n public readonly code: string;\n public readonly statusCode?: number;\n public readonly cause?: Error;\n\n constructor(\n message: string,\n code: string,\n statusCode?: number,\n cause?: Error\n ) {\n super(message);\n this.name = 'SDKError';\n this.code = code;\n this.statusCode = statusCode;\n this.cause = cause;\n Object.setPrototypeOf(this, SDKError.prototype);\n\n // Maintains proper stack trace for where error was thrown (V8 only)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError);\n }\n }\n\n /**\n * Convert error to JSON for logging\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n statusCode: this.statusCode,\n cause: this.cause?.message,\n stack: this.stack,\n };\n }\n}\n\n/**\n * Network-related errors (API calls, connectivity)\n */\nexport class NetworkError extends SDKError {\n constructor(message: string, statusCode?: number, cause?: Error) {\n super(message, 'NETWORK_ERROR', statusCode, cause);\n this.name = 'NetworkError';\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n}\n\n/**\n * Validation errors (invalid input parameters)\n */\nexport class ValidationError extends SDKError {\n public readonly field?: string;\n\n constructor(message: string, field?: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n this.field = field;\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/**\n * Wallet-related errors (initialization, operations)\n */\nexport class WalletError extends SDKError {\n constructor(message: string, code?: string, cause?: Error) {\n super(message, code || 'WALLET_ERROR', undefined, cause);\n this.name = 'WalletError';\n Object.setPrototypeOf(this, WalletError.prototype);\n }\n}\n\n/**\n * Cryptographic errors (signing, key derivation)\n */\nexport class CryptoError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'CRYPTO_ERROR', undefined, cause);\n this.name = 'CryptoError';\n Object.setPrototypeOf(this, CryptoError.prototype);\n }\n}\n\n/**\n * Configuration errors (missing or invalid configuration)\n */\nexport class ConfigurationError extends SDKError {\n constructor(message: string, _field?: string) {\n super(message, 'CONFIGURATION_ERROR');\n this.name = 'ConfigurationError';\n Object.setPrototypeOf(this, ConfigurationError.prototype);\n }\n}\n\n/**\n * Bad request errors (400) - Invalid request parameters or data\n */\nexport class BadRequestError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'BAD_REQUEST', 400, cause);\n this.name = 'BadRequestError';\n Object.setPrototypeOf(this, BadRequestError.prototype);\n }\n}\n\n/**\n * Not found errors (404) - Resource not found\n */\nexport class NotFoundError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'NOT_FOUND', 404, cause);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n\n/**\n * Conflict errors (409) - Resource conflict (e.g., wallet state already exists)\n */\nexport class ConflictError extends SDKError {\n constructor(message: string, cause?: Error) {\n super(message, 'CONFLICT', 409, cause);\n this.name = 'ConflictError';\n Object.setPrototypeOf(this, ConflictError.prototype);\n }\n}\n\n/**\n * RGB Node errors (500, 502, 503, 504) - RGB Node server errors\n */\nexport class RgbNodeError extends SDKError {\n constructor(message: string, statusCode: number, cause?: Error) {\n super(message, 'RGB_NODE_ERROR', statusCode, cause);\n this.name = 'RgbNodeError';\n Object.setPrototypeOf(this, RgbNodeError.prototype);\n }\n}\n","/**\n * BIP32 derivation path constants\n */\n\n/**\n * BIP86 (Taproot) purpose value\n */\nexport const DERIVATION_PURPOSE = 86;\n\n/**\n * Account index (account 0')\n */\nexport const DERIVATION_ACCOUNT = 0;\n\n/**\n * RGB keychain index\n */\nexport const KEYCHAIN_RGB = 0;\n\n/**\n * Bitcoin keychain index\n */\nexport const KEYCHAIN_BTC = 0;\n","/**\n * UTEXO Network Preset Configurations\n *\n * This file contains the network preset configurations for different environments.\n * Each preset defines the Bitcoin network types and RGB/UTEXO network IDs and assets.\n */\n\nimport type { UtxoNetworkPresetConfig } from '../utils/network';\n\n/**\n * Network configuration for a single network (RGB, RGB Lightning, or UTEXO)\n */\ntype NetworkConfig = {\n networkName: string;\n networkId: number;\n assets: {\n assetId: string;\n tokenName: string;\n longName: string;\n precision: number;\n tokenId: number;\n }[];\n};\n\n/**\n * Helper function to add getAssetById method to network config\n */\nfunction withGetAssetById<T extends NetworkConfig>(\n config: T\n): T & { getAssetById(tokenId: number): T['assets'][number] | undefined } {\n return {\n ...config,\n getAssetById(tokenId: number) {\n return config.assets.find((a) => a.tokenId === tokenId);\n },\n };\n}\n\n/**\n * Testnet preset configuration (development)\n * Uses testnet/signet for Bitcoin networks\n */\nexport const testnetPreset: UtxoNetworkPresetConfig = {\n networkMap: {\n mainnet: 'testnet',\n utexo: 'signet',\n },\n networkIdMap: {\n mainnet: withGetAssetById({\n networkName: 'RGB',\n networkId: 36,\n assets: [\n {\n assetId: 'rgb:WPRv95Nj-icdrgPp-zpQhIp_-2TyJ~Ge-k~FvuMZ-~vVnkA0',\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n mainnetLightning: withGetAssetById({\n networkName: 'RGB Lightning',\n networkId: 94,\n assets: [\n {\n assetId: 'rgb:WPRv95Nj-icdrgPp-zpQhIp_-2TyJ~Ge-k~FvuMZ-~vVnkA0',\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n utexo: withGetAssetById({\n networkName: 'UTEXO',\n networkId: 96,\n assets: [\n {\n assetId: 'rgb:yJW4k8si-~8JdNfl-nM91qFu-r5rH_HS-1hM7jpi-L~lBf90',\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 4,\n },\n ],\n }),\n },\n};\n\n/**\n * Mainnet preset configuration (production)\n * Uses mainnet for Bitcoin networks\n * TODO: Update asset IDs and network IDs for production when available\n */\nexport const mainnetPreset: UtxoNetworkPresetConfig = {\n networkMap: {\n mainnet: 'mainnet',\n utexo: 'signet',\n },\n networkIdMap: {\n mainnet: withGetAssetById({\n networkName: 'RGB',\n networkId: 36, // TODO: Update to production network ID\n assets: [\n {\n assetId: 'rgb:nkHbmy97-R4cjRCe-j~VvT~E-0UQ0OW8-jOCCW6O-EqeCq9M', // TODO: Update to production asset ID\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 3,\n },\n ],\n }),\n mainnetLightning: withGetAssetById({\n networkName: 'RGB Lightning',\n networkId: 94, // TODO: Update to production network ID\n assets: [\n {\n assetId: 'rgb:nkHbmy97-R4cjRCe-j~VvT~E-0UQ0OW8-jOCCW6O-EqeCq9M', // TODO: Update to production asset ID\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 3,\n },\n ],\n }),\n utexo: withGetAssetById({\n networkName: 'UTEXO',\n networkId: 96, // TODO: Update to production network ID\n assets: [\n {\n assetId: 'rgb:0yyfySrb-TArdWKB-6Y0yhUX-dbqMpN3-NnjsV2F-2fMhOI4', // TODO: Update to production asset ID\n tokenName: 'tUSD',\n longName: 'USDT',\n precision: 6,\n tokenId: 3,\n },\n ],\n }),\n },\n};\n","/**\n * UTEXO network and asset mapping\n */\n\nimport type { Network } from '../../crypto/types';\n// Import preset configurations from config file\nimport { testnetPreset, mainnetPreset } from '../config/utexo-presets';\n\n/**\n * Network preset type - determines which configuration bundle to use\n */\nexport type UtxoNetworkPreset = 'mainnet' | 'testnet';\n\n/**\n * Network map configuration - maps logical network names to Bitcoin network types\n */\nexport type UtxoNetworkMap = {\n mainnet: Network;\n utexo: Network;\n};\n\n/**\n * Network configuration for a single network (RGB, RGB Lightning, or UTEXO)\n */\ntype NetworkConfig = {\n networkName: string;\n networkId: number;\n assets: {\n assetId: string;\n tokenName: string;\n longName: string;\n precision: number;\n tokenId: number;\n }[];\n};\n\n/**\n * Network ID map configuration - contains all network configs with asset lookup\n */\nexport type UtxoNetworkIdMap = {\n mainnet: NetworkConfig & {\n getAssetById(tokenId: number): NetworkConfig['assets'][number] | undefined;\n };\n mainnetLightning: NetworkConfig & {\n getAssetById(tokenId: number): NetworkConfig['assets'][number] | undefined;\n };\n utexo: NetworkConfig & {\n getAssetById(tokenId: number): NetworkConfig['assets'][number] | undefined;\n };\n};\n\n/**\n * Complete network preset configuration bundle\n */\nexport type UtxoNetworkPresetConfig = {\n networkMap: UtxoNetworkMap;\n networkIdMap: UtxoNetworkIdMap;\n};\n\n/**\n * Network preset configurations map\n */\nconst NETWORK_PRESETS: Record<UtxoNetworkPreset, UtxoNetworkPresetConfig> = {\n mainnet: mainnetPreset,\n testnet: testnetPreset,\n};\n\n/**\n * Gets the network configuration for a given preset\n * @param preset - Network preset ('mainnet' or 'testnet')\n * @returns Network preset configuration bundle\n */\nexport function getUtxoNetworkConfig(\n preset: UtxoNetworkPreset\n): UtxoNetworkPresetConfig {\n return NETWORK_PRESETS[preset];\n}\n\n/**\n * Backward compatibility: Export testnet preset as default (current behavior)\n * @deprecated Use getUtxoNetworkConfig('testnet') or getUtxoNetworkConfig('mainnet') instead\n */\nexport const utexoNetworkMap: UtxoNetworkMap = testnetPreset.networkMap;\n\n/**\n * Backward compatibility: Export testnet preset as default (current behavior)\n * @deprecated Use getUtxoNetworkConfig('testnet') or getUtxoNetworkConfig('mainnet') instead\n */\nexport const utexoNetworkIdMap: UtxoNetworkIdMap = testnetPreset.networkIdMap;\n\nexport type NetworkAsset =\n (typeof utexoNetworkIdMap)[keyof typeof utexoNetworkIdMap]['assets'][number];\n\nexport type UtxoNetworkId = keyof typeof utexoNetworkIdMap;\n\n/**\n * Resolves the destination network's asset object from sender network, destination network, and sender asset ID.\n * Uses tokenId as the cross-network identifier (same tokenId = same logical asset).\n *\n * @param networkIdMap - Optional. When provided (e.g. from wallet's preset), uses this config. Otherwise uses deprecated testnet preset.\n */\nexport function getDestinationAsset(\n senderNetwork: UtxoNetworkId,\n destinationNetwork: UtxoNetworkId,\n assetIdSender: string | null,\n networkIdMap?: UtxoNetworkIdMap\n): NetworkAsset | undefined {\n const config = networkIdMap ?? utexoNetworkIdMap;\n const destinationConfig = config[destinationNetwork];\n if (assetIdSender == null) return destinationConfig.assets[0];\n const senderConfig = config[senderNetwork];\n const senderAsset = senderConfig.assets.find(\n (a) => a.assetId === assetIdSender\n );\n if (!senderAsset) return undefined;\n return destinationConfig.assets.find(\n (a) => a.tokenId === senderAsset.tokenId\n );\n}\n","/**\n * Network-related constants\n */\n\nimport type { Network } from '../crypto/types';\n\n// Re-export UTEXO network mapping from utexo/utils (canonical location)\nexport {\n utexoNetworkMap,\n utexoNetworkIdMap,\n getDestinationAsset,\n getUtxoNetworkConfig,\n type NetworkAsset,\n type UtxoNetworkId,\n type UtxoNetworkPreset,\n type UtxoNetworkMap,\n type UtxoNetworkIdMap,\n type UtxoNetworkPresetConfig,\n} from '../utexo/utils/network';\n\n/**\n * Coin type constants\n */\nexport const COIN_RGB_MAINNET = 827166;\nexport const COIN_RGB_TESTNET = 827167;\nexport const COIN_BITCOIN_MAINNET = 0;\nexport const COIN_BITCOIN_TESTNET = 1;\n\n/**\n * Network string/number to Network type mapping\n */\nexport const NETWORK_MAP = {\n '0': 'mainnet' as const,\n '1': 'testnet' as const,\n '2': 'testnet' as const, // Alternative testnet number (also maps to testnet)\n '3': 'regtest' as const,\n 'signet': 'signet' as const,\n 'mainnet': 'mainnet' as const,\n 'testnet': 'testnet' as const,\n 'testnet4': 'testnet4' as const,\n 'regtest': 'regtest' as const,\n} as const;\n\n/**\n * BIP32 network version constants\n * Note: testnet4 uses the same versions as testnet\n */\nexport const BIP32_VERSIONS = {\n mainnet: {\n public: 0x0488b21e,\n private: 0x0488ade4,\n },\n testnet: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n testnet4: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n signet: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n regtest: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n} as const satisfies Record<Network, { public: number; private: number }>;\n","/**\n * Default configuration values\n */\n\n/**\n * Default network to use\n */\nexport const DEFAULT_NETWORK = 'regtest' as const;\n\n/**\n * Default API request timeout in milliseconds\n */\nexport const DEFAULT_API_TIMEOUT = 120000; // 30 seconds\n\n/**\n * Default maximum number of retries for failed requests\n */\nexport const DEFAULT_MAX_RETRIES = 3;\n\n/**\n * Default log level\n */\nexport const DEFAULT_LOG_LEVEL = 3; // ERROR level\n","import { ValidationError } from '../errors';\nimport type { Network } from '../crypto/types';\nimport { NETWORK_MAP } from '../constants';\n\nconst VALID_NETWORKS: Network[] = [\n 'mainnet',\n 'testnet',\n 'testnet4',\n 'signet',\n 'regtest',\n];\n\nexport function validateNetwork(\n network: string | number\n): asserts network is Network {\n const key = String(network);\n const normalized = NETWORK_MAP[key as keyof typeof NETWORK_MAP];\n\n if (!normalized || !VALID_NETWORKS.includes(normalized)) {\n throw new ValidationError(\n `Invalid network: ${network}. Must be one of: ${VALID_NETWORKS.join(', ')}`,\n 'network'\n );\n }\n}\n\nexport function normalizeNetwork(network: string | number): Network {\n validateNetwork(network);\n const key = String(network);\n return NETWORK_MAP[key as keyof typeof NETWORK_MAP] as Network;\n}\n\nexport function validateMnemonic(\n mnemonic: unknown,\n field: string = 'mnemonic'\n): asserts mnemonic is string {\n if (\n !mnemonic ||\n typeof mnemonic !== 'string' ||\n mnemonic.trim().length === 0\n ) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n\n const words = mnemonic.trim().split(/\\s+/);\n if (words.length !== 12 && words.length !== 24) {\n throw new ValidationError(\n `${field} must be 12 or 24 words, got ${words.length} words`,\n field\n );\n }\n}\n\nexport function validateBase64(\n base64: unknown,\n field: string = 'data'\n): asserts base64 is string {\n if (!base64 || typeof base64 !== 'string' || base64.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n\n const base64Regex = /^[A-Za-z0-9+/=]+$/;\n if (!base64Regex.test(base64.trim())) {\n throw new ValidationError(`Invalid base64 format for ${field}`, field);\n }\n\n try {\n Buffer.from(base64.trim(), 'base64');\n } catch (error) {\n console.error(error);\n throw new ValidationError(`Invalid base64 encoding for ${field}`, field);\n }\n}\n\nexport function validatePsbt(\n psbt: unknown,\n field: string = 'psbt'\n): asserts psbt is string {\n validateBase64(psbt, field);\n\n const psbtString = String(psbt).trim();\n if (psbtString.length < 50) {\n throw new ValidationError(\n `${field} appears to be too short to be a valid PSBT`,\n field\n );\n }\n}\n\nexport function validateHex(\n hex: unknown,\n field: string = 'data'\n): asserts hex is string {\n if (!hex || typeof hex !== 'string' || hex.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n\n const hexRegex = /^[0-9a-fA-F]+$/;\n if (!hexRegex.test(hex.trim())) {\n throw new ValidationError(`Invalid hex format for ${field}`, field);\n }\n}\n\nexport function validateRequired<T>(\n value: T | null | undefined,\n field: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new ValidationError(`${field} is required`, field);\n }\n}\n\nexport function validateString(\n value: unknown,\n field: string\n): asserts value is string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`${field} must be a non-empty string`, field);\n }\n}\n","/**\n * RGB Lib Client - Local client using rgb-lib directly instead of HTTP server\n *\n * This client provides the same interface as RGBClient but uses rgb-lib locally\n * without requiring an RGB Node server.\n */\nimport * as path from 'path';\n\nimport * as fs from 'fs';\nimport {\n DEFAULT_TRANSPORT_ENDPOINTS,\n DEFAULT_INDEXER_URLS,\n} from './network-config';\nimport { Unspent, DecodeRgbInvoiceResponse } from '../types/rgb-model';\nimport { ValidationError, WalletError } from '../errors';\nimport { normalizeNetwork } from '../utils/validation';\nimport type { Network } from '../crypto/types';\n// Use default import for CommonJS compatibility in ESM\nimport rgblib from '@utexo/rgb-lib';\nimport {\n Transfer,\n Transaction,\n ListAssets,\n AssetBalance,\n AssetIfa,\n AssetNIA,\n BtcBalance,\n CreateUtxosEndRequestModel,\n SendAssetBeginRequestModel,\n CreateUtxosBeginRequestModel,\n SendAssetEndRequestModel,\n SendResult,\n SendBtcBeginRequestModel,\n SendBtcEndRequestModel,\n GetFeeEstimationRequestModel,\n GetFeeEstimationResponse,\n InvoiceRequest,\n InvoiceReceiveData,\n IssueAssetIfaRequestModel,\n InflateAssetIfaRequestModel,\n InflateEndRequestModel,\n OperationResult,\n FailTransfersRequest,\n WalletBackupResponse,\n WalletRestoreResponse,\n RecipientMap,\n VssBackupConfig,\n VssBackupInfo,\n} from '../types/wallet-model';\n/**\n * Map network from client format to rgb-lib format\n */\nfunction mapNetworkToRgbLib(network: string): string {\n const networkMap: Record<string, string> = {\n mainnet: 'Mainnet',\n testnet: 'Testnet',\n testnet4: 'Testnet4',\n signet: 'Signet',\n regtest: 'Regtest',\n };\n const networkStr = String(network).toLowerCase();\n return networkMap[networkStr] || 'Regtest';\n}\n\nexport interface RgbLibGeneratedKeys {\n mnemonic: string;\n xpub: string;\n accountXpubVanilla: string;\n accountXpubColored: string;\n masterFingerprint: string;\n}\n\nexport const generateKeys = (\n network: string = 'regtest'\n): RgbLibGeneratedKeys => {\n return rgblib.generateKeys(mapNetworkToRgbLib(network));\n};\n\nexport const restoreWallet = (params: {\n backupFilePath: string;\n password: string;\n dataDir: string;\n}): WalletRestoreResponse => {\n const { backupFilePath, password, dataDir } = params;\n\n if (!fs.existsSync(backupFilePath)) {\n throw new ValidationError('Backup file not found', 'backup');\n }\n\n if (!fs.existsSync(dataDir)) {\n throw new ValidationError(\n `Restore directory does not exist: ${dataDir}`,\n 'restoreDir'\n );\n }\n\n rgblib.restoreBackup(backupFilePath, password, dataDir);\n\n return {\n message: 'Wallet restored successfully',\n };\n};\n\n/**\n * Restore a wallet from a VSS backup into a target directory.\n * Returns a message indicating the restored wallet path.\n */\nexport const restoreFromVss = (params: {\n config: VssBackupConfig;\n targetDir: string;\n}): WalletRestoreResponse & { walletPath: string } => {\n const anyLib: any = rgblib as any;\n if (typeof anyLib.restoreFromVss !== 'function') {\n throw new WalletError(\n 'VSS restore is not available in the current rgb-lib build.'\n );\n }\n\n if (!params.targetDir) {\n throw new ValidationError('targetDir is required', 'targetDir');\n }\n\n const { config, targetDir } = params;\n // Native binding expects snake_case: server_url, store_id, signing_key\n const mappedConfig: any = {\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n };\n\n const walletPath: string = anyLib.restoreFromVss(mappedConfig, targetDir);\n return {\n message: 'Wallet restored from VSS successfully',\n walletPath,\n };\n};\n\n/**\n * RGB Lib Client class - Local implementation using rgb-lib\n */\nexport class RGBLibClient {\n private wallet: any;\n private online: any | null = null;\n private readonly xpubVan: string;\n private readonly xpubCol: string;\n private readonly masterFingerprint: string;\n private readonly network: Network;\n private readonly originalNetwork: string; // Preserve original input for rgb-lib mapping\n private readonly dataDir: string;\n private readonly transportEndpoint: string;\n private readonly indexerUrl: string;\n\n constructor(params: {\n xpubVan: string;\n xpubCol: string;\n masterFingerprint: string;\n dataDir: string;\n network: string;\n transportEndpoint?: string;\n indexerUrl?: string;\n }) {\n this.xpubVan = params.xpubVan;\n this.xpubCol = params.xpubCol;\n this.masterFingerprint = params.masterFingerprint;\n this.originalNetwork = params.network;\n this.network = normalizeNetwork(this.originalNetwork);\n\n this.dataDir = params.dataDir;\n this.transportEndpoint =\n params.transportEndpoint ||\n DEFAULT_TRANSPORT_ENDPOINTS[this.network] ||\n DEFAULT_TRANSPORT_ENDPOINTS.signet;\n\n if (params.indexerUrl) {\n this.indexerUrl = params.indexerUrl;\n } else {\n this.indexerUrl =\n DEFAULT_INDEXER_URLS[this.network] || DEFAULT_INDEXER_URLS.signet;\n }\n\n if (!fs.existsSync(this.dataDir)) {\n fs.mkdirSync(this.dataDir, { recursive: true });\n }\n\n const walletData = {\n dataDir: this.dataDir,\n bitcoinNetwork: mapNetworkToRgbLib(this.originalNetwork),\n databaseType: rgblib.DatabaseType.Sqlite,\n accountXpubVanilla: this.xpubVan,\n accountXpubColored: this.xpubCol,\n masterFingerprint: this.masterFingerprint,\n maxAllocationsPerUtxo: '1',\n vanillaKeychain: '0',\n supportedSchemas: [\n rgblib.AssetSchema.Cfa,\n rgblib.AssetSchema.Nia,\n rgblib.AssetSchema.Uda,\n ],\n };\n\n try {\n this.wallet = new rgblib.Wallet(new rgblib.WalletData(walletData));\n } catch (error) {\n console.log('error', error);\n throw new WalletError(\n 'Failed to initialize rgb-lib wallet',\n undefined,\n error as Error\n );\n }\n }\n\n /**\n * Ensure online connection is established\n */\n private ensureOnline(): void {\n if (this.online) {\n return;\n }\n\n try {\n this.online = this.wallet.goOnline(false, this.indexerUrl);\n } catch (error) {\n throw new WalletError(\n 'Failed to establish online connection',\n undefined,\n error as Error\n );\n }\n }\n\n /**\n * Get online object, creating it if needed\n */\n getOnline(): any {\n this.ensureOnline();\n return this.online;\n }\n\n registerWallet(): { address: string; btcBalance: BtcBalance } {\n const online = this.getOnline();\n const address = this.wallet.getAddress();\n const btcBalance = this.wallet.getBtcBalance(online, false);\n return {\n address,\n btcBalance,\n };\n }\n\n getBtcBalance(): BtcBalance {\n const online = this.getOnline();\n return this.wallet.getBtcBalance(online, false);\n }\n\n getAddress(): string {\n return this.wallet.getAddress();\n }\n\n listUnspents(): Unspent[] {\n const online = this.getOnline();\n return this.wallet.listUnspents(online, false, false);\n }\n\n createUtxosBegin(params: CreateUtxosBeginRequestModel): string {\n const online = this.getOnline();\n const upTo = params.upTo ?? false;\n const num = params.num !== undefined ? String(params.num) : null;\n const size = params.size !== undefined ? String(params.size) : null;\n const feeRate = params.feeRate ? String(params.feeRate) : '1';\n const skipSync = false;\n\n return this.wallet.createUtxosBegin(\n online,\n upTo,\n num,\n size,\n feeRate,\n skipSync\n );\n }\n\n createUtxosEnd(params: CreateUtxosEndRequestModel): number {\n const online = this.getOnline();\n const signedPsbt = params.signedPsbt;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.createUtxosEnd(online, signedPsbt, skipSync);\n }\n\n sendBegin(params: SendAssetBeginRequestModel): string {\n const online = this.getOnline();\n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const donation = params.donation ?? false;\n\n let assetId: string | undefined = params.assetId;\n let amount: number | undefined = params.amount;\n let recipientId: string | undefined;\n let transportEndpoints: string[] = [];\n let witnessData: { amountSat: string; blinding?: number | null } | null =\n null;\n if (params.witnessData && params.witnessData.amountSat) {\n witnessData = {\n amountSat: String(params.witnessData.amountSat),\n blinding: params.witnessData.blinding\n ? Number(params.witnessData.blinding)\n : null,\n };\n }\n if (params.invoice) {\n const invoiceStr = params.invoice;\n const invoiceData = this.decodeRGBInvoice({ invoice: invoiceStr });\n recipientId = invoiceData.recipientId;\n transportEndpoints = invoiceData.transportEndpoints;\n }\n\n if (transportEndpoints.length === 0) {\n transportEndpoints = [this.transportEndpoint];\n }\n\n if (!assetId) {\n throw new ValidationError(\n 'asset_id is required for send operation',\n 'asset_id'\n );\n }\n\n if (!recipientId) {\n throw new ValidationError(\n 'Could not extract recipient_id from invoice',\n 'invoice'\n );\n }\n\n if (!amount) {\n throw new ValidationError(\n 'amount is required for send operation',\n 'amount'\n );\n }\n\n const assignment = { Fungible: amount };\n const recipientMap: Record<string, any[]> = {\n [assetId]: [\n {\n recipientId: recipientId,\n witnessData: witnessData,\n assignment: assignment,\n transportEndpoints: transportEndpoints,\n },\n ],\n };\n const psbt = this.wallet.sendBegin(\n online,\n recipientMap,\n donation,\n feeRate,\n minConfirmations\n );\n\n return psbt;\n }\n\n /**\n * Batch send: accepts an already-built recipientMap and calls sendBegin.\n */\n sendBeginBatch(params: {\n recipientMap: RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n }): string {\n const online = this.getOnline();\n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const donation = params.donation ?? true;\n const { recipientMap } = params;\n\n if (!recipientMap || typeof recipientMap !== 'object') {\n throw new ValidationError(\n 'recipientMap is required and must be a non-empty object',\n 'recipientMap'\n );\n }\n const assetIds = Object.keys(recipientMap);\n if (assetIds.length === 0) {\n throw new ValidationError(\n 'recipientMap must contain at least one asset id',\n 'recipientMap'\n );\n }\n for (const assetId of assetIds) {\n const recipients = recipientMap[assetId];\n if (!Array.isArray(recipients) || recipients.length === 0) {\n throw new ValidationError(\n `recipientMap[\"${assetId}\"] must be a non-empty array of recipients`,\n 'recipientMap'\n );\n }\n }\n\n const psbt = this.wallet.sendBegin(\n online,\n recipientMap,\n donation,\n feeRate,\n minConfirmations\n );\n\n return psbt;\n }\n\n sendEnd(params: SendAssetEndRequestModel): SendResult {\n const online = this.getOnline();\n const signedPsbt = params.signedPsbt;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.sendEnd(online, signedPsbt, skipSync);\n }\n\n sendBtcBegin(params: SendBtcBeginRequestModel): string {\n const online = this.getOnline();\n const address = params.address;\n const amount = String(params.amount);\n const feeRate = String(params.feeRate);\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.sendBtcBegin(online, address, amount, feeRate, skipSync);\n }\n\n sendBtcEnd(params: SendBtcEndRequestModel): string {\n const online = this.getOnline();\n const signedPsbt = params.signedPsbt;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.sendBtcEnd(online, signedPsbt, skipSync);\n }\n\n getFeeEstimation(\n params: GetFeeEstimationRequestModel\n ): GetFeeEstimationResponse {\n const online = this.getOnline();\n const blocks = String(params.blocks);\n try {\n const result = this.wallet.getFeeEstimation(online, blocks);\n if (typeof result === 'string') {\n try {\n return JSON.parse(result);\n } catch {\n return result as unknown as GetFeeEstimationResponse;\n }\n }\n return result;\n } catch (_error) {\n console.warn(\n 'rgb-lib estimation fee are not available, using default fee rate 2'\n );\n return 2 as GetFeeEstimationResponse; // return default fee rate 4 when lib estimation fee error\n }\n }\n\n blindReceive(params: InvoiceRequest): InvoiceReceiveData {\n const assetId = params.assetId || null;\n const assignment = `{\"Fungible\":${params.amount}}`;\n const durationSeconds = String(params.durationSeconds ?? 2000);\n const transportEndpoints: string[] = [this.transportEndpoint];\n const minConfirmations = String(params.minConfirmations ?? 3);\n\n return this.wallet.blindReceive(\n assetId,\n assignment,\n durationSeconds,\n transportEndpoints,\n minConfirmations\n );\n }\n\n witnessReceive(params: InvoiceRequest): InvoiceReceiveData {\n const assetId = params.assetId || null;\n const assignment = `{\"Fungible\":${params.amount}}`;\n const durationSeconds = String(params.durationSeconds ?? 2000);\n const transportEndpoints: string[] = [this.transportEndpoint];\n const minConfirmations = String(params.minConfirmations ?? 3);\n\n return this.wallet.witnessReceive(\n assetId,\n assignment,\n durationSeconds,\n transportEndpoints,\n minConfirmations\n );\n }\n\n getAssetBalance(asset_id: string): AssetBalance {\n return this.wallet.getAssetBalance(asset_id);\n }\n\n issueAssetNia(params: {\n ticker: string;\n name: string;\n amounts: number[];\n precision: number;\n }): AssetNIA {\n const ticker = params.ticker;\n const name = params.name;\n const precision = String(params.precision);\n const amounts = params.amounts.map((a) => String(a));\n\n return this.wallet.issueAssetNIA(ticker, name, precision, amounts);\n }\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n issueAssetIfa(params: IssueAssetIfaRequestModel): AssetIfa {\n throw new ValidationError(\n 'issueAssetIfa is not fully supported in rgb-lib. Use RGB Node server for IFA assets.',\n 'asset'\n );\n }\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n inflateBegin(params: InflateAssetIfaRequestModel): string {\n throw new ValidationError(\n 'inflateBegin is not fully supported in rgb-lib. Use RGB Node server for inflation operations.',\n 'asset'\n );\n }\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n inflateEnd(params: InflateEndRequestModel): OperationResult {\n throw new ValidationError(\n 'inflateEnd is not fully supported in rgb-lib. Use RGB Node server for inflation operations.',\n 'asset'\n );\n }\n\n listAssets(): ListAssets {\n const filterAssetSchemas: string[] = [];\n return this.wallet.listAssets(filterAssetSchemas);\n }\n\n decodeRGBInvoice(params: { invoice: string }): DecodeRgbInvoiceResponse {\n const invoiceString = params.invoice;\n\n const invoice = new rgblib.Invoice(invoiceString);\n\n try {\n return invoice.invoiceData();\n } finally {\n invoice.drop();\n }\n }\n\n refreshWallet(): void {\n const online = this.getOnline();\n const assetId = null;\n const filter: string[] = [];\n const skipSync = false;\n\n const result = this.wallet.refresh(online, assetId, filter, skipSync);\n console.log('refresh state:', JSON.stringify(result, null, 2));\n }\n\n dropWallet(): void {\n if (this.online) {\n rgblib.dropOnline(this.online);\n this.online = null;\n }\n if (this.wallet) {\n this.wallet.drop();\n this.wallet = null;\n }\n }\n\n listTransactions(): Transaction[] {\n const online = this.getOnline();\n const skipSync = false;\n return this.wallet.listTransactions(online, skipSync);\n }\n\n listTransfers(asset_id?: string): Transfer[] {\n return this.wallet.listTransfers(asset_id ? asset_id : null);\n }\n\n failTransfers(params: FailTransfersRequest): boolean {\n const online = this.getOnline();\n const batchTransferIdx =\n params.batchTransferIdx !== undefined ? params.batchTransferIdx : null;\n const noAssetOnly = params.noAssetOnly ?? false;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.failTransfers(\n online,\n batchTransferIdx,\n noAssetOnly,\n skipSync\n );\n }\n\n deleteTransfers(params: {\n batchTransferIdx?: number;\n noAssetOnly?: boolean;\n }): boolean {\n const batchTransferIdx =\n params.batchTransferIdx !== undefined ? params.batchTransferIdx : null;\n const noAssetOnly = params.noAssetOnly ?? false;\n\n return this.wallet.deleteTransfers(batchTransferIdx, noAssetOnly);\n }\n\n syncWallet(): void {\n const online = this.getOnline();\n this.wallet.sync(online);\n }\n\n createBackup(params: {\n backupPath: string;\n password: string;\n }): WalletBackupResponse {\n if (!params.backupPath) {\n throw new ValidationError('backupPath is required', 'backupPath');\n }\n if (!params.password) {\n throw new ValidationError('password is required', 'password');\n }\n\n if (!fs.existsSync(params.backupPath)) {\n throw new ValidationError(\n `Backup directory does not exist: ${params.backupPath}`,\n 'backupPath'\n );\n }\n\n const fullBackupPath = path.join(\n params.backupPath,\n `${this.masterFingerprint}.backup`\n );\n this.wallet.backup(fullBackupPath, params.password);\n\n return {\n message: 'Backup created successfully',\n backupPath: fullBackupPath,\n };\n }\n\n /**\n * Ensure VSS backup support is available in the underlying rgb-lib bindings.\n * Returns the wallet instance and rgb-lib namespace as `any` for internal use.\n */\n private getVssBindingsOrThrow(methodName: 'vssBackup' | 'vssBackupInfo') {\n const walletAny: any = this.wallet;\n const anyLib: any = rgblib as any;\n if (\n !walletAny ||\n typeof anyLib.VssBackupClient !== 'function' ||\n typeof walletAny[methodName] !== 'function'\n ) {\n throw new WalletError(\n 'VSS backup is not available in the current rgb-lib build.'\n );\n }\n return { walletAny, anyLib };\n }\n\n /**\n * Configure VSS cloud backup for this wallet.\n */\n configureVssBackup(config: VssBackupConfig): void {\n const walletAny: any = this.wallet;\n if (!walletAny || typeof walletAny.configureVssBackup !== 'function') {\n throw new WalletError(\n 'VSS backup is not available in the current rgb-lib build.'\n );\n }\n\n // Native binding expects snake_case: server_url, store_id, signing_key\n const mappedConfig: any = {\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n };\n if (config.encryptionEnabled !== undefined) {\n mappedConfig.encryptionEnabled = config.encryptionEnabled;\n }\n if (config.autoBackup !== undefined) {\n mappedConfig.autoBackup = config.autoBackup;\n }\n if (config.backupMode !== undefined) {\n mappedConfig.backupMode = config.backupMode;\n }\n\n walletAny.configureVssBackup(mappedConfig);\n }\n\n /**\n * Disable automatic VSS backup for this wallet.\n */\n disableVssAutoBackup(): void {\n const walletAny: any = this.wallet;\n if (!walletAny || typeof walletAny.disableVssAutoBackup !== 'function') {\n throw new WalletError(\n 'VSS backup is not available in the current rgb-lib build.'\n );\n }\n walletAny.disableVssAutoBackup();\n }\n\n /**\n * Trigger a VSS backup immediately using a one-off client created from config.\n * Returns the server version of the stored backup.\n */\n vssBackup(config: VssBackupConfig): number {\n const { walletAny, anyLib } = this.getVssBindingsOrThrow('vssBackup');\n\n const client = new anyLib.VssBackupClient({\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n });\n\n try {\n const version: number = walletAny.vssBackup(client);\n return version;\n } finally {\n if (typeof (client as any).drop === 'function') {\n (client as any).drop();\n }\n }\n }\n\n /**\n * Get VSS backup status information for this wallet using a one-off client.\n */\n vssBackupInfo(config: VssBackupConfig): VssBackupInfo {\n const { walletAny, anyLib } = this.getVssBindingsOrThrow('vssBackupInfo');\n\n const client = new anyLib.VssBackupClient({\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n });\n\n try {\n const info: any = walletAny.vssBackupInfo(client);\n return {\n backupExists: Boolean(info.backupExists ?? info.backup_exists),\n serverVersion: info.serverVersion ?? info.server_version ?? null,\n backupRequired: Boolean(info.backupRequired ?? info.backup_required),\n };\n } finally {\n if (typeof (client as any).drop === 'function') {\n (client as any).drop();\n }\n }\n }\n /**\n * Cleanup resources\n */\n dispose(): void {\n this.dropWallet();\n }\n}\n","export function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\nexport function isBare(): boolean {\n return typeof globalThis !== 'undefined' && (globalThis as any).Bare;\n}\n\nexport function isBrowser(): boolean {\n return (\n typeof window !== 'undefined' && typeof window.document !== 'undefined'\n );\n}\n\nexport type Environment = 'node' | 'browser' | 'unknown';\n\nexport function getEnvironment(): Environment {\n if (isNode()) return 'node';\n if (isBrowser()) return 'browser';\n return 'unknown';\n}\n","/**\n * Convert various data formats to ArrayBuffer for Web Crypto API\n */\nexport function convertToArrayBuffer(data: any): ArrayBuffer {\n if (!data) {\n throw new Error('convertToArrayBuffer: data is undefined or null');\n }\n\n if (data instanceof Uint8Array) {\n return data.buffer as ArrayBuffer;\n }\n\n if (\n data &&\n typeof data === 'object' &&\n 'byteLength' in data &&\n Object.prototype.toString.call(data) === '[object ArrayBuffer]'\n ) {\n return data as ArrayBuffer;\n }\n\n if (data && typeof data === 'object') {\n if ('buffer' in data && (data as any).buffer) {\n const buffer = (data as any).buffer;\n if (buffer instanceof ArrayBuffer) {\n return buffer;\n }\n const uint8 = new Uint8Array(data as any);\n return uint8.buffer;\n }\n\n try {\n const uint8 = new Uint8Array(data as any);\n return uint8.buffer;\n } catch (error) {\n throw new Error(\n `convertToArrayBuffer: Failed to convert data to ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n try {\n const uint8 = new Uint8Array(data as any);\n return uint8.buffer;\n } catch (error) {\n throw new Error(\n `convertToArrayBuffer: Failed to convert data to ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n}\n","import { isBare, isNode } from './environment';\nimport { convertToArrayBuffer } from './crypto-helpers';\nimport * as noble from '@noble/hashes/legacy.js';\n\nexport async function sha256(data: Uint8Array | Buffer): Promise<Uint8Array> {\n if (isNode() || isBare()) {\n // String concatenation prevents bundlers from analyzing the import\n const nodeCrypto = 'node:' + 'crypto';\n const { createHash } = await import(nodeCrypto);\n return createHash('sha256')\n .update(data as any)\n .digest();\n } else {\n if (!data) {\n throw new Error('sha256: data is undefined or null');\n }\n const arrayBuffer = convertToArrayBuffer(data);\n return new Uint8Array(await crypto.subtle.digest('SHA-256', arrayBuffer));\n }\n}\n\n/**\n * RIPEMD160 hash - uses polyfill in browser (Web Crypto API doesn't support it)\n */\nexport async function ripemd160(data: Uint8Array): Promise<Uint8Array> {\n if (isNode()) {\n const nodeCrypto = 'node:' + 'crypto';\n const { createHash } = await import(nodeCrypto);\n return createHash('ripemd160').update(data).digest();\n } else if (isBare()) {\n return new Uint8Array(await noble.ripemd160(data));\n } else {\n // @ts-ignore - ripemd160 doesn't have type definitions\n const ripemd160Module = await import('ripemd160');\n const RIPEMD160 = ripemd160Module.default || ripemd160Module;\n const BufferPolyfill =\n (globalThis as any).Buffer || (await import('buffer')).Buffer;\n const hasher = new (RIPEMD160 as any)();\n hasher.update(BufferPolyfill.from(data));\n return new Uint8Array(hasher.digest());\n }\n}\n\nlet nodeCrypto: typeof import('node:crypto') | null = null;\n\nasync function getNodeCrypto() {\n if (!isNode()) {\n throw new Error('Node.js crypto is only available in Node.js environment');\n }\n if (!nodeCrypto) {\n const nodeCryptoPath = 'node:' + 'crypto';\n nodeCrypto = await import(nodeCryptoPath);\n }\n return nodeCrypto;\n}\n\nexport async function sha256Sync(\n data: Uint8Array | Buffer\n): Promise<Uint8Array> {\n if (!isNode()) {\n return sha256(data);\n }\n if (!data) {\n throw new Error('sha256Sync: data is undefined');\n }\n const crypto = await getNodeCrypto();\n if (!crypto) {\n throw new Error('Node.js crypto is not available');\n }\n return crypto\n .createHash('sha256')\n .update(data as any)\n .digest();\n}\n\nexport const ripemd160Sync: (\n data: Uint8Array | Buffer\n) => Promise<Uint8Array> = async (\n data: Uint8Array | Buffer\n): Promise<Uint8Array> => {\n if (!isNode()) {\n return ripemd160(data);\n }\n if (!data) {\n throw new Error('ripemd160Sync: data is undefined');\n }\n const crypto = await getNodeCrypto();\n if (!crypto) {\n throw new Error('Node.js crypto is not available');\n }\n return crypto\n .createHash('ripemd160')\n .update(data as any)\n .digest();\n};\n","import { ripemd160Sync, sha256Sync } from './crypto-browser';\nimport type { BIP32Interface } from 'bip32';\nimport { CryptoError } from '../errors';\n\n/**\n * Calculate master fingerprint from BIP32 node\n * fingerprint = first 4 bytes of HASH160(pubkey)\n */\nexport async function calculateMasterFingerprint(\n node: BIP32Interface\n): Promise<string> {\n const pubkey = node.publicKey;\n if (!pubkey) {\n throw new CryptoError('Public key is undefined');\n }\n\n const pubkeyData =\n pubkey instanceof Uint8Array ? pubkey : new Uint8Array(pubkey);\n const sha = await sha256Sync(pubkeyData);\n const ripemd160Fn = ripemd160Sync as (\n data: Uint8Array | Buffer\n ) => Promise<Uint8Array>;\n const ripe = await ripemd160Fn(sha as Uint8Array);\n\n // Convert to Array first to avoid Buffer/Uint8Array serialization differences between Node.js and browser\n const fingerprintBytes = Array.from(ripe.subarray(0, 4));\n\n return fingerprintBytes\n .map((b) => {\n const hex = b.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n })\n .join('');\n}\n","import { isNode } from './environment';\nimport { CryptoError } from '../errors';\nimport type { Network, NetworkVersions, BufferLike } from '../crypto/types';\nimport { BIP32_VERSIONS } from '../constants/network';\n\nfunction getWifVersion(network: Network): number {\n return network === 'mainnet' ? 0x80 : 0xef; // testnet, testnet4, signet, and regtest all use 0xef\n}\n\nfunction getNetworkVersionsFromConstants(network: Network): NetworkVersions {\n const bip32Versions = BIP32_VERSIONS[network];\n return {\n bip32: bip32Versions,\n wif: getWifVersion(network),\n };\n}\n\n/**\n * Normalize seed to Buffer/Uint8Array for BIP32 operations\n * Handles Buffer, Uint8Array, ArrayBuffer, and buffer-like objects\n */\nexport function normalizeSeedBuffer(seed: BufferLike): Buffer | Uint8Array {\n if (!seed) {\n throw new CryptoError('Failed to generate seed - seed is undefined');\n }\n\n let seedBuffer: Buffer | Uint8Array;\n\n if (seed instanceof Uint8Array) {\n seedBuffer = seed;\n } else if (seed instanceof ArrayBuffer) {\n seedBuffer = new Uint8Array(seed);\n } else if (seed && typeof seed === 'object') {\n if ('buffer' in seed && seed.buffer) {\n const bufferValue = seed.buffer;\n\n if (bufferValue instanceof ArrayBuffer) {\n if (isNode() && seed instanceof Buffer) {\n seedBuffer = seed as Buffer;\n } else {\n const byteOffset = seed.byteOffset || 0;\n const byteLength =\n seed.byteLength ||\n (seed as { length?: number }).length ||\n bufferValue.byteLength;\n seedBuffer = new Uint8Array(bufferValue, byteOffset, byteLength);\n }\n } else {\n try {\n seedBuffer = new Uint8Array(seed as ArrayLike<number>);\n } catch (error) {\n throw new CryptoError(\n `Failed to convert seed to Uint8Array (buffer property invalid): ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n } else {\n try {\n seedBuffer = new Uint8Array(seed as ArrayLike<number>);\n } catch (error) {\n throw new CryptoError(\n `Failed to convert seed to Uint8Array: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n } else {\n throw new CryptoError(`Invalid seed type: ${typeof seed}`);\n }\n\n return seedBuffer;\n}\n\nexport function toNetworkName(bitcoinNetwork: string | number): Network {\n const n = String(bitcoinNetwork).toLowerCase();\n if (n.includes('main')) return 'mainnet';\n if (n.includes('reg')) return 'regtest';\n if (n.includes('sig')) return 'signet';\n if (n.includes('testnet4')) return 'testnet4';\n return 'testnet';\n}\n\nexport function getNetworkVersions(\n bitcoinNetwork: string | number\n): NetworkVersions {\n const net = toNetworkName(bitcoinNetwork);\n return getNetworkVersionsFromConstants(net);\n}\n","import { isNode } from '../utils/environment';\nimport type {\n BIP39Module,\n ECCModule,\n BIP32Factory,\n BitcoinJsPayments,\n BitcoinJsNetworks,\n BIP341Module,\n BDKModule,\n BDKInit,\n} from './types';\n\ntype BaseDependencies = {\n bip39: BIP39Module;\n ecc: ECCModule;\n factory: BIP32Factory;\n};\n\nexport type SignerDependencies = BaseDependencies & {\n Psbt: typeof import('bitcoinjs-lib').Psbt;\n payments: BitcoinJsPayments;\n networks: BitcoinJsNetworks;\n toXOnly: (pubkey: Buffer) => Buffer;\n bdk: BDKModule;\n init: BDKInit;\n};\n\nlet baseDeps: BaseDependencies | null = null;\nlet basePromise: Promise<BaseDependencies> | null = null;\n\nasync function loadBaseDependencies(): Promise<BaseDependencies> {\n if (isNode()) {\n const nodeModule = 'node:' + 'module';\n const { createRequire } = await import(nodeModule);\n // @ts-ignore - import.meta.url not available in CJS build context\n const requireFromModule = createRequire(import.meta.url);\n\n const bip39 = requireFromModule('bip39') as unknown as BIP39Module;\n const eccModule = requireFromModule(\n '@bitcoinerlab/secp256k1'\n ) as unknown as { default?: unknown };\n const ecc =\n eccModule && typeof eccModule === 'object' && 'default' in eccModule\n ? (eccModule.default as ECCModule)\n : (eccModule as unknown as ECCModule);\n const bip32 = requireFromModule('bip32') as unknown as {\n BIP32Factory: BIP32Factory;\n };\n\n return {\n bip39,\n ecc,\n factory: bip32.BIP32Factory,\n };\n }\n\n const bip39Module = await import('bip39');\n const bip39 =\n (bip39Module.default as BIP39Module) ||\n (bip39Module as unknown as BIP39Module);\n\n const eccModule = await import('@bitcoinerlab/secp256k1');\n const ecc =\n (eccModule.default as ECCModule) || (eccModule as unknown as ECCModule);\n\n const bip32 = (await import('bip32')) as unknown as {\n BIP32Factory: BIP32Factory;\n };\n\n return {\n bip39,\n ecc,\n factory: bip32.BIP32Factory,\n };\n}\n\nexport async function ensureBaseDependencies(): Promise<BaseDependencies> {\n if (baseDeps) {\n return baseDeps;\n }\n if (!basePromise) {\n basePromise = loadBaseDependencies()\n .then((deps) => {\n baseDeps = deps;\n basePromise = null;\n return deps;\n })\n .catch((error) => {\n basePromise = null;\n throw error;\n });\n }\n return basePromise;\n}\n\nlet signerDeps: SignerDependencies | null = null;\nlet signerPromise: Promise<SignerDependencies> | null = null;\n\nasync function loadSignerDependencies(): Promise<SignerDependencies> {\n const base = await ensureBaseDependencies();\n\n if (isNode()) {\n const bdkNode = await import('@bitcoindevkit/bdk-wallet-node');\n const init =\n ((bdkNode as { default?: unknown }).default as BDKInit) ||\n ((bdkNode as { init?: unknown }).init as BDKInit) ||\n (bdkNode as unknown as BDKInit);\n const bdk = bdkNode as unknown as BDKModule;\n\n const nodeModule = 'node:' + 'module';\n const { createRequire } = await import(nodeModule);\n // @ts-ignore - import.meta.url not available in CJS build context\n const requireFromModule = createRequire(import.meta.url);\n\n const bitcoinjs = requireFromModule('bitcoinjs-lib') as unknown as {\n Psbt: typeof import('bitcoinjs-lib').Psbt;\n payments: BitcoinJsPayments;\n networks: BitcoinJsNetworks;\n };\n const Psbt = bitcoinjs.Psbt;\n const payments = bitcoinjs.payments;\n const networks = bitcoinjs.networks;\n\n const bip341 = requireFromModule(\n 'bitcoinjs-lib/src/payments/bip341.js'\n ) as unknown as BIP341Module;\n const toXOnly =\n bip341.toXOnly || ((pubkey: Buffer) => Buffer.from(pubkey.slice(1)));\n\n return {\n ...base,\n Psbt,\n payments,\n networks,\n toXOnly,\n bdk,\n init,\n };\n }\n\n const bdkWeb = await import('@bitcoindevkit/bdk-wallet-web');\n const init =\n ((bdkWeb as { default?: unknown }).default as BDKInit) ||\n ((bdkWeb as { init?: unknown }).init as BDKInit) ||\n (bdkWeb as unknown as BDKInit);\n const bdk = bdkWeb as unknown as BDKModule;\n\n const bitcoinModule = (await import('bitcoinjs-lib')) as unknown as {\n Psbt: typeof import('bitcoinjs-lib').Psbt;\n payments: BitcoinJsPayments;\n networks: BitcoinJsNetworks;\n };\n const Psbt = bitcoinModule.Psbt;\n const payments = bitcoinModule.payments;\n const networks = bitcoinModule.networks;\n\n const bip341 =\n (await import('bitcoinjs-lib/src/payments/bip341.js')) as unknown as BIP341Module;\n const toXOnly =\n bip341.toXOnly || ((pubkey: Buffer) => Buffer.from(pubkey.slice(1)));\n\n return {\n ...base,\n Psbt,\n payments,\n networks,\n toXOnly,\n bdk,\n init,\n };\n}\n\nexport async function ensureSignerDependencies(): Promise<SignerDependencies> {\n if (signerDeps) {\n return signerDeps;\n }\n if (!signerPromise) {\n signerPromise = loadSignerDependencies()\n .then((deps) => {\n signerDeps = deps;\n signerPromise = null;\n return deps;\n })\n .catch((error) => {\n signerPromise = null;\n throw error;\n });\n }\n return signerPromise;\n}\n","// Copyright 2024 Tether Operations Limited\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/**\n * RGB Key Generation and Derivation\n *\n * This module provides RGB-specific cryptographic key operations including:\n * - RGB wallet key generation (vanilla and colored keychains)\n * - BIP86 Taproot key derivation for RGB protocol\n * - Account-level key derivation with RGB coin types\n * - Master fingerprint calculation for RGB wallets\n */\n\nimport type { BIP32Interface } from 'bip32';\nimport type { Network } from './types';\nimport { ValidationError, CryptoError } from '../errors';\nimport { validateMnemonic, normalizeNetwork } from '../utils/validation';\nimport {\n DERIVATION_PURPOSE,\n DERIVATION_ACCOUNT,\n COIN_RGB_MAINNET,\n COIN_RGB_TESTNET,\n} from '../constants';\nimport { calculateMasterFingerprint } from '../utils/fingerprint';\nimport {\n normalizeSeedBuffer,\n toNetworkName,\n getNetworkVersions,\n} from '../utils/bip32-helpers';\nimport { ensureBaseDependencies } from './dependencies';\n\nexport type SeedInput = string | Uint8Array;\n\nexport function normalizeSeedInput(\n seed: SeedInput,\n field: string = 'seed'\n): Uint8Array {\n if (typeof seed === 'string') {\n const trimmed = seed.trim();\n if (!trimmed) {\n throw new ValidationError(\n `${field} must be a non-empty hex string`,\n field\n );\n }\n const hex = trimmed.startsWith('0x') ? trimmed.slice(2) : trimmed;\n if (hex.length % 2 !== 0) {\n throw new ValidationError(\n `${field} hex string must have even length`,\n field\n );\n }\n if (hex.length !== 128) {\n throw new ValidationError(\n `${field} must be 64 bytes (128 hex characters)`,\n field\n );\n }\n if (!/^[0-9a-fA-F]+$/.test(hex)) {\n throw new ValidationError(`${field} must be a valid hex string`, field);\n }\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n const byte = hex.slice(i * 2, i * 2 + 2);\n bytes[i] = parseInt(byte, 16);\n }\n return bytes;\n }\n\n if (seed instanceof Uint8Array) {\n if (seed.length === 0) {\n throw new ValidationError(`${field} must not be empty`, field);\n }\n return new Uint8Array(seed);\n }\n\n throw new ValidationError(\n `${field} must be a 64-byte hex string or Uint8Array`,\n field\n );\n}\n\nexport interface GeneratedKeys {\n mnemonic: string;\n xpub: string;\n accountXpubVanilla: string;\n accountXpubColored: string;\n masterFingerprint: string;\n xpriv: string;\n}\n\nexport interface AccountXpubs {\n account_xpub_vanilla: string;\n account_xpub_colored: string;\n}\n\n/**\n * Get coin type for derivation path\n */\nfunction getCoinType(bitcoinNetwork: string | number, rgb: boolean): number {\n const net = toNetworkName(bitcoinNetwork);\n if (rgb) return net === 'mainnet' ? COIN_RGB_MAINNET : COIN_RGB_TESTNET;\n return net === 'mainnet' ? 0 : 1;\n}\n\n/**\n * Generate account derivation path: m / 86' / coinType' / 0'\n */\nexport function accountDerivationPath(\n bitcoinNetwork: string | number,\n rgb: boolean\n): string {\n const coinType = getCoinType(bitcoinNetwork, rgb);\n return `m/${DERIVATION_PURPOSE}'/${coinType}'/${DERIVATION_ACCOUNT}'`;\n}\n\n/**\n * Calculate master fingerprint from BIP32 node\n * Alias for shared fingerprint calculation utility\n */\nasync function masterFingerprintFromNode(\n node: BIP32Interface\n): Promise<string> {\n return calculateMasterFingerprint(node);\n}\n\n/**\n * Convert mnemonic to root BIP32 node\n */\nasync function mnemonicToRoot(\n mnemonic: string,\n bitcoinNetwork: string | number\n): Promise<BIP32Interface> {\n const { bip39, ecc, factory } = await ensureBaseDependencies();\n\n if (!bip39 || typeof bip39.mnemonicToSeedSync !== 'function') {\n throw new CryptoError('bip39 module not loaded correctly');\n }\n\n const seedBuffer = normalizeSeedBuffer(bip39.mnemonicToSeedSync(mnemonic));\n const versions = getNetworkVersions(bitcoinNetwork);\n const bip32 = factory(ecc);\n\n try {\n return bip32.fromSeed(seedBuffer, versions);\n } catch (error) {\n throw new CryptoError(\n `Failed to create BIP32 root node from seed: ${error instanceof Error ? error.message : String(error)}`,\n error as Error\n );\n }\n}\n\n/**\n * Get account extended public key from mnemonic\n */\nasync function getAccountXpub(\n mnemonic: string,\n bitcoinNetwork: string | number,\n rgb: boolean\n): Promise<string> {\n const root = await mnemonicToRoot(mnemonic, bitcoinNetwork);\n const path = accountDerivationPath(bitcoinNetwork, rgb);\n const acct = root.derivePath(path);\n return acct.neutered().toBase58();\n}\n\n/**\n * Get master extended private key (xpriv) from mnemonic\n */\nasync function getMasterXpriv(\n mnemonic: string,\n bitcoinNetwork: string | number\n): Promise<string> {\n const root = await mnemonicToRoot(mnemonic, bitcoinNetwork);\n return root.toBase58();\n}\n\nfunction deriveAccountXpubsFromRoot(root: BIP32Interface, network: Network) {\n const vanillaPath = accountDerivationPath(network, false);\n const coloredPath = accountDerivationPath(network, true);\n\n return {\n account_xpub_vanilla: root.derivePath(vanillaPath).neutered().toBase58(),\n account_xpub_colored: root.derivePath(coloredPath).neutered().toBase58(),\n };\n}\n\nasync function buildGeneratedKeysFromRoot(\n root: BIP32Interface,\n network: Network,\n mnemonic: string\n): Promise<GeneratedKeys> {\n const xpub = root.neutered().toBase58();\n const xpriv = root.toBase58();\n const master_fingerprint = await masterFingerprintFromNode(root);\n const { account_xpub_vanilla, account_xpub_colored } =\n deriveAccountXpubsFromRoot(root, network);\n\n return {\n mnemonic,\n xpub,\n accountXpubVanilla: account_xpub_vanilla,\n accountXpubColored: account_xpub_colored,\n masterFingerprint: master_fingerprint,\n xpriv,\n };\n}\n\n/**\n * Get extended public key (xpub) from extended private key (xpriv)\n * Internal helper function\n */\nasync function getXpubFromXprivInternal(\n xpriv: string,\n bitcoinNetwork?: string | number\n): Promise<string> {\n const { ecc, factory } = await ensureBaseDependencies();\n\n try {\n // BIP32Factory is a factory function that returns BIP32 interface\n // Use it to create a BIP32 instance from the xpriv\n const bip32 = factory(ecc);\n\n // fromBase58 requires network versions for validation\n // If network is not provided, try to infer from xpriv prefix (xprv/tprv for mainnet/testnet)\n let node;\n if (bitcoinNetwork) {\n const versions = getNetworkVersions(bitcoinNetwork);\n node = bip32.fromBase58(xpriv, versions);\n } else {\n // Try to infer network from xpriv prefix\n // xprv = mainnet, tprv = testnet/regtest\n const inferredNetwork = xpriv.startsWith('xprv') ? 'mainnet' : 'testnet';\n const versions = getNetworkVersions(inferredNetwork);\n node = bip32.fromBase58(xpriv, versions);\n }\n\n return node.neutered().toBase58();\n } catch (error) {\n throw new CryptoError('Failed to derive xpub from xpriv', error as Error);\n }\n}\n\n/**\n * Build complete keys output object from mnemonic\n */\nasync function buildKeysOutput(\n mnemonic: string,\n bitcoinNetwork: string | number\n): Promise<GeneratedKeys> {\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n const root = await mnemonicToRoot(mnemonic, normalizedNetwork);\n return buildGeneratedKeysFromRoot(root, normalizedNetwork, mnemonic);\n}\n\nasync function buildKeysOutputFromSeed(\n seed: Uint8Array | Buffer,\n bitcoinNetwork: string | number\n): Promise<GeneratedKeys> {\n const { ecc, factory } = await ensureBaseDependencies();\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n const seedBuffer = normalizeSeedBuffer(seed);\n const versions = getNetworkVersions(bitcoinNetwork);\n const bip32 = factory(ecc);\n\n let root: BIP32Interface;\n try {\n root = bip32.fromSeed(seedBuffer, versions);\n } catch (error) {\n throw new CryptoError(\n 'Failed to create BIP32 root node from seed',\n error as Error\n );\n }\n\n return buildGeneratedKeysFromRoot(root, normalizedNetwork, '');\n}\n\n/**\n * Build complete keys output object from xpriv\n */\nasync function buildKeysOutputFromXpriv(\n xpriv: string,\n bitcoinNetwork: string | number\n): Promise<GeneratedKeys> {\n const { ecc, factory } = await ensureBaseDependencies();\n try {\n // BIP32Factory is a factory function that returns BIP32 interface\n const bip32 = factory(ecc);\n\n // Get network versions for validation\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n const versions = getNetworkVersions(bitcoinNetwork);\n const root = bip32.fromBase58(xpriv, versions);\n\n return buildGeneratedKeysFromRoot(root, normalizedNetwork, '');\n } catch (error) {\n throw new CryptoError('Failed to derive keys from xpriv', error as Error);\n }\n}\n\n/**\n * Generate new wallet keys with a random mnemonic\n * Mirrors rgb_lib::generate_keys (creates new 12-word mnemonic)\n *\n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @returns Promise resolving to generated keys including mnemonic, xpubs, and master fingerprint\n * @throws {CryptoError} If key generation fails\n *\n * @example\n * ```typescript\n * const keys = await generateKeys('testnet');\n * console.log('Mnemonic:', keys.mnemonic);\n * console.log('Master Fingerprint:', keys.master_fingerprint);\n * ```\n */\nexport async function generateKeys(\n bitcoinNetwork: string | number = 'regtest'\n): Promise<GeneratedKeys> {\n try {\n const { bip39 } = await ensureBaseDependencies();\n if (!bip39 || typeof (bip39 as any).generateMnemonic !== 'function') {\n throw new Error(\n 'bip39 not loaded. Dependencies may not have initialized correctly.'\n );\n }\n const mnemonic = (bip39 as any).generateMnemonic(128);\n return await buildKeysOutput(mnemonic, bitcoinNetwork);\n } catch (error) {\n if (error instanceof Error && error.message.includes('bip39 not loaded')) {\n throw new CryptoError('Failed to load dependencies', error);\n }\n // Log the actual error for debugging\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new CryptoError(\n `Failed to generate mnemonic: ${errorMessage}`,\n error as Error\n );\n }\n}\n\n/**\n * Derive wallet keys from existing mnemonic\n * Takes a mnemonic phrase and derives all keys (xpubs, master fingerprint)\n *\n * This function is the counterpart to `generateKeys()` - instead of generating\n * a new mnemonic, it derives keys from an existing one.\n *\n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonic - BIP39 mnemonic phrase\n * @returns Promise resolving to derived keys including mnemonic, xpubs, and master fingerprint\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n *\n * @example\n * ```typescript\n * const keys = await deriveKeysFromMnemonic('testnet', 'abandon abandon abandon...');\n * console.log('Account XPub:', keys.account_xpub_vanilla);\n * ```\n */\nexport async function deriveKeysFromMnemonic(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<GeneratedKeys> {\n validateMnemonic(mnemonic, 'mnemonic');\n\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n const { bip39 } = await ensureBaseDependencies();\n const trimmedMnemonic = mnemonic.trim();\n if (!bip39 || !bip39.validateMnemonic(trimmedMnemonic)) {\n throw new ValidationError(\n 'Invalid mnemonic format - failed BIP39 validation',\n 'mnemonic'\n );\n }\n\n return await buildKeysOutput(trimmedMnemonic, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError(\n 'Failed to derive keys from mnemonic',\n error as Error\n );\n }\n}\n\n/**\n * Derive wallet keys directly from a BIP39 seed (hex string or Uint8Array)\n */\nexport async function deriveKeysFromSeed(\n bitcoinNetwork: string | number = 'regtest',\n seed: string | Uint8Array\n): Promise<GeneratedKeys> {\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n const normalizedSeed = normalizeSeedInput(seed, 'seed');\n return await buildKeysOutputFromSeed(normalizedSeed, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive keys from seed', error as Error);\n }\n}\n\n/**\n * Derive wallet keys from either a mnemonic phrase or seed\n * Automatically detects the input type and uses the appropriate derivation method\n *\n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonicOrSeed - Either a BIP39 mnemonic phrase (string) or seed (Uint8Array | string)\n * @returns Promise resolving to derived keys including mnemonic, xpubs, and master fingerprint\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n *\n * @example\n * ```typescript\n * // With mnemonic\n * const keys1 = await deriveKeysFromMnemonicOrSeed('testnet', 'abandon abandon abandon...');\n *\n * // With seed (Uint8Array)\n * const seed = new Uint8Array([...]);\n * const keys2 = await deriveKeysFromMnemonicOrSeed('testnet', seed);\n * ```\n */\nexport async function deriveKeysFromMnemonicOrSeed(\n bitcoinNetwork: string | number = 'regtest',\n mnemonicOrSeed: string | Uint8Array\n): Promise<GeneratedKeys> {\n if (typeof mnemonicOrSeed === 'string') {\n const trimmed = mnemonicOrSeed.trim();\n const words = trimmed.split(/\\s+/);\n const isLikelyMnemonic =\n trimmed.includes(' ') && words.length >= 12 && words.length <= 24;\n\n if (isLikelyMnemonic) {\n try {\n return await deriveKeysFromMnemonic(bitcoinNetwork, trimmed);\n } catch (error) {\n if (error instanceof ValidationError) {\n return await deriveKeysFromSeed(bitcoinNetwork, trimmed);\n }\n throw error;\n }\n } else {\n return await deriveKeysFromSeed(bitcoinNetwork, trimmed);\n }\n } else {\n return await deriveKeysFromSeed(bitcoinNetwork, mnemonicOrSeed);\n }\n}\n\n/**\n * Restore wallet keys from existing mnemonic (backward compatibility alias)\n * @deprecated Use `deriveKeysFromMnemonic()` instead. This alias will be removed in a future version.\n * @see deriveKeysFromMnemonic\n */\nexport async function restoreKeys(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<GeneratedKeys> {\n return deriveKeysFromMnemonic(bitcoinNetwork, mnemonic);\n}\n\n/**\n * Get account xpubs from mnemonic (convenience function)\n *\n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonic - BIP39 mnemonic phrase\n * @returns Promise resolving to account xpubs for vanilla and colored keychains\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n *\n * @example\n * ```typescript\n * const xpubs = await accountXpubsFromMnemonic('testnet', 'abandon abandon abandon...');\n * console.log('Vanilla XPub:', xpubs.account_xpub_vanilla);\n * console.log('Colored XPub:', xpubs.account_xpub_colored);\n * ```\n */\n/**\n * Get master extended private key (xpriv) from mnemonic\n *\n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)\n * @returns Promise resolving to master xpriv (extended private key)\n * @throws {ValidationError} If mnemonic is invalid\n * @throws {CryptoError} If key derivation fails\n *\n * @example\n * ```typescript\n * const xpriv = await getXprivFromMnemonic('testnet', 'your mnemonic phrase here');\n * console.log('Master xpriv:', xpriv);\n * ```\n */\nexport async function getXprivFromMnemonic(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<string> {\n validateMnemonic(mnemonic, 'mnemonic');\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n return await getMasterXpriv(mnemonic, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError(\n 'Failed to derive xpriv from mnemonic',\n error as Error\n );\n }\n}\n\n/**\n * Get extended public key (xpub) from extended private key (xpriv)\n *\n * @param xpriv - Extended private key (base58 encoded)\n * @returns Promise resolving to xpub (extended public key)\n * @throws {CryptoError} If xpriv is invalid or derivation fails\n *\n * @example\n * ```typescript\n * const xpub = await getXpubFromXpriv('xprv...');\n * console.log('xpub:', xpub);\n * ```\n */\nexport async function getXpubFromXpriv(\n xpriv: string,\n bitcoinNetwork?: string | number\n): Promise<string> {\n if (!xpriv || typeof xpriv !== 'string') {\n throw new ValidationError('xpriv must be a non-empty string', 'xpriv');\n }\n\n try {\n return await getXpubFromXprivInternal(xpriv, bitcoinNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive xpub from xpriv', error as Error);\n }\n}\n\n/**\n * Derive wallet keys from extended private key (xpriv)\n * Similar to deriveKeysFromMnemonic but starts from xpriv instead of mnemonic\n *\n * @param bitcoinNetwork - Network string or number (default: 'regtest')\n * @param xpriv - Extended private key (base58 encoded)\n * @returns Promise resolving to generated keys (without mnemonic)\n * @throws {ValidationError} If xpriv is invalid\n * @throws {CryptoError} If key derivation fails\n *\n * @example\n * ```typescript\n * const keys = await deriveKeysFromXpriv('testnet', 'xprv...');\n * console.log('Master Fingerprint:', keys.master_fingerprint);\n * console.log('Account xpub vanilla:', keys.account_xpub_vanilla);\n * ```\n */\nexport async function deriveKeysFromXpriv(\n bitcoinNetwork: string | number = 'regtest',\n xpriv: string\n): Promise<GeneratedKeys> {\n if (!xpriv || typeof xpriv !== 'string') {\n throw new ValidationError('xpriv must be a non-empty string', 'xpriv');\n }\n\n const normalizedNetwork = normalizeNetwork(bitcoinNetwork);\n\n try {\n return await buildKeysOutputFromXpriv(xpriv, normalizedNetwork);\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError('Failed to derive keys from xpriv', error as Error);\n }\n}\n\nexport async function accountXpubsFromMnemonic(\n bitcoinNetwork: string | number = 'regtest',\n mnemonic: string\n): Promise<AccountXpubs> {\n validateMnemonic(mnemonic, 'mnemonic');\n\n try {\n const { bip39 } = await ensureBaseDependencies();\n if (!bip39 || !bip39.validateMnemonic(mnemonic)) {\n throw new ValidationError(\n 'Invalid mnemonic format - failed BIP39 validation',\n 'mnemonic'\n );\n }\n return {\n account_xpub_vanilla: await getAccountXpub(\n mnemonic,\n bitcoinNetwork,\n false\n ),\n account_xpub_colored: await getAccountXpub(\n mnemonic,\n bitcoinNetwork,\n true\n ),\n };\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw new CryptoError(\n 'Failed to derive account xpubs from mnemonic',\n error as Error\n );\n }\n}\n","// RGB PSBT Signer Library using bdk-wasm\n// Signs both create_utxo_begin and send_begin PSBTs from rgb-lib\n//\n// This module provides RGB-specific PSBT signing functionality for:\n// - create_utxo_begin PSBTs: Creating UTXOs for RGB wallet operations\n// - send_begin PSBTs: Signing RGB asset transfer transactions\n//\n// Usage:\n// import { signPsbt, signPsbtSync } from './signer';\n// const signedPsbt = signPsbt(mnemonic, psbtBase64, 'testnet');\n\nimport type { BIP32Interface } from 'bip32';\nimport type {\n Psbt as BitcoinJsPsbt,\n Network as BitcoinJsNetwork,\n} from 'bitcoinjs-lib';\nimport { ValidationError, CryptoError } from '../errors';\nimport {\n validateMnemonic,\n validatePsbt,\n normalizeNetwork,\n} from '../utils/validation';\nimport {\n DERIVATION_PURPOSE,\n DERIVATION_ACCOUNT,\n KEYCHAIN_RGB,\n KEYCHAIN_BTC,\n COIN_RGB_TESTNET,\n COIN_RGB_MAINNET,\n COIN_BITCOIN_MAINNET,\n COIN_BITCOIN_TESTNET,\n} from '../constants';\nimport type {\n Network,\n PsbtType,\n NetworkVersions,\n Descriptors,\n BDKWallet,\n BDKPsbt,\n BDKNetwork,\n BDKSignOptions,\n} from './types';\nimport { calculateMasterFingerprint } from '../utils/fingerprint';\nimport {\n getNetworkVersions as getBIP32NetworkVersions,\n normalizeSeedBuffer,\n} from '../utils/bip32-helpers';\nimport { accountDerivationPath, normalizeSeedInput } from './keys';\nimport { sha256 } from '../utils/crypto-browser';\nimport {\n ensureBaseDependencies,\n ensureSignerDependencies,\n type SignerDependencies,\n} from './dependencies';\n\n// Re-export types from types module\nexport type { Network, PsbtType, NetworkVersions, Descriptors } from './types';\n\nexport interface SignPsbtOptions {\n signOptions?: BDKSignOptions;\n preprocess?: boolean;\n}\n\ntype DerivationPath = string | number[];\n\n/**\n * Normalize derivation path string\n */\nfunction normalizePath(path: DerivationPath): DerivationPath {\n if (typeof path === 'string') {\n // Remove duplicate m/ prefixes\n if (path.startsWith('m/m/')) {\n return path.replace(/^m\\/m\\//, 'm/');\n }\n return path;\n } else if (Array.isArray(path)) {\n // Remove leading 0 if it represents duplicate m/ prefix\n if (path.length > 0 && path[0] === 0 && path.length > 1) {\n const second = path[1];\n if (typeof second === 'number' && second >= 0x80000000) {\n return path.slice(1);\n }\n }\n return path;\n }\n return path;\n}\n\n/**\n * Convert derivation path to string format\n */\nfunction pathToString(path: DerivationPath): string {\n if (typeof path === 'string') {\n return path;\n } else if (Array.isArray(path)) {\n return path\n .map((p) => {\n if (typeof p === 'number') {\n return p >= 0x80000000 ? `${p & 0x7fffffff}'` : `${p}`;\n }\n return String(p);\n })\n .join('/');\n }\n return '';\n}\n\n/**\n * Preprocessing for send_begin PSBTs: Update RGB PSBT metadata to BDK can match inputs.\n */\nfunction preprocessPsbtForBDK(\n psbtBase64: string,\n rootNode: BIP32Interface,\n fp: string,\n network: Network,\n deps: SignerDependencies\n): string {\n const { Psbt, networks, payments, toXOnly } = deps;\n if (!Psbt || !networks || !payments || !toXOnly) {\n throw new CryptoError('BitcoinJS modules not loaded');\n }\n const psbt = Psbt.fromBase64(psbtBase64.trim()) as BitcoinJsPsbt;\n const bjsNet: BitcoinJsNetwork =\n network === 'mainnet' ? networks.bitcoin : networks.testnet;\n\n for (let i = 0; i < psbt.inputCount; i++) {\n const input = psbt.data.inputs[i];\n\n if (input.tapBip32Derivation && input.tapBip32Derivation.length > 0) {\n input.tapBip32Derivation.forEach((deriv) => {\n const normalizedPath = normalizePath(deriv.path as DerivationPath);\n deriv.path = pathToString(normalizedPath);\n let pathStr = pathToString(normalizedPath);\n\n if (!pathStr.startsWith('m/')) {\n pathStr = 'm/' + pathStr;\n }\n\n try {\n const derivedNode = rootNode.derivePath(pathStr);\n const pubkey = derivedNode.publicKey;\n if (!pubkey) {\n return;\n }\n const pubkeyBuffer =\n pubkey instanceof Buffer ? pubkey : Buffer.from(pubkey);\n const xOnly = toXOnly(pubkeyBuffer);\n const p2tr = payments.p2tr({\n internalPubkey: xOnly,\n network: bjsNet,\n });\n const expectedScript = p2tr.output;\n\n if (!expectedScript) {\n return;\n }\n\n // Update witness_utxo.script if it doesn't match\n if (input.witnessUtxo && expectedScript) {\n const currentScript = input.witnessUtxo.script;\n if (!currentScript.equals(expectedScript)) {\n input.witnessUtxo.script = expectedScript;\n }\n }\n\n // Update tapInternalKey to match derivation\n if (xOnly) {\n if (!input.tapInternalKey || !input.tapInternalKey.equals(xOnly)) {\n input.tapInternalKey = xOnly;\n }\n }\n\n // Update master fingerprint\n const fingerprintBuf = Buffer.from(fp, 'hex');\n if (!deriv.masterFingerprint) {\n deriv.masterFingerprint = fingerprintBuf;\n } else {\n const currentFp = Buffer.from(deriv.masterFingerprint);\n if (!currentFp.equals(fingerprintBuf)) {\n deriv.masterFingerprint = fingerprintBuf;\n }\n }\n\n // Update pubkey in derivation\n if (!deriv.pubkey || !deriv.pubkey.equals(xOnly)) {\n deriv.pubkey = xOnly;\n }\n } catch (_e) {\n // Skip this derivation if it can't be derived from path\n }\n });\n }\n\n // Update legacy bip32Derivation if needed\n if (input.bip32Derivation && input.bip32Derivation.length > 0) {\n input.bip32Derivation.forEach((deriv) => {\n const normalizedPath = normalizePath(deriv.path as DerivationPath);\n deriv.path = pathToString(normalizedPath);\n });\n }\n }\n\n return psbt.toBase64();\n}\n\n/**\n * Detect PSBT type by examining derivation paths\n * @returns {'create_utxo'|'send'} PSBT type\n */\nfunction detectPsbtType(\n psbtBase64: string,\n deps: SignerDependencies\n): PsbtType {\n const { Psbt } = deps;\n if (!Psbt) {\n throw new CryptoError('BitcoinJS Psbt module not loaded');\n }\n try {\n const psbt = Psbt.fromBase64(psbtBase64.trim()) as BitcoinJsPsbt;\n for (let i = 0; i < psbt.inputCount; i++) {\n const input = psbt.data.inputs[i];\n if (input.tapBip32Derivation && input.tapBip32Derivation.length > 0) {\n for (const deriv of input.tapBip32Derivation) {\n const pathStr = pathToString(deriv.path as DerivationPath);\n // Check if path contains RGB coin type - indicates send_begin PSBT\n if (pathStr.includes(\"827167'\") || pathStr.includes(\"827166'\")) {\n return 'send';\n }\n }\n }\n }\n return 'create_utxo';\n } catch (_e) {\n return 'create_utxo'; // Default to simpler structure\n }\n}\n\n/**\n * Derive descriptors based on PSBT type\n */\nfunction deriveDescriptors(\n rootNode: BIP32Interface,\n fp: string,\n network: Network,\n psbtType: PsbtType\n): Descriptors {\n const isMainnet = network === 'mainnet';\n const coinTypeBtc = isMainnet ? COIN_BITCOIN_MAINNET : COIN_BITCOIN_TESTNET;\n const coinTypeRgb = isMainnet ? COIN_RGB_MAINNET : COIN_RGB_TESTNET;\n\n if (psbtType === 'create_utxo') {\n // For create_utxo_begin: Use account-level xprv structure\n const accountPath = `m/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}'`;\n const accountNode = rootNode.derivePath(accountPath);\n const accountXprv = accountNode.toBase58();\n const origin = `[${fp}/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}']`;\n return {\n external: `tr(${origin}${accountXprv}/0/*)`,\n internal: `tr(${origin}${accountXprv}/1/*)`,\n };\n } else {\n // For send_begin: Use RGB descriptor structure\n const rgbAccountPath = `m/${DERIVATION_PURPOSE}'/${coinTypeRgb}'/${DERIVATION_ACCOUNT}'`;\n const rgbAccountNode = rootNode.derivePath(rgbAccountPath);\n const rgbKeychainNode = rgbAccountNode.derive(KEYCHAIN_RGB);\n const rgbKeychainXprv = rgbKeychainNode.toBase58();\n const rgbOrigin = `[${fp}/${DERIVATION_PURPOSE}'/${coinTypeRgb}'/${DERIVATION_ACCOUNT}'/${KEYCHAIN_RGB}]`;\n\n const btcAccountPath = `m/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}'`;\n const btcAccountNode = rootNode.derivePath(btcAccountPath);\n const btcKeychainNode = btcAccountNode.derive(KEYCHAIN_BTC);\n const btcKeychainXprv = btcKeychainNode.toBase58();\n const btcOrigin = `[${fp}/${DERIVATION_PURPOSE}'/${coinTypeBtc}'/${DERIVATION_ACCOUNT}'/${KEYCHAIN_BTC}]`;\n\n return {\n external: `tr(${rgbOrigin}${rgbKeychainXprv}/*)`,\n internal: `tr(${btcOrigin}${btcKeychainXprv}/*)`,\n };\n }\n}\n\n/**\n * Get network versions for BIP32\n * Alias for shared network versions utility\n */\nfunction getNetworkVersions(network: Network): NetworkVersions {\n return getBIP32NetworkVersions(network);\n}\n\n/**\n * Calculate master fingerprint from root node\n * Alias for shared fingerprint calculation utility\n */\nasync function getMasterFingerprint(rootNode: BIP32Interface): Promise<string> {\n return calculateMasterFingerprint(rootNode);\n}\n\nasync function signPsbtFromSeedInternal(\n seed: Buffer | Uint8Array,\n psbtBase64: string,\n network: Network,\n options: SignPsbtOptions = {},\n deps: SignerDependencies\n): Promise<string> {\n validatePsbt(psbtBase64, 'psbtBase64');\n const { ecc, factory, bdk } = deps;\n const bip32 = factory(ecc);\n const seedBuffer = normalizeSeedBuffer(seed);\n const versions = getNetworkVersions(network);\n\n let rootNode: BIP32Interface;\n try {\n rootNode = bip32.fromSeed(seedBuffer, versions);\n } catch (error) {\n throw new CryptoError(\n 'Failed to derive root node from seed',\n error as Error\n );\n }\n\n const fp = await getMasterFingerprint(rootNode);\n const psbtType = detectPsbtType(psbtBase64, deps);\n const needsPreprocessing = psbtType === 'send';\n const { external, internal } = deriveDescriptors(\n rootNode,\n fp,\n network,\n psbtType\n );\n\n let wallet: BDKWallet;\n try {\n wallet = bdk.Wallet.create(network as BDKNetwork, external, internal);\n } catch (error) {\n throw new CryptoError('Failed to create BDK wallet', error as Error);\n }\n\n let processedPsbt = psbtBase64.trim();\n if (needsPreprocessing || options.preprocess) {\n try {\n processedPsbt = preprocessPsbtForBDK(\n psbtBase64,\n rootNode,\n fp,\n network,\n deps\n );\n } catch (error) {\n throw new CryptoError('Failed to preprocess PSBT', error as Error);\n }\n }\n\n let pstb: BDKPsbt;\n try {\n pstb = bdk.Psbt.from_string(processedPsbt);\n } catch (error) {\n throw new CryptoError('Failed to parse PSBT', error as Error);\n }\n\n const signOptions = options.signOptions || new bdk.SignOptions();\n try {\n wallet.sign(pstb, signOptions);\n } catch (error) {\n throw new CryptoError('Failed to sign PSBT', error as Error);\n }\n\n return pstb.toString().trim();\n}\n\n/**\n * Sign a PSBT using BDK\n *\n * Note: This function is async due to dependency loading and crypto operations.\n *\n * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)\n * @param psbtBase64 - Base64 encoded PSBT string\n * @param network - Bitcoin network ('mainnet' | 'testnet' | 'signet' | 'regtest')\n * @param options - Optional signing options\n * @param options.signOptions - BDK sign options (defaults used if not provided)\n * @param options.preprocess - Force preprocessing (auto-detected by default)\n * @returns Base64 encoded signed PSBT\n * @throws {ValidationError} If mnemonic or PSBT format is invalid\n * @throws {CryptoError} If signing fails\n *\n * @example\n * ```typescript\n * const signedPsbt = signPsbt(\n * 'abandon abandon abandon...',\n * 'cHNidP8BAIkBAAAAA...',\n * 'testnet'\n * );\n * ```\n */\nexport async function signPsbt(\n mnemonic: string,\n psbtBase64: string,\n network: Network = 'testnet',\n options: SignPsbtOptions = {}\n): Promise<string> {\n try {\n // Validate inputs\n validateMnemonic(mnemonic, 'mnemonic');\n const { bip39 } = await ensureBaseDependencies();\n if (!bip39 || typeof bip39.mnemonicToSeedSync !== 'function') {\n throw new CryptoError('bip39 module not loaded correctly');\n }\n\n let seed: Buffer;\n try {\n seed = bip39.mnemonicToSeedSync(mnemonic);\n } catch (_error) {\n throw new ValidationError('Invalid mnemonic format', 'mnemonic');\n }\n\n const normalizedNetwork = normalizeNetwork(network);\n const deps = await ensureSignerDependencies();\n return await signPsbtFromSeedInternal(\n seed,\n psbtBase64,\n normalizedNetwork,\n options,\n deps\n );\n } catch (error) {\n if (error instanceof ValidationError || error instanceof CryptoError) {\n throw error;\n }\n throw new CryptoError(\n 'Unexpected error during PSBT signing',\n error as Error\n );\n }\n}\n\n/**\n * Legacy sync-named wrapper (still async under the hood).\n */\nexport async function signPsbtSync(\n mnemonic: string,\n psbtBase64: string,\n network: Network = 'testnet',\n options: SignPsbtOptions = {}\n): Promise<string> {\n return signPsbt(mnemonic, psbtBase64, network, options);\n}\n\n/**\n * Sign a PSBT using a raw BIP39 seed (hex string or Uint8Array)\n */\nexport async function signPsbtFromSeed(\n seed: string | Uint8Array,\n psbtBase64: string,\n network: Network = 'testnet',\n options: SignPsbtOptions = {}\n): Promise<string> {\n const normalizedSeed = normalizeSeedInput(seed);\n const normalizedNetwork = normalizeNetwork(network);\n const deps = await ensureSignerDependencies();\n return signPsbtFromSeedInternal(\n normalizedSeed,\n psbtBase64,\n normalizedNetwork,\n options,\n deps\n );\n}\n\nfunction ensureMessageInput(message: string | Uint8Array): Uint8Array {\n if (typeof message === 'string') {\n if (!message.length) {\n throw new ValidationError('message must not be empty', 'message');\n }\n return Buffer.from(message, 'utf8');\n }\n if (message instanceof Uint8Array) {\n if (!message.length) {\n throw new ValidationError('message must not be empty', 'message');\n }\n return Buffer.from(message);\n }\n throw new ValidationError(\n 'message must be a string or Uint8Array',\n 'message'\n );\n}\n\nasync function deriveRootFromSeedInput(\n seed: string | Uint8Array,\n network: Network\n): Promise<BIP32Interface> {\n const { ecc, factory } = await ensureBaseDependencies();\n const normalizedSeed = normalizeSeedInput(seed, 'seed');\n const versions = getNetworkVersions(network);\n const bip32 = factory(ecc);\n try {\n return bip32.fromSeed(normalizedSeed, versions);\n } catch (error) {\n throw new CryptoError(\n 'Failed to create BIP32 root node from seed',\n error as Error\n );\n }\n}\n\nconst DEFAULT_RELATIVE_PATH = '0/0';\n\nexport interface SignMessageParams {\n message: string | Uint8Array;\n seed: string | Uint8Array;\n network?: Network;\n}\n\nexport interface SignMessageResult {\n signature: string;\n accountXpub: string;\n}\n\nexport interface VerifyMessageParams {\n message: string | Uint8Array;\n signature: string;\n accountXpub: string;\n network?: Network;\n}\n\nexport interface EstimateFeeResult {\n fee: number;\n vbytes: number;\n feeRate: number;\n}\nexport async function signMessage(params: SignMessageParams): Promise<string> {\n const { message, seed } = params;\n if (!seed) {\n throw new ValidationError('seed is required', 'seed');\n }\n const normalizedNetwork = normalizeNetwork(params.network ?? 'regtest');\n const relativePath = DEFAULT_RELATIVE_PATH;\n const accountPath = accountDerivationPath(normalizedNetwork, false);\n\n const messageBytes = ensureMessageInput(message);\n const { ecc } = await ensureBaseDependencies();\n const root = await deriveRootFromSeedInput(seed, normalizedNetwork);\n const accountNode = root.derivePath(accountPath);\n const child = accountNode.derivePath(relativePath);\n const privateKey = child.privateKey;\n\n if (!privateKey) {\n throw new CryptoError('Derived node does not contain a private key');\n }\n if (!ecc || typeof ecc.signSchnorr !== 'function') {\n throw new CryptoError('Schnorr signing not supported by ECC module');\n }\n\n const messageHash = await sha256(messageBytes);\n const signature = Buffer.from(\n ecc.signSchnorr(messageHash, privateKey)\n ).toString('base64');\n // const accountXpub = accountNode.neutered().toBase58();\n return signature;\n}\n\nexport async function verifyMessage(\n params: VerifyMessageParams\n): Promise<boolean> {\n const { message, signature, accountXpub } = params;\n const messageBytes = ensureMessageInput(message);\n const relativePath = DEFAULT_RELATIVE_PATH;\n // const signatureBytes = decodeSignatureBase64(signature);\n const signatureBytes = Buffer.from(signature, 'base64');\n\n const normalizedNetwork = normalizeNetwork(params.network ?? 'regtest');\n const versions = getNetworkVersions(normalizedNetwork);\n const { ecc, factory } = await ensureBaseDependencies();\n\n if (\n !ecc ||\n typeof ecc.verifySchnorr !== 'function' ||\n typeof ecc.xOnlyPointFromPoint !== 'function'\n ) {\n throw new CryptoError('Schnorr verification not supported by ECC module');\n }\n\n let accountNode: BIP32Interface;\n try {\n accountNode = factory(ecc).fromBase58(accountXpub, versions);\n } catch (_error) {\n throw new ValidationError('Invalid account xpub provided', 'accountXpub');\n }\n\n const child = accountNode.derivePath(relativePath);\n const pubkeyBuffer =\n child.publicKey instanceof Buffer\n ? child.publicKey\n : Buffer.from(child.publicKey);\n const xOnlyPubkey = ecc.xOnlyPointFromPoint(pubkeyBuffer);\n\n const messageHash = await sha256(messageBytes);\n\n try {\n return ecc.verifySchnorr(messageHash, xOnlyPubkey, signatureBytes);\n } catch {\n return false;\n }\n}\n\nexport async function estimatePsbt(\n psbtBase64: string\n): Promise<EstimateFeeResult> {\n if (!psbtBase64) {\n throw new ValidationError('psbt is required', 'psbt');\n }\n\n const { Psbt } = await ensureSignerDependencies();\n if (!Psbt) {\n throw new CryptoError('BitcoinJS Psbt module not loaded');\n }\n\n let psbt: BitcoinJsPsbt;\n try {\n psbt = Psbt.fromBase64(psbtBase64.trim()) as BitcoinJsPsbt;\n return {\n fee: psbt.getFee(),\n feeRate: psbt.getFeeRate(),\n vbytes: psbt.extractTransaction().virtualSize(),\n };\n } catch (error) {\n console.log('error', error);\n throw new ValidationError('Invalid PSBT provided', 'psbt');\n }\n}\n","/**\n * VSS (Versioned Storage Service) backup key derivation.\n *\n * Derives a 32-byte signing key from a BIP39 mnemonic for use with rgb-lib's\n * VssBackupClient (server_url, store_id, signing_key). rgb-lib does not define\n * mnemonic → signing_key; this SDK uses HMAC-SHA256 with the same domain string\n * as rgb-lib's HKDF so backup/restore stay deterministic per wallet.\n *\n * Derivation: HMAC-SHA256(key = \"rgb-lib-vss-backup-encryption-v1\", message = mnemonic),\n * output as 64-char hex (32 bytes).\n */\n\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { validateMnemonic } from '../utils/validation';\n\nconst VSS_SIGNING_KEY_DOMAIN = 'rgb-lib-vss-backup-encryption-v1';\n\n/**\n * Derive the VSS backup signing key from a BIP39 mnemonic.\n * The result is a 64-character hex string (32 bytes) suitable for\n * VssBackupConfig.signingKey. Must match rgb-lib's Rust derivation.\n *\n * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)\n * @returns 32-byte signing key as hex string (same mnemonic always yields same key for backup/restore)\n */\nexport function deriveVssSigningKeyFromMnemonic(mnemonic: string): string {\n validateMnemonic(mnemonic, 'mnemonic');\n const keyBytes = new TextEncoder().encode(VSS_SIGNING_KEY_DOMAIN);\n const messageBytes = new TextEncoder().encode(mnemonic.trim());\n const digest = hmac(sha256, keyBytes, messageBytes);\n return Array.from(digest)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","import { RGBLibClient, restoreWallet } from '../client/index';\nimport * as IWalletModel from '../types/wallet-model';\nimport {\n signPsbt,\n signPsbtFromSeed,\n signMessage as signSchnorrMessage,\n verifyMessage as verifySchnorrMessage,\n estimatePsbt,\n} from '../crypto';\nimport type { EstimateFeeResult, Network } from '../crypto';\nimport { generateKeys } from '../crypto';\nimport { normalizeNetwork } from '../utils/validation';\nimport { ValidationError, WalletError } from '../errors';\nimport path from 'path';\nimport type { IWalletManager } from './IWalletManager';\n/**\n * Restore wallet from backup\n * This should be called before creating a WalletManager instance\n * @param params - Restore parameters including backup file path, password, and restore directory\n * @returns Wallet restore response\n */\nexport const restoreFromBackup = (\n params: IWalletModel.RestoreWalletRequestModel\n): IWalletModel.WalletRestoreResponse => {\n const { backupFilePath, password, dataDir } = params;\n\n if (!backupFilePath) {\n throw new ValidationError('backup file is required', 'backup');\n }\n if (!password) {\n throw new ValidationError('password is required', 'password');\n }\n if (!dataDir) {\n throw new ValidationError('restore directory is required', 'restoreDir');\n }\n\n return restoreWallet({\n backupFilePath,\n password,\n dataDir,\n });\n};\n\n/**\n * Generate a new wallet with keys\n * @param network - Network string (default: 'regtest')\n * @returns Generated keys including mnemonic, xpubs, and master fingerprint\n */\nexport const createWallet = async (network: string = 'regtest') => {\n // return await generateKeys(network);\n return await generateKeys(network);\n};\n\nexport type WalletInitParams = {\n xpubVan: string;\n xpubCol: string;\n mnemonic?: string;\n seed?: Uint8Array;\n network?: string | number;\n xpub?: string;\n masterFingerprint: string;\n transportEndpoint?: string;\n indexerUrl?: string;\n dataDir?: string;\n};\n\n/**\n * Wallet Manager - High-level wallet interface combining RGB API client and cryptographic operations\n *\n * This class provides a unified interface for:\n * - RGB operations (via RGBLibClient - local rgb-lib)\n * - PSBT signing operations\n * - Wallet state management\n *\n * @example\n * ```typescript\n * const keys = generateKeys('testnet');\n * const wallet = new WalletManager({\n * xpubVan: keys.accountXpubVanilla,\n * xpubCol: keys.accountXpubColored,\n * masterFingerprint: keys.masterFingerprint,\n * mnemonic: keys.mnemonic,\n * network: 'testnet',\n * transportEndpoint: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n * indexerUrl: 'ssl://electrum.iriswallet.com:50013'\n * });\n *\n * const balance = await wallet.getBtcBalance();\n * ```\n */\nexport class WalletManager implements IWalletManager {\n private readonly client: RGBLibClient;\n private readonly xpub: string | null;\n private readonly xpubVan: string;\n private readonly xpubCol: string;\n private mnemonic: string | null;\n private seed: Uint8Array | null;\n private readonly network: Network;\n private readonly masterFingerprint: string;\n private disposed: boolean = false;\n private readonly dataDir: string;\n constructor(params: WalletInitParams) {\n if (!params.xpubVan) {\n throw new ValidationError('xpubVan is required', 'xpubVan');\n }\n if (!params.xpubCol) {\n throw new ValidationError('xpubCol is required', 'xpubCol');\n }\n if (!params.masterFingerprint) {\n throw new ValidationError(\n 'masterFingerprint is required',\n 'masterFingerprint'\n );\n }\n\n this.network = normalizeNetwork(params.network ?? 'regtest');\n\n this.xpubVan = params.xpubVan;\n this.xpubCol = params.xpubCol;\n this.seed = params.seed ?? null;\n this.mnemonic = params.mnemonic ?? null;\n this.xpub = params.xpub ?? null;\n this.masterFingerprint = params.masterFingerprint;\n this.dataDir =\n params.dataDir ??\n path.join(\n process.cwd(),\n '.rgb-wallet',\n this.network,\n this.masterFingerprint\n );\n\n this.client = new RGBLibClient({\n xpubVan: params.xpubVan,\n xpubCol: params.xpubCol,\n masterFingerprint: params.masterFingerprint,\n network: this.network,\n transportEndpoint: params.transportEndpoint,\n indexerUrl: params.indexerUrl,\n dataDir: params.dataDir ?? this.dataDir,\n });\n }\n\n public async initialize(): Promise<void> {\n console.log('initializing is not reqire');\n }\n\n public async goOnline(): Promise<void> {\n this.client.getOnline();\n }\n\n /**\n * Get wallet's extended public keys\n */\n public getXpub(): { xpubVan: string; xpubCol: string } {\n return {\n xpubVan: this.xpubVan,\n xpubCol: this.xpubCol,\n };\n }\n\n /**\n * Get wallet's network\n */\n public getNetwork(): Network {\n return this.network;\n }\n\n /**\n * Dispose of sensitive wallet data\n * Clears mnemonic and seed from memory\n * Idempotent - safe to call multiple times\n */\n public async dispose(): Promise<void> {\n if (this.disposed) {\n return;\n }\n\n if (this.mnemonic !== null) {\n this.mnemonic = null;\n }\n\n if (this.seed !== null && this.seed.length > 0) {\n this.seed.fill(0);\n this.seed = null;\n }\n this.client.dropWallet();\n\n this.disposed = true;\n }\n\n /**\n * Check if wallet has been disposed\n */\n public isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Guard method to ensure wallet has not been disposed\n * @throws {WalletError} if wallet has been disposed\n */\n private ensureNotDisposed(): void {\n if (this.disposed) {\n throw new WalletError('Wallet has been disposed');\n }\n }\n\n public registerWallet(): {\n address: string;\n btcBalance: IWalletModel.BtcBalance;\n } {\n return this.client.registerWallet();\n }\n\n public async getBtcBalance(): Promise<IWalletModel.BtcBalance> {\n return this.client.getBtcBalance();\n }\n\n public async getAddress(): Promise<string> {\n return this.client.getAddress();\n }\n\n public async listUnspents(): Promise<IWalletModel.Unspent[]> {\n const unspents = this.client.listUnspents();\n return unspents.map((unspent) => ({\n utxo: {\n ...unspent.utxo,\n exists: (unspent.utxo as any).exists ?? true,\n },\n rgbAllocations: unspent.rgbAllocations.map((allocation) => {\n const assignmentKeys = Object.keys(allocation.assignment);\n const assignmentType = assignmentKeys[0] as\n | IWalletModel.AssignmentType\n | undefined;\n const assignment: IWalletModel.Assignment = {\n type: assignmentType ?? 'Any',\n amount:\n assignmentType && allocation.assignment[assignmentType]\n ? Number(allocation.assignment[assignmentType])\n : undefined,\n };\n return {\n assetId: allocation.assetId,\n assignment,\n settled: allocation.settled,\n };\n }),\n pendingBlinded: (unspent as any).pendingBlinded ?? 0,\n }));\n }\n\n public async listAssets(): Promise<IWalletModel.ListAssets> {\n const assets = this.client.listAssets();\n return assets;\n }\n\n public async getAssetBalance(\n asset_id: string\n ): Promise<IWalletModel.AssetBalance> {\n const balance = this.client.getAssetBalance(asset_id);\n return {\n settled: balance.settled ?? 0,\n future: balance.future ?? 0,\n spendable: balance.spendable ?? 0,\n offchainOutbound: balance.offchainOutbound ?? 0,\n offchainInbound: balance.offchainInbound ?? 0,\n };\n }\n\n public async createUtxosBegin(\n params: IWalletModel.CreateUtxosBeginRequestModel\n ): Promise<string> {\n return this.client.createUtxosBegin(params);\n }\n\n public async createUtxosEnd(\n params: IWalletModel.CreateUtxosEndRequestModel\n ): Promise<number> {\n return this.client.createUtxosEnd(params);\n }\n\n public async sendBegin(\n params: IWalletModel.SendAssetBeginRequestModel\n ): Promise<string> {\n return this.client.sendBegin(params);\n }\n\n /**\n * Batch send begin: accepts already-built recipientMap.\n * Returns unsigned PSBT (use signPsbt then sendEnd to complete).\n */\n public async sendBeginBatch(params: {\n recipientMap: IWalletModel.RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n }): Promise<string> {\n return this.client.sendBeginBatch(params);\n }\n\n /**\n * Complete batch send: sendBeginBatch → sign PSBT → sendEnd.\n */\n public async sendBatch(\n params: {\n recipientMap: IWalletModel.RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n },\n mnemonic?: string\n ): Promise<IWalletModel.SendResult> {\n this.ensureNotDisposed();\n const psbt = await this.sendBeginBatch(params);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n return await this.sendEnd({ signedPsbt });\n }\n\n public async sendEnd(\n params: IWalletModel.SendAssetEndRequestModel\n ): Promise<IWalletModel.SendResult> {\n return this.client.sendEnd(params);\n }\n\n public async sendBtcBegin(\n params: IWalletModel.SendBtcBeginRequestModel\n ): Promise<string> {\n return this.client.sendBtcBegin(params);\n }\n\n public async sendBtcEnd(\n params: IWalletModel.SendBtcEndRequestModel\n ): Promise<string> {\n return this.client.sendBtcEnd(params);\n }\n\n public async estimateFeeRate(\n blocks: number\n ): Promise<IWalletModel.GetFeeEstimationResponse> {\n if (!Number.isFinite(blocks)) {\n throw new ValidationError('blocks must be a finite number', 'blocks');\n }\n if (!Number.isInteger(blocks) || blocks <= 0) {\n throw new ValidationError('blocks must be a positive integer', 'blocks');\n }\n\n const feeEstimation = await this.client.getFeeEstimation({ blocks });\n return feeEstimation as unknown as IWalletModel.GetFeeEstimationResponse;\n }\n\n public async estimateFee(psbtBase64: string): Promise<EstimateFeeResult> {\n return await estimatePsbt(psbtBase64);\n }\n\n public async sendBtc(\n params: IWalletModel.SendBtcBeginRequestModel\n ): Promise<string> {\n this.ensureNotDisposed();\n const psbt = await this.sendBtcBegin(params);\n const signed = await this.signPsbt(psbt);\n return await this.sendBtcEnd({ signedPsbt: signed });\n }\n\n public async blindReceive(\n params: IWalletModel.InvoiceRequest\n ): Promise<IWalletModel.InvoiceReceiveData> {\n const invoice = await this.client.blindReceive({\n ...params,\n assetId: params.assetId ?? '',\n amount: params.amount ?? 0,\n });\n return {\n invoice: invoice.invoice,\n recipientId: invoice.recipientId,\n expirationTimestamp: invoice.expirationTimestamp ?? null,\n batchTransferIdx: invoice.batchTransferIdx,\n };\n }\n\n public async witnessReceive(\n params: IWalletModel.InvoiceRequest\n ): Promise<IWalletModel.InvoiceReceiveData> {\n const invoice = await this.client.witnessReceive({\n ...params,\n assetId: params.assetId ?? '',\n amount: params.amount ?? 0,\n });\n return {\n invoice: invoice.invoice,\n recipientId: invoice.recipientId,\n expirationTimestamp: invoice.expirationTimestamp ?? null,\n batchTransferIdx: invoice.batchTransferIdx,\n };\n }\n public async decodeRGBInvoice(params: {\n invoice: string;\n }): Promise<IWalletModel.InvoiceData> {\n const invoiceData = await this.client.decodeRGBInvoice(params);\n // Transform assignment from { [key: string]: any } to { type: AssignmentType, amount?: number }\n const assignmentKeys = Object.keys(invoiceData.assignment);\n const assignmentType = assignmentKeys[0] as\n | IWalletModel.AssignmentType\n | undefined;\n const assignment: IWalletModel.Assignment = {\n type: assignmentType ?? 'Any',\n amount:\n assignmentType && invoiceData.assignment[assignmentType]\n ? Number(invoiceData.assignment[assignmentType])\n : undefined,\n };\n\n return {\n invoice: params.invoice,\n recipientId: invoiceData.recipientId,\n assetSchema: invoiceData.assetSchema as\n | IWalletModel.AssetSchema\n | undefined,\n assetId: invoiceData.assetId,\n network: invoiceData.network as IWalletModel.BitcoinNetwork,\n assignment,\n assignmentName: invoiceData.assignmentName,\n expirationTimestamp: invoiceData.expirationTimestamp ?? null,\n transportEndpoints: invoiceData.transportEndpoints,\n };\n }\n public async issueAssetNia(\n params: IWalletModel.IssueAssetNiaRequestModel\n ): Promise<IWalletModel.AssetNIA> {\n const asset = await this.client.issueAssetNia(params);\n return asset;\n }\n\n public async issueAssetIfa(\n params: IWalletModel.IssueAssetIfaRequestModel\n ): Promise<IWalletModel.AssetIfa> {\n const asset = await this.client.issueAssetIfa(params);\n return asset;\n }\n public async inflateBegin(\n params: IWalletModel.InflateAssetIfaRequestModel\n ): Promise<string> {\n return this.client.inflateBegin(params);\n }\n public async inflateEnd(\n params: IWalletModel.InflateEndRequestModel\n ): Promise<IWalletModel.OperationResult> {\n return this.client.inflateEnd(params);\n }\n /**\n * Complete inflate operation: begin → sign → end\n * @param params - Inflate parameters\n * @param mnemonic - Optional mnemonic for signing\n */\n public async inflate(\n params: IWalletModel.InflateAssetIfaRequestModel,\n mnemonic?: string\n ): Promise<IWalletModel.OperationResult> {\n this.ensureNotDisposed();\n const psbt = await this.inflateBegin(params);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n return await this.inflateEnd({\n signedPsbt,\n });\n }\n\n public async refreshWallet(): Promise<void> {\n this.client.refreshWallet();\n }\n\n public async listTransactions(): Promise<IWalletModel.Transaction[]> {\n const transactions = this.client.listTransactions();\n\n return transactions;\n }\n\n public async listTransfers(\n asset_id?: string\n ): Promise<IWalletModel.Transfer[]> {\n const transfers = this.client.listTransfers(asset_id);\n return transfers;\n }\n\n public async failTransfers(\n params: IWalletModel.FailTransfersRequest\n ): Promise<boolean> {\n return this.client.failTransfers(params);\n }\n\n public async createBackup(params: {\n backupPath: string;\n password: string;\n }): Promise<IWalletModel.WalletBackupResponse> {\n return this.client.createBackup(params);\n }\n\n /**\n * Configure VSS cloud backup for this wallet.\n */\n public async configureVssBackup(\n config: IWalletModel.VssBackupConfig\n ): Promise<void> {\n this.ensureNotDisposed();\n this.client.configureVssBackup(config);\n }\n\n /**\n * Disable automatic VSS backup.\n */\n public async disableVssAutoBackup(): Promise<void> {\n this.ensureNotDisposed();\n this.client.disableVssAutoBackup();\n }\n\n /**\n * Trigger a VSS backup immediately and return the server version.\n */\n public async vssBackup(\n config: IWalletModel.VssBackupConfig\n ): Promise<number> {\n this.ensureNotDisposed();\n return this.client.vssBackup(config);\n }\n\n /**\n * Get VSS backup info for this wallet.\n */\n public async vssBackupInfo(\n config: IWalletModel.VssBackupConfig\n ): Promise<IWalletModel.VssBackupInfo> {\n this.ensureNotDisposed();\n return this.client.vssBackupInfo(config);\n }\n\n /**\n * Sign a PSBT using the wallet's mnemonic or a provided mnemonic\n * @param psbt - Base64 encoded PSBT\n * @param mnemonic - Optional mnemonic (uses wallet's mnemonic if not provided)\n */\n public async signPsbt(psbt: string, mnemonic?: string): Promise<string> {\n this.ensureNotDisposed();\n const mnemonicToUse = mnemonic ?? this.mnemonic;\n\n if (mnemonicToUse) {\n return await signPsbt(mnemonicToUse, psbt, this.network);\n }\n if (this.seed) {\n return await signPsbtFromSeed(this.seed, psbt, this.network);\n }\n\n throw new WalletError(\n 'mnemonic is required. Provide it as parameter or initialize wallet with mnemonic.'\n );\n }\n\n /**\n * Complete send operation: begin → sign → end\n * @param invoiceTransfer - Transfer invoice parameters\n * @param mnemonic - Optional mnemonic for signing\n */\n public async send(\n invoiceTransfer: IWalletModel.SendAssetBeginRequestModel,\n mnemonic?: string\n ): Promise<IWalletModel.SendResult> {\n this.ensureNotDisposed();\n const psbt = await this.sendBegin(invoiceTransfer);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n return await this.sendEnd({ signedPsbt });\n }\n\n public async createUtxos({\n upTo,\n num,\n size,\n feeRate,\n }: {\n upTo?: boolean;\n num?: number;\n size?: number;\n feeRate?: number;\n }): Promise<number> {\n this.ensureNotDisposed();\n const psbt = await this.createUtxosBegin({ upTo, num, size, feeRate });\n const signedPsbt = await this.signPsbt(psbt);\n return this.createUtxosEnd({ signedPsbt });\n }\n\n public async syncWallet(): Promise<void> {\n this.client.syncWallet();\n }\n\n public async signMessage(message: string): Promise<string> {\n this.ensureNotDisposed();\n if (!message) {\n throw new ValidationError('message is required', 'message');\n }\n\n if (!this.seed) {\n throw new WalletError(\n 'Wallet seed is required for message signing. Initialize the wallet with a seed.'\n );\n }\n\n return signSchnorrMessage({\n message,\n seed: this.seed,\n network: this.network,\n });\n }\n\n public async verifyMessage(\n message: string,\n signature: string,\n accountXpub?: string\n ): Promise<boolean> {\n if (!message) {\n throw new ValidationError('message is required', 'message');\n }\n if (!signature) {\n throw new ValidationError('signature is required', 'signature');\n }\n\n return verifySchnorrMessage({\n message,\n signature,\n accountXpub: accountXpub ?? this.xpubVan,\n network: this.network,\n });\n }\n}\n\n/**\n * Factory function to create a WalletManager instance\n * Provides a cleaner API than direct constructor\n *\n * @example\n * ```typescript\n * const keys = generateKeys('testnet');\n * const wallet = createWalletManager({\n * xpubVan: keys.accountXpubVanilla,\n * xpubCol: keys.accountXpubColored,\n * masterFingerprint: keys.masterFingerprint,\n * mnemonic: keys.mnemonic,\n * network: 'testnet',\n * transportEndpoint: 'rpcs://proxy.iriswallet.com/0.2/json-rpc',\n * indexerUrl: 'ssl://electrum.iriswallet.com:50013'\n * });\n * ```\n */\nexport function createWalletManager(params: WalletInitParams): WalletManager {\n return new WalletManager(params);\n}\n\n// Legacy singleton instance for backward compatibility\n// @deprecated Use `new WalletManager(params)` or `createWalletManager(params)` instead\n// This singleton will throw an error when accessed, requiring proper initialization\nlet _wallet: WalletManager | null = null;\n\nexport const wallet = new Proxy({} as WalletManager, {\n get(target, prop) {\n if (!_wallet) {\n throw new WalletError(\n 'The legacy singleton wallet instance is deprecated. ' +\n 'Please use `new WalletManager(params)` or `createWalletManager(params)` instead. ' +\n 'Example: const wallet = new WalletManager({ xpubVan, xpubCol, masterFingerprint, network, transportEndpoint, indexerUrl })'\n );\n }\n const value = (_wallet as any)[prop];\n return typeof value === 'function' ? value.bind(_wallet) : value;\n },\n});\n","/**\n * UTEXO Protocol Base Implementations\n *\n * These classes provide empty implementations for UTEXO-specific operations.\n * They should be extended or used as mixins for concrete implementations.\n */\n\nimport type {\n ILightningProtocol,\n IOnchainProtocol,\n IUTEXOProtocol,\n} from './IUTEXOProtocol';\nimport type {\n CreateLightningInvoiceRequestModel,\n LightningReceiveRequest,\n LightningSendRequest,\n GetLightningSendFeeEstimateRequestModel,\n PayLightningInvoiceRequestModel,\n OnchainSendRequestModel,\n OnchainSendResponse,\n ListLightningPaymentsResponse,\n OnchainReceiveRequestModel,\n OnchainReceiveResponse,\n} from '../types/utexo';\nimport type {\n SendAssetEndRequestModel,\n Transfer,\n TransferStatus,\n OnchainSendStatus,\n} from '../types/wallet-model';\n\n/**\n * Lightning Protocol Base Class\n *\n * Provides empty implementations for all Lightning protocol methods.\n * Concrete implementations should override these methods.\n */\nexport class LightningProtocol implements ILightningProtocol {\n async createLightningInvoice(\n _params: CreateLightningInvoiceRequestModel\n ): Promise<LightningReceiveRequest> {\n throw new Error('createLightningInvoice not implemented');\n }\n\n async getLightningReceiveRequest(\n _id: string\n ): Promise<TransferStatus | null> {\n throw new Error('getLightningReceiveRequest not implemented');\n }\n\n async getLightningSendRequest(_id: string): Promise<TransferStatus | null> {\n throw new Error('getLightningSendRequest not implemented');\n }\n\n async getLightningSendFeeEstimate(\n _params: GetLightningSendFeeEstimateRequestModel\n ): Promise<number> {\n throw new Error('getLightningSendFeeEstimate not implemented');\n }\n\n async payLightningInvoiceBegin(\n _params: PayLightningInvoiceRequestModel\n ): Promise<string> {\n throw new Error('payLightningInvoiceBegin not implemented');\n }\n\n async payLightningInvoiceEnd(\n _params: SendAssetEndRequestModel\n ): Promise<LightningSendRequest> {\n throw new Error('payLightningInvoiceEnd not implemented');\n }\n\n async payLightningInvoice(\n _params: PayLightningInvoiceRequestModel,\n _mnemonic?: string\n ): Promise<LightningSendRequest> {\n throw new Error('payLightningInvoice not implemented');\n }\n\n async listLightningPayments(): Promise<ListLightningPaymentsResponse> {\n throw new Error('listLightningPayments not implemented');\n }\n}\n\n/**\n * Onchain Protocol Base Class\n *\n * Provides empty implementations for all onchain protocol methods.\n * Concrete implementations should override these methods.\n */\nexport class OnchainProtocol implements IOnchainProtocol {\n async onchainReceive(\n _params: OnchainReceiveRequestModel\n ): Promise<OnchainReceiveResponse> {\n throw new Error('onchainReceive not implemented');\n }\n async onchainSendBegin(_params: OnchainSendRequestModel): Promise<string> {\n throw new Error('onchainSendBegin not implemented');\n }\n\n async onchainSendEnd(\n _params: SendAssetEndRequestModel\n ): Promise<OnchainSendResponse> {\n throw new Error('onchainSendEnd not implemented');\n }\n\n async onchainSend(\n _params: OnchainSendRequestModel,\n _mnemonic?: string\n ): Promise<OnchainSendResponse> {\n throw new Error('onchainSend not implemented');\n }\n\n async getOnchainSendStatus(\n _send_id: string\n ): Promise<OnchainSendStatus | null> {\n throw new Error('getOnchainSendStatus not implemented');\n }\n\n async listOnchainTransfers(_asset_id?: string): Promise<Transfer[]> {\n throw new Error('listOnchainTransfers not implemented');\n }\n}\n\n/**\n * UTEXO Protocol Base Class\n *\n * Combines Lightning and Onchain protocol implementations.\n * Provides empty implementations for all UTEXO protocol methods.\n * Concrete implementations should override these methods.\n */\nexport class UTEXOProtocol extends LightningProtocol implements IUTEXOProtocol {\n private onchainProtocol = new OnchainProtocol();\n\n async onchainReceive(\n params: OnchainReceiveRequestModel\n ): Promise<OnchainReceiveResponse> {\n return this.onchainProtocol.onchainReceive(params);\n }\n async onchainSendBegin(params: OnchainSendRequestModel): Promise<string> {\n return this.onchainProtocol.onchainSendBegin(params);\n }\n\n async onchainSendEnd(\n params: SendAssetEndRequestModel\n ): Promise<OnchainSendResponse> {\n return this.onchainProtocol.onchainSendEnd(params);\n }\n\n async onchainSend(\n params: OnchainSendRequestModel,\n mnemonic?: string\n ): Promise<OnchainSendResponse> {\n return this.onchainProtocol.onchainSend(params, mnemonic);\n }\n\n async getOnchainSendStatus(\n send_id: string\n ): Promise<OnchainSendStatus | null> {\n return this.onchainProtocol.getOnchainSendStatus(send_id);\n }\n\n async listOnchainTransfers(asset_id?: string): Promise<Transfer[]> {\n return this.onchainProtocol.listOnchainTransfers(asset_id);\n }\n}\n","/**\n * UTEXO Bridge gateway configuration by network.\n */\n\nimport type { UtxoNetworkPreset } from '../utils/network';\n\nexport const DEFAULT_GATEWAY_BASE_URLS: Record<UtxoNetworkPreset, string> = {\n mainnet: 'https://gateway.utexo.utexo.com/',\n testnet: 'https://dev.gateway.utexo.tricorn.network/',\n};\n","/**\n * Network address representation\n */\nexport type NetworkAddress = {\n /** Address string */\n address: string;\n /** Network name (optional) */\n networkName?: string;\n /** Network ID */\n networkId: number;\n};\n\n/**\n * Types of transfers\n */\nexport type TransferType = 'LP' | 'WU' | 'CCTP' | 'NTV' | 'MLT';\n\n/**\n * Estimation data for transfer calculations\n */\nexport type Estimation = {\n /** Expected converted gas fee for this transfer in transferring token */\n fee?: string;\n /** Stable fee percent */\n feePercentage?: string;\n /** Estimated confirmation time */\n estimatedConfirmationTime: string;\n /** Stable fee in transferring token */\n stableFee?: string;\n /** Result amount */\n resultAmount: string;\n /** Expected converted gas fee for this transfer in sender native token (for multitoken transfers) */\n nativeFee?: string;\n /** Expected converted stable fee for this transfer in sender native token (for multitoken transfers) */\n nativeStableFee?: string;\n /** Sum of NativeFee and NativeStableFee if present */\n totalNativeCommission?: string;\n /** Native token symbol if present (for multi-token transfer estimation) */\n nativeTokenSymbol?: string;\n /** Amount in the smallest token units in recipient tokens, which user will receive */\n swapResultAmount?: string;\n};\n\n/**\n * Request to get bridge-in signature\n */\nexport type BridgeInSignatureRequest = {\n /** Sender network address */\n sender: NetworkAddress;\n /** Token ID */\n tokenId: number;\n /** Amount to transfer (as string) */\n amount: string;\n /** Destination network address */\n destination: NetworkAddress;\n /** Additional addresses (optional) */\n additionalAddresses?: string[];\n};\n\n/**\n * Response containing bridge-in signature data\n */\nexport type BridgeInSignatureResponse = {\n /** Token address */\n token: string;\n /** Amount to transfer */\n amount: string;\n /** Gas commission */\n gasCommission: string;\n /** Destination network address */\n destination: NetworkAddress;\n /** Transaction deadline */\n deadline: string;\n /** Nonce value */\n nonce: number;\n /** Transfer ID */\n transferId: number;\n /** Signature for the transaction */\n signature: string;\n /** Transfer type */\n transferType: TransferType;\n /** Estimation data */\n estimation: Estimation;\n /** Total commission */\n totalCommission: string;\n};\n\n/**\n * Request to submit a transaction\n */\nexport type SubmitTransactionRequest = {\n /** Transfer ID */\n transferId: number;\n /** Network ID */\n networkId: number;\n /** Transaction data (base64 encoded for Bitcoin/Concordium, hex for others) */\n txData: string;\n /** Public key */\n publicKey: string;\n /** Authentication signature (hex encoded) */\n authenticationSignature: string;\n};\n\n/**\n * Response from submit transaction\n */\nexport type SubmitTransactionResponse = {\n /** Transaction hash */\n txHash: string;\n};\n\n/**\n * Request to verify bridge-in transaction\n */\nexport type VerifyBridgeInRequest = {\n /** Transfer ID */\n transferId: number;\n /** Network ID */\n networkId: number;\n /** Transaction hash */\n txHash: string;\n /** Public key */\n publicKey: string;\n /** Authentication signature (hex encoded) */\n authenticationSignature: string;\n};\n\n/**\n * Response from receiver invoice endpoint\n */\nexport type ReceiverInvoiceResponse = {\n /** Invoice string */\n invoice: string;\n};\n\n/**\n * Token information\n */\nexport type TokenInfo = {\n /** Token ID */\n id: number;\n /** Short name of the token */\n shortName: string;\n /** Long name of the token */\n longName: string;\n /** Icon link for the token */\n iconLink: string;\n};\n\n/**\n * Transaction hash information\n */\nexport type TransactionHash = {\n /** Network name */\n networkName: string;\n /** Transaction hash */\n hash: string;\n};\n\n/**\n * Response from transfer-by-mainnet-invoice endpoint\n */\nexport type TransferByMainnetInvoiceResponse = {\n /** Transfer ID */\n id: number;\n /** Sender amount */\n senderAmount: string;\n /** Recipient amount */\n recipientAmount: string;\n /** Commission amount */\n commission: string;\n /** Sender token information */\n senderToken: TokenInfo;\n /** Recipient token information */\n recipientToken: TokenInfo;\n /** Sender network address */\n sender: NetworkAddress;\n /** Recipient network address */\n recipient: NetworkAddress;\n /** Transfer status */\n status: string;\n /** Triggering transaction */\n triggeringTx: TransactionHash;\n /** Outbound transaction */\n outboundTx: TransactionHash;\n /** Creation timestamp */\n createdAt: string;\n};\n\n/**\n * API Error response\n */\nexport type ApiError = {\n error: string;\n code?: number;\n};\nexport enum TransferStatuses {\n 'Unspecified',\n 'Confirming',\n 'Canceled',\n 'Finished',\n 'Waiting',\n 'Cancelling',\n 'Failed',\n 'Fetching',\n}\n","import axios, { AxiosError, AxiosInstance } from 'axios';\nimport type { UtxoNetworkPreset } from '../utils/network';\nimport { DEFAULT_GATEWAY_BASE_URLS } from '../config/gateway';\nimport {\n BridgeInSignatureRequest,\n BridgeInSignatureResponse,\n ReceiverInvoiceResponse,\n SubmitTransactionRequest,\n SubmitTransactionResponse,\n TransferByMainnetInvoiceResponse,\n TransferStatuses,\n VerifyBridgeInRequest,\n} from './types';\n\nexport const encodeTransferStatus = (transferStatus: string): number => {\n const textEncoder = new TextEncoder();\n\n return textEncoder.encode(transferStatus.toString())[0];\n};\n/**\n * Utexo Bridge API Client\n *\n * Client for interacting with the utexo bridge API endpoints.\n * All endpoints are prefixed with `/v1/utexo/bridge`.\n */\nclass UtexoBridgeApiClient {\n private axios: AxiosInstance;\n private basePath: string;\n\n /**\n * Creates a new UtexoBridgeApiClient instance\n *\n * @param axiosInstance - Axios instance to use for HTTP requests (required)\n * @param basePath - Base path for API endpoints (defaults to '/v1/utexo/bridge')\n *\n * @example\n * ```typescript\n * import axios from 'axios';\n * import { UtexoBridgeApiClient } from './utexoBridge';\n *\n * const axiosInstance = axios.create({\n * baseURL: 'https://api.example.com'\n * });\n *\n * const client = new UtexoBridgeApiClient(axiosInstance);\n * ```\n */\n constructor(\n axiosInstance: AxiosInstance,\n basePath: string = '/v1/utexo/bridge'\n ) {\n this.axios = axiosInstance;\n this.basePath = basePath;\n }\n\n /**\n * Gets bridge-in signature for a transfer\n *\n * @param request - Bridge-in signature request data\n * @returns Promise resolving to bridge-in signature response\n * @throws {ApiError} If the request fails\n */\n async getBridgeInSignature(\n request: BridgeInSignatureRequest\n ): Promise<BridgeInSignatureResponse> {\n try {\n const { data } = await this.axios.post<BridgeInSignatureResponse>(\n `${this.basePath}/bridge-in-signature`,\n request\n );\n return data;\n } catch (error) {\n const responseData = (error as AxiosError).response?.data;\n if (responseData !== undefined) {\n const message =\n typeof responseData === 'string'\n ? responseData\n : JSON.stringify(responseData);\n throw new Error(message);\n }\n throw error;\n }\n }\n\n /**\n * Submits a signed transaction to the blockchain\n *\n * @param request - Submit transaction request data\n * @returns Promise resolving to transaction hash\n * @throws {ApiError} If the request fails\n */\n async submitTransaction(request: SubmitTransactionRequest): Promise<string> {\n const { data } = await this.axios.post<SubmitTransactionResponse>(\n `${this.basePath}/submit-transaction`,\n request\n );\n return data.txHash;\n }\n\n /**\n * Verifies a bridge-in transaction after it has been sent\n *\n * @param request - Verify bridge-in request data\n * @returns Promise that resolves when verification is complete\n * @throws {ApiError} If the request fails\n */\n async verifyBridgeIn(request: VerifyBridgeInRequest): Promise<void> {\n await this.axios.post(`${this.basePath}/verify-bridge-in`, request);\n }\n\n /**\n * Gets receiver invoice by transfer ID and network ID\n *\n * @param transferId - Transfer ID\n * @param networkId - Network ID\n * @returns Promise resolving to invoice string\n * @throws {ApiError} If the request fails\n */\n async getReceiverInvoice(\n transferId: number,\n networkId: number\n ): Promise<string> {\n const { data } = await this.axios.get<ReceiverInvoiceResponse>(\n `${this.basePath}/receiver-invoice/${transferId}/${networkId}`\n );\n return data.invoice;\n }\n\n async getWithdrawTransfer(\n invoice: string,\n networkId: number\n ): Promise<TransferByMainnetInvoiceResponse | null> {\n const { data } = await this.axios.get<{\n transfers: TransferByMainnetInvoiceResponse[];\n }>(`${this.basePath}/transfers/history`, {\n params: {\n network_id: String(networkId),\n offset: String(0),\n limit: String(10),\n address: 'rgb-address',\n },\n });\n\n if (data.transfers.length === 0) {\n return null;\n }\n\n const withdrawTransfer = data.transfers\n .map((transfer) => ({\n ...transfer,\n status: TransferStatuses[encodeTransferStatus(transfer.status)],\n }))\n .find((transfer) => transfer.recipient.address === invoice);\n if (!withdrawTransfer) {\n return null;\n }\n\n return withdrawTransfer;\n }\n\n /**\n * Gets transfer information by mainnet invoice\n *\n * @param mainnetInvoice - Mainnet invoice string\n * @param networkId - Network ID\n * @returns Promise resolving to transfer information\n * @throws {ApiError} If the request fails\n */\n async getTransferByMainnetInvoice(\n mainnetInvoice: string,\n networkId: number\n ): Promise<TransferByMainnetInvoiceResponse | null> {\n try {\n const { data } = await this.axios.get<TransferByMainnetInvoiceResponse>(\n `${this.basePath}/transfer-by-mainnet-invoice`,\n {\n params: {\n mainnet_invoice: mainnetInvoice,\n network_id: networkId,\n },\n }\n );\n if (data) {\n return {\n ...data,\n status: TransferStatuses[encodeTransferStatus(data.status)],\n };\n }\n return data;\n } catch (_error) {\n console.log('Mainnet invoice not found');\n return null;\n }\n }\n}\n\n/**\n * Returns a UTEXO Bridge API client for network.\n *\n * @param network - 'mainnet' | 'testnet'\n */\nexport function getBridgeAPI(\n network: UtxoNetworkPreset = 'mainnet'\n): UtexoBridgeApiClient {\n const axiosInstance = axios.create({\n baseURL: DEFAULT_GATEWAY_BASE_URLS[network],\n });\n return new UtexoBridgeApiClient(axiosInstance);\n}\n","const UTXO_PATH_INDEX = 2;\n\nexport function toUnitsNumber(value: string, precision: number) {\n const s = String(value).trim();\n const neg = s.startsWith('-');\n const [iRaw, fRaw = ''] = (neg ? s.slice(1) : s).split('.');\n const frac = (fRaw + '0'.repeat(precision)).slice(0, precision);\n\n const unitsStr = (iRaw || '0') + frac;\n const units = Number(unitsStr);\n\n if (!Number.isSafeInteger(units)) {\n throw new Error(\n `Amount exceeds MAX_SAFE_INTEGER. Use BigInt instead. got=${unitsStr}`\n );\n }\n\n return neg ? -units : units;\n}\n\nexport function fromUnitsNumber(units: number, precision: number) {\n const neg = units < 0;\n const base = 10 ** precision;\n\n const value = Math.abs(units) / base;\n return neg ? -value : value;\n}\n\n/**\n * Decodes a hex invoice from bridge transfer signature.\n * Handles hex strings that may start with '0x' prefix.\n *\n * @param hexInvoice - Hex string from bridge transfer signature\n * @returns Decoded UTF-8 string invoice\n */\nexport function decodeBridgeInvoice(hexInvoice: string): string {\n const hex = hexInvoice.startsWith('0x')\n ? hexInvoice.slice(UTXO_PATH_INDEX)\n : hexInvoice;\n return Buffer.from(hex, 'hex').toString('utf-8');\n}\n","/**\n * VSS (Versioned Storage Service) configuration defaults and helpers for UTEXO wallet backup/restore.\n */\n\nimport type { VssBackupConfig } from '../../types/wallet-model';\n\n/** Default VSS server URL used when vssServerUrl is not set in config or restore params. */\nexport const DEFAULT_VSS_SERVER_URL = 'https://vss-server.utexo.com/vss';\n\n/**\n * Split a base VSS config into layer1 and utexo configs (storeId_layer1, storeId_utexo).\n * Same convention used by UTEXOWallet backup and restore.\n */\nexport function getVssConfigs(config: VssBackupConfig): {\n layer1: VssBackupConfig;\n utexo: VssBackupConfig;\n} {\n const base = { ...config };\n return {\n layer1: { ...base, storeId: `${config.storeId}_layer1` },\n utexo: { ...base, storeId: `${config.storeId}_utexo` },\n };\n}\n","/**\n * UTEXO wallet restore: VSS and file backup restore helpers.\n */\n\nimport path from 'path';\nimport fs from 'fs';\nimport {\n deriveKeysFromMnemonic,\n deriveVssSigningKeyFromMnemonic,\n} from '../crypto';\nimport { getUtxoNetworkConfig, type UtxoNetworkPreset } from './utils/network';\nimport { restoreFromVss, restoreWallet } from '../client/rgb-lib-client';\nimport { ValidationError } from '../errors';\nimport type { VssBackupConfig } from '../types/wallet-model';\nimport { DEFAULT_VSS_SERVER_URL } from './config/vss';\n\n/** Backup file extension; used by createBackup and restore. */\nexport const BACKUP_FILE_SUFFIX = '.backup';\n/** Same naming as VSS: wallet_<fp>_layer1, wallet_<fp>_utexo */\nexport const LAYER1_BACKUP_SUFFIX = '_layer1.backup';\nexport const UTEXO_BACKUP_SUFFIX = '_utexo.backup';\n\nconst UTEXO_BACKUP_TMP_LAYER1 = '.layer1';\nconst UTEXO_BACKUP_TMP_UTEXO = '.utexo';\n\n/** Store id for backup/restore (same convention as VSS: wallet_<masterFingerprint>). */\nexport function getBackupStoreId(masterFingerprint: string): string {\n return `wallet_${masterFingerprint}`;\n}\n\nexport interface PrepareUtxoBackupDirsResult {\n storeId: string;\n layer1TmpDir: string;\n utexoTmpDir: string;\n layer1FinalPath: string;\n utexoFinalPath: string;\n}\n\n/**\n * Prepare backup directory and temp dirs for UTEXO createBackup.\n * Creates backupPath if needed and .layer1/.utexo temp subdirs; returns paths for createBackup and final filenames.\n */\nexport function prepareUtxoBackupDirs(\n backupPath: string,\n masterFingerprint: string\n): PrepareUtxoBackupDirsResult {\n const storeId = getBackupStoreId(masterFingerprint);\n if (!fs.existsSync(backupPath)) {\n fs.mkdirSync(backupPath, { recursive: true });\n }\n const layer1TmpDir = path.join(backupPath, UTEXO_BACKUP_TMP_LAYER1);\n const utexoTmpDir = path.join(backupPath, UTEXO_BACKUP_TMP_UTEXO);\n fs.mkdirSync(layer1TmpDir, { recursive: true });\n fs.mkdirSync(utexoTmpDir, { recursive: true });\n return {\n storeId,\n layer1TmpDir,\n utexoTmpDir,\n layer1FinalPath: path.join(\n backupPath,\n `${storeId}_layer1${BACKUP_FILE_SUFFIX}`\n ),\n utexoFinalPath: path.join(\n backupPath,\n `${storeId}_utexo${BACKUP_FILE_SUFFIX}`\n ),\n };\n}\n\n/**\n * Move backup files from temp dirs to final paths and remove temp dirs. Call after createBackup into layer1TmpDir/utexoTmpDir.\n */\nexport function finalizeUtxoBackupPaths(params: {\n layer1BackupPath: string;\n utexoBackupPath: string;\n layer1FinalPath: string;\n utexoFinalPath: string;\n layer1TmpDir: string;\n utexoTmpDir: string;\n}): void {\n const {\n layer1BackupPath,\n utexoBackupPath,\n layer1FinalPath,\n utexoFinalPath,\n layer1TmpDir,\n utexoTmpDir,\n } = params;\n fs.renameSync(layer1BackupPath, layer1FinalPath);\n fs.renameSync(utexoBackupPath, utexoFinalPath);\n fs.rmdirSync(layer1TmpDir);\n fs.rmdirSync(utexoTmpDir);\n}\n\n/**\n * Build VSS config from mnemonic (storeId = wallet_<masterFingerprint>, signingKey derived).\n * Used when config is not passed to vssBackup or restoreUtxoWalletFromVss.\n */\nexport async function buildVssConfigFromMnemonic(\n mnemonic: string,\n serverUrl: string,\n networkPreset: UtxoNetworkPreset = 'testnet'\n): Promise<VssBackupConfig> {\n const keys = await deriveKeysFromMnemonic(networkPreset, mnemonic.trim());\n return {\n serverUrl,\n storeId: `wallet_${keys.masterFingerprint}`,\n signingKey: deriveVssSigningKeyFromMnemonic(mnemonic.trim()),\n backupMode: 'Blocking',\n };\n}\n\n/**\n * Restore a UTEXOWallet from VSS by restoring both layer1 and utexo stores.\n * Mnemonic is required; config is optional (built from mnemonic when omitted; vssServerUrl uses DEFAULT_VSS_SERVER_URL if omitted).\n * Uses the same storeId suffix convention as UTEXOWallet VSS backup (storeId_layer1, storeId_utexo).\n * Restored data is written to targetDir/{layer1Network}/{masterFingerprint} and\n * targetDir/{utexoNetwork}/{masterFingerprint} (same layout as when using dataDir on UTEXOWallet).\n */\nexport async function restoreUtxoWalletFromVss(params: {\n mnemonic: string;\n targetDir: string;\n /** Optional; when omitted, config is built from mnemonic (vssServerUrl defaults to DEFAULT_VSS_SERVER_URL). */\n config?: VssBackupConfig;\n /** Preset to derive layer1/utexo network names; defaults to 'testnet'. */\n networkPreset?: UtxoNetworkPreset;\n /** Optional; when omitted and config not passed, DEFAULT_VSS_SERVER_URL is used. */\n vssServerUrl?: string;\n}): Promise<{ layer1Path: string; utexoPath: string; targetDir: string }> {\n const {\n mnemonic,\n targetDir,\n config: providedConfig,\n networkPreset = 'testnet',\n vssServerUrl,\n } = params;\n if (!mnemonic || !mnemonic.trim()) {\n throw new ValidationError('mnemonic is required', 'mnemonic');\n }\n if (!targetDir) {\n throw new ValidationError('targetDir is required', 'targetDir');\n }\n const serverUrl = vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const config =\n providedConfig ??\n (await buildVssConfigFromMnemonic(\n mnemonic.trim(),\n serverUrl,\n networkPreset\n ));\n const presetConfig = getUtxoNetworkConfig(networkPreset);\n const layer1Network = String(presetConfig.networkMap.mainnet);\n const utexoNetwork = String(presetConfig.networkMap.utexo);\n const masterFingerprint =\n config.storeId.replace(/^wallet_/, '') || config.storeId;\n const layer1Config: VssBackupConfig = {\n ...config,\n storeId: `${config.storeId}_layer1`,\n };\n const utexoConfig: VssBackupConfig = {\n ...config,\n storeId: `${config.storeId}_utexo`,\n };\n const { walletPath: layer1Path } = restoreFromVss({\n config: layer1Config,\n targetDir: path.join(targetDir, layer1Network, masterFingerprint),\n });\n const { walletPath: utexoPath } = restoreFromVss({\n config: utexoConfig,\n targetDir: path.join(targetDir, utexoNetwork, masterFingerprint),\n });\n return { layer1Path, utexoPath, targetDir };\n}\n\n/**\n * Restore a UTEXOWallet from a regular (file) backup created by UTEXOWallet.createBackup.\n * Expects one folder with wallet_<masterFingerprint>_layer1.backup and wallet_<masterFingerprint>_utexo.backup\n * (same naming convention as VSS: storeId_layer1, storeId_utexo with storeId = wallet_<fp>).\n * Restores into targetDir (same layout as VSS restore).\n */\nexport function restoreUtxoWalletFromBackup(params: {\n backupPath: string;\n password: string;\n targetDir: string;\n networkPreset?: UtxoNetworkPreset;\n}): { layer1Path: string; utexoPath: string; targetDir: string } {\n const { backupPath, password, targetDir, networkPreset = 'testnet' } = params;\n if (!backupPath || !password || !targetDir) {\n throw new ValidationError(\n 'backupPath, password, and targetDir are required',\n 'restoreUtxoWalletFromBackup'\n );\n }\n if (!fs.existsSync(backupPath) || !fs.statSync(backupPath).isDirectory()) {\n throw new ValidationError(\n 'backupPath must be an existing directory',\n 'backupPath'\n );\n }\n const files = fs.readdirSync(backupPath);\n const layer1File = files.find((f) => f.endsWith(LAYER1_BACKUP_SUFFIX));\n const utexoFile = files.find((f) => f.endsWith(UTEXO_BACKUP_SUFFIX));\n if (!layer1File || !utexoFile) {\n throw new ValidationError(\n `backupPath must contain wallet_<fp>_layer1.backup and wallet_<fp>_utexo.backup (from createBackup)`,\n 'backupPath'\n );\n }\n const masterFingerprint = layer1File\n .slice(0, -LAYER1_BACKUP_SUFFIX.length)\n .replace(/^wallet_/, '');\n const expectedUtexoFile = `wallet_${masterFingerprint}${UTEXO_BACKUP_SUFFIX}`;\n if (utexoFile !== expectedUtexoFile) {\n throw new ValidationError(\n `Layer1 and utexo backup filenames must share the same wallet id (expected ${expectedUtexoFile})`,\n 'backupPath'\n );\n }\n const layer1BackupFile = path.join(backupPath, layer1File);\n const utexoBackupFile = path.join(backupPath, utexoFile);\n if (!fs.existsSync(layer1BackupFile) || !fs.existsSync(utexoBackupFile)) {\n throw new ValidationError('Backup files not found', 'backupPath');\n }\n const presetConfig = getUtxoNetworkConfig(networkPreset);\n const layer1Network = String(presetConfig.networkMap.mainnet);\n const utexoNetwork = String(presetConfig.networkMap.utexo);\n const layer1DataDir = path.join(targetDir, layer1Network, masterFingerprint);\n const utexoDataDir = path.join(targetDir, utexoNetwork, masterFingerprint);\n for (const dir of [layer1DataDir, utexoDataDir]) {\n if (!fs.existsSync(path.dirname(dir))) {\n fs.mkdirSync(path.dirname(dir), { recursive: true });\n }\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n restoreWallet({\n backupFilePath: layer1BackupFile,\n password,\n dataDir: layer1DataDir,\n });\n restoreWallet({\n backupFilePath: utexoBackupFile,\n password,\n dataDir: utexoDataDir,\n });\n return {\n layer1Path: layer1DataDir,\n utexoPath: utexoDataDir,\n targetDir,\n };\n}\n","/**\n * UTEXOWallet - Wallet class for UTEXO operations\n *\n * This class provides a wallet interface that accepts either a mnemonic or seed\n * for initialization. It implements both IWalletManager (standard RGB operations)\n * and IUTEXOProtocol (UTEXO-specific Lightning and on-chain operations).\n */\n\nimport { PublicKeys } from '../types/utexo';\nimport { deriveKeysFromMnemonicOrSeed } from '../crypto';\nimport type { Network, EstimateFeeResult } from '../crypto';\nimport { BitcoinNetwork } from '../types/wallet-model';\nimport { getDestinationAsset } from '../constants';\nimport { WalletManager } from '../wallet/wallet-manager';\nimport { ValidationError, WalletError } from '../errors';\nimport type { IWalletManager } from '../wallet/IWalletManager';\nimport type { IUTEXOProtocol } from './IUTEXOProtocol';\nimport { UTEXOProtocol } from './utexo-protocol';\nimport {\n getUtxoNetworkConfig,\n type UtxoNetworkPreset,\n type UtxoNetworkMap,\n type UtxoNetworkIdMap,\n} from './utils/network';\nimport path from 'path';\n\nexport { UTEXOProtocol } from './utexo-protocol';\nexport type { IUTEXOProtocol } from './IUTEXOProtocol';\nimport type {\n CreateLightningInvoiceRequestModel,\n LightningReceiveRequest,\n LightningSendRequest,\n PayLightningInvoiceRequestModel,\n OnchainSendRequestModel,\n OnchainSendResponse,\n OnchainReceiveRequestModel,\n OnchainReceiveResponse,\n OnchainSendEndRequestModel,\n PayLightningInvoiceEndRequestModel,\n} from '../types/utexo';\nimport type {\n CreateUtxosBeginRequestModel,\n CreateUtxosEndRequestModel,\n FailTransfersRequest,\n InvoiceRequest,\n InvoiceReceiveData,\n IssueAssetNiaRequestModel,\n IssueAssetIfaRequestModel,\n SendAssetBeginRequestModel,\n SendAssetEndRequestModel,\n SendResult,\n BtcBalance,\n Unspent,\n WalletBackupResponse,\n SendBtcBeginRequestModel,\n SendBtcEndRequestModel,\n GetFeeEstimationResponse,\n InflateAssetIfaRequestModel,\n InflateEndRequestModel,\n OperationResult,\n AssetNIA,\n AssetBalance,\n ListAssets,\n Transaction,\n Transfer,\n InvoiceData,\n OnchainSendStatus,\n TransferStatus,\n VssBackupConfig,\n VssBackupInfo,\n} from '../types/wallet-model';\nimport { getBridgeAPI } from './bridge';\nimport { TransferByMainnetInvoiceResponse } from './bridge/types';\nimport { NetworkAsset } from './utils/network';\nimport {\n decodeBridgeInvoice,\n fromUnitsNumber,\n toUnitsNumber,\n} from './utils/helpers';\nimport { DEFAULT_VSS_SERVER_URL, getVssConfigs } from './config/vss';\nimport type { ConfigOptions } from './config/options';\nimport {\n buildVssConfigFromMnemonic,\n prepareUtxoBackupDirs,\n finalizeUtxoBackupPaths,\n} from './restore';\n\n/**\n * UTEXOWallet - Combines standard RGB wallet operations with UTEXO protocol features\n *\n * Architecture:\n * - Implements IWalletManager for standard RGB operations (via WalletManager delegation)\n * - Implements IUTEXOProtocol for UTEXO-specific operations (Lightning, on-chain sends)\n * - Manages two WalletManager instances: layer1 (Bitcoin) and utexo (UTEXO network)\n */\nexport class UTEXOWallet\n extends UTEXOProtocol\n implements IWalletManager, IUTEXOProtocol\n{\n private readonly mnemonicOrSeed: string | Uint8Array;\n private readonly options: ConfigOptions;\n private readonly networkMap: UtxoNetworkMap;\n private readonly networkIdMap: UtxoNetworkIdMap;\n private readonly bridge: ReturnType<typeof getBridgeAPI>;\n private layer1Keys: PublicKeys | null = null;\n private utexoKeys: PublicKeys | null = null;\n private layer1RGBWallet: WalletManager | null = null;\n private utexoRGBWallet: WalletManager | null = null;\n\n /**\n * Creates a new UTEXOWallet instance\n * @param mnemonicOrSeed - Either a mnemonic phrase (string) or seed (Uint8Array)\n * @param options - Optional configuration options (defaults to { network: 'mainnet' })\n */\n constructor(\n mnemonicOrSeed: string | Uint8Array,\n options: ConfigOptions = {}\n ) {\n super();\n this.mnemonicOrSeed = mnemonicOrSeed;\n this.options = options;\n\n const preset: UtxoNetworkPreset = options.network ?? 'mainnet';\n\n const networkConfig = getUtxoNetworkConfig(preset);\n this.networkMap = networkConfig.networkMap;\n this.networkIdMap = networkConfig.networkIdMap;\n this.bridge = getBridgeAPI(preset);\n }\n\n async initialize(): Promise<void> {\n this.layer1Keys = await this.derivePublicKeys(this.networkMap.mainnet);\n this.utexoKeys = await this.derivePublicKeys(this.networkMap.utexo);\n const fp = this.utexoKeys.masterFingerprint;\n const dataDir = this.options.dataDir;\n this.utexoRGBWallet = new WalletManager({\n xpubVan: this.utexoKeys.accountXpubVanilla,\n xpubCol: this.utexoKeys.accountXpubColored,\n masterFingerprint: this.utexoKeys.masterFingerprint,\n network: this.networkMap.utexo,\n mnemonic: this.mnemonicOrSeed as string,\n dataDir: dataDir\n ? path.join(dataDir, String(this.networkMap.utexo), fp)\n : undefined,\n });\n this.layer1RGBWallet = new WalletManager({\n xpubVan: this.layer1Keys.accountXpubVanilla,\n xpubCol: this.layer1Keys.accountXpubColored,\n masterFingerprint: this.layer1Keys.masterFingerprint,\n network: this.networkMap.mainnet,\n mnemonic: this.mnemonicOrSeed as string,\n dataDir: dataDir\n ? path.join(dataDir, String(this.networkMap.mainnet), fp)\n : undefined,\n });\n }\n\n /**\n * Derive public keys from mnemonic or seed\n * @param network - BitcoinNetwork identifier\n * @returns Promise resolving to PublicKeys containing xpub, accountXpubVanilla, accountXpubColored, and masterFingerprint\n * @throws {ValidationError} If mnemonic is invalid\n */\n async derivePublicKeys(network: BitcoinNetwork): Promise<PublicKeys> {\n const generatedKeys = await deriveKeysFromMnemonicOrSeed(\n network,\n this.mnemonicOrSeed\n );\n const { xpub, accountXpubVanilla, accountXpubColored, masterFingerprint } =\n generatedKeys;\n return { xpub, accountXpubVanilla, accountXpubColored, masterFingerprint };\n }\n\n async getPubKeys(): Promise<PublicKeys> {\n if (!this.layer1Keys) {\n throw new ValidationError('Public keys are not set', 'publicKeys');\n }\n return this.layer1Keys;\n }\n\n /**\n * Guard method to ensure wallet is initialized\n * @throws {WalletError} if wallet is not initialized\n */\n private ensureInitialized(): void {\n if (!this.utexoRGBWallet) {\n throw new WalletError('Wallet not initialized. Call initialize() first.');\n }\n }\n\n // ==========================================\n // IWalletManager Implementation\n // ==========================================\n\n async goOnline(): Promise<void> {\n this.ensureInitialized();\n // TODO: Implement goOnline for UTEXO wallet\n throw new Error('goOnline not implemented');\n }\n\n getXpub(): { xpubVan: string; xpubCol: string } {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getXpub();\n }\n\n getNetwork(): Network {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getNetwork();\n }\n\n async dispose(): Promise<void> {\n if (this.layer1RGBWallet) {\n await this.layer1RGBWallet.dispose();\n }\n if (this.utexoRGBWallet) {\n await this.utexoRGBWallet.dispose();\n }\n }\n\n isDisposed(): boolean {\n if (!this.utexoRGBWallet) {\n return false;\n }\n return this.utexoRGBWallet.isDisposed();\n }\n\n async getBtcBalance(): Promise<BtcBalance> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getBtcBalance();\n }\n\n async getAddress(): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getAddress();\n }\n\n async listUnspents(): Promise<Unspent[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listUnspents();\n }\n\n async createUtxosBegin(\n params: CreateUtxosBeginRequestModel\n ): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.createUtxosBegin(params);\n }\n\n async createUtxosEnd(params: CreateUtxosEndRequestModel): Promise<number> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.createUtxosEnd(params);\n }\n\n async createUtxos(params: {\n upTo?: boolean;\n num?: number;\n size?: number;\n feeRate?: number;\n }): Promise<number> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.createUtxos(params);\n }\n\n async listAssets(): Promise<ListAssets> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listAssets();\n }\n\n async getAssetBalance(asset_id: string): Promise<AssetBalance> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.getAssetBalance(asset_id);\n }\n\n async issueAssetNia(params: IssueAssetNiaRequestModel): Promise<AssetNIA> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.issueAssetNia(params);\n }\n\n async issueAssetIfa(params: IssueAssetIfaRequestModel): Promise<any> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.issueAssetIfa(params);\n }\n\n async inflateBegin(params: InflateAssetIfaRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.inflateBegin(params);\n }\n\n async inflateEnd(params: InflateEndRequestModel): Promise<OperationResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.inflateEnd(params);\n }\n\n async inflate(\n params: InflateAssetIfaRequestModel,\n mnemonic?: string\n ): Promise<OperationResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.inflate(params, mnemonic);\n }\n\n async sendBegin(params: SendAssetBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBegin(params);\n }\n\n async sendEnd(params: SendAssetEndRequestModel): Promise<SendResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendEnd(params);\n }\n\n async send(\n invoiceTransfer: SendAssetBeginRequestModel,\n mnemonic?: string\n ): Promise<SendResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.send(invoiceTransfer, mnemonic);\n }\n\n async sendBtcBegin(params: SendBtcBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBtcBegin(params);\n }\n\n async sendBtcEnd(params: SendBtcEndRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBtcEnd(params);\n }\n\n async sendBtc(params: SendBtcBeginRequestModel): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.sendBtc(params);\n }\n\n async blindReceive(params: InvoiceRequest): Promise<InvoiceReceiveData> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.blindReceive(params);\n }\n\n async witnessReceive(params: InvoiceRequest): Promise<InvoiceReceiveData> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.witnessReceive(params);\n }\n\n async decodeRGBInvoice(params: { invoice: string }): Promise<InvoiceData> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.decodeRGBInvoice(params);\n }\n\n async listTransactions(): Promise<Transaction[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listTransactions();\n }\n\n async listTransfers(asset_id?: string): Promise<Transfer[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listTransfers(asset_id);\n }\n\n async failTransfers(params: FailTransfersRequest): Promise<boolean> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.failTransfers(params);\n }\n\n async refreshWallet(): Promise<void> {\n this.ensureInitialized();\n this.utexoRGBWallet!.refreshWallet();\n }\n\n async syncWallet(): Promise<void> {\n this.ensureInitialized();\n this.utexoRGBWallet!.syncWallet();\n }\n\n async estimateFeeRate(blocks: number): Promise<GetFeeEstimationResponse> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.estimateFeeRate(blocks);\n }\n\n async estimateFee(psbtBase64: string): Promise<EstimateFeeResult> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.estimateFee(psbtBase64);\n }\n\n /**\n * Create backup for both layer1 and utexo stores in one folder.\n * Writes backupPath/wallet_{masterFingerprint}_layer1.backup and backupPath/wallet_{masterFingerprint}_utexo.backup\n * (same naming convention as VSS: storeId_layer1, storeId_utexo with storeId = wallet_<fp>).\n * Use restoreUtxoWalletFromBackup with the same backupPath to restore both.\n */\n async createBackup(params: {\n backupPath: string;\n password: string;\n }): Promise<\n WalletBackupResponse & { layer1BackupPath: string; utexoBackupPath: string }\n > {\n this.ensureInitialized();\n const { backupPath, password } = params;\n if (!backupPath || !password) {\n throw new ValidationError(\n 'backupPath and password are required',\n 'createBackup'\n );\n }\n const fp = this.utexoKeys!.masterFingerprint;\n const { layer1TmpDir, utexoTmpDir, layer1FinalPath, utexoFinalPath } =\n prepareUtxoBackupDirs(backupPath, fp);\n const layer1Result = await this.layer1RGBWallet!.createBackup({\n backupPath: layer1TmpDir,\n password,\n });\n const utexoResult = await this.utexoRGBWallet!.createBackup({\n backupPath: utexoTmpDir,\n password,\n });\n finalizeUtxoBackupPaths({\n layer1BackupPath: layer1Result.backupPath,\n utexoBackupPath: utexoResult.backupPath,\n layer1FinalPath,\n utexoFinalPath,\n layer1TmpDir,\n utexoTmpDir,\n });\n return {\n message: 'Backup created successfully (layer1 + utexo)',\n backupPath,\n layer1BackupPath: layer1FinalPath,\n utexoBackupPath: utexoFinalPath,\n };\n }\n\n async configureVssBackup(config: VssBackupConfig): Promise<void> {\n this.ensureInitialized();\n const { layer1, utexo } = getVssConfigs(config);\n await this.layer1RGBWallet!.configureVssBackup(layer1);\n await this.utexoRGBWallet!.configureVssBackup(utexo);\n }\n\n async disableVssAutoBackup(): Promise<void> {\n this.ensureInitialized();\n await this.layer1RGBWallet!.disableVssAutoBackup();\n await this.utexoRGBWallet!.disableVssAutoBackup();\n }\n\n /**\n * Run VSS backup for both layer1 and utexo stores.\n * Config is optional: when omitted, builds config from mnemonic (option param or wallet mnemonic)\n * and options.vssServerUrl (or DEFAULT_VSS_SERVER_URL if not set).\n *\n * @param config - Optional; when omitted, built from mnemonic and vssServerUrl\n * @param mnemonic - Optional; when omitted, uses wallet mnemonic (only if wallet was created with mnemonic string)\n */\n async vssBackup(\n config?: VssBackupConfig,\n mnemonic?: string\n ): Promise<number> {\n this.ensureInitialized();\n let vssConfig: VssBackupConfig;\n if (config) {\n vssConfig = config;\n } else {\n const mnemonicToUse =\n mnemonic ??\n (typeof this.mnemonicOrSeed === 'string' ? this.mnemonicOrSeed : null);\n if (!mnemonicToUse) {\n throw new ValidationError(\n 'mnemonic is required for VSS backup when config is not passed (wallet was created with seed)',\n 'mnemonic'\n );\n }\n const serverUrl = this.options.vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const preset: UtxoNetworkPreset = this.options.network ?? 'mainnet';\n vssConfig = await buildVssConfigFromMnemonic(\n mnemonicToUse.trim(),\n serverUrl,\n preset\n );\n }\n const { layer1, utexo } = getVssConfigs(vssConfig);\n await this.layer1RGBWallet!.vssBackup(layer1);\n const version = await this.utexoRGBWallet!.vssBackup(utexo);\n return version;\n }\n\n /**\n * Get VSS backup info. Config is optional; when omitted, built from mnemonic (param or wallet)\n * and options.vssServerUrl (or DEFAULT_VSS_SERVER_URL if not set).\n */\n async vssBackupInfo(\n config?: VssBackupConfig,\n mnemonic?: string\n ): Promise<VssBackupInfo> {\n this.ensureInitialized();\n let vssConfig: VssBackupConfig;\n if (config) {\n vssConfig = config;\n } else {\n const mnemonicToUse =\n mnemonic ??\n (typeof this.mnemonicOrSeed === 'string' ? this.mnemonicOrSeed : null);\n if (!mnemonicToUse) {\n throw new ValidationError(\n 'config or mnemonic required for vssBackupInfo',\n 'config'\n );\n }\n const serverUrl = this.options.vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const preset: UtxoNetworkPreset = this.options.network ?? 'mainnet';\n vssConfig = await buildVssConfigFromMnemonic(\n mnemonicToUse.trim(),\n serverUrl,\n preset\n );\n }\n const { utexo } = getVssConfigs(vssConfig);\n return this.utexoRGBWallet!.vssBackupInfo(utexo);\n }\n\n async signPsbt(psbt: string, mnemonic?: string): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.signPsbt(psbt, mnemonic);\n }\n\n async signMessage(message: string): Promise<string> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.signMessage(message);\n }\n\n async verifyMessage(\n message: string,\n signature: string,\n accountXpub?: string\n ): Promise<boolean> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.verifyMessage(message, signature, accountXpub);\n }\n\n /**\n * Validates that the wallet has sufficient spendable balance for the given asset and amount.\n * @param assetId - Asset ID to check balance for\n * @param amount - Required amount (in asset units)\n * @throws {ValidationError} If balance is not found or insufficient\n */\n async validateBalance(assetId: string, amount: number): Promise<void> {\n const assetBalance = await this.getAssetBalance(assetId);\n if (!assetBalance || !assetBalance.spendable) {\n throw new ValidationError('Asset balance is not found', 'assetBalance');\n }\n if (assetBalance.spendable < amount) {\n throw new ValidationError(\n `Insufficient balance ${assetBalance.spendable} < ${amount}`,\n 'amount'\n );\n }\n }\n /**\n * Extracts invoice data and destination asset from a bridge transfer.\n *\n * @param bridgeTransfer - Bridge transfer response containing recipient invoice and token info\n * @returns Object containing invoice string, decoded invoice data, and destination asset\n * @throws {ValidationError} If destination asset is not supported\n */\n private async extractInvoiceAndAsset(\n bridgeTransfer: TransferByMainnetInvoiceResponse\n ): Promise<{\n utexoInvoice: string;\n invoiceData: InvoiceData;\n destinationAsset: NetworkAsset;\n }> {\n const utexoInvoice = bridgeTransfer.recipient.address;\n const invoiceData = await this.decodeRGBInvoice({ invoice: utexoInvoice });\n const destinationAsset = this.networkIdMap.utexo.getAssetById(\n bridgeTransfer.recipientToken.id\n );\n\n if (!destinationAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n\n return { utexoInvoice, invoiceData, destinationAsset };\n }\n\n /**\n * IUTEXOProtocol Implementation\n */\n\n async onchainReceive(\n params: OnchainReceiveRequestModel\n ): Promise<OnchainReceiveResponse> {\n this.ensureInitialized();\n\n const destinationAsset = getDestinationAsset(\n 'mainnet',\n 'utexo',\n params.assetId ?? null,\n this.networkIdMap\n );\n if (!destinationAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n\n if (!params.amount) {\n throw new ValidationError('Amount is required', 'amount');\n }\n\n const destinationInvoice = await this.utexoRGBWallet!.witnessReceive({\n assetId: '', //invoice can receive any asset\n amount: params.amount,\n minConfirmations: params.minConfirmations,\n durationSeconds: params.durationSeconds,\n });\n\n const bridgeTransfer = await this.bridge.getBridgeInSignature({\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.mainnet.networkName,\n networkId: this.networkIdMap.mainnet.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: params.amount.toString(),\n destination: {\n address: destinationInvoice.invoice,\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n additionalAddresses: [],\n });\n\n const decodedInvoice = decodeBridgeInvoice(bridgeTransfer.signature);\n\n return {\n invoice: decodedInvoice,\n };\n }\n\n async onchainSendBegin(params: OnchainSendRequestModel): Promise<string> {\n this.ensureInitialized();\n /** Get the bridge RGB utexo invoice by tempRequestId should be by invoice */\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(\n params.invoice,\n this.networkIdMap.mainnet.networkId\n );\n if (!bridgeTransfer) {\n console.log('External invoice UTEXO -> Mainnet initiated');\n return this.UTEXOToMainnetRGB(params);\n }\n const utexoInvoice = bridgeTransfer.recipient.address;\n const invoiceData = await this.decodeRGBInvoice({ invoice: utexoInvoice });\n const bridgeAmount = bridgeTransfer.recipientAmount;\n const destinationAsset = this.networkIdMap.utexo.getAssetById(\n bridgeTransfer.recipientToken.id\n );\n if (!destinationAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n // const amount = invoiceData.assignment.amount;\n const amount = toUnitsNumber(bridgeAmount, destinationAsset.precision);\n\n const isWitness = invoiceData.recipientId.includes('wvout:');\n\n await this.validateBalance(destinationAsset.assetId, amount);\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: utexoInvoice,\n amount: amount,\n assetId: destinationAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n },\n }),\n });\n\n return psbt;\n }\n\n async onchainSendEnd(\n params: OnchainSendEndRequestModel\n ): Promise<OnchainSendResponse> {\n this.ensureInitialized();\n const sendResult = await this.utexoRGBWallet!.sendEnd({\n signedPsbt: params.signedPsbt,\n });\n\n // TODO: there should be func that allow to cancel or mark as paid Tricorn Bridge Transfer\n // Best-effort finalize bridge transfer (complete/cancel/status) via BridgeClient (depending on Tricorn semantics)\n\n return sendResult;\n }\n\n async onchainSend(\n params: OnchainSendRequestModel,\n mnemonic?: string\n ): Promise<OnchainSendResponse> {\n this.ensureInitialized();\n const psbt = await this.onchainSendBegin(params);\n const signed_psbt = await this.utexoRGBWallet!.signPsbt(psbt, mnemonic);\n return await this.onchainSendEnd({\n signedPsbt: signed_psbt,\n invoice: params.invoice,\n });\n }\n\n async getOnchainSendStatus(\n invoice: string\n ): Promise<OnchainSendStatus | null> {\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(\n invoice,\n this.networkIdMap.mainnet.networkId\n );\n if (!bridgeTransfer) {\n const withdrawTransfer = await this.bridge.getWithdrawTransfer(\n invoice,\n this.networkIdMap.utexo.networkId\n );\n if (!withdrawTransfer) {\n return null;\n }\n return withdrawTransfer.status as OnchainSendStatus;\n }\n const { invoiceData, destinationAsset } =\n await this.extractInvoiceAndAsset(bridgeTransfer);\n const assets = await this.utexoRGBWallet!.listAssets();\n const walletAsset = assets.nia.find(\n (a) => a.assetId === destinationAsset.assetId\n );\n const transfers = await this.utexoRGBWallet!.listTransfers(\n walletAsset?.assetId\n );\n const transfer = transfers.find(\n (transfer) => transfer.recipientId === invoiceData.recipientId\n );\n if (transfer) {\n return transfer.status;\n }\n if (bridgeTransfer) {\n return bridgeTransfer.status as OnchainSendStatus;\n }\n return null;\n }\n\n async listOnchainTransfers(asset_id?: string): Promise<Transfer[]> {\n this.ensureInitialized();\n return this.utexoRGBWallet!.listTransfers(asset_id);\n }\n\n async createLightningInvoice(\n params: CreateLightningInvoiceRequestModel\n ): Promise<LightningReceiveRequest> {\n this.ensureInitialized();\n\n const asset = params.asset;\n if (!asset) {\n throw new ValidationError('Asset is required', 'asset');\n }\n\n if (!asset.assetId) {\n throw new ValidationError('Asset ID is required', 'assetId');\n }\n if (!asset.amount) {\n throw new ValidationError('Amount is required', 'amount');\n }\n\n const destinationAsset = getDestinationAsset(\n 'mainnet',\n 'utexo',\n asset.assetId,\n this.networkIdMap\n );\n if (!destinationAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n\n const destinationInvoice = await this.utexoRGBWallet!.witnessReceive({\n assetId: '', //invoice can receive any asset\n amount: asset.amount,\n });\n\n const bridgeTransfer = await this.bridge.getBridgeInSignature({\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.mainnetLightning.networkName,\n networkId: this.networkIdMap.mainnetLightning.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: asset.amount.toString(),\n destination: {\n address: destinationInvoice.invoice,\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n additionalAddresses: [],\n });\n\n const decodedLnInvoice = decodeBridgeInvoice(bridgeTransfer.signature);\n\n return {\n lnInvoice: decodedLnInvoice,\n };\n }\n\n async payLightningInvoiceBegin(\n params: PayLightningInvoiceRequestModel\n ): Promise<string> {\n this.ensureInitialized();\n\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(\n params.lnInvoice,\n this.networkIdMap.mainnetLightning.networkId\n );\n if (!bridgeTransfer) {\n console.log('External invoice UTEXO -> Mainnet Lightning initiated');\n return this.UtexoToMainnetLightning(params);\n }\n\n const bridgeAmount = bridgeTransfer.recipientAmount;\n const { utexoInvoice, invoiceData, destinationAsset } =\n await this.extractInvoiceAndAsset(bridgeTransfer);\n const amount = toUnitsNumber(bridgeAmount, destinationAsset.precision);\n\n const isWitness = invoiceData.recipientId.includes('wvout:');\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: utexoInvoice,\n amount: amount,\n assetId: destinationAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n },\n }),\n });\n\n return psbt;\n }\n\n async payLightningInvoiceEnd(\n params: PayLightningInvoiceEndRequestModel\n ): Promise<SendResult> {\n this.ensureInitialized();\n const sendResult = await this.utexoRGBWallet!.sendEnd({\n signedPsbt: params.signedPsbt,\n });\n // TODO: there should be func that allow to cancel or mark as paid Tricorn Bridge Transfer\n // Best-effort finalize bridge transfer (complete/cancel/status) via BridgeClient (depending on Tricorn semantics)\n\n return sendResult;\n }\n\n async payLightningInvoice(\n params: PayLightningInvoiceRequestModel,\n mnemonic?: string\n ): Promise<LightningSendRequest> {\n this.ensureInitialized();\n const psbt = await this.payLightningInvoiceBegin(params);\n const signed_psbt = await this.utexoRGBWallet!.signPsbt(psbt, mnemonic);\n return await this.payLightningInvoiceEnd({\n signedPsbt: signed_psbt,\n lnInvoice: params.lnInvoice,\n });\n }\n\n async getLightningSendRequest(\n lnInvoice: string\n ): Promise<TransferStatus | null> {\n this.ensureInitialized();\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(\n lnInvoice,\n this.networkIdMap.mainnetLightning.networkId\n );\n if (!bridgeTransfer) {\n const withdrawTransfer = await this.bridge.getWithdrawTransfer(\n lnInvoice,\n this.networkIdMap.utexo.networkId\n );\n if (!withdrawTransfer) {\n return null;\n }\n return withdrawTransfer.status as TransferStatus;\n }\n const { invoiceData, destinationAsset } =\n await this.extractInvoiceAndAsset(bridgeTransfer);\n const transfers = await this.utexoRGBWallet!.listTransfers(\n destinationAsset.assetId\n );\n return transfers.length > 0\n ? (transfers.find(\n (transfer) => transfer.recipientId === invoiceData.recipientId\n )?.status ?? null)\n : null;\n }\n async getLightningReceiveRequest(\n lnInvoice: string\n ): Promise<TransferStatus | null> {\n this.ensureInitialized();\n const bridgeTransfer = await this.bridge.getTransferByMainnetInvoice(\n lnInvoice,\n this.networkIdMap.mainnetLightning.networkId\n );\n if (!bridgeTransfer) {\n const withdrawTransfer = await this.bridge.getWithdrawTransfer(\n lnInvoice,\n this.networkIdMap.utexo.networkId\n );\n if (!withdrawTransfer) {\n return null;\n }\n return withdrawTransfer.status as TransferStatus;\n }\n const { invoiceData, destinationAsset } =\n await this.extractInvoiceAndAsset(bridgeTransfer);\n const transfers = await this.utexoRGBWallet!.listTransfers(\n destinationAsset.assetId\n );\n return transfers.length > 0\n ? (transfers.find(\n (transfer) => transfer.recipientId === invoiceData.recipientId\n )?.status ?? null)\n : null;\n }\n\n private async UTEXOToMainnetRGB(\n params: OnchainSendRequestModel\n ): Promise<string> {\n this.ensureInitialized();\n const invoiceData = await this.decodeRGBInvoice({\n invoice: params.invoice,\n });\n if (!params.assetId && !invoiceData.assetId) {\n throw new ValidationError(\n 'Asset ID is required for external invoice',\n 'assetId'\n );\n }\n const assetId = params.assetId ?? invoiceData.assetId;\n const utexoAsset = getDestinationAsset(\n 'mainnet',\n 'utexo',\n assetId ?? null,\n this.networkIdMap\n );\n if (!utexoAsset) {\n throw new ValidationError('UTEXO asset is not supported', 'assetId');\n }\n\n const destinationAsset = this.networkIdMap.mainnet.getAssetById(\n utexoAsset?.tokenId ?? 0\n );\n // return;\n if (!destinationAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n\n if (!params.amount && !invoiceData.assignment.amount) {\n throw new ValidationError(\n 'Amount is required for external invoice',\n 'amount'\n );\n }\n\n let amount: number;\n if (params.amount) {\n amount = params.amount;\n } else if (invoiceData.assignment.amount) {\n amount = fromUnitsNumber(\n invoiceData.assignment.amount,\n destinationAsset.precision\n );\n } else {\n throw new ValidationError('Amount is required', 'amount');\n }\n\n await this.validateBalance(\n utexoAsset.assetId,\n toUnitsNumber(amount.toString(), utexoAsset.precision)\n );\n\n const payload = {\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: amount.toString(),\n destination: {\n address: params.invoice,\n networkName: this.networkIdMap.mainnet.networkName,\n networkId: this.networkIdMap.mainnet.networkId,\n },\n additionalAddresses: [],\n };\n\n console.log('payload', payload);\n\n const bridgeOutTransfer = await this.bridge.getBridgeInSignature(payload);\n const decodedInvoice = decodeBridgeInvoice(bridgeOutTransfer.signature);\n const isWitness = decodedInvoice.includes('wvout:');\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: decodedInvoice,\n amount: Number(bridgeOutTransfer.amount),\n assetId: utexoAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n },\n }),\n });\n\n return psbt;\n }\n\n private async UtexoToMainnetLightning(\n params: PayLightningInvoiceRequestModel\n ): Promise<string> {\n this.ensureInitialized();\n if (!params.assetId) {\n throw new ValidationError(\n 'Asset ID is required for external invoice',\n 'assetId'\n );\n }\n const assetId = params.assetId;\n const utexoAsset = getDestinationAsset(\n 'mainnet',\n 'utexo',\n assetId ?? null,\n this.networkIdMap\n );\n const destinationAsset = this.networkIdMap.mainnet.getAssetById(\n utexoAsset?.tokenId ?? 0\n );\n\n if (!destinationAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n if (!utexoAsset) {\n throw new ValidationError(\n 'Destination asset is not supported',\n 'assetId'\n );\n }\n\n if (!params.amount) {\n throw new ValidationError(\n 'Amount is required for external invoice',\n 'amount'\n );\n }\n\n const amount = params.amount;\n\n await this.validateBalance(\n utexoAsset.assetId,\n toUnitsNumber(amount.toString(), utexoAsset.precision)\n );\n\n const bridgeOutTransfer = await this.bridge.getBridgeInSignature({\n sender: {\n address: 'rgb-address',\n networkName: this.networkIdMap.utexo.networkName,\n networkId: this.networkIdMap.utexo.networkId,\n },\n tokenId: destinationAsset.tokenId,\n amount: amount.toString(),\n destination: {\n address: params.lnInvoice,\n networkName: this.networkIdMap.mainnetLightning.networkName,\n networkId: this.networkIdMap.mainnetLightning.networkId,\n },\n additionalAddresses: [],\n });\n const decodedInvoice = decodeBridgeInvoice(bridgeOutTransfer.signature);\n const isWitness = decodedInvoice.includes('wvout:');\n\n const psbt = await this.utexoRGBWallet!.sendBegin({\n invoice: decodedInvoice,\n amount: Number(bridgeOutTransfer.amount),\n assetId: utexoAsset.assetId,\n donation: true,\n ...(isWitness && {\n witnessData: {\n amountSat: 1000,\n blinding: 0,\n },\n }),\n });\n\n return psbt;\n }\n // TODO: Implement remaining methods as needed:\n // - createLightningInvoice() - will use utexoRGBWallet\n // - getLightningReceiveRequest() - will use utexoRGBWallet\n // - getLightningSendRequest() - will use utexoRGBWallet\n // - getLightningSendFeeEstimate() - will use utexoRGBWallet\n // - payLightningInvoiceBegin() - will use utexoRGBWallet\n // - payLightningInvoiceEnd() - will use utexoRGBWallet\n // - onchainSendBegin() - will use layer1RGBWallet or utexoRGBWallet\n // - onchainSendEnd() - will use layer1RGBWallet or utexoRGBWallet\n // - getOnchainSendStatus() - will use layer1RGBWallet or utexoRGBWallet\n // - listOnchainTransfers() - will use layer1RGBWallet or utexoRGBWallet\n // - listLightningPayments() - will use utexoRGBWallet\n}\n","/**\n * Logger utility for the SDK\n * Provides structured logging with configurable log levels\n */\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4,\n}\n\nclass Logger {\n private level: LogLevel = LogLevel.ERROR;\n\n /**\n * Set the log level\n */\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n /**\n * Get the current log level\n */\n getLevel(): LogLevel {\n return this.level;\n }\n\n /**\n * Log debug messages\n */\n debug(...args: unknown[]): void {\n if (this.level <= LogLevel.DEBUG) {\n console.debug('[SDK DEBUG]', ...args);\n }\n }\n\n /**\n * Log info messages\n */\n info(...args: unknown[]): void {\n if (this.level <= LogLevel.INFO) {\n console.info('[SDK INFO]', ...args);\n }\n }\n\n /**\n * Log warning messages\n */\n warn(...args: unknown[]): void {\n if (this.level <= LogLevel.WARN) {\n console.warn('[SDK WARN]', ...args);\n }\n }\n\n /**\n * Log error messages\n */\n error(...args: unknown[]): void {\n if (this.level <= LogLevel.ERROR) {\n console.error('[SDK ERROR]', ...args);\n }\n }\n}\n\nexport const logger = new Logger();\n\n/**\n * Configure SDK logging\n */\nexport function configureLogging(level: LogLevel): void {\n logger.setLevel(level);\n}\n"]}
|