UNPKG

bigblocks

Version:

Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React

115 lines (114 loc) 3.72 kB
/** * Detects the type of a backup object based on its structure * Uses the same logic as bitcoin-backup's internal validation */ export function detectBackupType(backup) { if (!backup || typeof backup !== "object") { return null; } const data = backup; // OneSatBackup - check first as it has the most specific structure if (typeof data.ordPk === "string" && typeof data.payPk === "string" && typeof data.identityPk === "string") { return "OneSatBackup"; } // BapMasterBackup if (typeof data.xprv === "string" && typeof data.mnemonic === "string" && typeof data.ids === "string") { return "BapMasterBackup"; } // BapMemberBackup if (typeof data.wif === "string" && typeof data.id === "string") { return "BapMemberBackup"; } // BapMemberBackup (alternative format with derivedPrivateKey/identityKey) if (typeof data.derivedPrivateKey === "string" && typeof data.identityKey === "string") { return "BapMemberBackup"; } // WifBackup - check last as it's the most generic if (typeof data.wif === "string" && !data.id) { return "WifBackup"; } return null; } /** * Type guards using bitcoin-backup types */ export function isBapMasterBackup(backup) { return detectBackupType(backup) === "BapMasterBackup"; } export function isBapMemberBackup(backup) { return detectBackupType(backup) === "BapMemberBackup"; } export function isOneSatBackup(backup) { return detectBackupType(backup) === "OneSatBackup"; } export function isWifBackup(backup) { return detectBackupType(backup) === "WifBackup"; } /** * Validates if a backup type is allowed based on configuration */ export function isBackupTypeAllowed(backupType, allowedTypes) { return backupType !== null && allowedTypes.includes(backupType); } /** * Default backup type configuration * Excludes BapMasterBackup by default as requested */ export const DEFAULT_ALLOWED_BACKUP_TYPES = [ "BapMemberBackup", "OneSatBackup", "WifBackup", ]; /** * Gets user-friendly name for backup type */ export function getBackupTypeDisplayName(backupType) { switch (backupType) { case "BapMasterBackup": return "BAP Master Backup"; case "BapMemberBackup": return "BAP Member Backup"; case "OneSatBackup": return "1Sat Wallet Backup"; case "WifBackup": return "WIF Private Key"; default: return "Unknown Backup Type"; } } /** * Gets description for backup type */ export function getBackupTypeDescription(backupType) { switch (backupType) { case "BapMasterBackup": return "Complete identity with master keys and mnemonic phrase"; case "BapMemberBackup": return "Member identity with private key and ID"; case "OneSatBackup": return "Full wallet backup with payment, ordinal, and identity keys"; case "WifBackup": return "Simple private key in WIF format"; default: return "Unknown backup format"; } } /** * Creates an error message for unsupported backup types */ export function createUnsupportedBackupError(detectedType, allowedTypes, customMessage) { if (customMessage) { return customMessage; } if (!detectedType) { return "Invalid backup format. Please check your backup file and try again."; } const allowedNames = allowedTypes.map(getBackupTypeDisplayName).join(", "); const detectedName = getBackupTypeDisplayName(detectedType); return `${detectedName} is not supported. Supported backup types: ${allowedNames}`; }