// Check available recovery methods for all chains
do {
let methods = try await portal.availableRecoveryMethods()
print("Available recovery methods: \(methods)")
// Check if specific backup method is available
if methods.contains(.Password) {
print("Password recovery is available")
}
if methods.contains(.GoogleDrive) {
print("Google Drive recovery is available")
}
} catch {
print("Error checking recovery methods: \(error)")
}
// Check recovery methods for specific chain
do {
// Check Ethereum mainnet
let ethMethods = try await portal.availableRecoveryMethods("eip155:1")
print("Available recovery methods for Ethereum: \(ethMethods)")
// Check Solana mainnet
let solMethods = try await portal.availableRecoveryMethods("solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp")
print("Available recovery methods for Solana: \(solMethods)")
} catch {
print("Error checking chain-specific recovery methods: \(error)")
}
// Complete example with recovery
do {
let methods = try await portal.availableRecoveryMethods()
for method in methods {
switch method {
case .Password:
// Attempt password recovery
try portal.setPassword("userPassword")
let recovered = try await portal.recoverWallet(.Password)
print("Recovered with password: \(recovered.ethereum)")
case .GoogleDrive:
// Attempt Google Drive recovery
let recovered = try await portal.recoverWallet(.GoogleDrive)
print("Recovered with Google Drive: \(recovered.ethereum)")
case .iCloud:
// Attempt iCloud recovery
let recovered = try await portal.recoverWallet(.iCloud)
print("Recovered with iCloud: \(recovered.ethereum)")
default:
print("Other recovery method available: \(method)")
}
}
} catch {
print("Error in recovery process: \(error)")
}