bigblocks
Version:
Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React
115 lines (114 loc) • 3.72 kB
JavaScript
/**
* 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}`;
}