Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / interfaces / UserSettings.ts
blob8f44c008134a1de0a300adb59b3d52d0f4ba0bbd
1 import type { ThemeSetting } from '@proton/shared/lib/themes/themes';
3 import type { DENSITY } from '../constants';
4 import type { RegisteredKey } from '../webauthn/interface';
5 import type { ChecklistId } from './Checklist';
7 export enum SETTINGS_STATUS {
8     UNVERIFIED = 0,
9     VERIFIED = 1,
10     INVALID = 2,
13 export enum SETTINGS_PASSWORD_MODE {
14     ONE_PASSWORD_MODE = 1,
15     TWO_PASSWORD_MODE = 2,
18 export enum SETTINGS_LOG_AUTH_STATE {
19     DISABLE = 0,
20     BASIC = 1,
21     ADVANCED = 2,
24 export enum SETTINGS_PROTON_SENTINEL_STATE {
25     DISABLED = 0,
26     ENABLED = 1,
29 export enum DARK_WEB_MONITORING_STATE {
30     DISABLED = 0,
31     ENABLED = 1,
34 export enum DARK_WEB_MONITORING_EMAILS_STATE {
35     DISABLED = 0,
36     ENABLED = 1,
39 export enum DARK_WEB_MONITORING_ELIGIBILITY_STATE {
40     NONPAID = 0,
41     PAID = 1,
44 export enum SETTINGS_WEEK_START {
45     LOCALE_DEFAULT = 0,
46     MONDAY = 1,
47     TUESDAY = 2,
48     WEDNESDAY = 3,
49     THURSDAY = 4,
50     FRIDAY = 5,
51     SATURDAY = 6,
52     SUNDAY = 7,
55 export enum SETTINGS_DATE_FORMAT {
56     LOCALE_DEFAULT = 0,
57     DDMMYYYY = 1,
58     MMDDYYYY = 2,
59     YYYYMMDD = 3,
62 export enum SETTINGS_TIME_FORMAT {
63     LOCALE_DEFAULT = 0,
64     H24 = 1,
65     H12 = 2,
68 export enum SETTINGS_2FA_ENABLED {
69     OTP = 1,
70     FIDO2 = 2,
73 export const enum DRAWER_VISIBILITY {
74     SHOW = 0,
75     HIDE = 1,
78 export interface Flags {
79     Welcomed: number;
80     SupportPgpV6Keys: number;
83 export enum AI_ASSISTANT_ACCESS {
84     UNSET = 0,
85     OFF = 1,
86     SERVER_ONLY = 2,
87     CLIENT_ONLY = 3,
90 export const USED_CLIENT_FLAGS = {
91     OTHER: BigInt(Math.pow(2, 0)),
92     // Available: BigInt(Math.pow(2, 1)),
93     WEB_DOCS: BigInt(Math.pow(2, 2)),
94     IMPORT_EXPORT: BigInt(Math.pow(2, 3)),
95     BRIDGE: BigInt(Math.pow(2, 4)),
96     ADMIN: BigInt(Math.pow(2, 5)),
97     WEB_VPN_SETTINGS: BigInt(Math.pow(2, 6)),
98     WEB_MAIL_SETTINGS: BigInt(Math.pow(2, 7)),
99     WEB: BigInt(Math.pow(2, 8)),
100     WEB_CALENDAR: BigInt(Math.pow(2, 9)),
101     WEB_CONTACTS: BigInt(Math.pow(2, 10)),
102     WEB_DRIVE: BigInt(Math.pow(2, 11)),
103     WEB_MAIL: BigInt(Math.pow(2, 12)),
104     WEB_VPN: BigInt(Math.pow(2, 13)),
105     WEB_ACCOUNT: BigInt(Math.pow(2, 14)),
106     WEB_WALLET: BigInt(Math.pow(2, 15)),
107     IOS_WALLET: BigInt(Math.pow(2, 16)),
108     ANDROID_WALLET: BigInt(Math.pow(2, 17)),
109     WINDOWS_WALLET: BigInt(Math.pow(2, 18)),
110     LINUX_WALLET: BigInt(Math.pow(2, 19)),
111     BROWSER_VPN: BigInt(Math.pow(2, 20)),
112     MACOS_WALLET: BigInt(Math.pow(2, 21)),
113     WINDOWS_INBOX: BigInt(Math.pow(2, 22)),
114     WEB_ADMIN: BigInt(Math.pow(2, 23)),
115     WINDOWS_EPPIE: BigInt(Math.pow(2, 24)),
116     WINDOWS_BRIDGE: BigInt(Math.pow(2, 25)),
117     WINDOWS_DRIVE: BigInt(Math.pow(2, 26)),
118     WINDOWS_IMPORT_EXPORT: BigInt(Math.pow(2, 27)),
119     WINDOWS_VPN: BigInt(Math.pow(2, 28)),
120     WINDOWS_EXPORT: BigInt(Math.pow(2, 29)),
121     LINUX_EPPIE: BigInt(Math.pow(2, 30)),
122     LINUX_EXPORT: BigInt(Math.pow(2, 31)),
123     LINUX_IMPORT_EXPORT: BigInt(Math.pow(2, 32)),
124     LINUX_BRIDGE: BigInt(Math.pow(2, 33)),
125     LINUX_VPN: BigInt(Math.pow(2, 34)),
126     LINUX_PASS: BigInt(Math.pow(2, 35)),
127     ANDROID_PASS: BigInt(Math.pow(2, 36)),
128     IOS_PASS: BigInt(Math.pow(2, 37)),
129     WEB_PASS: BigInt(Math.pow(2, 38)),
130     MACOS_PASS: BigInt(Math.pow(2, 39)),
131     WINDOWS_PASS: BigInt(Math.pow(2, 40)),
132     MACOS_BRIDGE: BigInt(Math.pow(2, 41)),
133     MACOS_DRIVE: BigInt(Math.pow(2, 42)),
134     MACOS_IMPORT_EXPORT: BigInt(Math.pow(2, 43)),
135     MACOS_VPN: BigInt(Math.pow(2, 44)),
136     MACOS_EXPORT: BigInt(Math.pow(2, 45)),
137     MACOS_EPPIE: BigInt(Math.pow(2, 46)),
138     MACOS_INBOX: BigInt(Math.pow(2, 47)),
139     IOS: BigInt(Math.pow(2, 48)),
140     IOS_CALENDAR: BigInt(Math.pow(2, 49)),
141     // Available: BigInt(Math.pow(2, 50)),
142     IOS_DRIVE: BigInt(Math.pow(2, 51)),
143     IOS_MAIL: BigInt(Math.pow(2, 52)),
144     IOS_VPN: BigInt(Math.pow(2, 53)),
145     IOS_EPPIE: BigInt(Math.pow(2, 54)),
146     LINUX_INBOX: BigInt(Math.pow(2, 55)),
147     ANDROID: BigInt(Math.pow(2, 56)),
148     ANDROID_CALENDAR: BigInt(Math.pow(2, 57)),
149     ANDROID_EPPIE: BigInt(Math.pow(2, 58)),
150     ANDROID_DRIVE: BigInt(Math.pow(2, 59)),
151     ANDROID_MAIL: BigInt(Math.pow(2, 60)),
152     ANDROID_VPN: BigInt(Math.pow(2, 61)),
153     ANDROID_TV_VPN: BigInt(Math.pow(2, 62)),
154     APPLE_TV_VPN: BigInt(Math.pow(2, 63)),
157 export interface UserSettings {
158     '2FA': {
159         Enabled: number; // 0 for disabled, 1 for OTP, 2 for FIDO2, 3 for both
160         Allowed: number; // 0 for disabled, 1 for OTP, 2 for FIDO2, 3 for both
161         ExpirationTime: number | null; // If set, after this time force add 2FA
162         RegisteredKeys: RegisteredKey[];
163     };
164     AIAssistantFlags: AI_ASSISTANT_ACCESS;
165     AppWelcome: {
166         Account?: string[];
167         Calendar?: string[];
168         Contacts?: string[];
169         Mail?: string[];
170         Drive?: string[];
171     };
172     BreachAlerts: {
173         Eligible: number; // 0 for free user, 1 for paid user
174         Value: number; // 0 for disabled, 1 for enabled
175         EmailNotifications: number;
176     };
177     Checklists?: ChecklistId[];
178     CrashReports: 1 | 0;
179     DateFormat: SETTINGS_DATE_FORMAT;
180     DeviceRecovery: 0 | 1;
181     Density: DENSITY;
182     EarlyAccess: number;
183     Email: {
184         Value: string;
185         Status: SETTINGS_STATUS;
186         Notify: number;
187         Reset: number;
188     };
189     Flags: Flags;
190     HideSidePanel: DRAWER_VISIBILITY;
191     InvoiceText: string;
192     Locale: string;
193     LogAuth: SETTINGS_LOG_AUTH_STATE;
194     News: number;
195     Phone: {
196         Value: string;
197         Status: SETTINGS_STATUS;
198         Notify: number;
199         Reset: number;
200     };
201     Password: {
202         Mode: SETTINGS_PASSWORD_MODE;
203         ExpirationTime: number; // If set, after this time force password change
204     };
205     HighSecurity: {
206         /**
207          * 1 => user can enable High Security, 0 => can't enable
208          */
209         Eligible: 1 | 0;
210         /**
211          * 1 => user has High Security enabled, 0 => disabled
212          */
213         Value: SETTINGS_PROTON_SENTINEL_STATE;
214     };
215     Referral?: {
216         /**
217          * 0 - Not elligible to
218          * 1 - Elligible to "refer a friend"
219          */
220         Eligible: boolean;
221         /**
222          * The referral link
223          * will always be a string containing the link.
224          */
225         Link: string;
226     };
227     SessionAccountRecovery: 1 | 0;
228     Telemetry: 1 | 0;
229     Theme: ThemeSetting | null;
230     ThemeType: number;
231     TimeFormat: SETTINGS_TIME_FORMAT;
232     WeekStart: SETTINGS_WEEK_START;
233     WelcomeFlag: number;
234     Welcome: number;
235     ProductDisabled: {
236         Mail: number;
237         VPN: number;
238         Calendar: number;
239         Drive: number;
240         Pass: number;
241         Wallet: number;
242     };
243     UsedClientFlags: number;