src/react-native-app/gateways/Session.gateway.ts (31 lines of code) (raw):

// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 /** * Copied with modification from src/frontend/gateways/Session.gateway.ts */ import "react-native-get-random-values"; // Must be imported before 'uuid', see https://stackoverflow.com/a/68097811 import { v4 } from "uuid"; import AsyncStorage from "@react-native-async-storage/async-storage"; interface ISession { userId: string; currencyCode: string; } const sessionKey = "session"; const defaultSession = { userId: v4(), currencyCode: "USD", }; const SessionGateway = () => ({ async getSession(): Promise<ISession> { const sessionString = await AsyncStorage.getItem(sessionKey); if (!sessionString) { await AsyncStorage.setItem(sessionKey, JSON.stringify(defaultSession)); } return JSON.parse( sessionString || JSON.stringify(defaultSession), ) as ISession; }, setSessionValue<K extends keyof ISession>(key: K, value: ISession[K]) { const session = this.getSession(); return AsyncStorage.setItem( sessionKey, JSON.stringify({ ...session, [key]: value }), ); }, }); export default SessionGateway();