Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / desktop / endOfTrialHelpers.ts
blobf0f6211266a1663953592dcdf35506665efbd694
1 import { hasInboxDesktopFeature, invokeInboxDesktopIPC } from '@proton/shared/lib/desktop/ipcHelpers';
3 import type createApi from '../api/createApi';
4 import { getApiError } from '../api/helpers/apiErrorHelper';
5 import type { AuthenticationStore } from '../authentication/createAuthenticationStore';
6 import { handleLogout } from '../authentication/logout';
7 import type { APP_NAMES } from '../constants';
8 import { API_CUSTOM_ERROR_CODES } from '../errors';
10 export const endOfTrialIPCCall = () => {
11     if (hasInboxDesktopFeature('MultiAccount')) {
12         invokeInboxDesktopIPC({
13             type: 'trialEnd',
14         });
15     } else {
16         invokeInboxDesktopIPC({
17             type: 'trialEnd',
18             payload: 'trialEnded',
19         });
20     }
23 export const resetEndOfTrialIPCCall = () => {
24     if (!hasInboxDesktopFeature('MultiAccount')) {
25         invokeInboxDesktopIPC({
26             type: 'trialEnd',
27             payload: 'resetTrialEnded',
28         });
29     }
32 export const listenFreeTrialSessionExpiration = (
33     appName: APP_NAMES,
34     authentication: AuthenticationStore,
35     api: ReturnType<typeof createApi>
36 ) => {
37     const runEffect = async () => {
38         try {
39             await handleLogout({ appName, authentication, clearDeviceRecoveryData: true, type: 'full' });
40         } finally {
41             endOfTrialIPCCall();
42         }
43     };
45     api.addEventListener((event) => {
46         if (event.type === 'logout' && event.payload.error) {
47             const { code } = getApiError(event.payload.error?.originalError);
49             if (code === API_CUSTOM_ERROR_CODES.INBOX_DESKTOP_TRIAL_END) {
50                 runEffect();
51                 return true;
52             }
53         }
55         return false;
56     });