xref: /expo/packages/@expo/config/src/getUserState.ts (revision 082815dc)
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