Skip to main content

UnforgettableSDK Class

Complete API reference for the UnforgettableSDK class.

Constructor

new UnforgettableSDK(options)

Creates a new instance of the Unforgettable SDK.

Parameters:

NameTypeRequiredDescription
optionsUnforgettableSdkOptionsYesConfiguration options
import { UnforgettableSdk, RecoveryFactor } from '@rarimo/unforgettable-sdk'

const sdk = new UnforgettableSdk({
mode: 'create',
factors: [RecoveryFactor.Face, RecoveryFactor.Image, RecoveryFactor.Password],
group: 'my-app',
})

Methods

getRecoveryUrl()

Generates the recovery URL to share with the user.

Returns: Promise<string> (TypeScript) | String (Kotlin/Swift)

const recoveryUrl = await sdk.getRecoveryUrl()
console.log(recoveryUrl)
// "https://unforgettable.app/c#id=...&epk=...&f=1,3&g=my-app"

Throws:

  • CryptoError - If key generation fails

getRecoveredData()

Retrieves the complete recovered data including recovery key.

Returns: Promise<RecoveredData> (TypeScript) | RecoveredData (Kotlin/Swift)

try {
const data = await sdk.getRecoveredData()
console.log('Recovery Key:', data.recoveryKey)
} catch (error) {
if (error instanceof NotFoundError) {
console.log('Data not ready yet')
}
}

Throws:

  • NotFoundError - Data transfer not found (user hasn't completed recovery)
  • NetworkError - Network connectivity issues
  • CryptoError - Decryption failed
  • InvalidResponse - Server returned invalid data

getRecoveredKey()

Convenience method to retrieve only the recovery key.

Returns: Promise<string> (TypeScript) | String (Kotlin/Swift)

const recoveryKey = await sdk.getRecoveredKey()
// Equivalent to: (await sdk.getRecoveredData()).recoveryKey

Throws:

  • Same as getRecoveredData()

Types

UnforgettableSdkOptions

Configuration options for initializing the SDK.

interface UnforgettableSdkOptions {
mode: 'create' | 'restore'
appUrl?: string
apiUrl?: string
factors?: RecoveryFactor[]
walletAddress?: string
group?: string
customParams?: Record<string, string>
}

Properties

PropertyTypeDefaultDescription
mode'create' | 'restore'-Required. Operation mode
appUrlstring'https://unforgettable.app'Unforgettable app URL
apiUrlstring'https://api.unforgettable.app'API endpoint URL
factorsRecoveryFactor[][]Recovery factors to enable
walletAddressstringundefinedWallet address (required for restore mode)
groupstringundefinedGroup identifier for organizing keys
customParamsRecord<string, string>undefinedCustom URL parameters

RecoveredData

Data returned from recovery operations.

interface RecoveredData {
recoveryKey: string
}

Properties

PropertyTypeDescription
recoveryKeystringThe decrypted recovery/private key

UnforgettableMode

Recovery operation mode.

type UnforgettableMode = 'create' | 'restore'

Properties

mode

The operation mode (create or restore).

Type: UnforgettableMode

Read-only: Yes

console.log(sdk.mode) // 'create' or 'restore'

appUrl

The Unforgettable app URL.

Type: string

Read-only: Yes

console.log(sdk.appUrl) // 'https://unforgettable.app'

factors

The recovery factors configured for this instance.

Type: RecoveryFactor[]

Read-only: Yes

console.log(sdk.factors) // [RecoveryFactor.Face, RecoveryFactor.Image, RecoveryFactor.Password]

walletAddress

The wallet address (if specified).

Type: string | undefined

Read-only: Yes

console.log(sdk.walletAddress) // '0x...' or undefined

group

The group identifier (if specified).

Type: string | undefined

Read-only: Yes

console.log(sdk.group) // 'my-app' or undefined

customParams

Custom URL parameters (if specified).

Type: Record<string, string> | undefined

Read-only: Yes

console.log(sdk.customParams) // { theme: 'dark' } or undefined

Examples

Create Recovery Flow

import { UnforgettableSdk, RecoveryFactor, NotFoundError } from '@rarimo/unforgettable-sdk'

async function setupRecovery() {
// Initialize SDK
const sdk = new UnforgettableSdk({
mode: 'create',
factors: [RecoveryFactor.Face, RecoveryFactor.Image, RecoveryFactor.Password],
group: 'my-wallet',
})

// Get recovery URL
const url = await sdk.getRecoveryUrl()
displayQRCode(url)

// Poll for recovery key
const maxAttempts = 60
for (let i = 0; i < maxAttempts; i++) {
try {
const key = await sdk.getRecoveredKey()
console.log('Recovery successful!')
return key
} catch (error) {
if (error instanceof NotFoundError) {
await sleep(3000)
} else {
throw error
}
}
}

throw new Error('Recovery timeout')
}

Restore Account Flow

async function restoreAccount(walletAddress: string) {
const sdk = new UnforgettableSdk({
mode: 'restore',
walletAddress,
factors: [RecoveryFactor.Face],
})

const url = await sdk.getRecoveryUrl()
displayQRCode(url)

// Poll for restored key
while (true) {
try {
const data = await sdk.getRecoveredData()
console.log('Account restored!')
console.log('Key:', data.recoveryKey)
return data
} catch (error) {
if (error instanceof NotFoundError) {
await sleep(3000)
} else {
throw error
}
}
}
}

Error Handling

All SDK methods can throw errors. Always use try-catch:

try {
const key = await sdk.getRecoveredKey()
} catch (error) {
if (error instanceof NotFoundError) {
// Data not ready, retry
} else if (error.name === 'NetworkError') {
// Network issue
} else if (error.name === 'CryptoError') {
// Encryption/decryption failed
} else {
// Other error
}
}

See Error Reference for detailed error documentation.

Next Steps