Merge branch 'IDTEAM-1.26.0' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / api / settings.ts
blobac6c329126ae6a615c80b7d604469f9ff7d6bf34
1 import type { DENSITY } from '@proton/shared/lib/constants';
2 import type { NewsletterSubscriptionUpdateData } from '@proton/shared/lib/helpers/newsletter';
3 import type {
4     AI_ASSISTANT_ACCESS,
5     DRAWER_VISIBILITY,
6     SETTINGS_DATE_FORMAT,
7     SETTINGS_LOG_AUTH_STATE,
8     SETTINGS_TIME_FORMAT,
9     SETTINGS_WEEK_START,
10 } from '@proton/shared/lib/interfaces';
11 import type { ThemeSetting, ThemeTypes } from '@proton/shared/lib/themes/themes';
13 import type { RegistrationOptions } from '../../lib/webauthn/interface';
15 export const TOTP_WRONG_ERROR = 12060;
17 export const getSettings = () => ({
18     url: 'core/v4/settings',
19     method: 'get',
20 });
22 export const updateUsername = (data: { Username: string }) => ({
23     url: 'core/v4/settings/username',
24     method: 'put',
25     data,
26 });
28 export const updatePassword = (data: { PersistPasswordScope: boolean }) => ({
29     url: 'core/v4/settings/password',
30     method: 'put',
31     data,
32 });
34 export const upgradePassword = () => ({
35     url: 'core/v4/settings/password/upgrade',
36     method: 'put',
37 });
39 export const updateLocale = (Locale: string) => ({
40     url: 'core/v4/settings/locale',
41     method: 'put',
42     data: { Locale },
43 });
45 export const getNews = () => ({
46     url: 'core/v4/settings/news',
47     method: 'get',
48 });
50 export const patchNews = (data: NewsletterSubscriptionUpdateData) => ({
51     url: 'core/v4/settings/news',
52     method: 'PATCH',
53     data,
54 });
56 export const getNewsExternal = () => ({
57     url: 'core/v4/settings/news/external',
58     method: 'get',
59 });
61 export const patchNewsExternal = (data: NewsletterSubscriptionUpdateData) => ({
62     url: 'core/v4/settings/news/external',
63     method: 'PATCH',
64     data,
65 });
67 export const updateInvoiceText = (InvoiceText: string) => ({
68     url: 'core/v4/settings/invoicetext',
69     method: 'put',
70     data: { InvoiceText },
71 });
73 export const updateLogAuth = (LogAuth: SETTINGS_LOG_AUTH_STATE) => ({
74     url: 'core/v4/settings/logauth',
75     method: 'put',
76     data: { LogAuth },
77 });
79 export const enableHighSecurity = () => ({
80     url: 'core/v4/settings/highsecurity',
81     method: 'post',
82     data: {},
83 });
85 export const disableHighSecurity = () => ({
86     url: 'core/v4/settings/highsecurity',
87     method: 'delete',
88     data: {},
89 });
91 export const updateDensity = (Density: DENSITY) => ({
92     url: 'core/v4/settings/density',
93     method: 'put',
94     data: { Density },
95 });
97 export const updateEmail = (data: { Email: string; PersistPasswordScope?: boolean }) => ({
98     url: 'core/v4/settings/email',
99     method: 'put',
100     data,
103 export const updateNotifyEmail = (Notify: number) => ({
104     url: 'core/v4/settings/email/notify',
105     method: 'put',
106     data: { Notify },
109 export const updateResetEmail = (data: { Reset: number; PersistPasswordScope?: boolean }) => ({
110     url: 'core/v4/settings/email/reset',
111     method: 'put',
112     data,
115 export const verifyEmail = (Token: string) => ({
116     url: 'core/v4/settings/email/verify',
117     method: 'post',
118     data: { Token },
121 export const updatePhone = (data: { Phone: string; PersistPasswordScope?: boolean }) => ({
122     url: 'core/v4/settings/phone',
123     method: 'put',
124     data,
127 export const updateNotifyPhone = (Notify: string) => ({
128     url: 'core/v4/settings/phone/notify',
129     method: 'put',
130     data: { Notify },
133 export const updateResetPhone = (data: { Reset: number; PersistPasswordScope?: boolean }) => ({
134     url: 'core/v4/settings/phone/reset',
135     method: 'put',
136     data,
139 export const verifyPhone = (Token: string) => ({
140     url: 'core/v4/settings/phone/verify',
141     method: 'post',
142     data: { Token },
145 export const registerSecurityKey = (data: {
146     RegistrationOptions: RegistrationOptions;
147     ClientData: string;
148     AttestationObject: string;
149     Transports: string[];
150     Name: string;
151 }) => ({
152     url: 'core/v4/settings/2fa/register',
153     method: 'post',
154     data,
157 export const getSecurityKeyChallenge = (crossPlatform: boolean) => ({
158     url: 'core/v4/settings/2fa/register',
159     method: 'get',
160     params: {
161         CrossPlatform: +crossPlatform,
162     },
165 export const removeSecurityKey = (credentialID: string, data: { PersistPasswordScope?: boolean } = {}) => ({
166     url: `core/v4/settings/2fa/${credentialID}/remove`,
167     method: 'post',
168     data,
171 export const renameSecurityKey = (credentialID: string, data: { Name: string }) => ({
172     url: `core/v4/settings/2fa/${credentialID}/rename`,
173     method: 'put',
174     data,
177 export const setupTotp = (TOTPSharedSecret: string, TOTPConfirmation: string) => ({
178     url: 'core/v4/settings/2fa/totp',
179     method: 'post',
180     data: { TOTPSharedSecret, TOTPConfirmation },
183 export const disableTotp = () => ({
184     url: 'core/v4/settings/2fa/totp',
185     method: 'put',
188 export const disable2FA = (data?: { PersistPasswordScope?: boolean }) => ({
189     url: 'core/v4/settings/2fa',
190     method: 'put',
191     data,
194 export const updateHideDrawer = (HideSidePanel: DRAWER_VISIBILITY) => ({
195     url: 'core/v4/settings/hide-side-panel',
196     method: 'put',
197     data: { HideSidePanel },
200 export const updateTheme = (data: ThemeSetting) => ({
201     url: 'core/v4/settings/theme',
202     method: 'put',
203     data,
206 export const updateThemeType = (ThemeType: ThemeTypes) => ({
207     url: 'core/v4/settings/themetype',
208     method: 'put',
209     data: { ThemeType },
212 export const updateWeekStart = (WeekStart: SETTINGS_WEEK_START) => ({
213     url: 'core/v4/settings/weekstart',
214     method: 'put',
215     data: { WeekStart },
218 export const updateDateFormat = (DateFormat: SETTINGS_DATE_FORMAT) => ({
219     url: 'core/v4/settings/dateformat',
220     method: 'put',
221     data: { DateFormat },
224 export const updateTimeFormat = (TimeFormat: SETTINGS_TIME_FORMAT) => ({
225     url: 'core/v4/settings/timeformat',
226     method: 'put',
227     data: { TimeFormat },
230 export const updateWelcomeFlags = () => ({
231     url: 'core/v4/settings/welcome',
232     method: 'put',
235 export const updateEarlyAccess = (data: { EarlyAccess: number }) => ({
236     url: 'core/v4/settings/earlyaccess',
237     method: 'put',
238     data,
241 export const updateFlags = (data: { Welcomed: number }) => ({
242     url: 'core/v4/settings/flags',
243     method: 'put',
244     data,
247 export const updateTelemetry = (data: { Telemetry: number }) => ({
248     url: 'core/v4/settings/telemetry',
249     method: 'put',
250     data,
253 export const updateCrashReports = (data: { CrashReports: number }) => ({
254     url: 'core/v4/settings/crashreports',
255     method: 'put',
256     data,
259 export const getBreaches = () => ({
260     url: 'account/v4/breaches',
261     method: 'get',
264 export const getRecentBreaches = () => ({
265     url: 'account/v4/breaches?Recent=true',
266     method: 'get',
269 export const enableBreachAlert = () => ({
270     url: 'core/v4/settings/breachalerts',
271     method: 'post',
272     data: {},
275 export const setProductDisabled = (data: { Product: number; Disabled: 1 | 0 }) => ({
276     url: 'core/v4/settings/product-disabled',
277     method: 'put',
278     data,
281 export const disableBreachAlert = () => ({
282     url: 'core/v4/settings/breachalerts',
283     method: 'delete',
284     data: {},
287 export const updateAIAssistant = (AIAssistantFlags: AI_ASSISTANT_ACCESS) => ({
288     url: 'core/v4/settings/ai-assistant-flags',
289     method: 'put',
290     data: { AIAssistantFlags },