UNPKG

@yoroi/swap

Version:
44 lines (36 loc) 1.16 kB
import {parseSafe} from '@yoroi/common' import {Swap, BaseStorage} from '@yoroi/types' import AsyncStorage from '@react-native-async-storage/async-storage' import {freeze} from 'immer' const initialDeps = {storage: AsyncStorage} as const export function swapStorageMaker( deps: {storage: BaseStorage | typeof AsyncStorage} = initialDeps, ): Readonly<Swap.Storage> { const {storage} = deps // TODO: migrate to key-manager helper const settings: Readonly<Swap.Storage['settings']> = { save: (newSettings) => storage.setItem(swapStorageSettingsKey, JSON.stringify(newSettings)), read: () => storage.getItem(swapStorageSettingsKey).then( (value) => (parseSafe(value) as Swap.ManagerSettings) ?? { slippage: 1, routingPreference: 'auto', }, ), remove: () => storage.removeItem(swapStorageSettingsKey), key: swapStorageSettingsKey, } as const const clear = async () => { await Promise.all([settings.remove()]) } return freeze( { settings, clear, } as const, true, ) } export const swapStorageSettingsKey = 'swap-settings'