@utexo/rgb-sdk 1.0.0-beta.8

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.
Files changed (40) hide show
  1. package/LICENCE +201 -0
  2. package/Readme.md +480 -0
  3. package/cli/README.md +348 -0
  4. package/cli/commands/address.mjs +16 -0
  5. package/cli/commands/blindreceive.mjs +15 -0
  6. package/cli/commands/btcbalance.mjs +11 -0
  7. package/cli/commands/createlightninginvoice.mjs +14 -0
  8. package/cli/commands/createutxos.mjs +13 -0
  9. package/cli/commands/decodergbinvoice.mjs +9 -0
  10. package/cli/commands/generate_keys.mjs +35 -0
  11. package/cli/commands/getlightningreceiverequest.mjs +10 -0
  12. package/cli/commands/getlightningsendrequest.mjs +10 -0
  13. package/cli/commands/getonchainsendstatus.mjs +20 -0
  14. package/cli/commands/listassets.mjs +11 -0
  15. package/cli/commands/listtransfers.mjs +10 -0
  16. package/cli/commands/listunspents.mjs +10 -0
  17. package/cli/commands/onchainreceive.mjs +16 -0
  18. package/cli/commands/onchainsend.mjs +11 -0
  19. package/cli/commands/onchainsendbegin.mjs +9 -0
  20. package/cli/commands/onchainsendend.mjs +9 -0
  21. package/cli/commands/paylightninginvoice.mjs +11 -0
  22. package/cli/commands/paylightninginvoicebegin.mjs +10 -0
  23. package/cli/commands/paylightninginvoiceend.mjs +9 -0
  24. package/cli/commands/refresh.mjs +9 -0
  25. package/cli/commands/send.mjs +31 -0
  26. package/cli/commands/sign-psbt.mjs +12 -0
  27. package/cli/commands/signpsbt.mjs +10 -0
  28. package/cli/commands/witnessreceive.mjs +15 -0
  29. package/cli/data/stage2-receiver.example.json +11 -0
  30. package/cli/data/stage2-sender.example.json +11 -0
  31. package/cli/generate_keys.mjs +66 -0
  32. package/cli/run.mjs +308 -0
  33. package/cli/utils.mjs +220 -0
  34. package/dist/index.cjs +1282 -0
  35. package/dist/index.cjs.map +1 -0
  36. package/dist/index.d.mts +163 -0
  37. package/dist/index.d.ts +163 -0
  38. package/dist/index.mjs +1018 -0
  39. package/dist/index.mjs.map +1 -0
  40. package/package.json +124 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/binding/NodeRgbLibBinding.ts","../src/crypto/signer.ts","../src/signer/NodeSigner.ts","../src/wallet/wallet-manager.ts","../src/utexo/restore.ts","../src/utexo/utexo-wallet.ts","../src/utils/environment.ts"],"names":["fs","path","wallet","pstb","ValidationError","normalizeNetwork","WalletError"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * NodeRgbLibBinding — Node SDK implementation of IRgbLibBinding.\n *\n * Wraps the @utexo/rgb-lib napi binding, translates raw rgb-lib types to\n * canonical wallet-model.ts types, and satisfies IRgbLibBinding so it can\n * be injected directly into BaseWalletManager.\n */\nimport * as path from 'path';\n\nimport * as fs from 'fs';\nimport {\n DEFAULT_TRANSPORT_ENDPOINTS,\n DEFAULT_INDEXER_URLS,\n} from '@utexo/rgb-sdk-core';\nimport {\n Unspent as RawUnspent,\n DecodeRgbInvoiceResponse,\n} from '../types/rgb-model';\nimport {\n ValidationError,\n WalletError,\n normalizeNetwork,\n logger,\n} from '@utexo/rgb-sdk-core';\nimport type { Network } from '../crypto/types';\n// Use default import for CommonJS compatibility in ESM\nimport rgblib from '@utexo/rgb-lib';\nimport type { IRgbLibBinding } from '@utexo/rgb-sdk-core';\nimport {\n Transfer,\n Transaction,\n ListAssets,\n AssetBalance,\n AssetIfa,\n AssetNIA,\n BtcBalance,\n Unspent,\n InvoiceData,\n CreateUtxosEndRequestModel,\n SendAssetBeginRequestModel,\n CreateUtxosBeginRequestModel,\n SendAssetEndRequestModel,\n SendResult,\n SendBtcBeginRequestModel,\n SendBtcEndRequestModel,\n GetFeeEstimationRequestModel,\n GetFeeEstimationResponse,\n InvoiceRequest,\n InvoiceReceiveData,\n IssueAssetIfaRequestModel,\n InflateAssetIfaRequestModel,\n InflateEndRequestModel,\n OperationResult,\n FailTransfersRequest,\n WalletBackupResponse,\n WalletRestoreResponse,\n RecipientMap,\n VssBackupConfig,\n VssBackupInfo,\n AssignmentType,\n Assignment,\n AssetSchema,\n BitcoinNetwork,\n} from '@utexo/rgb-sdk-core';\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 utexo: 'Signet',\n regtest: 'Regtest',\n };\n const networkStr = String(network).toLowerCase();\n return networkMap[networkStr] || 'Regtest';\n}\n\nexport interface RgbLibGeneratedKeys {\n mnemonic: string;\n xpub: string;\n accountXpubVanilla: string;\n accountXpubColored: string;\n masterFingerprint: string;\n}\n\nexport const generateKeys = (\n network: string = 'regtest'\n): RgbLibGeneratedKeys => {\n return rgblib.generateKeys(mapNetworkToRgbLib(network));\n};\n\nexport const restoreWallet = (params: {\n backupFilePath: string;\n password: string;\n dataDir: string;\n}): WalletRestoreResponse => {\n const { backupFilePath, password, dataDir } = params;\n\n if (!fs.existsSync(backupFilePath)) {\n throw new ValidationError('Backup file not found', 'backup');\n }\n\n if (!fs.existsSync(dataDir)) {\n throw new ValidationError(\n `Restore directory does not exist: ${dataDir}`,\n 'restoreDir'\n );\n }\n\n rgblib.restoreBackup(backupFilePath, password, dataDir);\n\n return {\n message: 'Wallet restored successfully',\n };\n};\n\n/**\n * Restore a wallet from a VSS backup into a target directory.\n * Returns a message indicating the restored wallet path.\n */\nexport const restoreFromVss = (params: {\n config: VssBackupConfig;\n targetDir: string;\n}): WalletRestoreResponse & { walletPath: string } => {\n const anyLib: any = rgblib as any;\n if (typeof anyLib.restoreFromVss !== 'function') {\n throw new WalletError(\n 'VSS restore is not available in the current rgb-lib build.'\n );\n }\n\n if (!params.targetDir) {\n throw new ValidationError('targetDir is required', 'targetDir');\n }\n\n const { config, targetDir } = params;\n // Native binding expects snake_case: server_url, store_id, signing_key\n const mappedConfig: any = {\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n };\n\n const walletPath: string = anyLib.restoreFromVss(mappedConfig, targetDir);\n return {\n message: 'Wallet restored from VSS successfully',\n walletPath,\n };\n};\n\n/**\n * RGB Lib Client class - Local implementation using rgb-lib\n */\nexport class NodeRgbLibBinding implements IRgbLibBinding {\n private wallet: any;\n private online: any | null = null;\n private readonly xpubVan: string;\n private readonly xpubCol: string;\n private readonly masterFingerprint: string;\n private readonly network: Network;\n private readonly originalNetwork: string; // Preserve original input for rgb-lib mapping\n private readonly dataDir: string;\n private readonly transportEndpoint: string;\n private readonly indexerUrl: string;\n\n constructor(params: {\n xpubVan: string;\n xpubCol: string;\n masterFingerprint: string;\n dataDir: string;\n network: string;\n transportEndpoint?: string;\n indexerUrl?: string;\n }) {\n this.xpubVan = params.xpubVan;\n this.xpubCol = params.xpubCol;\n this.masterFingerprint = params.masterFingerprint;\n this.originalNetwork = params.network;\n this.network = normalizeNetwork(this.originalNetwork);\n\n this.dataDir = params.dataDir;\n this.transportEndpoint =\n params.transportEndpoint ||\n DEFAULT_TRANSPORT_ENDPOINTS[this.network] ||\n DEFAULT_TRANSPORT_ENDPOINTS.signet;\n\n if (params.indexerUrl) {\n this.indexerUrl = params.indexerUrl;\n } else {\n this.indexerUrl =\n DEFAULT_INDEXER_URLS[this.network] || DEFAULT_INDEXER_URLS.signet;\n }\n\n if (!fs.existsSync(this.dataDir)) {\n fs.mkdirSync(this.dataDir, { recursive: true });\n }\n\n const walletData = {\n dataDir: this.dataDir,\n bitcoinNetwork: mapNetworkToRgbLib(this.originalNetwork),\n databaseType: rgblib.DatabaseType.Sqlite,\n accountXpubVanilla: this.xpubVan,\n accountXpubColored: this.xpubCol,\n masterFingerprint: this.masterFingerprint,\n maxAllocationsPerUtxo: '1',\n vanillaKeychain: '0',\n supportedSchemas: [\n rgblib.AssetSchema.Cfa,\n rgblib.AssetSchema.Nia,\n rgblib.AssetSchema.Uda,\n ],\n };\n\n try {\n this.wallet = new rgblib.Wallet(new rgblib.WalletData(walletData));\n } catch (error) {\n throw new WalletError(\n 'Failed to initialize rgb-lib wallet',\n undefined,\n error as Error\n );\n }\n }\n\n /**\n * Ensure online connection is established\n */\n private ensureOnline(): void {\n if (this.online) {\n return;\n }\n\n try {\n this.online = this.wallet.goOnline(false, this.indexerUrl);\n } catch (error) {\n throw new WalletError(\n 'Failed to establish online connection',\n undefined,\n error as Error\n );\n }\n }\n\n /**\n * Get online object, creating it if needed\n */\n getOnline(): any {\n this.ensureOnline();\n return this.online;\n }\n\n registerWallet(): { address: string; btcBalance: BtcBalance } {\n const online = this.getOnline();\n const address = this.wallet.getAddress();\n const btcBalance = this.wallet.getBtcBalance(online, false);\n return {\n address,\n btcBalance,\n };\n }\n\n async getBtcBalance(): Promise<BtcBalance> {\n const online = this.getOnline();\n return this.wallet.getBtcBalance(online, false);\n }\n\n async getAddress(): Promise<string> {\n return this.wallet.getAddress();\n }\n\n listUnspents(): Promise<Unspent[]> {\n const online = this.getOnline();\n const raw: RawUnspent[] = this.wallet.listUnspents(online, false, false);\n return Promise.resolve(\n raw.map((unspent) => ({\n utxo: {\n ...unspent.utxo,\n exists: (unspent.utxo as any).exists ?? true,\n },\n rgbAllocations: unspent.rgbAllocations.map((allocation) => {\n const assignmentKeys = Object.keys(allocation.assignment);\n const assignmentType = assignmentKeys[0] as\n | AssignmentType\n | undefined;\n const assignment: Assignment = {\n type: assignmentType ?? 'Any',\n amount:\n assignmentType && allocation.assignment[assignmentType]\n ? Number(allocation.assignment[assignmentType])\n : undefined,\n };\n return {\n assetId: allocation.assetId,\n assignment,\n settled: allocation.settled,\n };\n }),\n pendingBlinded: (unspent as any).pendingBlinded ?? 0,\n }))\n );\n }\n\n async createUtxosBegin(\n params: CreateUtxosBeginRequestModel\n ): Promise<string> {\n const online = this.getOnline();\n const upTo = params.upTo ?? false;\n const num = params.num !== undefined ? String(params.num) : null;\n const size = params.size !== undefined ? String(params.size) : null;\n const feeRate = params.feeRate ? String(params.feeRate) : '1';\n const skipSync = false;\n\n return this.wallet.createUtxosBegin(\n online,\n upTo,\n num,\n size,\n feeRate,\n skipSync\n );\n }\n\n async createUtxosEnd(params: CreateUtxosEndRequestModel): Promise<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 async sendBegin(params: SendAssetBeginRequestModel): Promise<string> {\n const online = this.getOnline();\n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const donation = params.donation ?? false;\n\n let assetId: string | undefined = params.assetId;\n let amount: number | undefined = params.amount;\n let recipientId: string | undefined;\n let transportEndpoints: string[] = [];\n let witnessData: { amountSat: string; blinding?: number | null } | null =\n null;\n if (params.witnessData && params.witnessData.amountSat) {\n witnessData = {\n amountSat: String(params.witnessData.amountSat),\n blinding: params.witnessData.blinding\n ? Number(params.witnessData.blinding)\n : null,\n };\n }\n if (params.invoice) {\n const invoiceData = this.decodeRGBInvoiceRaw({ invoice: params.invoice });\n recipientId = invoiceData.recipientId;\n transportEndpoints = invoiceData.transportEndpoints;\n }\n\n if (transportEndpoints.length === 0) {\n transportEndpoints = [this.transportEndpoint];\n }\n\n if (!assetId) {\n throw new ValidationError(\n 'asset_id is required for send operation',\n 'asset_id'\n );\n }\n\n if (!recipientId) {\n throw new ValidationError(\n 'Could not extract recipient_id from invoice',\n 'invoice'\n );\n }\n\n if (!amount) {\n throw new ValidationError(\n 'amount is required for send operation',\n 'amount'\n );\n }\n\n const assignment = { Fungible: amount };\n const recipientMap: Record<string, any[]> = {\n [assetId]: [\n {\n recipientId: recipientId,\n witnessData: witnessData,\n assignment: assignment,\n transportEndpoints: transportEndpoints,\n },\n ],\n };\n const psbt = this.wallet.sendBegin(\n online,\n recipientMap,\n donation,\n feeRate,\n minConfirmations\n );\n\n return psbt;\n }\n\n /**\n * Batch send: accepts an already-built recipientMap and calls sendBegin.\n */\n async sendBeginBatch(params: {\n recipientMap: RecipientMap;\n feeRate?: number;\n minConfirmations?: number;\n donation?: boolean;\n }): Promise<string> {\n const online = this.getOnline();\n const feeRate = String(params.feeRate ?? 1);\n const minConfirmations = String(params.minConfirmations ?? 1);\n const donation = params.donation ?? true;\n const { recipientMap } = params;\n\n if (!recipientMap || typeof recipientMap !== 'object') {\n throw new ValidationError(\n 'recipientMap is required and must be a non-empty object',\n 'recipientMap'\n );\n }\n const assetIds = Object.keys(recipientMap);\n if (assetIds.length === 0) {\n throw new ValidationError(\n 'recipientMap must contain at least one asset id',\n 'recipientMap'\n );\n }\n for (const assetId of assetIds) {\n const recipients = recipientMap[assetId];\n if (!Array.isArray(recipients) || recipients.length === 0) {\n throw new ValidationError(\n `recipientMap[\"${assetId}\"] must be a non-empty array of recipients`,\n 'recipientMap'\n );\n }\n }\n\n const psbt = this.wallet.sendBegin(\n online,\n recipientMap,\n donation,\n feeRate,\n minConfirmations\n );\n\n return psbt;\n }\n\n async sendEnd(params: SendAssetEndRequestModel): Promise<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 async sendBtcBegin(params: SendBtcBeginRequestModel): Promise<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 async sendBtcEnd(params: SendBtcEndRequestModel): Promise<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 async getFeeEstimation(\n params: GetFeeEstimationRequestModel\n ): Promise<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 logger.warn(\n 'rgb-lib estimation fee are not available, using default fee rate 2'\n );\n return 2 as GetFeeEstimationResponse;\n }\n }\n\n async blindReceive(params: InvoiceRequest): Promise<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 const raw = this.wallet.blindReceive(\n assetId,\n assignment,\n durationSeconds,\n transportEndpoints,\n minConfirmations\n );\n return {\n invoice: raw.invoice,\n recipientId: raw.recipientId,\n expirationTimestamp: raw.expirationTimestamp ?? null,\n batchTransferIdx: raw.batchTransferIdx,\n };\n }\n\n async witnessReceive(params: InvoiceRequest): Promise<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 const raw = this.wallet.witnessReceive(\n assetId,\n assignment,\n durationSeconds,\n transportEndpoints,\n minConfirmations\n );\n return {\n invoice: raw.invoice,\n recipientId: raw.recipientId,\n expirationTimestamp: raw.expirationTimestamp ?? null,\n batchTransferIdx: raw.batchTransferIdx,\n };\n }\n\n async getAssetBalance(asset_id: string): Promise<AssetBalance> {\n const balance = this.wallet.getAssetBalance(asset_id);\n return {\n settled: balance.settled ?? 0,\n future: balance.future ?? 0,\n spendable: balance.spendable ?? 0,\n offchainOutbound: balance.offchainOutbound ?? 0,\n offchainInbound: balance.offchainInbound ?? 0,\n };\n }\n\n async issueAssetNia(params: {\n ticker: string;\n name: string;\n amounts: number[];\n precision: number;\n }): Promise<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 async issueAssetIfa(_params: IssueAssetIfaRequestModel): Promise<AssetIfa> {\n throw new ValidationError(\n 'issueAssetIfa is not fully supported in rgb-lib. Use RGB Node server for IFA assets.',\n 'asset'\n );\n }\n\n async inflateBegin(_params: InflateAssetIfaRequestModel): Promise<string> {\n throw new ValidationError(\n 'inflateBegin is not fully supported in rgb-lib. Use RGB Node server for inflation operations.',\n 'asset'\n );\n }\n\n async inflateEnd(_params: InflateEndRequestModel): Promise<OperationResult> {\n throw new ValidationError(\n 'inflateEnd is not fully supported in rgb-lib. Use RGB Node server for inflation operations.',\n 'asset'\n );\n }\n\n async listAssets(): Promise<ListAssets> {\n const filterAssetSchemas: string[] = [];\n return this.wallet.listAssets(filterAssetSchemas);\n }\n\n decodeRGBInvoiceRaw(params: { invoice: string }): DecodeRgbInvoiceResponse {\n const invoice = new rgblib.Invoice(params.invoice);\n try {\n return invoice.invoiceData();\n } finally {\n invoice.drop();\n }\n }\n\n async decodeRGBInvoice(params: { invoice: string }): Promise<InvoiceData> {\n const raw = this.decodeRGBInvoiceRaw(params);\n const assignmentKeys = Object.keys(raw.assignment);\n const assignmentType = assignmentKeys[0] as AssignmentType | undefined;\n const assignment: Assignment = {\n type: assignmentType ?? 'Any',\n amount:\n assignmentType && raw.assignment[assignmentType]\n ? Number(raw.assignment[assignmentType])\n : undefined,\n };\n return {\n invoice: params.invoice,\n recipientId: raw.recipientId,\n assetSchema: raw.assetSchema as AssetSchema | undefined,\n assetId: raw.assetId,\n network: raw.network as BitcoinNetwork,\n assignment,\n assignmentName: raw.assignmentName,\n expirationTimestamp: raw.expirationTimestamp ?? null,\n transportEndpoints: raw.transportEndpoints,\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 return 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 async listTransactions(): Promise<Transaction[]> {\n const online = this.getOnline();\n const skipSync = false;\n return this.wallet.listTransactions(online, skipSync);\n }\n\n async listTransfers(asset_id?: string): Promise<Transfer[]> {\n return this.wallet.listTransfers(asset_id ? asset_id : null);\n }\n\n async failTransfers(params: FailTransfersRequest): Promise<boolean> {\n const online = this.getOnline();\n const batchTransferIdx =\n params.batchTransferIdx !== undefined ? params.batchTransferIdx : null;\n const noAssetOnly = params.noAssetOnly ?? false;\n const skipSync = params.skipSync ?? false;\n\n return this.wallet.failTransfers(\n online,\n batchTransferIdx,\n noAssetOnly,\n skipSync\n );\n }\n\n deleteTransfers(params: {\n batchTransferIdx?: number;\n noAssetOnly?: boolean;\n }): boolean {\n const batchTransferIdx =\n params.batchTransferIdx !== undefined ? params.batchTransferIdx : null;\n const noAssetOnly = params.noAssetOnly ?? false;\n\n return this.wallet.deleteTransfers(batchTransferIdx, noAssetOnly);\n }\n\n syncWallet(): void {\n const online = this.getOnline();\n this.wallet.sync(online);\n }\n\n async createBackup(params: {\n backupPath: string;\n password: string;\n }): Promise<WalletBackupResponse> {\n if (!params.backupPath) {\n throw new ValidationError('backupPath is required', 'backupPath');\n }\n if (!params.password) {\n throw new ValidationError('password is required', 'password');\n }\n\n if (!fs.existsSync(params.backupPath)) {\n throw new ValidationError(\n `Backup directory does not exist: ${params.backupPath}`,\n 'backupPath'\n );\n }\n\n const fullBackupPath = path.join(\n params.backupPath,\n `${this.masterFingerprint}.backup`\n );\n this.wallet.backup(fullBackupPath, params.password);\n\n return {\n message: 'Backup created successfully',\n backupPath: fullBackupPath,\n };\n }\n\n /**\n * Ensure VSS backup support is available in the underlying rgb-lib bindings.\n * Returns the wallet instance and rgb-lib namespace as `any` for internal use.\n */\n private getVssBindingsOrThrow(methodName: 'vssBackup' | 'vssBackupInfo') {\n const walletAny: any = this.wallet;\n const anyLib: any = rgblib as any;\n if (\n !walletAny ||\n typeof anyLib.VssBackupClient !== 'function' ||\n typeof walletAny[methodName] !== 'function'\n ) {\n throw new WalletError(\n 'VSS backup is not available in the current rgb-lib build.'\n );\n }\n return { walletAny, anyLib };\n }\n\n /**\n * Configure VSS cloud backup for this wallet.\n */\n configureVssBackup(config: VssBackupConfig): void {\n const walletAny: any = this.wallet;\n if (!walletAny || typeof walletAny.configureVssBackup !== 'function') {\n throw new WalletError(\n 'VSS backup is not available in the current rgb-lib build.'\n );\n }\n\n // Native binding expects snake_case: server_url, store_id, signing_key\n const mappedConfig: any = {\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n };\n if (config.encryptionEnabled !== undefined) {\n mappedConfig.encryptionEnabled = config.encryptionEnabled;\n }\n if (config.autoBackup !== undefined) {\n mappedConfig.autoBackup = config.autoBackup;\n }\n if (config.backupMode !== undefined) {\n mappedConfig.backupMode = config.backupMode;\n }\n\n walletAny.configureVssBackup(mappedConfig);\n }\n\n /**\n * Disable automatic VSS backup for this wallet.\n */\n disableVssAutoBackup(): void {\n const walletAny: any = this.wallet;\n if (!walletAny || typeof walletAny.disableVssAutoBackup !== 'function') {\n throw new WalletError(\n 'VSS backup is not available in the current rgb-lib build.'\n );\n }\n walletAny.disableVssAutoBackup();\n }\n\n /**\n * Trigger a VSS backup immediately using a one-off client created from config.\n * Returns the server version of the stored backup.\n */\n async vssBackup(config: VssBackupConfig): Promise<number> {\n const { walletAny, anyLib } = this.getVssBindingsOrThrow('vssBackup');\n\n const client = new anyLib.VssBackupClient({\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n });\n\n try {\n const version: number = walletAny.vssBackup(client);\n return version;\n } finally {\n if (typeof (client as any).drop === 'function') {\n (client as any).drop();\n }\n }\n }\n\n /**\n * Get VSS backup status information for this wallet using a one-off client.\n */\n async vssBackupInfo(config: VssBackupConfig): Promise<VssBackupInfo> {\n const { walletAny, anyLib } = this.getVssBindingsOrThrow('vssBackupInfo');\n\n const client = new anyLib.VssBackupClient({\n server_url: config.serverUrl,\n store_id: config.storeId,\n signing_key: config.signingKey,\n });\n\n try {\n const info: any = walletAny.vssBackupInfo(client);\n return {\n backupExists: Boolean(info.backupExists ?? info.backup_exists),\n serverVersion: info.serverVersion ?? info.server_version ?? null,\n backupRequired: Boolean(info.backupRequired ?? info.backup_required),\n };\n } finally {\n if (typeof (client as any).drop === 'function') {\n (client as any).drop();\n }\n }\n }\n /**\n * Cleanup resources\n */\n dispose(): void {\n this.dropWallet();\n }\n}\n","// RGB PSBT Signer — BDK-based signing for rgb-lib PSBTs.\n// Handles both create_utxo_begin and send_begin PSBT types.\n\nimport { Psbt } from 'bitcoinjs-lib';\nimport * as bdkNode from '@bitcoindevkit/bdk-wallet-node';\nimport {\n ValidationError,\n CryptoError,\n validateMnemonic,\n validatePsbt,\n normalizeNetwork,\n calculateMasterFingerprint,\n getNetworkVersions,\n normalizeSeedBuffer,\n normalizeSeedInput,\n bip39,\n bip32Factory,\n detectPsbtType,\n deriveDescriptors,\n} from '@utexo/rgb-sdk-core';\nimport type { Network, PsbtType, BIP32Interface } from '@utexo/rgb-sdk-core';\nimport type { BDKWallet, BDKPsbt, BDKNetwork, BDKSignOptions } from './types';\nimport type { EstimateFeeResult } from '@utexo/rgb-sdk-core';\n\nexport type {\n Network,\n PsbtType,\n NetworkVersions,\n Descriptors,\n} from '@utexo/rgb-sdk-core';\n\nconst bdk = bdkNode as unknown as import('./types').BDKModule;\n\nexport interface SignPsbtOptions {\n signOptions?: BDKSignOptions;\n}\n\nasync function signPsbtFromSeedInternal(\n seed: Buffer | Uint8Array,\n psbtBase64: string,\n network: Network,\n options: SignPsbtOptions\n): Promise<string> {\n validatePsbt(psbtBase64, 'psbtBase64');\n\n let rootNode: BIP32Interface;\n try {\n rootNode = bip32Factory().fromSeed(\n normalizeSeedBuffer(seed),\n getNetworkVersions(network)\n );\n } catch (error) {\n throw new CryptoError(\n 'Failed to derive root node from seed',\n error as Error\n );\n }\n\n const fp = await calculateMasterFingerprint(rootNode);\n const psbtType = detectPsbtType(psbtBase64);\n // utexo is a UTEXO-specific network that shares BDK's signet parameters\n const bdkNetwork: Network = network === 'utexo' ? 'signet' : network;\n\n // Try signing with the detected descriptor type; fall back to the other if it fails.\n // No PSBT preprocessing needed — rgb-lib PSBTs already carry correct metadata.\n const trySign = (type: PsbtType): BDKPsbt => {\n const { external, internal } = deriveDescriptors(\n rootNode,\n fp,\n bdkNetwork,\n type\n );\n let wallet: BDKWallet;\n try {\n wallet = bdk.Wallet.create(bdkNetwork as BDKNetwork, external, internal);\n } catch (error) {\n throw new CryptoError('Failed to create BDK wallet', error as Error);\n }\n const pstb = bdk.Psbt.from_string(psbtBase64.trim());\n wallet.sign(pstb, options.signOptions || new bdk.SignOptions());\n return pstb;\n };\n\n let pstb: BDKPsbt;\n try {\n pstb = trySign(psbtType);\n } catch {\n const fallback: PsbtType =\n psbtType === 'create_utxo' ? 'send' : 'create_utxo';\n try {\n pstb = trySign(fallback);\n } catch (error) {\n throw new CryptoError(\n 'Failed to sign PSBT — both descriptor types failed',\n error as Error\n );\n }\n }\n\n return pstb.toString().trim();\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 validateMnemonic(mnemonic, 'mnemonic');\n let seed: Uint8Array;\n try {\n seed = bip39.mnemonicToSeedSync(mnemonic);\n } catch {\n throw new ValidationError('Invalid mnemonic format', 'mnemonic');\n }\n const normalizedNetwork = normalizeNetwork(network);\n return await signPsbtFromSeedInternal(\n seed,\n psbtBase64,\n normalizedNetwork,\n options\n );\n } catch (error) {\n if (error instanceof ValidationError || error instanceof CryptoError)\n throw error;\n throw new CryptoError(\n 'Unexpected error during PSBT signing',\n error as Error\n );\n }\n}\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 return signPsbtFromSeedInternal(\n normalizedSeed,\n psbtBase64,\n normalizedNetwork,\n options\n );\n}\n\nexport async function estimatePsbt(\n psbtBase64: string\n): Promise<EstimateFeeResult> {\n if (!psbtBase64) throw new ValidationError('psbt is required', 'psbt');\n try {\n const psbt = Psbt.fromBase64(psbtBase64.trim());\n return {\n fee: psbt.getFee(),\n feeRate: psbt.getFeeRate(),\n vbytes: psbt.extractTransaction().virtualSize(),\n };\n } catch {\n throw new ValidationError('Invalid PSBT provided', 'psbt');\n }\n}\n","/**\n * NodeSigner — implements ISigner for the Node SDK.\n *\n * Delegates to the existing signer.ts implementation which uses\n * bip32 npm + bitcoinjs-lib for PSBT preprocessing + BDK for signing.\n *\n * Phase F (crypto unification) will replace the underlying signer\n * implementation with @scure/bip32 + @scure/btc-signer + BDK,\n * making NodeSigner, RNSigner, and WASMSigner share identical logic.\n */\n\nimport type { ISigner } from '@utexo/rgb-sdk-core';\nimport type { Network, EstimateFeeResult } from '@utexo/rgb-sdk-core';\nimport { signMessage, verifyMessage } from '@utexo/rgb-sdk-core';\nimport { signPsbt, signPsbtFromSeed, estimatePsbt } from '../crypto/signer';\n\nexport class NodeSigner implements ISigner {\n async signPsbtWithMnemonic(\n mnemonic: string,\n psbt: string,\n network: Network\n ): Promise<string> {\n return signPsbt(mnemonic, psbt, network);\n }\n\n async signPsbtWithSeed(\n seed: Uint8Array,\n psbt: string,\n network: Network\n ): Promise<string> {\n return signPsbtFromSeed(seed, psbt, network);\n }\n\n async signMessage(params: {\n message: string | Uint8Array;\n seed: Uint8Array;\n network: Network;\n }): Promise<string> {\n return signMessage(params);\n }\n\n async verifyMessage(params: {\n message: string | Uint8Array;\n signature: string;\n accountXpub: string;\n network: Network;\n }): Promise<boolean> {\n return verifyMessage(params);\n }\n\n async estimateFee(psbt: string): Promise<EstimateFeeResult> {\n return estimatePsbt(psbt);\n }\n}\n","import { NodeRgbLibBinding, restoreWallet } from '../binding/NodeRgbLibBinding';\nimport * as IWalletModel from '@utexo/rgb-sdk-core';\nimport { ValidationError, WalletError } from '@utexo/rgb-sdk-core';\nimport { BaseWalletManager } from '@utexo/rgb-sdk-core';\nimport type { WalletInitParams } from '@utexo/rgb-sdk-core';\nimport { generateKeys } from '@utexo/rgb-sdk-core';\nimport { NodeSigner } from '../signer/NodeSigner';\nimport path from 'path';\n\nexport type { WalletInitParams };\n\n/**\n * Restore wallet from backup\n */\nexport const restoreFromBackup = (\n params: IWalletModel.RestoreWalletRequestModel\n): IWalletModel.WalletRestoreResponse => {\n const { backupFilePath, password, dataDir } = params;\n\n if (!backupFilePath) {\n throw new ValidationError('backup file is required', 'backup');\n }\n if (!password) {\n throw new ValidationError('password is required', 'password');\n }\n if (!dataDir) {\n throw new ValidationError('restore directory is required', 'restoreDir');\n }\n\n return restoreWallet({ backupFilePath, password, dataDir });\n};\n\n/**\n * Generate a new wallet with keys\n */\nexport const createWallet = async (network: string = 'regtest') => {\n return await generateKeys(network);\n};\n\n/**\n * Wallet Manager — concrete Node SDK implementation of BaseWalletManager.\n *\n * Phase 14: NodeRgbLibBinding implements IRgbLibBinding directly — no wrapper layer.\n * NodeSigner implements ISigner. Both are injected into BaseWalletManager,\n * eliminating ~35 abstract method overrides. Only initialize() and goOnline()\n * remain as Node-specific implementations.\n */\nexport class WalletManager extends BaseWalletManager {\n private readonly client: NodeRgbLibBinding;\n\n constructor(params: WalletInitParams) {\n const dataDir =\n params.dataDir ??\n path.join(\n process.cwd(),\n '.rgb-wallet',\n String(params.network ?? 'regtest'),\n params.masterFingerprint\n );\n\n const client = new NodeRgbLibBinding({\n xpubVan: params.xpubVan,\n xpubCol: params.xpubCol,\n masterFingerprint: params.masterFingerprint,\n network: String(params.network ?? 'regtest'),\n transportEndpoint: params.transportEndpoint,\n indexerUrl: params.indexerUrl,\n dataDir,\n });\n\n super(params, client, new NodeSigner());\n this.client = client;\n }\n\n async initialize(): Promise<void> {\n // No-op for Node SDK — wallet is ready after construction.\n }\n\n async goOnline(\n _indexerUrl: string,\n _skipConsistencyCheck?: boolean\n ): Promise<void> {\n this.client.getOnline();\n }\n\n /**\n * Register wallet with the network — Node-specific convenience method.\n * Not part of IWalletManager; used directly by UTEXOWallet and callers\n * that need the initial address + balance snapshot.\n */\n registerWallet(): { address: string; btcBalance: IWalletModel.BtcBalance } {\n return this.client.registerWallet();\n }\n}\n\n/**\n * Factory function to create a WalletManager instance\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\nlet _wallet: WalletManager | null = null;\n\nexport const wallet = new Proxy({} as WalletManager, {\n get(target, prop) {\n if (!_wallet) {\n throw new WalletError(\n 'The legacy singleton wallet instance is deprecated. ' +\n 'Please use `new WalletManager(params)` or `createWalletManager(params)` instead. ' +\n 'Example: const wallet = new WalletManager({ xpubVan, xpubCol, masterFingerprint, network, transportEndpoint, indexerUrl })'\n );\n }\n const value = (_wallet as any)[prop];\n return typeof value === 'function' ? value.bind(_wallet) : value;\n },\n});\n","/**\n * UTEXO wallet restore: VSS and file backup restore helpers.\n *\n * Pure crypto helpers (getBackupStoreId, buildVssConfigFromMnemonic) are\n * re-exported from @utexo/rgb-sdk-core. Node-specific (fs/path) helpers\n * stay here.\n */\n\nimport path from 'path';\nimport fs from 'fs';\nimport {\n getUtxoNetworkConfig,\n type UtxoNetworkPreset,\n DEFAULT_VSS_SERVER_URL,\n} from '@utexo/rgb-sdk-core';\nimport { restoreFromVss, restoreWallet } from '../binding/NodeRgbLibBinding';\nimport { ValidationError } from '@utexo/rgb-sdk-core';\nimport type { VssBackupConfig } from '@utexo/rgb-sdk-core';\nimport {\n getBackupStoreId,\n buildVssConfigFromMnemonic,\n} from '@utexo/rgb-sdk-core';\n\nexport { getBackupStoreId, buildVssConfigFromMnemonic };\n\n/** Backup file extension; used by createBackup and restore. */\nexport const BACKUP_FILE_SUFFIX = '.backup';\n/** Same naming as VSS: wallet_<fp>_layer1, wallet_<fp>_utexo */\nexport const LAYER1_BACKUP_SUFFIX = '_layer1.backup';\nexport const UTEXO_BACKUP_SUFFIX = '_utexo.backup';\n\nconst UTEXO_BACKUP_TMP_LAYER1 = '.layer1';\nconst UTEXO_BACKUP_TMP_UTEXO = '.utexo';\n\nexport interface PrepareUtxoBackupDirsResult {\n storeId: string;\n layer1TmpDir: string;\n utexoTmpDir: string;\n layer1FinalPath: string;\n utexoFinalPath: string;\n}\n\n/**\n * Prepare backup directory and temp dirs for UTEXO createBackup.\n */\nexport function prepareUtxoBackupDirs(\n backupPath: string,\n masterFingerprint: string\n): PrepareUtxoBackupDirsResult {\n const storeId = getBackupStoreId(masterFingerprint);\n if (!fs.existsSync(backupPath)) {\n fs.mkdirSync(backupPath, { recursive: true });\n }\n const layer1TmpDir = path.join(backupPath, UTEXO_BACKUP_TMP_LAYER1);\n const utexoTmpDir = path.join(backupPath, UTEXO_BACKUP_TMP_UTEXO);\n fs.mkdirSync(layer1TmpDir, { recursive: true });\n fs.mkdirSync(utexoTmpDir, { recursive: true });\n return {\n storeId,\n layer1TmpDir,\n utexoTmpDir,\n layer1FinalPath: path.join(\n backupPath,\n `${storeId}_layer1${BACKUP_FILE_SUFFIX}`\n ),\n utexoFinalPath: path.join(\n backupPath,\n `${storeId}_utexo${BACKUP_FILE_SUFFIX}`\n ),\n };\n}\n\n/**\n * Move backup files from temp dirs to final paths and remove temp dirs.\n */\nexport function finalizeUtxoBackupPaths(params: {\n layer1BackupPath: string;\n utexoBackupPath: string;\n layer1FinalPath: string;\n utexoFinalPath: string;\n layer1TmpDir: string;\n utexoTmpDir: string;\n}): void {\n const {\n layer1BackupPath,\n utexoBackupPath,\n layer1FinalPath,\n utexoFinalPath,\n layer1TmpDir,\n utexoTmpDir,\n } = params;\n fs.renameSync(layer1BackupPath, layer1FinalPath);\n fs.renameSync(utexoBackupPath, utexoFinalPath);\n fs.rmdirSync(layer1TmpDir);\n fs.rmdirSync(utexoTmpDir);\n}\n\n/**\n * Restore a UTEXOWallet from VSS by restoring both layer1 and utexo stores.\n */\nexport async function restoreUtxoWalletFromVss(params: {\n mnemonic: string;\n targetDir: string;\n config?: VssBackupConfig;\n networkPreset?: UtxoNetworkPreset;\n vssServerUrl?: string;\n}): Promise<{ layer1Path: string; utexoPath: string; targetDir: string }> {\n const {\n mnemonic,\n targetDir,\n config: providedConfig,\n networkPreset = 'testnet',\n vssServerUrl,\n } = params;\n if (!mnemonic || !mnemonic.trim()) {\n throw new ValidationError('mnemonic is required', 'mnemonic');\n }\n if (!targetDir) {\n throw new ValidationError('targetDir is required', 'targetDir');\n }\n const serverUrl = vssServerUrl ?? DEFAULT_VSS_SERVER_URL;\n const config =\n providedConfig ??\n (await buildVssConfigFromMnemonic(\n mnemonic.trim(),\n serverUrl,\n networkPreset\n ));\n const presetConfig = getUtxoNetworkConfig(networkPreset);\n const layer1Network = String(presetConfig.networkMap.mainnet);\n const utexoNetwork = String(presetConfig.networkMap.utexo);\n const masterFingerprint =\n config.storeId.replace(/^wallet_/, '') || config.storeId;\n const layer1Config: VssBackupConfig = {\n ...config,\n storeId: `${config.storeId}_layer1`,\n };\n const utexoConfig: VssBackupConfig = {\n ...config,\n storeId: `${config.storeId}_utexo`,\n };\n const { walletPath: layer1Path } = restoreFromVss({\n config: layer1Config,\n targetDir: path.join(targetDir, layer1Network, masterFingerprint),\n });\n const { walletPath: utexoPath } = restoreFromVss({\n config: utexoConfig,\n targetDir: path.join(targetDir, utexoNetwork, masterFingerprint),\n });\n return { layer1Path, utexoPath, targetDir };\n}\n\n/**\n * Restore a UTEXOWallet from a regular (file) backup created by UTEXOWallet.createBackup.\n */\nexport function restoreUtxoWalletFromBackup(params: {\n backupPath: string;\n password: string;\n targetDir: string;\n networkPreset?: UtxoNetworkPreset;\n}): { layer1Path: string; utexoPath: string; targetDir: string } {\n const { backupPath, password, targetDir, networkPreset = 'testnet' } = params;\n if (!backupPath || !password || !targetDir) {\n throw new ValidationError(\n 'backupPath, password, and targetDir are required',\n 'restoreUtxoWalletFromBackup'\n );\n }\n if (!fs.existsSync(backupPath) || !fs.statSync(backupPath).isDirectory()) {\n throw new ValidationError(\n 'backupPath must be an existing directory',\n 'backupPath'\n );\n }\n const files = fs.readdirSync(backupPath);\n const layer1File = files.find((f) => f.endsWith(LAYER1_BACKUP_SUFFIX));\n const utexoFile = files.find((f) => f.endsWith(UTEXO_BACKUP_SUFFIX));\n if (!layer1File || !utexoFile) {\n throw new ValidationError(\n `backupPath must contain wallet_<fp>_layer1.backup and wallet_<fp>_utexo.backup (from createBackup)`,\n 'backupPath'\n );\n }\n const masterFingerprint = layer1File\n .slice(0, -LAYER1_BACKUP_SUFFIX.length)\n .replace(/^wallet_/, '');\n const expectedUtexoFile = `wallet_${masterFingerprint}${UTEXO_BACKUP_SUFFIX}`;\n if (utexoFile !== expectedUtexoFile) {\n throw new ValidationError(\n `Layer1 and utexo backup filenames must share the same wallet id (expected ${expectedUtexoFile})`,\n 'backupPath'\n );\n }\n const layer1BackupFile = path.join(backupPath, layer1File);\n const utexoBackupFile = path.join(backupPath, utexoFile);\n if (!fs.existsSync(layer1BackupFile) || !fs.existsSync(utexoBackupFile)) {\n throw new ValidationError('Backup files not found', 'backupPath');\n }\n const presetConfig = getUtxoNetworkConfig(networkPreset);\n const layer1Network = String(presetConfig.networkMap.mainnet);\n const utexoNetwork = String(presetConfig.networkMap.utexo);\n const layer1DataDir = path.join(targetDir, layer1Network, masterFingerprint);\n const utexoDataDir = path.join(targetDir, utexoNetwork, masterFingerprint);\n for (const dir of [layer1DataDir, utexoDataDir]) {\n if (!fs.existsSync(path.dirname(dir))) {\n fs.mkdirSync(path.dirname(dir), { recursive: true });\n }\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n restoreWallet({\n backupFilePath: layer1BackupFile,\n password,\n dataDir: layer1DataDir,\n });\n restoreWallet({\n backupFilePath: utexoBackupFile,\n password,\n dataDir: utexoDataDir,\n });\n return {\n layer1Path: layer1DataDir,\n utexoPath: utexoDataDir,\n targetDir,\n };\n}\n","/**\n * UTEXOWallet — Node SDK concrete implementation of UTEXOWalletCore.\n *\n * Extends UTEXOWalletCore from @utexo/rgb-sdk-core, overriding:\n * - initialize(): creates Node WalletManager instances\n * - createBackup(): dual backup (layer1 + utexo files)\n */\n\nimport { UTEXOWalletCore } from '@utexo/rgb-sdk-core';\nimport { WalletManager } from '../wallet/wallet-manager';\nimport type { WalletBackupResponse } from '@utexo/rgb-sdk-core';\nimport { ValidationError } from '@utexo/rgb-sdk-core';\nimport path from 'path';\nimport { prepareUtxoBackupDirs, finalizeUtxoBackupPaths } from './restore';\n\nexport { UTEXOProtocol } from '@utexo/rgb-sdk-core';\nexport type { IUTEXOProtocol } from '@utexo/rgb-sdk-core';\n\nexport class UTEXOWallet extends UTEXOWalletCore {\n private _masterFingerprint: string | null = null;\n\n async initialize(): Promise<void> {\n const layer1Keys = await this.derivePublicKeys(this.networkMap.mainnet);\n const utexoKeys = await this.derivePublicKeys(this.networkMap.utexo);\n this._masterFingerprint = utexoKeys.masterFingerprint;\n const fp = utexoKeys.masterFingerprint;\n const dataDir = this.options.dataDir;\n\n this.utexoWallet = new WalletManager({\n xpubVan: utexoKeys.accountXpubVanilla,\n xpubCol: utexoKeys.accountXpubColored,\n masterFingerprint: utexoKeys.masterFingerprint,\n network: this.networkMap.utexo,\n mnemonic: this.mnemonicOrSeed as string,\n dataDir: dataDir\n ? path.join(dataDir, String(this.networkMap.utexo), fp)\n : undefined,\n });\n\n this.layer1Wallet = new WalletManager({\n xpubVan: layer1Keys.accountXpubVanilla,\n xpubCol: layer1Keys.accountXpubColored,\n masterFingerprint: layer1Keys.masterFingerprint,\n network: this.networkMap.mainnet,\n mnemonic: this.mnemonicOrSeed as string,\n dataDir: dataDir\n ? path.join(dataDir, String(this.networkMap.mainnet), fp)\n : undefined,\n });\n }\n\n /**\n * Create backup for both layer1 and utexo stores in one folder.\n * Writes backupPath/wallet_{masterFingerprint}_layer1.backup and\n * backupPath/wallet_{masterFingerprint}_utexo.backup\n */\n override async createBackup(params: {\n backupPath: string;\n password: string;\n }): Promise<\n WalletBackupResponse & { layer1BackupPath: string; utexoBackupPath: string }\n > {\n this.ensureInitialized();\n const { backupPath, password } = params;\n if (!backupPath || !password) {\n throw new ValidationError(\n 'backupPath and password are required',\n 'createBackup'\n );\n }\n const fp = this._masterFingerprint!;\n const { layer1TmpDir, utexoTmpDir, layer1FinalPath, utexoFinalPath } =\n prepareUtxoBackupDirs(backupPath, fp);\n const layer1Result = await this.layer1Wallet!.createBackup({\n backupPath: layer1TmpDir,\n password,\n });\n const utexoResult = await this.utexoWallet!.createBackup({\n backupPath: utexoTmpDir,\n password,\n });\n finalizeUtxoBackupPaths({\n layer1BackupPath: layer1Result.backupPath,\n utexoBackupPath: utexoResult.backupPath,\n layer1FinalPath,\n utexoFinalPath,\n layer1TmpDir,\n utexoTmpDir,\n });\n return {\n message: 'Backup created successfully (layer1 + utexo)',\n backupPath,\n layer1BackupPath: layer1FinalPath,\n utexoBackupPath: utexoFinalPath,\n };\n }\n}\n","export function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,124 @@
1
+ {
2
+ "name": "@utexo/rgb-sdk",
3
+ "version": "1.0.0-beta.8",
4
+ "bin": {
5
+ "utexo": "cli/run.mjs"
6
+ },
7
+ "devDependencies": {
8
+ "@eslint/js": "^9.35.0",
9
+ "@types/jest": "^30.0.0",
10
+ "@types/node": "^22.17.2",
11
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
12
+ "@typescript-eslint/parser": "^8.0.0",
13
+ "eslint": "^9.35.0",
14
+ "eslint-config-prettier": "^10.1.8",
15
+ "eslint-plugin-prettier": "^5.5.4",
16
+ "jest": "^30.2.0",
17
+ "prettier": "^3.0.0",
18
+ "ts-jest": "^29.4.5",
19
+ "tsup": "^8.5.0",
20
+ "typescript": "^5.9.2"
21
+ },
22
+ "type": "commonjs",
23
+ "scripts": {
24
+ "prettier": "prettier --write \"**/*.{js,ts,tsx}\"",
25
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
26
+ "dev": "tsc -w",
27
+ "build": "tsup",
28
+ "test": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest",
29
+ "test:signet": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.signet.config.js --runInBand --verbose",
30
+ "test:signet:smoke": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.signet.config.js --runInBand --verbose --runTestsByPath tests/signet/offline-receiver-smoke.test.ts",
31
+ "test:regtest": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose",
32
+ "test:regtest:relay-only": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/relay-only-mode.test.ts",
33
+ "test:regtest:upload-guard": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/upload-guard.test.ts",
34
+ "test:regtest:smoke": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/offline-receiver.test.ts",
35
+ "test:regtest:offline-delayed-refresh": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/offline-receiver-delayed-refresh.test.ts",
36
+ "test:regtest:ack-guard": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/ack-guard.test.ts",
37
+ "test:regtest:witness": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/witness-receiver.test.ts",
38
+ "test:regtest:nack": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/invalid-consignment.test.ts",
39
+ "test:watch": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --watch",
40
+ "test:coverage": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
41
+ "version:patch": "npm version patch && git push && git push --tags && npm publish --access public",
42
+ "version:minor": "npm version minor && git push && git push --tags && npm publish --access public",
43
+ "version:major": "npm version major && git push && git push --tags && npm publish --access public",
44
+ "example:complete": "node --experimental-wasm-modules example-flow.mjs",
45
+ "example:utexo": "node example-utexo-flow.mjs",
46
+ "example:new-wallet": "node examples/new-wallet.mjs",
47
+ "example:create-utxos-asset": "node examples/create-utxos-asset.mjs",
48
+ "example:read-wallet": "node examples/read-wallet.mjs",
49
+ "example:transfer": "node examples/transfer.mjs",
50
+ "example:onchain": "node examples/onchain-flow.mjs",
51
+ "example:vss": "node examples/utexo-vss-backup-restore.mjs",
52
+ "example:file-backup": "node examples/utexo-file-backup-restore.mjs",
53
+ "utexo": "node cli/run.mjs",
54
+ "generate_keys": "node cli/generate_keys.mjs",
55
+ "test:signet:witness": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.signet.config.js --runInBand --verbose --runTestsByPath tests/signet/witness-receiver-smoke.test.ts",
56
+ "test:signet:convergence": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.signet.config.js --runInBand --verbose --runTestsByPath tests/signet/offline-receiver-refresh-convergence.test.ts",
57
+ "test:signet:two-refresh": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.signet.config.js --runInBand --verbose --runTestsByPath tests/signet/offline-receiver-two-refresh-convergence.test.ts",
58
+ "test:signet:sequential": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.signet.config.js --runInBand --verbose --runTestsByPath tests/signet/sequential-receives-smoke.test.ts",
59
+ "test:regtest:preconfirm": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/pre-confirmation-gating.test.ts",
60
+ "test:regtest:relay-witness": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/relay-only-witness-mode.test.ts",
61
+ "test:regtest:roundtrip": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/real-consignment-roundtrip.test.ts",
62
+ "test:regtest:expired": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/expired-invoice.test.ts",
63
+ "test:regtest:donation-false": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/donation-false.test.ts",
64
+ "test:regtest:proxy-down": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/proxy-down-during-send.test.ts",
65
+ "test:regtest:restart-mid": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/restart-mid-flow.test.ts",
66
+ "test:regtest:send-batch": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/send-batch-same-receiver.test.ts",
67
+ "test:regtest:sequential-sends": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/sequential-sends-same-receiver.test.ts",
68
+ "test:regtest:restart-after-ack": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/restart-after-ack-before-settled.test.ts",
69
+ "test:regtest:expiry-race": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/expiry-race-near-boundary.test.ts",
70
+ "test:regtest:witness-donation-false": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/witness-donation-false.test.ts",
71
+ "test:regtest:sequential-receives": "npm run build && NODE_OPTIONS='--experimental-vm-modules' jest --config jest.regtest.config.js --runInBand --verbose --runTestsByPath tests/regtest/sequential-receives-same-wallet.test.ts"
72
+ },
73
+ "files": [
74
+ "dist",
75
+ "README.md",
76
+ "cli"
77
+ ],
78
+ "exports": {
79
+ ".": {
80
+ "types": "./dist/index.d.ts",
81
+ "import": "./dist/index.mjs",
82
+ "require": "./dist/index.cjs"
83
+ }
84
+ },
85
+ "main": "./dist/index.cjs",
86
+ "module": "./dist/index.mjs",
87
+ "types": "./dist/index.d.ts",
88
+ "dependencies": {
89
+ "@bitcoindevkit/bdk-wallet-node": "^0.2.0",
90
+ "@noble/hashes": "^2.0.1",
91
+ "@scure/btc-signer": "^2.0.1",
92
+ "@utexo/rgb-lib": "0.3.0-beta.13",
93
+ "@utexo/rgb-sdk-core": "1.0.0-beta.2",
94
+ "axios": "^1.8.4",
95
+ "bare-node-runtime": "^1.1.4",
96
+ "bitcoinjs-lib": "^6.1.7",
97
+ "form-data": "^4.0.0",
98
+ "ripemd160": "^2.0.3"
99
+ },
100
+ "optionalDependencies": {
101
+ "@utexo/rgb-lib-darwin-arm64": "0.3.0-beta.13",
102
+ "@utexo/rgb-lib-linux-arm64": "0.3.0-beta.13",
103
+ "@utexo/rgb-lib-linux-x64": "0.3.0-beta.13"
104
+ },
105
+ "keywords": [
106
+ "rgb",
107
+ "rgb-protocol",
108
+ "bitcoin",
109
+ "sdk",
110
+ "bdk",
111
+ "wasm",
112
+ "taproot",
113
+ "assets",
114
+ "blockchain"
115
+ ],
116
+ "license": "MIT",
117
+ "prettier": {
118
+ "quoteProps": "consistent",
119
+ "singleQuote": true,
120
+ "tabWidth": 2,
121
+ "trailingComma": "es5",
122
+ "useTabs": false
123
+ }
124
+ }