1import * as Effect from "effect/Effect";
2
3import { runtime } from "../lib/runtime";
4import * as MobilePreferences from "./mobile-preferences";
5import * as MobileStorage from "./mobile-storage";
6
7export type { Preferences } from "./mobile-preferences";
8export type { AgentAwarenessRegistrationRecord, RecentThreadShortcut } from "./mobile-storage";
9export { MobilePreferencesLoadError, MobilePreferencesSaveError } from "./mobile-preferences";
10export {
11 MobileDeviceIdGenerationError,
12 MobileStorageDecodeError,
13 MobileStorageEncodeError,
14} from "./mobile-storage";
15export { MobileSecureStorageError } from "./mobile-secure-storage";
16
17const runStorage = <A, E>(
18 use: (storage: MobileStorage.MobileStorage["Service"]) => Effect.Effect<A, E>,
19) => runtime.runPromise(MobileStorage.MobileStorage.pipe(Effect.flatMap(use)));
20
21const runPreferences = <A, E>(
22 use: (store: MobilePreferences.MobilePreferencesStore["Service"]) => Effect.Effect<A, E>,
23) => runtime.runPromise(MobilePreferences.MobilePreferencesStore.pipe(Effect.flatMap(use)));
24
25export const loadSavedConnections = () => runStorage((storage) => storage.loadSavedConnections);
26export const saveConnection = (
27 connection: Parameters<MobileStorage.MobileStorage["Service"]["saveConnection"]>[0],
28) => runStorage((storage) => storage.saveConnection(connection));
29
30export const loadPreferences = () => runPreferences((store) => store.load);
31export const savePreferencesPatch = (patch: Partial<MobilePreferences.Preferences>) =>
32 runPreferences((store) => store.savePatch(patch));
33export const updatePreferences = (
34 transform: (current: MobilePreferences.Preferences) => Partial<MobilePreferences.Preferences>,
35) => runPreferences((store) => store.update(transform));
36
37export const loadOrCreateAgentAwarenessDeviceId = () =>
38 runStorage((storage) => storage.loadOrCreateAgentAwarenessDeviceId);
39export const loadAgentAwarenessDeviceId = () =>
40 runStorage((storage) => storage.loadAgentAwarenessDeviceId);
41export const loadAgentAwarenessRegistrationRecord = () =>
42 runStorage((storage) => storage.loadAgentAwarenessRegistrationRecord);
43export const saveAgentAwarenessRegistrationRecord = (
44 record: MobileStorage.AgentAwarenessRegistrationRecord,
45) => runStorage((storage) => storage.saveAgentAwarenessRegistrationRecord(record));
46export const clearAgentAwarenessRegistrationRecord = () =>
47 runStorage((storage) => storage.clearAgentAwarenessRegistrationRecord);
48
49export const loadRecentThreadShortcuts = () =>
50 runStorage((storage) => storage.loadRecentThreadShortcuts);
51export const saveRecentThreadShortcuts = (
52 threads: ReadonlyArray<MobileStorage.RecentThreadShortcut>,
53) => runStorage((storage) => storage.saveRecentThreadShortcuts(threads));