Storage adapters

Storage adapters control how FFDB persists auth and session-related state across runtimes. This reference covers adapter contracts, built-ins, and practical choices.

Interface

type StorageAdapter = {
  get(key: string): Promise<string | null> | string | null
  set(key: string, value: string): Promise<void> | void
  remove(key: string): Promise<void> | void
}

Built-in adapters

import { memoryStorage, browserStorage } from 'ffdb-client'

const mem = memoryStorage()
const local = browserStorage('local')
const session = browserStorage('session')
const indexeddb = browserStorage('indexeddb')

Behavior reference

  • Name
    memoryStorage()
    Description

    In-memory only. Fast and simple, but resets on reload/process exit.

  • Name
    browserStorage('local')
    Description

    Uses localStorage. Persists across browser restarts.

  • Name
    browserStorage('session')
    Description

    Uses sessionStorage. Tab-scoped persistence.

  • Name
    browserStorage('indexeddb')
    Description

    Async IndexedDB-backed storage for browser environments that prefer async storage semantics.

End-to-end usage

import { browserStorage, createClient } from 'ffdb-client'
import type { Database } from './ffdb.types'

const client = await createClient<Database>({
  config: {
    apiUrl: import.meta.env.VITE_FFDB_API_URL,
  },
  storage: browserStorage('local'),
})

const session = await client.auth.getSession()
console.log(session.data)

Custom adapter example

const customStorageAdapter = {
  async get(key: string) {
    return await myKV.get(key)
  },
  async set(key: string, value: string) {
    await myKV.set(key, value)
  },
  async remove(key: string) {
    await myKV.delete(key)
  },
}

Decision guide

  1. Use memoryStorage for tests and ephemeral sessions.
  2. Use browserStorage('local') for most web apps.
  3. Use browserStorage('session') when tab isolation is a requirement.
  4. Provide a custom adapter in React Native, Node, and desktop shells.

See also

  1. Reference: network adapters
  2. Offline overview
  3. Local cache

Was this page helpful?