import MMKVStorage from 'react-native-mmkv-storage'; import log from '../utils/log'; const MMKV = new MMKVStorage.Loader() // MODES.MULTI_PROCESS = ACCESSIBLE BY APP GROUP (iOS) .setProcessingMode(MMKVStorage.MODES.MULTI_PROCESS) .withEncryption() .initialize(); class UserPreferences { constructor() { this.mmkv = MMKV; this.encryptMigratedData(); } // It should run only once async encryptMigratedData() { try { const encryptMigration = await this.getBoolAsync('encryptMigration'); if (!encryptMigration) { // Encrypt the migrated data await this.mmkv.encryption.encrypt(); // Mark as completed await this.setBoolAsync('encryptMigration', true); } } catch (e) { log(e); } } async getStringAsync(key) { try { const value = await this.mmkv.getStringAsync(key); return value; } catch { return null; } } setStringAsync(key, value) { return this.mmkv.setStringAsync(key, value); } async getBoolAsync(key) { try { const value = await this.mmkv.getBoolAsync(key); return value; } catch { return null; } } setBoolAsync(key, value) { return this.mmkv.setBoolAsync(key, value); } async getMapAsync(key) { try { const value = await this.mmkv.getMapAsync(key); return value; } catch { return null; } } setMapAsync(key, value) { return this.mmkv.setMapAsync(key, value); } removeItem(key) { return this.mmkv.removeItem(key); } } const userPreferences = new UserPreferences(); export default userPreferences;