Live video on the AT Protocol
1import Storage from "expo-sqlite/kv-store"; 2import { Lock } from "./lock"; 3import { AQStorage } from "./storage.shared"; 4 5// Needed because concurrent calls seem to return with a locked database 6const lock = new Lock(); 7 8export default class NativeStorage implements AQStorage { 9 async getItem(key: string): Promise<string | null> { 10 return lock.critical(async () => { 11 try { 12 const value = await Storage.getItem(key); 13 return value ?? null; 14 } catch (e) { 15 console.error(`error in NativeStorage.getItem: ${e}`); 16 throw e; 17 } 18 }); 19 } 20 21 async setItem(key: string, value: string): Promise<void> { 22 return lock.critical(async () => { 23 try { 24 await Storage.setItem(key, value); 25 } catch (e) { 26 console.error(`error in NativeStorage.setItem: ${e}`); 27 throw e; 28 } 29 }); 30 } 31 32 async removeItem(key: string): Promise<void> { 33 return lock.critical(async () => { 34 try { 35 await Storage.removeItem(key); 36 } catch (e) { 37 console.error(`error in NativeStorage.removeItem: ${e}`); 38 throw e; 39 } 40 }); 41 } 42}