@utexo/rgb-sdk 1.0.1
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/LICENCE +201 -0
- package/Readme.md +521 -0
- package/dist/index.cjs +1915 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +998 -0
- package/dist/index.d.ts +998 -0
- package/dist/index.mjs +1830 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/constants/derivation.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/wallet/wallet-manager.ts","../src/types/rgb-model.ts","../src/utils/logger.ts"],"names":["nodeCrypto","ripemd160","crypto","bip39","eccModule","ecc","bip32","init","bdk","Psbt","payments","networks","bip341","toXOnly","path","generateKeys","getNetworkVersions","wallet","TransactionType","TransferStatus","AssetIface","AssetSchema","LogLevel"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\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 * Network-related constants\n */\n\nimport type { Network } from '../crypto/types';\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","import { Wallet } from './../../bdk-wasm/pkg/bitcoindevkit.d';\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 type { Readable } from 'stream';\n\n/**\n * Default transport endpoint for RGB protocol\n */\nconst DEFAULT_TRANSPORT_ENDPOINT = 'rpcs://proxy.iriswallet.com/0.2/json-rpc';\nimport {\n AssetBalanceResponse,\n BtcBalance,\n CreateUtxosBeginRequestModel,\n CreateUtxosEndRequestModel,\n FailTransfersRequest,\n InvoiceReceiveData,\n InvoiceRequest,\n IssueAssetNIAResponse,\n ListAssetsResponse,\n RGBHTTPClientParams,\n RgbTransfer,\n SendAssetBeginRequestModel,\n SendAssetEndRequestModel,\n SendResult,\n Transaction,\n Unspent,\n WalletBackupResponse,\n WalletRestoreResponse,\n RestoreWalletRequestModel,\n SendBtcBeginRequestModel,\n SendBtcEndRequestModel,\n GetFeeEstimationRequestModel,\n GetFeeEstimationResponse,\n AssetNIA,\n IssueAssetIfaRequestModel,\n AssetIfa,\n InflateAssetIfaRequestModel,\n InflateEndRequestModel,\n OperationResult,\n DecodeRgbInvoiceResponse,\n WitnessData\n} from '../types/rgb-model';\nimport { ValidationError, WalletError, CryptoError } from '../errors';\nimport { normalizeNetwork } from '../utils/validation';\nimport type { Network } from '../crypto/types';\nimport * as rgblib from 'rgb-lib';\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 * 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 = params.transportEndpoint || DEFAULT_TRANSPORT_ENDPOINT;\n \n if (params.indexerUrl) {\n this.indexerUrl = params.indexerUrl;\n } else {\n const defaultIndexerUrls: 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': 'tcp://46.224.75.237:50001',\n 'regtest': 'tcp://regtest.thunderstack.org:50001',\n };\n this.indexerUrl = defaultIndexerUrls[this.network] || defaultIndexerUrls['regtest'];\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 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 console.log('indexerUrl', this.indexerUrl);\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 private 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 console.log('sendBegin params', params);\n \n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const 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 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): AssetBalanceResponse {\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(): ListAssetsResponse {\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 this.wallet.refresh(online, assetId, filter, skipSync);\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): RgbTransfer[] {\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 * 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 * 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\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","import { RGBLibClient, restoreWallet } from '../client/index';\nimport {\n CreateUtxosBeginRequestModel,\n CreateUtxosEndRequestModel,\n FailTransfersRequest,\n InvoiceRequest,\n InvoiceReceiveData,\n IssueAssetNiaRequestModel,\n IssueAssetNIAResponse,\n SendAssetBeginRequestModel,\n SendAssetEndRequestModel,\n SendResult,\n AssetBalanceResponse,\n BtcBalance,\n ListAssetsResponse,\n Transaction,\n Unspent,\n RgbTransfer,\n WalletBackupResponse,\n WalletRestoreResponse,\n RestoreWalletRequestModel,\n SendBtcBeginRequestModel,\n SendBtcEndRequestModel,\n GetFeeEstimationResponse,\n AssetNIA,\n IssueAssetIfaRequestModel,\n AssetIfa,\n InflateAssetIfaRequestModel,\n InflateEndRequestModel,\n OperationResult,\n DecodeRgbInvoiceResponse\n} from '../types/rgb-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 * as os from 'os';\n\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: RestoreWalletRequestModel): 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 {\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(os.tmpdir(), 'rgb-wallet', 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 /**\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 dispose(): 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: BtcBalance } {\n return this.client.registerWallet();\n }\n\n public getBtcBalance(): BtcBalance {\n return this.client.getBtcBalance();\n }\n\n public getAddress(): string {\n return this.client.getAddress();\n }\n\n public listUnspents(): Unspent[] {\n return this.client.listUnspents();\n }\n\n public listAssets(): ListAssetsResponse {\n return this.client.listAssets();\n }\n\n public getAssetBalance(asset_id: string): AssetBalanceResponse {\n return this.client.getAssetBalance(asset_id);\n }\n\n public createUtxosBegin(params: CreateUtxosBeginRequestModel): string {\n return this.client.createUtxosBegin(params);\n }\n\n public createUtxosEnd(params: CreateUtxosEndRequestModel): number {\n return this.client.createUtxosEnd(params);\n }\n\n public sendBegin(params: SendAssetBeginRequestModel): string {\n return this.client.sendBegin(params);\n }\n\n public sendEnd(params: SendAssetEndRequestModel): SendResult {\n return this.client.sendEnd(params);\n }\n\n public sendBtcBegin(params: SendBtcBeginRequestModel): string {\n return this.client.sendBtcBegin(params);\n }\n\n public sendBtcEnd(params: SendBtcEndRequestModel): string {\n return this.client.sendBtcEnd(params);\n }\n\n public estimateFeeRate(blocks: number): 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 return this.client.getFeeEstimation({ blocks });\n }\n\n public async estimateFee(psbtBase64: string): Promise<EstimateFeeResult> {\n return await estimatePsbt(psbtBase64);\n }\n\n public async sendBtc(params: SendBtcBeginRequestModel): Promise<string> {\n this.ensureNotDisposed();\n const psbt = this.sendBtcBegin(params);\n const signed = await this.signPsbt(psbt);\n return this.sendBtcEnd({ signedPsbt: signed });\n }\n\n public blindReceive(params: InvoiceRequest): InvoiceReceiveData {\n return this.client.blindReceive(params);\n }\n\n public witnessReceive(params: InvoiceRequest): InvoiceReceiveData {\n return this.client.witnessReceive(params);\n }\n\n public issueAssetNia(params: IssueAssetNiaRequestModel): AssetNIA {\n return this.client.issueAssetNia(params);\n }\n\n public issueAssetIfa(params: IssueAssetIfaRequestModel): AssetIfa {\n return this.client.issueAssetIfa(params);\n }\n\n public inflateBegin(params: InflateAssetIfaRequestModel): string {\n return this.client.inflateBegin(params);\n }\n\n public inflateEnd(params: InflateEndRequestModel): OperationResult {\n return this.client.inflateEnd(params);\n }\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: InflateAssetIfaRequestModel, mnemonic?: string): Promise<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 refreshWallet(): void {\n this.client.refreshWallet();\n }\n\n public listTransactions(): Transaction[] {\n return this.client.listTransactions();\n }\n\n public listTransfers(asset_id?: string): RgbTransfer[] {\n return this.client.listTransfers(asset_id);\n }\n\n public failTransfers(params: FailTransfersRequest): boolean {\n return this.client.failTransfers(params);\n }\n\n public decodeRGBInvoice(params: { invoice: string }): DecodeRgbInvoiceResponse {\n return this.client.decodeRGBInvoice(params);\n }\n\n public createBackup(params: { backupPath: string, password: string }): WalletBackupResponse {\n return this.client.createBackup(params);\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: SendAssetBeginRequestModel, mnemonic?: string): Promise<SendResult> {\n this.ensureNotDisposed();\n const psbt = await this.sendBegin(invoiceTransfer);\n const signedPsbt = await this.signPsbt(psbt, mnemonic);\n console.log('send signedPsbt', signedPsbt);\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 = this.createUtxosBegin({ upTo, num, size, feeRate });\n const signedPsbt = await this.signPsbt(psbt);\n return this.createUtxosEnd({ signedPsbt });\n }\n\n public syncWallet(): 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","import type { Readable } from 'stream';\n\nexport type RGBHTTPClientParams = {\n xpubVan: string;\n xpubCol: string;\n masterFingerprint: string;\n rgbEndpoint: string;\n}\n\nexport interface FailTransfersRequest {\n batchTransferIdx?: number\n noAssetOnly?: boolean\n skipSync?: boolean\n}\n\nexport interface WalletBackupResponse {\n message: string;\n backupPath: string;\n}\n\nexport interface WalletRestoreResponse {\n message: string;\n}\n\nexport interface RestoreWalletRequestModel {\n backupFilePath: string;\n password: string;\n dataDir: string;\n}\n\nexport interface WitnessData {\n amountSat: number;\n blinding?: number;\n}\nexport interface InvoiceRequest {\n amount: number;\n assetId: string;\n minConfirmations?: number;\n durationSeconds?: number;\n}\nexport interface Recipient {\n recipientId: string;\n witnessData?: WitnessData;\n amount: number;\n transportEndpoints: string[];\n}\nexport interface IssueAssetNiaRequestModel { ticker: string; name: string; amounts: number[]; precision: number }\n\nexport interface IssueAssetIfaRequestModel {\n ticker: string;\n name: string;\n precision: number;\n amounts: number[];\n inflationAmounts: number[];\n replaceRightsNum: number;\n rejectListUrl?: string;\n}\nexport interface SendAssetBeginRequestModel {\n invoice: string;\n witnessData?: WitnessData;\n assetId?: string;\n amount?: number;\n // recipientMap: Record<string, Recipient[]>;\n // donation?: boolean; // default: false\n feeRate?: number; // default: 1\n minConfirmations?: number; // default: 1\n}\n\nexport interface SendAssetEndRequestModel {\n signedPsbt: string;\n skipSync?: boolean;\n}\n\nexport interface SendResult {\n txid: string;\n batchTransferIdx: number;\n}\n\nexport interface OperationResult {\n txid: string;\n batchTransferIdx: number;\n}\n\nexport interface CreateUtxosBeginRequestModel {\n upTo?: boolean;\n num?: number;\n size?: number;\n feeRate?: number;\n}\n\nexport interface CreateUtxosEndRequestModel {\n signedPsbt: string;\n skipSync?: boolean;\n}\n\nexport interface InflateAssetIfaRequestModel {\n assetId: string;\n inflationAmounts: number[];\n feeRate?: number;\n minConfirmations?: number;\n}\n\nexport interface InflateEndRequestModel {\n signedPsbt: string;\n}\n\nexport interface SendBtcBeginRequestModel {\n address: string;\n amount: number;\n feeRate: number;\n skipSync?: boolean;\n}\nexport interface SendBtcEndRequestModel {\n signedPsbt: string;\n skipSync?: boolean;\n}\n\nexport interface GetFeeEstimationRequestModel {\n blocks: number;\n}\n\nexport type GetFeeEstimationResponse = Record<string, number> | number;\n\nexport enum TransactionType {\n RGB_SEND = 0,\n DRAIN = 1,\n CREATE_UTXOS = 2,\n USER = 3,\n}\n\nexport interface BlockTime {\n height: number;\n timestamp: number;\n}\n\nexport interface Transaction {\n transactionType: TransactionType;\n txid: string;\n received: number;\n sent: number;\n fee: number;\n confirmationTime?: BlockTime;\n}\nenum TransferKind {\n ISSUANCE = 0,\n RECEIVE_BLIND = 1,\n RECEIVE_WITNESS = 2,\n SEND = 3,\n INFLATION = 4\n }\nexport interface RgbTransfer {\n idx: number;\n batchTransferIdx: number;\n createdAt: number;\n updatedAt: number;\n status: TransferStatus;\n amount: number;\n kind: TransferKind;\n txid: string | null;\n recipientId: string;\n receiveUtxo: { txid: string; vout: number };\n changeUtxo: { txid: string; vout: number } | null;\n expiration: number;\n transportEndpoints: {\n endpoint: string;\n transportType: number;\n used: boolean;\n }[];\n}\n\nexport enum TransferStatus {\n WAITING_COUNTERPARTY = 0,\n WAITING_CONFIRMATIONS,\n SETTLED,\n FAILED,\n}\nexport interface Unspent {\n utxo: Utxo;\n rgbAllocations: RgbAllocation[];\n}\nexport interface Utxo {\n outpoint: {\n txid: string;\n vout: number;\n };\n btcAmount: number;\n colorable: boolean;\n}\n\nexport interface RgbAllocation {\n assetId: string;\n amount: number;\n settled: boolean;\n}\n\nexport interface Balance {\n settled: number\n future: number,\n spendable: number\n}\n\nexport interface BtcBalance {\n vanilla: Balance,\n colored: Balance\n}\nexport interface InvoiceReceiveData {\n invoice: string\n recipientId: string\n expirationTimestamp: number\n batchTransferIdx: number\n}\nexport interface AssetNIA {\n\n /**\n * @type {string}\n * @memberof AssetNIA\n * @example rgb:2dkSTbr-jFhznbPmo-TQafzswCN-av4gTsJjX-ttx6CNou5-M98k8Zd\n */\n assetId?: string;\n\n /**\n * @type {AssetIface}\n * @memberof AssetNIA\n */\n assetIface?: AssetIface;\n\n /**\n * @type {string}\n * @memberof AssetNIA\n * @example USDT\n */\n ticker?: string;\n\n /**\n * @type {string}\n * @memberof AssetNIA\n * @example Tether\n */\n name?: string;\n\n /**\n * @type {string}\n * @memberof AssetNIA\n * @example asset details\n */\n details?: string;\n\n /**\n * @type {number}\n * @memberof AssetNIA\n * @example 0\n */\n precision?: number;\n\n /**\n * @type {number}\n * @memberof AssetNIA\n * @example 777\n */\n issuedSupply?: number;\n\n /**\n * @type {number}\n * @memberof AssetNIA\n * @example 1691160565\n */\n timestamp?: number;\n\n /**\n * @type {number}\n * @memberof AssetNIA\n * @example 1691161979\n */\n addedAt?: number;\n\n /**\n * @type {BtcBalance}\n * @memberof AssetNIA\n */\n balance?: BtcBalance;\n\n /**\n * @type {Media}\n * @memberof AssetNIA\n */\n media?: Media;\n}\n\nexport interface AssetIfa {\n assetId: string;\n ticker: string;\n name: string;\n details?: string;\n precision: number;\n initialSupply: number;\n maxSupply: number;\n knownCirculatingSupply: number;\n timestamp: number;\n addedAt: number;\n balance: Balance;\n media?: Media;\n rejectListUrl?: string;\n}\n\nexport interface Media {\n\n /**\n * @type {string}\n * @memberof Media\n * @example /path/to/media\n */\n filePath?: string;\n\n /**\n * @type {string}\n * @memberof Media\n * @example text/plain\n */\n mime?: string;\n}\n\nexport enum AssetIface {\n RGB20 = 'RGB20',\n RGB21 = 'RGB21',\n RGB25 = 'RGB25'\n}\n\nexport enum AssetSchema {\n Nia = 'Nia',\n Uda = 'Uda',\n Cfa = 'Cfa'\n}\n\n/**\n * \n *\n * @export\n * @interface ListAssetsResponse\n */\nexport interface ListAssetsResponse {\n\n /**\n * @type {Array<AssetNIA>}\n * @memberof ListAssetsResponse\n */\n nia?: Array<AssetNIA>;\n\n /**\n * @type {Array<AssetNIA>}\n * @memberof ListAssetsResponse\n */\n uda?: Array<AssetNIA>;\n\n /**\n * @type {Array<AssetNIA>}\n * @memberof ListAssetsResponse\n */\n cfa?: Array<AssetNIA>;\n}\nexport interface IssueAssetNIAResponse {\n\n /**\n * @type {AssetNIA}\n * @memberof IssueAssetNIAResponse\n */\n asset?: AssetNIA;\n}\n\n/**\n * \n *\n * @export\n * @interface AssetBalanceResponse\n */\nexport interface AssetBalanceResponse {\n\n /**\n * @type {number}\n * @memberof AssetBalanceResponse\n * @example 777\n */\n settled?: number;\n\n /**\n * @type {number}\n * @memberof AssetBalanceResponse\n * @example 777\n */\n future?: number;\n\n /**\n * @type {number}\n * @memberof AssetBalanceResponse\n * @example 777\n */\n spendable?: number;\n\n /**\n * @type {number}\n * @memberof AssetBalanceResponse\n * @example 444\n */\n offchainOutbound?: number;\n\n /**\n * @type {number}\n * @memberof AssetBalanceResponse\n * @example 0\n */\n offchainInbound?: number;\n}\n\nexport interface DecodeRgbInvoiceResponse {\n recipientId: string;\n assetSchema?: string;\n assetId?: string;\n network: string;\n assignment: Assignment;\n assignmentName?: string;\n expirationTimestamp?: number;\n transportEndpoints: string[];\n}\n\nexport interface Assignment {\n [key: string]: any;\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"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@utexo/rgb-sdk",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"devDependencies": {
|
|
5
|
+
"@types/jest": "^30.0.0",
|
|
6
|
+
"@types/node": "^22.17.2",
|
|
7
|
+
"jest": "^30.2.0",
|
|
8
|
+
"ts-jest": "^29.4.5",
|
|
9
|
+
"tsup": "^8.5.0",
|
|
10
|
+
"typescript": "^5.9.2"
|
|
11
|
+
},
|
|
12
|
+
"type": "commonjs",
|
|
13
|
+
"scripts": {
|
|
14
|
+
"dev": "tsc -w",
|
|
15
|
+
"build": "tsup",
|
|
16
|
+
"prepare": "npm run build",
|
|
17
|
+
"test": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest",
|
|
18
|
+
"test:watch": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --watch",
|
|
19
|
+
"test:coverage": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
|
|
20
|
+
"version:patch": "npm version patch && git push && git push --tags && npm publish --access public",
|
|
21
|
+
"version:minor": "npm version minor && git push && git push --tags && npm publish --access public",
|
|
22
|
+
"version:major": "npm version major && git push && git push --tags && npm publish --access public",
|
|
23
|
+
"example:complete": "node --experimental-wasm-modules example-flow.mjs"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"import": "./dist/index.mjs",
|
|
33
|
+
"require": "./dist/index.cjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"main": "./dist/index.cjs",
|
|
37
|
+
"module": "./dist/index.mjs",
|
|
38
|
+
"types": "./dist/index.d.ts",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@bitcoindevkit/bdk-wallet-node": "^0.2.0",
|
|
41
|
+
"@bitcoindevkit/bdk-wallet-web": "^0.2.0",
|
|
42
|
+
"@bitcoinerlab/secp256k1": "^1.2.0",
|
|
43
|
+
"@noble/hashes": "^2.0.1",
|
|
44
|
+
"axios": "^1.8.4",
|
|
45
|
+
"bare-node-runtime": "^1.1.4",
|
|
46
|
+
"bip32": "^5.0.0-rc.0",
|
|
47
|
+
"bip39": "^3.1.0",
|
|
48
|
+
"bitcoinjs-lib": "^6.1.7",
|
|
49
|
+
"form-data": "^4.0.0",
|
|
50
|
+
"rgb-lib": "npm:@utexo/rgb-lib@latest",
|
|
51
|
+
"ripemd160": "^2.0.3"
|
|
52
|
+
},
|
|
53
|
+
"keywords": [
|
|
54
|
+
"rgb",
|
|
55
|
+
"rgb-protocol",
|
|
56
|
+
"bitcoin",
|
|
57
|
+
"sdk",
|
|
58
|
+
"bdk",
|
|
59
|
+
"wasm",
|
|
60
|
+
"taproot",
|
|
61
|
+
"assets",
|
|
62
|
+
"blockchain"
|
|
63
|
+
],
|
|
64
|
+
"license": "MIT"
|
|
65
|
+
}
|