// Check if any wallet is recoverable
do {
let isRecoverable = try await portal.isWalletRecoverable()
if isRecoverable {
print("Wallet can be recovered")
} else {
print("No recovery methods available")
}
} catch {
print("Error checking recovery status: \(error)")
}
// Check specific chain wallet recovery
do {
// Check Ethereum wallet
let ethRecoverable = try await portal.isWalletRecoverable("eip155:1")
if ethRecoverable {
print("Ethereum wallet can be recovered")
}
// Check Solana wallet
let solRecoverable = try await portal.isWalletRecoverable("solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp")
if solRecoverable {
print("Solana wallet can be recovered")
}
} catch {
print("Error checking chain-specific recovery: \(error)")
}
// Complete example with recovery flow
do {
if try await portal.isWalletRecoverable() {
// Get available recovery methods
let methods = try await portal.availableRecoveryMethods()
// Try each available method
for method in methods {
do {
let recovered = try await portal.recoverWallet(method) { status in
print("Recovery status: \(status)")
}
print("Successfully recovered wallet using \(method)")
print("Ethereum address: \(recovered.ethereum)")
if let solanaAddress = recovered.solana {
print("Solana address: \(solanaAddress)")
}
break // Exit after successful recovery
} catch {
print("Failed to recover using \(method): \(error)")
continue // Try next method
}
}
} else {
print("No recovery methods available, need to create new wallet")
let newWallet = try await portal.createWallet()
print("Created new wallet")
}
} catch {
print("Error in recovery process: \(error)")
}