1*082815dcSEvan Baconimport JsonFile from '@expo/json-file'; 2*082815dcSEvan Baconimport { boolish } from 'getenv'; 3*082815dcSEvan Baconimport { homedir } from 'os'; 4*082815dcSEvan Baconimport * as path from 'path'; 5*082815dcSEvan Bacon 6*082815dcSEvan Baconexport type UserSettingsData = { 7*082815dcSEvan Bacon developmentCodeSigningId?: string; 8*082815dcSEvan Bacon appleId?: string; 9*082815dcSEvan Bacon accessToken?: string; 10*082815dcSEvan Bacon auth?: UserData | null; 11*082815dcSEvan Bacon ignoreBundledBinaries?: string[]; 12*082815dcSEvan Bacon openDevToolsAtStartup?: boolean; 13*082815dcSEvan Bacon PATH?: string; 14*082815dcSEvan Bacon sendTo?: string; 15*082815dcSEvan Bacon uuid?: string; 16*082815dcSEvan Bacon}; 17*082815dcSEvan Bacon 18*082815dcSEvan Baconexport type UserData = { 19*082815dcSEvan Bacon appleId?: string; 20*082815dcSEvan Bacon userId?: string; 21*082815dcSEvan Bacon username?: string; 22*082815dcSEvan Bacon currentConnection?: ConnectionType; 23*082815dcSEvan Bacon sessionSecret?: string; 24*082815dcSEvan Bacon}; 25*082815dcSEvan Bacon 26*082815dcSEvan Baconexport type ConnectionType = 27*082815dcSEvan Bacon | 'Access-Token-Authentication' 28*082815dcSEvan Bacon | 'Username-Password-Authentication' 29*082815dcSEvan Bacon | 'facebook' 30*082815dcSEvan Bacon | 'google-oauth2' 31*082815dcSEvan Bacon | 'github'; 32*082815dcSEvan Bacon 33*082815dcSEvan Bacon// The ~/.expo directory is used to store authentication sessions, 34*082815dcSEvan Bacon// which are shared between EAS CLI and Expo CLI. 35*082815dcSEvan Baconexport function getExpoHomeDirectory() { 36*082815dcSEvan Bacon const home = homedir(); 37*082815dcSEvan Bacon 38*082815dcSEvan Bacon if (process.env.__UNSAFE_EXPO_HOME_DIRECTORY) { 39*082815dcSEvan Bacon return process.env.__UNSAFE_EXPO_HOME_DIRECTORY; 40*082815dcSEvan Bacon } else if (boolish('EXPO_STAGING', false)) { 41*082815dcSEvan Bacon return path.join(home, '.expo-staging'); 42*082815dcSEvan Bacon } else if (boolish('EXPO_LOCAL', false)) { 43*082815dcSEvan Bacon return path.join(home, '.expo-local'); 44*082815dcSEvan Bacon } 45*082815dcSEvan Bacon return path.join(home, '.expo'); 46*082815dcSEvan Bacon} 47*082815dcSEvan Bacon 48*082815dcSEvan Baconexport function getUserStatePath() { 49*082815dcSEvan Bacon return path.join(getExpoHomeDirectory(), 'state.json'); 50*082815dcSEvan Bacon} 51*082815dcSEvan Bacon 52*082815dcSEvan Baconexport function getUserState() { 53*082815dcSEvan Bacon return new JsonFile<UserSettingsData>(getUserStatePath(), { 54*082815dcSEvan Bacon jsonParseErrorDefault: {}, 55*082815dcSEvan Bacon // This will ensure that an error isn't thrown if the file doesn't exist. 56*082815dcSEvan Bacon cantReadFileDefault: {}, 57*082815dcSEvan Bacon }); 58*082815dcSEvan Bacon} 59