useWallets
Manage user wallets, create new ones, switch between them, and handle wallet recovery.
Request
type Request = {
hook: 'useWallets',
params: [options?: WalletOptions]
}
type WalletOptions = {
chainId?: number
onSuccess?: (data: SetActiveWalletResult | CreateWalletResult) => void
onError?: (error: OpenfortError) => void
onSettled?: (data: SetActiveWalletResult | CreateWalletResult | undefined | null, error: OpenfortError | null) => void
throwOnError?: boolean
}
type OpenfortError = {
message: string
type: OpenfortErrorType
data: { [key: string]: any }
name: string
}
enum OpenfortErrorType {
AUTHENTICATION_ERROR = "AUTHENTICATION_ERROR",
WALLET_ERROR = "WALLET_ERROR",
CONFIGURATION_ERROR = "CONFIGURATION_ERROR",
VALIDATION_ERROR = "VALIDATION_ERROR",
}Response
type Response = UseWalletsReturn
type UseWalletsReturn = WalletFlowFlags & {
wallets: UserWallet[]
activeWallet: UserWallet | null
setActiveWallet(options?: SetActiveWalletOptions): Promise<SetActiveWalletResult>
createWallet(options?: CreateWalletOptions): Promise<CreateWalletResult>
setRecovery(options: SetRecoveryOptions): Promise<SetActiveWalletResult>
exportPrivateKey(): Promise<string>
}
type WalletFlowFlags = {
error?: OpenfortError
isError: boolean
isSuccess: boolean
isCreating: boolean
isConnecting: boolean
}
type UserWallet = {
address: string // Hex string
ownerAddress?: string
implementationType?: string
chainType: ChainTypeEnum
isActive?: boolean
isConnecting?: boolean
getProvider(): Promise<OpenfortEmbeddedEthereumWalletProvider>
}
type SetActiveWalletResult = {
error?: OpenfortError
wallet?: UserWallet
provider?: Provider
}
type CreateWalletResult = SetActiveWalletResult
type SetActiveWalletOptions = {
address?: string
chainId?: number
recoveryPassword?: string
onSuccess?: (data: SetActiveWalletResult) => void
onError?: (error: OpenfortError) => void
onSettled?: (data: SetActiveWalletResult | undefined | null, error: OpenfortError | null) => void
throwOnError?: boolean
}
type CreateWalletOptions = {
chainType?: ChainTypeEnum
chainId?: number
accountType?: AccountTypeEnum
recoveryPassword?: string
onSuccess?: (data: CreateWalletResult) => void
onError?: (error: OpenfortError) => void
onSettled?: (data: CreateWalletResult | undefined | null, error: OpenfortError | null) => void
throwOnError?: boolean
}
type SetRecoveryOptions = {
previousRecovery: RecoveryParams
newRecovery: RecoveryParams
onSuccess?: (data: SetActiveWalletResult) => void
onError?: (error: OpenfortError) => void
onSettled?: (data: SetActiveWalletResult | undefined | null, error: OpenfortError | null) => void
throwOnError?: boolean
}
type RecoveryParams = {
recoveryMethod: RecoveryMethod
password?: string
encryptionSession?: string
}
enum RecoveryMethod {
AUTOMATIC = "automatic",
PASSWORD = "password",
PASSKEY = "passkey",
}
type OpenfortEmbeddedEthereumWalletProvider = {
// EIP-1193 provider for interacting with the wallet
request(args: { method: string; params?: any[] }): Promise<any>
}
type Provider = {
// Provider type from openfort-js
url: string
chainId: number
}
enum ChainTypeEnum {
EVM = "EVM",
SVM = "SVM",
}
enum AccountTypeEnum {
SMART_ACCOUNT = "Smart Account",
EOA = "Externally Owned Account",
}Example
import { useWallets } from "@openfort/react-native"
function WalletManager() {
const {
wallets,
activeWallet,
setActiveWallet,
setRecovery,
createWallet,
exportPrivateKey,
isCreating,
isConnecting,
isError,
error,
} = useWallets({
throwOnError: true,
onSuccess: () => {},
onError: () => {},
onSettled: () => {}
})
const recover = (address: string) =>
setActiveWallet({ address, recoveryPassword: 'example' })
return null
}