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}