@stainless-code/persist
Version:
Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes
41 lines (40 loc) • 1.81 kB
text/typescript
import { f as StateStorage, u as PersistStorage } from "../persist-core-B649IGlX.mjs";
//#region src/adapters/backends/secure-store.d.ts
/**
* `StateStorage` over `expo-secure-store` — fully async, string-wire, backed
* by the platform keychain/keystore. Values are encrypted at rest by the OS.
*
* **~2KB value limit per key** (platform-imposed) — use this for small secrets
* (auth tokens, short prefs), not large state. Oversized writes reject; pair
* `partialize` to persist only a small slice.
*
* SecureStore keys must match `/^[\w.-]+$/`. Persist names using colons (e.g.
* `auth:token:v1`) are sanitized — characters outside that set become `_` — so
* colon-style names round-trip consistently across get/set/remove.
*
* @example
* ```ts
* import { secureStoreStateStorage } from "@stainless-code/persist/backends/secure-store";
*
* const storage = secureStoreStateStorage();
* ```
*/
declare function secureStoreStateStorage(): StateStorage;
/**
* Build a JSON-encoded `PersistStorage` over `expo-secure-store`. Async backend
* → `useHydrated` gating is mandatory. **~2KB value limit per key** — keep
* persisted state small; use `partialize` to project a tiny slice (e.g. an auth
* token) and a different backend (IndexedDB, MMKV) for larger state.
*
* @example
* ```ts
* import { createSecureStoreStorage } from "@stainless-code/persist/backends/secure-store";
* import { persistStore } from "@stainless-code/persist/sources/tanstack-store";
*
* const storage = createSecureStoreStorage<AuthToken>()!;
* persistStore(store, { name: "auth:token:v1", storage, partialize: (s) => s.token });
* ```
*/
declare function createSecureStoreStorage<S>(): PersistStorage<S> | undefined;
//#endregion
export { createSecureStoreStorage, secureStoreStateStorage };