availableRecoveryMethods
Retrieves the list of available backup methods that can be used for wallet recovery.
Function Signature
public func availableRecoveryMethods(
_ forChainId: String? = nil
) async throws -> [BackupMethods]
Parameters
forChainId
: Optional chain identifier (e.g., "eip155:1" for Ethereum mainnet, "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" for Solana mainnet). If nil, returns backup methods from all wallets.
Returns
An array of BackupMethods
representing completed backups, which may include:
.GoogleDrive
: Google Drive backup.iCloud
: iCloud backup.Password
: Password-protected backup.Passkey
: Passkey backup.local
: Local backup
Throws
PortalClassError.clientNotAvailable
if the client is not initializedWhen a specific chainId is provided:
PortalClassError.unsupportedChainId
if the chain's namespace is not supportedPortalClassError.noWalletFoundForChain
if no wallet exists for the specified chain
Example Usage
// 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)")
}
Implementation Notes
The method only returns backup methods where the corresponding backup share pairs have a status of
.completed
Methods with incomplete or pending backups are excluded
For chain-specific queries, the method validates the chain ID format and namespace support
The function is useful for determining which recovery options to present to users
Related Documentation
For more information about recovery methods and chain support, see:
Last updated
Was this helpful?