import { STORAGE_KEYS } from '@/common/constants/storageKeys'; import AsyncStorage from '@react-native-async-storage/async-storage'; import * as Crypto from 'expo-crypto'; import * as FileSystem from 'expo-file-system'; import * as ImageManipulator from 'expo-image-manipulator'; import { fetch as expoFetch } from 'expo/fetch'; const API_KEY = process.env.EXPO_PUBLIC_GEMINI_API_KEY || ''; const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models?key=${API_KEY}`; // 1x1 white JPEG, 107 bytes const TINY_JPEG = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkS' + 'Ew8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJ' + 'CQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy' + 'MjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAA' + 'AAAAAAAAECAwQFBgcICQoL/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/x' + 'AAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQ' + 'MRAD8ALQAA/9k='; let awakened = false; export function awakenAddLog() { if (awakened) return; awakened = true; Promise.allSettled([awakenGemini(), awakenImageManipulator(), awakenAsyncStorage()]); Crypto.randomUUID(); void new TextDecoder(); } async function awakenGemini() { await expoFetch(GEMINI_URL, { method: 'GET' }).catch(() => {}); } async function awakenImageManipulator() { const path = `${FileSystem.cacheDirectory}awaken.jpg`; await FileSystem.writeAsStringAsync(path, TINY_JPEG, { encoding: FileSystem.EncodingType.Base64, }); await ImageManipulator.manipulateAsync(path, [{ resize: { width: 1 } }], { compress: 1, format: ImageManipulator.SaveFormat.JPEG, }); } async function awakenAsyncStorage() { await AsyncStorage.multiGet([ STORAGE_KEYS.SESSION_LOGS, STORAGE_KEYS.CAMERA_MODE, STORAGE_KEYS.CROP_DIMS, STORAGE_KEYS.SUGGESTIONS, ]); }